mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-22 23:48:12 +00:00
transaction: fix compile_output for OP_RETURN
This commit is contained in:
parent
8e017526ab
commit
38970cbd68
@ -161,38 +161,38 @@ int compile_output(const CoinType *coin, const HDNode *root, TxOutputType *in, T
|
|||||||
size_t addr_raw_len;
|
size_t addr_raw_len;
|
||||||
bool is_segwit;
|
bool is_segwit;
|
||||||
|
|
||||||
|
if (in->script_type == OutputScriptType_PAYTOOPRETURN) {
|
||||||
|
// only 0 satoshi allowed for OP_RETURN
|
||||||
|
if (in->amount != 0) {
|
||||||
|
return 0; // failed to compile output
|
||||||
|
}
|
||||||
|
uint32_t r = 0;
|
||||||
|
out->script_pubkey.bytes[0] = 0x6A; r++; // OP_RETURN
|
||||||
|
r += op_push(in->op_return_data.size, out->script_pubkey.bytes + r);
|
||||||
|
memcpy(out->script_pubkey.bytes + r, in->op_return_data.bytes, in->op_return_data.size); r += in->op_return_data.size;
|
||||||
|
out->script_pubkey.size = r;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
if (in->address_n_count > 0) {
|
if (in->address_n_count > 0) {
|
||||||
HDNode node;
|
HDNode node;
|
||||||
InputScriptType input_script_type;
|
InputScriptType input_script_type;
|
||||||
|
|
||||||
switch (in->script_type) {
|
switch (in->script_type) {
|
||||||
|
case OutputScriptType_PAYTOADDRESS:
|
||||||
case OutputScriptType_PAYTOOPRETURN:
|
input_script_type = InputScriptType_SPENDADDRESS;
|
||||||
// only 0 satoshi allowed for OP_RETURN
|
break;
|
||||||
if (in->amount != 0)
|
case OutputScriptType_PAYTOMULTISIG:
|
||||||
|
input_script_type = InputScriptType_SPENDMULTISIG;
|
||||||
|
break;
|
||||||
|
case OutputScriptType_PAYTOWITNESS:
|
||||||
|
input_script_type = InputScriptType_SPENDWITNESS;
|
||||||
|
break;
|
||||||
|
case OutputScriptType_PAYTOP2SHWITNESS:
|
||||||
|
input_script_type = InputScriptType_SPENDP2SHWITNESS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
return 0; // failed to compile output
|
return 0; // failed to compile output
|
||||||
uint32_t r = 0;
|
|
||||||
out->script_pubkey.bytes[0] = 0x6A; r++; // OP_RETURN
|
|
||||||
r += op_push(in->op_return_data.size, out->script_pubkey.bytes + r);
|
|
||||||
memcpy(out->script_pubkey.bytes + r, in->op_return_data.bytes, in->op_return_data.size); r += in->op_return_data.size;
|
|
||||||
out->script_pubkey.size = r;
|
|
||||||
return r;
|
|
||||||
|
|
||||||
case OutputScriptType_PAYTOADDRESS:
|
|
||||||
input_script_type = InputScriptType_SPENDADDRESS;
|
|
||||||
break;
|
|
||||||
case OutputScriptType_PAYTOMULTISIG:
|
|
||||||
input_script_type = InputScriptType_SPENDMULTISIG;
|
|
||||||
break;
|
|
||||||
case OutputScriptType_PAYTOWITNESS:
|
|
||||||
input_script_type = InputScriptType_SPENDWITNESS;
|
|
||||||
break;
|
|
||||||
case OutputScriptType_PAYTOP2SHWITNESS:
|
|
||||||
input_script_type = InputScriptType_SPENDP2SHWITNESS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return 0; // failed to compile output
|
|
||||||
}
|
}
|
||||||
memcpy(&node, root, sizeof(HDNode));
|
memcpy(&node, root, sizeof(HDNode));
|
||||||
if (hdnode_private_ckd_cached(&node, in->address_n, in->address_n_count, NULL) == 0) {
|
if (hdnode_private_ckd_cached(&node, in->address_n, in->address_n_count, NULL) == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user