1
0
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:
Pavol Rusnak 2017-05-03 18:57:47 +02:00
parent 8e017526ab
commit 38970cbd68
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

View File

@ -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) {