1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-22 22:38:08 +00:00

chore(tests): Add payment requests to test_msg_authorize_coinjoin device test.

This commit is contained in:
Andrew Kozlik 2021-01-20 19:32:26 +01:00 committed by Andrew Kozlik
parent f6154b311e
commit e5281b87b5
2 changed files with 260 additions and 170 deletions

View File

@ -21,7 +21,14 @@ from trezorlib.exceptions import TrezorFailure
from trezorlib.tools import parse_path from trezorlib.tools import parse_path
from ...tx_cache import TxCache from ...tx_cache import TxCache
from ..signtx import request_finished, request_input, request_meta, request_output from ..signtx import (
request_finished,
request_input,
request_meta,
request_output,
request_payment_req,
)
from .payment_req import make_payment_request
B = messages.ButtonRequestType B = messages.ButtonRequestType
@ -87,58 +94,80 @@ def test_sign_tx(client):
preauthorized=True, preauthorized=True,
) )
inp1 = messages.TxInputType( inputs = [
# seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" messages.TxInputType(
# 84'/1'/0'/0/0 # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"
# tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 # 84'/1'/0'/0/0
amount=100000, # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2
prev_hash=TXHASH_e5b7e2, amount=100000,
prev_index=0, prev_hash=TXHASH_e5b7e2,
script_type=messages.InputScriptType.EXTERNAL, prev_index=0,
script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"), script_type=messages.InputScriptType.EXTERNAL,
ownership_proof=bytearray.fromhex( script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"),
"534c001901016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c4000247304402207c7e55f9ad25b03f27e0f51bba5140bafb20d2f29f27dce08e8d0d8d2c4c2efc022060623701649897a8068d5d44efad69e27368e0b5d968daa487139a1367cf2444012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d" ownership_proof=bytearray.fromhex(
"534c001901016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c4000247304402207c7e55f9ad25b03f27e0f51bba5140bafb20d2f29f27dce08e8d0d8d2c4c2efc022060623701649897a8068d5d44efad69e27368e0b5d968daa487139a1367cf2444012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d"
),
commitment_data=commitment_data,
), ),
commitment_data=commitment_data, messages.TxInputType(
) address_n=parse_path("84'/1'/0'/1/0"),
inp2 = messages.TxInputType( amount=7289000,
address_n=parse_path("84'/1'/0'/1/0"), prev_hash=TXHASH_65b811,
amount=7289000, prev_index=1,
prev_hash=TXHASH_65b811, script_type=messages.InputScriptType.SPENDWITNESS,
prev_index=1, ),
script_type=messages.InputScriptType.SPENDWITNESS, ]
)
# Other's coinjoined output. outputs = [
out1 = messages.TxOutputType( # Other's coinjoined output.
address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml", messages.TxOutputType(
amount=50000, address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml",
script_type=messages.OutputScriptType.PAYTOWITNESS, amount=50000,
) script_type=messages.OutputScriptType.PAYTOWITNESS,
# Our coinjoined output. payment_req_index=0,
out2 = messages.TxOutputType( ),
address_n=parse_path("84'/1'/0'/1/1"), # Our coinjoined output.
amount=50000, messages.TxOutputType(
script_type=messages.OutputScriptType.PAYTOWITNESS, # tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d
) address_n=parse_path("84'/1'/0'/1/1"),
# Our change output. amount=50000,
out3 = messages.TxOutputType( script_type=messages.OutputScriptType.PAYTOWITNESS,
address_n=parse_path("84'/1'/0'/1/2"), payment_req_index=0,
amount=7289000 - 50000 - 5 - 5000, ),
script_type=messages.OutputScriptType.PAYTOWITNESS, # Our change output.
) messages.TxOutputType(
# Other's change output. # tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx
out4 = messages.TxOutputType( address_n=parse_path("84'/1'/0'/1/2"),
address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", amount=7289000 - 50000 - 5 - 5000,
amount=100000 - 50000 - 5 - 5000, script_type=messages.OutputScriptType.PAYTOWITNESS,
script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0,
) ),
# Coordinator's output. # Other's change output.
out5 = messages.TxOutputType( messages.TxOutputType(
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk",
amount=10, amount=100000 - 50000 - 5 - 5000,
script_type=messages.OutputScriptType.PAYTOWITNESS, script_type=messages.OutputScriptType.PAYTOWITNESS,
payment_req_index=0,
),
# Coordinator's output.
messages.TxOutputType(
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
amount=10,
script_type=messages.OutputScriptType.PAYTOWITNESS,
payment_req_index=0,
),
]
payment_req = make_payment_request(
client,
recipient_name="www.example.com",
outputs=outputs,
change_addresses=[
"tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d",
"tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx",
],
) )
payment_req.amount = None
with client: with client:
client.set_expected_responses( client.set_expected_responses(
@ -147,6 +176,7 @@ def test_sign_tx(client):
request_input(0), request_input(0),
request_input(1), request_input(1),
request_output(0), request_output(0),
request_payment_req(0),
request_output(1), request_output(1),
request_output(2), request_output(2),
request_output(3), request_output(3),
@ -175,9 +205,10 @@ def test_sign_tx(client):
_, serialized_tx = btc.sign_tx( _, serialized_tx = btc.sign_tx(
client, client,
"Testnet", "Testnet",
[inp1, inp2], inputs,
[out1, out2, out3, out4, out5], outputs,
prev_txes=TX_CACHE_TESTNET, prev_txes=TX_CACHE_TESTNET,
payment_reqs=[payment_req],
preauthorized=True, preauthorized=True,
) )
@ -190,9 +221,10 @@ def test_sign_tx(client):
btc.sign_tx( btc.sign_tx(
client, client,
"Testnet", "Testnet",
[inp1, inp2], inputs,
[out1, out2, out3, out4, out5], outputs,
prev_txes=TX_CACHE_TESTNET, prev_txes=TX_CACHE_TESTNET,
payment_reqs=[payment_req],
preauthorized=True, preauthorized=True,
) )
@ -201,9 +233,10 @@ def test_sign_tx(client):
btc.sign_tx( btc.sign_tx(
client, client,
"Testnet", "Testnet",
[inp1, inp2], inputs,
[out1, out2, out3, out4, out5], outputs,
prev_txes=TX_CACHE_TESTNET, prev_txes=TX_CACHE_TESTNET,
payment_reqs=[payment_req],
preauthorized=True, preauthorized=True,
) )
@ -222,66 +255,89 @@ def test_unfair_fee(client):
script_type=messages.InputScriptType.SPENDWITNESS, script_type=messages.InputScriptType.SPENDWITNESS,
) )
inp1 = messages.TxInputType( inputs = [
# seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" messages.TxInputType(
# 84'/1'/0'/0/0 # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"
# tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 # 84'/1'/0'/0/0
amount=100000, # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2
prev_hash=TXHASH_e5b7e2, amount=100000,
prev_index=0, prev_hash=TXHASH_e5b7e2,
script_type=messages.InputScriptType.EXTERNAL, prev_index=0,
script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"), script_type=messages.InputScriptType.EXTERNAL,
ownership_proof=bytearray.fromhex( script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"),
"534c001901016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c4000247304402207c7e55f9ad25b03f27e0f51bba5140bafb20d2f29f27dce08e8d0d8d2c4c2efc022060623701649897a8068d5d44efad69e27368e0b5d968daa487139a1367cf2444012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d" ownership_proof=bytearray.fromhex(
"534c001901016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c4000247304402207c7e55f9ad25b03f27e0f51bba5140bafb20d2f29f27dce08e8d0d8d2c4c2efc022060623701649897a8068d5d44efad69e27368e0b5d968daa487139a1367cf2444012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d"
),
commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"),
), ),
commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"), messages.TxInputType(
) address_n=parse_path("84'/1'/0'/1/0"),
inp2 = messages.TxInputType( amount=7289000,
address_n=parse_path("84'/1'/0'/1/0"), prev_hash=TXHASH_65b811,
amount=7289000, prev_index=1,
prev_hash=TXHASH_65b811, script_type=messages.InputScriptType.SPENDWITNESS,
prev_index=1, ),
script_type=messages.InputScriptType.SPENDWITNESS, ]
)
# Other's coinjoined output. outputs = [
out1 = messages.TxOutputType( # Other's coinjoined output.
address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml", messages.TxOutputType(
amount=50000, address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml",
script_type=messages.OutputScriptType.PAYTOWITNESS, amount=50000,
) script_type=messages.OutputScriptType.PAYTOWITNESS,
# Our coinjoined output. payment_req_index=0,
out2 = messages.TxOutputType( ),
address_n=parse_path("84'/1'/0'/1/1"), # Our coinjoined output.
amount=50000, messages.TxOutputType(
script_type=messages.OutputScriptType.PAYTOWITNESS, # tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d
) address_n=parse_path("84'/1'/0'/1/1"),
# Our change output. amount=50000,
out3 = messages.TxOutputType( script_type=messages.OutputScriptType.PAYTOWITNESS,
address_n=parse_path("84'/1'/0'/1/2"), payment_req_index=0,
amount=7289000 - 50000 - 5 - 6000, # unfair mining fee ),
script_type=messages.OutputScriptType.PAYTOWITNESS, # Our change output.
) messages.TxOutputType(
# Other's change output. # tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx
out4 = messages.TxOutputType( address_n=parse_path("84'/1'/0'/1/2"),
address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", amount=7289000 - 50000 - 5 - 6000, # unfair mining fee
amount=100000 - 50000 - 5 - 4000, script_type=messages.OutputScriptType.PAYTOWITNESS,
script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0,
) ),
# Coordinator's output. # Other's change output.
out5 = messages.TxOutputType( messages.TxOutputType(
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk",
amount=10, amount=100000 - 50000 - 5 - 4000,
script_type=messages.OutputScriptType.PAYTOWITNESS, script_type=messages.OutputScriptType.PAYTOWITNESS,
payment_req_index=0,
),
# Coordinator's output.
messages.TxOutputType(
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
amount=10,
script_type=messages.OutputScriptType.PAYTOWITNESS,
payment_req_index=0,
),
]
payment_req = make_payment_request(
client,
recipient_name="www.example.com",
outputs=outputs,
change_addresses=[
"tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d",
"tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx",
],
) )
payment_req.amount = None
with pytest.raises(TrezorFailure, match="fee over threshold"): with pytest.raises(TrezorFailure, match="fee over threshold"):
btc.sign_tx( btc.sign_tx(
client, client,
"Testnet", "Testnet",
[inp1, inp2], inputs,
[out1, out2, out3, out4, out5], outputs,
prev_txes=TX_CACHE_TESTNET, prev_txes=TX_CACHE_TESTNET,
payment_reqs=[payment_req],
preauthorized=True, preauthorized=True,
) )
@ -300,78 +356,105 @@ def test_no_anonymity(client):
script_type=messages.InputScriptType.SPENDWITNESS, script_type=messages.InputScriptType.SPENDWITNESS,
) )
inp1 = messages.TxInputType( inputs = [
# seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" messages.TxInputType(
# 84'/1'/0'/0/0 # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"
# tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 # 84'/1'/0'/0/0
amount=100000, # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2
prev_hash=TXHASH_e5b7e2, amount=100000,
prev_index=0, prev_hash=TXHASH_e5b7e2,
script_type=messages.InputScriptType.EXTERNAL, prev_index=0,
script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"), script_type=messages.InputScriptType.EXTERNAL,
ownership_proof=bytearray.fromhex( script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"),
"534c001901016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c4000247304402207c7e55f9ad25b03f27e0f51bba5140bafb20d2f29f27dce08e8d0d8d2c4c2efc022060623701649897a8068d5d44efad69e27368e0b5d968daa487139a1367cf2444012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d" ownership_proof=bytearray.fromhex(
"534c001901016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c4000247304402207c7e55f9ad25b03f27e0f51bba5140bafb20d2f29f27dce08e8d0d8d2c4c2efc022060623701649897a8068d5d44efad69e27368e0b5d968daa487139a1367cf2444012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d"
),
commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"),
), ),
commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"), messages.TxInputType(
) address_n=parse_path("84'/1'/0'/1/0"),
inp2 = messages.TxInputType( amount=7289000,
address_n=parse_path("84'/1'/0'/1/0"), prev_hash=TXHASH_65b811,
amount=7289000, prev_index=1,
prev_hash=TXHASH_65b811, script_type=messages.InputScriptType.SPENDWITNESS,
prev_index=1, ),
script_type=messages.InputScriptType.SPENDWITNESS, ]
)
# Other's coinjoined output. outputs = [
out1 = messages.TxOutputType( # Other's coinjoined output.
address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml", messages.TxOutputType(
amount=30000, address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml",
script_type=messages.OutputScriptType.PAYTOWITNESS, amount=30000,
) script_type=messages.OutputScriptType.PAYTOWITNESS,
# Other's coinjoined output. payment_req_index=0,
out2 = messages.TxOutputType( ),
address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", # Other's coinjoined output.
amount=30000, messages.TxOutputType(
script_type=messages.OutputScriptType.PAYTOWITNESS, address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk",
) amount=30000,
# Our coinjoined output. script_type=messages.OutputScriptType.PAYTOWITNESS,
out3 = messages.TxOutputType( payment_req_index=0,
address_n=parse_path("84'/1'/0'/1/1"), ),
amount=50000, # Our coinjoined output.
script_type=messages.OutputScriptType.PAYTOWITNESS, messages.TxOutputType(
) # tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d
# Our coinjoined output. address_n=parse_path("84'/1'/0'/1/1"),
out4 = messages.TxOutputType( amount=50000,
address_n=parse_path("84'/1'/0'/1/2"), script_type=messages.OutputScriptType.PAYTOWITNESS,
amount=50000, payment_req_index=0,
script_type=messages.OutputScriptType.PAYTOWITNESS, ),
) # Our coinjoined output.
# Our change output. messages.TxOutputType(
out5 = messages.TxOutputType( # tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx
address_n=parse_path("84'/1'/0'/1/2"), address_n=parse_path("84'/1'/0'/1/2"),
amount=7289000 - 50000 - 50000 - 10 - 5000, amount=50000,
script_type=messages.OutputScriptType.PAYTOWITNESS, script_type=messages.OutputScriptType.PAYTOWITNESS,
) payment_req_index=0,
# Other's change output. ),
out6 = messages.TxOutputType( # Our change output.
address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", messages.TxOutputType(
amount=100000 - 30000 - 30000 - 6 - 5000, # tb1qwn0s88t9r39g72m78mcaxj72sy3ct4m404xsmq
script_type=messages.OutputScriptType.PAYTOWITNESS, address_n=parse_path("84'/1'/0'/1/3"),
) amount=7289000 - 50000 - 50000 - 10 - 5000,
# Coordinator's output. script_type=messages.OutputScriptType.PAYTOWITNESS,
out7 = messages.TxOutputType( payment_req_index=0,
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", ),
amount=16, # Other's change output.
script_type=messages.OutputScriptType.PAYTOWITNESS, messages.TxOutputType(
address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk",
amount=100000 - 30000 - 30000 - 6 - 5000,
script_type=messages.OutputScriptType.PAYTOWITNESS,
payment_req_index=0,
),
# Coordinator's output.
messages.TxOutputType(
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
amount=16,
script_type=messages.OutputScriptType.PAYTOWITNESS,
payment_req_index=0,
),
]
payment_req = make_payment_request(
client,
recipient_name="www.example.com",
outputs=outputs,
change_addresses=[
"tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d",
"tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx",
"tb1qwn0s88t9r39g72m78mcaxj72sy3ct4m404xsmq",
],
) )
payment_req.amount = None
with pytest.raises(TrezorFailure, match="No anonymity gain"): with pytest.raises(TrezorFailure, match="No anonymity gain"):
btc.sign_tx( btc.sign_tx(
client, client,
"Testnet", "Testnet",
[inp1, inp2], inputs,
[out1, out2, out3, out4, out5, out6, out7], outputs,
prev_txes=TX_CACHE_TESTNET, prev_txes=TX_CACHE_TESTNET,
payment_reqs=[payment_req],
preauthorized=True, preauthorized=True,
) )

View File

@ -31,6 +31,13 @@ def request_orig_output(n: int, tx_hash: bytes) -> messages.TxRequest:
) )
def request_payment_req(n):
return messages.TxRequest(
request_type=T.TXPAYMENTREQ,
details=messages.TxRequestDetailsType(request_index=n),
)
def request_meta(tx_hash: bytes) -> messages.TxRequest: def request_meta(tx_hash: bytes) -> messages.TxRequest:
return messages.TxRequest( return messages.TxRequest(
request_type=T.TXMETA, request_type=T.TXMETA,