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

Function copyInput

src/simplicity/elements/env.c:68–104  ·  view source on GitHub ↗

Initialize a 'sigInput' from a 'rawElementsInput', copying or hashing the data as needed. * * Precondition: NULL != result; * NULL != input; */

Source from the content-addressed store, hash-verified

66 * NULL != input;
67 */
68static void copyInput(sigInput* result, const rawElementsInput* input) {
69 *result = (sigInput){ .prevOutpoint = { .ix = input->prevIx }
70 , .sequence = input->sequence
71 , .isPegin = !!input->pegin
72 , .hasAnnex = !!input->annex
73 };
74
75 if (input->annex) hashBuffer(&result->annexHash, input->annex);
76 if (input->pegin) sha256_toMidstate(result->pegin.s, input->pegin);
77 sha256_toMidstate(result->prevOutpoint.txid.s, input->prevTxid);
78 hashBuffer(&result->txo.scriptPubKey, &input->txo.scriptPubKey);
79 copyRawConfidential(&result->txo.asset, input->txo.asset);
80 copyRawAmt(&result->txo.amt, input->txo.value);
81 hashBuffer(&result->scriptSigHash, &input->scriptSig);
82 hashBuffer(&result->issuance.assetRangeProofHash, &(rawElementsBuffer){0});
83 hashBuffer(&result->issuance.tokenRangeProofHash, &(rawElementsBuffer){0});
84 if (input->issuance.amount || input->issuance.inflationKeys) {
85 sha256_toMidstate(result->issuance.blindingNonce.s, input->issuance.blindingNonce);
86 copyRawAmt(&result->issuance.assetAmt, input->issuance.amount);
87 if (is_confidential(result->issuance.assetAmt.prefix)) hashBuffer(&result->issuance.assetRangeProofHash, &input->issuance.amountRangePrf);
88 if (0 == result->issuance.blindingNonce.s[0] && 0 == result->issuance.blindingNonce.s[1] &&
89 0 == result->issuance.blindingNonce.s[2] && 0 == result->issuance.blindingNonce.s[3] &&
90 0 == result->issuance.blindingNonce.s[4] && 0 == result->issuance.blindingNonce.s[5] &&
91 0 == result->issuance.blindingNonce.s[6] && 0 == result->issuance.blindingNonce.s[7]) {
92 sha256_toMidstate(result->issuance.contractHash.s, input->issuance.assetEntropy);
93 result->issuance.entropy = simplicity_generateIssuanceEntropy(&result->prevOutpoint, &result->issuance.contractHash);
94 copyRawAmt(&result->issuance.tokenAmt, input->issuance.inflationKeys);
95 if (is_confidential(result->issuance.tokenAmt.prefix)) hashBuffer(&result->issuance.tokenRangeProofHash, &input->issuance.inflationKeysRangePrf);
96 result->issuance.type = NEW_ISSUANCE;
97 } else {
98 sha256_toMidstate(result->issuance.entropy.s, input->issuance.assetEntropy);
99 result->issuance.type = REISSUANCE;
100 }
101 result->issuance.assetId = simplicity_calculateAsset(&result->issuance.entropy);
102 result->issuance.tokenId = simplicity_calculateToken(&result->issuance.entropy, result->issuance.assetAmt.prefix);
103 }
104}
105
106/* As specified in https://github.com/ElementsProject/elements/blob/de942511a67c3a3fcbdf002a8ee7e9ba49679b78/src/primitives/transaction.h#L304-L307. */
107static bool isFee(const rawElementsOutput* output) {

Callers 1

Calls 8

sha256_toMidstateFunction · 0.85
copyRawConfidentialFunction · 0.85
copyRawAmtFunction · 0.85
is_confidentialFunction · 0.85
hashBufferFunction · 0.70

Tested by

no test coverage detected