MCPcopy Create free account
hub / github.com/ElementsProject/elements / CreatePeginWitnessInner

Function CreatePeginWitnessInner

src/pegins.cpp:508–540  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

506
507template<typename T_tx_ref, typename T_merkle_block>
508CScriptWitness CreatePeginWitnessInner(const CAmount& value, const CAsset& asset, const uint256& genesis_hash, const CScript& claim_script, const T_tx_ref& tx_ref, const T_merkle_block& merkle_block)
509{
510 std::vector<unsigned char> value_bytes;
511 CVectorWriter ss_val(0, 0, value_bytes, 0);
512 try {
513 ss_val << value;
514 } catch (...) {
515 throw std::ios_base::failure("Amount serialization is invalid.");
516 }
517
518 // Strip witness data for proof inclusion since only TXID-covered fields matters
519 CDataStream ss_tx(SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS);
520 ss_tx << tx_ref;
521 const auto* ss_tx_ptr = UCharCast(ss_tx.data());
522 std::vector<unsigned char> tx_data_stripped(ss_tx_ptr, ss_tx_ptr + ss_tx.size());
523
524 // Serialize merkle block
525 CDataStream ss_txout_proof(SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS);
526 ss_txout_proof << merkle_block;
527 const auto* ss_txout_ptr = UCharCast(ss_txout_proof.data());
528 std::vector<unsigned char> txout_proof_bytes(ss_txout_ptr, ss_txout_ptr + ss_txout_proof.size());
529
530 // Construct pegin proof
531 CScriptWitness pegin_witness;
532 std::vector<std::vector<unsigned char>>& stack = pegin_witness.stack;
533 stack.push_back(value_bytes);
534 stack.push_back(std::vector<unsigned char>(asset.begin(), asset.end()));
535 stack.push_back(std::vector<unsigned char>(genesis_hash.begin(), genesis_hash.end()));
536 stack.push_back(std::vector<unsigned char>(claim_script.begin(), claim_script.end()));
537 stack.push_back(tx_data_stripped);
538 stack.push_back(txout_proof_bytes);
539 return pegin_witness;
540}
541
542CScriptWitness CreatePeginWitness(const CAmount& value, const CAsset& asset, const uint256& genesis_hash, const CScript& claim_script, const CTransactionRef& tx_ref, const CMerkleBlock& merkle_block)
543{

Callers 1

CreatePeginWitnessFunction · 0.85

Calls 6

UCharCastFunction · 0.85
dataMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected