mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-23 14:58:09 +00:00
core/tests: Fix unit tests after sign_tx refactor.
This commit is contained in:
parent
be7e98aa47
commit
d0b80bddc8
@ -82,7 +82,7 @@ def bech32_decode(bech: str) -> Tuple[Optional[str], Optional[List[int]]]:
|
||||
|
||||
def convertbits(
|
||||
data: Iterable[int], frombits: int, tobits: int, pad: bool = True
|
||||
) -> List[int]:
|
||||
) -> Optional[List[int]]:
|
||||
"""General power-of-2 base conversion."""
|
||||
acc = 0
|
||||
bits = 0
|
||||
@ -91,7 +91,7 @@ def convertbits(
|
||||
max_acc = (1 << (frombits + tobits - 1)) - 1
|
||||
for value in data:
|
||||
if value < 0 or (value >> frombits):
|
||||
raise ValueError
|
||||
return None
|
||||
acc = ((acc << frombits) | value) & max_acc
|
||||
bits += frombits
|
||||
while bits >= tobits:
|
||||
@ -101,7 +101,7 @@ def convertbits(
|
||||
if bits:
|
||||
ret.append((acc << (tobits - bits)) & maxv)
|
||||
elif bits >= frombits or ((acc << (tobits - bits)) & maxv):
|
||||
raise ValueError
|
||||
return None
|
||||
return ret
|
||||
|
||||
|
||||
@ -111,7 +111,7 @@ def decode(hrp: str, addr: str) -> Tuple[Optional[int], Optional[List[int]]]:
|
||||
if data is None or hrpgot != hrp:
|
||||
return (None, None)
|
||||
decoded = convertbits(data[1:], 5, 8, False)
|
||||
if len(decoded) < 2 or len(decoded) > 40:
|
||||
if decoded is None or len(decoded) < 2 or len(decoded) > 40:
|
||||
return (None, None)
|
||||
if data[0] > 16:
|
||||
return (None, None)
|
||||
@ -122,7 +122,10 @@ def decode(hrp: str, addr: str) -> Tuple[Optional[int], Optional[List[int]]]:
|
||||
|
||||
def encode(hrp: str, witver: int, witprog: Iterable[int]) -> Optional[str]:
|
||||
"""Encode a segwit address."""
|
||||
ret = bech32_encode(hrp, [witver] + convertbits(witprog, 8, 5))
|
||||
data = convertbits(witprog, 8, 5)
|
||||
if data is None:
|
||||
return None
|
||||
ret = bech32_encode(hrp, [witver] + data)
|
||||
if decode(hrp, ret) == (None, None):
|
||||
return None
|
||||
return ret
|
||||
|
@ -5,8 +5,8 @@ from trezor.utils import HashWriter
|
||||
from apps.wallet.sign_tx.addresses import validate_full_path, validate_path_for_bitcoin_public_key
|
||||
from apps.common.paths import HARDENED
|
||||
from apps.common import coins
|
||||
from apps.wallet.sign_tx import scripts
|
||||
from apps.wallet.sign_tx.addresses import *
|
||||
from apps.wallet.sign_tx.signing import *
|
||||
from apps.wallet.sign_tx.writers import *
|
||||
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
from common import *
|
||||
|
||||
from apps.wallet.sign_tx.signing import *
|
||||
from apps.wallet.sign_tx.common import *
|
||||
from apps.wallet.sign_tx.addresses import *
|
||||
from apps.common import coins
|
||||
from trezor.crypto import bip32, bip39
|
||||
|
@ -1,11 +1,12 @@
|
||||
from common import *
|
||||
|
||||
from apps.wallet.sign_tx.signing import *
|
||||
from apps.wallet.sign_tx import bitcoin
|
||||
from apps.wallet.sign_tx.segwit_bip143 import *
|
||||
from apps.common import coins
|
||||
from trezor.messages.SignTx import SignTx
|
||||
from trezor.messages.TxInputType import TxInputType
|
||||
from trezor.messages.TxOutputType import TxOutputType
|
||||
from trezor.messages import InputScriptType
|
||||
from trezor.messages import OutputScriptType
|
||||
from trezor.crypto import bip32, bip39
|
||||
|
||||
@ -62,13 +63,15 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
|
||||
seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coin = coins.by_name(self.tx.coin_name)
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
coinsig.initialize(self.tx, root, coin)
|
||||
|
||||
bip143 = Bip143()
|
||||
|
||||
for txo in [self.out1, self.out2]:
|
||||
txo_bin = TxOutputBinType()
|
||||
txo_bin.amount = txo.amount
|
||||
txo_bin.script_pubkey = output_derive_script(txo, coin, root)
|
||||
txo_bin.script_pubkey = coinsig.output_derive_script(txo)
|
||||
bip143.add_output(txo_bin)
|
||||
|
||||
self.assertEqual(hexlify(bip143.get_outputs_hash(coin)),
|
||||
@ -79,6 +82,8 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
|
||||
seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coin = coins.by_name(self.tx.coin_name)
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
coinsig.initialize(self.tx, root, coin)
|
||||
|
||||
bip143 = Bip143()
|
||||
bip143.add_prevouts(self.inp1)
|
||||
@ -89,7 +94,7 @@ class TestSegwitBip143NativeP2WPKH(unittest.TestCase):
|
||||
for txo in [self.out1, self.out2]:
|
||||
txo_bin = TxOutputBinType()
|
||||
txo_bin.amount = txo.amount
|
||||
txo_bin.script_pubkey = output_derive_script(txo, coin, root)
|
||||
txo_bin.script_pubkey = coinsig.output_derive_script(txo)
|
||||
bip143.add_output(txo_bin)
|
||||
|
||||
# test data public key hash
|
||||
|
@ -1,11 +1,12 @@
|
||||
from common import *
|
||||
|
||||
from apps.wallet.sign_tx.signing import *
|
||||
from apps.wallet.sign_tx import bitcoin
|
||||
from apps.wallet.sign_tx.segwit_bip143 import *
|
||||
from apps.common import coins
|
||||
from trezor.messages.SignTx import SignTx
|
||||
from trezor.messages.TxInputType import TxInputType
|
||||
from trezor.messages.TxOutputType import TxOutputType
|
||||
from trezor.messages import InputScriptType
|
||||
from trezor.messages import OutputScriptType
|
||||
from trezor.crypto import bip32, bip39
|
||||
|
||||
@ -52,13 +53,15 @@ class TestSegwitBip143(unittest.TestCase):
|
||||
seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coin = coins.by_name(self.tx.coin_name)
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
coinsig.initialize(self.tx, root, coin)
|
||||
|
||||
bip143 = Bip143()
|
||||
|
||||
for txo in [self.out1, self.out2]:
|
||||
txo_bin = TxOutputBinType()
|
||||
txo_bin.amount = txo.amount
|
||||
txo_bin.script_pubkey = output_derive_script(txo, coin, root)
|
||||
txo_bin.script_pubkey = coinsig.output_derive_script(txo)
|
||||
bip143.add_output(txo_bin)
|
||||
|
||||
self.assertEqual(hexlify(bip143.get_outputs_hash(coin)),
|
||||
@ -69,6 +72,8 @@ class TestSegwitBip143(unittest.TestCase):
|
||||
seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coin = coins.by_name(self.tx.coin_name)
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
coinsig.initialize(self.tx, root, coin)
|
||||
|
||||
bip143 = Bip143()
|
||||
bip143.add_prevouts(self.inp1)
|
||||
@ -76,7 +81,7 @@ class TestSegwitBip143(unittest.TestCase):
|
||||
for txo in [self.out1, self.out2]:
|
||||
txo_bin = TxOutputBinType()
|
||||
txo_bin.amount = txo.amount
|
||||
txo_bin.script_pubkey = output_derive_script(txo, coin, root)
|
||||
txo_bin.script_pubkey = coinsig.output_derive_script(txo)
|
||||
bip143.add_output(txo_bin)
|
||||
|
||||
# test data public key hash
|
||||
|
@ -16,8 +16,11 @@ from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx.signing import SigningError
|
||||
from apps.wallet.sign_tx import helpers, bitcoin
|
||||
from apps.wallet.sign_tx.common import SigningError
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
@ -26,6 +29,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
def test_send_native_p2wpkh(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -58,19 +62,19 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
helpers.UiConfirmForeignAddress(address_n=inp1.address_n),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmOutput(out2, coin),
|
||||
@ -80,18 +84,21 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
True,
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify('01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify('010000000001018a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff'),
|
||||
serialized_tx=unhexlify('8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -114,15 +121,17 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
res = signer.send(request)
|
||||
self.assertEqual(res, response)
|
||||
with self.assertRaises(StopIteration):
|
||||
signer.send(None)
|
||||
|
||||
def test_send_native_p2wpkh_change(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -155,38 +164,41 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
helpers.UiConfirmForeignAddress(address_n=inp1.address_n),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmTotal(5000000 + 11000, 11000, coin),
|
||||
True,
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify('01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify('010000000001018a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff'),
|
||||
serialized_tx=unhexlify('8a44999c07bba32df1cacdc50987944e68e3205b4429438fdde35c76024614090000000000ffffffff02'),
|
||||
)),
|
||||
# the out has to be cloned not to send the same object which was modified
|
||||
TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -209,7 +221,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
@ -218,6 +230,7 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
def test_send_native_invalid_address(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -243,19 +256,19 @@ class TestSignSegwitTxNativeP2WPKH(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
helpers.UiConfirmForeignAddress(address_n=inp1.address_n),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
None
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
if response is None:
|
||||
with self.assertRaises(SigningError):
|
||||
|
@ -16,7 +16,11 @@ from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx import bitcoinlike, helpers
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
# https://groestlsight-test.groestlcoin.org/api/tx/9b5c4859a8a31e69788cb4402812bb28f14ad71cbd8c60b09903478bc56f79a3
|
||||
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
||||
@ -26,6 +30,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
def test_send_native_p2wpkh(self):
|
||||
|
||||
coin = coins.by_name('Groestlcoin Testnet')
|
||||
coinsig = bitcoinlike.Bitcoinlike()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -58,16 +63,16 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmOutput(out2, coin),
|
||||
@ -80,18 +85,21 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
True,
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify('01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify('01000000000101d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff'),
|
||||
serialized_tx=unhexlify('d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -114,7 +122,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
@ -123,6 +131,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
def test_send_native_p2wpkh_change(self):
|
||||
|
||||
coin = coins.by_name('Groestlcoin Testnet')
|
||||
coinsig = bitcoinlike.Bitcoinlike()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -155,16 +164,16 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmNonDefaultLocktime(tx.lock_time),
|
||||
@ -174,19 +183,22 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
True,
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify('01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify('01000000000101d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff'),
|
||||
serialized_tx=unhexlify('d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02'),
|
||||
)),
|
||||
# the out has to be cloned not to send the same object which was modified
|
||||
TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify('02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
serialized_tx=unhexlify('404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -209,7 +221,7 @@ class TestSignSegwitTxNativeP2WPKH_GRS(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
|
@ -16,7 +16,10 @@ from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx import bitcoin, common, helpers
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
@ -25,6 +28,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
def test_send_p2wpkh_in_p2sh(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -57,16 +61,16 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmOutput(out2, coin),
|
||||
@ -76,18 +80,21 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
True,
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify('01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify('0100000000010137c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff'),
|
||||
serialized_tx=unhexlify('37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify('02e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'),
|
||||
serialized_tx=unhexlify('e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -110,7 +117,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
@ -119,6 +126,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
def test_send_p2wpkh_in_p2sh_change(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -151,18 +159,17 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None),
|
||||
serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmTotal(12300000 + 11000, 11000, coin),
|
||||
@ -170,14 +177,19 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=None),
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify(
|
||||
'01000000000101'),
|
||||
)),
|
||||
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify(
|
||||
'0100000000010137c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff'),
|
||||
'37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'),
|
||||
)),
|
||||
# the out has to be cloned not to send the same object which was modified
|
||||
TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])),
|
||||
@ -186,7 +198,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify(
|
||||
'02e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'),
|
||||
'e0aebb00000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -212,7 +224,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
@ -223,6 +235,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
def test_send_p2wpkh_in_p2sh_attack_amount(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -265,32 +278,35 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inpattack])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None),
|
||||
serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmTotal(8, 0, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=None),
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify(
|
||||
'01000000000101'),
|
||||
)),
|
||||
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized inpattack
|
||||
serialized_tx=unhexlify(
|
||||
'0100000000010137c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff'),
|
||||
'37c361fb8f2d9056ba8c98c5611930fcb48cacfdd0fe2e0449d83eea982f91200000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5ffffffff02'),
|
||||
)),
|
||||
# the out has to be cloned not to send the same object which was modified
|
||||
TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])),
|
||||
@ -299,7 +315,7 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify(
|
||||
'0208000000000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'),
|
||||
'08000000000000001976a91414fdede0ddc3be652a0ce1afbc1b509a55b6b94888ac'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -320,12 +336,12 @@ class TestSignSegwitTxP2WPKHInP2SH(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
i = 0
|
||||
messages_count = int(len(messages) / 2)
|
||||
for request, response in chunks(messages, 2):
|
||||
if i == messages_count - 1: # last message should throw SigningError
|
||||
self.assertRaises(signing.SigningError, signer.send, request)
|
||||
self.assertRaises(common.SigningError, signer.send, request)
|
||||
else:
|
||||
self.assertEqual(signer.send(request), response)
|
||||
i += 1
|
||||
|
@ -16,7 +16,11 @@ from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx import bitcoinlike, helpers
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
# https://groestlsight-test.groestlcoin.org/api/tx/4ce0220004bdfe14e3dd49fd8636bcb770a400c0c9e9bff670b6a13bb8f15c72
|
||||
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
||||
@ -26,6 +30,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
def test_send_p2wpkh_in_p2sh(self):
|
||||
|
||||
coin = coins.by_name('Groestlcoin Testnet')
|
||||
coinsig = bitcoinlike.Bitcoinlike()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -58,16 +63,16 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmOutput(out2, coin),
|
||||
@ -80,18 +85,21 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
True,
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify('01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify('01000000000101cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff'),
|
||||
serialized_tx=unhexlify('cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify('02e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'),
|
||||
serialized_tx=unhexlify('e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -114,7 +122,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
@ -123,6 +131,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
def test_send_p2wpkh_in_p2sh_change(self):
|
||||
|
||||
coin = coins.by_name('Groestlcoin Testnet')
|
||||
coinsig = bitcoinlike.Bitcoinlike()
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
|
||||
inp1 = TxInputType(
|
||||
@ -155,18 +164,16 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
None,
|
||||
|
||||
# check fee
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None),
|
||||
serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=1, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out2])),
|
||||
|
||||
helpers.UiConfirmNonDefaultLocktime(tx.lock_time),
|
||||
@ -177,14 +184,18 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
|
||||
# sign tx
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=None),
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized header
|
||||
serialized_tx=unhexlify(
|
||||
'01000000000101'),
|
||||
)),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None),
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized inp1
|
||||
serialized_tx=unhexlify(
|
||||
'01000000000101cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff'),
|
||||
'cf60ded29a2bd7ebf93453feace8551889d0321beab90c4f6e5c9d2fce8ba4090000000017160014d16b8c0680c61fc6ed2e407455715055e41052f5feffffff02'),
|
||||
)),
|
||||
# the out has to be cloned not to send the same object which was modified
|
||||
TxAck(tx=TransactionType(outputs=[TxOutputType(**out1.__dict__)])),
|
||||
@ -193,7 +204,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
serialized=TxRequestSerializedType(
|
||||
# returned serialized out1
|
||||
serialized_tx=unhexlify(
|
||||
'02e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'),
|
||||
'e0aebb00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac'),
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
)),
|
||||
@ -218,7 +229,7 @@ class TestSignSegwitTxP2WPKHInP2SH_GRS(unittest.TestCase):
|
||||
]
|
||||
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
|
@ -11,11 +11,15 @@ from trezor.messages.TxAck import TxAck
|
||||
from trezor.messages.TransactionType import TransactionType
|
||||
from trezor.messages.RequestType import TXINPUT, TXOUTPUT, TXMETA
|
||||
from trezor.messages.TxRequestDetailsType import TxRequestDetailsType
|
||||
from trezor.messages.TxRequestSerializedType import TxRequestSerializedType
|
||||
from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx import bitcoin, helpers
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
class TestSignTxFeeThreshold(unittest.TestCase):
|
||||
@ -99,6 +103,7 @@ class TestSignTxFeeThreshold(unittest.TestCase):
|
||||
|
||||
def test_under_threshold(self):
|
||||
coin_bitcoin = coins.by_name('Bitcoin')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
|
||||
ptx1 = TransactionType(version=1, lock_time=0, inputs_cnt=2, outputs_cnt=1, extra_data_len=0)
|
||||
pinp1 = TxInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'),
|
||||
@ -134,33 +139,34 @@ class TestSignTxFeeThreshold(unittest.TestCase):
|
||||
messages = [
|
||||
None,
|
||||
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
helpers.UiConfirmForeignAddress(address_n=inp1.address_n),
|
||||
True,
|
||||
TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=ptx1),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[pinp1])),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[pinp2])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(bin_outputs=[pout1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
helpers.UiConfirmOutput(out1, coin_bitcoin),
|
||||
True,
|
||||
helpers.UiConfirmTotal(300000 + 90000, 90000, coin_bitcoin),
|
||||
True,
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(serialized_tx=unhexlify('0100000001'))),
|
||||
]
|
||||
|
||||
seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '')
|
||||
|
||||
keychain = Keychain(seed, [[coin_bitcoin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin_bitcoin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
res = signer.send(request)
|
||||
self.assertEqual(res, response)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -16,7 +16,10 @@ from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx import bitcoin, helpers
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
class TestSignTx(unittest.TestCase):
|
||||
@ -27,6 +30,7 @@ class TestSignTx(unittest.TestCase):
|
||||
# input 0: 0.0039 BTC
|
||||
|
||||
coin_bitcoin = coins.by_name('Bitcoin')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
|
||||
ptx1 = TransactionType(version=1, lock_time=0, inputs_cnt=2, outputs_cnt=1, extra_data_len=0)
|
||||
pinp1 = TxInputType(script_sig=unhexlify('483045022072ba61305fe7cb542d142b8f3299a7b10f9ea61f6ffaab5dca8142601869d53c0221009a8027ed79eb3b9bc13577ac2853269323434558528c6b6a7e542be46e7e9a820141047a2d177c0f3626fc68c53610b0270fa6156181f46586c679ba6a88b34c6f4874686390b4d92e5769fbb89c8050b984f4ec0b257a0e5c4ff8bd3b035a51709503'),
|
||||
@ -60,19 +64,19 @@ class TestSignTx(unittest.TestCase):
|
||||
messages = [
|
||||
None,
|
||||
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
helpers.UiConfirmForeignAddress(address_n=inp1.address_n),
|
||||
True,
|
||||
TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=ptx1),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[pinp1])),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=1, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[pinp2])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(bin_outputs=[pout1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
helpers.UiConfirmOutput(out1, coin_bitcoin),
|
||||
True,
|
||||
@ -80,25 +84,25 @@ class TestSignTx(unittest.TestCase):
|
||||
True,
|
||||
# ButtonRequest(code=ButtonRequest_ConfirmOutput),
|
||||
# ButtonRequest(code=ButtonRequest_SignTx),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(serialized_tx=unhexlify('0100000001'))),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
signature_index=0,
|
||||
signature=unhexlify('30450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede781'),
|
||||
serialized_tx=unhexlify('010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff'))),
|
||||
serialized_tx=unhexlify('82488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff01'))),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
TxRequest(request_type=TXFINISHED, details=None, serialized=TxRequestSerializedType(
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
serialized_tx=unhexlify('0160cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000'),
|
||||
serialized_tx=unhexlify('60cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000'),
|
||||
)),
|
||||
]
|
||||
|
||||
seed = bip39.seed('alcohol woman abuse must during monitor noble actual mixed trade anger aisle', '')
|
||||
keychain = Keychain(seed, [[coin_bitcoin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin_bitcoin)
|
||||
|
||||
for request, response in chunks(messages, 2):
|
||||
res = signer.send(request)
|
||||
|
@ -16,7 +16,10 @@ from trezor.messages import OutputScriptType
|
||||
|
||||
from apps.common import coins
|
||||
from apps.common.seed import Keychain
|
||||
from apps.wallet.sign_tx import helpers, signing
|
||||
from apps.wallet.sign_tx import bitcoinlike, helpers
|
||||
|
||||
|
||||
EMPTY_SERIALIZED = TxRequestSerializedType(serialized_tx=bytearray())
|
||||
|
||||
|
||||
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
||||
@ -28,6 +31,7 @@ class TestSignTx_GRS(unittest.TestCase):
|
||||
# ptx1: http://groestlsight.groestlcoin.org/api/tx/cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a
|
||||
|
||||
coin = coins.by_name('Groestlcoin')
|
||||
coinsig = bitcoinlike.Bitcoinlike()
|
||||
|
||||
ptx1 = TransactionType(version=1, lock_time=2160993, inputs_cnt=1, outputs_cnt=1, extra_data_len=0)
|
||||
pinp1 = TxInputType(script_sig=unhexlify('48304502210096a287593b1212a188e778596eb8ecd4cc169b93a4d115226460d8e3deae431c02206c78ec09b3df977f04a6df5eb53181165c4ea5a0b35f826551349130f879d6b8012102cf5126ff54e38a80a919579d7091cafe24840eab1d30fe2b4d59bdd9d267cad8'),
|
||||
@ -54,15 +58,15 @@ class TestSignTx_GRS(unittest.TestCase):
|
||||
|
||||
messages = [
|
||||
None,
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None)),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=None),
|
||||
TxRequest(request_type=TXMETA, details=TxRequestDetailsType(request_index=None, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=ptx1),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(inputs=[pinp1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=unhexlify('cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a')), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(bin_outputs=[pout1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
helpers.UiConfirmOutput(out1, coin),
|
||||
True,
|
||||
@ -70,25 +74,28 @@ class TestSignTx_GRS(unittest.TestCase):
|
||||
True,
|
||||
# ButtonRequest(code=ButtonRequest_ConfirmOutput),
|
||||
# ButtonRequest(code=ButtonRequest_SignTx),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXINPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
serialized_tx=unhexlify('0100000001'))),
|
||||
TxAck(tx=TransactionType(inputs=[inp1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=None),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=EMPTY_SERIALIZED),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
TxRequest(request_type=TXOUTPUT, details=TxRequestDetailsType(request_index=0, tx_hash=None), serialized=TxRequestSerializedType(
|
||||
signature_index=0,
|
||||
signature=unhexlify('304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a74302368761'),
|
||||
serialized_tx=unhexlify('01000000014a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff'))),
|
||||
serialized_tx=unhexlify('4a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff01'))),
|
||||
TxAck(tx=TransactionType(outputs=[out1])),
|
||||
TxRequest(request_type=TXFINISHED, details=None, serialized=TxRequestSerializedType(
|
||||
signature_index=None,
|
||||
signature=None,
|
||||
serialized_tx=unhexlify('01a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac00000000'),
|
||||
serialized_tx=unhexlify('a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac00000000'),
|
||||
)),
|
||||
]
|
||||
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
keychain = Keychain(seed, [[coin.curve_name]])
|
||||
signer = signing.sign_tx(tx, keychain)
|
||||
signer = coinsig.signer(tx, keychain, coin)
|
||||
for request, response in chunks(messages, 2):
|
||||
self.assertEqual(signer.send(request), response)
|
||||
with self.assertRaises(StopIteration):
|
||||
|
@ -1,12 +1,13 @@
|
||||
from common import *
|
||||
|
||||
from trezor.messages.TxOutputType import TxOutputType
|
||||
from trezor.messages.SignTx import SignTx
|
||||
from trezor.messages import OutputScriptType
|
||||
from trezor.crypto import bip32, bip39
|
||||
|
||||
from apps.common import coins
|
||||
from apps.wallet.sign_tx.tx_weight import *
|
||||
from apps.wallet.sign_tx import signing
|
||||
from apps.wallet.sign_tx import bitcoin
|
||||
|
||||
|
||||
class TestCalculateTxWeight(unittest.TestCase):
|
||||
@ -15,9 +16,11 @@ class TestCalculateTxWeight(unittest.TestCase):
|
||||
def test_p2pkh_txweight(self):
|
||||
|
||||
coin = coins.by_name('Bitcoin')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coinsig.initialize(SignTx(), root, coin)
|
||||
|
||||
inp1 = TxInputType(address_n=[0], # 14LmW5k4ssUrtbAB4255zdqv3b4w1TuX9e
|
||||
# amount=390000,
|
||||
@ -35,7 +38,7 @@ class TestCalculateTxWeight(unittest.TestCase):
|
||||
|
||||
calculator = TxWeightCalculator(1, 1)
|
||||
calculator.add_input(inp1)
|
||||
calculator.add_output(signing.output_derive_script(out1, coin, root))
|
||||
calculator.add_output(coinsig.output_derive_script(out1))
|
||||
|
||||
serialized_tx = '010000000182488650ef25a58fef6788bd71b8212038d7f2bbe4750bc7bcb44701e85ef6d5000000006b4830450221009a0b7be0d4ed3146ee262b42202841834698bb3ee39c24e7437df208b8b7077102202b79ab1e7736219387dffe8d615bbdba87e11477104b867ef47afed1a5ede7810121023230848585885f63803a0a8aecdd6538792d5c539215c91698e315bf0253b43dffffffff0160cc0500000000001976a914de9b2a8da088824e8fe51debea566617d851537888ac00000000'
|
||||
tx_weight = len(serialized_tx) / 2 * 4 # non-segwit tx's weight is simple length*4
|
||||
@ -45,9 +48,11 @@ class TestCalculateTxWeight(unittest.TestCase):
|
||||
def test_p2wpkh_in_p2sh_txweight(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coinsig.initialize(SignTx(), root, coin)
|
||||
|
||||
inp1 = TxInputType(
|
||||
# 49'/1'/0'/1/0" - 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||
@ -76,8 +81,8 @@ class TestCalculateTxWeight(unittest.TestCase):
|
||||
|
||||
calculator = TxWeightCalculator(1, 2)
|
||||
calculator.add_input(inp1)
|
||||
calculator.add_output(signing.output_derive_script(out1, coin, root))
|
||||
calculator.add_output(signing.output_derive_script(out2, coin, root))
|
||||
calculator.add_output(coinsig.output_derive_script(out1))
|
||||
calculator.add_output(coinsig.output_derive_script(out2))
|
||||
|
||||
self.assertEqual(calculator.get_total(), 670)
|
||||
# non-segwit: header, inputs, outputs, locktime 4*(4+65+67+4) = 560
|
||||
@ -87,9 +92,11 @@ class TestCalculateTxWeight(unittest.TestCase):
|
||||
def test_native_p2wpkh_txweight(self):
|
||||
|
||||
coin = coins.by_name('Testnet')
|
||||
coinsig = bitcoin.Bitcoin()
|
||||
|
||||
seed = bip39.seed(' '.join(['all'] * 12), '')
|
||||
root = bip32.from_seed(seed, 'secp256k1')
|
||||
coinsig.initialize(SignTx(), root, coin)
|
||||
|
||||
inp1 = TxInputType(
|
||||
# 49'/1'/0'/0/0" - tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s
|
||||
@ -118,8 +125,8 @@ class TestCalculateTxWeight(unittest.TestCase):
|
||||
|
||||
calculator = TxWeightCalculator(1, 2)
|
||||
calculator.add_input(inp1)
|
||||
calculator.add_output(signing.output_derive_script(out1, coin, root))
|
||||
calculator.add_output(signing.output_derive_script(out2, coin, root))
|
||||
calculator.add_output(coinsig.output_derive_script(out1))
|
||||
calculator.add_output(coinsig.output_derive_script(out2))
|
||||
|
||||
self.assertEqual(calculator.get_total(), 566)
|
||||
# non-segwit: header, inputs, outputs, locktime 4*(4+42+64+4) = 456
|
||||
|
@ -169,9 +169,9 @@ class TestZcashZip143(unittest.TestCase):
|
||||
txo.script_pubkey = unhexlify(o["script_pubkey"])
|
||||
zip143.add_output(txo)
|
||||
|
||||
self.assertEqual(hexlify(zip143.get_prevouts_hash()), v["prevouts_hash"])
|
||||
self.assertEqual(hexlify(zip143.get_sequence_hash()), v["sequence_hash"])
|
||||
self.assertEqual(hexlify(zip143.get_outputs_hash()), v["outputs_hash"])
|
||||
self.assertEqual(hexlify(zip143.get_prevouts_hash(coin)), v["prevouts_hash"])
|
||||
self.assertEqual(hexlify(zip143.get_sequence_hash(coin)), v["sequence_hash"])
|
||||
self.assertEqual(hexlify(zip143.get_outputs_hash(coin)), v["outputs_hash"])
|
||||
self.assertEqual(
|
||||
hexlify(
|
||||
zip143.preimage_hash(
|
||||
|
@ -203,9 +203,9 @@ class TestZcashZip243(unittest.TestCase):
|
||||
txo.script_pubkey = unhexlify(o["script_pubkey"])
|
||||
zip243.add_output(txo)
|
||||
|
||||
self.assertEqual(hexlify(zip243.get_prevouts_hash()), v["prevouts_hash"])
|
||||
self.assertEqual(hexlify(zip243.get_sequence_hash()), v["sequence_hash"])
|
||||
self.assertEqual(hexlify(zip243.get_outputs_hash()), v["outputs_hash"])
|
||||
self.assertEqual(hexlify(zip243.get_prevouts_hash(coin)), v["prevouts_hash"])
|
||||
self.assertEqual(hexlify(zip243.get_sequence_hash(coin)), v["sequence_hash"])
|
||||
self.assertEqual(hexlify(zip243.get_outputs_hash(coin)), v["outputs_hash"])
|
||||
self.assertEqual(
|
||||
hexlify(
|
||||
zip243.preimage_hash(
|
||||
|
Loading…
Reference in New Issue
Block a user