mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-05 12:21:16 +00:00
chore(tests): renaming all "proto" usages to "messages" in device tests
This commit is contained in:
parent
a92d29ddbf
commit
18a2642d95
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import messages as proto, nem
|
from trezorlib import messages, nem
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
from ...common import MNEMONIC12
|
from ...common import MNEMONIC12
|
||||||
@ -34,12 +34,12 @@ def test_nem_signtx_simple(client):
|
|||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
# Confirm transfer and network fee
|
# Confirm transfer and network fee
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput),
|
messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput),
|
||||||
# Unencrypted message
|
# Unencrypted message
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput),
|
messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput),
|
||||||
# Confirm recipient
|
# Confirm recipient
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.SignTx),
|
messages.ButtonRequest(code=messages.ButtonRequestType.SignTx),
|
||||||
proto.NEMSignedTx,
|
messages.NEMSignedTx,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -77,12 +77,12 @@ def test_nem_signtx_encrypted_payload(client):
|
|||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
# Confirm transfer and network fee
|
# Confirm transfer and network fee
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput),
|
messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput),
|
||||||
# Ask for encryption
|
# Ask for encryption
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput),
|
messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput),
|
||||||
# Confirm recipient
|
# Confirm recipient
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.SignTx),
|
messages.ButtonRequest(code=messages.ButtonRequestType.SignTx),
|
||||||
proto.NEMSignedTx,
|
messages.NEMSignedTx,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import device, messages as proto
|
from trezorlib import device, messages
|
||||||
|
|
||||||
from ...common import MNEMONIC12
|
from ...common import MNEMONIC12
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ pytestmark = [pytest.mark.skip_t2]
|
|||||||
def test_pin_passphrase(client):
|
def test_pin_passphrase(client):
|
||||||
mnemonic = MNEMONIC12.split(" ")
|
mnemonic = MNEMONIC12.split(" ")
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.RecoveryDevice(
|
messages.RecoveryDevice(
|
||||||
word_count=12,
|
word_count=12,
|
||||||
passphrase_protection=True,
|
passphrase_protection=True,
|
||||||
pin_protection=True,
|
pin_protection=True,
|
||||||
@ -41,35 +41,35 @@ def test_pin_passphrase(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# click through confirmation
|
# click through confirmation
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for first time
|
# Enter PIN for first time
|
||||||
pin_encoded = client.debug.encode_pin(PIN6)
|
pin_encoded = client.debug.encode_pin(PIN6)
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for second time
|
# Enter PIN for second time
|
||||||
pin_encoded = client.debug.encode_pin(PIN6)
|
pin_encoded = client.debug.encode_pin(PIN6)
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
|
|
||||||
fakes = 0
|
fakes = 0
|
||||||
for _ in range(int(12 * 2)):
|
for _ in range(int(12 * 2)):
|
||||||
assert isinstance(ret, proto.WordRequest)
|
assert isinstance(ret, messages.WordRequest)
|
||||||
(word, pos) = client.debug.read_recovery_word()
|
(word, pos) = client.debug.read_recovery_word()
|
||||||
|
|
||||||
if pos != 0:
|
if pos != 0:
|
||||||
ret = client.call_raw(proto.WordAck(word=mnemonic[pos - 1]))
|
ret = client.call_raw(messages.WordAck(word=mnemonic[pos - 1]))
|
||||||
mnemonic[pos - 1] = None
|
mnemonic[pos - 1] = None
|
||||||
else:
|
else:
|
||||||
ret = client.call_raw(proto.WordAck(word=word))
|
ret = client.call_raw(messages.WordAck(word=word))
|
||||||
fakes += 1
|
fakes += 1
|
||||||
|
|
||||||
# Workflow succesfully ended
|
# Workflow succesfully ended
|
||||||
assert isinstance(ret, proto.Success)
|
assert isinstance(ret, messages.Success)
|
||||||
|
|
||||||
# 12 expected fake words and all words of mnemonic are used
|
# 12 expected fake words and all words of mnemonic are used
|
||||||
assert fakes == 12
|
assert fakes == 12
|
||||||
@ -83,16 +83,16 @@ def test_pin_passphrase(client):
|
|||||||
assert client.features.passphrase_protection is True
|
assert client.features.passphrase_protection is True
|
||||||
|
|
||||||
# Do passphrase-protected action, PassphraseRequest should be raised
|
# Do passphrase-protected action, PassphraseRequest should be raised
|
||||||
resp = client.call_raw(proto.GetAddress())
|
resp = client.call_raw(messages.GetAddress())
|
||||||
assert isinstance(resp, proto.PassphraseRequest)
|
assert isinstance(resp, messages.PassphraseRequest)
|
||||||
client.call_raw(proto.Cancel())
|
client.call_raw(messages.Cancel())
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
def test_nopin_nopassphrase(client):
|
def test_nopin_nopassphrase(client):
|
||||||
mnemonic = MNEMONIC12.split(" ")
|
mnemonic = MNEMONIC12.split(" ")
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.RecoveryDevice(
|
messages.RecoveryDevice(
|
||||||
word_count=12,
|
word_count=12,
|
||||||
passphrase_protection=False,
|
passphrase_protection=False,
|
||||||
pin_protection=False,
|
pin_protection=False,
|
||||||
@ -103,24 +103,24 @@ def test_nopin_nopassphrase(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# click through confirmation
|
# click through confirmation
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
fakes = 0
|
fakes = 0
|
||||||
for _ in range(int(12 * 2)):
|
for _ in range(int(12 * 2)):
|
||||||
assert isinstance(ret, proto.WordRequest)
|
assert isinstance(ret, messages.WordRequest)
|
||||||
(word, pos) = client.debug.read_recovery_word()
|
(word, pos) = client.debug.read_recovery_word()
|
||||||
|
|
||||||
if pos != 0:
|
if pos != 0:
|
||||||
ret = client.call_raw(proto.WordAck(word=mnemonic[pos - 1]))
|
ret = client.call_raw(messages.WordAck(word=mnemonic[pos - 1]))
|
||||||
mnemonic[pos - 1] = None
|
mnemonic[pos - 1] = None
|
||||||
else:
|
else:
|
||||||
ret = client.call_raw(proto.WordAck(word=word))
|
ret = client.call_raw(messages.WordAck(word=word))
|
||||||
fakes += 1
|
fakes += 1
|
||||||
|
|
||||||
# Workflow succesfully ended
|
# Workflow succesfully ended
|
||||||
assert isinstance(ret, proto.Success)
|
assert isinstance(ret, messages.Success)
|
||||||
|
|
||||||
# 12 expected fake words and all words of mnemonic are used
|
# 12 expected fake words and all words of mnemonic are used
|
||||||
assert fakes == 12
|
assert fakes == 12
|
||||||
@ -134,14 +134,14 @@ def test_nopin_nopassphrase(client):
|
|||||||
assert client.features.passphrase_protection is False
|
assert client.features.passphrase_protection is False
|
||||||
|
|
||||||
# Do pin & passphrase-protected action, PassphraseRequest should NOT be raised
|
# Do pin & passphrase-protected action, PassphraseRequest should NOT be raised
|
||||||
resp = client.call_raw(proto.GetAddress())
|
resp = client.call_raw(messages.GetAddress())
|
||||||
assert isinstance(resp, proto.Address)
|
assert isinstance(resp, messages.Address)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
def test_word_fail(client):
|
def test_word_fail(client):
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.RecoveryDevice(
|
messages.RecoveryDevice(
|
||||||
word_count=12,
|
word_count=12,
|
||||||
passphrase_protection=False,
|
passphrase_protection=False,
|
||||||
pin_protection=False,
|
pin_protection=False,
|
||||||
@ -152,25 +152,25 @@ def test_word_fail(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# click through confirmation
|
# click through confirmation
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.WordRequest)
|
assert isinstance(ret, messages.WordRequest)
|
||||||
for _ in range(int(12 * 2)):
|
for _ in range(int(12 * 2)):
|
||||||
(word, pos) = client.debug.read_recovery_word()
|
(word, pos) = client.debug.read_recovery_word()
|
||||||
if pos != 0:
|
if pos != 0:
|
||||||
ret = client.call_raw(proto.WordAck(word="kwyjibo"))
|
ret = client.call_raw(messages.WordAck(word="kwyjibo"))
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
client.call_raw(proto.WordAck(word=word))
|
client.call_raw(messages.WordAck(word=word))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
def test_pin_fail(client):
|
def test_pin_fail(client):
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.RecoveryDevice(
|
messages.RecoveryDevice(
|
||||||
word_count=12,
|
word_count=12,
|
||||||
passphrase_protection=True,
|
passphrase_protection=True,
|
||||||
pin_protection=True,
|
pin_protection=True,
|
||||||
@ -181,23 +181,23 @@ def test_pin_fail(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# click through confirmation
|
# click through confirmation
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for first time
|
# Enter PIN for first time
|
||||||
pin_encoded = client.debug.encode_pin(PIN4)
|
pin_encoded = client.debug.encode_pin(PIN4)
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for second time, but different one
|
# Enter PIN for second time, but different one
|
||||||
pin_encoded = client.debug.encode_pin(PIN6)
|
pin_encoded = client.debug.encode_pin(PIN6)
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
|
|
||||||
# Failure should be raised
|
# Failure should be raised
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
|
|
||||||
|
|
||||||
def test_already_initialized(client):
|
def test_already_initialized(client):
|
||||||
@ -207,9 +207,9 @@ def test_already_initialized(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.RecoveryDevice(
|
messages.RecoveryDevice(
|
||||||
word_count=12, type=proto.RecoveryDeviceType.ScrambledWords
|
word_count=12, type=messages.RecoveryDeviceType.ScrambledWords
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
assert "Device is already initialized" in ret.message
|
assert "Device is already initialized" in ret.message
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from mnemonic import Mnemonic
|
from mnemonic import Mnemonic
|
||||||
|
|
||||||
from trezorlib import device, messages as proto
|
from trezorlib import device, messages
|
||||||
|
|
||||||
from ...common import generate_entropy
|
from ...common import generate_entropy
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ def reset_device(client, strength):
|
|||||||
external_entropy = b"zlutoucky kun upel divoke ody" * 2
|
external_entropy = b"zlutoucky kun upel divoke ody" * 2
|
||||||
|
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(
|
messages.ResetDevice(
|
||||||
display_random=False,
|
display_random=False,
|
||||||
strength=strength,
|
strength=strength,
|
||||||
passphrase_protection=False,
|
passphrase_protection=False,
|
||||||
@ -39,14 +39,14 @@ def reset_device(client, strength):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Provide entropy
|
# Provide entropy
|
||||||
assert isinstance(ret, proto.EntropyRequest)
|
assert isinstance(ret, messages.EntropyRequest)
|
||||||
internal_entropy = client.debug.state().reset_entropy
|
internal_entropy = client.debug.state().reset_entropy
|
||||||
ret = client.call_raw(proto.EntropyAck(entropy=external_entropy))
|
ret = client.call_raw(messages.EntropyAck(entropy=external_entropy))
|
||||||
|
|
||||||
# Generate mnemonic locally
|
# Generate mnemonic locally
|
||||||
entropy = generate_entropy(strength, internal_entropy, external_entropy)
|
entropy = generate_entropy(strength, internal_entropy, external_entropy)
|
||||||
@ -54,10 +54,10 @@ def reset_device(client, strength):
|
|||||||
|
|
||||||
mnemonic = []
|
mnemonic = []
|
||||||
for _ in range(strength // 32 * 3):
|
for _ in range(strength // 32 * 3):
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
mnemonic.append(client.debug.read_reset_word())
|
mnemonic.append(client.debug.read_reset_word())
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
client.call_raw(proto.ButtonAck())
|
client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
mnemonic = " ".join(mnemonic)
|
mnemonic = " ".join(mnemonic)
|
||||||
|
|
||||||
@ -66,12 +66,12 @@ def reset_device(client, strength):
|
|||||||
|
|
||||||
mnemonic = []
|
mnemonic = []
|
||||||
for _ in range(strength // 32 * 3):
|
for _ in range(strength // 32 * 3):
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
mnemonic.append(client.debug.read_reset_word())
|
mnemonic.append(client.debug.read_reset_word())
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
resp = client.call_raw(proto.ButtonAck())
|
resp = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(resp, proto.Success)
|
assert isinstance(resp, messages.Success)
|
||||||
|
|
||||||
mnemonic = " ".join(mnemonic)
|
mnemonic = " ".join(mnemonic)
|
||||||
|
|
||||||
@ -79,15 +79,15 @@ def reset_device(client, strength):
|
|||||||
assert mnemonic == expected_mnemonic
|
assert mnemonic == expected_mnemonic
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
resp = client.call_raw(proto.Initialize())
|
resp = client.call_raw(messages.Initialize())
|
||||||
assert resp.initialized is True
|
assert resp.initialized is True
|
||||||
assert resp.needs_backup is False
|
assert resp.needs_backup is False
|
||||||
assert resp.pin_protection is False
|
assert resp.pin_protection is False
|
||||||
assert resp.passphrase_protection is False
|
assert resp.passphrase_protection is False
|
||||||
|
|
||||||
# Do pin & passphrase-protected action, PassphraseRequest should NOT be raised
|
# Do pin & passphrase-protected action, PassphraseRequest should NOT be raised
|
||||||
resp = client.call_raw(proto.GetAddress())
|
resp = client.call_raw(messages.GetAddress())
|
||||||
assert isinstance(resp, proto.Address)
|
assert isinstance(resp, messages.Address)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
@ -106,7 +106,7 @@ def test_reset_device_256_pin(client):
|
|||||||
strength = 256
|
strength = 256
|
||||||
|
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(
|
messages.ResetDevice(
|
||||||
display_random=True,
|
display_random=True,
|
||||||
strength=strength,
|
strength=strength,
|
||||||
passphrase_protection=True,
|
passphrase_protection=True,
|
||||||
@ -117,35 +117,35 @@ def test_reset_device_256_pin(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Do you want ... ?
|
# Do you want ... ?
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Entropy screen #1
|
# Entropy screen #1
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Entropy screen #2
|
# Entropy screen #2
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for first time
|
# Enter PIN for first time
|
||||||
pin_encoded = client.debug.encode_pin("654")
|
pin_encoded = client.debug.encode_pin("654")
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for second time
|
# Enter PIN for second time
|
||||||
pin_encoded = client.debug.encode_pin("654")
|
pin_encoded = client.debug.encode_pin("654")
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
|
|
||||||
# Provide entropy
|
# Provide entropy
|
||||||
assert isinstance(ret, proto.EntropyRequest)
|
assert isinstance(ret, messages.EntropyRequest)
|
||||||
internal_entropy = client.debug.state().reset_entropy
|
internal_entropy = client.debug.state().reset_entropy
|
||||||
ret = client.call_raw(proto.EntropyAck(entropy=external_entropy))
|
ret = client.call_raw(messages.EntropyAck(entropy=external_entropy))
|
||||||
|
|
||||||
# Generate mnemonic locally
|
# Generate mnemonic locally
|
||||||
entropy = generate_entropy(strength, internal_entropy, external_entropy)
|
entropy = generate_entropy(strength, internal_entropy, external_entropy)
|
||||||
@ -153,10 +153,10 @@ def test_reset_device_256_pin(client):
|
|||||||
|
|
||||||
mnemonic = []
|
mnemonic = []
|
||||||
for _ in range(strength // 32 * 3):
|
for _ in range(strength // 32 * 3):
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
mnemonic.append(client.debug.read_reset_word())
|
mnemonic.append(client.debug.read_reset_word())
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
client.call_raw(proto.ButtonAck())
|
client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
mnemonic = " ".join(mnemonic)
|
mnemonic = " ".join(mnemonic)
|
||||||
|
|
||||||
@ -165,12 +165,12 @@ def test_reset_device_256_pin(client):
|
|||||||
|
|
||||||
mnemonic = []
|
mnemonic = []
|
||||||
for _ in range(strength // 32 * 3):
|
for _ in range(strength // 32 * 3):
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
mnemonic.append(client.debug.read_reset_word())
|
mnemonic.append(client.debug.read_reset_word())
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
resp = client.call_raw(proto.ButtonAck())
|
resp = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(resp, proto.Success)
|
assert isinstance(resp, messages.Success)
|
||||||
|
|
||||||
mnemonic = " ".join(mnemonic)
|
mnemonic = " ".join(mnemonic)
|
||||||
|
|
||||||
@ -178,16 +178,16 @@ def test_reset_device_256_pin(client):
|
|||||||
assert mnemonic == expected_mnemonic
|
assert mnemonic == expected_mnemonic
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
resp = client.call_raw(proto.Initialize())
|
resp = client.call_raw(messages.Initialize())
|
||||||
assert resp.initialized is True
|
assert resp.initialized is True
|
||||||
assert resp.needs_backup is False
|
assert resp.needs_backup is False
|
||||||
assert resp.pin_protection is True
|
assert resp.pin_protection is True
|
||||||
assert resp.passphrase_protection is True
|
assert resp.passphrase_protection is True
|
||||||
|
|
||||||
# Do passphrase-protected action, PassphraseRequest should be raised
|
# Do passphrase-protected action, PassphraseRequest should be raised
|
||||||
resp = client.call_raw(proto.GetAddress())
|
resp = client.call_raw(messages.GetAddress())
|
||||||
assert isinstance(resp, proto.PassphraseRequest)
|
assert isinstance(resp, messages.PassphraseRequest)
|
||||||
client.call_raw(proto.Cancel())
|
client.call_raw(messages.Cancel())
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
@ -196,7 +196,7 @@ def test_failed_pin(client):
|
|||||||
strength = 128
|
strength = 128
|
||||||
|
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(
|
messages.ResetDevice(
|
||||||
display_random=True,
|
display_random=True,
|
||||||
strength=strength,
|
strength=strength,
|
||||||
passphrase_protection=True,
|
passphrase_protection=True,
|
||||||
@ -207,32 +207,32 @@ def test_failed_pin(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Do you want ... ?
|
# Do you want ... ?
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Entropy screen #1
|
# Entropy screen #1
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Entropy screen #2
|
# Entropy screen #2
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for first time
|
# Enter PIN for first time
|
||||||
pin_encoded = client.debug.encode_pin("1234")
|
pin_encoded = client.debug.encode_pin("1234")
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
assert isinstance(ret, proto.PinMatrixRequest)
|
assert isinstance(ret, messages.PinMatrixRequest)
|
||||||
|
|
||||||
# Enter PIN for second time
|
# Enter PIN for second time
|
||||||
pin_encoded = client.debug.encode_pin("6789")
|
pin_encoded = client.debug.encode_pin("6789")
|
||||||
ret = client.call_raw(proto.PinMatrixAck(pin=pin_encoded))
|
ret = client.call_raw(messages.PinMatrixAck(pin=pin_encoded))
|
||||||
|
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
|
|
||||||
|
|
||||||
def test_already_initialized(client):
|
def test_already_initialized(client):
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from mnemonic import Mnemonic
|
from mnemonic import Mnemonic
|
||||||
|
|
||||||
from trezorlib import messages as proto
|
from trezorlib import messages
|
||||||
|
|
||||||
from ...common import generate_entropy
|
from ...common import generate_entropy
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ STRENGTH = 128
|
|||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
def test_reset_device_skip_backup(client):
|
def test_reset_device_skip_backup(client):
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(
|
messages.ResetDevice(
|
||||||
display_random=False,
|
display_random=False,
|
||||||
strength=STRENGTH,
|
strength=STRENGTH,
|
||||||
passphrase_protection=False,
|
passphrase_protection=False,
|
||||||
@ -41,18 +41,18 @@ def test_reset_device_skip_backup(client):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Provide entropy
|
# Provide entropy
|
||||||
assert isinstance(ret, proto.EntropyRequest)
|
assert isinstance(ret, messages.EntropyRequest)
|
||||||
internal_entropy = client.debug.state().reset_entropy
|
internal_entropy = client.debug.state().reset_entropy
|
||||||
ret = client.call_raw(proto.EntropyAck(entropy=EXTERNAL_ENTROPY))
|
ret = client.call_raw(messages.EntropyAck(entropy=EXTERNAL_ENTROPY))
|
||||||
assert isinstance(ret, proto.Success)
|
assert isinstance(ret, messages.Success)
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
ret = client.call_raw(proto.Initialize())
|
ret = client.call_raw(messages.Initialize())
|
||||||
assert ret.initialized is True
|
assert ret.initialized is True
|
||||||
assert ret.needs_backup is True
|
assert ret.needs_backup is True
|
||||||
assert ret.unfinished_backup is False
|
assert ret.unfinished_backup is False
|
||||||
@ -63,14 +63,14 @@ def test_reset_device_skip_backup(client):
|
|||||||
expected_mnemonic = Mnemonic("english").to_mnemonic(entropy)
|
expected_mnemonic = Mnemonic("english").to_mnemonic(entropy)
|
||||||
|
|
||||||
# start Backup workflow
|
# start Backup workflow
|
||||||
ret = client.call_raw(proto.BackupDevice())
|
ret = client.call_raw(messages.BackupDevice())
|
||||||
|
|
||||||
mnemonic = []
|
mnemonic = []
|
||||||
for _ in range(STRENGTH // 32 * 3):
|
for _ in range(STRENGTH // 32 * 3):
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
mnemonic.append(client.debug.read_reset_word())
|
mnemonic.append(client.debug.read_reset_word())
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
client.call_raw(proto.ButtonAck())
|
client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
mnemonic = " ".join(mnemonic)
|
mnemonic = " ".join(mnemonic)
|
||||||
|
|
||||||
@ -79,12 +79,12 @@ def test_reset_device_skip_backup(client):
|
|||||||
|
|
||||||
mnemonic = []
|
mnemonic = []
|
||||||
for _ in range(STRENGTH // 32 * 3):
|
for _ in range(STRENGTH // 32 * 3):
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
mnemonic.append(client.debug.read_reset_word())
|
mnemonic.append(client.debug.read_reset_word())
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.Success)
|
assert isinstance(ret, messages.Success)
|
||||||
|
|
||||||
mnemonic = " ".join(mnemonic)
|
mnemonic = " ".join(mnemonic)
|
||||||
|
|
||||||
@ -92,14 +92,14 @@ def test_reset_device_skip_backup(client):
|
|||||||
assert mnemonic == expected_mnemonic
|
assert mnemonic == expected_mnemonic
|
||||||
|
|
||||||
# start backup again - should fail
|
# start backup again - should fail
|
||||||
ret = client.call_raw(proto.BackupDevice())
|
ret = client.call_raw(messages.BackupDevice())
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
def test_reset_device_skip_backup_break(client):
|
def test_reset_device_skip_backup_break(client):
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(
|
messages.ResetDevice(
|
||||||
display_random=False,
|
display_random=False,
|
||||||
strength=STRENGTH,
|
strength=STRENGTH,
|
||||||
passphrase_protection=False,
|
passphrase_protection=False,
|
||||||
@ -110,40 +110,40 @@ def test_reset_device_skip_backup_break(client):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Provide entropy
|
# Provide entropy
|
||||||
assert isinstance(ret, proto.EntropyRequest)
|
assert isinstance(ret, messages.EntropyRequest)
|
||||||
ret = client.call_raw(proto.EntropyAck(entropy=EXTERNAL_ENTROPY))
|
ret = client.call_raw(messages.EntropyAck(entropy=EXTERNAL_ENTROPY))
|
||||||
assert isinstance(ret, proto.Success)
|
assert isinstance(ret, messages.Success)
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
ret = client.call_raw(proto.Initialize())
|
ret = client.call_raw(messages.Initialize())
|
||||||
assert ret.initialized is True
|
assert ret.initialized is True
|
||||||
assert ret.needs_backup is True
|
assert ret.needs_backup is True
|
||||||
assert ret.unfinished_backup is False
|
assert ret.unfinished_backup is False
|
||||||
assert ret.no_backup is False
|
assert ret.no_backup is False
|
||||||
|
|
||||||
# start Backup workflow
|
# start Backup workflow
|
||||||
ret = client.call_raw(proto.BackupDevice())
|
ret = client.call_raw(messages.BackupDevice())
|
||||||
|
|
||||||
# send Initialize -> break workflow
|
# send Initialize -> break workflow
|
||||||
ret = client.call_raw(proto.Initialize())
|
ret = client.call_raw(messages.Initialize())
|
||||||
assert isinstance(ret, proto.Features)
|
assert isinstance(ret, messages.Features)
|
||||||
assert ret.initialized is True
|
assert ret.initialized is True
|
||||||
assert ret.needs_backup is False
|
assert ret.needs_backup is False
|
||||||
assert ret.unfinished_backup is True
|
assert ret.unfinished_backup is True
|
||||||
assert ret.no_backup is False
|
assert ret.no_backup is False
|
||||||
|
|
||||||
# start backup again - should fail
|
# start backup again - should fail
|
||||||
ret = client.call_raw(proto.BackupDevice())
|
ret = client.call_raw(messages.BackupDevice())
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
|
|
||||||
# read Features again
|
# read Features again
|
||||||
ret = client.call_raw(proto.Initialize())
|
ret = client.call_raw(messages.Initialize())
|
||||||
assert isinstance(ret, proto.Features)
|
assert isinstance(ret, messages.Features)
|
||||||
assert ret.initialized is True
|
assert ret.initialized is True
|
||||||
assert ret.needs_backup is False
|
assert ret.needs_backup is False
|
||||||
assert ret.unfinished_backup is True
|
assert ret.unfinished_backup is True
|
||||||
@ -151,14 +151,14 @@ def test_reset_device_skip_backup_break(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_initialized_device_backup_fail(client):
|
def test_initialized_device_backup_fail(client):
|
||||||
ret = client.call_raw(proto.BackupDevice())
|
ret = client.call_raw(messages.BackupDevice())
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
def test_reset_device_skip_backup_show_entropy_fail(client):
|
def test_reset_device_skip_backup_show_entropy_fail(client):
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(
|
messages.ResetDevice(
|
||||||
display_random=True,
|
display_random=True,
|
||||||
strength=STRENGTH,
|
strength=STRENGTH,
|
||||||
passphrase_protection=False,
|
passphrase_protection=False,
|
||||||
@ -168,4 +168,4 @@ def test_reset_device_skip_backup_show_entropy_fail(client):
|
|||||||
skip_backup=True,
|
skip_backup=True,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
assert isinstance(ret, proto.Failure)
|
assert isinstance(ret, messages.Failure)
|
||||||
|
@ -19,7 +19,7 @@ from unittest import mock
|
|||||||
import pytest
|
import pytest
|
||||||
from mnemonic import Mnemonic
|
from mnemonic import Mnemonic
|
||||||
|
|
||||||
from trezorlib import device, messages as proto
|
from trezorlib import device, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.messages import ButtonRequestType as B
|
from trezorlib.messages import ButtonRequestType as B
|
||||||
|
|
||||||
@ -62,15 +62,15 @@ def reset_device(client, strength):
|
|||||||
with mock.patch("os.urandom", os_urandom), client:
|
with mock.patch("os.urandom", os_urandom), client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.EntropyRequest(),
|
messages.EntropyRequest(),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.Success,
|
messages.Success,
|
||||||
proto.Features,
|
messages.Features,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
client.set_input_flow(input_flow)
|
client.set_input_flow(input_flow)
|
||||||
@ -95,12 +95,12 @@ def reset_device(client, strength):
|
|||||||
assert mnemonic == expected_mnemonic
|
assert mnemonic == expected_mnemonic
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
resp = client.call_raw(proto.Initialize())
|
resp = client.call_raw(messages.Initialize())
|
||||||
assert resp.initialized is True
|
assert resp.initialized is True
|
||||||
assert resp.needs_backup is False
|
assert resp.needs_backup is False
|
||||||
assert resp.pin_protection is False
|
assert resp.pin_protection is False
|
||||||
assert resp.passphrase_protection is False
|
assert resp.passphrase_protection is False
|
||||||
assert resp.backup_type is proto.BackupType.Bip39
|
assert resp.backup_type is messages.BackupType.Bip39
|
||||||
|
|
||||||
# backup attempt fails because backup was done in reset
|
# backup attempt fails because backup was done in reset
|
||||||
with pytest.raises(TrezorFailure, match="ProcessError: Seed already backed up"):
|
with pytest.raises(TrezorFailure, match="ProcessError: Seed already backed up"):
|
||||||
@ -170,18 +170,18 @@ def test_reset_device_pin(client):
|
|||||||
with mock.patch("os.urandom", os_urandom), client:
|
with mock.patch("os.urandom", os_urandom), client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.PinEntry),
|
messages.ButtonRequest(code=B.PinEntry),
|
||||||
proto.ButtonRequest(code=B.PinEntry),
|
messages.ButtonRequest(code=B.PinEntry),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.EntropyRequest(),
|
messages.EntropyRequest(),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.Success,
|
messages.Success,
|
||||||
proto.Features,
|
messages.Features,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
client.set_input_flow(input_flow)
|
client.set_input_flow(input_flow)
|
||||||
@ -206,7 +206,7 @@ def test_reset_device_pin(client):
|
|||||||
assert mnemonic == expected_mnemonic
|
assert mnemonic == expected_mnemonic
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
resp = client.call_raw(proto.Initialize())
|
resp = client.call_raw(messages.Initialize())
|
||||||
assert resp.initialized is True
|
assert resp.initialized is True
|
||||||
assert resp.needs_backup is False
|
assert resp.needs_backup is False
|
||||||
assert resp.pin_protection is True
|
assert resp.pin_protection is True
|
||||||
@ -250,17 +250,17 @@ def test_reset_failed_check(client):
|
|||||||
with mock.patch("os.urandom", os_urandom), client:
|
with mock.patch("os.urandom", os_urandom), client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.EntropyRequest(),
|
messages.EntropyRequest(),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.Success,
|
messages.Success,
|
||||||
proto.Features,
|
messages.Features,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
client.set_input_flow(input_flow)
|
client.set_input_flow(input_flow)
|
||||||
@ -285,12 +285,12 @@ def test_reset_failed_check(client):
|
|||||||
assert mnemonic == expected_mnemonic
|
assert mnemonic == expected_mnemonic
|
||||||
|
|
||||||
# Check if device is properly initialized
|
# Check if device is properly initialized
|
||||||
resp = client.call_raw(proto.Initialize())
|
resp = client.call_raw(messages.Initialize())
|
||||||
assert resp.initialized is True
|
assert resp.initialized is True
|
||||||
assert resp.needs_backup is False
|
assert resp.needs_backup is False
|
||||||
assert resp.pin_protection is False
|
assert resp.pin_protection is False
|
||||||
assert resp.passphrase_protection is False
|
assert resp.passphrase_protection is False
|
||||||
assert resp.backup_type is proto.BackupType.Bip39
|
assert resp.backup_type is messages.BackupType.Bip39
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(uninitialized=True)
|
@pytest.mark.setup_client(uninitialized=True)
|
||||||
@ -298,25 +298,25 @@ def test_failed_pin(client):
|
|||||||
# external_entropy = b'zlutoucky kun upel divoke ody' * 2
|
# external_entropy = b'zlutoucky kun upel divoke ody' * 2
|
||||||
strength = 128
|
strength = 128
|
||||||
ret = client.call_raw(
|
ret = client.call_raw(
|
||||||
proto.ResetDevice(strength=strength, pin_protection=True, label="test")
|
messages.ResetDevice(strength=strength, pin_protection=True, label="test")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Confirm Reset
|
# Confirm Reset
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.press_yes()
|
client.debug.press_yes()
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Enter PIN for first time
|
# Enter PIN for first time
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.input("654")
|
client.debug.input("654")
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
# Enter PIN for second time
|
# Enter PIN for second time
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
client.debug.input("456")
|
client.debug.input("456")
|
||||||
ret = client.call_raw(proto.ButtonAck())
|
ret = client.call_raw(messages.ButtonAck())
|
||||||
|
|
||||||
assert isinstance(ret, proto.ButtonRequest)
|
assert isinstance(ret, messages.ButtonRequest)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
|
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
|
||||||
|
@ -19,7 +19,7 @@ from unittest import mock
|
|||||||
import pytest
|
import pytest
|
||||||
from shamir_mnemonic import shamir
|
from shamir_mnemonic import shamir
|
||||||
|
|
||||||
from trezorlib import device, messages as proto
|
from trezorlib import device, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.messages import BackupType, ButtonRequestType as B
|
from trezorlib.messages import BackupType, ButtonRequestType as B
|
||||||
|
|
||||||
@ -72,36 +72,36 @@ def test_reset_device_slip39_advanced(client):
|
|||||||
with mock.patch("os.urandom", os_urandom), client:
|
with mock.patch("os.urandom", os_urandom), client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.EntropyRequest(),
|
messages.EntropyRequest(),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice), # group #1 counts
|
messages.ButtonRequest(code=B.ResetDevice), # group #1 counts
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice), # group #2 counts
|
messages.ButtonRequest(code=B.ResetDevice), # group #2 counts
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice), # group #3 counts
|
messages.ButtonRequest(code=B.ResetDevice), # group #3 counts
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice), # group #4 counts
|
messages.ButtonRequest(code=B.ResetDevice), # group #4 counts
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice), # group #5 counts
|
messages.ButtonRequest(code=B.ResetDevice), # group #5 counts
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
]
|
]
|
||||||
+ [
|
+ [
|
||||||
# individual mnemonic
|
# individual mnemonic
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
]
|
]
|
||||||
* (5 * 5) # groups * shares
|
* (5 * 5) # groups * shares
|
||||||
+ [
|
+ [
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.Success,
|
messages.Success,
|
||||||
proto.Features,
|
messages.Features,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
client.set_input_flow(input_flow)
|
client.set_input_flow(input_flow)
|
||||||
|
@ -20,7 +20,7 @@ from unittest import mock
|
|||||||
import pytest
|
import pytest
|
||||||
from shamir_mnemonic import MnemonicError, shamir
|
from shamir_mnemonic import MnemonicError, shamir
|
||||||
|
|
||||||
from trezorlib import device, messages as proto
|
from trezorlib import device, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.messages import BackupType, ButtonRequestType as B
|
from trezorlib.messages import BackupType, ButtonRequestType as B
|
||||||
|
|
||||||
@ -69,26 +69,26 @@ def reset_device(client, strength):
|
|||||||
with mock.patch("os.urandom", os_urandom), client:
|
with mock.patch("os.urandom", os_urandom), client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.EntropyRequest(),
|
messages.EntropyRequest(),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
]
|
]
|
||||||
+ [
|
+ [
|
||||||
# individual mnemonic
|
# individual mnemonic
|
||||||
proto.ButtonRequest(code=B.ResetDevice),
|
messages.ButtonRequest(code=B.ResetDevice),
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
]
|
]
|
||||||
* 5 # number of shares
|
* 5 # number of shares
|
||||||
+ [
|
+ [
|
||||||
proto.ButtonRequest(code=B.Success),
|
messages.ButtonRequest(code=B.Success),
|
||||||
proto.Success,
|
messages.Success,
|
||||||
proto.Features,
|
messages.Features,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
client.set_input_flow(input_flow)
|
client.set_input_flow(input_flow)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ def test_show_segwit(client):
|
|||||||
parse_path("49'/1'/0'/1/0"),
|
parse_path("49'/1'/0'/1/0"),
|
||||||
True,
|
True,
|
||||||
None,
|
None,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
== "2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX"
|
== "2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX"
|
||||||
)
|
)
|
||||||
@ -40,7 +40,7 @@ def test_show_segwit(client):
|
|||||||
parse_path("49'/1'/0'/0/0"),
|
parse_path("49'/1'/0'/0/0"),
|
||||||
False,
|
False,
|
||||||
None,
|
None,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
== "2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp"
|
== "2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp"
|
||||||
)
|
)
|
||||||
@ -51,7 +51,7 @@ def test_show_segwit(client):
|
|||||||
parse_path("44'/1'/0'/0/0"),
|
parse_path("44'/1'/0'/0/0"),
|
||||||
False,
|
False,
|
||||||
None,
|
None,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
== "2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc"
|
== "2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc"
|
||||||
)
|
)
|
||||||
@ -62,7 +62,7 @@ def test_show_segwit(client):
|
|||||||
parse_path("44'/1'/0'/0/0"),
|
parse_path("44'/1'/0'/0/0"),
|
||||||
False,
|
False,
|
||||||
None,
|
None,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
== "mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q"
|
== "mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q"
|
||||||
)
|
)
|
||||||
@ -77,7 +77,7 @@ def test_show_segwit_altcoin(client):
|
|||||||
parse_path("49'/1'/0'/0/0"),
|
parse_path("49'/1'/0'/0/0"),
|
||||||
False,
|
False,
|
||||||
None,
|
None,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
== "2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e"
|
== "2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e"
|
||||||
)
|
)
|
||||||
@ -88,7 +88,7 @@ def test_show_segwit_altcoin(client):
|
|||||||
parse_path("m/49'/1'/0'/0/0"),
|
parse_path("m/49'/1'/0'/0/0"),
|
||||||
False,
|
False,
|
||||||
None,
|
None,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
== "XNW67ZQA9K3AuXPBWvJH4zN2y5QBDTwy2Z"
|
== "XNW67ZQA9K3AuXPBWvJH4zN2y5QBDTwy2Z"
|
||||||
)
|
)
|
||||||
@ -103,11 +103,11 @@ def test_show_multisig_3(client):
|
|||||||
for i in range(1, 4)
|
for i in range(1, 4)
|
||||||
]
|
]
|
||||||
|
|
||||||
multisig1 = proto.MultisigRedeemScriptType(
|
multisig1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[0, 7], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[0, 7], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
# multisig2 = proto.MultisigRedeemScriptType(
|
# multisig2 = messages.MultisigRedeemScriptType(
|
||||||
# pubkeys=map(lambda n: proto.HDNodePathType(node=bip32.deserialize(n.xpub), address_n=[2, 1]), nodes),
|
# pubkeys=map(lambda n: messages.HDNodePathType(node=bip32.deserialize(n.xpub), address_n=[2, 1]), nodes),
|
||||||
# signatures=[b'', b'', b''],
|
# signatures=[b'', b'', b''],
|
||||||
# m=2,
|
# m=2,
|
||||||
# )
|
# )
|
||||||
@ -119,7 +119,7 @@ def test_show_multisig_3(client):
|
|||||||
parse_path(f"49'/1'/{i}'/0/7"),
|
parse_path(f"49'/1'/{i}'/0/7"),
|
||||||
False,
|
False,
|
||||||
multisig1,
|
multisig1,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
== "2MwuUwUzPG17wiKQpfXmzfxJEoe7RXZDRad"
|
== "2MwuUwUzPG17wiKQpfXmzfxJEoe7RXZDRad"
|
||||||
)
|
)
|
||||||
@ -135,7 +135,7 @@ def test_multisig_missing(client, show_display):
|
|||||||
btc.get_public_node(client, parse_path(f"49'/0'/{i}'")).node
|
btc.get_public_node(client, parse_path(f"49'/0'/{i}'")).node
|
||||||
for i in range(1, 4)
|
for i in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig1 = proto.MultisigRedeemScriptType(
|
multisig1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -143,11 +143,11 @@ def test_multisig_missing(client, show_display):
|
|||||||
node = btc.get_public_node(
|
node = btc.get_public_node(
|
||||||
client, parse_path("49h/0h/0h/0"), coin_name="Bitcoin"
|
client, parse_path("49h/0h/0h/0"), coin_name="Bitcoin"
|
||||||
).node
|
).node
|
||||||
multisig2 = proto.MultisigRedeemScriptType(
|
multisig2 = messages.MultisigRedeemScriptType(
|
||||||
pubkeys=[
|
pubkeys=[
|
||||||
proto.HDNodePathType(node=node, address_n=[1]),
|
messages.HDNodePathType(node=node, address_n=[1]),
|
||||||
proto.HDNodePathType(node=node, address_n=[2]),
|
messages.HDNodePathType(node=node, address_n=[2]),
|
||||||
proto.HDNodePathType(node=node, address_n=[3]),
|
messages.HDNodePathType(node=node, address_n=[3]),
|
||||||
],
|
],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
@ -161,5 +161,5 @@ def test_multisig_missing(client, show_display):
|
|||||||
parse_path("49'/0'/0'/0/0"),
|
parse_path("49'/0'/0'/0/0"),
|
||||||
show_display=show_display,
|
show_display=show_display,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
@ -24,25 +24,25 @@ VECTORS = ( # coin, path, script_type, address
|
|||||||
(
|
(
|
||||||
"Testnet",
|
"Testnet",
|
||||||
"84'/1'/0'/0/0",
|
"84'/1'/0'/0/0",
|
||||||
proto.InputScriptType.SPENDWITNESS,
|
messages.InputScriptType.SPENDWITNESS,
|
||||||
"tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9",
|
"tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"Testnet",
|
"Testnet",
|
||||||
"84'/1'/0'/1/0",
|
"84'/1'/0'/1/0",
|
||||||
proto.InputScriptType.SPENDWITNESS,
|
messages.InputScriptType.SPENDWITNESS,
|
||||||
"tb1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt96jk9x",
|
"tb1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt96jk9x",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"Bitcoin",
|
"Bitcoin",
|
||||||
"84'/0'/0'/0/0",
|
"84'/0'/0'/0/0",
|
||||||
proto.InputScriptType.SPENDWITNESS,
|
messages.InputScriptType.SPENDWITNESS,
|
||||||
"bc1qannfxke2tfd4l7vhepehpvt05y83v3qsf6nfkk",
|
"bc1qannfxke2tfd4l7vhepehpvt05y83v3qsf6nfkk",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"Bitcoin",
|
"Bitcoin",
|
||||||
"84'/0'/0'/1/0",
|
"84'/0'/0'/1/0",
|
||||||
proto.InputScriptType.SPENDWITNESS,
|
messages.InputScriptType.SPENDWITNESS,
|
||||||
"bc1qktmhrsmsenepnnfst8x6j27l0uqv7ggrg8x38q",
|
"bc1qktmhrsmsenepnnfst8x6j27l0uqv7ggrg8x38q",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -72,14 +72,14 @@ VECTORS = ( # coin, path, script_type, address
|
|||||||
pytest.param(
|
pytest.param(
|
||||||
"Groestlcoin",
|
"Groestlcoin",
|
||||||
"84'/17'/0'/0/0",
|
"84'/17'/0'/0/0",
|
||||||
proto.InputScriptType.SPENDWITNESS,
|
messages.InputScriptType.SPENDWITNESS,
|
||||||
"grs1qw4teyraux2s77nhjdwh9ar8rl9dt7zww8r6lne",
|
"grs1qw4teyraux2s77nhjdwh9ar8rl9dt7zww8r6lne",
|
||||||
marks=pytest.mark.altcoin,
|
marks=pytest.mark.altcoin,
|
||||||
),
|
),
|
||||||
pytest.param(
|
pytest.param(
|
||||||
"Elements",
|
"Elements",
|
||||||
"84'/1'/0'/0/0",
|
"84'/1'/0'/0/0",
|
||||||
proto.InputScriptType.SPENDWITNESS,
|
messages.InputScriptType.SPENDWITNESS,
|
||||||
"ert1qkvwu9g3k2pdxewfqr7syz89r3gj557l3xp9k2v",
|
"ert1qkvwu9g3k2pdxewfqr7syz89r3gj557l3xp9k2v",
|
||||||
marks=pytest.mark.altcoin,
|
marks=pytest.mark.altcoin,
|
||||||
),
|
),
|
||||||
@ -136,10 +136,10 @@ def test_show_multisig_3(client):
|
|||||||
).node
|
).node
|
||||||
for index in range(1, 4)
|
for index in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig1 = proto.MultisigRedeemScriptType(
|
multisig1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
multisig2 = proto.MultisigRedeemScriptType(
|
multisig2 = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[0, 1], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[0, 1], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
for i in [1, 2, 3]:
|
for i in [1, 2, 3]:
|
||||||
@ -150,7 +150,7 @@ def test_show_multisig_3(client):
|
|||||||
parse_path(f"84'/1'/{i}'/0/1"),
|
parse_path(f"84'/1'/{i}'/0/1"),
|
||||||
False,
|
False,
|
||||||
multisig2,
|
multisig2,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
== "tb1qauuv4e2pwjkr4ws5f8p20hu562jlqpe5h74whxqrwf7pufsgzcms9y8set"
|
== "tb1qauuv4e2pwjkr4ws5f8p20hu562jlqpe5h74whxqrwf7pufsgzcms9y8set"
|
||||||
)
|
)
|
||||||
@ -161,7 +161,7 @@ def test_show_multisig_3(client):
|
|||||||
parse_path(f"84'/1'/{i}'/0/0"),
|
parse_path(f"84'/1'/{i}'/0/0"),
|
||||||
False,
|
False,
|
||||||
multisig1,
|
multisig1,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
== "tb1qgvn67p4twmpqhs8c39tukmu9geamtf7x0z3flwf9rrw4ff3h6d2qt0czq3"
|
== "tb1qgvn67p4twmpqhs8c39tukmu9geamtf7x0z3flwf9rrw4ff3h6d2qt0czq3"
|
||||||
)
|
)
|
||||||
@ -177,7 +177,7 @@ def test_multisig_missing(client, show_display):
|
|||||||
btc.get_public_node(client, parse_path(f"84'/0'/{i}'")).node
|
btc.get_public_node(client, parse_path(f"84'/0'/{i}'")).node
|
||||||
for i in range(1, 4)
|
for i in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig1 = proto.MultisigRedeemScriptType(
|
multisig1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -185,11 +185,11 @@ def test_multisig_missing(client, show_display):
|
|||||||
node = btc.get_public_node(
|
node = btc.get_public_node(
|
||||||
client, parse_path("84h/0h/0h/0"), coin_name="Bitcoin"
|
client, parse_path("84h/0h/0h/0"), coin_name="Bitcoin"
|
||||||
).node
|
).node
|
||||||
multisig2 = proto.MultisigRedeemScriptType(
|
multisig2 = messages.MultisigRedeemScriptType(
|
||||||
pubkeys=[
|
pubkeys=[
|
||||||
proto.HDNodePathType(node=node, address_n=[1]),
|
messages.HDNodePathType(node=node, address_n=[1]),
|
||||||
proto.HDNodePathType(node=node, address_n=[2]),
|
messages.HDNodePathType(node=node, address_n=[2]),
|
||||||
proto.HDNodePathType(node=node, address_n=[3]),
|
messages.HDNodePathType(node=node, address_n=[3]),
|
||||||
],
|
],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
@ -203,5 +203,5 @@ def test_multisig_missing(client, show_display):
|
|||||||
parse_path("84'/0'/0'/0/0"),
|
parse_path("84'/0'/0'/0/0"),
|
||||||
show_display=show_display,
|
show_display=show_display,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import messages as proto, misc
|
from trezorlib import messages, misc
|
||||||
|
|
||||||
from ..common import MNEMONIC12
|
from ..common import MNEMONIC12
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
|
@pytest.mark.setup_client(mnemonic=MNEMONIC12)
|
||||||
def test_ecdh(client):
|
def test_ecdh(client):
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="gpg",
|
proto="gpg",
|
||||||
user="",
|
user="",
|
||||||
host="Satoshi Nakamoto <satoshi@bitcoin.org>",
|
host="Satoshi Nakamoto <satoshi@bitcoin.org>",
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import messages as proto, misc
|
from trezorlib import messages, misc
|
||||||
|
|
||||||
from ..common import MNEMONIC12
|
from ..common import MNEMONIC12
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ def test_sign(client):
|
|||||||
# URI : https://satoshi@bitcoin.org/login
|
# URI : https://satoshi@bitcoin.org/login
|
||||||
# hash : d0e2389d4c8394a9f3e32de01104bf6e8db2d9e2bb0905d60fffa5a18fd696db
|
# hash : d0e2389d4c8394a9f3e32de01104bf6e8db2d9e2bb0905d60fffa5a18fd696db
|
||||||
# path : m/2147483661/2637750992/2845082444/3761103859/4005495825
|
# path : m/2147483661/2637750992/2845082444/3761103859/4005495825
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="https",
|
proto="https",
|
||||||
user="satoshi",
|
user="satoshi",
|
||||||
host="bitcoin.org",
|
host="bitcoin.org",
|
||||||
@ -53,7 +53,7 @@ def test_sign(client):
|
|||||||
# URI : ftp://satoshi@bitcoin.org:2323/pub
|
# URI : ftp://satoshi@bitcoin.org:2323/pub
|
||||||
# hash : 79a6b53831c6ff224fb283587adc4ebae8fb0d734734a46c876838f52dff53f3
|
# hash : 79a6b53831c6ff224fb283587adc4ebae8fb0d734734a46c876838f52dff53f3
|
||||||
# path : m/2147483661/3098912377/2734671409/3632509519/3125730426
|
# path : m/2147483661/3098912377/2734671409/3632509519/3125730426
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="ftp",
|
proto="ftp",
|
||||||
user="satoshi",
|
user="satoshi",
|
||||||
host="bitcoin.org",
|
host="bitcoin.org",
|
||||||
@ -75,7 +75,7 @@ def test_sign(client):
|
|||||||
# URI : ssh://satoshi@bitcoin.org
|
# URI : ssh://satoshi@bitcoin.org
|
||||||
# hash : 5fa612f558a1a3b1fb7f010b2ea0a25cb02520a0ffa202ce74a92fc6145da5f3
|
# hash : 5fa612f558a1a3b1fb7f010b2ea0a25cb02520a0ffa202ce74a92fc6145da5f3
|
||||||
# path : m/2147483661/4111640159/2980290904/2332131323/3701645358
|
# path : m/2147483661/4111640159/2980290904/2332131323/3701645358
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="ssh", user="satoshi", host="bitcoin.org", port="", path="", index=47
|
proto="ssh", user="satoshi", host="bitcoin.org", port="", path="", index=47
|
||||||
)
|
)
|
||||||
sig = misc.sign_identity(
|
sig = misc.sign_identity(
|
||||||
@ -94,7 +94,7 @@ def test_sign(client):
|
|||||||
# URI : ssh://satoshi@bitcoin.org
|
# URI : ssh://satoshi@bitcoin.org
|
||||||
# hash : 5fa612f558a1a3b1fb7f010b2ea0a25cb02520a0ffa202ce74a92fc6145da5f3
|
# hash : 5fa612f558a1a3b1fb7f010b2ea0a25cb02520a0ffa202ce74a92fc6145da5f3
|
||||||
# path : m/2147483661/4111640159/2980290904/2332131323/3701645358
|
# path : m/2147483661/4111640159/2980290904/2332131323/3701645358
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="ssh", user="satoshi", host="bitcoin.org", port="", path="", index=47
|
proto="ssh", user="satoshi", host="bitcoin.org", port="", path="", index=47
|
||||||
)
|
)
|
||||||
sig = misc.sign_identity(
|
sig = misc.sign_identity(
|
||||||
@ -111,7 +111,7 @@ def test_sign(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# URI : gpg://satoshi@bitcoin.org
|
# URI : gpg://satoshi@bitcoin.org
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="gpg", user="satoshi", host="bitcoin.org", port="", path=""
|
proto="gpg", user="satoshi", host="bitcoin.org", port="", path=""
|
||||||
)
|
)
|
||||||
sig = misc.sign_identity(
|
sig = misc.sign_identity(
|
||||||
@ -128,7 +128,7 @@ def test_sign(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# URI : signify://satoshi@bitcoin.org
|
# URI : signify://satoshi@bitcoin.org
|
||||||
identity = proto.IdentityType(
|
identity = messages.IdentityType(
|
||||||
proto="signify", user="satoshi", host="bitcoin.org", port="", path=""
|
proto="signify", user="satoshi", host="bitcoin.org", port="", path=""
|
||||||
)
|
)
|
||||||
sig = misc.sign_identity(
|
sig = misc.sign_identity(
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import H_, parse_path
|
from trezorlib.tools import H_, 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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Bcash")
|
TX_API = TxCache("Bcash")
|
||||||
|
|
||||||
TXHASH_bc37c2 = bytes.fromhex(
|
TXHASH_bc37c2 = bytes.fromhex(
|
||||||
@ -43,23 +43,23 @@ pytestmark = pytest.mark.altcoin
|
|||||||
|
|
||||||
|
|
||||||
def test_send_bch_change(client):
|
def test_send_bch_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/0'/0/0"),
|
address_n=parse_path("44'/145'/0'/0/0"),
|
||||||
# bitcoincash:qr08q88p9etk89wgv05nwlrkm4l0urz4cyl36hh9sv
|
# bitcoincash:qr08q88p9etk89wgv05nwlrkm4l0urz4cyl36hh9sv
|
||||||
amount=1995344,
|
amount=1995344,
|
||||||
prev_hash=TXHASH_bc37c2,
|
prev_hash=TXHASH_bc37c2,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/145'/0'/1/0"),
|
address_n=parse_path("44'/145'/0'/1/0"),
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4",
|
address="bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4",
|
||||||
amount=73452,
|
amount=73452,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -67,8 +67,8 @@ def test_send_bch_change(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_bc37c2),
|
request_meta(TXHASH_bc37c2),
|
||||||
request_input(0, TXHASH_bc37c2),
|
request_input(0, TXHASH_bc37c2),
|
||||||
@ -90,26 +90,26 @@ def test_send_bch_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_bch_nochange(client):
|
def test_send_bch_nochange(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/0'/1/0"),
|
address_n=parse_path("44'/145'/0'/1/0"),
|
||||||
# bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw
|
# bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
prev_hash=TXHASH_502e85,
|
prev_hash=TXHASH_502e85,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/0'/0/1"),
|
address_n=parse_path("44'/145'/0'/0/1"),
|
||||||
# bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4
|
# bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4
|
||||||
amount=73452,
|
amount=73452,
|
||||||
prev_hash=TXHASH_502e85,
|
prev_hash=TXHASH_502e85,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="bitcoincash:qq6wnnkrz7ykaqvxrx4hmjvayvzjzml54uyk76arx4",
|
address="bitcoincash:qq6wnnkrz7ykaqvxrx4hmjvayvzjzml54uyk76arx4",
|
||||||
amount=1934960,
|
amount=1934960,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -117,8 +117,8 @@ def test_send_bch_nochange(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_502e85),
|
request_meta(TXHASH_502e85),
|
||||||
request_input(0, TXHASH_502e85),
|
request_input(0, TXHASH_502e85),
|
||||||
@ -146,26 +146,26 @@ def test_send_bch_nochange(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_bch_oldaddr(client):
|
def test_send_bch_oldaddr(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/0'/1/0"),
|
address_n=parse_path("44'/145'/0'/1/0"),
|
||||||
# bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw
|
# bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
prev_hash=TXHASH_502e85,
|
prev_hash=TXHASH_502e85,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/0'/0/1"),
|
address_n=parse_path("44'/145'/0'/0/1"),
|
||||||
# bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4
|
# bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4
|
||||||
amount=73452,
|
amount=73452,
|
||||||
prev_hash=TXHASH_502e85,
|
prev_hash=TXHASH_502e85,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="15pnEDZJo3ycPUamqP3tEDnEju1oW5fBCz",
|
address="15pnEDZJo3ycPUamqP3tEDnEju1oW5fBCz",
|
||||||
amount=1934960,
|
amount=1934960,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -173,8 +173,8 @@ def test_send_bch_oldaddr(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_502e85),
|
request_meta(TXHASH_502e85),
|
||||||
request_input(0, TXHASH_502e85),
|
request_input(0, TXHASH_502e85),
|
||||||
@ -202,22 +202,22 @@ def test_send_bch_oldaddr(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_attack_change_input(client):
|
def test_attack_change_input(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/10'/0/0"),
|
address_n=parse_path("44'/145'/10'/0/0"),
|
||||||
amount=1995344,
|
amount=1995344,
|
||||||
prev_hash=TXHASH_bc37c2,
|
prev_hash=TXHASH_bc37c2,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/145'/10'/1/0"),
|
address_n=parse_path("44'/145'/10'/1/0"),
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4",
|
address="bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4",
|
||||||
amount=73452,
|
amount=73452,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
attack_count = 2
|
attack_count = 2
|
||||||
@ -234,20 +234,20 @@ def test_attack_change_input(client):
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
client.set_filter(proto.TxAck, attack_processor)
|
client.set_filter(messages.TxAck, attack_processor)
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_bc37c2),
|
request_meta(TXHASH_bc37c2),
|
||||||
request_input(0, TXHASH_bc37c2),
|
request_input(0, TXHASH_bc37c2),
|
||||||
request_output(0, TXHASH_bc37c2),
|
request_output(0, TXHASH_bc37c2),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
proto.Failure(code=proto.FailureType.ProcessError),
|
messages.Failure(code=messages.FailureType.ProcessError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
with pytest.raises(TrezorFailure):
|
with pytest.raises(TrezorFailure):
|
||||||
@ -264,11 +264,11 @@ def test_send_bch_multisig_wrongchange(client):
|
|||||||
]
|
]
|
||||||
|
|
||||||
def getmultisig(chain, nr, signatures):
|
def getmultisig(chain, nr, signatures):
|
||||||
return proto.MultisigRedeemScriptType(
|
return messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[chain, nr], signatures=signatures, m=2
|
nodes=nodes, address_n=[chain, nr], signatures=signatures, m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
correcthorse = proto.HDNodeType(
|
correcthorse = messages.HDNodeType(
|
||||||
depth=1,
|
depth=1,
|
||||||
fingerprint=0,
|
fingerprint=0,
|
||||||
child_num=0,
|
child_num=0,
|
||||||
@ -282,27 +282,27 @@ def test_send_bch_multisig_wrongchange(client):
|
|||||||
sig = bytes.fromhex(
|
sig = bytes.fromhex(
|
||||||
"304402207274b5a4d15e75f3df7319a375557b0efba9b27bc63f9f183a17da95a6125c94022000efac57629f1522e2d3958430e2ef073b0706cfac06cce492651b79858f09ae"
|
"304402207274b5a4d15e75f3df7319a375557b0efba9b27bc63f9f183a17da95a6125c94022000efac57629f1522e2d3958430e2ef073b0706cfac06cce492651b79858f09ae"
|
||||||
)
|
)
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/145'/1'/0'/1/0"),
|
address_n=parse_path("48'/145'/1'/0'/1/0"),
|
||||||
multisig=getmultisig(1, 0, [b"", sig, b""]),
|
multisig=getmultisig(1, 0, [b"", sig, b""]),
|
||||||
# bitcoincash:pp6kcpkhua7789g2vyj0qfkcux3yvje7euhyhltn0a
|
# bitcoincash:pp6kcpkhua7789g2vyj0qfkcux3yvje7euhyhltn0a
|
||||||
amount=24000,
|
amount=24000,
|
||||||
prev_hash=TXHASH_f68caf,
|
prev_hash=TXHASH_f68caf,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("48'/145'/1'/0'/1/1"),
|
address_n=parse_path("48'/145'/1'/0'/1/1"),
|
||||||
multisig=proto.MultisigRedeemScriptType(
|
multisig=messages.MultisigRedeemScriptType(
|
||||||
pubkeys=[
|
pubkeys=[
|
||||||
proto.HDNodePathType(node=nodes[0], address_n=[1, 1]),
|
messages.HDNodePathType(node=nodes[0], address_n=[1, 1]),
|
||||||
proto.HDNodePathType(node=correcthorse, address_n=[]),
|
messages.HDNodePathType(node=correcthorse, address_n=[]),
|
||||||
proto.HDNodePathType(node=correcthorse, address_n=[]),
|
messages.HDNodePathType(node=correcthorse, address_n=[]),
|
||||||
],
|
],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
),
|
),
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
amount=23000,
|
amount=23000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -310,8 +310,8 @@ def test_send_bch_multisig_wrongchange(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_f68caf),
|
request_meta(TXHASH_f68caf),
|
||||||
request_input(0, TXHASH_f68caf),
|
request_input(0, TXHASH_f68caf),
|
||||||
@ -347,27 +347,27 @@ def test_send_bch_multisig_change(client):
|
|||||||
EMPTY_SIGNATURES = [b"", b"", b""]
|
EMPTY_SIGNATURES = [b"", b"", b""]
|
||||||
|
|
||||||
def getmultisig(chain, nr, signatures):
|
def getmultisig(chain, nr, signatures):
|
||||||
return proto.MultisigRedeemScriptType(
|
return messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[chain, nr], signatures=signatures, m=2
|
nodes=nodes, address_n=[chain, nr], signatures=signatures, m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/145'/3'/0'/0/0"),
|
address_n=parse_path("48'/145'/3'/0'/0/0"),
|
||||||
multisig=getmultisig(0, 0, EMPTY_SIGNATURES),
|
multisig=getmultisig(0, 0, EMPTY_SIGNATURES),
|
||||||
amount=48490,
|
amount=48490,
|
||||||
prev_hash=TXHASH_8b6db9,
|
prev_hash=TXHASH_8b6db9,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="bitcoincash:qqq8gx2j76nw4dfefumxmdwvtf2tpsjznusgsmzex9",
|
address="bitcoincash:qqq8gx2j76nw4dfefumxmdwvtf2tpsjznusgsmzex9",
|
||||||
amount=24000,
|
amount=24000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("48'/145'/3'/0'/1/0"),
|
address_n=parse_path("48'/145'/3'/0'/1/0"),
|
||||||
multisig=getmultisig(1, 0, EMPTY_SIGNATURES),
|
multisig=getmultisig(1, 0, EMPTY_SIGNATURES),
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
amount=24000,
|
amount=24000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -375,9 +375,9 @@ def test_send_bch_multisig_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_8b6db9),
|
request_meta(TXHASH_8b6db9),
|
||||||
request_input(0, TXHASH_8b6db9),
|
request_input(0, TXHASH_8b6db9),
|
||||||
@ -397,14 +397,14 @@ def test_send_bch_multisig_change(client):
|
|||||||
== "304402202b75dbb307d2556b9a85851d27ab118b3f06344bccb6e21b0a5dfcf74e0e644f02206611c59396d44741d34fd7bb602be06ef91690b22b47c3f3c271e15e20176ac0"
|
== "304402202b75dbb307d2556b9a85851d27ab118b3f06344bccb6e21b0a5dfcf74e0e644f02206611c59396d44741d34fd7bb602be06ef91690b22b47c3f3c271e15e20176ac0"
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/145'/1'/0'/0/0"),
|
address_n=parse_path("48'/145'/1'/0'/0/0"),
|
||||||
multisig=getmultisig(0, 0, [b"", b"", signatures1[0]]),
|
multisig=getmultisig(0, 0, [b"", b"", signatures1[0]]),
|
||||||
# bitcoincash:pqguz4nqq64jhr5v3kvpq4dsjrkda75hwy86gq0qzw
|
# bitcoincash:pqguz4nqq64jhr5v3kvpq4dsjrkda75hwy86gq0qzw
|
||||||
amount=48490,
|
amount=48490,
|
||||||
prev_hash=TXHASH_8b6db9,
|
prev_hash=TXHASH_8b6db9,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
)
|
)
|
||||||
out2.address_n[2] = H_(1)
|
out2.address_n[2] = H_(1)
|
||||||
|
|
||||||
@ -413,9 +413,9 @@ def test_send_bch_multisig_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_8b6db9),
|
request_meta(TXHASH_8b6db9),
|
||||||
request_input(0, TXHASH_8b6db9),
|
request_input(0, TXHASH_8b6db9),
|
||||||
@ -442,13 +442,13 @@ def test_send_bch_multisig_change(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_send_bch_external_presigned(client):
|
def test_send_bch_external_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# address_n=parse_path("44'/145'/0'/1/0"),
|
# address_n=parse_path("44'/145'/0'/1/0"),
|
||||||
# bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw
|
# bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
prev_hash=TXHASH_502e85,
|
prev_hash=TXHASH_502e85,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex(
|
script_pubkey=bytes.fromhex(
|
||||||
"76a914b1401fce7e8bf123c88a0467e0ed11e3b9fbef5488ac"
|
"76a914b1401fce7e8bf123c88a0467e0ed11e3b9fbef5488ac"
|
||||||
),
|
),
|
||||||
@ -456,18 +456,18 @@ def test_send_bch_external_presigned(client):
|
|||||||
"47304402207a2a955f1cb3dc5f03f2c82934f55654882af4e852e5159639f6349e9386ec4002205fb8419dce4e648eae8f67bc4e369adfb130a87d2ea2d668f8144213b12bb457412103174c61e9c5362507e8061e28d2c0ce3d4df4e73f3535ae0b12f37809e0f92d2d"
|
"47304402207a2a955f1cb3dc5f03f2c82934f55654882af4e852e5159639f6349e9386ec4002205fb8419dce4e648eae8f67bc4e369adfb130a87d2ea2d668f8144213b12bb457412103174c61e9c5362507e8061e28d2c0ce3d4df4e73f3535ae0b12f37809e0f92d2d"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/145'/0'/0/1"),
|
address_n=parse_path("44'/145'/0'/0/1"),
|
||||||
# bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4
|
# bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4
|
||||||
amount=73452,
|
amount=73452,
|
||||||
prev_hash=TXHASH_502e85,
|
prev_hash=TXHASH_502e85,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="bitcoincash:qq6wnnkrz7ykaqvxrx4hmjvayvzjzml54uyk76arx4",
|
address="bitcoincash:qq6wnnkrz7ykaqvxrx4hmjvayvzjzml54uyk76arx4",
|
||||||
amount=1934960,
|
amount=1934960,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -475,8 +475,8 @@ def test_send_bch_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_502e85),
|
request_meta(TXHASH_502e85),
|
||||||
request_input(0, TXHASH_502e85),
|
request_input(0, TXHASH_502e85),
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import H_, btc_hash, parse_path
|
from trezorlib.tools import H_, btc_hash, 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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Bgold")
|
TX_API = TxCache("Bgold")
|
||||||
|
|
||||||
TXHASH_25526b = bytes.fromhex(
|
TXHASH_25526b = bytes.fromhex(
|
||||||
@ -41,22 +41,22 @@ pytestmark = pytest.mark.altcoin
|
|||||||
|
|
||||||
# All data taken from T1
|
# All data taken from T1
|
||||||
def test_send_bitcoin_gold_change(client):
|
def test_send_bitcoin_gold_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/156'/0'/0/0"),
|
address_n=parse_path("44'/156'/0'/0/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/156'/0'/1/0"),
|
address_n=parse_path("44'/156'/0'/1/0"),
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=1252382934 - 1896050 - 1000,
|
amount=1252382934 - 1896050 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -64,8 +64,8 @@ def test_send_bitcoin_gold_change(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -88,25 +88,25 @@ def test_send_bitcoin_gold_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_bitcoin_gold_nochange(client):
|
def test_send_bitcoin_gold_nochange(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/156'/0'/1/0"),
|
address_n=parse_path("44'/156'/0'/1/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/156'/0'/0/1"),
|
address_n=parse_path("44'/156'/0'/0/1"),
|
||||||
# 1LRspCZNFJcbuNKQkXgHMDucctFRQya5a3
|
# 1LRspCZNFJcbuNKQkXgHMDucctFRQya5a3
|
||||||
amount=38448607,
|
amount=38448607,
|
||||||
prev_hash=TXHASH_db77c2,
|
prev_hash=TXHASH_db77c2,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=1252382934 + 38448607 - 1000,
|
amount=1252382934 + 38448607 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -114,8 +114,8 @@ def test_send_bitcoin_gold_nochange(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -143,22 +143,22 @@ def test_send_bitcoin_gold_nochange(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_attack_change_input(client):
|
def test_attack_change_input(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/156'/11'/0/0"),
|
address_n=parse_path("44'/156'/11'/0/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/156'/11'/1/0"),
|
address_n=parse_path("44'/156'/11'/1/0"),
|
||||||
amount=1896050,
|
amount=1896050,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=1252382934 - 1896050 - 1000,
|
amount=1252382934 - 1896050 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
attack_count = 2
|
attack_count = 2
|
||||||
@ -175,21 +175,21 @@ def test_attack_change_input(client):
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
client.set_filter(proto.TxAck, attack_processor)
|
client.set_filter(messages.TxAck, attack_processor)
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
request_output(0, TXHASH_25526b),
|
request_output(0, TXHASH_25526b),
|
||||||
request_output(1, TXHASH_25526b),
|
request_output(1, TXHASH_25526b),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
proto.Failure(code=proto.FailureType.ProcessError),
|
messages.Failure(code=messages.FailureType.ProcessError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
with pytest.raises(TrezorFailure):
|
with pytest.raises(TrezorFailure):
|
||||||
@ -208,28 +208,28 @@ def test_send_btg_multisig_change(client):
|
|||||||
EMPTY_SIGS = [b"", b"", b""]
|
EMPTY_SIGS = [b"", b"", b""]
|
||||||
|
|
||||||
def getmultisig(chain, nr, signatures):
|
def getmultisig(chain, nr, signatures):
|
||||||
return proto.MultisigRedeemScriptType(
|
return messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[chain, nr], signatures=signatures, m=2
|
nodes=nodes, address_n=[chain, nr], signatures=signatures, m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/156'/3'/0'/0/0"),
|
address_n=parse_path("48'/156'/3'/0'/0/0"),
|
||||||
multisig=getmultisig(0, 0, EMPTY_SIGS),
|
multisig=getmultisig(0, 0, EMPTY_SIGS),
|
||||||
# 33Ju286QvonBz5N1V754ZekQv4GLJqcc5R
|
# 33Ju286QvonBz5N1V754ZekQv4GLJqcc5R
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=24000,
|
amount=24000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("48'/156'/3'/0'/1/0"),
|
address_n=parse_path("48'/156'/3'/0'/1/0"),
|
||||||
multisig=getmultisig(1, 0, EMPTY_SIGS),
|
multisig=getmultisig(1, 0, EMPTY_SIGS),
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
amount=1252382934 - 24000 - 1000,
|
amount=1252382934 - 24000 - 1000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -237,9 +237,9 @@ def test_send_btg_multisig_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -260,13 +260,13 @@ def test_send_btg_multisig_change(client):
|
|||||||
== "30440220263c427e6e889c161206edee39b9b969350c154ddd8eb76d2ab8ca8e0fc083b702200fb1d0ef430fa2d0293dcbb0b237775d4f9748222a6ed9fc3ff747837b99020a"
|
== "30440220263c427e6e889c161206edee39b9b969350c154ddd8eb76d2ab8ca8e0fc083b702200fb1d0ef430fa2d0293dcbb0b237775d4f9748222a6ed9fc3ff747837b99020a"
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/156'/1'/0'/0/0"),
|
address_n=parse_path("48'/156'/1'/0'/0/0"),
|
||||||
multisig=getmultisig(0, 0, [b"", b"", signatures[0]]),
|
multisig=getmultisig(0, 0, [b"", b"", signatures[0]]),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
)
|
)
|
||||||
out2.address_n[2] = H_(1)
|
out2.address_n[2] = H_(1)
|
||||||
|
|
||||||
@ -275,9 +275,9 @@ def test_send_btg_multisig_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -304,21 +304,21 @@ def test_send_btg_multisig_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_p2sh(client):
|
def test_send_p2sh(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/156'/0'/1/0"),
|
address_n=parse_path("49'/156'/0'/1/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="GZFLExxrvWFuFT1xRzhfwQWSE2bPDedBfn",
|
address="GZFLExxrvWFuFT1xRzhfwQWSE2bPDedBfn",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=1252382934 - 11000 - 12300000,
|
amount=1252382934 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -326,10 +326,10 @@ def test_send_p2sh(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -353,21 +353,21 @@ def test_send_p2sh(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_p2sh_witness_change(client):
|
def test_send_p2sh_witness_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/156'/0'/1/0"),
|
address_n=parse_path("49'/156'/0'/1/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("49'/156'/0'/1/0"),
|
address_n=parse_path("49'/156'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
amount=1252382934 - 11000 - 12300000,
|
amount=1252382934 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -375,9 +375,9 @@ def test_send_p2sh_witness_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -408,23 +408,23 @@ def test_send_multisig_1(client):
|
|||||||
).node
|
).node
|
||||||
for i in range(1, 4)
|
for i in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[1, 0], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[1, 0], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/156'/1'/1/0"),
|
address_n=parse_path("49'/156'/1'/1/0"),
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=1252382934 - 1000,
|
amount=1252382934 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -432,8 +432,8 @@ def test_send_multisig_1(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -454,8 +454,8 @@ def test_send_multisig_1(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
@ -480,24 +480,24 @@ def test_send_multisig_1(client):
|
|||||||
def test_send_mixed_inputs(client):
|
def test_send_mixed_inputs(client):
|
||||||
# First is non-segwit, second is segwit.
|
# First is non-segwit, second is segwit.
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/156'/11'/0/0"),
|
address_n=parse_path("44'/156'/11'/0/0"),
|
||||||
amount=38448607,
|
amount=38448607,
|
||||||
prev_hash=TXHASH_db77c2,
|
prev_hash=TXHASH_db77c2,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/156'/0'/1/0"),
|
address_n=parse_path("49'/156'/0'/1/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=38448607 + 1252382934 - 1000,
|
amount=38448607 + 1252382934 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -513,30 +513,30 @@ def test_send_mixed_inputs(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_send_btg_external_presigned(client):
|
def test_send_btg_external_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/156'/0'/1/0"),
|
address_n=parse_path("44'/156'/0'/1/0"),
|
||||||
amount=1252382934,
|
amount=1252382934,
|
||||||
prev_hash=TXHASH_25526b,
|
prev_hash=TXHASH_25526b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# address_n=parse_path("49'/156'/0'/0/0"),
|
# address_n=parse_path("49'/156'/0'/0/0"),
|
||||||
# AXibjT5r96ZaVA8Lu4BQZocdTx7p5Ud8ZP
|
# AXibjT5r96ZaVA8Lu4BQZocdTx7p5Ud8ZP
|
||||||
amount=58456,
|
amount=58456,
|
||||||
prev_hash=TXHASH_f55c5b,
|
prev_hash=TXHASH_f55c5b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex("a914aee37ad448e17438cabfee1756f2a08e33ed3ce887"),
|
script_pubkey=bytes.fromhex("a914aee37ad448e17438cabfee1756f2a08e33ed3ce887"),
|
||||||
script_sig=bytes.fromhex("1600147c5edda9b293db2c8894b9d81efd77764910c445"),
|
script_sig=bytes.fromhex("1600147c5edda9b293db2c8894b9d81efd77764910c445"),
|
||||||
witness=bytes.fromhex(
|
witness=bytes.fromhex(
|
||||||
"024730440220091eece828409b3a9aa92dd2f9b032f9fb3a12b21b323a3fdea3cb18d08249af022065412107afcf76b0d28b90188c802f8f17b41790ed81c868d0ee23f1dd2ec53441210386789a34fe1a49bfc3e174adc6706c6222b0d80de76b884a0e3d32f8e9c4dc3e"
|
"024730440220091eece828409b3a9aa92dd2f9b032f9fb3a12b21b323a3fdea3cb18d08249af022065412107afcf76b0d28b90188c802f8f17b41790ed81c868d0ee23f1dd2ec53441210386789a34fe1a49bfc3e174adc6706c6222b0d80de76b884a0e3d32f8e9c4dc3e"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe",
|
||||||
amount=1252382934 + 58456 - 1000,
|
amount=1252382934 + 58456 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -544,8 +544,8 @@ def test_send_btg_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_25526b),
|
request_meta(TXHASH_25526b),
|
||||||
request_input(0, TXHASH_25526b),
|
request_input(0, TXHASH_25526b),
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
from ..tx_cache import TxCache
|
from ..tx_cache import TxCache
|
||||||
@ -28,7 +28,7 @@ from .signtx import (
|
|||||||
request_output,
|
request_output,
|
||||||
)
|
)
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Dash")
|
TX_API = TxCache("Dash")
|
||||||
|
|
||||||
TXHASH_5579ea = bytes.fromhex(
|
TXHASH_5579ea = bytes.fromhex(
|
||||||
@ -42,26 +42,26 @@ pytestmark = pytest.mark.altcoin
|
|||||||
|
|
||||||
|
|
||||||
def test_send_dash(client):
|
def test_send_dash(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/5'/0'/0/0"),
|
address_n=parse_path("44'/5'/0'/0/0"),
|
||||||
# dash:XdTw4G5AWW4cogGd7ayybyBNDbuB45UpgH
|
# dash:XdTw4G5AWW4cogGd7ayybyBNDbuB45UpgH
|
||||||
amount=1000000000,
|
amount=1000000000,
|
||||||
prev_hash=TXHASH_5579ea,
|
prev_hash=TXHASH_5579ea,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="XpTc36DPAeWmaueNBA9JqCg2GC8XDLKSYe",
|
address="XpTc36DPAeWmaueNBA9JqCg2GC8XDLKSYe",
|
||||||
amount=999999000,
|
amount=999999000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(inp1.prev_hash),
|
request_meta(inp1.prev_hash),
|
||||||
request_input(0, inp1.prev_hash),
|
request_input(0, inp1.prev_hash),
|
||||||
@ -83,23 +83,23 @@ def test_send_dash(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_dash_dip2_input(client):
|
def test_send_dash_dip2_input(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/5'/0'/0/0"),
|
address_n=parse_path("44'/5'/0'/0/0"),
|
||||||
# dash:XdTw4G5AWW4cogGd7ayybyBNDbuB45UpgH
|
# dash:XdTw4G5AWW4cogGd7ayybyBNDbuB45UpgH
|
||||||
amount=4095000260,
|
amount=4095000260,
|
||||||
prev_hash=TXHASH_15575a,
|
prev_hash=TXHASH_15575a,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/5'/0'/1/0"),
|
address_n=parse_path("44'/5'/0'/1/0"),
|
||||||
amount=4000000000,
|
amount=4000000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="XrEFMNkxeipYHgEQKiJuqch8XzwrtfH5fm",
|
address="XrEFMNkxeipYHgEQKiJuqch8XzwrtfH5fm",
|
||||||
amount=95000000,
|
amount=95000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
@ -107,8 +107,8 @@ def test_send_dash_dip2_input(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(inp1.prev_hash),
|
request_meta(inp1.prev_hash),
|
||||||
request_input(0, inp1.prev_hash),
|
request_input(0, inp1.prev_hash),
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Decred Testnet")
|
TX_API = TxCache("Decred Testnet")
|
||||||
|
|
||||||
|
|
||||||
@ -55,20 +55,20 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.decred]
|
|||||||
|
|
||||||
|
|
||||||
def test_send_decred(client):
|
def test_send_decred(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz
|
# TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
prev_hash=TXHASH_e16248,
|
prev_hash=TXHASH_e16248,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz",
|
address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz",
|
||||||
amount=190000000,
|
amount=190000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -76,9 +76,9 @@ def test_send_decred(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.FeeOverThreshold),
|
messages.ButtonRequest(code=B.FeeOverThreshold),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_e16248),
|
request_meta(TXHASH_e16248),
|
||||||
request_input(0, TXHASH_e16248),
|
request_input(0, TXHASH_e16248),
|
||||||
@ -100,29 +100,29 @@ def test_send_decred(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_purchase_ticket_decred(client):
|
def test_purchase_ticket_decred(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
prev_hash=TXHASH_e16248,
|
prev_hash=TXHASH_e16248,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz",
|
address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=199900000,
|
amount=199900000,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out3 = proto.TxOutputType(
|
out3 = messages.TxOutputType(
|
||||||
address="TsR28UZRprhgQQhzWns2M6cAwchrNVvbYq2",
|
address="TsR28UZRprhgQQhzWns2M6cAwchrNVvbYq2",
|
||||||
amount=0,
|
amount=0,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -130,10 +130,10 @@ def test_purchase_ticket_decred(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
request_output(2),
|
request_output(2),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_e16248),
|
request_meta(TXHASH_e16248),
|
||||||
request_input(0, TXHASH_e16248),
|
request_input(0, TXHASH_e16248),
|
||||||
@ -160,30 +160,30 @@ def test_purchase_ticket_decred(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_spend_from_stake_generation_and_revocation_decred(client):
|
def test_spend_from_stake_generation_and_revocation_decred(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
prev_hash=TXHASH_8b6890,
|
prev_hash=TXHASH_8b6890,
|
||||||
prev_index=2,
|
prev_index=2,
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
decred_staking_spend=proto.DecredStakingSpendType.SSGen,
|
decred_staking_spend=messages.DecredStakingSpendType.SSGen,
|
||||||
decred_tree=1,
|
decred_tree=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
prev_hash=TXHASH_1f00fc,
|
prev_hash=TXHASH_1f00fc,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
decred_staking_spend=proto.DecredStakingSpendType.SSRTX,
|
decred_staking_spend=messages.DecredStakingSpendType.SSRTX,
|
||||||
decred_tree=1,
|
decred_tree=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz",
|
address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz",
|
||||||
amount=399900000,
|
amount=399900000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -192,8 +192,8 @@ def test_spend_from_stake_generation_and_revocation_decred(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_8b6890),
|
request_meta(TXHASH_8b6890),
|
||||||
request_input(0, TXHASH_8b6890),
|
request_input(0, TXHASH_8b6890),
|
||||||
@ -221,47 +221,47 @@ def test_spend_from_stake_generation_and_revocation_decred(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_decred_change(client):
|
def test_send_decred_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz
|
# TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
amount=190000000,
|
amount=190000000,
|
||||||
prev_hash=TXHASH_5e6e35,
|
prev_hash=TXHASH_5e6e35,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz
|
# TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz
|
||||||
address_n=parse_path("m/44'/1'/0'/0/0"),
|
address_n=parse_path("m/44'/1'/0'/0/0"),
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
prev_hash=TXHASH_ccf95b,
|
prev_hash=TXHASH_ccf95b,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp3 = proto.TxInputType(
|
inp3 = messages.TxInputType(
|
||||||
# Tskt39YEvzoJ5KBDH4f1auNzG3jViVjZ2RV
|
# Tskt39YEvzoJ5KBDH4f1auNzG3jViVjZ2RV
|
||||||
address_n=parse_path("m/44'/1'/0'/0/1"),
|
address_n=parse_path("m/44'/1'/0'/0/1"),
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
prev_hash=TXHASH_f395ef,
|
prev_hash=TXHASH_f395ef,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="TsWjioPrP8E1TuTMmTrVMM2BA4iPrjQXBpR",
|
address="TsWjioPrP8E1TuTMmTrVMM2BA4iPrjQXBpR",
|
||||||
amount=489975000,
|
amount=489975000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
# TsaSFRwfN9muW5F6ZX36iSksc9hruiC5F97
|
# TsaSFRwfN9muW5F6ZX36iSksc9hruiC5F97
|
||||||
address_n=parse_path("m/44'/1'/0'/1/0"),
|
address_n=parse_path("m/44'/1'/0'/1/0"),
|
||||||
amount=100000000,
|
amount=100000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -271,9 +271,9 @@ def test_send_decred_change(client):
|
|||||||
request_input(1),
|
request_input(1),
|
||||||
request_input(2),
|
request_input(2),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_5e6e35),
|
request_meta(TXHASH_5e6e35),
|
||||||
request_input(0, TXHASH_5e6e35),
|
request_input(0, TXHASH_5e6e35),
|
||||||
@ -320,7 +320,7 @@ def test_decred_multisig_change(client):
|
|||||||
|
|
||||||
def create_multisig(index, address, signatures=None):
|
def create_multisig(index, address, signatures=None):
|
||||||
address_n = parse_path(address)
|
address_n = parse_path(address)
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=address_n, signatures=signatures, m=2
|
nodes=nodes, address_n=address_n, signatures=signatures, m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -328,42 +328,42 @@ def test_decred_multisig_change(client):
|
|||||||
|
|
||||||
def test_multisig(index):
|
def test_multisig(index):
|
||||||
address_n, multisig = create_multisig(index, "m/0/0", signatures[0])
|
address_n, multisig = create_multisig(index, "m/0/0", signatures[0])
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=address_n,
|
address_n=address_n,
|
||||||
# TchpthUkRys1VQWgnQyLJNaA4MLBjVmRL2c
|
# TchpthUkRys1VQWgnQyLJNaA4MLBjVmRL2c
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
prev_hash=TXHASH_3f7c39,
|
prev_hash=TXHASH_3f7c39,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
address_n, multisig = create_multisig(index, "m/0/1", signatures[1])
|
address_n, multisig = create_multisig(index, "m/0/1", signatures[1])
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=address_n,
|
address_n=address_n,
|
||||||
# TcnfDEfMhkM3oLWqiq9v9GmYgLK7qfjitKG
|
# TcnfDEfMhkM3oLWqiq9v9GmYgLK7qfjitKG
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=200000000,
|
amount=200000000,
|
||||||
prev_hash=TXHASH_16da18,
|
prev_hash=TXHASH_16da18,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
decred_tree=0,
|
decred_tree=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
address_n, multisig = create_multisig(index, "m/1/0")
|
address_n, multisig = create_multisig(index, "m/1/0")
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=address_n,
|
address_n=address_n,
|
||||||
# TcrrURA3Bzj4isGU48PdSP9SDoU5oCpjEcb
|
# TcrrURA3Bzj4isGU48PdSP9SDoU5oCpjEcb
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=99900000,
|
amount=99900000,
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="TsWjioPrP8E1TuTMmTrVMM2BA4iPrjQXBpR",
|
address="TsWjioPrP8E1TuTMmTrVMM2BA4iPrjQXBpR",
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -373,8 +373,8 @@ def test_decred_multisig_change(client):
|
|||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_3f7c39),
|
request_meta(TXHASH_3f7c39),
|
||||||
request_input(0, TXHASH_3f7c39),
|
request_input(0, TXHASH_3f7c39),
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
|
|
||||||
TX_CACHE_TESTNET = TxCache("Testnet")
|
TX_CACHE_TESTNET = TxCache("Testnet")
|
||||||
TX_CACHE_MAINNET = TxCache("Bitcoin")
|
TX_CACHE_MAINNET = TxCache("Bitcoin")
|
||||||
@ -62,7 +62,7 @@ TXHASH_df862e = bytes.fromhex(
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2pkh_presigned(client):
|
def test_p2pkh_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q
|
# mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q
|
||||||
address_n=parse_path("m/44h/1h/0h/0/0"),
|
address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
prev_hash=TXHASH_e5040e,
|
prev_hash=TXHASH_e5040e,
|
||||||
@ -70,13 +70,13 @@ def test_p2pkh_presigned(client):
|
|||||||
amount=31000000,
|
amount=31000000,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1ext = proto.TxInputType(
|
inp1ext = messages.TxInputType(
|
||||||
# mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q
|
# mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q
|
||||||
# address_n=parse_path("m/44h/1h/0h/0/0"),
|
# address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
prev_hash=TXHASH_e5040e,
|
prev_hash=TXHASH_e5040e,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
amount=31000000,
|
amount=31000000,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex(
|
script_pubkey=bytes.fromhex(
|
||||||
"76a914a579388225827d9f2fe9014add644487808c695d88ac"
|
"76a914a579388225827d9f2fe9014add644487808c695d88ac"
|
||||||
),
|
),
|
||||||
@ -85,7 +85,7 @@ def test_p2pkh_presigned(client):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# mopZWqZZyQc3F2Sy33cvDtJchSAMsnLi7b
|
# mopZWqZZyQc3F2Sy33cvDtJchSAMsnLi7b
|
||||||
address_n=parse_path("m/44h/1h/0h/0/1"),
|
address_n=parse_path("m/44h/1h/0h/0/1"),
|
||||||
prev_hash=TXHASH_d830b8,
|
prev_hash=TXHASH_d830b8,
|
||||||
@ -93,13 +93,13 @@ def test_p2pkh_presigned(client):
|
|||||||
amount=600000000,
|
amount=600000000,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2ext = proto.TxInputType(
|
inp2ext = messages.TxInputType(
|
||||||
# mopZWqZZyQc3F2Sy33cvDtJchSAMsnLi7b
|
# mopZWqZZyQc3F2Sy33cvDtJchSAMsnLi7b
|
||||||
# address_n=parse_path("m/44h/1h/0h/0/1"),
|
# address_n=parse_path("m/44h/1h/0h/0/1"),
|
||||||
prev_hash=TXHASH_d830b8,
|
prev_hash=TXHASH_d830b8,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
amount=600000000,
|
amount=600000000,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex(
|
script_pubkey=bytes.fromhex(
|
||||||
"76a9145b157a678a10021243307e4bb58f36375aa80e1088ac"
|
"76a9145b157a678a10021243307e4bb58f36375aa80e1088ac"
|
||||||
),
|
),
|
||||||
@ -108,16 +108,16 @@ def test_p2pkh_presigned(client):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2",
|
address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2",
|
||||||
amount=620000000,
|
amount=620000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("44h/1h/0h/1/0"),
|
address_n=parse_path("44h/1h/0h/1/0"),
|
||||||
amount=31000000 + 600000000 - 620000000 - 10000,
|
amount=31000000 + 600000000 - 620000000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test with first input as pre-signed external.
|
# Test with first input as pre-signed external.
|
||||||
@ -159,40 +159,40 @@ def test_p2pkh_presigned(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2wpkh_in_p2sh_presigned(client):
|
def test_p2wpkh_in_p2sh_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=111145789,
|
amount=111145789,
|
||||||
prev_hash=TXHASH_091446,
|
prev_hash=TXHASH_091446,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"),
|
script_pubkey=bytes.fromhex("a91458b53ea7f832e8f096e896b8713a8c6df0e892ca87"),
|
||||||
script_sig=bytearray.fromhex("160014d16b8c0680c61fc6ed2e407455715055e41052f5"),
|
script_sig=bytearray.fromhex("160014d16b8c0680c61fc6ed2e407455715055e41052f5"),
|
||||||
witness=bytes.fromhex(
|
witness=bytes.fromhex(
|
||||||
"02483045022100ead79ee134f25bb585b48aee6284a4bb14e07f03cc130253e83450d095515e5202201e161e9402c8b26b666f2b67e5b668a404ef7e57858ae9a6a68c3837e65fdc69012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b79"
|
"02483045022100ead79ee134f25bb585b48aee6284a4bb14e07f03cc130253e83450d095515e5202201e161e9402c8b26b666f2b67e5b668a404ef7e57858ae9a6a68c3837e65fdc69012103e7bfe10708f715e8538c92d46ca50db6f657bbc455b7494e6a0303ccdb868b79"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/1/0"),
|
address_n=parse_path("84'/1'/0'/1/0"),
|
||||||
amount=7289000,
|
amount=7289000,
|
||||||
prev_hash=TXHASH_65b811,
|
prev_hash=TXHASH_65b811,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc",
|
address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
# address_n=parse_path("44'/1'/0'/0/0"),
|
# address_n=parse_path("44'/1'/0'/0/0"),
|
||||||
address="2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc",
|
address="2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=45600000,
|
amount=45600000,
|
||||||
)
|
)
|
||||||
out3 = proto.TxOutputType(
|
out3 = messages.TxOutputType(
|
||||||
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
|
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
|
||||||
amount=111145789 + 7289000 - 11000 - 12300000 - 45600000,
|
amount=111145789 + 7289000 - 11000 - 12300000 - 45600000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -201,12 +201,12 @@ def test_p2wpkh_in_p2sh_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(2),
|
request_output(2),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
@ -248,18 +248,18 @@ def test_p2wpkh_in_p2sh_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(2),
|
request_output(2),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
request_output(0, TXHASH_091446),
|
request_output(0, TXHASH_091446),
|
||||||
request_output(1, TXHASH_091446),
|
request_output(1, TXHASH_091446),
|
||||||
proto.Failure(code=proto.FailureType.DataError),
|
messages.Failure(code=messages.FailureType.DataError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -275,22 +275,22 @@ def test_p2wpkh_in_p2sh_presigned(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2wpkh_presigned(client):
|
def test_p2wpkh_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9
|
# tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9
|
||||||
address_n=parse_path("m/84h/1h/0h/0/0"),
|
address_n=parse_path("m/84h/1h/0h/0/0"),
|
||||||
prev_hash=TXHASH_70f987,
|
prev_hash=TXHASH_70f987,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
amount=100000,
|
amount=100000,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# tb1qldlynaqp0hy4zc2aag3pkenzvxy65saesxw3wd
|
# tb1qldlynaqp0hy4zc2aag3pkenzvxy65saesxw3wd
|
||||||
# address_n=parse_path("m/84h/1h/0h/0/1"),
|
# address_n=parse_path("m/84h/1h/0h/0/1"),
|
||||||
prev_hash=TXHASH_65b768,
|
prev_hash=TXHASH_65b768,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
amount=10000,
|
amount=10000,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"),
|
script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"),
|
||||||
script_sig=bytes.fromhex(""),
|
script_sig=bytes.fromhex(""),
|
||||||
witness=bytearray.fromhex(
|
witness=bytearray.fromhex(
|
||||||
@ -298,16 +298,16 @@ def test_p2wpkh_presigned(client):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2",
|
address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2",
|
||||||
amount=50000,
|
amount=50000,
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("84h/1h/0h/1/0"),
|
address_n=parse_path("84h/1h/0h/1/0"),
|
||||||
amount=100000 + 10000 - 50000 - 1000,
|
amount=100000 + 10000 - 50000 - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test with second input as pre-signed external.
|
# Test with second input as pre-signed external.
|
||||||
@ -339,22 +339,22 @@ def test_p2wpkh_presigned(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2wsh_external_presigned(client):
|
def test_p2wsh_external_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
prev_hash=TXHASH_091446,
|
prev_hash=TXHASH_091446,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# 1-of-2 multisig
|
# 1-of-2 multisig
|
||||||
# m/84'/1'/0/0/0' for "alcohol woman abuse ..." seed.
|
# m/84'/1'/0/0/0' for "alcohol woman abuse ..." seed.
|
||||||
# m/84'/1'/0/0/0' for "all all ... all" seed.
|
# m/84'/1'/0/0/0' for "all all ... all" seed.
|
||||||
# tb1qpzmgzpcumztvmpu3q27wwdggqav26j9dgks92pvnne2lz9ferxgssmhzlq
|
# tb1qpzmgzpcumztvmpu3q27wwdggqav26j9dgks92pvnne2lz9ferxgssmhzlq
|
||||||
prev_hash=TXHASH_a345b8,
|
prev_hash=TXHASH_a345b8,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex(
|
script_pubkey=bytes.fromhex(
|
||||||
"002008b681071cd896cd879102bce735080758ad48ad45a05505939e55f115391991"
|
"002008b681071cd896cd879102bce735080758ad48ad45a05505939e55f115391991"
|
||||||
),
|
),
|
||||||
@ -364,10 +364,10 @@ def test_p2wsh_external_presigned(client):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
||||||
amount=12300000 + 100 - 10000,
|
amount=12300000 + 100 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -376,8 +376,8 @@ def test_p2wsh_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
@ -413,8 +413,8 @@ def test_p2wsh_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
@ -424,7 +424,7 @@ def test_p2wsh_external_presigned(client):
|
|||||||
request_meta(TXHASH_a345b8),
|
request_meta(TXHASH_a345b8),
|
||||||
request_input(0, TXHASH_a345b8),
|
request_input(0, TXHASH_a345b8),
|
||||||
request_output(0, TXHASH_a345b8),
|
request_output(0, TXHASH_a345b8),
|
||||||
proto.Failure(code=proto.FailureType.DataError),
|
messages.Failure(code=messages.FailureType.DataError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -436,15 +436,15 @@ def test_p2wsh_external_presigned(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2tr_external_presigned(client):
|
def test_p2tr_external_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u
|
# tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u
|
||||||
address_n=parse_path("86'/1'/0'/0/0"),
|
address_n=parse_path("86'/1'/0'/0/0"),
|
||||||
amount=6800,
|
amount=6800,
|
||||||
prev_hash=TXHASH_df862e,
|
prev_hash=TXHASH_df862e,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDTAPROOT,
|
script_type=messages.InputScriptType.SPENDTAPROOT,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# tb1p8tvmvsvhsee73rhym86wt435qrqm92psfsyhy6a3n5gw455znnpqm8wald
|
# tb1p8tvmvsvhsee73rhym86wt435qrqm92psfsyhy6a3n5gw455znnpqm8wald
|
||||||
# m/86'/1'/0'/0/1 for "all all ... all" seed.
|
# m/86'/1'/0'/0/1 for "all all ... all" seed.
|
||||||
amount=13000,
|
amount=13000,
|
||||||
@ -453,21 +453,21 @@ def test_p2tr_external_presigned(client):
|
|||||||
script_pubkey=bytes.fromhex(
|
script_pubkey=bytes.fromhex(
|
||||||
"51203ad9b641978673e88ee4d9f4e5d63400c1b2a8304c09726bb19d10ead2829cc2"
|
"51203ad9b641978673e88ee4d9f4e5d63400c1b2a8304c09726bb19d10ead2829cc2"
|
||||||
),
|
),
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
witness=bytearray.fromhex(
|
witness=bytearray.fromhex(
|
||||||
"01409956e47403278bf76eecbbbc3af0c2731d8347763825248a2e0f39aca5a684a7d5054e7222a1033fb5864a886180f1a8c64adab12433c78298d1f83e4c8f46e1"
|
"01409956e47403278bf76eecbbbc3af0c2731d8347763825248a2e0f39aca5a684a7d5054e7222a1033fb5864a886180f1a8c64adab12433c78298d1f83e4c8f46e1"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
# 84'/1'/1'/0/0
|
# 84'/1'/1'/0/0
|
||||||
address="tb1q7r9yvcdgcl6wmtta58yxf29a8kc96jkyxl7y88",
|
address="tb1q7r9yvcdgcl6wmtta58yxf29a8kc96jkyxl7y88",
|
||||||
amount=15000,
|
amount=15000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
# tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c
|
# tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c
|
||||||
address_n=parse_path("86'/1'/0'/1/0"),
|
address_n=parse_path("86'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOTAPROOT,
|
script_type=messages.OutputScriptType.PAYTOTAPROOT,
|
||||||
amount=6800 + 13000 - 200 - 15000,
|
amount=6800 + 13000 - 200 - 15000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -476,9 +476,9 @@ def test_p2tr_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
@ -506,11 +506,11 @@ def test_p2tr_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
proto.Failure(code=proto.FailureType.DataError),
|
messages.Failure(code=messages.FailureType.DataError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -538,35 +538,35 @@ def test_p2wpkh_in_p2sh_with_proof(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2wpkh_with_proof(client):
|
def test_p2wpkh_with_proof(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"
|
# seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"
|
||||||
# 84'/1'/0'/0/0
|
# 84'/1'/0'/0/0
|
||||||
# tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2
|
# tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2
|
||||||
amount=100000,
|
amount=100000,
|
||||||
prev_hash=TXHASH_e5b7e2,
|
prev_hash=TXHASH_e5b7e2,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"),
|
script_pubkey=bytes.fromhex("00149c02608d469160a92f40fdf8c6ccced029493088"),
|
||||||
ownership_proof=bytearray.fromhex(
|
ownership_proof=bytearray.fromhex(
|
||||||
"534c001900016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c40002483045022100d4ad0374c922848c71d913fba59c81b9075e0d33e884d953f0c4b4806b8ffd0c022024740e6717a2b6a5aa03148c3a28b02c713b4e30fc8aeae67fa69eb20e8ddcd9012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d"
|
"534c001900016b2055d8190244b2ed2d46513c40658a574d3bc2deb6969c0535bb818b44d2c40002483045022100d4ad0374c922848c71d913fba59c81b9075e0d33e884d953f0c4b4806b8ffd0c022024740e6717a2b6a5aa03148c3a28b02c713b4e30fc8aeae67fa69eb20e8ddcd9012103505f0d82bbdd251511591b34f36ad5eea37d3220c2b81a1189084431ddb3aa3d"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/1/0"),
|
address_n=parse_path("84'/1'/0'/1/0"),
|
||||||
amount=7289000,
|
amount=7289000,
|
||||||
prev_hash=TXHASH_65b811,
|
prev_hash=TXHASH_65b811,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc",
|
address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc",
|
||||||
amount=1230000,
|
amount=1230000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
|
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
|
||||||
amount=100000 + 7289000 - 11000 - 1230000,
|
amount=100000 + 7289000 - 11000 - 1230000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -575,10 +575,10 @@ def test_p2wpkh_with_proof(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_e5b7e2),
|
request_meta(TXHASH_e5b7e2),
|
||||||
request_input(0, TXHASH_e5b7e2),
|
request_input(0, TXHASH_e5b7e2),
|
||||||
@ -624,32 +624,32 @@ def test_p2wpkh_with_proof(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_p2wpkh_with_false_proof(client):
|
def test_p2wpkh_with_false_proof(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9
|
# tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9
|
||||||
address_n=parse_path("m/84h/1h/0h/0/0"),
|
address_n=parse_path("m/84h/1h/0h/0/0"),
|
||||||
prev_hash=TXHASH_70f987,
|
prev_hash=TXHASH_70f987,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
amount=100000,
|
amount=100000,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# tb1qldlynaqp0hy4zc2aag3pkenzvxy65saesxw3wd
|
# tb1qldlynaqp0hy4zc2aag3pkenzvxy65saesxw3wd
|
||||||
# address_n=parse_path("m/84h/1h/0h/0/1"),
|
# address_n=parse_path("m/84h/1h/0h/0/1"),
|
||||||
prev_hash=TXHASH_65b768,
|
prev_hash=TXHASH_65b768,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
amount=10000,
|
amount=10000,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"),
|
script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"),
|
||||||
ownership_proof=bytes.fromhex(
|
ownership_proof=bytes.fromhex(
|
||||||
"534c00190001b0b66657a824e41c063299fb4435dc70a6fd2e9db4c87e3c26a7ab7c0283547b0002473044022060bf60380142ed54fa907c82cb5ab438bfec22ebf8b5a92971fe104b7e3dd41002206f3fc4ac2f9c1a4a12255b5f678b6e57a088816051faea5a65a66951b394c150012103dcf3bc936ecb2ec57b8f468050abce8c8756e75fd74273c9977744b1a0be7d03"
|
"534c00190001b0b66657a824e41c063299fb4435dc70a6fd2e9db4c87e3c26a7ab7c0283547b0002473044022060bf60380142ed54fa907c82cb5ab438bfec22ebf8b5a92971fe104b7e3dd41002206f3fc4ac2f9c1a4a12255b5f678b6e57a088816051faea5a65a66951b394c150012103dcf3bc936ecb2ec57b8f468050abce8c8756e75fd74273c9977744b1a0be7d03"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2",
|
address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2",
|
||||||
amount=50000,
|
amount=50000,
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -658,8 +658,8 @@ def test_p2wpkh_with_false_proof(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_70f987),
|
request_meta(TXHASH_70f987),
|
||||||
request_input(0, TXHASH_70f987),
|
request_input(0, TXHASH_70f987),
|
||||||
@ -670,7 +670,7 @@ def test_p2wpkh_with_false_proof(client):
|
|||||||
request_input(0, TXHASH_65b768),
|
request_input(0, TXHASH_65b768),
|
||||||
request_output(0, TXHASH_65b768),
|
request_output(0, TXHASH_65b768),
|
||||||
request_output(1, TXHASH_65b768),
|
request_output(1, TXHASH_65b768),
|
||||||
proto.Failure(code=proto.FailureType.DataError),
|
messages.Failure(code=messages.FailureType.DataError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,12 +16,12 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
from ..tx_cache import TxCache
|
from ..tx_cache import TxCache
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Groestlcoin")
|
TX_API = TxCache("Groestlcoin")
|
||||||
TX_API_TESTNET = TxCache("Groestlcoin Testnet")
|
TX_API_TESTNET = TxCache("Groestlcoin Testnet")
|
||||||
|
|
||||||
@ -39,17 +39,17 @@ pytestmark = pytest.mark.altcoin
|
|||||||
|
|
||||||
|
|
||||||
def test_legacy(client):
|
def test_legacy(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA
|
# FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA
|
||||||
address_n=parse_path("44'/17'/0'/0/2"),
|
address_n=parse_path("44'/17'/0'/0/2"),
|
||||||
amount=210016,
|
amount=210016,
|
||||||
prev_hash=TXHASH_cb74c8,
|
prev_hash=TXHASH_cb74c8,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9",
|
address="FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9",
|
||||||
amount=210016 - 192,
|
amount=210016 - 192,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
_, serialized_tx = btc.sign_tx(
|
_, serialized_tx = btc.sign_tx(
|
||||||
client, "Groestlcoin", [inp1], [out1], prev_txes=TX_API
|
client, "Groestlcoin", [inp1], [out1], prev_txes=TX_API
|
||||||
@ -61,17 +61,17 @@ def test_legacy(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_legacy_change(client):
|
def test_legacy_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA
|
# FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA
|
||||||
address_n=parse_path("44'/17'/0'/0/2"),
|
address_n=parse_path("44'/17'/0'/0/2"),
|
||||||
amount=210016,
|
amount=210016,
|
||||||
prev_hash=TXHASH_cb74c8,
|
prev_hash=TXHASH_cb74c8,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/17'/0'/0/3"), # FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9
|
address_n=parse_path("44'/17'/0'/0/3"), # FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9
|
||||||
amount=210016 - 192,
|
amount=210016 - 192,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
_, serialized_tx = btc.sign_tx(
|
_, serialized_tx = btc.sign_tx(
|
||||||
client, "Groestlcoin", [inp1], [out1], prev_txes=TX_API
|
client, "Groestlcoin", [inp1], [out1], prev_txes=TX_API
|
||||||
@ -83,24 +83,24 @@ def test_legacy_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_segwit_p2sh(client):
|
def test_send_segwit_p2sh(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_09a48b,
|
prev_hash=TXHASH_09a48b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
sequence=0xFFFFFFFE,
|
sequence=0xFFFFFFFE,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y",
|
address="mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7",
|
address="2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7",
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
_, serialized_tx = btc.sign_tx(
|
_, serialized_tx = btc.sign_tx(
|
||||||
client,
|
client,
|
||||||
@ -117,23 +117,23 @@ def test_send_segwit_p2sh(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_segwit_p2sh_change(client):
|
def test_send_segwit_p2sh_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_09a48b,
|
prev_hash=TXHASH_09a48b,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
sequence=0xFFFFFFFE,
|
sequence=0xFFFFFFFE,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y",
|
address="mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
_, serialized_tx = btc.sign_tx(
|
_, serialized_tx = btc.sign_tx(
|
||||||
@ -151,22 +151,22 @@ def test_send_segwit_p2sh_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_segwit_native(client):
|
def test_send_segwit_native(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
prev_hash=TXHASH_4f2f85,
|
prev_hash=TXHASH_4f2f85,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
sequence=0xFFFFFFFE,
|
sequence=0xFFFFFFFE,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e",
|
address="2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e",
|
||||||
amount=5000000,
|
amount=5000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57",
|
address="tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=12300000 - 11000 - 5000000,
|
amount=12300000 - 11000 - 5000000,
|
||||||
)
|
)
|
||||||
_, serialized_tx = btc.sign_tx(
|
_, serialized_tx = btc.sign_tx(
|
||||||
@ -184,22 +184,22 @@ def test_send_segwit_native(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_segwit_native_change(client):
|
def test_send_segwit_native_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
prev_hash=TXHASH_4f2f85,
|
prev_hash=TXHASH_4f2f85,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
sequence=0xFFFFFFFE,
|
sequence=0xFFFFFFFE,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e",
|
address="2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e",
|
||||||
amount=5000000,
|
amount=5000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("84'/1'/0'/1/0"),
|
address_n=parse_path("84'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
amount=12300000 - 11000 - 5000000,
|
amount=12300000 - 11000 - 5000000,
|
||||||
)
|
)
|
||||||
_, serialized_tx = btc.sign_tx(
|
_, serialized_tx = btc.sign_tx(
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, device, messages as proto
|
from trezorlib import btc, device, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ def test_invalid_path_fail(client):
|
|||||||
# tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882
|
# tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882
|
||||||
# input 0: 0.0039 BTC
|
# input 0: 0.0039 BTC
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44h/0h/0h/0/0"),
|
address_n=parse_path("44h/0h/0h/0/0"),
|
||||||
amount=390000,
|
amount=390000,
|
||||||
prev_hash=TXHASH_d5f65e,
|
prev_hash=TXHASH_d5f65e,
|
||||||
@ -50,16 +50,16 @@ def test_invalid_path_fail(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 by changing the version
|
# address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 by changing the version
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="LfWz9wLHmqU9HoDkMg9NqbRosrHvEixeVZ",
|
address="LfWz9wLHmqU9HoDkMg9NqbRosrHvEixeVZ",
|
||||||
amount=390000 - 10000,
|
amount=390000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(TrezorFailure) as exc:
|
with pytest.raises(TrezorFailure) as exc:
|
||||||
btc.sign_tx(client, "Litecoin", [inp1], [out1], prev_txes=TX_CACHE_MAINNET)
|
btc.sign_tx(client, "Litecoin", [inp1], [out1], prev_txes=TX_CACHE_MAINNET)
|
||||||
|
|
||||||
assert exc.value.code == proto.FailureType.DataError
|
assert exc.value.code == messages.FailureType.DataError
|
||||||
assert exc.value.message.endswith("Forbidden key path")
|
assert exc.value.message.endswith("Forbidden key path")
|
||||||
|
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ def test_invalid_path_prompt(client):
|
|||||||
# tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882
|
# tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882
|
||||||
# input 0: 0.0039 BTC
|
# input 0: 0.0039 BTC
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44h/0h/0h/0/0"),
|
address_n=parse_path("44h/0h/0h/0/0"),
|
||||||
amount=390000,
|
amount=390000,
|
||||||
prev_hash=TXHASH_d5f65e,
|
prev_hash=TXHASH_d5f65e,
|
||||||
@ -79,14 +79,14 @@ def test_invalid_path_prompt(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 by changing the version
|
# address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 by changing the version
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="LfWz9wLHmqU9HoDkMg9NqbRosrHvEixeVZ",
|
address="LfWz9wLHmqU9HoDkMg9NqbRosrHvEixeVZ",
|
||||||
amount=390000 - 10000,
|
amount=390000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
device.apply_settings(
|
device.apply_settings(
|
||||||
client, safety_checks=proto.SafetyCheckLevel.PromptTemporarily
|
client, safety_checks=messages.SafetyCheckLevel.PromptTemporarily
|
||||||
)
|
)
|
||||||
|
|
||||||
btc.sign_tx(client, "Litecoin", [inp1], [out1], prev_txes=TX_CACHE_MAINNET)
|
btc.sign_tx(client, "Litecoin", [inp1], [out1], prev_txes=TX_CACHE_MAINNET)
|
||||||
@ -100,7 +100,7 @@ def test_invalid_path_pass_forkid(client):
|
|||||||
# tx: 8cc1f4adf7224ce855cf535a5104594a0004cb3b640d6714fdb00b9128832dd5
|
# tx: 8cc1f4adf7224ce855cf535a5104594a0004cb3b640d6714fdb00b9128832dd5
|
||||||
# input 0: 0.0039 BTC
|
# input 0: 0.0039 BTC
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44h/0h/0h/0/0"),
|
address_n=parse_path("44h/0h/0h/0/0"),
|
||||||
amount=390000,
|
amount=390000,
|
||||||
prev_hash=TXHASH_8cc1f4,
|
prev_hash=TXHASH_8cc1f4,
|
||||||
@ -108,10 +108,10 @@ def test_invalid_path_pass_forkid(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 to cashaddr format
|
# address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 to cashaddr format
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="bitcoincash:qr0fk25d5zygyn50u5w7h6jkvctas52n0qxff9ja6r",
|
address="bitcoincash:qr0fk25d5zygyn50u5w7h6jkvctas52n0qxff9ja6r",
|
||||||
amount=390000 - 10000,
|
amount=390000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
btc.sign_tx(client, "Bcash", [inp1], [out1], prev_txes=TX_CACHE_BCASH)
|
btc.sign_tx(client, "Bcash", [inp1], [out1], prev_txes=TX_CACHE_BCASH)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
from ..tx_cache import TxCache
|
from ..tx_cache import TxCache
|
||||||
@ -28,7 +28,7 @@ from .signtx import (
|
|||||||
request_output,
|
request_output,
|
||||||
)
|
)
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Komodo")
|
TX_API = TxCache("Komodo")
|
||||||
|
|
||||||
TXHASH_2807c = bytes.fromhex(
|
TXHASH_2807c = bytes.fromhex(
|
||||||
@ -45,7 +45,7 @@ def test_one_one_fee_sapling(client):
|
|||||||
# prevout: 2807c5b126ec8e2b078cab0f12e4c8b4ce1d7724905f8ebef8dca26b0c8e0f1d:0
|
# prevout: 2807c5b126ec8e2b078cab0f12e4c8b4ce1d7724905f8ebef8dca26b0c8e0f1d:0
|
||||||
# input 1: 10.9998 KMD
|
# input 1: 10.9998 KMD
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi
|
# R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi
|
||||||
address_n=parse_path("44'/141'/0'/0/0"),
|
address_n=parse_path("44'/141'/0'/0/0"),
|
||||||
amount=1099980000,
|
amount=1099980000,
|
||||||
@ -53,10 +53,10 @@ def test_one_one_fee_sapling(client):
|
|||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi",
|
address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi",
|
||||||
amount=1099980000 - 10000,
|
amount=1099980000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -64,9 +64,9 @@ def test_one_one_fee_sapling(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_2807c),
|
request_meta(TXHASH_2807c),
|
||||||
request_input(0, TXHASH_2807c),
|
request_input(0, TXHASH_2807c),
|
||||||
@ -101,7 +101,7 @@ def test_one_one_rewards_claim(client):
|
|||||||
# prevout: 7b28bd91119e9776f0d4ebd80e570165818a829bbf4477cd1afe5149dbcd34b1:0
|
# prevout: 7b28bd91119e9776f0d4ebd80e570165818a829bbf4477cd1afe5149dbcd34b1:0
|
||||||
# input 1: 10.9997 KMD
|
# input 1: 10.9997 KMD
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi
|
# R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi
|
||||||
address_n=parse_path("44'/141'/0'/0/0"),
|
address_n=parse_path("44'/141'/0'/0/0"),
|
||||||
amount=1099970000,
|
amount=1099970000,
|
||||||
@ -109,17 +109,17 @@ def test_one_one_rewards_claim(client):
|
|||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi",
|
address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi",
|
||||||
amount=1099970000 - 10000,
|
amount=1099970000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
# kmd interest, vout sum > vin sum
|
# kmd interest, vout sum > vin sum
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi",
|
address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi",
|
||||||
amount=79605,
|
amount=79605,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -127,11 +127,11 @@ def test_one_one_rewards_claim(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_7b28bd),
|
request_meta(TXHASH_7b28bd),
|
||||||
request_input(0, TXHASH_7b28bd),
|
request_input(0, TXHASH_7b28bd),
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import H_, parse_path
|
from trezorlib.tools import H_, 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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Testnet")
|
TX_API = TxCache("Testnet")
|
||||||
|
|
||||||
TXHASH_20912f = bytes.fromhex(
|
TXHASH_20912f = bytes.fromhex(
|
||||||
@ -41,22 +41,22 @@ TXHASH_e5040e = bytes.fromhex(
|
|||||||
|
|
||||||
|
|
||||||
def test_send_p2sh(client):
|
def test_send_p2sh(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_20912f,
|
prev_hash=TXHASH_20912f,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX",
|
address="2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -64,10 +64,10 @@ def test_send_p2sh(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_20912f),
|
request_meta(TXHASH_20912f),
|
||||||
request_input(0, TXHASH_20912f),
|
request_input(0, TXHASH_20912f),
|
||||||
@ -91,22 +91,22 @@ def test_send_p2sh(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_p2sh_change(client):
|
def test_send_p2sh_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_20912f,
|
prev_hash=TXHASH_20912f,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -114,9 +114,9 @@ def test_send_p2sh_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_20912f),
|
request_meta(TXHASH_20912f),
|
||||||
request_input(0, TXHASH_20912f),
|
request_input(0, TXHASH_20912f),
|
||||||
@ -142,25 +142,25 @@ def test_send_p2sh_change(client):
|
|||||||
def test_testnet_segwit_big_amount(client):
|
def test_testnet_segwit_big_amount(client):
|
||||||
# This test is testing transaction with amount bigger than fits to uint32
|
# This test is testing transaction with amount bigger than fits to uint32
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("m/49'/1'/0'/0/0"),
|
address_n=parse_path("m/49'/1'/0'/0/0"),
|
||||||
amount=2 ** 32 + 1,
|
amount=2 ** 32 + 1,
|
||||||
prev_hash=TXHASH_dee13c,
|
prev_hash=TXHASH_dee13c,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2Mt7P2BAfE922zmfXrdcYTLyR7GUvbwSEns", # seed allallall, bip32: m/49'/1'/0'/0/1, script type:p2shsegwit
|
address="2Mt7P2BAfE922zmfXrdcYTLyR7GUvbwSEns", # seed allallall, bip32: m/49'/1'/0'/0/1, script type:p2shsegwit
|
||||||
amount=2 ** 32 + 1,
|
amount=2 ** 32 + 1,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_dee13c),
|
request_meta(TXHASH_dee13c),
|
||||||
request_output(0, TXHASH_dee13c),
|
request_output(0, TXHASH_dee13c),
|
||||||
@ -188,23 +188,23 @@ def test_send_multisig_1(client):
|
|||||||
for i in range(1, 4)
|
for i in range(1, 4)
|
||||||
]
|
]
|
||||||
|
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[1, 0], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[1, 0], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/1'/1/0"),
|
address_n=parse_path("49'/1'/1'/1/0"),
|
||||||
prev_hash=TXHASH_9c3192,
|
prev_hash=TXHASH_9c3192,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=1610436,
|
amount=1610436,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
||||||
amount=1605000,
|
amount=1605000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -212,8 +212,8 @@ def test_send_multisig_1(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_9c3192),
|
request_meta(TXHASH_9c3192),
|
||||||
request_input(0, TXHASH_9c3192),
|
request_input(0, TXHASH_9c3192),
|
||||||
@ -234,8 +234,8 @@ def test_send_multisig_1(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_9c3192),
|
request_meta(TXHASH_9c3192),
|
||||||
request_input(0, TXHASH_9c3192),
|
request_input(0, TXHASH_9c3192),
|
||||||
@ -258,22 +258,22 @@ def test_send_multisig_1(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_attack_change_input_address(client):
|
def test_attack_change_input_address(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_20912f,
|
prev_hash=TXHASH_20912f,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("49'/1'/12'/1/0"),
|
address_n=parse_path("49'/1'/12'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -283,10 +283,10 @@ def test_attack_change_input_address(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_20912f),
|
request_meta(TXHASH_20912f),
|
||||||
request_input(0, TXHASH_20912f),
|
request_input(0, TXHASH_20912f),
|
||||||
@ -321,26 +321,26 @@ def test_attack_change_input_address(client):
|
|||||||
|
|
||||||
# Now run the attack, must trigger the exception
|
# Now run the attack, must trigger the exception
|
||||||
with client:
|
with client:
|
||||||
client.set_filter(proto.TxAck, attack_processor)
|
client.set_filter(messages.TxAck, attack_processor)
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_20912f),
|
request_meta(TXHASH_20912f),
|
||||||
request_input(0, TXHASH_20912f),
|
request_input(0, TXHASH_20912f),
|
||||||
request_output(0, TXHASH_20912f),
|
request_output(0, TXHASH_20912f),
|
||||||
request_output(1, TXHASH_20912f),
|
request_output(1, TXHASH_20912f),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
proto.Failure(code=proto.FailureType.ProcessError),
|
messages.Failure(code=messages.FailureType.ProcessError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
with pytest.raises(TrezorFailure) as exc:
|
with pytest.raises(TrezorFailure) as exc:
|
||||||
btc.sign_tx(client, "Testnet", [inp1], [out1, out2], prev_txes=TX_API)
|
btc.sign_tx(client, "Testnet", [inp1], [out1, out2], prev_txes=TX_API)
|
||||||
assert exc.value.code == proto.FailureType.ProcessError
|
assert exc.value.code == messages.FailureType.ProcessError
|
||||||
assert exc.value.message.endswith("Transaction has changed during signing")
|
assert exc.value.message.endswith("Transaction has changed during signing")
|
||||||
|
|
||||||
|
|
||||||
@ -348,35 +348,35 @@ def test_attack_mixed_inputs(client):
|
|||||||
TRUE_AMOUNT = 123456789
|
TRUE_AMOUNT = 123456789
|
||||||
FAKE_AMOUNT = 120000000
|
FAKE_AMOUNT = 120000000
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/1'/0'/0/0"),
|
address_n=parse_path("44'/1'/0'/0/0"),
|
||||||
amount=31000000,
|
amount=31000000,
|
||||||
prev_hash=TXHASH_e5040e,
|
prev_hash=TXHASH_e5040e,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDADDRESS,
|
script_type=messages.InputScriptType.SPENDADDRESS,
|
||||||
sequence=0xFFFFFFFD,
|
sequence=0xFFFFFFFD,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
amount=TRUE_AMOUNT,
|
amount=TRUE_AMOUNT,
|
||||||
prev_hash=TXHASH_20912f,
|
prev_hash=TXHASH_20912f,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
sequence=0xFFFFFFFD,
|
sequence=0xFFFFFFFD,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC",
|
||||||
amount=31000000 + TRUE_AMOUNT - 3456789,
|
amount=31000000 + TRUE_AMOUNT - 3456789,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
expected_responses = [
|
expected_responses = [
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.ConfirmOutput),
|
messages.ButtonRequest(code=messages.ButtonRequestType.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.FeeOverThreshold),
|
messages.ButtonRequest(code=messages.ButtonRequestType.FeeOverThreshold),
|
||||||
proto.ButtonRequest(code=proto.ButtonRequestType.SignTx),
|
messages.ButtonRequest(code=messages.ButtonRequestType.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_e5040e),
|
request_meta(TXHASH_e5040e),
|
||||||
request_input(0, TXHASH_e5040e),
|
request_input(0, TXHASH_e5040e),
|
||||||
@ -418,11 +418,11 @@ def test_attack_mixed_inputs(client):
|
|||||||
if client.features.model == "1":
|
if client.features.model == "1":
|
||||||
# T1 fails as soon as it encounters the fake amount.
|
# T1 fails as soon as it encounters the fake amount.
|
||||||
expected_responses = (
|
expected_responses = (
|
||||||
expected_responses[:4] + expected_responses[5:15] + [proto.Failure()]
|
expected_responses[:4] + expected_responses[5:15] + [messages.Failure()]
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
expected_responses = (
|
expected_responses = (
|
||||||
expected_responses[:4] + expected_responses[5:16] + [proto.Failure()]
|
expected_responses[:4] + expected_responses[5:16] + [messages.Failure()]
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(TrezorFailure) as e, client:
|
with pytest.raises(TrezorFailure) as e, client:
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.tools import H_, parse_path
|
from trezorlib.tools import H_, parse_path
|
||||||
|
|
||||||
from ..bip32 import deserialize
|
from ..bip32 import deserialize
|
||||||
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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Testnet")
|
TX_API = TxCache("Testnet")
|
||||||
|
|
||||||
TXHASH_20912f = bytes.fromhex(
|
TXHASH_20912f = bytes.fromhex(
|
||||||
@ -59,22 +59,22 @@ TXHASH_ec16dc = bytes.fromhex(
|
|||||||
|
|
||||||
|
|
||||||
def test_send_p2sh(client):
|
def test_send_p2sh(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_20912f,
|
prev_hash=TXHASH_20912f,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s",
|
address="tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX",
|
address="2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -82,10 +82,10 @@ def test_send_p2sh(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_20912f),
|
request_meta(TXHASH_20912f),
|
||||||
request_input(0, TXHASH_20912f),
|
request_input(0, TXHASH_20912f),
|
||||||
@ -109,22 +109,22 @@ def test_send_p2sh(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_p2sh_change(client):
|
def test_send_p2sh_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=123456789,
|
amount=123456789,
|
||||||
prev_hash=TXHASH_20912f,
|
prev_hash=TXHASH_20912f,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s",
|
address="tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
amount=123456789 - 11000 - 12300000,
|
amount=123456789 - 11000 - 12300000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -132,9 +132,9 @@ def test_send_p2sh_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_20912f),
|
request_meta(TXHASH_20912f),
|
||||||
request_input(0, TXHASH_20912f),
|
request_input(0, TXHASH_20912f),
|
||||||
@ -158,21 +158,21 @@ def test_send_p2sh_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_native(client):
|
def test_send_native(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
prev_hash=TXHASH_091446,
|
prev_hash=TXHASH_091446,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
||||||
amount=5000000,
|
amount=5000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu",
|
address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=12300000 - 11000 - 5000000,
|
amount=12300000 - 11000 - 5000000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -180,10 +180,10 @@ def test_send_native(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
@ -207,21 +207,21 @@ def test_send_native(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_to_taproot(client):
|
def test_send_to_taproot(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=10000,
|
amount=10000,
|
||||||
prev_hash=TXHASH_ec16dc,
|
prev_hash=TXHASH_ec16dc,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1pdvdljpj774356dpk32c2ks0yqv7q7c4f98px2d9e76s73vpudpxs7tl6vp",
|
address="tb1pdvdljpj774356dpk32c2ks0yqv7q7c4f98px2d9e76s73vpudpxs7tl6vp",
|
||||||
amount=7000,
|
amount=7000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="tb1qcc4ext5rsa8pzqa2m030jk670wmn5f649pu7sr",
|
address="tb1qcc4ext5rsa8pzqa2m030jk670wmn5f649pu7sr",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=10000 - 7000 - 200,
|
amount=10000 - 7000 - 200,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -236,21 +236,21 @@ def test_send_to_taproot(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_native_change(client):
|
def test_send_native_change(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
prev_hash=TXHASH_091446,
|
prev_hash=TXHASH_091446,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
||||||
amount=5000000,
|
amount=5000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("84'/1'/0'/1/0"),
|
address_n=parse_path("84'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
amount=12300000 - 11000 - 5000000,
|
amount=12300000 - 11000 - 5000000,
|
||||||
)
|
)
|
||||||
with client:
|
with client:
|
||||||
@ -258,9 +258,9 @@ def test_send_native_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
@ -284,37 +284,37 @@ def test_send_native_change(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_send_both(client):
|
def test_send_both(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/0'/1/0"),
|
address_n=parse_path("49'/1'/0'/1/0"),
|
||||||
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
# 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX
|
||||||
amount=111145789,
|
amount=111145789,
|
||||||
prev_hash=TXHASH_091446,
|
prev_hash=TXHASH_091446,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
)
|
)
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/1/0"),
|
address_n=parse_path("84'/1'/0'/1/0"),
|
||||||
amount=7289000,
|
amount=7289000,
|
||||||
prev_hash=TXHASH_65b811,
|
prev_hash=TXHASH_65b811,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc",
|
address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc",
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
# address_n=parse_path("44'/1'/0'/0/0"),
|
# address_n=parse_path("44'/1'/0'/0/0"),
|
||||||
# script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
# script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
address="2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc",
|
address="2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc",
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
amount=45600000,
|
amount=45600000,
|
||||||
)
|
)
|
||||||
out3 = proto.TxOutputType(
|
out3 = messages.TxOutputType(
|
||||||
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
|
address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q",
|
||||||
amount=111145789 + 7289000 - 11000 - 12300000 - 45600000,
|
amount=111145789 + 7289000 - 11000 - 12300000 - 45600000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -323,12 +323,12 @@ def test_send_both(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(2),
|
request_output(2),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
@ -365,26 +365,26 @@ def test_send_multisig_1(client):
|
|||||||
btc.get_public_node(client, parse_path(f"49'/1'/{index}'"), coin_name="Testnet")
|
btc.get_public_node(client, parse_path(f"49'/1'/{index}'"), coin_name="Testnet")
|
||||||
for index in range(1, 4)
|
for index in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=[deserialize(n.xpub) for n in nodes],
|
nodes=[deserialize(n.xpub) for n in nodes],
|
||||||
address_n=[0, 0],
|
address_n=[0, 0],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/1'/0/0"),
|
address_n=parse_path("49'/1'/1'/0/0"),
|
||||||
prev_hash=TXHASH_9c3192,
|
prev_hash=TXHASH_9c3192,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=1610436,
|
amount=1610436,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qch62pf820spe9mlq49ns5uexfnl6jzcezp7d328fw58lj0rhlhasge9hzy",
|
address="tb1qch62pf820spe9mlq49ns5uexfnl6jzcezp7d328fw58lj0rhlhasge9hzy",
|
||||||
amount=1605000,
|
amount=1605000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -392,8 +392,8 @@ def test_send_multisig_1(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_9c3192),
|
request_meta(TXHASH_9c3192),
|
||||||
request_input(0, TXHASH_9c3192),
|
request_input(0, TXHASH_9c3192),
|
||||||
@ -414,8 +414,8 @@ def test_send_multisig_1(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_9c3192),
|
request_meta(TXHASH_9c3192),
|
||||||
request_input(0, TXHASH_9c3192),
|
request_input(0, TXHASH_9c3192),
|
||||||
@ -443,26 +443,26 @@ def test_send_multisig_2(client):
|
|||||||
btc.get_public_node(client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet")
|
btc.get_public_node(client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet")
|
||||||
for index in range(1, 4)
|
for index in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=[deserialize(n.xpub) for n in nodes],
|
nodes=[deserialize(n.xpub) for n in nodes],
|
||||||
address_n=[0, 1],
|
address_n=[0, 1],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/2'/0/1"),
|
address_n=parse_path("84'/1'/2'/0/1"),
|
||||||
prev_hash=TXHASH_f41cbe,
|
prev_hash=TXHASH_f41cbe,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=1605000,
|
amount=1605000,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tb1qr6xa5v60zyt3ry9nmfew2fk5g9y3gerkjeu6xxdz7qga5kknz2ssld9z2z",
|
address="tb1qr6xa5v60zyt3ry9nmfew2fk5g9y3gerkjeu6xxdz7qga5kknz2ssld9z2z",
|
||||||
amount=1604000,
|
amount=1604000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -470,8 +470,8 @@ def test_send_multisig_2(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_f41cbe),
|
request_meta(TXHASH_f41cbe),
|
||||||
request_input(0, TXHASH_f41cbe),
|
request_input(0, TXHASH_f41cbe),
|
||||||
@ -491,8 +491,8 @@ def test_send_multisig_2(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_f41cbe),
|
request_meta(TXHASH_f41cbe),
|
||||||
request_input(0, TXHASH_f41cbe),
|
request_input(0, TXHASH_f41cbe),
|
||||||
@ -519,33 +519,33 @@ def test_send_multisig_3_change(client):
|
|||||||
btc.get_public_node(client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet")
|
btc.get_public_node(client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet")
|
||||||
for index in range(1, 4)
|
for index in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=[deserialize(n.xpub) for n in nodes],
|
nodes=[deserialize(n.xpub) for n in nodes],
|
||||||
address_n=[1, 0],
|
address_n=[1, 0],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
multisig2 = proto.MultisigRedeemScriptType(
|
multisig2 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[deserialize(n.xpub) for n in nodes],
|
nodes=[deserialize(n.xpub) for n in nodes],
|
||||||
address_n=[1, 1],
|
address_n=[1, 1],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/1'/1/0"),
|
address_n=parse_path("84'/1'/1'/1/0"),
|
||||||
prev_hash=TXHASH_c93480,
|
prev_hash=TXHASH_c93480,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=1604000,
|
amount=1604000,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("84'/1'/1'/1/1"),
|
address_n=parse_path("84'/1'/1'/1/1"),
|
||||||
amount=1603000,
|
amount=1603000,
|
||||||
multisig=multisig2,
|
multisig=multisig2,
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -553,7 +553,7 @@ def test_send_multisig_3_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_c93480),
|
request_meta(TXHASH_c93480),
|
||||||
request_input(0, TXHASH_c93480),
|
request_input(0, TXHASH_c93480),
|
||||||
@ -574,7 +574,7 @@ def test_send_multisig_3_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_c93480),
|
request_meta(TXHASH_c93480),
|
||||||
request_input(0, TXHASH_c93480),
|
request_input(0, TXHASH_c93480),
|
||||||
@ -601,33 +601,33 @@ def test_send_multisig_4_change(client):
|
|||||||
btc.get_public_node(client, parse_path(f"49'/1'/{index}'"), coin_name="Testnet")
|
btc.get_public_node(client, parse_path(f"49'/1'/{index}'"), coin_name="Testnet")
|
||||||
for index in range(1, 4)
|
for index in range(1, 4)
|
||||||
]
|
]
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=[deserialize(n.xpub) for n in nodes],
|
nodes=[deserialize(n.xpub) for n in nodes],
|
||||||
address_n=[1, 1],
|
address_n=[1, 1],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
multisig2 = proto.MultisigRedeemScriptType(
|
multisig2 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[deserialize(n.xpub) for n in nodes],
|
nodes=[deserialize(n.xpub) for n in nodes],
|
||||||
address_n=[1, 2],
|
address_n=[1, 2],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("49'/1'/1'/1/1"),
|
address_n=parse_path("49'/1'/1'/1/1"),
|
||||||
prev_hash=TXHASH_31bc1c,
|
prev_hash=TXHASH_31bc1c,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
amount=1603000,
|
amount=1603000,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("49'/1'/1'/1/2"),
|
address_n=parse_path("49'/1'/1'/1/2"),
|
||||||
amount=1602000,
|
amount=1602000,
|
||||||
multisig=multisig2,
|
multisig=multisig2,
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -635,7 +635,7 @@ def test_send_multisig_4_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_31bc1c),
|
request_meta(TXHASH_31bc1c),
|
||||||
request_input(0, TXHASH_31bc1c),
|
request_input(0, TXHASH_31bc1c),
|
||||||
@ -656,7 +656,7 @@ def test_send_multisig_4_change(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_31bc1c),
|
request_meta(TXHASH_31bc1c),
|
||||||
request_input(0, TXHASH_31bc1c),
|
request_input(0, TXHASH_31bc1c),
|
||||||
@ -691,40 +691,40 @@ def test_multisig_mismatch_inputs_single(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# tb1qpzmgzpcumztvmpu3q27wwdggqav26j9dgks92pvnne2lz9ferxgssmhzlq
|
# tb1qpzmgzpcumztvmpu3q27wwdggqav26j9dgks92pvnne2lz9ferxgssmhzlq
|
||||||
multisig_in = proto.MultisigRedeemScriptType(
|
multisig_in = messages.MultisigRedeemScriptType(
|
||||||
nodes=[node_int, node_ext], address_n=[0, 0], signatures=[b"", b""], m=1
|
nodes=[node_int, node_ext], address_n=[0, 0], signatures=[b"", b""], m=1
|
||||||
)
|
)
|
||||||
|
|
||||||
multisig_out = proto.MultisigRedeemScriptType(
|
multisig_out = messages.MultisigRedeemScriptType(
|
||||||
nodes=[node_int, node_ext], address_n=[1, 0], signatures=[b"", b""], m=1
|
nodes=[node_int, node_ext], address_n=[1, 0], signatures=[b"", b""], m=1
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
amount=12300000,
|
amount=12300000,
|
||||||
prev_hash=TXHASH_091446,
|
prev_hash=TXHASH_091446,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
address_n=parse_path("84'/1'/0'/0/0"),
|
address_n=parse_path("84'/1'/0'/0/0"),
|
||||||
prev_hash=TXHASH_a345b8,
|
prev_hash=TXHASH_a345b8,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDWITNESS,
|
script_type=messages.InputScriptType.SPENDWITNESS,
|
||||||
multisig=multisig_in,
|
multisig=multisig_in,
|
||||||
amount=100,
|
amount=100,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp",
|
||||||
amount=5000000,
|
amount=5000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("84'/1'/0'/1/0"),
|
address_n=parse_path("84'/1'/0'/1/0"),
|
||||||
script_type=proto.OutputScriptType.PAYTOWITNESS,
|
script_type=messages.OutputScriptType.PAYTOWITNESS,
|
||||||
multisig=multisig_out,
|
multisig=multisig_out,
|
||||||
amount=12300000 + 100 - 5000000 - 10000,
|
amount=12300000 + 100 - 5000000 - 10000,
|
||||||
)
|
)
|
||||||
@ -735,11 +735,11 @@ def test_multisig_mismatch_inputs_single(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
# Ensure that the multisig output is not identified as a change output.
|
# Ensure that the multisig output is not identified as a change output.
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_091446),
|
request_meta(TXHASH_091446),
|
||||||
request_input(0, TXHASH_091446),
|
request_input(0, TXHASH_091446),
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import parse_path
|
from trezorlib.tools import parse_path
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ from .signtx import (
|
|||||||
request_output,
|
request_output,
|
||||||
)
|
)
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Zcash Testnet")
|
TX_API = TxCache("Zcash Testnet")
|
||||||
|
|
||||||
TXHASH_aaf51e = bytes.fromhex(
|
TXHASH_aaf51e = bytes.fromhex(
|
||||||
@ -59,7 +59,7 @@ def test_v3_not_supported(client):
|
|||||||
# prevout: aaf51e4606c264e47e5c42c958fe4cf1539c5172684721e38e69f4ef634d75dc:1
|
# prevout: aaf51e4606c264e47e5c42c958fe4cf1539c5172684721e38e69f4ef634d75dc:1
|
||||||
# input 1: 3.0 TAZ
|
# input 1: 3.0 TAZ
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
||||||
address_n=parse_path("m/44h/1h/0h/0/0"),
|
address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
@ -67,10 +67,10 @@ def test_v3_not_supported(client):
|
|||||||
prev_index=1,
|
prev_index=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
||||||
amount=300000000 - 1940,
|
amount=300000000 - 1940,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client, pytest.raises(TrezorFailure, match="DataError"):
|
with client, pytest.raises(TrezorFailure, match="DataError"):
|
||||||
@ -90,7 +90,7 @@ def test_one_one_fee_sapling(client):
|
|||||||
# prevout: e3820602226974b1dd87b7113cc8aea8c63e5ae29293991e7bfa80c126930368:0
|
# prevout: e3820602226974b1dd87b7113cc8aea8c63e5ae29293991e7bfa80c126930368:0
|
||||||
# input 1: 3.0 TAZ
|
# input 1: 3.0 TAZ
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
||||||
address_n=parse_path("m/44h/1h/0h/0/0"),
|
address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
@ -98,10 +98,10 @@ def test_one_one_fee_sapling(client):
|
|||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
||||||
amount=300000000 - 1940,
|
amount=300000000 - 1940,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -109,8 +109,8 @@ def test_one_one_fee_sapling(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_e38206),
|
request_meta(TXHASH_e38206),
|
||||||
request_input(0, TXHASH_e38206),
|
request_input(0, TXHASH_e38206),
|
||||||
@ -143,17 +143,17 @@ def test_one_one_fee_sapling(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_version_group_id_missing(client):
|
def test_version_group_id_missing(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
||||||
address_n=parse_path("m/44h/1h/0h/0/0"),
|
address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
prev_hash=TXHASH_e38206,
|
prev_hash=TXHASH_e38206,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
||||||
amount=300000000 - 1940,
|
amount=300000000 - 1940,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(TrezorFailure, match="Version group ID must be set."):
|
with pytest.raises(TrezorFailure, match="Version group ID must be set."):
|
||||||
@ -169,25 +169,25 @@ def test_version_group_id_missing(client):
|
|||||||
|
|
||||||
def test_spend_old_versions(client):
|
def test_spend_old_versions(client):
|
||||||
# inputs are NOT OWNED by this seed
|
# inputs are NOT OWNED by this seed
|
||||||
input_v1 = proto.TxInputType(
|
input_v1 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44h/1h/0h/0/0"),
|
address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
amount=123000000,
|
amount=123000000,
|
||||||
prev_hash=TXHASH_v1,
|
prev_hash=TXHASH_v1,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
input_v2 = proto.TxInputType(
|
input_v2 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44h/1h/0h/0/1"),
|
address_n=parse_path("m/44h/1h/0h/0/1"),
|
||||||
amount=49990000,
|
amount=49990000,
|
||||||
prev_hash=TXHASH_v2,
|
prev_hash=TXHASH_v2,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
input_v3 = proto.TxInputType(
|
input_v3 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44h/1h/0h/0/2"),
|
address_n=parse_path("m/44h/1h/0h/0/2"),
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
prev_hash=TXHASH_v3,
|
prev_hash=TXHASH_v3,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
)
|
)
|
||||||
input_v4 = proto.TxInputType(
|
input_v4 = messages.TxInputType(
|
||||||
address_n=parse_path("m/44h/1h/0h/0/3"),
|
address_n=parse_path("m/44h/1h/0h/0/3"),
|
||||||
amount=100000,
|
amount=100000,
|
||||||
prev_hash=TXHASH_v4,
|
prev_hash=TXHASH_v4,
|
||||||
@ -200,10 +200,10 @@ def test_spend_old_versions(client):
|
|||||||
txdata = TX_API[txi.prev_hash]
|
txdata = TX_API[txi.prev_hash]
|
||||||
assert txdata.version == i
|
assert txdata.version == i
|
||||||
|
|
||||||
output = proto.TxOutputType(
|
output = messages.TxOutputType(
|
||||||
address="tmNvfeKR5PkcQazLEqddTskFr6Ev9tsovfQ",
|
address="tmNvfeKR5PkcQazLEqddTskFr6Ev9tsovfQ",
|
||||||
amount=sum(txi.amount for txi in inputs),
|
amount=sum(txi.amount for txi in inputs),
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -226,7 +226,7 @@ def test_spend_old_versions(client):
|
|||||||
|
|
||||||
@pytest.mark.skip_t1
|
@pytest.mark.skip_t1
|
||||||
def test_external_presigned(client):
|
def test_external_presigned(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
||||||
address_n=parse_path("m/44h/1h/0h/0/0"),
|
address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
@ -234,13 +234,13 @@ def test_external_presigned(client):
|
|||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
inp2 = proto.TxInputType(
|
inp2 = messages.TxInputType(
|
||||||
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
# tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu
|
||||||
# address_n=parse_path("m/44h/1h/0h/0/0"),
|
# address_n=parse_path("m/44h/1h/0h/0/0"),
|
||||||
amount=300000000,
|
amount=300000000,
|
||||||
prev_hash=TXHASH_aaf51e,
|
prev_hash=TXHASH_aaf51e,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.EXTERNAL,
|
script_type=messages.InputScriptType.EXTERNAL,
|
||||||
script_pubkey=bytes.fromhex(
|
script_pubkey=bytes.fromhex(
|
||||||
"76a914a579388225827d9f2fe9014add644487808c695d88ac"
|
"76a914a579388225827d9f2fe9014add644487808c695d88ac"
|
||||||
),
|
),
|
||||||
@ -249,10 +249,10 @@ def test_external_presigned(client):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z",
|
||||||
amount=300000000 + 300000000 - 1940,
|
amount=300000000 + 300000000 - 1940,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -261,8 +261,8 @@ def test_external_presigned(client):
|
|||||||
request_input(0),
|
request_input(0),
|
||||||
request_input(1),
|
request_input(1),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_e38206),
|
request_meta(TXHASH_e38206),
|
||||||
request_input(0, TXHASH_e38206),
|
request_input(0, TXHASH_e38206),
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
from trezorlib.exceptions import TrezorFailure
|
||||||
from trezorlib.tools import parse_path, tx_hash
|
from trezorlib.tools import parse_path, tx_hash
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ from ..common import MNEMONIC12
|
|||||||
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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Bitcoin")
|
TX_API = TxCache("Bitcoin")
|
||||||
|
|
||||||
TXHASH_c6091a = bytes.fromhex(
|
TXHASH_c6091a = bytes.fromhex(
|
||||||
@ -46,23 +46,23 @@ def test_2_of_3(client):
|
|||||||
for index in range(1, 4)
|
for index in range(1, 4)
|
||||||
]
|
]
|
||||||
|
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
nodes=nodes, address_n=[0, 0], signatures=[b"", b"", b""], m=2
|
||||||
)
|
)
|
||||||
# Let's go to sign with key 1
|
# Let's go to sign with key 1
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/0'/1'/0'/0/0"),
|
address_n=parse_path("48'/0'/1'/0'/0/0"),
|
||||||
amount=100000,
|
amount=100000,
|
||||||
prev_hash=TXHASH_c6091a,
|
prev_hash=TXHASH_c6091a,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="12iyMbUb4R2K3gre4dHSrbu5azG5KaqVss",
|
address="12iyMbUb4R2K3gre4dHSrbu5azG5KaqVss",
|
||||||
amount=100000,
|
amount=100000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -70,8 +70,8 @@ def test_2_of_3(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_c6091a),
|
request_meta(TXHASH_c6091a),
|
||||||
request_input(0, TXHASH_c6091a),
|
request_input(0, TXHASH_c6091a),
|
||||||
@ -97,7 +97,7 @@ def test_2_of_3(client):
|
|||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Let's do second signature using 3rd key
|
# Let's do second signature using 3rd key
|
||||||
|
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
nodes=nodes,
|
nodes=nodes,
|
||||||
address_n=[0, 0],
|
address_n=[0, 0],
|
||||||
signatures=[
|
signatures=[
|
||||||
@ -109,12 +109,12 @@ def test_2_of_3(client):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Let's do a second signature with key 3
|
# Let's do a second signature with key 3
|
||||||
inp3 = proto.TxInputType(
|
inp3 = messages.TxInputType(
|
||||||
address_n=parse_path("48'/0'/3'/0'/0/0"),
|
address_n=parse_path("48'/0'/3'/0'/0/0"),
|
||||||
amount=100000,
|
amount=100000,
|
||||||
prev_hash=TXHASH_c6091a,
|
prev_hash=TXHASH_c6091a,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -123,8 +123,8 @@ def test_2_of_3(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_c6091a),
|
request_meta(TXHASH_c6091a),
|
||||||
request_input(0, TXHASH_c6091a),
|
request_input(0, TXHASH_c6091a),
|
||||||
@ -156,27 +156,27 @@ def test_15_of_15(client):
|
|||||||
node = btc.get_public_node(
|
node = btc.get_public_node(
|
||||||
client, parse_path("48h/0h/1h/0h"), coin_name="Bitcoin"
|
client, parse_path("48h/0h/1h/0h"), coin_name="Bitcoin"
|
||||||
).node
|
).node
|
||||||
pubs = [proto.HDNodePathType(node=node, address_n=[0, x]) for x in range(15)]
|
pubs = [messages.HDNodePathType(node=node, address_n=[0, x]) for x in range(15)]
|
||||||
|
|
||||||
signatures = [b""] * 15
|
signatures = [b""] * 15
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="17kTB7qSk3MupQxWdiv5ZU3zcrZc2Azes1",
|
address="17kTB7qSk3MupQxWdiv5ZU3zcrZc2Azes1",
|
||||||
amount=10000,
|
amount=10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
for x in range(15):
|
for x in range(15):
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
pubkeys=pubs, signatures=signatures, m=15
|
pubkeys=pubs, signatures=signatures, m=15
|
||||||
)
|
)
|
||||||
|
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path(f"48h/0h/1h/0h/0/{x}"),
|
address_n=parse_path(f"48h/0h/1h/0h/0/{x}"),
|
||||||
amount=20000,
|
amount=20000,
|
||||||
prev_hash=TXHASH_6189e3,
|
prev_hash=TXHASH_6189e3,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -198,30 +198,30 @@ def test_missing_pubkey(client):
|
|||||||
client, parse_path("48h/0h/1h/0h/0"), coin_name="Bitcoin"
|
client, parse_path("48h/0h/1h/0h/0"), coin_name="Bitcoin"
|
||||||
).node
|
).node
|
||||||
|
|
||||||
multisig = proto.MultisigRedeemScriptType(
|
multisig = messages.MultisigRedeemScriptType(
|
||||||
pubkeys=[
|
pubkeys=[
|
||||||
proto.HDNodePathType(node=node, address_n=[1]),
|
messages.HDNodePathType(node=node, address_n=[1]),
|
||||||
proto.HDNodePathType(node=node, address_n=[2]),
|
messages.HDNodePathType(node=node, address_n=[2]),
|
||||||
proto.HDNodePathType(node=node, address_n=[3]),
|
messages.HDNodePathType(node=node, address_n=[3]),
|
||||||
],
|
],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Let's go to sign with key 10, which is NOT in pubkeys
|
# Let's go to sign with key 10, which is NOT in pubkeys
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("48h/0h/1h/0h/0/10"),
|
address_n=parse_path("48h/0h/1h/0h/0/10"),
|
||||||
amount=100000,
|
amount=100000,
|
||||||
prev_hash=TXHASH_c6091a,
|
prev_hash=TXHASH_c6091a,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig,
|
multisig=multisig,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="12iyMbUb4R2K3gre4dHSrbu5azG5KaqVss",
|
address="12iyMbUb4R2K3gre4dHSrbu5azG5KaqVss",
|
||||||
amount=100000,
|
amount=100000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(TrezorFailure) as exc:
|
with pytest.raises(TrezorFailure) as exc:
|
||||||
@ -245,19 +245,19 @@ def test_attack_change_input(client):
|
|||||||
"03653a148b68584acb97947344a7d4fd6a6f8b8485cad12987ff8edac874268088"
|
"03653a148b68584acb97947344a7d4fd6a6f8b8485cad12987ff8edac874268088"
|
||||||
)
|
)
|
||||||
|
|
||||||
input_real = proto.TxInputType(
|
input_real = messages.TxInputType(
|
||||||
address_n=address_n,
|
address_n=address_n,
|
||||||
prev_hash=TXHASH_fbbff7,
|
prev_hash=TXHASH_fbbff7,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDP2SHWITNESS,
|
script_type=messages.InputScriptType.SPENDP2SHWITNESS,
|
||||||
amount=1000000,
|
amount=1000000,
|
||||||
)
|
)
|
||||||
|
|
||||||
multisig_fake = proto.MultisigRedeemScriptType(
|
multisig_fake = messages.MultisigRedeemScriptType(
|
||||||
m=1,
|
m=1,
|
||||||
nodes=[
|
nodes=[
|
||||||
btc.get_public_node(client, address_n, coin_name="Testnet").node,
|
btc.get_public_node(client, address_n, coin_name="Testnet").node,
|
||||||
proto.HDNodeType(
|
messages.HDNodeType(
|
||||||
depth=0,
|
depth=0,
|
||||||
fingerprint=0,
|
fingerprint=0,
|
||||||
child_num=0,
|
child_num=0,
|
||||||
@ -268,7 +268,7 @@ def test_attack_change_input(client):
|
|||||||
address_n=[],
|
address_n=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
input_fake = proto.TxInputType(
|
input_fake = messages.TxInputType(
|
||||||
address_n=address_n,
|
address_n=address_n,
|
||||||
prev_hash=input_real.prev_hash,
|
prev_hash=input_real.prev_hash,
|
||||||
prev_index=input_real.prev_index,
|
prev_index=input_real.prev_index,
|
||||||
@ -277,16 +277,16 @@ def test_attack_change_input(client):
|
|||||||
amount=input_real.amount,
|
amount=input_real.amount,
|
||||||
)
|
)
|
||||||
|
|
||||||
output_payee = proto.TxOutputType(
|
output_payee = messages.TxOutputType(
|
||||||
address="n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi",
|
address="n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi",
|
||||||
amount=1000,
|
amount=1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
output_change = proto.TxOutputType(
|
output_change = messages.TxOutputType(
|
||||||
address_n=address_n,
|
address_n=address_n,
|
||||||
amount=input_real.amount - output_payee.amount - 1000,
|
amount=input_real.amount - output_payee.amount - 1000,
|
||||||
script_type=proto.OutputScriptType.PAYTOP2SHWITNESS,
|
script_type=messages.OutputScriptType.PAYTOP2SHWITNESS,
|
||||||
multisig=multisig_fake,
|
multisig=multisig_fake,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -301,14 +301,14 @@ def test_attack_change_input(client):
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
client.set_filter(proto.TxAck, attack_processor)
|
client.set_filter(messages.TxAck, attack_processor)
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_fbbff7),
|
request_meta(TXHASH_fbbff7),
|
||||||
request_input(0, TXHASH_fbbff7),
|
request_input(0, TXHASH_fbbff7),
|
||||||
@ -318,7 +318,7 @@ def test_attack_change_input(client):
|
|||||||
request_output(0),
|
request_output(0),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
proto.Failure(code=proto.FailureType.ProcessError),
|
messages.Failure(code=messages.FailureType.ProcessError),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -333,5 +333,5 @@ def test_attack_change_input(client):
|
|||||||
# must not produce this tx:
|
# must not produce this tx:
|
||||||
# 01000000000101396e2c107427f9eaece56a37539983adb8efd52b067c3d4567805fc8f3f7bffb01000000171600147a876a07b366f79000b441335f2907f777a0280bffffffff02e8030000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac703a0f000000000017a914a1261837f1b40e84346b1504ffe294e402965f2687024830450221009ff835e861be4e36ca1f2b6224aee2f253dfb9f456b13e4b1724bb4aaff4c9c802205e10679c2ead85743119f468cba5661f68b7da84dd2d477a7215fef98516f1f9012102af12ddd0d55e4fa2fcd084148eaf5b0b641320d0431d63d1e9a90f3cbd0d540700000000
|
# 01000000000101396e2c107427f9eaece56a37539983adb8efd52b067c3d4567805fc8f3f7bffb01000000171600147a876a07b366f79000b441335f2907f777a0280bffffffff02e8030000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac703a0f000000000017a914a1261837f1b40e84346b1504ffe294e402965f2687024830450221009ff835e861be4e36ca1f2b6224aee2f253dfb9f456b13e4b1724bb4aaff4c9c802205e10679c2ead85743119f468cba5661f68b7da84dd2d477a7215fef98516f1f9012102af12ddd0d55e4fa2fcd084148eaf5b0b641320d0431d63d1e9a90f3cbd0d540700000000
|
||||||
|
|
||||||
assert exc.value.code == proto.FailureType.ProcessError
|
assert exc.value.code == messages.FailureType.ProcessError
|
||||||
assert exc.value.message.endswith("Transaction has changed during signing")
|
assert exc.value.message.endswith("Transaction has changed during signing")
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.tools import H_, parse_path
|
from trezorlib.tools import H_, parse_path
|
||||||
|
|
||||||
from .. import bip32
|
from .. import bip32
|
||||||
@ -24,7 +24,7 @@ from ..common import MNEMONIC12
|
|||||||
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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Testnet")
|
TX_API = TxCache("Testnet")
|
||||||
# NOTE: This test case was migrated from Testnet to Bitcoin, because we
|
# NOTE: This test case was migrated from Testnet to Bitcoin, because we
|
||||||
# disabled testnet for BIP-45 paths. So we are still using the Testnet TxCache
|
# disabled testnet for BIP-45 paths. So we are still using the Testnet TxCache
|
||||||
@ -85,21 +85,21 @@ NODE_INT = bip32.deserialize(
|
|||||||
# tx: b0946dc27ba308a749b11afecc2018980af18f79e89ad6b080b58220d856f739
|
# tx: b0946dc27ba308a749b11afecc2018980af18f79e89ad6b080b58220d856f739
|
||||||
# input 1: 0.555 BTC
|
# input 1: 0.555 BTC
|
||||||
|
|
||||||
multisig_in1 = proto.MultisigRedeemScriptType(
|
multisig_in1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT2, NODE_EXT1, NODE_INT],
|
nodes=[NODE_EXT2, NODE_EXT1, NODE_INT],
|
||||||
address_n=[0, 0],
|
address_n=[0, 0],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
multisig_in2 = proto.MultisigRedeemScriptType(
|
multisig_in2 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT1, NODE_EXT2, NODE_INT],
|
nodes=[NODE_EXT1, NODE_EXT2, NODE_INT],
|
||||||
address_n=[0, 1],
|
address_n=[0, 1],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
multisig_in3 = proto.MultisigRedeemScriptType(
|
multisig_in3 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT1, NODE_EXT3, NODE_INT],
|
nodes=[NODE_EXT1, NODE_EXT3, NODE_INT],
|
||||||
address_n=[0, 1],
|
address_n=[0, 1],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
@ -107,32 +107,32 @@ multisig_in3 = proto.MultisigRedeemScriptType(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 2N9W4z9AhAPaHghtqVQPbaTAGHdbrhKeBQw
|
# 2N9W4z9AhAPaHghtqVQPbaTAGHdbrhKeBQw
|
||||||
INP1 = proto.TxInputType(
|
INP1 = messages.TxInputType(
|
||||||
address_n=[H_(45), 0, 0, 0],
|
address_n=[H_(45), 0, 0, 0],
|
||||||
amount=50000000,
|
amount=50000000,
|
||||||
prev_hash=TXHASH_16c6c8,
|
prev_hash=TXHASH_16c6c8,
|
||||||
prev_index=1,
|
prev_index=1,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig_in1,
|
multisig=multisig_in1,
|
||||||
)
|
)
|
||||||
|
|
||||||
# 2NDBG6QXQLtnQ3jRGkrqo53BiCeXfQXLdj4
|
# 2NDBG6QXQLtnQ3jRGkrqo53BiCeXfQXLdj4
|
||||||
INP2 = proto.TxInputType(
|
INP2 = messages.TxInputType(
|
||||||
address_n=[H_(45), 0, 0, 1],
|
address_n=[H_(45), 0, 0, 1],
|
||||||
amount=34500000,
|
amount=34500000,
|
||||||
prev_hash=TXHASH_d80c34,
|
prev_hash=TXHASH_d80c34,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig_in2,
|
multisig=multisig_in2,
|
||||||
)
|
)
|
||||||
|
|
||||||
# 2MvwPWfp2XPU3S1cMwgEMKBPUw38VP5SBE4
|
# 2MvwPWfp2XPU3S1cMwgEMKBPUw38VP5SBE4
|
||||||
INP3 = proto.TxInputType(
|
INP3 = messages.TxInputType(
|
||||||
address_n=[H_(45), 0, 0, 1],
|
address_n=[H_(45), 0, 0, 1],
|
||||||
amount=55500000,
|
amount=55500000,
|
||||||
prev_hash=TXHASH_b0946d,
|
prev_hash=TXHASH_b0946d,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
script_type=proto.InputScriptType.SPENDMULTISIG,
|
script_type=messages.InputScriptType.SPENDMULTISIG,
|
||||||
multisig=multisig_in3,
|
multisig=multisig_in3,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -143,12 +143,12 @@ def _responses(INP1, INP2, change=0):
|
|||||||
request_output(0),
|
request_output(0),
|
||||||
]
|
]
|
||||||
if change != 1:
|
if change != 1:
|
||||||
resp.append(proto.ButtonRequest(code=B.ConfirmOutput))
|
resp.append(messages.ButtonRequest(code=B.ConfirmOutput))
|
||||||
resp.append(request_output(1))
|
resp.append(request_output(1))
|
||||||
if change != 2:
|
if change != 2:
|
||||||
resp.append(proto.ButtonRequest(code=B.ConfirmOutput))
|
resp.append(messages.ButtonRequest(code=B.ConfirmOutput))
|
||||||
resp += [
|
resp += [
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(INP1.prev_hash),
|
request_meta(INP1.prev_hash),
|
||||||
request_input(0, INP1.prev_hash),
|
request_input(0, INP1.prev_hash),
|
||||||
@ -176,16 +176,16 @@ def _responses(INP1, INP2, change=0):
|
|||||||
|
|
||||||
# both outputs are external
|
# both outputs are external
|
||||||
def test_external_external(client):
|
def test_external_external(client):
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="1F8yBZB2NZhPZvJekhjTwjhQRRvQeTjjXr",
|
address="1F8yBZB2NZhPZvJekhjTwjhQRRvQeTjjXr",
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="1H7uXJQTVwXca2BXF2opTrvuZapk8Cm8zY",
|
address="1H7uXJQTVwXca2BXF2opTrvuZapk8Cm8zY",
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -206,16 +206,16 @@ def test_external_external(client):
|
|||||||
|
|
||||||
# first external, second internal
|
# first external, second internal
|
||||||
def test_external_internal(client):
|
def test_external_internal(client):
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="1F8yBZB2NZhPZvJekhjTwjhQRRvQeTjjXr",
|
address="1F8yBZB2NZhPZvJekhjTwjhQRRvQeTjjXr",
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=parse_path("45'/0/1/1"),
|
address_n=parse_path("45'/0/1/1"),
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -238,16 +238,16 @@ def test_external_internal(client):
|
|||||||
|
|
||||||
# first internal, second external
|
# first internal, second external
|
||||||
def test_internal_external(client):
|
def test_internal_external(client):
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("45'/0/1/0"),
|
address_n=parse_path("45'/0/1/0"),
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="1H7uXJQTVwXca2BXF2opTrvuZapk8Cm8zY",
|
address="1H7uXJQTVwXca2BXF2opTrvuZapk8Cm8zY",
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -270,16 +270,16 @@ def test_internal_external(client):
|
|||||||
|
|
||||||
# both outputs are external
|
# both outputs are external
|
||||||
def test_multisig_external_external(client):
|
def test_multisig_external_external(client):
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt",
|
address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt",
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg",
|
address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg",
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -300,24 +300,24 @@ def test_multisig_external_external(client):
|
|||||||
|
|
||||||
# inputs match, change matches (first is change)
|
# inputs match, change matches (first is change)
|
||||||
def test_multisig_change_match_first(client):
|
def test_multisig_change_match_first(client):
|
||||||
multisig_out1 = proto.MultisigRedeemScriptType(
|
multisig_out1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT2, NODE_EXT1, NODE_INT],
|
nodes=[NODE_EXT2, NODE_EXT1, NODE_INT],
|
||||||
address_n=[1, 0],
|
address_n=[1, 0],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=[H_(45), 0, 1, 0],
|
address_n=[H_(45), 0, 1, 0],
|
||||||
multisig=multisig_out1,
|
multisig=multisig_out1,
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg",
|
address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg",
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -340,24 +340,24 @@ def test_multisig_change_match_first(client):
|
|||||||
|
|
||||||
# inputs match, change matches (second is change)
|
# inputs match, change matches (second is change)
|
||||||
def test_multisig_change_match_second(client):
|
def test_multisig_change_match_second(client):
|
||||||
multisig_out2 = proto.MultisigRedeemScriptType(
|
multisig_out2 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT1, NODE_EXT2, NODE_INT],
|
nodes=[NODE_EXT1, NODE_EXT2, NODE_INT],
|
||||||
address_n=[1, 1],
|
address_n=[1, 1],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt",
|
address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt",
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=[H_(45), 0, 1, 1],
|
address_n=[H_(45), 0, 1, 1],
|
||||||
multisig=multisig_out2,
|
multisig=multisig_out2,
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -380,24 +380,24 @@ def test_multisig_change_match_second(client):
|
|||||||
|
|
||||||
# inputs match, change mismatches (second tries to be change but isn't)
|
# inputs match, change mismatches (second tries to be change but isn't)
|
||||||
def test_multisig_mismatch_change(client):
|
def test_multisig_mismatch_change(client):
|
||||||
multisig_out2 = proto.MultisigRedeemScriptType(
|
multisig_out2 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT1, NODE_INT, NODE_EXT3],
|
nodes=[NODE_EXT1, NODE_INT, NODE_EXT3],
|
||||||
address_n=[1, 0],
|
address_n=[1, 0],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt",
|
address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt",
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address_n=[H_(45), 0, 1, 0],
|
address_n=[H_(45), 0, 1, 0],
|
||||||
multisig=multisig_out2,
|
multisig=multisig_out2,
|
||||||
amount=44000000,
|
amount=44000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -418,24 +418,24 @@ def test_multisig_mismatch_change(client):
|
|||||||
|
|
||||||
# inputs mismatch, change matches with first input
|
# inputs mismatch, change matches with first input
|
||||||
def test_multisig_mismatch_inputs(client):
|
def test_multisig_mismatch_inputs(client):
|
||||||
multisig_out1 = proto.MultisigRedeemScriptType(
|
multisig_out1 = messages.MultisigRedeemScriptType(
|
||||||
nodes=[NODE_EXT2, NODE_EXT1, NODE_INT],
|
nodes=[NODE_EXT2, NODE_EXT1, NODE_INT],
|
||||||
address_n=[1, 0],
|
address_n=[1, 0],
|
||||||
signatures=[b"", b"", b""],
|
signatures=[b"", b"", b""],
|
||||||
m=2,
|
m=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=[H_(45), 0, 1, 0],
|
address_n=[H_(45), 0, 1, 0],
|
||||||
multisig=multisig_out1,
|
multisig=multisig_out1,
|
||||||
amount=40000000,
|
amount=40000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOMULTISIG,
|
script_type=messages.OutputScriptType.PAYTOMULTISIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg",
|
address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg",
|
||||||
amount=65000000,
|
amount=65000000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from trezorlib import btc, messages as proto
|
from trezorlib import btc, messages
|
||||||
from trezorlib.exceptions import TrezorFailure
|
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
|
||||||
|
|
||||||
B = proto.ButtonRequestType
|
B = messages.ButtonRequestType
|
||||||
TX_API = TxCache("Bitcoin")
|
TX_API = TxCache("Bitcoin")
|
||||||
|
|
||||||
TXHASH_d5f65e = bytes.fromhex(
|
TXHASH_d5f65e = bytes.fromhex(
|
||||||
@ -32,23 +32,23 @@ TXHASH_d5f65e = bytes.fromhex(
|
|||||||
|
|
||||||
|
|
||||||
def test_opreturn(client):
|
def test_opreturn(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/0'/0'/0/2"),
|
address_n=parse_path("44'/0'/0'/0/2"),
|
||||||
amount=390000,
|
amount=390000,
|
||||||
prev_hash=TXHASH_d5f65e,
|
prev_hash=TXHASH_d5f65e,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1",
|
address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1",
|
||||||
amount=390000 - 10000,
|
amount=390000 - 10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOADDRESS,
|
script_type=messages.OutputScriptType.PAYTOADDRESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
out2 = proto.TxOutputType(
|
out2 = messages.TxOutputType(
|
||||||
op_return_data=b"test of the op_return data",
|
op_return_data=b"test of the op_return data",
|
||||||
amount=0,
|
amount=0,
|
||||||
script_type=proto.OutputScriptType.PAYTOOPRETURN,
|
script_type=messages.OutputScriptType.PAYTOOPRETURN,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
@ -56,10 +56,10 @@ def test_opreturn(client):
|
|||||||
[
|
[
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_output(0),
|
request_output(0),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
request_output(1),
|
request_output(1),
|
||||||
proto.ButtonRequest(code=B.ConfirmOutput),
|
messages.ButtonRequest(code=B.ConfirmOutput),
|
||||||
proto.ButtonRequest(code=B.SignTx),
|
messages.ButtonRequest(code=B.SignTx),
|
||||||
request_input(0),
|
request_input(0),
|
||||||
request_meta(TXHASH_d5f65e),
|
request_meta(TXHASH_d5f65e),
|
||||||
request_input(0, TXHASH_d5f65e),
|
request_input(0, TXHASH_d5f65e),
|
||||||
@ -84,22 +84,22 @@ def test_opreturn(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_nonzero_opreturn(client):
|
def test_nonzero_opreturn(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/0'/10'/0/5"),
|
address_n=parse_path("44'/0'/10'/0/5"),
|
||||||
amount=390000,
|
amount=390000,
|
||||||
prev_hash=TXHASH_d5f65e,
|
prev_hash=TXHASH_d5f65e,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
op_return_data=b"test of the op_return data",
|
op_return_data=b"test of the op_return data",
|
||||||
amount=10000,
|
amount=10000,
|
||||||
script_type=proto.OutputScriptType.PAYTOOPRETURN,
|
script_type=messages.OutputScriptType.PAYTOOPRETURN,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[request_input(0), request_output(0), proto.Failure()]
|
[request_input(0), request_output(0), messages.Failure()]
|
||||||
)
|
)
|
||||||
|
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
@ -109,23 +109,23 @@ def test_nonzero_opreturn(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_opreturn_address(client):
|
def test_opreturn_address(client):
|
||||||
inp1 = proto.TxInputType(
|
inp1 = messages.TxInputType(
|
||||||
address_n=parse_path("44'/0'/0'/0/2"),
|
address_n=parse_path("44'/0'/0'/0/2"),
|
||||||
amount=390000,
|
amount=390000,
|
||||||
prev_hash=TXHASH_d5f65e,
|
prev_hash=TXHASH_d5f65e,
|
||||||
prev_index=0,
|
prev_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
out1 = proto.TxOutputType(
|
out1 = messages.TxOutputType(
|
||||||
address_n=parse_path("44'/0'/0'/1/2"),
|
address_n=parse_path("44'/0'/0'/1/2"),
|
||||||
amount=0,
|
amount=0,
|
||||||
op_return_data=b"OMNI TRANSACTION GOES HERE",
|
op_return_data=b"OMNI TRANSACTION GOES HERE",
|
||||||
script_type=proto.OutputScriptType.PAYTOOPRETURN,
|
script_type=messages.OutputScriptType.PAYTOOPRETURN,
|
||||||
)
|
)
|
||||||
|
|
||||||
with client:
|
with client:
|
||||||
client.set_expected_responses(
|
client.set_expected_responses(
|
||||||
[request_input(0), request_output(0), proto.Failure()]
|
[request_input(0), request_output(0), messages.Failure()]
|
||||||
)
|
)
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
TrezorFailure, match="Output's address_n provided but not expected."
|
TrezorFailure, match="Output's address_n provided but not expected."
|
||||||
|
Loading…
Reference in New Issue
Block a user