mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-08-03 20:38:16 +00:00
chore(common): Add orig_hash and orig_index fields to TxInput and TxOutput.
This commit is contained in:
parent
7ae338bd87
commit
443e0c101e
@ -268,7 +268,8 @@ message TxAck {
|
|||||||
optional bytes witness = 13; // witness data, only set for EXTERNAL inputs
|
optional bytes witness = 13; // witness data, only set for EXTERNAL inputs
|
||||||
optional bytes ownership_proof = 14; // SLIP-0019 proof of ownership, only set for EXTERNAL inputs
|
optional bytes ownership_proof = 14; // SLIP-0019 proof of ownership, only set for EXTERNAL inputs
|
||||||
optional bytes commitment_data = 15; // optional commitment data for the SLIP-0019 proof of ownership
|
optional bytes commitment_data = 15; // optional commitment data for the SLIP-0019 proof of ownership
|
||||||
|
optional bytes orig_hash = 16; // tx_hash of the original transaction where this input was spent (used when creating a replacement transaction)
|
||||||
|
optional uint32 orig_index = 17; // index of the input in the original transaction (used when creating a replacement transaction)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Structure representing compiled transaction output
|
* Structure representing compiled transaction output
|
||||||
@ -291,6 +292,8 @@ message TxAck {
|
|||||||
// optional uint32 decred_script_version = 7; // only for Decred // deprecated -> only 0 is supported
|
// optional uint32 decred_script_version = 7; // only for Decred // deprecated -> only 0 is supported
|
||||||
// optional bytes block_hash_bip115 = 8; // BIP-115 support dropped
|
// optional bytes block_hash_bip115 = 8; // BIP-115 support dropped
|
||||||
// optional uint32 block_height_bip115 = 9; // BIP-115 support dropped
|
// optional uint32 block_height_bip115 = 9; // BIP-115 support dropped
|
||||||
|
optional bytes orig_hash = 10; // tx_hash of the original transaction where this output was present (used when creating a replacement transaction)
|
||||||
|
optional uint32 orig_index = 11; // index of the output in the original transaction (used when creating a replacement transaction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -311,12 +314,12 @@ message TxInput {
|
|||||||
optional MultisigRedeemScriptType multisig = 7; // Filled if input is going to spend multisig tx
|
optional MultisigRedeemScriptType multisig = 7; // Filled if input is going to spend multisig tx
|
||||||
required uint64 amount = 8; // amount of previous transaction output
|
required uint64 amount = 8; // amount of previous transaction output
|
||||||
optional uint32 decred_tree = 9; // only for Decred
|
optional uint32 decred_tree = 9; // only for Decred
|
||||||
|
reserved 10, 11, 12; // fields which are in use, or have been in the past, in TxInputType
|
||||||
optional bytes witness = 13; // witness data, only set for EXTERNAL inputs
|
optional bytes witness = 13; // witness data, only set for EXTERNAL inputs
|
||||||
optional bytes ownership_proof = 14; // SLIP-0019 proof of ownership, only set for EXTERNAL inputs
|
optional bytes ownership_proof = 14; // SLIP-0019 proof of ownership, only set for EXTERNAL inputs
|
||||||
optional bytes commitment_data = 15; // optional commitment data for the SLIP-0019 proof of ownership
|
optional bytes commitment_data = 15; // optional commitment data for the SLIP-0019 proof of ownership
|
||||||
|
optional bytes orig_hash = 16; // tx_hash of the original transaction where this input was spent (used when creating a replacement transaction)
|
||||||
// fields which are in use, or have been in the past, in TxInputType
|
optional uint32 orig_index = 17; // index of the input in the original transaction (used when creating a replacement transaction)
|
||||||
reserved 10, 11, 12;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Data type for transaction output to be signed.
|
/** Data type for transaction output to be signed.
|
||||||
@ -329,9 +332,9 @@ message TxOutput {
|
|||||||
optional OutputScriptType script_type = 4 [default=PAYTOADDRESS]; // output script type
|
optional OutputScriptType script_type = 4 [default=PAYTOADDRESS]; // output script type
|
||||||
optional MultisigRedeemScriptType multisig = 5; // defines multisig address; script_type must be PAYTOMULTISIG
|
optional MultisigRedeemScriptType multisig = 5; // defines multisig address; script_type must be PAYTOMULTISIG
|
||||||
optional bytes op_return_data = 6; // defines op_return data; script_type must be PAYTOOPRETURN, amount must be 0
|
optional bytes op_return_data = 6; // defines op_return data; script_type must be PAYTOOPRETURN, amount must be 0
|
||||||
|
reserved 7, 8, 9; // fields which are in use, or have been in the past, in TxOutputType
|
||||||
// fields which are in use, or have been in the past, in TxOutputType
|
optional bytes orig_hash = 10; // tx_hash of the original transaction where this output was present (used when creating a replacement transaction)
|
||||||
reserved 7, 8, 9;
|
optional uint32 orig_index = 11; // index of the output in the original transaction (used when creating a replacement transaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Data type for metadata about previous transaction which contains the UTXO being spent.
|
/** Data type for metadata about previous transaction which contains the UTXO being spent.
|
||||||
@ -477,7 +480,7 @@ message TxAckPrevOutput {
|
|||||||
*
|
*
|
||||||
* @next TxRequest
|
* @next TxRequest
|
||||||
*/
|
*/
|
||||||
message TxAckPrevExtraData {
|
message TxAckPrevExtraData {
|
||||||
option (wire_type) = 22;
|
option (wire_type) = 22;
|
||||||
|
|
||||||
required TxAckPrevExtraDataWrapper tx = 1;
|
required TxAckPrevExtraDataWrapper tx = 1;
|
||||||
|
@ -30,6 +30,8 @@ class TxInput(p.MessageType):
|
|||||||
witness: bytes = None,
|
witness: bytes = None,
|
||||||
ownership_proof: bytes = None,
|
ownership_proof: bytes = None,
|
||||||
commitment_data: bytes = None,
|
commitment_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.prev_hash = prev_hash
|
self.prev_hash = prev_hash
|
||||||
@ -43,6 +45,8 @@ class TxInput(p.MessageType):
|
|||||||
self.witness = witness
|
self.witness = witness
|
||||||
self.ownership_proof = ownership_proof
|
self.ownership_proof = ownership_proof
|
||||||
self.commitment_data = commitment_data
|
self.commitment_data = commitment_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -59,4 +63,6 @@ class TxInput(p.MessageType):
|
|||||||
13: ('witness', p.BytesType, None),
|
13: ('witness', p.BytesType, None),
|
||||||
14: ('ownership_proof', p.BytesType, None),
|
14: ('ownership_proof', p.BytesType, None),
|
||||||
15: ('commitment_data', p.BytesType, None),
|
15: ('commitment_data', p.BytesType, None),
|
||||||
|
16: ('orig_hash', p.BytesType, None),
|
||||||
|
17: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,8 @@ class TxInputType(p.MessageType):
|
|||||||
witness: bytes = None,
|
witness: bytes = None,
|
||||||
ownership_proof: bytes = None,
|
ownership_proof: bytes = None,
|
||||||
commitment_data: bytes = None,
|
commitment_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.prev_hash = prev_hash
|
self.prev_hash = prev_hash
|
||||||
@ -43,6 +45,8 @@ class TxInputType(p.MessageType):
|
|||||||
self.witness = witness
|
self.witness = witness
|
||||||
self.ownership_proof = ownership_proof
|
self.ownership_proof = ownership_proof
|
||||||
self.commitment_data = commitment_data
|
self.commitment_data = commitment_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -59,4 +63,6 @@ class TxInputType(p.MessageType):
|
|||||||
13: ('witness', p.BytesType, None),
|
13: ('witness', p.BytesType, None),
|
||||||
14: ('ownership_proof', p.BytesType, None),
|
14: ('ownership_proof', p.BytesType, None),
|
||||||
15: ('commitment_data', p.BytesType, None),
|
15: ('commitment_data', p.BytesType, None),
|
||||||
|
16: ('orig_hash', p.BytesType, None),
|
||||||
|
17: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ class TxOutput(p.MessageType):
|
|||||||
script_type: EnumTypeOutputScriptType = 0,
|
script_type: EnumTypeOutputScriptType = 0,
|
||||||
multisig: MultisigRedeemScriptType = None,
|
multisig: MultisigRedeemScriptType = None,
|
||||||
op_return_data: bytes = None,
|
op_return_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.amount = amount
|
self.amount = amount
|
||||||
@ -31,6 +33,8 @@ class TxOutput(p.MessageType):
|
|||||||
self.script_type = script_type
|
self.script_type = script_type
|
||||||
self.multisig = multisig
|
self.multisig = multisig
|
||||||
self.op_return_data = op_return_data
|
self.op_return_data = op_return_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -41,4 +45,6 @@ class TxOutput(p.MessageType):
|
|||||||
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
||||||
5: ('multisig', MultisigRedeemScriptType, None),
|
5: ('multisig', MultisigRedeemScriptType, None),
|
||||||
6: ('op_return_data', p.BytesType, None),
|
6: ('op_return_data', p.BytesType, None),
|
||||||
|
10: ('orig_hash', p.BytesType, None),
|
||||||
|
11: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ class TxOutputType(p.MessageType):
|
|||||||
script_type: EnumTypeOutputScriptType = 0,
|
script_type: EnumTypeOutputScriptType = 0,
|
||||||
multisig: MultisigRedeemScriptType = None,
|
multisig: MultisigRedeemScriptType = None,
|
||||||
op_return_data: bytes = None,
|
op_return_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.amount = amount
|
self.amount = amount
|
||||||
@ -31,6 +33,8 @@ class TxOutputType(p.MessageType):
|
|||||||
self.script_type = script_type
|
self.script_type = script_type
|
||||||
self.multisig = multisig
|
self.multisig = multisig
|
||||||
self.op_return_data = op_return_data
|
self.op_return_data = op_return_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -41,4 +45,6 @@ class TxOutputType(p.MessageType):
|
|||||||
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
||||||
5: ('multisig', MultisigRedeemScriptType, None),
|
5: ('multisig', MultisigRedeemScriptType, None),
|
||||||
6: ('op_return_data', p.BytesType, None),
|
6: ('op_return_data', p.BytesType, None),
|
||||||
|
10: ('orig_hash', p.BytesType, None),
|
||||||
|
11: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,12 @@ TxInputType.script_sig max_size:1650
|
|||||||
TxInputType.witness max_size:109
|
TxInputType.witness max_size:109
|
||||||
TxInputType.ownership_proof max_size:171
|
TxInputType.ownership_proof max_size:171
|
||||||
TxInputType.commitment_data max_size:32
|
TxInputType.commitment_data max_size:32
|
||||||
|
TxInputType.orig_hash max_size:32
|
||||||
|
|
||||||
TxOutputType.address max_size:130
|
TxOutputType.address max_size:130
|
||||||
TxOutputType.address_n max_count:8
|
TxOutputType.address_n max_count:8
|
||||||
TxOutputType.op_return_data max_size:80
|
TxOutputType.op_return_data max_size:80
|
||||||
|
TxOutputType.orig_hash max_size:32
|
||||||
|
|
||||||
TxOutputBinType.script_pubkey max_size:520
|
TxOutputBinType.script_pubkey max_size:520
|
||||||
|
|
||||||
@ -76,10 +78,12 @@ TxInput.script_sig max_size:1650
|
|||||||
TxInput.witness max_size:109
|
TxInput.witness max_size:109
|
||||||
TxInput.ownership_proof max_size:171
|
TxInput.ownership_proof max_size:171
|
||||||
TxInput.commitment_data max_size:32
|
TxInput.commitment_data max_size:32
|
||||||
|
TxInput.orig_hash max_size:32
|
||||||
|
|
||||||
TxOutput.address max_size:130
|
TxOutput.address max_size:130
|
||||||
TxOutput.address_n max_count:8
|
TxOutput.address_n max_count:8
|
||||||
TxOutput.op_return_data max_size:80
|
TxOutput.op_return_data max_size:80
|
||||||
|
TxOutput.orig_hash max_size:32
|
||||||
|
|
||||||
PrevInput.prev_hash max_size:32
|
PrevInput.prev_hash max_size:32
|
||||||
PrevInput.script_sig max_size:1650
|
PrevInput.script_sig max_size:1650
|
||||||
|
@ -30,6 +30,8 @@ class TxInput(p.MessageType):
|
|||||||
witness: bytes = None,
|
witness: bytes = None,
|
||||||
ownership_proof: bytes = None,
|
ownership_proof: bytes = None,
|
||||||
commitment_data: bytes = None,
|
commitment_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.prev_hash = prev_hash
|
self.prev_hash = prev_hash
|
||||||
@ -43,6 +45,8 @@ class TxInput(p.MessageType):
|
|||||||
self.witness = witness
|
self.witness = witness
|
||||||
self.ownership_proof = ownership_proof
|
self.ownership_proof = ownership_proof
|
||||||
self.commitment_data = commitment_data
|
self.commitment_data = commitment_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -59,4 +63,6 @@ class TxInput(p.MessageType):
|
|||||||
13: ('witness', p.BytesType, None),
|
13: ('witness', p.BytesType, None),
|
||||||
14: ('ownership_proof', p.BytesType, None),
|
14: ('ownership_proof', p.BytesType, None),
|
||||||
15: ('commitment_data', p.BytesType, None),
|
15: ('commitment_data', p.BytesType, None),
|
||||||
|
16: ('orig_hash', p.BytesType, None),
|
||||||
|
17: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,8 @@ class TxInputType(p.MessageType):
|
|||||||
witness: bytes = None,
|
witness: bytes = None,
|
||||||
ownership_proof: bytes = None,
|
ownership_proof: bytes = None,
|
||||||
commitment_data: bytes = None,
|
commitment_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.prev_hash = prev_hash
|
self.prev_hash = prev_hash
|
||||||
@ -43,6 +45,8 @@ class TxInputType(p.MessageType):
|
|||||||
self.witness = witness
|
self.witness = witness
|
||||||
self.ownership_proof = ownership_proof
|
self.ownership_proof = ownership_proof
|
||||||
self.commitment_data = commitment_data
|
self.commitment_data = commitment_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -59,4 +63,6 @@ class TxInputType(p.MessageType):
|
|||||||
13: ('witness', p.BytesType, None),
|
13: ('witness', p.BytesType, None),
|
||||||
14: ('ownership_proof', p.BytesType, None),
|
14: ('ownership_proof', p.BytesType, None),
|
||||||
15: ('commitment_data', p.BytesType, None),
|
15: ('commitment_data', p.BytesType, None),
|
||||||
|
16: ('orig_hash', p.BytesType, None),
|
||||||
|
17: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ class TxOutput(p.MessageType):
|
|||||||
script_type: EnumTypeOutputScriptType = 0,
|
script_type: EnumTypeOutputScriptType = 0,
|
||||||
multisig: MultisigRedeemScriptType = None,
|
multisig: MultisigRedeemScriptType = None,
|
||||||
op_return_data: bytes = None,
|
op_return_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.amount = amount
|
self.amount = amount
|
||||||
@ -31,6 +33,8 @@ class TxOutput(p.MessageType):
|
|||||||
self.script_type = script_type
|
self.script_type = script_type
|
||||||
self.multisig = multisig
|
self.multisig = multisig
|
||||||
self.op_return_data = op_return_data
|
self.op_return_data = op_return_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -41,4 +45,6 @@ class TxOutput(p.MessageType):
|
|||||||
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
||||||
5: ('multisig', MultisigRedeemScriptType, None),
|
5: ('multisig', MultisigRedeemScriptType, None),
|
||||||
6: ('op_return_data', p.BytesType, None),
|
6: ('op_return_data', p.BytesType, None),
|
||||||
|
10: ('orig_hash', p.BytesType, None),
|
||||||
|
11: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ class TxOutputType(p.MessageType):
|
|||||||
script_type: EnumTypeOutputScriptType = 0,
|
script_type: EnumTypeOutputScriptType = 0,
|
||||||
multisig: MultisigRedeemScriptType = None,
|
multisig: MultisigRedeemScriptType = None,
|
||||||
op_return_data: bytes = None,
|
op_return_data: bytes = None,
|
||||||
|
orig_hash: bytes = None,
|
||||||
|
orig_index: int = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.address_n = address_n if address_n is not None else []
|
self.address_n = address_n if address_n is not None else []
|
||||||
self.amount = amount
|
self.amount = amount
|
||||||
@ -31,6 +33,8 @@ class TxOutputType(p.MessageType):
|
|||||||
self.script_type = script_type
|
self.script_type = script_type
|
||||||
self.multisig = multisig
|
self.multisig = multisig
|
||||||
self.op_return_data = op_return_data
|
self.op_return_data = op_return_data
|
||||||
|
self.orig_hash = orig_hash
|
||||||
|
self.orig_index = orig_index
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_fields(cls) -> Dict:
|
def get_fields(cls) -> Dict:
|
||||||
@ -41,4 +45,6 @@ class TxOutputType(p.MessageType):
|
|||||||
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
4: ('script_type', p.EnumType("OutputScriptType", (0, 1, 2, 3, 4, 5)), 0), # default=PAYTOADDRESS
|
||||||
5: ('multisig', MultisigRedeemScriptType, None),
|
5: ('multisig', MultisigRedeemScriptType, None),
|
||||||
6: ('op_return_data', p.BytesType, None),
|
6: ('op_return_data', p.BytesType, None),
|
||||||
|
10: ('orig_hash', p.BytesType, None),
|
||||||
|
11: ('orig_index', p.UVarintType, None),
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user