1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-22 07:28:10 +00:00

chore: make tx type names shorter

as suggested by @andrewkozlik:
TxAckInputType -> TxInput
TxAckOutputType -> TxOutput
TxAckPrevTxType -> PrevTx
TxAckPrevInputType -> PrevInput
TxAckPrevOutputType -> PrevOutput
This commit is contained in:
matejcik 2020-09-23 13:08:26 +02:00 committed by matejcik
parent b6b65bffff
commit 0eed360037
48 changed files with 360 additions and 397 deletions

View File

@ -298,7 +298,7 @@ message TxAck {
/** Data type for transaction input to be signed. /** Data type for transaction input to be signed.
* @embed * @embed
*/ */
message TxAckInputType { message TxInput {
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node
required bytes prev_hash = 2; // hash of previous transaction output to spend by this input required bytes prev_hash = 2; // hash of previous transaction output to spend by this input
required uint32 prev_index = 3; // index of previous output to spend required uint32 prev_index = 3; // index of previous output to spend
@ -317,7 +317,7 @@ message TxAckInputType {
/** Data type for transaction output to be signed. /** Data type for transaction output to be signed.
* @embed * @embed
*/ */
message TxAckOutputType { message TxOutput {
optional string address = 1; // destination address in Base58 encoding; script_type must be PAYTOADDRESS optional string address = 1; // destination address in Base58 encoding; script_type must be PAYTOADDRESS
repeated uint32 address_n = 2; // BIP-32 path to derive the destination (used for change addresses) repeated uint32 address_n = 2; // BIP-32 path to derive the destination (used for change addresses)
required uint64 amount = 3; // amount to spend in satoshis required uint64 amount = 3; // amount to spend in satoshis
@ -329,7 +329,7 @@ message TxAckOutputType {
/** 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.
* @embed * @embed
*/ */
message TxAckPrevTxType { message PrevTx {
required uint32 version = 1; required uint32 version = 1;
required uint32 lock_time = 4; required uint32 lock_time = 4;
required uint32 inputs_count = 6; required uint32 inputs_count = 6;
@ -344,7 +344,7 @@ message TxAckPrevTxType {
/** Data type for inputs of previous transactions. /** Data type for inputs of previous transactions.
* @embed * @embed
*/ */
message TxAckPrevInputType { message PrevInput {
required bytes prev_hash = 2; // hash of previous transaction output to spend by this input required bytes prev_hash = 2; // hash of previous transaction output to spend by this input
required uint32 prev_index = 3; // index of previous output to spend required uint32 prev_index = 3; // index of previous output to spend
required bytes script_sig = 4; // script signature required bytes script_sig = 4; // script signature
@ -355,7 +355,7 @@ message TxAckPrevInputType {
/** Data type for outputs of previous transactions. /** Data type for outputs of previous transactions.
* @embed * @embed
*/ */
message TxAckPrevOutputType { message PrevOutput {
required uint64 amount = 1; // amount sent to this output required uint64 amount = 1; // amount sent to this output
required bytes script_pubkey = 2; // scriptPubkey of this output required bytes script_pubkey = 2; // scriptPubkey of this output
optional uint32 decred_script_version = 3; // only for Decred optional uint32 decred_script_version = 3; // only for Decred
@ -373,7 +373,7 @@ message TxAckInput {
required TxAckInputWrapper tx = 1; required TxAckInputWrapper tx = 1;
message TxAckInputWrapper { message TxAckInputWrapper {
required TxAckInputType input = 2; required TxInput input = 2;
} }
} }
@ -389,7 +389,7 @@ message TxAckOutput {
required TxAckOutputWrapper tx = 1; required TxAckOutputWrapper tx = 1;
message TxAckOutputWrapper { message TxAckOutputWrapper {
required TxAckOutputType output = 5; required TxOutput output = 5;
} }
} }
@ -402,7 +402,7 @@ message TxAckOutput {
message TxAckPrevMeta { message TxAckPrevMeta {
option (wire_type) = 22; option (wire_type) = 22;
required TxAckPrevTxType tx = 1; required PrevTx tx = 1;
} }
/** /**
@ -417,7 +417,7 @@ message TxAckPrevInput {
required TxAckPrevInputWrapper tx = 1; required TxAckPrevInputWrapper tx = 1;
message TxAckPrevInputWrapper { message TxAckPrevInputWrapper {
required TxAckPrevInputType input = 2; required PrevInput input = 2;
} }
} }
@ -434,7 +434,7 @@ message TxAckPrevOutput {
required TxAckPrevOutputWrapper tx = 1; required TxAckPrevOutputWrapper tx = 1;
message TxAckPrevOutputWrapper { message TxAckPrevOutputWrapper {
required TxAckPrevOutputType output = 3; required PrevOutput output = 3;
} }
} }

View File

@ -9,7 +9,7 @@ if False:
from trezor.messages.AuthorizeCoinJoin import AuthorizeCoinJoin from trezor.messages.AuthorizeCoinJoin import AuthorizeCoinJoin
from trezor.messages.GetOwnershipProof import GetOwnershipProof from trezor.messages.GetOwnershipProof import GetOwnershipProof
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
@ -47,7 +47,7 @@ class CoinJoinAuthorization:
and msg.commitment_data[:-_ROUND_ID_LEN] == self.coordinator.encode() and msg.commitment_data[:-_ROUND_ID_LEN] == self.coordinator.encode()
) )
def check_sign_tx_input(self, txi: TxAckInputType, coin: CoinInfo) -> bool: def check_sign_tx_input(self, txi: TxInput, coin: CoinInfo) -> bool:
# Check whether the current input matches the parameters of the request. # Check whether the current input matches the parameters of the request.
return ( return (
len(txi.address_n) >= BIP32_WALLET_DEPTH len(txi.address_n) >= BIP32_WALLET_DEPTH

View File

@ -25,8 +25,8 @@ if False:
from typing import List, Optional, Tuple from typing import List, Optional, Tuple
from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckInputType import EnumTypeInputScriptType from trezor.messages.TxInput import EnumTypeInputScriptType
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
@ -115,7 +115,7 @@ def output_derive_script(address: str, coin: CoinInfo) -> bytes:
# see https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki#specification # see https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki#specification
# item 5 for details # item 5 for details
def bip143_derive_script_code( def bip143_derive_script_code(
txi: TxAckInputType, public_keys: List[bytes], threshold: int, coin: CoinInfo txi: TxInput, public_keys: List[bytes], threshold: int, coin: CoinInfo
) -> bytearray: ) -> bytearray:
if len(public_keys) > 1: if len(public_keys) > 1:
return output_script_multisig(public_keys, threshold) return output_script_multisig(public_keys, threshold)

View File

@ -10,8 +10,8 @@ from . import helpers, tx_weight
if False: if False:
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
@ -38,25 +38,23 @@ class Approver:
self.total_out = 0 # sum of output amounts self.total_out = 0 # sum of output amounts
self.change_out = 0 # change output amount self.change_out = 0 # change output amount
async def add_internal_input(self, txi: TxAckInputType) -> None: async def add_internal_input(self, txi: TxInput) -> None:
self.weight.add_input(txi) self.weight.add_input(txi)
self.total_in += txi.amount self.total_in += txi.amount
self.min_sequence = min(self.min_sequence, txi.sequence) self.min_sequence = min(self.min_sequence, txi.sequence)
def add_external_input(self, txi: TxAckInputType) -> None: def add_external_input(self, txi: TxInput) -> None:
self.weight.add_input(txi) self.weight.add_input(txi)
self.total_in += txi.amount self.total_in += txi.amount
self.external_in += txi.amount self.external_in += txi.amount
self.min_sequence = min(self.min_sequence, txi.sequence) self.min_sequence = min(self.min_sequence, txi.sequence)
def add_change_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: def add_change_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
self.weight.add_output(script_pubkey) self.weight.add_output(script_pubkey)
self.total_out += txo.amount self.total_out += txo.amount
self.change_out += txo.amount self.change_out += txo.amount
async def add_external_output( async def add_external_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
self, txo: TxAckOutputType, script_pubkey: bytes
) -> None:
self.weight.add_output(script_pubkey) self.weight.add_output(script_pubkey)
self.total_out += txo.amount self.total_out += txo.amount
@ -72,19 +70,17 @@ class BasicApprover(Approver):
super().__init__(tx, coin) super().__init__(tx, coin)
self.change_count = 0 # the number of change-outputs self.change_count = 0 # the number of change-outputs
async def add_internal_input(self, txi: TxAckInputType) -> None: async def add_internal_input(self, txi: TxInput) -> None:
if not addresses.validate_full_path(txi.address_n, self.coin, txi.script_type): if not addresses.validate_full_path(txi.address_n, self.coin, txi.script_type):
await helpers.confirm_foreign_address(txi.address_n) await helpers.confirm_foreign_address(txi.address_n)
await super().add_internal_input(txi) await super().add_internal_input(txi)
def add_change_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: def add_change_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
super().add_change_output(txo, script_pubkey) super().add_change_output(txo, script_pubkey)
self.change_count += 1 self.change_count += 1
async def add_external_output( async def add_external_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
self, txo: TxAckOutputType, script_pubkey: bytes
) -> None:
await super().add_external_output(txo, script_pubkey) await super().add_external_output(txo, script_pubkey)
await helpers.confirm_output(txo, self.coin) await helpers.confirm_output(txo, self.coin)
@ -145,22 +141,20 @@ class CoinJoinApprover(Approver):
# flag indicating whether our outputs are gaining any anonymity # flag indicating whether our outputs are gaining any anonymity
self.anonymity = False self.anonymity = False
async def add_internal_input(self, txi: TxAckInputType) -> None: async def add_internal_input(self, txi: TxInput) -> None:
self.our_weight.add_input(txi) self.our_weight.add_input(txi)
if not self.authorization.check_sign_tx_input(txi, self.coin): if not self.authorization.check_sign_tx_input(txi, self.coin):
raise wire.ProcessError("Unauthorized path") raise wire.ProcessError("Unauthorized path")
await super().add_internal_input(txi) await super().add_internal_input(txi)
def add_change_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: def add_change_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
super().add_change_output(txo, script_pubkey) super().add_change_output(txo, script_pubkey)
self._add_output(txo, script_pubkey) self._add_output(txo, script_pubkey)
self.our_weight.add_output(script_pubkey) self.our_weight.add_output(script_pubkey)
self.group_our_count += 1 self.group_our_count += 1
async def add_external_output( async def add_external_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
self, txo: TxAckOutputType, script_pubkey: bytes
) -> None:
await super().add_external_output(txo, script_pubkey) await super().add_external_output(txo, script_pubkey)
self._add_output(txo, script_pubkey) self._add_output(txo, script_pubkey)
@ -209,7 +203,7 @@ class CoinJoinApprover(Approver):
/ decimal_divisor / decimal_divisor
) )
def _add_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: def _add_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
# Assumption: CoinJoin outputs are grouped by amount. (If this assumption is # Assumption: CoinJoin outputs are grouped by amount. (If this assumption is
# not satisfied, then we will compute a lower coordinator fee, which may lead # not satisfied, then we will compute a lower coordinator fee, which may lead
# us to wrongfully decline the transaction.) # us to wrongfully decline the transaction.)

View File

@ -22,11 +22,11 @@ if False:
from trezor.crypto import bip32 from trezor.crypto import bip32
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
@ -209,7 +209,7 @@ class Bitcoin:
self.write_tx_footer(self.serialized_tx, self.tx) self.write_tx_footer(self.serialized_tx, self.tx)
await helpers.request_tx_finish(self.tx_req) await helpers.request_tx_finish(self.tx_req)
async def process_internal_input(self, txi: TxAckInputType) -> None: async def process_internal_input(self, txi: TxInput) -> None:
self.wallet_path.add_input(txi) self.wallet_path.add_input(txi)
self.multisig_fingerprint.add_input(txi) self.multisig_fingerprint.add_input(txi)
@ -218,10 +218,10 @@ class Bitcoin:
await self.approver.add_internal_input(txi) await self.approver.add_internal_input(txi)
async def process_external_input(self, txi: TxAckInputType) -> None: async def process_external_input(self, txi: TxInput) -> None:
self.approver.add_external_input(txi) self.approver.add_external_input(txi)
async def approve_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: async def approve_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
if self.output_is_change(txo): if self.output_is_change(txo):
# output is change and does not need approval # output is change and does not need approval
self.approver.add_change_output(txo, script_pubkey) self.approver.add_change_output(txo, script_pubkey)
@ -234,7 +234,7 @@ class Bitcoin:
async def get_tx_digest( async def get_tx_digest(
self, self,
i: int, i: int,
txi: TxAckInputType, txi: TxInput,
public_keys: List[bytes], public_keys: List[bytes],
threshold: int, threshold: int,
script_pubkey: bytes, script_pubkey: bytes,
@ -246,7 +246,7 @@ class Bitcoin:
return digest return digest
async def verify_external_input( async def verify_external_input(
self, i: int, txi: TxAckInputType, script_pubkey: bytes self, i: int, txi: TxInput, script_pubkey: bytes
) -> None: ) -> None:
if txi.ownership_proof: if txi.ownership_proof:
if not verify_nonownership( if not verify_nonownership(
@ -291,7 +291,7 @@ class Bitcoin:
script_sig = self.input_derive_script(txi, key_sign_pub, b"") script_sig = self.input_derive_script(txi, key_sign_pub, b"")
self.write_tx_input(self.serialized_tx, txi, script_sig) self.write_tx_input(self.serialized_tx, txi, script_sig)
def sign_bip143_input(self, txi: TxAckInputType) -> Tuple[bytes, bytes]: def sign_bip143_input(self, txi: TxInput) -> Tuple[bytes, bytes]:
self.wallet_path.check_input(txi) self.wallet_path.check_input(txi)
self.multisig_fingerprint.check_input(txi) self.multisig_fingerprint.check_input(txi)
@ -335,7 +335,7 @@ class Bitcoin:
async def get_legacy_tx_digest( async def get_legacy_tx_digest(
self, index: int, script_pubkey: Optional[bytes] = None self, index: int, script_pubkey: Optional[bytes] = None
) -> Tuple[bytes, TxAckInputType, Optional[bip32.HDNode]]: ) -> Tuple[bytes, TxInput, Optional[bip32.HDNode]]:
# the transaction digest which gets signed for this input # the transaction digest which gets signed for this input
h_sign = self.create_hash_writer() h_sign = self.create_hash_writer()
# should come out the same as h_approved, checked before signing the digest # should come out the same as h_approved, checked before signing the digest
@ -460,17 +460,17 @@ class Bitcoin:
return amount_out, script_pubkey return amount_out, script_pubkey
def check_prevtx_output(self, txo_bin: TxAckPrevOutputType) -> None: def check_prevtx_output(self, txo_bin: PrevOutput) -> None:
# Validations to perform on the UTXO when checking the previous transaction output amount. # Validations to perform on the UTXO when checking the previous transaction output amount.
pass pass
# Tx Helpers # Tx Helpers
# === # ===
def get_sighash_type(self, txi: TxAckInputType) -> int: def get_sighash_type(self, txi: TxInput) -> int:
return SIGHASH_ALL return SIGHASH_ALL
def get_hash_type(self, txi: TxAckInputType) -> int: def get_hash_type(self, txi: TxInput) -> int:
""" Return the nHashType flags.""" """ Return the nHashType flags."""
# The nHashType is the 8 least significant bits of the sighash type. # The nHashType is the 8 least significant bits of the sighash type.
# Some coins set the 24 most significant bits of the sighash type to # Some coins set the 24 most significant bits of the sighash type to
@ -478,39 +478,28 @@ class Bitcoin:
return self.get_sighash_type(txi) & 0xFF return self.get_sighash_type(txi) & 0xFF
def write_tx_input( def write_tx_input(
self, self, w: writers.Writer, txi: Union[TxInput, PrevInput], script: bytes,
w: writers.Writer,
txi: Union[TxAckInputType, TxAckPrevInputType],
script: bytes,
) -> None: ) -> None:
writers.write_tx_input(w, txi, script) writers.write_tx_input(w, txi, script)
def write_tx_output( def write_tx_output(
self, self, w: writers.Writer, txo: Union[TxOutput, PrevOutput], script_pubkey: bytes,
w: writers.Writer,
txo: Union[TxAckOutputType, TxAckPrevOutputType],
script_pubkey: bytes,
) -> None: ) -> None:
writers.write_tx_output(w, txo, script_pubkey) writers.write_tx_output(w, txo, script_pubkey)
def write_tx_header( def write_tx_header(
self, self, w: writers.Writer, tx: Union[SignTx, PrevTx], witness_marker: bool,
w: writers.Writer,
tx: Union[SignTx, TxAckPrevTxType],
witness_marker: bool,
) -> None: ) -> None:
writers.write_uint32(w, tx.version) # nVersion writers.write_uint32(w, tx.version) # nVersion
if witness_marker: if witness_marker:
write_bitcoin_varint(w, 0x00) # segwit witness marker write_bitcoin_varint(w, 0x00) # segwit witness marker
write_bitcoin_varint(w, 0x01) # segwit witness flag write_bitcoin_varint(w, 0x01) # segwit witness flag
def write_tx_footer( def write_tx_footer(self, w: writers.Writer, tx: Union[SignTx, PrevTx]) -> None:
self, w: writers.Writer, tx: Union[SignTx, TxAckPrevTxType]
) -> None:
writers.write_uint32(w, tx.lock_time) writers.write_uint32(w, tx.lock_time)
async def write_prev_tx_footer( async def write_prev_tx_footer(
self, w: writers.Writer, tx: TxAckPrevTxType, prev_hash: bytes self, w: writers.Writer, tx: PrevTx, prev_hash: bytes
) -> None: ) -> None:
self.write_tx_footer(w, tx) self.write_tx_footer(w, tx)
@ -525,7 +514,7 @@ class Bitcoin:
# Tx Outputs # Tx Outputs
# === # ===
def output_derive_script(self, txo: TxAckOutputType) -> bytes: def output_derive_script(self, txo: TxOutput) -> bytes:
if txo.script_type == OutputScriptType.PAYTOOPRETURN: if txo.script_type == OutputScriptType.PAYTOOPRETURN:
assert txo.op_return_data is not None # checked in sanitize_tx_output assert txo.op_return_data is not None # checked in sanitize_tx_output
return scripts.output_script_paytoopreturn(txo.op_return_data) return scripts.output_script_paytoopreturn(txo.op_return_data)
@ -547,7 +536,7 @@ class Bitcoin:
return scripts.output_derive_script(txo.address, self.coin) return scripts.output_derive_script(txo.address, self.coin)
def output_is_change(self, txo: TxAckOutputType) -> bool: def output_is_change(self, txo: TxOutput) -> bool:
if txo.script_type not in common.CHANGE_OUTPUT_SCRIPT_TYPES: if txo.script_type not in common.CHANGE_OUTPUT_SCRIPT_TYPES:
return False return False
if txo.multisig and not self.multisig_fingerprint.output_matches(txo): if txo.multisig and not self.multisig_fingerprint.output_matches(txo):
@ -564,7 +553,7 @@ class Bitcoin:
# === # ===
def input_derive_script( def input_derive_script(
self, txi: TxAckInputType, pubkey: bytes, signature: bytes self, txi: TxInput, pubkey: bytes, signature: bytes
) -> bytes: ) -> bytes:
return scripts.input_derive_script( return scripts.input_derive_script(
txi.script_type, txi.script_type,
@ -583,18 +572,18 @@ class Bitcoin:
self.h_sequence = HashWriter(sha256()) self.h_sequence = HashWriter(sha256())
self.h_outputs = HashWriter(sha256()) self.h_outputs = HashWriter(sha256())
def hash143_add_input(self, txi: TxAckInputType) -> None: def hash143_add_input(self, txi: TxInput) -> None:
writers.write_bytes_reversed( writers.write_bytes_reversed(
self.h_prevouts, txi.prev_hash, writers.TX_HASH_SIZE self.h_prevouts, txi.prev_hash, writers.TX_HASH_SIZE
) )
writers.write_uint32(self.h_prevouts, txi.prev_index) writers.write_uint32(self.h_prevouts, txi.prev_index)
writers.write_uint32(self.h_sequence, txi.sequence) writers.write_uint32(self.h_sequence, txi.sequence)
def hash143_add_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: def hash143_add_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
writers.write_tx_output(self.h_outputs, txo, script_pubkey) writers.write_tx_output(self.h_outputs, txo, script_pubkey)
def hash143_preimage_hash( def hash143_preimage_hash(
self, txi: TxAckInputType, public_keys: List[bytes], threshold: int self, txi: TxInput, public_keys: List[bytes], threshold: int
) -> bytes: ) -> bytes:
h_preimage = HashWriter(sha256()) h_preimage = HashWriter(sha256())
@ -644,17 +633,17 @@ class Bitcoin:
return writers.get_tx_hash(h_preimage, double=self.coin.sign_hash_double) return writers.get_tx_hash(h_preimage, double=self.coin.sign_hash_double)
def input_is_segwit(txi: TxAckInputType) -> bool: def input_is_segwit(txi: TxInput) -> bool:
return txi.script_type in common.SEGWIT_INPUT_SCRIPT_TYPES or ( return txi.script_type in common.SEGWIT_INPUT_SCRIPT_TYPES or (
txi.script_type == InputScriptType.EXTERNAL and txi.witness is not None txi.script_type == InputScriptType.EXTERNAL and txi.witness is not None
) )
def input_is_nonsegwit(txi: TxAckInputType) -> bool: def input_is_nonsegwit(txi: TxInput) -> bool:
return txi.script_type in common.NONSEGWIT_INPUT_SCRIPT_TYPES or ( return txi.script_type in common.NONSEGWIT_INPUT_SCRIPT_TYPES or (
txi.script_type == InputScriptType.EXTERNAL and txi.witness is None txi.script_type == InputScriptType.EXTERNAL and txi.witness is None
) )
def input_is_external(txi: TxAckInputType) -> bool: def input_is_external(txi: TxInput) -> bool:
return txi.script_type == InputScriptType.EXTERNAL return txi.script_type == InputScriptType.EXTERNAL

View File

@ -1,9 +1,9 @@
from micropython import const from micropython import const
from trezor import wire from trezor import wire
from trezor.messages.PrevTx import PrevTx
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType
from apps.common.writers import write_bitcoin_varint from apps.common.writers import write_bitcoin_varint
@ -43,7 +43,7 @@ class Bitcoinlike(Bitcoin):
async def get_tx_digest( async def get_tx_digest(
self, self,
i: int, i: int,
txi: TxAckInputType, txi: TxInput,
public_keys: List[bytes], public_keys: List[bytes],
threshold: int, threshold: int,
script_pubkey: bytes, script_pubkey: bytes,
@ -55,17 +55,14 @@ class Bitcoinlike(Bitcoin):
i, txi, public_keys, threshold, script_pubkey i, txi, public_keys, threshold, script_pubkey
) )
def get_sighash_type(self, txi: TxAckInputType) -> int: def get_sighash_type(self, txi: TxInput) -> int:
hashtype = super().get_sighash_type(txi) hashtype = super().get_sighash_type(txi)
if self.coin.fork_id is not None: if self.coin.fork_id is not None:
hashtype |= (self.coin.fork_id << 8) | _SIGHASH_FORKID hashtype |= (self.coin.fork_id << 8) | _SIGHASH_FORKID
return hashtype return hashtype
def write_tx_header( def write_tx_header(
self, self, w: writers.Writer, tx: Union[SignTx, PrevTx], witness_marker: bool,
w: writers.Writer,
tx: Union[SignTx, TxAckPrevTxType],
witness_marker: bool,
) -> None: ) -> None:
writers.write_uint32(w, tx.version) # nVersion writers.write_uint32(w, tx.version) # nVersion
if self.coin.timestamp: if self.coin.timestamp:
@ -76,7 +73,7 @@ class Bitcoinlike(Bitcoin):
write_bitcoin_varint(w, 0x01) # segwit witness flag write_bitcoin_varint(w, 0x01) # segwit witness flag
async def write_prev_tx_footer( async def write_prev_tx_footer(
self, w: writers.Writer, tx: TxAckPrevTxType, prev_hash: bytes self, w: writers.Writer, tx: PrevTx, prev_hash: bytes
) -> None: ) -> None:
await super().write_prev_tx_footer(w, tx, prev_hash) await super().write_prev_tx_footer(w, tx, prev_hash)

View File

@ -3,7 +3,7 @@ from micropython import const
from trezor import wire from trezor import wire
from trezor.crypto.hashlib import blake256 from trezor.crypto.hashlib import blake256
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.utils import HashWriter, ensure from trezor.utils import HashWriter, ensure
from apps.common.writers import write_bitcoin_varint from apps.common.writers import write_bitcoin_varint
@ -24,10 +24,10 @@ if False:
from typing import Union from typing import Union
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
@ -64,16 +64,16 @@ class Decred(Bitcoin):
self.write_tx_footer(self.serialized_tx, self.tx) self.write_tx_footer(self.serialized_tx, self.tx)
self.write_tx_footer(self.h_prefix, self.tx) self.write_tx_footer(self.h_prefix, self.tx)
async def process_internal_input(self, txi: TxAckInputType) -> None: async def process_internal_input(self, txi: TxInput) -> None:
await super().process_internal_input(txi) await super().process_internal_input(txi)
# Decred serializes inputs early. # Decred serializes inputs early.
self.write_tx_input(self.serialized_tx, txi, bytes()) self.write_tx_input(self.serialized_tx, txi, bytes())
async def process_external_input(self, txi: TxAckInputType) -> None: async def process_external_input(self, txi: TxInput) -> None:
raise wire.DataError("External inputs not supported") raise wire.DataError("External inputs not supported")
async def approve_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: async def approve_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
await super().approve_output(txo, script_pubkey) await super().approve_output(txo, script_pubkey)
self.write_tx_output(self.serialized_tx, txo, script_pubkey) self.write_tx_output(self.serialized_tx, txo, script_pubkey)
@ -144,21 +144,18 @@ class Decred(Bitcoin):
async def step7_finish(self) -> None: async def step7_finish(self) -> None:
await helpers.request_tx_finish(self.tx_req) await helpers.request_tx_finish(self.tx_req)
def check_prevtx_output(self, txo_bin: TxAckPrevOutputType) -> None: def check_prevtx_output(self, txo_bin: PrevOutput) -> None:
if txo_bin.decred_script_version != 0: if txo_bin.decred_script_version != 0:
raise wire.ProcessError("Cannot use utxo that has script_version != 0") raise wire.ProcessError("Cannot use utxo that has script_version != 0")
def hash143_add_input(self, txi: TxAckInputType) -> None: def hash143_add_input(self, txi: TxInput) -> None:
self.write_tx_input(self.h_prefix, txi, bytes()) self.write_tx_input(self.h_prefix, txi, bytes())
def hash143_add_output(self, txo: TxAckOutputType, script_pubkey: bytes) -> None: def hash143_add_output(self, txo: TxOutput, script_pubkey: bytes) -> None:
self.write_tx_output(self.h_prefix, txo, script_pubkey) self.write_tx_output(self.h_prefix, txo, script_pubkey)
def write_tx_input( def write_tx_input(
self, self, w: writers.Writer, txi: Union[TxInput, PrevInput], script: bytes,
w: writers.Writer,
txi: Union[TxAckInputType, TxAckPrevInputType],
script: bytes,
) -> None: ) -> None:
writers.write_bytes_reversed(w, txi.prev_hash, writers.TX_HASH_SIZE) writers.write_bytes_reversed(w, txi.prev_hash, writers.TX_HASH_SIZE)
writers.write_uint32(w, txi.prev_index or 0) writers.write_uint32(w, txi.prev_index or 0)
@ -166,13 +163,10 @@ class Decred(Bitcoin):
writers.write_uint32(w, txi.sequence) writers.write_uint32(w, txi.sequence)
def write_tx_output( def write_tx_output(
self, self, w: writers.Writer, txo: Union[TxOutput, PrevOutput], script_pubkey: bytes,
w: writers.Writer,
txo: Union[TxAckOutputType, TxAckPrevOutputType],
script_pubkey: bytes,
) -> None: ) -> None:
writers.write_uint64(w, txo.amount) writers.write_uint64(w, txo.amount)
if isinstance(txo, TxAckPrevOutputType): if isinstance(txo, PrevOutput):
if txo.decred_script_version is None: if txo.decred_script_version is None:
raise wire.DataError("Script version must be provided") raise wire.DataError("Script version must be provided")
writers.write_uint16(w, txo.decred_script_version) writers.write_uint16(w, txo.decred_script_version)
@ -181,10 +175,7 @@ class Decred(Bitcoin):
writers.write_bytes_prefixed(w, script_pubkey) writers.write_bytes_prefixed(w, script_pubkey)
def write_tx_header( def write_tx_header(
self, self, w: writers.Writer, tx: Union[SignTx, PrevTx], witness_marker: bool,
w: writers.Writer,
tx: Union[SignTx, TxAckPrevTxType],
witness_marker: bool,
) -> None: ) -> None:
# The upper 16 bits of the transaction version specify the serialization # The upper 16 bits of the transaction version specify the serialization
# format and the lower 16 bits specify the version number. # format and the lower 16 bits specify the version number.
@ -195,15 +186,13 @@ class Decred(Bitcoin):
writers.write_uint32(w, version) writers.write_uint32(w, version)
def write_tx_footer( def write_tx_footer(self, w: writers.Writer, tx: Union[SignTx, PrevTx]) -> None:
self, w: writers.Writer, tx: Union[SignTx, TxAckPrevTxType]
) -> None:
assert tx.expiry is not None # checked in sanitize_* assert tx.expiry is not None # checked in sanitize_*
writers.write_uint32(w, tx.lock_time) writers.write_uint32(w, tx.lock_time)
writers.write_uint32(w, tx.expiry) writers.write_uint32(w, tx.expiry)
def write_tx_input_witness( def write_tx_input_witness(
self, w: writers.Writer, i: TxAckInputType, script_sig: bytes self, w: writers.Writer, i: TxInput, script_sig: bytes
) -> None: ) -> None:
writers.write_uint64(w, i.amount) writers.write_uint64(w, i.amount)
writers.write_uint32(w, 0) # block height fraud proof writers.write_uint32(w, 0) # block height fraud proof

View File

@ -1,5 +1,8 @@
from trezor import utils, wire from trezor import utils, wire
from trezor.messages import InputScriptType, OutputScriptType from trezor.messages import InputScriptType, OutputScriptType
from trezor.messages.PrevInput import PrevInput
from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.PrevTx import PrevTx
from trezor.messages.RequestType import ( from trezor.messages.RequestType import (
TXEXTRADATA, TXEXTRADATA,
TXFINISHED, TXFINISHED,
@ -9,16 +12,13 @@ from trezor.messages.RequestType import (
) )
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputType import TxAckInputType
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputType import TxAckOutputType
from trezor.messages.TxAckPrevExtraData import TxAckPrevExtraData from trezor.messages.TxAckPrevExtraData import TxAckPrevExtraData
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from apps.common import paths from apps.common import paths
@ -42,7 +42,7 @@ class UiConfirm:
class UiConfirmOutput(UiConfirm): class UiConfirmOutput(UiConfirm):
def __init__(self, output: TxAckOutputType, coin: CoinInfo): def __init__(self, output: TxOutput, coin: CoinInfo):
self.output = output self.output = output
self.coin = coin self.coin = coin
@ -120,7 +120,7 @@ class UiConfirmNonDefaultLocktime(UiConfirm):
__eq__ = utils.obj_eq __eq__ = utils.obj_eq
def confirm_output(output: TxAckOutputType, coin: CoinInfo) -> Awaitable[None]: # type: ignore def confirm_output(output: TxOutput, coin: CoinInfo) -> Awaitable[None]: # type: ignore
return (yield UiConfirmOutput(output, coin)) return (yield UiConfirmOutput(output, coin))
@ -148,7 +148,7 @@ def confirm_nondefault_locktime(lock_time: int, lock_time_disabled: bool) -> Awa
return (yield UiConfirmNonDefaultLocktime(lock_time, lock_time_disabled)) return (yield UiConfirmNonDefaultLocktime(lock_time, lock_time_disabled))
def request_tx_meta(tx_req: TxRequest, coin: CoinInfo, tx_hash: bytes = None) -> Awaitable[TxAckPrevTxType]: # type: ignore def request_tx_meta(tx_req: TxRequest, coin: CoinInfo, tx_hash: bytes = None) -> Awaitable[PrevTx]: # type: ignore
assert tx_req.details is not None assert tx_req.details is not None
tx_req.request_type = TXMETA tx_req.request_type = TXMETA
tx_req.details.tx_hash = tx_hash tx_req.details.tx_hash = tx_hash
@ -170,7 +170,7 @@ def request_tx_extra_data( # type: ignore
return ack.tx.extra_data_chunk return ack.tx.extra_data_chunk
def request_tx_input(tx_req: TxRequest, i: int, coin: CoinInfo) -> Awaitable[TxAckInputType]: # type: ignore def request_tx_input(tx_req: TxRequest, i: int, coin: CoinInfo) -> Awaitable[TxInput]: # type: ignore
assert tx_req.details is not None assert tx_req.details is not None
tx_req.request_type = TXINPUT tx_req.request_type = TXINPUT
tx_req.details.request_index = i tx_req.details.request_index = i
@ -179,7 +179,7 @@ def request_tx_input(tx_req: TxRequest, i: int, coin: CoinInfo) -> Awaitable[TxA
return sanitize_tx_input(ack.tx.input, coin) return sanitize_tx_input(ack.tx.input, coin)
def request_tx_prev_input(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes = None) -> Awaitable[TxAckPrevInputType]: # type: ignore def request_tx_prev_input(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes = None) -> Awaitable[PrevInput]: # type: ignore
assert tx_req.details is not None assert tx_req.details is not None
tx_req.request_type = TXINPUT tx_req.request_type = TXINPUT
tx_req.details.request_index = i tx_req.details.request_index = i
@ -189,7 +189,7 @@ def request_tx_prev_input(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: by
return sanitize_tx_prev_input(ack.tx.input, coin) return sanitize_tx_prev_input(ack.tx.input, coin)
def request_tx_output(tx_req: TxRequest, i: int, coin: CoinInfo) -> Awaitable[TxAckOutputType]: # type: ignore def request_tx_output(tx_req: TxRequest, i: int, coin: CoinInfo) -> Awaitable[TxOutput]: # type: ignore
assert tx_req.details is not None assert tx_req.details is not None
tx_req.request_type = TXOUTPUT tx_req.request_type = TXOUTPUT
tx_req.details.request_index = i tx_req.details.request_index = i
@ -198,7 +198,7 @@ def request_tx_output(tx_req: TxRequest, i: int, coin: CoinInfo) -> Awaitable[Tx
return sanitize_tx_output(ack.tx.output, coin) return sanitize_tx_output(ack.tx.output, coin)
def request_tx_prev_output(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes = None) -> Awaitable[TxAckPrevOutputType]: # type: ignore def request_tx_prev_output(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: bytes = None) -> Awaitable[PrevOutput]: # type: ignore
assert tx_req.details is not None assert tx_req.details is not None
tx_req.request_type = TXOUTPUT tx_req.request_type = TXOUTPUT
tx_req.details.request_index = i tx_req.details.request_index = i
@ -256,7 +256,7 @@ def sanitize_sign_tx(tx: SignTx, coin: CoinInfo) -> SignTx:
return tx return tx
def sanitize_tx_meta(tx: TxAckPrevTxType, coin: CoinInfo) -> TxAckPrevTxType: def sanitize_tx_meta(tx: PrevTx, coin: CoinInfo) -> PrevTx:
if not coin.extra_data and tx.extra_data_len: if not coin.extra_data and tx.extra_data_len:
raise wire.DataError("Extra data not enabled on this coin.") raise wire.DataError("Extra data not enabled on this coin.")
if coin.decred or coin.overwintered: if coin.decred or coin.overwintered:
@ -275,7 +275,7 @@ def sanitize_tx_meta(tx: TxAckPrevTxType, coin: CoinInfo) -> TxAckPrevTxType:
return tx return tx
def sanitize_tx_input(txi: TxAckInputType, coin: CoinInfo) -> TxAckInputType: def sanitize_tx_input(txi: TxInput, coin: CoinInfo) -> TxInput:
if len(txi.prev_hash) != TX_HASH_SIZE: if len(txi.prev_hash) != TX_HASH_SIZE:
raise wire.DataError("Provided prev_hash is invalid.") raise wire.DataError("Provided prev_hash is invalid.")
if txi.multisig and txi.script_type not in common.MULTISIG_INPUT_SCRIPT_TYPES: if txi.multisig and txi.script_type not in common.MULTISIG_INPUT_SCRIPT_TYPES:
@ -294,9 +294,7 @@ def sanitize_tx_input(txi: TxAckInputType, coin: CoinInfo) -> TxAckInputType:
return txi return txi
def sanitize_tx_prev_input( def sanitize_tx_prev_input(txi: PrevInput, coin: CoinInfo) -> PrevInput:
txi: TxAckPrevInputType, coin: CoinInfo
) -> TxAckPrevInputType:
if len(txi.prev_hash) != TX_HASH_SIZE: if len(txi.prev_hash) != TX_HASH_SIZE:
raise wire.DataError("Provided prev_hash is invalid.") raise wire.DataError("Provided prev_hash is invalid.")
if not coin.decred and txi.decred_tree is not None: if not coin.decred and txi.decred_tree is not None:
@ -304,7 +302,7 @@ def sanitize_tx_prev_input(
return txi return txi
def sanitize_tx_output(txo: TxAckOutputType, coin: CoinInfo) -> TxAckOutputType: def sanitize_tx_output(txo: TxOutput, coin: CoinInfo) -> TxOutput:
if txo.multisig and txo.script_type not in common.MULTISIG_OUTPUT_SCRIPT_TYPES: if txo.multisig and txo.script_type not in common.MULTISIG_OUTPUT_SCRIPT_TYPES:
raise wire.DataError("Multisig field provided but not expected.") raise wire.DataError("Multisig field provided but not expected.")
if txo.address_n and txo.script_type not in common.CHANGE_OUTPUT_SCRIPT_TYPES: if txo.address_n and txo.script_type not in common.CHANGE_OUTPUT_SCRIPT_TYPES:

View File

@ -15,7 +15,7 @@ from . import omni
if False: if False:
from typing import Iterator from typing import Iterator
from trezor import wire from trezor import wire
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
@ -34,9 +34,7 @@ def split_op_return(data: str) -> Iterator[str]:
return chunks(data, 18) return chunks(data, 18)
async def confirm_output( async def confirm_output(ctx: wire.Context, output: TxOutput, coin: CoinInfo) -> None:
ctx: wire.Context, output: TxAckOutputType, coin: CoinInfo
) -> None:
if output.script_type == OutputScriptType.PAYTOOPRETURN: if output.script_type == OutputScriptType.PAYTOOPRETURN:
data = output.op_return_data data = output.op_return_data
assert data is not None assert data is not None

View File

@ -7,8 +7,8 @@ from ..common import BIP32_WALLET_DEPTH
if False: if False:
from typing import Any, Union, Generic, TypeVar from typing import Any, Union, Generic, TypeVar
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
T = TypeVar("T") T = TypeVar("T")
else: else:
@ -46,13 +46,13 @@ class MatchChecker(Generic[T]):
self.attribute = self.UNDEFINED # type: Union[object, T] self.attribute = self.UNDEFINED # type: Union[object, T]
self.read_only = False # Failsafe to ensure that add_input() is not accidentally called after output_matches(). self.read_only = False # Failsafe to ensure that add_input() is not accidentally called after output_matches().
def attribute_from_tx(self, txio: Union[TxAckInputType, TxAckOutputType]) -> T: def attribute_from_tx(self, txio: Union[TxInput, TxOutput]) -> T:
# Return the attribute from the txio, which is to be used for matching. # Return the attribute from the txio, which is to be used for matching.
# If the txio is invalid for matching, then return an object which # If the txio is invalid for matching, then return an object which
# evaluates as a boolean False. # evaluates as a boolean False.
raise NotImplementedError raise NotImplementedError
def add_input(self, txi: TxAckInputType) -> None: def add_input(self, txi: TxInput) -> None:
ensure(not self.read_only) ensure(not self.read_only)
if self.attribute is self.MISMATCH: if self.attribute is self.MISMATCH:
@ -66,7 +66,7 @@ class MatchChecker(Generic[T]):
elif self.attribute != added_attribute: elif self.attribute != added_attribute:
self.attribute = self.MISMATCH self.attribute = self.MISMATCH
def check_input(self, txi: TxAckInputType) -> None: def check_input(self, txi: TxInput) -> None:
if self.attribute is self.MISMATCH: if self.attribute is self.MISMATCH:
return # There was already a mismatch when adding inputs, ignore it now. return # There was already a mismatch when adding inputs, ignore it now.
@ -75,7 +75,7 @@ class MatchChecker(Generic[T]):
if self.attribute != self.attribute_from_tx(txi): if self.attribute != self.attribute_from_tx(txi):
raise wire.ProcessError("Transaction has changed during signing") raise wire.ProcessError("Transaction has changed during signing")
def output_matches(self, txo: TxAckOutputType) -> bool: def output_matches(self, txo: TxOutput) -> bool:
self.read_only = True self.read_only = True
if self.attribute is self.MISMATCH: if self.attribute is self.MISMATCH:
@ -85,14 +85,14 @@ class MatchChecker(Generic[T]):
class WalletPathChecker(MatchChecker): class WalletPathChecker(MatchChecker):
def attribute_from_tx(self, txio: Union[TxAckInputType, TxAckOutputType]) -> Any: def attribute_from_tx(self, txio: Union[TxInput, TxOutput]) -> Any:
if len(txio.address_n) < BIP32_WALLET_DEPTH: if len(txio.address_n) < BIP32_WALLET_DEPTH:
return None return None
return txio.address_n[:-BIP32_WALLET_DEPTH] return txio.address_n[:-BIP32_WALLET_DEPTH]
class MultisigFingerprintChecker(MatchChecker): class MultisigFingerprintChecker(MatchChecker):
def attribute_from_tx(self, txio: Union[TxAckInputType, TxAckOutputType]) -> Any: def attribute_from_tx(self, txio: Union[TxInput, TxOutput]) -> Any:
if not txio.multisig: if not txio.multisig:
return None return None
return multisig.multisig_fingerprint(txio.multisig) return multisig.multisig_fingerprint(txio.multisig)

View File

@ -10,7 +10,7 @@ from micropython import const
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
if False: if False:
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
# transaction header size: 4 byte version # transaction header size: 4 byte version
_TXSIZE_HEADER = const(4) _TXSIZE_HEADER = const(4)
@ -52,7 +52,7 @@ class TxWeightCalculator:
self.counter += self.ser_length_size(self.inputs_count) self.counter += self.ser_length_size(self.inputs_count)
self.segwit = True self.segwit = True
def add_input(self, i: TxAckInputType) -> None: def add_input(self, i: TxInput) -> None:
if i.multisig: if i.multisig:
multisig_script_size = _TXSIZE_MULTISIGSCRIPT + len(i.multisig.pubkeys) * ( multisig_script_size = _TXSIZE_MULTISIGSCRIPT + len(i.multisig.pubkeys) * (

View File

@ -4,9 +4,9 @@ from micropython import const
from trezor import wire from trezor import wire
from trezor.crypto.hashlib import blake2b from trezor.crypto.hashlib import blake2b
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from trezor.messages.PrevTx import PrevTx
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType
from trezor.utils import HashWriter, ensure from trezor.utils import HashWriter, ensure
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
@ -64,7 +64,7 @@ class Zcashlike(Bitcoinlike):
async def get_tx_digest( async def get_tx_digest(
self, self,
i: int, i: int,
txi: TxAckInputType, txi: TxInput,
public_keys: List[bytes], public_keys: List[bytes],
threshold: int, threshold: int,
script_pubkey: bytes, script_pubkey: bytes,
@ -72,7 +72,7 @@ class Zcashlike(Bitcoinlike):
return self.hash143_preimage_hash(txi, public_keys, threshold) return self.hash143_preimage_hash(txi, public_keys, threshold)
def write_tx_header( def write_tx_header(
self, w: Writer, tx: Union[SignTx, TxAckPrevTxType], witness_marker: bool self, w: Writer, tx: Union[SignTx, PrevTx], witness_marker: bool
) -> None: ) -> None:
if tx.version < 3: if tx.version < 3:
# pre-overwinter # pre-overwinter
@ -84,7 +84,7 @@ class Zcashlike(Bitcoinlike):
write_uint32(w, tx.version | OVERWINTERED) write_uint32(w, tx.version | OVERWINTERED)
write_uint32(w, tx.version_group_id) # nVersionGroupId write_uint32(w, tx.version_group_id) # nVersionGroupId
def write_tx_footer(self, w: Writer, tx: Union[SignTx, TxAckPrevTxType]) -> None: def write_tx_footer(self, w: Writer, tx: Union[SignTx, PrevTx]) -> None:
assert tx.expiry is not None # checked in sanitize_* assert tx.expiry is not None # checked in sanitize_*
write_uint32(w, tx.lock_time) write_uint32(w, tx.lock_time)
if tx.version >= 3: if tx.version >= 3:
@ -99,7 +99,7 @@ class Zcashlike(Bitcoinlike):
self.h_outputs = HashWriter(blake2b(outlen=32, personal=b"ZcashOutputsHash")) self.h_outputs = HashWriter(blake2b(outlen=32, personal=b"ZcashOutputsHash"))
def hash143_preimage_hash( def hash143_preimage_hash(
self, txi: TxAckInputType, public_keys: List[bytes], threshold: int self, txi: TxInput, public_keys: List[bytes], threshold: int
) -> bytes: ) -> bytes:
h_preimage = HashWriter( h_preimage = HashWriter(
blake2b( blake2b(
@ -156,7 +156,7 @@ class Zcashlike(Bitcoinlike):
def derive_script_code( def derive_script_code(
txi: TxAckInputType, public_keys: List[bytes], threshold: int, coin: CoinInfo txi: TxInput, public_keys: List[bytes], threshold: int, coin: CoinInfo
) -> bytearray: ) -> bytearray:
if len(public_keys) > 1: if len(public_keys) > 1:
return output_script_multisig(public_keys, threshold) return output_script_multisig(public_keys, threshold)

View File

@ -18,10 +18,10 @@ from apps.common.writers import ( # noqa: F401
if False: if False:
from typing import Union from typing import Union
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.utils import HashWriter from trezor.utils import HashWriter
from apps.common.writers import Writer from apps.common.writers import Writer
@ -38,16 +38,14 @@ def write_bytes_prefixed(w: Writer, b: bytes) -> None:
write_bytes_unchecked(w, b) write_bytes_unchecked(w, b)
def write_tx_input( def write_tx_input(w: Writer, i: Union[TxInput, PrevInput], script: bytes,) -> None:
w: Writer, i: Union[TxAckInputType, TxAckPrevInputType], script: bytes,
) -> None:
write_bytes_reversed(w, i.prev_hash, TX_HASH_SIZE) write_bytes_reversed(w, i.prev_hash, TX_HASH_SIZE)
write_uint32(w, i.prev_index) write_uint32(w, i.prev_index)
write_bytes_prefixed(w, script) write_bytes_prefixed(w, script)
write_uint32(w, i.sequence) write_uint32(w, i.sequence)
def write_tx_input_check(w: Writer, i: TxAckInputType) -> None: def write_tx_input_check(w: Writer, i: TxInput) -> None:
write_bytes_fixed(w, i.prev_hash, TX_HASH_SIZE) write_bytes_fixed(w, i.prev_hash, TX_HASH_SIZE)
write_uint32(w, i.prev_index) write_uint32(w, i.prev_index)
write_uint32(w, i.script_type) write_uint32(w, i.script_type)
@ -59,7 +57,7 @@ def write_tx_input_check(w: Writer, i: TxAckInputType) -> None:
def write_tx_output( def write_tx_output(
w: Writer, o: Union[TxAckOutputType, TxAckPrevOutputType], script_pubkey: bytes w: Writer, o: Union[TxOutput, PrevOutput], script_pubkey: bytes
) -> None: ) -> None:
write_uint64(w, o.amount) write_uint64(w, o.amount)
write_bytes_prefixed(w, script_pubkey) write_bytes_prefixed(w, script_pubkey)

View File

@ -10,7 +10,7 @@ if __debug__:
pass pass
class TxAckPrevInputType(p.MessageType): class PrevInput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -10,7 +10,7 @@ if __debug__:
pass pass
class TxAckPrevOutputType(p.MessageType): class PrevOutput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -10,7 +10,7 @@ if __debug__:
pass pass
class TxAckPrevTxType(p.MessageType): class PrevTx(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
import protobuf as p import protobuf as p
from .TxAckInputType import TxAckInputType from .TxInput import TxInput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckInputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
input: TxAckInputType, input: TxInput,
) -> None: ) -> None:
self.input = input self.input = input
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
2: ('input', TxAckInputType, p.FLAG_REQUIRED), 2: ('input', TxInput, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
import protobuf as p import protobuf as p
from .TxAckOutputType import TxAckOutputType from .TxOutput import TxOutput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckOutputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
output: TxAckOutputType, output: TxOutput,
) -> None: ) -> None:
self.output = output self.output = output
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
5: ('output', TxAckOutputType, p.FLAG_REQUIRED), 5: ('output', TxOutput, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
import protobuf as p import protobuf as p
from .TxAckPrevInputType import TxAckPrevInputType from .PrevInput import PrevInput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckPrevInputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
input: TxAckPrevInputType, input: PrevInput,
) -> None: ) -> None:
self.input = input self.input = input
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
2: ('input', TxAckPrevInputType, p.FLAG_REQUIRED), 2: ('input', PrevInput, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
import protobuf as p import protobuf as p
from .TxAckPrevTxType import TxAckPrevTxType from .PrevTx import PrevTx
if __debug__: if __debug__:
try: try:
@ -18,12 +18,12 @@ class TxAckPrevMeta(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
tx: TxAckPrevTxType, tx: PrevTx,
) -> None: ) -> None:
self.tx = tx self.tx = tx
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
1: ('tx', TxAckPrevTxType, p.FLAG_REQUIRED), 1: ('tx', PrevTx, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
import protobuf as p import protobuf as p
from .TxAckPrevOutputType import TxAckPrevOutputType from .PrevOutput import PrevOutput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckPrevOutputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
output: TxAckPrevOutputType, output: PrevOutput,
) -> None: ) -> None:
self.output = output self.output = output
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
3: ('output', TxAckPrevOutputType, p.FLAG_REQUIRED), 3: ('output', PrevOutput, p.FLAG_REQUIRED),
} }

View File

@ -13,7 +13,7 @@ if __debug__:
pass pass
class TxAckInputType(p.MessageType): class TxInput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -13,7 +13,7 @@ if __debug__:
pass pass
class TxAckOutputType(p.MessageType): class TxOutput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -2,8 +2,8 @@ from common import unittest, await_result, H_
from trezor import wire from trezor import wire
from trezor.messages.AuthorizeCoinJoin import AuthorizeCoinJoin from trezor.messages.AuthorizeCoinJoin import AuthorizeCoinJoin
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages import InputScriptType, OutputScriptType from trezor.messages import InputScriptType, OutputScriptType
@ -32,7 +32,7 @@ class TestApprover(unittest.TestCase):
# Other's inputs. # Other's inputs.
inputs = [ inputs = [
TxAckInputType( TxInput(
prev_hash=b"", prev_hash=b"",
prev_index=0, prev_index=0,
amount=denomination + 1000000 * (i + 1), amount=denomination + 1000000 * (i + 1),
@ -44,7 +44,7 @@ class TestApprover(unittest.TestCase):
# Our input. # Our input.
inputs.insert( inputs.insert(
30, 30,
TxAckInputType( TxInput(
prev_hash=b"", prev_hash=b"",
prev_index=0, prev_index=0,
address_n=[H_(84), H_(0), H_(0), 0, 1], address_n=[H_(84), H_(0), H_(0), 0, 1],
@ -56,7 +56,7 @@ class TestApprover(unittest.TestCase):
# Other's CoinJoined outputs. # Other's CoinJoined outputs.
outputs = [ outputs = [
TxAckOutputType( TxOutput(
amount=denomination, amount=denomination,
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
) for i in range(99) ) for i in range(99)
@ -65,7 +65,7 @@ class TestApprover(unittest.TestCase):
# Our CoinJoined output. # Our CoinJoined output.
outputs.insert( outputs.insert(
40, 40,
TxAckOutputType( TxOutput(
address_n=[H_(84), H_(0), H_(0), 0, 2], address_n=[H_(84), H_(0), H_(0), 0, 2],
amount=denomination, amount=denomination,
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
@ -78,7 +78,7 @@ class TestApprover(unittest.TestCase):
# Other's change-outputs. # Other's change-outputs.
outputs.extend( outputs.extend(
TxAckOutputType( TxOutput(
amount=1000000 * (i + 1) - fees, amount=1000000 * (i + 1) - fees,
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
) for i in range(99) ) for i in range(99)
@ -86,7 +86,7 @@ class TestApprover(unittest.TestCase):
# Our change-output. # Our change-output.
outputs.append( outputs.append(
TxAckOutputType( TxOutput(
address_n=[H_(84), H_(0), H_(0), 1, 1], address_n=[H_(84), H_(0), H_(0), 1, 1],
amount=1000000 - fees, amount=1000000 - fees,
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
@ -95,7 +95,7 @@ class TestApprover(unittest.TestCase):
# Coordinator's output. # Coordinator's output.
outputs.append( outputs.append(
TxAckOutputType( TxOutput(
amount=total_coordinator_fee, amount=total_coordinator_fee,
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
) )
@ -124,7 +124,7 @@ class TestApprover(unittest.TestCase):
tx = SignTx(outputs_count=201, inputs_count=100, coin_name=self.coin.coin_name, lock_time=0) tx = SignTx(outputs_count=201, inputs_count=100, coin_name=self.coin.coin_name, lock_time=0)
approver = CoinJoinApprover(tx, self.coin, authorization) approver = CoinJoinApprover(tx, self.coin, authorization)
txi = TxAckInputType( txi = TxInput(
prev_hash=b"", prev_hash=b"",
prev_index=0, prev_index=0,
address_n=[H_(49), H_(0), H_(0), 0], address_n=[H_(49), H_(0), H_(0), 0],
@ -140,7 +140,7 @@ class TestApprover(unittest.TestCase):
tx = SignTx(outputs_count=201, inputs_count=100, coin_name=self.coin.coin_name, lock_time=0) tx = SignTx(outputs_count=201, inputs_count=100, coin_name=self.coin.coin_name, lock_time=0)
approver = CoinJoinApprover(tx, self.coin, authorization) approver = CoinJoinApprover(tx, self.coin, authorization)
txi = TxAckInputType( txi = TxInput(
prev_hash=b"", prev_hash=b"",
prev_index=0, prev_index=0,
address_n=[H_(49), H_(0), H_(0), 0, 2], address_n=[H_(49), H_(0), H_(0), 0, 2],

View File

@ -7,9 +7,9 @@ from apps.bitcoin.writers import get_tx_hash
from apps.common import coins from apps.common import coins
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from trezor.messages import OutputScriptType from trezor.messages import OutputScriptType
from trezor.crypto import bip39 from trezor.crypto import bip39
@ -19,7 +19,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
# pylint: disable=C0301 # pylint: disable=C0301
tx = SignTx(coin_name='Bitcoin', version=1, lock_time=0x00000011, inputs_count=2, outputs_count=2) tx = SignTx(coin_name='Bitcoin', version=1, lock_time=0x00000011, inputs_count=2, outputs_count=2)
inp1 = TxAckInputType(address_n=[0], inp1 = TxInput(address_n=[0],
# Trezor expects hash in reversed format # Trezor expects hash in reversed format
prev_hash=unhexlify('9f96ade4b41d5433f4eda31e1738ec2b36f6e7d1420d94a6af99801a88f7f7ff'), prev_hash=unhexlify('9f96ade4b41d5433f4eda31e1738ec2b36f6e7d1420d94a6af99801a88f7f7ff'),
prev_index=0, prev_index=0,
@ -27,7 +27,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
script_type=InputScriptType.SPENDWITNESS, script_type=InputScriptType.SPENDWITNESS,
multisig=None, multisig=None,
sequence=0xffffffee) sequence=0xffffffee)
inp2 = TxAckInputType(address_n=[1], inp2 = TxInput(address_n=[1],
# Trezor expects hash in reversed format # Trezor expects hash in reversed format
prev_hash=unhexlify('8ac60eb9575db5b2d987e29f301b5b819ea83a5c6579d282d189cc04b8e151ef'), prev_hash=unhexlify('8ac60eb9575db5b2d987e29f301b5b819ea83a5c6579d282d189cc04b8e151ef'),
prev_index=1, prev_index=1,
@ -35,12 +35,12 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
amount=600000000, # 6 btc amount=600000000, # 6 btc
script_type=InputScriptType.SPENDWITNESS, script_type=InputScriptType.SPENDWITNESS,
sequence=0xffffffff) sequence=0xffffffff)
out1 = TxAckOutputType(address='1Cu32FVupVCgHkMMRJdYJugxwo2Aprgk7H', # derived out1 = TxOutput(address='1Cu32FVupVCgHkMMRJdYJugxwo2Aprgk7H', # derived
amount=0x0000000006b22c20, amount=0x0000000006b22c20,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
multisig=None, multisig=None,
address_n=[]) address_n=[])
out2 = TxAckOutputType(address='16TZ8J6Q5iZKBWizWzFAYnrsaox5Z5aBRV', # derived out2 = TxOutput(address='16TZ8J6Q5iZKBWizWzFAYnrsaox5Z5aBRV', # derived
amount=0x000000000d519390, amount=0x000000000d519390,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
multisig=None, multisig=None,
@ -70,7 +70,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
for txo in [self.out1, self.out2]: for txo in [self.out1, self.out2]:
script_pubkey = output_derive_script(txo.address, coin) script_pubkey = output_derive_script(txo.address, coin)
txo_bin = TxAckPrevOutputType(amount=txo.amount, script_pubkey=script_pubkey) txo_bin = PrevOutput(amount=txo.amount, script_pubkey=script_pubkey)
bip143.hash143_add_output(txo_bin, script_pubkey) bip143.hash143_add_output(txo_bin, script_pubkey)
outputs_hash = get_tx_hash(bip143.h_outputs, double=coin.sign_hash_double) outputs_hash = get_tx_hash(bip143.h_outputs, double=coin.sign_hash_double)
@ -86,7 +86,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
for txo in [self.out1, self.out2]: for txo in [self.out1, self.out2]:
script_pubkey = output_derive_script(txo.address, coin) script_pubkey = output_derive_script(txo.address, coin)
txo_bin = TxAckPrevOutputType(amount=txo.amount, script_pubkey=script_pubkey) txo_bin = PrevOutput(amount=txo.amount, script_pubkey=script_pubkey)
bip143.hash143_add_output(txo_bin, script_pubkey) bip143.hash143_add_output(txo_bin, script_pubkey)
keychain = Keychain(seed, coin.curve_name, [[]]) keychain = Keychain(seed, coin.curve_name, [[]])

View File

@ -7,9 +7,9 @@ from apps.bitcoin.writers import get_tx_hash
from apps.common import coins from apps.common import coins
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from trezor.messages import OutputScriptType from trezor.messages import OutputScriptType
from trezor.crypto import bip39 from trezor.crypto import bip39
@ -19,7 +19,7 @@ class TestSegwitBip143(unittest.TestCase):
# pylint: disable=C0301 # pylint: disable=C0301
tx = SignTx(coin_name='Bitcoin', version=1, lock_time=0x00000492, inputs_count=1, outputs_count=2) tx = SignTx(coin_name='Bitcoin', version=1, lock_time=0x00000492, inputs_count=1, outputs_count=2)
inp1 = TxAckInputType(address_n=[0], inp1 = TxInput(address_n=[0],
# Trezor expects hash in reversed format # Trezor expects hash in reversed format
prev_hash=unhexlify('77541aeb3c4dac9260b68f74f44c973081a9d4cb2ebe8038b2d70faa201b6bdb'), prev_hash=unhexlify('77541aeb3c4dac9260b68f74f44c973081a9d4cb2ebe8038b2d70faa201b6bdb'),
prev_index=1, prev_index=1,
@ -27,12 +27,12 @@ class TestSegwitBip143(unittest.TestCase):
amount=1000000000, # 10 btc amount=1000000000, # 10 btc
script_type=InputScriptType.SPENDP2SHWITNESS, # TODO: is this correct? script_type=InputScriptType.SPENDP2SHWITNESS, # TODO: is this correct?
sequence=0xfffffffe) sequence=0xfffffffe)
out1 = TxAckOutputType(address='1Fyxts6r24DpEieygQiNnWxUdb18ANa5p7', out1 = TxOutput(address='1Fyxts6r24DpEieygQiNnWxUdb18ANa5p7',
amount=0x000000000bebb4b8, amount=0x000000000bebb4b8,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
multisig=None, multisig=None,
address_n=[]) address_n=[])
out2 = TxAckOutputType(address='1Q5YjKVj5yQWHBBsyEBamkfph3cA6G9KK8', out2 = TxOutput(address='1Q5YjKVj5yQWHBBsyEBamkfph3cA6G9KK8',
amount=0x000000002faf0800, amount=0x000000002faf0800,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
multisig=None, multisig=None,
@ -59,7 +59,7 @@ class TestSegwitBip143(unittest.TestCase):
for txo in [self.out1, self.out2]: for txo in [self.out1, self.out2]:
script_pubkey = output_derive_script(txo.address, coin) script_pubkey = output_derive_script(txo.address, coin)
txo_bin = TxAckPrevOutputType(amount=txo.amount, script_pubkey=script_pubkey) txo_bin = PrevOutput(amount=txo.amount, script_pubkey=script_pubkey)
bip143.hash143_add_output(txo_bin, script_pubkey) bip143.hash143_add_output(txo_bin, script_pubkey)
outputs_hash = get_tx_hash(bip143.h_outputs, double=coin.sign_hash_double) outputs_hash = get_tx_hash(bip143.h_outputs, double=coin.sign_hash_double)
@ -72,7 +72,7 @@ class TestSegwitBip143(unittest.TestCase):
bip143.hash143_add_input(self.inp1) bip143.hash143_add_input(self.inp1)
for txo in [self.out1, self.out2]: for txo in [self.out1, self.out2]:
script_pubkey = output_derive_script(txo.address, coin) script_pubkey = output_derive_script(txo.address, coin)
txo_bin = TxAckPrevOutputType(amount=txo.amount, script_pubkey=script_pubkey) txo_bin = PrevOutput(amount=txo.amount, script_pubkey=script_pubkey)
bip143.hash143_add_output(txo_bin, script_pubkey) bip143.hash143_add_output(txo_bin, script_pubkey)
keychain = Keychain(seed, coin.curve_name, [[]]) keychain = Keychain(seed, coin.curve_name, [[]])

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -43,7 +43,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0],
amount=12300000, amount=12300000,
@ -53,24 +53,24 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('160014d16b8c0680c61fc6ed2e407455715055e41052f5'), pinp1 = PrevInput(script_sig=unhexlify('160014d16b8c0680c61fc6ed2e407455715055e41052f5'),
prev_hash=unhexlify('20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337'), prev_hash=unhexlify('20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337'),
prev_index=0, prev_index=0,
sequence=4294967295) sequence=4294967295)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c'), pout1 = PrevOutput(script_pubkey=unhexlify('00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c'),
amount=12300000) amount=12300000)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout2 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=111145789) amount=111145789)
out1 = TxAckOutputType( out1 = TxOutput(
address='2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp', address='2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp',
amount=5000000, amount=5000000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address='tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu', address='tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu',
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=12300000 - 11000 - 5000000, amount=12300000 - 11000 - 5000000,
@ -174,7 +174,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0],
amount=12300000, amount=12300000,
@ -184,24 +184,24 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('160014d16b8c0680c61fc6ed2e407455715055e41052f5'), pinp1 = PrevInput(script_sig=unhexlify('160014d16b8c0680c61fc6ed2e407455715055e41052f5'),
prev_hash=unhexlify('20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337'), prev_hash=unhexlify('20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337'),
prev_index=0, prev_index=0,
sequence=4294967295) sequence=4294967295)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c'), pout1 = PrevOutput(script_pubkey=unhexlify('00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c'),
amount=12300000) amount=12300000)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout2 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=111145789) amount=111145789)
out1 = TxAckOutputType( out1 = TxOutput(
address='2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp', address='2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp',
amount=5000000, amount=5000000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address=None, address=None,
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
@ -260,7 +260,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
serialized_tx=unhexlify('8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02'), serialized_tx=unhexlify('8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02'),
)), )),
# the out has to be cloned not to send the same object which was modified # the out has to be cloned not to send the same object which was modified
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out1.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out1.__dict__))),
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
# returned serialized out1 # returned serialized out1
@ -268,7 +268,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
signature_index=None, signature_index=None,
signature=None, signature=None,
)), )),
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out2.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out2.__dict__))),
# segwit # segwit
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
@ -303,7 +303,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0],
amount=12300000, amount=12300000,
@ -313,17 +313,17 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('160014d16b8c0680c61fc6ed2e407455715055e41052f5'), pinp1 = PrevInput(script_sig=unhexlify('160014d16b8c0680c61fc6ed2e407455715055e41052f5'),
prev_hash=unhexlify('20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337'), prev_hash=unhexlify('20912f98ea3ed849042efed0fdac8cb4fc301961c5988cba56902d8ffb61c337'),
prev_index=0, prev_index=0,
sequence=4294967295) sequence=4294967295)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c'), pout1 = PrevOutput(script_pubkey=unhexlify('00140099a7ecbd938ed1839f5f6bf6d50933c6db9d5c'),
amount=12300000) amount=12300000)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout2 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=111145789) amount=111145789)
out1 = TxAckOutputType( out1 = TxOutput(
address='TB1Q694CCP5QCC0UDMFWGP692U2S2HJPQ5H407URTU', # Error: should be lower case address='TB1Q694CCP5QCC0UDMFWGP692U2S2HJPQ5H407URTU', # Error: should be lower case
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=12300000 - 11000 - 5000000, amount=12300000 - 11000 - 5000000,

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -44,7 +44,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
coin = coins.by_name('Groestlcoin Testnet') coin = coins.by_name('Groestlcoin Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 84'/1'/0'/0/0" - tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja # 84'/1'/0'/0/0" - tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja
address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0],
amount=12300000, amount=12300000,
@ -54,24 +54,24 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
sequence=0xfffffffe, sequence=0xfffffffe,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=650645, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=650645, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('483045022100d9615361c044e91f6dd7bb4455f3ad686cd5a663d7800bb74c448b2706500ccb022026bed24b81a501e8398411c5a9a793741d9bfe39617d51c363dde0a84f44f4f9012102659a6eefcc72d6f2eff92e57095388b17db0b06034946ecd44120e5e7a830ff4'), pinp1 = PrevInput(script_sig=unhexlify('483045022100d9615361c044e91f6dd7bb4455f3ad686cd5a663d7800bb74c448b2706500ccb022026bed24b81a501e8398411c5a9a793741d9bfe39617d51c363dde0a84f44f4f9012102659a6eefcc72d6f2eff92e57095388b17db0b06034946ecd44120e5e7a830ff4'),
prev_hash=unhexlify('1c92508b38239e5c10b23fb46dcf765ee2f3a95b835edbf0943ec21b21711160'), prev_hash=unhexlify('1c92508b38239e5c10b23fb46dcf765ee2f3a95b835edbf0943ec21b21711160'),
prev_index=1, prev_index=1,
sequence=4294967293) sequence=4294967293)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1'), pout1 = PrevOutput(script_pubkey=unhexlify('0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1'),
amount=12300000) amount=12300000)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91438cc090e4a4b2e458c33fe35af1c5c0094699ac288ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a91438cc090e4a4b2e458c33fe35af1c5c0094699ac288ac'),
amount=9887699777) amount=9887699777)
out1 = TxAckOutputType( out1 = TxOutput(
address='2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e', address='2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e',
amount=5000000, amount=5000000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address='tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57', address='tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57',
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=12300000 - 11000 - 5000000, amount=12300000 - 11000 - 5000000,
@ -175,7 +175,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
coin = coins.by_name('Groestlcoin Testnet') coin = coins.by_name('Groestlcoin Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 84'/1'/0'/0/0" - tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja # 84'/1'/0'/0/0" - tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja
address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0],
amount=12300000, amount=12300000,
@ -185,24 +185,24 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
sequence=0xfffffffe, sequence=0xfffffffe,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=650645, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=650645, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('483045022100d9615361c044e91f6dd7bb4455f3ad686cd5a663d7800bb74c448b2706500ccb022026bed24b81a501e8398411c5a9a793741d9bfe39617d51c363dde0a84f44f4f9012102659a6eefcc72d6f2eff92e57095388b17db0b06034946ecd44120e5e7a830ff4'), pinp1 = PrevInput(script_sig=unhexlify('483045022100d9615361c044e91f6dd7bb4455f3ad686cd5a663d7800bb74c448b2706500ccb022026bed24b81a501e8398411c5a9a793741d9bfe39617d51c363dde0a84f44f4f9012102659a6eefcc72d6f2eff92e57095388b17db0b06034946ecd44120e5e7a830ff4'),
prev_hash=unhexlify('1c92508b38239e5c10b23fb46dcf765ee2f3a95b835edbf0943ec21b21711160'), prev_hash=unhexlify('1c92508b38239e5c10b23fb46dcf765ee2f3a95b835edbf0943ec21b21711160'),
prev_index=1, prev_index=1,
sequence=4294967293) sequence=4294967293)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1'), pout1 = PrevOutput(script_pubkey=unhexlify('0014b31dc2a236505a6cb9201fa0411ca38a254a7bf1'),
amount=12300000) amount=12300000)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91438cc090e4a4b2e458c33fe35af1c5c0094699ac288ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a91438cc090e4a4b2e458c33fe35af1c5c0094699ac288ac'),
amount=9887699777) amount=9887699777)
out1 = TxAckOutputType( out1 = TxOutput(
address='2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e', address='2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e',
amount=5000000, amount=5000000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address=None, address=None,
address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[84 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
script_type=OutputScriptType.PAYTOWITNESS, script_type=OutputScriptType.PAYTOWITNESS,
@ -261,7 +261,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
serialized_tx=unhexlify('d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02'), serialized_tx=unhexlify('d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02'),
)), )),
# the out has to be cloned not to send the same object which was modified # the out has to be cloned not to send the same object which was modified
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out1.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out1.__dict__))),
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType( TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
# returned serialized out1 # returned serialized out1
@ -269,7 +269,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
signature_index=None, signature_index=None,
signature=None, signature=None,
)), )),
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out2.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out2.__dict__))),
# segwit # segwit
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType( TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -43,7 +43,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=123456789, amount=123456789,
@ -53,24 +53,24 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c'), pinp1 = PrevInput(script_sig=unhexlify('4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c'),
prev_hash=unhexlify('802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a'), prev_hash=unhexlify('802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a'),
prev_index=0, prev_index=0,
sequence=4294967295) sequence=4294967295)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout1 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=123456789) amount=123456789)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac'),
amount=865519308) amount=865519308)
out1 = TxAckOutputType( out1 = TxOutput(
address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC', address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC',
amount=12300000, amount=12300000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address='2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX', address='2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX',
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=123456789 - 11000 - 12300000, amount=123456789 - 11000 - 12300000,
@ -171,7 +171,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=123456789, amount=123456789,
@ -181,24 +181,24 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c'), pinp1 = PrevInput(script_sig=unhexlify('4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c'),
prev_hash=unhexlify('802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a'), prev_hash=unhexlify('802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a'),
prev_index=0, prev_index=0,
sequence=4294967295) sequence=4294967295)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout1 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=123456789) amount=123456789)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac'),
amount=865519308) amount=865519308)
out1 = TxAckOutputType( out1 = TxOutput(
address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC', address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC',
amount=12300000, amount=12300000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
script_type=OutputScriptType.PAYTOP2SHWITNESS, script_type=OutputScriptType.PAYTOP2SHWITNESS,
amount=123456789 - 11000 - 12300000, amount=123456789 - 11000 - 12300000,
@ -260,7 +260,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
'37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'), '37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'),
)), )),
# the out has to be cloned not to send the same object which was modified # the out has to be cloned not to send the same object which was modified
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out1.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out1.__dict__))),
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None),
serialized=TxRequestSerializedType( serialized=TxRequestSerializedType(
@ -270,7 +270,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
signature_index=None, signature_index=None,
signature=None, signature=None,
)), )),
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out2.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out2.__dict__))),
# segwit # segwit
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
@ -308,7 +308,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=10, amount=10,
@ -318,17 +318,17 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c'), pinp1 = PrevInput(script_sig=unhexlify('4730440220548e087d0426b20b8a571b03b9e05829f7558b80c53c12143e342f56ab29e51d02205b68cb7fb223981d4c999725ac1485a982c4259c4f50b8280f137878c232998a012102794a25b254a268e59a5869da57fbae2fadc6727cb3309321dab409b12b2fa17c'),
prev_hash=unhexlify('802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a'), prev_hash=unhexlify('802cabf0843b945eabe136d7fc7c89f41021658abf56cba000acbce88c41143a'),
prev_index=0, prev_index=0,
sequence=4294967295) sequence=4294967295)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout1 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=123456789) amount=123456789)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a914b84bacdcd8f4cc59274a5bfb73f804ca10f7fd1488ac'),
amount=865519308) amount=865519308)
inpattack = TxAckInputType( inpattack = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=9, # modified! amount=9, # modified!
@ -338,14 +338,14 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
out1 = TxAckOutputType( out1 = TxOutput(
address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC', address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC',
amount=8, amount=8,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
script_type=OutputScriptType.PAYTOP2SHWITNESS, script_type=OutputScriptType.PAYTOP2SHWITNESS,
amount=1, amount=1,

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED from trezor.messages.RequestType import TXINPUT, TXMETA, TXOUTPUT, TXFINISHED
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -44,7 +44,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
coin = coins.by_name('Groestlcoin Testnet') coin = coins.by_name('Groestlcoin Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7 # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=123456789, amount=123456789,
@ -54,24 +54,24 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
sequence=0xfffffffe, sequence=0xfffffffe,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=650749, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=650749, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('47304402201f8f57f708144c3a11da322546cb37bd385aa825d940c37e8016f0efd6ec3e9402202a41bc02c29e4f3f13efd4bededbcd4308a6393279111d614ee1f7635cf3e65701210371546a36bdf6bc82087301b3f6e759736dc8790150673d2e7e2715d2ad72f3a4'), pinp1 = PrevInput(script_sig=unhexlify('47304402201f8f57f708144c3a11da322546cb37bd385aa825d940c37e8016f0efd6ec3e9402202a41bc02c29e4f3f13efd4bededbcd4308a6393279111d614ee1f7635cf3e65701210371546a36bdf6bc82087301b3f6e759736dc8790150673d2e7e2715d2ad72f3a4'),
prev_hash=unhexlify('4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1'), prev_hash=unhexlify('4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1'),
prev_index=1, prev_index=1,
sequence=4294967294) sequence=4294967294)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout1 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=123456789) amount=123456789)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91435528b20e9a793cf2c3a1cf9cff1f2127ad377da88ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a91435528b20e9a793cf2c3a1cf9cff1f2127ad377da88ac'),
amount=9764242764) amount=9764242764)
out1 = TxAckOutputType( out1 = TxOutput(
address='mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y', address='mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y',
amount=12300000, amount=12300000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address='2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7', address='2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7',
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=123456789 - 11000 - 12300000, amount=123456789 - 11000 - 12300000,
@ -175,7 +175,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
coin = coins.by_name('Groestlcoin Testnet') coin = coins.by_name('Groestlcoin Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7 # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=123456789, amount=123456789,
@ -185,24 +185,24 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
sequence=0xfffffffe, sequence=0xfffffffe,
multisig=None, multisig=None,
) )
ptx1 = TxAckPrevTxType(version=1, lock_time=650749, inputs_count=1, outputs_count=2, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=650749, inputs_count=1, outputs_count=2, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('47304402201f8f57f708144c3a11da322546cb37bd385aa825d940c37e8016f0efd6ec3e9402202a41bc02c29e4f3f13efd4bededbcd4308a6393279111d614ee1f7635cf3e65701210371546a36bdf6bc82087301b3f6e759736dc8790150673d2e7e2715d2ad72f3a4'), pinp1 = PrevInput(script_sig=unhexlify('47304402201f8f57f708144c3a11da322546cb37bd385aa825d940c37e8016f0efd6ec3e9402202a41bc02c29e4f3f13efd4bededbcd4308a6393279111d614ee1f7635cf3e65701210371546a36bdf6bc82087301b3f6e759736dc8790150673d2e7e2715d2ad72f3a4'),
prev_hash=unhexlify('4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1'), prev_hash=unhexlify('4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1'),
prev_index=1, prev_index=1,
sequence=4294967294) sequence=4294967294)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'), pout1 = PrevOutput(script_pubkey=unhexlify('a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87'),
amount=123456789) amount=123456789)
pout2 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91435528b20e9a793cf2c3a1cf9cff1f2127ad377da88ac'), pout2 = PrevOutput(script_pubkey=unhexlify('76a91435528b20e9a793cf2c3a1cf9cff1f2127ad377da88ac'),
amount=9764242764) amount=9764242764)
out1 = TxAckOutputType( out1 = TxOutput(
address='mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y', address='mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y',
amount=12300000, amount=12300000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
script_type=OutputScriptType.PAYTOP2SHWITNESS, script_type=OutputScriptType.PAYTOP2SHWITNESS,
amount=123456789 - 11000 - 12300000, amount=123456789 - 11000 - 12300000,
@ -265,7 +265,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
'cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02'), 'cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02'),
)), )),
# the out has to be cloned not to send the same object which was modified # the out has to be cloned not to send the same object which was modified
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out1.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out1.__dict__))),
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None),
serialized=TxRequestSerializedType( serialized=TxRequestSerializedType(
@ -275,7 +275,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
signature_index=None, signature_index=None,
signature=None, signature=None,
)), )),
TxAckOutput(tx=TxAckOutputWrapper(output=TxAckOutputType(**out2.__dict__))), TxAckOutput(tx=TxAckOutputWrapper(output=TxOutput(**out2.__dict__))),
# segwit # segwit
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),

View File

@ -1,6 +1,6 @@
from common import * from common import *
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from apps.bitcoin import writers from apps.bitcoin import writers
@ -8,7 +8,7 @@ from apps.bitcoin import writers
class TestWriters(unittest.TestCase): class TestWriters(unittest.TestCase):
def test_tx_input(self): def test_tx_input(self):
inp = TxAckInputType( inp = TxInput(
address_n=[0], address_n=[0],
amount=390000, amount=390000,
prev_hash=unhexlify( prev_hash=unhexlify(
@ -28,7 +28,7 @@ class TestWriters(unittest.TestCase):
self.assertRaises(AssertionError, writers.write_tx_input, b, inp, inp.script_sig) self.assertRaises(AssertionError, writers.write_tx_input, b, inp, inp.script_sig)
def test_tx_input_check(self): def test_tx_input_check(self):
inp = TxAckInputType( inp = TxInput(
address_n=[0], address_n=[0],
amount=390000, amount=390000,
prev_hash=unhexlify( prev_hash=unhexlify(

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip32, bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -45,22 +45,22 @@ class TestSignTxFeeThreshold(unittest.TestCase):
def test_over_fee_threshold(self): def test_over_fee_threshold(self):
coin_bitcoin = coins.by_name('Bitcoin') coin_bitcoin = coins.by_name('Bitcoin')
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), pinp1 = PrevInput(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'),
prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'), prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'),
prev_index=1) prev_index=1)
pinp2 = TxAckPrevInputType(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'), pinp2 = PrevInput(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'),
prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'), prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'),
prev_index=1) prev_index=1)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'), pout1 = PrevOutput(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'),
amount=390000) amount=390000)
inp1 = TxAckInputType(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e inp1 = TxInput(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e
# amount=390000, # amount=390000,
prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'), prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'),
prev_index=0, prev_index=0,
amount=None) amount=None)
out1 = TxAckOutputType(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1', out1 = TxOutput(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1',
amount=390000 - 100000, # fee increased to 100000 => too high amount=390000 - 100000, # fee increased to 100000 => too high
multisig=None, multisig=None,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
@ -108,25 +108,25 @@ class TestSignTxFeeThreshold(unittest.TestCase):
def test_under_threshold(self): def test_under_threshold(self):
coin_bitcoin = coins.by_name('Bitcoin') coin_bitcoin = coins.by_name('Bitcoin')
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), pinp1 = PrevInput(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'),
prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'), prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'),
prev_index=1, prev_index=1,
sequence=0xffff_ffff) sequence=0xffff_ffff)
pinp2 = TxAckPrevInputType(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'), pinp2 = PrevInput(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'),
prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'), prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'),
prev_index=1, prev_index=1,
sequence=0xffff_ffff) sequence=0xffff_ffff)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'), pout1 = PrevOutput(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'),
amount=390000) amount=390000)
inp1 = TxAckInputType(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e inp1 = TxInput(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e
amount=390000, amount=390000,
prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'), prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'),
prev_index=0, prev_index=0,
multisig=None, multisig=None,
sequence=0xffff_ffff) sequence=0xffff_ffff)
out1 = TxAckOutputType(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1', out1 = TxOutput(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1',
amount=390000 - 90000, # fee increased to 90000, slightly less than the threshold amount=390000 - 90000, # fee increased to 90000, slightly less than the threshold
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
multisig=None, multisig=None,

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip32, bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA, TXFINISHED from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA, TXFINISHED
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -42,26 +42,26 @@ class TestSignTx(unittest.TestCase):
coin_bitcoin = coins.by_name('Bitcoin') coin_bitcoin = coins.by_name('Bitcoin')
ptx1 = TxAckPrevTxType(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=0, inputs_count=2, outputs_count=1, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'), pinp1 = PrevInput(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'),
prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'), prev_hash=unhexlify('c16a03f1cf8f99f6b5297ab614586cacec784c2d259af245909dedb0e39eddcf'),
prev_index=1, prev_index=1,
sequence=0xffff_ffff) sequence=0xffff_ffff)
pinp2 = TxAckPrevInputType(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'), pinp2 = PrevInput(script_sig=unhexlify('48304502200fd63adc8f6cb34359dc6cca9e5458d7ea50376cbd0a74514880735e6d1b8a4c0221008b6ead7fe5fbdab7319d6dfede3a0bc8e2a7c5b5a9301636d1de4aa31a3ee9b101410486ad608470d796236b003635718dfc07c0cac0cfc3bfc3079e4f491b0426f0676e6643a39198e8e7bdaffb94f4b49ea21baa107ec2e237368872836073668214'),
prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'), prev_hash=unhexlify('1ae39a2f8d59670c8fc61179148a8e61e039d0d9e8ab08610cb69b4a19453eaf'),
prev_index=1, prev_index=1,
sequence=0xffff_ffff) sequence=0xffff_ffff)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'), pout1 = PrevOutput(script_pubkey=unhexlify('76a91424a56db43cf6f2b02e838ea493f95d8d6047423188ac'),
amount=200000 + 200000 - 10000) amount=200000 + 200000 - 10000)
inp1 = TxAckInputType(address_n=[44 | 0x80000000, 0 | 0x80000000, 0 | 0x80000000, 0, 0], inp1 = TxInput(address_n=[44 | 0x80000000, 0 | 0x80000000, 0 | 0x80000000, 0, 0],
# amount=390000, # amount=390000,
prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'), prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'),
prev_index=0, prev_index=0,
amount=390000, amount=390000,
multisig=None, multisig=None,
sequence=0xffff_ffff) sequence=0xffff_ffff)
out1 = TxAckOutputType(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1', out1 = TxOutput(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1',
amount=390000 - 10000, amount=390000 - 10000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
multisig=None) multisig=None)

View File

@ -5,18 +5,18 @@ from trezor.crypto import bip39
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInput import TxAckInput from trezor.messages.TxAckInput import TxAckInput
from trezor.messages.TxAckInputWrapper import TxAckInputWrapper from trezor.messages.TxAckInputWrapper import TxAckInputWrapper
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutput import TxAckOutput from trezor.messages.TxAckOutput import TxAckOutput
from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper from trezor.messages.TxAckOutputWrapper import TxAckOutputWrapper
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages.TxAckPrevMeta import TxAckPrevMeta from trezor.messages.TxAckPrevMeta import TxAckPrevMeta
from trezor.messages.TxAckPrevTxType import TxAckPrevTxType from trezor.messages.PrevTx import PrevTx
from trezor.messages.TxAckPrevInput import TxAckPrevInput from trezor.messages.TxAckPrevInput import TxAckPrevInput
from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper from trezor.messages.TxAckPrevInputWrapper import TxAckPrevInputWrapper
from trezor.messages.TxAckPrevInputType import TxAckPrevInputType from trezor.messages.PrevInput import PrevInput
from trezor.messages.TxAckPrevOutput import TxAckPrevOutput from trezor.messages.TxAckPrevOutput import TxAckPrevOutput
from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from trezor.messages.TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from trezor.messages.TxRequest import TxRequest from trezor.messages.TxRequest import TxRequest
from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA, TXFINISHED from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA, TXFINISHED
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
@ -43,19 +43,19 @@ class TestSignTx_GRS(unittest.TestCase):
coin = coins.by_name('Groestlcoin') coin = coins.by_name('Groestlcoin')
ptx1 = TxAckPrevTxType(version=1, lock_time=2160993, inputs_count=1, outputs_count=1, extra_data_len=0) ptx1 = PrevTx(version=1, lock_time=2160993, inputs_count=1, outputs_count=1, extra_data_len=0)
pinp1 = TxAckPrevInputType(script_sig=unhexlify('48304502210096a287593b1212a188e778596eb8ecd4cc169b93a4d115226460d8e3deae431c02206c78ec09b3df977f04a6df5eb53181165c4ea5a0b35f826551349130f879d6b8012102cf5126ff54e38a80a919579d7091cafe24840eab1d30fe2b4d59bdd9d267cad8'), pinp1 = PrevInput(script_sig=unhexlify('48304502210096a287593b1212a188e778596eb8ecd4cc169b93a4d115226460d8e3deae431c02206c78ec09b3df977f04a6df5eb53181165c4ea5a0b35f826551349130f879d6b8012102cf5126ff54e38a80a919579d7091cafe24840eab1d30fe2b4d59bdd9d267cad8'),
prev_hash=unhexlify('7dc74a738c50c2ae1228ce9890841e5355fd6d7f2c1367e0a74403ab60db3224'), prev_hash=unhexlify('7dc74a738c50c2ae1228ce9890841e5355fd6d7f2c1367e0a74403ab60db3224'),
prev_index=0, prev_index=0,
sequence=4294967294) sequence=4294967294)
pout1 = TxAckPrevOutputType(script_pubkey=unhexlify('76a914172b4e06e9b7881a48d2ee8062b495d0b2517fe888ac'), pout1 = PrevOutput(script_pubkey=unhexlify('76a914172b4e06e9b7881a48d2ee8062b495d0b2517fe888ac'),
amount=210016) amount=210016)
inp1 = TxAckInputType(address_n=[44 | 0x80000000, 17 | 0x80000000, 0 | 0x80000000, 0, 2], # FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA inp1 = TxInput(address_n=[44 | 0x80000000, 17 | 0x80000000, 0 | 0x80000000, 0, 2], # FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA
prev_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a'), prev_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a'),
prev_index=0, prev_index=0,
amount=210016) amount=210016)
out1 = TxAckOutputType(address='FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9', out1 = TxOutput(address='FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9',
amount=210016 - 192, amount=210016 - 192,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[]) address_n=[])

View File

@ -1,7 +1,7 @@
from common import * from common import *
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckOutputType import TxAckOutputType from trezor.messages.TxOutput import TxOutput
from trezor.messages import OutputScriptType from trezor.messages import OutputScriptType
from trezor.crypto import bip32, bip39 from trezor.crypto import bip32, bip39
@ -18,7 +18,7 @@ class TestCalculateTxWeight(unittest.TestCase):
coin = coins.by_name('Bitcoin') coin = coins.by_name('Bitcoin')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e inp1 = TxInput(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e
# amount=390000, # amount=390000,
prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'), prev_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882'),
prev_index=0, prev_index=0,
@ -26,7 +26,7 @@ class TestCalculateTxWeight(unittest.TestCase):
script_type=InputScriptType.SPENDADDRESS, script_type=InputScriptType.SPENDADDRESS,
sequence=0xffff_ffff, sequence=0xffff_ffff,
multisig=None) multisig=None)
out1 = TxAckOutputType(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1', out1 = TxOutput(address='1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1',
amount=390000 - 10000, amount=390000 - 10000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
@ -46,7 +46,7 @@ class TestCalculateTxWeight(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX # 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 1, 0],
amount=123456789, amount=123456789,
@ -56,14 +56,14 @@ class TestCalculateTxWeight(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
out1 = TxAckOutputType( out1 = TxOutput(
address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC', address='mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC',
amount=12300000, amount=12300000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address='2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX', address='2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX',
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=123456789 - 11000 - 12300000, amount=123456789 - 11000 - 12300000,
@ -86,7 +86,7 @@ class TestCalculateTxWeight(unittest.TestCase):
coin = coins.by_name('Testnet') coin = coins.by_name('Testnet')
seed = bip39.seed(' '.join(['all'] * 12), '') seed = bip39.seed(' '.join(['all'] * 12), '')
inp1 = TxAckInputType( inp1 = TxInput(
# 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s # 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s
address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0], address_n=[49 | 0x80000000, 1 | 0x80000000, 0 | 0x80000000, 0, 0],
amount=12300000, amount=12300000,
@ -96,14 +96,14 @@ class TestCalculateTxWeight(unittest.TestCase):
sequence=0xffffffff, sequence=0xffffffff,
multisig=None, multisig=None,
) )
out1 = TxAckOutputType( out1 = TxOutput(
address='2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp', address='2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp',
amount=5000000, amount=5000000,
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
address_n=[], address_n=[],
multisig=None, multisig=None,
) )
out2 = TxAckOutputType( out2 = TxOutput(
address='tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu', address='tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu',
script_type=OutputScriptType.PAYTOADDRESS, script_type=OutputScriptType.PAYTOADDRESS,
amount=12300000 - 11000 - 5000000, amount=12300000 - 11000 - 5000000,

View File

@ -1,8 +1,8 @@
from common import * from common import *
from trezor.messages import InputScriptType from trezor.messages import InputScriptType
from trezor.messages.SignTx import SignTx from trezor.messages.SignTx import SignTx
from trezor.messages.TxAckInputType import TxAckInputType from trezor.messages.TxInput import TxInput
from trezor.messages.TxAckPrevOutputType import TxAckPrevOutputType from trezor.messages.PrevOutput import PrevOutput
from apps.common import coins from apps.common import coins
from apps.bitcoin.writers import get_tx_hash from apps.bitcoin.writers import get_tx_hash
@ -194,7 +194,7 @@ class TestZcashZip243(unittest.TestCase):
zip243 = Zcashlike(tx, None, coin, BasicApprover(tx, coin)) zip243 = Zcashlike(tx, None, coin, BasicApprover(tx, coin))
for i in v["inputs"]: for i in v["inputs"]:
txi = TxAckInputType( txi = TxInput(
amount = i["amount"], amount = i["amount"],
prev_hash = unhexlify(i["prevout"][0]), prev_hash = unhexlify(i["prevout"][0]),
prev_index = i["prevout"][1], prev_index = i["prevout"][1],
@ -203,7 +203,7 @@ class TestZcashZip243(unittest.TestCase):
) )
zip243.hash143_add_input(txi) zip243.hash143_add_input(txi)
for o in v["outputs"]: for o in v["outputs"]:
txo = TxAckPrevOutputType( txo = PrevOutput(
amount = o["amount"], amount = o["amount"],
script_pubkey = unhexlify(o["script_pubkey"]), script_pubkey = unhexlify(o["script_pubkey"]),
) )

View File

@ -70,20 +70,20 @@ AuthorizeCoinJoin.coordinator max_size:18
AuthorizeCoinJoin.address_n max_count:8 AuthorizeCoinJoin.address_n max_count:8
AuthorizeCoinJoin.coin_name max_size:21 AuthorizeCoinJoin.coin_name max_size:21
TxAckInputType.address_n max_count:8 TxInput.address_n max_count:8
TxAckInputType.prev_hash max_size:32 TxInput.prev_hash max_size:32
TxAckInputType.script_sig max_size:1650 TxInput.script_sig max_size:1650
TxAckInputType.witness max_size:109 TxInput.witness max_size:109
TxAckInputType.ownership_proof max_size:171 TxInput.ownership_proof max_size:171
TxAckInputType.commitment_data max_size:32 TxInput.commitment_data max_size:32
TxAckOutputType.address max_size:130 TxOutput.address max_size:130
TxAckOutputType.address_n max_count:8 TxOutput.address_n max_count:8
TxAckOutputType.op_return_data max_size:80 TxOutput.op_return_data max_size:80
TxAckPrevInputType.prev_hash max_size:32 PrevInput.prev_hash max_size:32
TxAckPrevInputType.script_sig max_size:1650 PrevInput.script_sig max_size:1650
TxAckPrevOutputType.script_pubkey max_size:520 PrevOutput.script_pubkey max_size:520
TxAckPrevExtraDataWrapper.extra_data_chunk max_size:1024 TxAckPrevExtraDataWrapper.extra_data_chunk max_size:1024

View File

@ -10,7 +10,7 @@ if __debug__:
pass pass
class TxAckPrevInputType(p.MessageType): class PrevInput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -10,7 +10,7 @@ if __debug__:
pass pass
class TxAckPrevOutputType(p.MessageType): class PrevOutput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -10,7 +10,7 @@ if __debug__:
pass pass
class TxAckPrevTxType(p.MessageType): class PrevTx(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
from .. import protobuf as p from .. import protobuf as p
from .TxAckInputType import TxAckInputType from .TxInput import TxInput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckInputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
input: TxAckInputType, input: TxInput,
) -> None: ) -> None:
self.input = input self.input = input
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
2: ('input', TxAckInputType, p.FLAG_REQUIRED), 2: ('input', TxInput, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
from .. import protobuf as p from .. import protobuf as p
from .TxAckOutputType import TxAckOutputType from .TxOutput import TxOutput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckOutputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
output: TxAckOutputType, output: TxOutput,
) -> None: ) -> None:
self.output = output self.output = output
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
5: ('output', TxAckOutputType, p.FLAG_REQUIRED), 5: ('output', TxOutput, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
from .. import protobuf as p from .. import protobuf as p
from .TxAckPrevInputType import TxAckPrevInputType from .PrevInput import PrevInput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckPrevInputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
input: TxAckPrevInputType, input: PrevInput,
) -> None: ) -> None:
self.input = input self.input = input
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
2: ('input', TxAckPrevInputType, p.FLAG_REQUIRED), 2: ('input', PrevInput, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
from .. import protobuf as p from .. import protobuf as p
from .TxAckPrevTxType import TxAckPrevTxType from .PrevTx import PrevTx
if __debug__: if __debug__:
try: try:
@ -18,12 +18,12 @@ class TxAckPrevMeta(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
tx: TxAckPrevTxType, tx: PrevTx,
) -> None: ) -> None:
self.tx = tx self.tx = tx
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
1: ('tx', TxAckPrevTxType, p.FLAG_REQUIRED), 1: ('tx', PrevTx, p.FLAG_REQUIRED),
} }

View File

@ -2,7 +2,7 @@
# fmt: off # fmt: off
from .. import protobuf as p from .. import protobuf as p
from .TxAckPrevOutputType import TxAckPrevOutputType from .PrevOutput import PrevOutput
if __debug__: if __debug__:
try: try:
@ -17,12 +17,12 @@ class TxAckPrevOutputWrapper(p.MessageType):
def __init__( def __init__(
self, self,
*, *,
output: TxAckPrevOutputType, output: PrevOutput,
) -> None: ) -> None:
self.output = output self.output = output
@classmethod @classmethod
def get_fields(cls) -> Dict: def get_fields(cls) -> Dict:
return { return {
3: ('output', TxAckPrevOutputType, p.FLAG_REQUIRED), 3: ('output', PrevOutput, p.FLAG_REQUIRED),
} }

View File

@ -13,7 +13,7 @@ if __debug__:
pass pass
class TxAckInputType(p.MessageType): class TxInput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -13,7 +13,7 @@ if __debug__:
pass pass
class TxAckOutputType(p.MessageType): class TxOutput(p.MessageType):
def __init__( def __init__(
self, self,

View File

@ -214,6 +214,9 @@ from .PinMatrixAck import PinMatrixAck
from .PinMatrixRequest import PinMatrixRequest from .PinMatrixRequest import PinMatrixRequest
from .Ping import Ping from .Ping import Ping
from .PreauthorizedRequest import PreauthorizedRequest from .PreauthorizedRequest import PreauthorizedRequest
from .PrevInput import PrevInput
from .PrevOutput import PrevOutput
from .PrevTx import PrevTx
from .PublicKey import PublicKey from .PublicKey import PublicKey
from .RecoveryDevice import RecoveryDevice from .RecoveryDevice import RecoveryDevice
from .ResetDevice import ResetDevice from .ResetDevice import ResetDevice
@ -265,22 +268,19 @@ from .TezosTransactionOp import TezosTransactionOp
from .TransactionType import TransactionType from .TransactionType import TransactionType
from .TxAck import TxAck from .TxAck import TxAck
from .TxAckInput import TxAckInput from .TxAckInput import TxAckInput
from .TxAckInputType import TxAckInputType
from .TxAckInputWrapper import TxAckInputWrapper from .TxAckInputWrapper import TxAckInputWrapper
from .TxAckOutput import TxAckOutput from .TxAckOutput import TxAckOutput
from .TxAckOutputType import TxAckOutputType
from .TxAckOutputWrapper import TxAckOutputWrapper from .TxAckOutputWrapper import TxAckOutputWrapper
from .TxAckPrevExtraData import TxAckPrevExtraData from .TxAckPrevExtraData import TxAckPrevExtraData
from .TxAckPrevExtraDataWrapper import TxAckPrevExtraDataWrapper from .TxAckPrevExtraDataWrapper import TxAckPrevExtraDataWrapper
from .TxAckPrevInput import TxAckPrevInput from .TxAckPrevInput import TxAckPrevInput
from .TxAckPrevInputType import TxAckPrevInputType
from .TxAckPrevInputWrapper import TxAckPrevInputWrapper from .TxAckPrevInputWrapper import TxAckPrevInputWrapper
from .TxAckPrevMeta import TxAckPrevMeta from .TxAckPrevMeta import TxAckPrevMeta
from .TxAckPrevOutput import TxAckPrevOutput from .TxAckPrevOutput import TxAckPrevOutput
from .TxAckPrevOutputType import TxAckPrevOutputType
from .TxAckPrevOutputWrapper import TxAckPrevOutputWrapper from .TxAckPrevOutputWrapper import TxAckPrevOutputWrapper
from .TxAckPrevTxType import TxAckPrevTxType from .TxInput import TxInput
from .TxInputType import TxInputType from .TxInputType import TxInputType
from .TxOutput import TxOutput
from .TxOutputBinType import TxOutputBinType from .TxOutputBinType import TxOutputBinType
from .TxOutputType import TxOutputType from .TxOutputType import TxOutputType
from .TxRequest import TxRequest from .TxRequest import TxRequest