|
|
|
@ -80,7 +80,7 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=390000,
|
|
|
|
|
amount=390000,
|
|
|
|
|
prev_hash=TXHASH_d5f65e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -94,14 +94,15 @@ class TestMsgSigntx:
|
|
|
|
|
with client:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d5f65e),
|
|
|
|
|
request_input(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(1, TXHASH_d5f65e),
|
|
|
|
|
request_output(0, TXHASH_d5f65e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -125,7 +126,7 @@ class TestMsgSigntx:
|
|
|
|
|
# input 0: 0.31 BTC
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44'/1'/0'/0/0"),
|
|
|
|
|
# amount=31000000,
|
|
|
|
|
amount=31000000,
|
|
|
|
|
prev_hash=TXHASH_e5040e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -146,15 +147,16 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_e5040e),
|
|
|
|
|
request_input(0, TXHASH_e5040e),
|
|
|
|
|
request_output(0, TXHASH_e5040e),
|
|
|
|
|
request_output(1, TXHASH_e5040e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_e5040e),
|
|
|
|
|
request_input(0, TXHASH_e5040e),
|
|
|
|
|
request_output(0, TXHASH_e5040e),
|
|
|
|
|
request_output(1, TXHASH_e5040e),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -176,7 +178,7 @@ class TestMsgSigntx:
|
|
|
|
|
# input 1: 10.00000000 BTC
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44'/1'/0'/0/0"),
|
|
|
|
|
# amount=1000000000,
|
|
|
|
|
amount=1000000000,
|
|
|
|
|
prev_hash=TXHASH_6f90f3,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -197,17 +199,18 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_6f90f3),
|
|
|
|
|
request_input(0, TXHASH_6f90f3),
|
|
|
|
|
request_input(1, TXHASH_6f90f3),
|
|
|
|
|
request_output(0, TXHASH_6f90f3),
|
|
|
|
|
request_output(1, TXHASH_6f90f3),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.FeeOverThreshold),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_6f90f3),
|
|
|
|
|
request_input(0, TXHASH_6f90f3),
|
|
|
|
|
request_input(1, TXHASH_6f90f3),
|
|
|
|
|
request_output(0, TXHASH_6f90f3),
|
|
|
|
|
request_output(1, TXHASH_6f90f3),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -231,7 +234,7 @@ class TestMsgSigntx:
|
|
|
|
|
address_n=parse_path(
|
|
|
|
|
"m/44'/0'/0'/0/5"
|
|
|
|
|
), # 1GA9u9TfCG7SWmKCveBumdA1TZpfom6ZdJ
|
|
|
|
|
# amount=50000,
|
|
|
|
|
amount=50000,
|
|
|
|
|
prev_hash=TXHASH_50f6f1,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -254,15 +257,16 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_50f6f1),
|
|
|
|
|
request_input(0, TXHASH_50f6f1),
|
|
|
|
|
request_output(0, TXHASH_50f6f1),
|
|
|
|
|
request_output(1, TXHASH_50f6f1),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_50f6f1),
|
|
|
|
|
request_input(0, TXHASH_50f6f1),
|
|
|
|
|
request_output(0, TXHASH_50f6f1),
|
|
|
|
|
request_output(1, TXHASH_50f6f1),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -285,7 +289,7 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44'/0'/0'/0/0"),
|
|
|
|
|
# amount=390000,
|
|
|
|
|
amount=390000,
|
|
|
|
|
prev_hash=TXHASH_d5f65e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -312,10 +316,6 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d5f65e),
|
|
|
|
|
request_input(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(1, TXHASH_d5f65e),
|
|
|
|
|
request_output(0, TXHASH_d5f65e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
@ -323,6 +323,11 @@ class TestMsgSigntx:
|
|
|
|
|
request_output(2),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d5f65e),
|
|
|
|
|
request_input(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(1, TXHASH_d5f65e),
|
|
|
|
|
request_output(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(2),
|
|
|
|
@ -353,14 +358,14 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=100000,
|
|
|
|
|
amount=100000,
|
|
|
|
|
prev_hash=TXHASH_c6be22,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
inp2 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/1"),
|
|
|
|
|
# amount=110000,
|
|
|
|
|
amount=110000,
|
|
|
|
|
prev_hash=TXHASH_58497a,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -380,6 +385,12 @@ class TestMsgSigntx:
|
|
|
|
|
with client:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_input(1),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_c6be22),
|
|
|
|
|
request_input(0, TXHASH_c6be22),
|
|
|
|
@ -390,10 +401,6 @@ class TestMsgSigntx:
|
|
|
|
|
request_input(0, TXHASH_58497a),
|
|
|
|
|
request_output(0, TXHASH_58497a),
|
|
|
|
|
request_output(1, TXHASH_58497a),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_input(1),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -433,6 +440,7 @@ class TestMsgSigntx:
|
|
|
|
|
inputs.append(
|
|
|
|
|
messages.TxInputType(
|
|
|
|
|
address_n=parse_path(f"44h/0h/0h/0/{i}"),
|
|
|
|
|
amount=26000,
|
|
|
|
|
prev_hash=TXHASH_4a7b7e,
|
|
|
|
|
prev_index=i,
|
|
|
|
|
)
|
|
|
|
@ -462,14 +470,14 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/1h/0/0"),
|
|
|
|
|
# amount=100000,
|
|
|
|
|
amount=100000,
|
|
|
|
|
prev_hash=TXHASH_c63e24,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
inp2 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/1h/0/1"),
|
|
|
|
|
# amount=2540000,
|
|
|
|
|
amount=2540000,
|
|
|
|
|
prev_hash=TXHASH_39a29e,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -504,14 +512,14 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/1h/0/0"),
|
|
|
|
|
# amount=100000,
|
|
|
|
|
amount=100000,
|
|
|
|
|
prev_hash=TXHASH_c63e24,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
inp2 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/1h/0/1"),
|
|
|
|
|
# amount=2540000,
|
|
|
|
|
amount=2540000,
|
|
|
|
|
prev_hash=TXHASH_39a29e,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -538,6 +546,15 @@ class TestMsgSigntx:
|
|
|
|
|
with client:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_input(1),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
]
|
|
|
|
|
+ request_change_outputs
|
|
|
|
|
+ [
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_c63e24),
|
|
|
|
|
request_input(0, TXHASH_c63e24),
|
|
|
|
@ -549,13 +566,6 @@ class TestMsgSigntx:
|
|
|
|
|
request_input(0, TXHASH_39a29e),
|
|
|
|
|
request_output(0, TXHASH_39a29e),
|
|
|
|
|
request_output(1, TXHASH_39a29e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
]
|
|
|
|
|
+ request_change_outputs
|
|
|
|
|
+ [
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_input(1),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -583,7 +593,7 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=100000000,
|
|
|
|
|
amount=100000000,
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -598,15 +608,16 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_157041),
|
|
|
|
|
request_input(0, TXHASH_157041),
|
|
|
|
|
request_output(0, TXHASH_157041),
|
|
|
|
|
request_output(1, TXHASH_157041),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.FeeOverThreshold),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_157041),
|
|
|
|
|
request_input(0, TXHASH_157041),
|
|
|
|
|
request_output(0, TXHASH_157041),
|
|
|
|
|
request_output(1, TXHASH_157041),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_finished(),
|
|
|
|
@ -628,7 +639,7 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=100000000,
|
|
|
|
|
amount=100000000,
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -673,7 +684,7 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=390000,
|
|
|
|
|
amount=390000,
|
|
|
|
|
prev_hash=TXHASH_d5f65e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -688,10 +699,6 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d5f65e),
|
|
|
|
|
request_input(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(1, TXHASH_d5f65e),
|
|
|
|
|
request_output(0, TXHASH_d5f65e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.Failure(code=messages.FailureType.NotEnoughFunds),
|
|
|
|
@ -705,7 +712,7 @@ class TestMsgSigntx:
|
|
|
|
|
def test_p2sh(self, client):
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=400000,
|
|
|
|
|
amount=400000,
|
|
|
|
|
prev_hash=TXHASH_54aa56,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -719,14 +726,15 @@ class TestMsgSigntx:
|
|
|
|
|
with client:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_54aa56),
|
|
|
|
|
request_input(0, TXHASH_54aa56),
|
|
|
|
|
request_output(0, TXHASH_54aa56),
|
|
|
|
|
request_output(1, TXHASH_54aa56),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -771,14 +779,14 @@ class TestMsgSigntx:
|
|
|
|
|
def test_attack_change_outputs(self, client):
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=100000,
|
|
|
|
|
amount=100000,
|
|
|
|
|
prev_hash=TXHASH_c6be22,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
inp2 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/1"),
|
|
|
|
|
# amount=110000,
|
|
|
|
|
amount=110000,
|
|
|
|
|
prev_hash=TXHASH_58497a,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
@ -841,7 +849,7 @@ class TestMsgSigntx:
|
|
|
|
|
# input 0: 0.31 BTC
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44'/1'/0'/0/0"),
|
|
|
|
|
# amount=31000000,
|
|
|
|
|
amount=31000000,
|
|
|
|
|
prev_hash=TXHASH_e5040e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -886,6 +894,7 @@ class TestMsgSigntx:
|
|
|
|
|
address_n=parse_path("44'/1'/4'/0/0"),
|
|
|
|
|
# moUJnmge8SRXuediK7bW6t4YfrPqbE6hD7
|
|
|
|
|
prev_hash=TXHASH_d2dcda,
|
|
|
|
|
amount=123400000,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
|
|
|
|
)
|
|
|
|
@ -912,13 +921,13 @@ class TestMsgSigntx:
|
|
|
|
|
== "0100000001243e15b53cc553d93ec4e27e16984adc3d885ef107c613a7577fea47f5dadcd2010000006b483045022100eedaadde3a771967beee39f1daa9e9450f72fccdec63488a96d71eeae4224b4002203a22be3c1677d3451c93a49550b69e8f8fc06328823c7e0f633dde13d67ef96b01210364430c9122948e525e2f1c6d88f00f47679274f0810fd8c63754954f310995c1ffffffff02a0860100000000001976a914b3cc67f3349974d0f1b50e9bb5dfdf226f888fa088ac18555907000000001976a914f80fb232a1e54b1fa732bc120cae72eabd7fcf6888ac00000000"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
run_attack = False
|
|
|
|
|
attack_count = 2
|
|
|
|
|
|
|
|
|
|
def attack_processor(msg):
|
|
|
|
|
nonlocal run_attack
|
|
|
|
|
nonlocal attack_count
|
|
|
|
|
if msg.tx.inputs and msg.tx.inputs[0] == inp1:
|
|
|
|
|
if not run_attack:
|
|
|
|
|
run_attack = True
|
|
|
|
|
if attack_count > 0:
|
|
|
|
|
attack_count -= 1
|
|
|
|
|
else:
|
|
|
|
|
msg.tx.inputs[0].address_n[2] = H_(12)
|
|
|
|
|
|
|
|
|
@ -930,15 +939,16 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d2dcda),
|
|
|
|
|
request_input(0, TXHASH_d2dcda),
|
|
|
|
|
request_output(0, TXHASH_d2dcda),
|
|
|
|
|
request_output(1, TXHASH_d2dcda),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d2dcda),
|
|
|
|
|
request_input(0, TXHASH_d2dcda),
|
|
|
|
|
request_output(0, TXHASH_d2dcda),
|
|
|
|
|
request_output(1, TXHASH_d2dcda),
|
|
|
|
|
request_input(0),
|
|
|
|
|
messages.Failure(code=messages.FailureType.ProcessError),
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
@ -959,7 +969,7 @@ class TestMsgSigntx:
|
|
|
|
|
def test_spend_coinbase(self, client):
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/1h/0h/0/0"),
|
|
|
|
|
# amount=390000,
|
|
|
|
|
amount=2500278230,
|
|
|
|
|
prev_hash=TXHASH_d6da21,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -974,13 +984,14 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d6da21),
|
|
|
|
|
request_input(0, TXHASH_d6da21),
|
|
|
|
|
request_output(0, TXHASH_d6da21),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d6da21),
|
|
|
|
|
request_input(0, TXHASH_d6da21),
|
|
|
|
|
request_output(0, TXHASH_d6da21),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_finished(),
|
|
|
|
@ -1003,7 +1014,7 @@ class TestMsgSigntx:
|
|
|
|
|
# input 0: 0.31 BTC
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44'/1'/0'/0/0"),
|
|
|
|
|
# amount=31000000,
|
|
|
|
|
amount=31000000,
|
|
|
|
|
prev_hash=TXHASH_e5040e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -1030,16 +1041,17 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_e5040e),
|
|
|
|
|
request_input(0, TXHASH_e5040e),
|
|
|
|
|
request_output(0, TXHASH_e5040e),
|
|
|
|
|
request_output(1, TXHASH_e5040e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(2),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_e5040e),
|
|
|
|
|
request_input(0, TXHASH_e5040e),
|
|
|
|
|
request_output(0, TXHASH_e5040e),
|
|
|
|
|
request_output(1, TXHASH_e5040e),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(2),
|
|
|
|
@ -1065,7 +1077,7 @@ class TestMsgSigntx:
|
|
|
|
|
# input 0: 0.31 BTC
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44'/1'/0'/0/0"),
|
|
|
|
|
# amount=31000000,
|
|
|
|
|
amount=31000000,
|
|
|
|
|
prev_hash=TXHASH_e5040e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
@ -1087,15 +1099,16 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_e5040e),
|
|
|
|
|
request_input(0, TXHASH_e5040e),
|
|
|
|
|
request_output(0, TXHASH_e5040e),
|
|
|
|
|
request_output(1, TXHASH_e5040e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
request_output(1),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_e5040e),
|
|
|
|
|
request_input(0, TXHASH_e5040e),
|
|
|
|
|
request_output(0, TXHASH_e5040e),
|
|
|
|
|
request_output(1, TXHASH_e5040e),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(1),
|
|
|
|
|
request_output(0),
|
|
|
|
@ -1121,20 +1134,29 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
# vout[0] and vout[1] exist
|
|
|
|
|
inp0 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"), prev_hash=TXHASH_157041, prev_index=0
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
amount=100000000,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/1"), prev_hash=TXHASH_157041, prev_index=1
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/1"),
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
amount=120160000,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
)
|
|
|
|
|
# vout[2] does not exist
|
|
|
|
|
inp2 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/1/0"), prev_hash=TXHASH_157041, prev_index=2
|
|
|
|
|
address_n=parse_path("44h/0h/0h/1/0"),
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
amount=100000000,
|
|
|
|
|
prev_index=2,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# try to spend the sum of existing vouts
|
|
|
|
|
out1 = messages.TxOutputType(
|
|
|
|
|
address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1",
|
|
|
|
|
amount=220160000,
|
|
|
|
|
amount=100000000 + 120160000 + 100000000 - 10000,
|
|
|
|
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@ -1162,11 +1184,14 @@ class TestMsgSigntx:
|
|
|
|
|
@pytest.mark.skip_ui
|
|
|
|
|
def test_prevtx_forbidden_fields(self, client, field, value):
|
|
|
|
|
inp0 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"), prev_hash=TXHASH_157041, prev_index=0
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
amount=100000000,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
|
out1 = messages.TxOutputType(
|
|
|
|
|
address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1",
|
|
|
|
|
amount=1000,
|
|
|
|
|
amount=100000000 - 1000,
|
|
|
|
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@ -1187,7 +1212,10 @@ class TestMsgSigntx:
|
|
|
|
|
@pytest.mark.skip_ui
|
|
|
|
|
def test_signtx_forbidden_fields(self, client, field, value):
|
|
|
|
|
inp0 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"), prev_hash=TXHASH_157041, prev_index=0
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
prev_hash=TXHASH_157041,
|
|
|
|
|
amount=100000000,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
)
|
|
|
|
|
out1 = messages.TxOutputType(
|
|
|
|
|
address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1",
|
|
|
|
@ -1232,6 +1260,7 @@ class TestMsgSigntx:
|
|
|
|
|
)
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=address_n,
|
|
|
|
|
amount=142920000,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
sequence=0xFFFFFFFF,
|
|
|
|
|
script_type=script_type, # incorrect script type
|
|
|
|
@ -1287,6 +1316,7 @@ class TestMsgSigntx:
|
|
|
|
|
)
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=address_n,
|
|
|
|
|
amount=142920000,
|
|
|
|
|
prev_index=1,
|
|
|
|
|
sequence=0xFFFFFFFF,
|
|
|
|
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
|
|
|
@ -1321,7 +1351,7 @@ class TestMsgSigntx:
|
|
|
|
|
|
|
|
|
|
inp1 = messages.TxInputType(
|
|
|
|
|
address_n=parse_path("44h/0h/0h/0/0"),
|
|
|
|
|
# amount=390000,
|
|
|
|
|
amount=390000,
|
|
|
|
|
prev_hash=TXHASH_d5f65e,
|
|
|
|
|
prev_index=0,
|
|
|
|
|
sequence=sequence,
|
|
|
|
@ -1337,15 +1367,16 @@ class TestMsgSigntx:
|
|
|
|
|
client.set_expected_responses(
|
|
|
|
|
[
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d5f65e),
|
|
|
|
|
request_input(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(1, TXHASH_d5f65e),
|
|
|
|
|
request_output(0, TXHASH_d5f65e),
|
|
|
|
|
request_output(0),
|
|
|
|
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
messages.ButtonRequest(code=B.SignTx),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_meta(TXHASH_d5f65e),
|
|
|
|
|
request_input(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(1, TXHASH_d5f65e),
|
|
|
|
|
request_output(0, TXHASH_d5f65e),
|
|
|
|
|
request_input(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_output(0),
|
|
|
|
|
request_finished(),
|
|
|
|
|