mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-27 09:58:27 +00:00
e073e619c9
isort set to skip the first necessary "from common import *" line. A better solution would be to get rid of the need of this import in the future. [no changelog]
211 lines
6.3 KiB
Python
211 lines
6.3 KiB
Python
from common import * # isort:skip
|
|
|
|
from trezor.crypto import hashlib
|
|
|
|
if not utils.BITCOIN_ONLY:
|
|
from trezor.messages import NEMMosaic, NEMSignTx, NEMTransactionCommon, NEMTransfer
|
|
|
|
from apps.nem.helpers import *
|
|
from apps.nem.mosaic import *
|
|
from apps.nem.transfer import *
|
|
from apps.nem.transfer.serialize import *
|
|
|
|
|
|
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
|
|
class TestNemTransfer(unittest.TestCase):
|
|
def test_create_transfer(self):
|
|
|
|
# http://bob.nem.ninja:8765/#/transfer/0acbf8df91e6a65dc56c56c43d65f31ff2a6a48d06fc66e78c7f3436faf3e74f
|
|
m = _create_msg(
|
|
NEM_NETWORK_TESTNET,
|
|
0,
|
|
0,
|
|
0,
|
|
"TBGIMRE4SBFRUJXMH7DVF2IBY36L2EDWZ37GVSC4",
|
|
50000000000000,
|
|
)
|
|
|
|
t = serialize_transfer(
|
|
m.transaction,
|
|
m.transfer,
|
|
unhexlify(
|
|
"e59ef184a612d4c3c4d89b5950eb57262c69862b2f96e59c5043bf41765c482f"
|
|
),
|
|
None,
|
|
False,
|
|
)
|
|
self.assertEqual(
|
|
t,
|
|
unhexlify(
|
|
"01010000010000980000000020000000e59ef184a612d4c3c4d89b5950eb57262c69862b2f96e59c5043bf41765c482f00000000000000000000000028000000544247494d52453453424652554a584d48374456463249425933364c324544575a3337475653433400203d88792d000000000000"
|
|
),
|
|
)
|
|
self.assertEqual(
|
|
hashlib.sha3_256(t, keccak=True).digest(),
|
|
unhexlify(
|
|
"0acbf8df91e6a65dc56c56c43d65f31ff2a6a48d06fc66e78c7f3436faf3e74f"
|
|
),
|
|
)
|
|
|
|
def test_create_transfer_with_payload(self):
|
|
|
|
# http://chain.nem.ninja/#/transfer/e90e98614c7598fbfa4db5411db1b331d157c2f86b558fb7c943d013ed9f71cb
|
|
m = _create_msg(
|
|
NEM_NETWORK_MAINNET,
|
|
0,
|
|
0,
|
|
0,
|
|
"NBT3WHA2YXG2IR4PWKFFMO772JWOITTD2V4PECSB",
|
|
5175000000000,
|
|
)
|
|
|
|
t = serialize_transfer(
|
|
m.transaction,
|
|
m.transfer,
|
|
unhexlify(
|
|
"8d07f90fb4bbe7715fa327c926770166a11be2e494a970605f2e12557f66c9b9"
|
|
),
|
|
bytearray("Good luck!"),
|
|
False,
|
|
)
|
|
self.assertEqual(
|
|
hashlib.sha3_256(t, keccak=True).digest(),
|
|
unhexlify(
|
|
"e90e98614c7598fbfa4db5411db1b331d157c2f86b558fb7c943d013ed9f71cb"
|
|
),
|
|
)
|
|
|
|
def test_create_transfer_with_encrypted_payload(self):
|
|
|
|
# http://chain.nem.ninja/#/transfer/40e89160e6f83d37f7c82defc0afe2c1605ae8c919134570a51dd27ea1bb516c
|
|
m = _create_msg(
|
|
NEM_NETWORK_MAINNET,
|
|
77229,
|
|
30000000,
|
|
80829,
|
|
"NALICEPFLZQRZGPRIJTMJOCPWDNECXTNNG7QLSG3",
|
|
30000000,
|
|
)
|
|
|
|
t = serialize_transfer(
|
|
m.transaction,
|
|
m.transfer,
|
|
unhexlify(
|
|
"f85ab43dad059b9d2331ddacc384ad925d3467f03207182e01296bacfb242d01"
|
|
),
|
|
unhexlify(
|
|
"4d9dcf9186967d30be93d6d5404ded22812dbbae7c3f0de501bcd7228cba45bded13000eec7b4c6215fc4d3588168c9218167cec98e6977359153a4132e050f594548e61e0dc61c153f0f53c5e65c595239c9eb7c4e7d48e0f4bb8b1dd2f5ddc"
|
|
),
|
|
True,
|
|
)
|
|
self.assertEqual(
|
|
hashlib.sha3_256(t, keccak=True).digest(),
|
|
unhexlify(
|
|
"40e89160e6f83d37f7c82defc0afe2c1605ae8c919134570a51dd27ea1bb516c"
|
|
),
|
|
)
|
|
|
|
def test_create_transfer_with_mosaic(self):
|
|
|
|
# http://bob.nem.ninja:8765/#/transfer/3409d9ece28d6296d6d5e220a7e3cb8641a3fb235ffcbd20c95da64f003ace6c
|
|
m = _create_msg(
|
|
NEM_NETWORK_TESTNET,
|
|
14072100,
|
|
194000000,
|
|
14075700,
|
|
"TBLOODPLWOWMZ2TARX4RFPOSOWLULHXMROBN2WXI",
|
|
3000000,
|
|
2,
|
|
)
|
|
|
|
t = serialize_transfer(
|
|
m.transaction,
|
|
m.transfer,
|
|
unhexlify(
|
|
"994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd324"
|
|
),
|
|
bytearray("sending you 3 pairs of paddles\n"),
|
|
False,
|
|
)
|
|
|
|
self.assertEqual(
|
|
t,
|
|
unhexlify(
|
|
"010100000200009824b9d60020000000994793ba1c789fa9bdea918afc9b06e2d0309beb1081ac5b6952991e4defd3248034900b0000000034c7d6002800000054424c4f4f44504c574f574d5a3254415258345246504f534f574c554c48584d524f424e32575849c0c62d000000000027000000010000001f00000073656e64696e6720796f752033207061697273206f6620706164646c65730a02000000"
|
|
),
|
|
)
|
|
|
|
serialize_mosaic(t, "gimre.games.pong", "paddles", 2)
|
|
serialize_mosaic(t, "nem", "xem", 44000000)
|
|
|
|
self.assertEqual(
|
|
hashlib.sha3_256(t, keccak=True).digest(),
|
|
unhexlify(
|
|
"3409d9ece28d6296d6d5e220a7e3cb8641a3fb235ffcbd20c95da64f003ace6c"
|
|
),
|
|
)
|
|
|
|
# http://chain.nem.ninja/#/transfer/882dca18dcbe075e15e0ec5a1d7e6ccd69cc0f1309ffd3fde227bfbc107b3f6e
|
|
m = _create_msg(
|
|
NEM_NETWORK_MAINNET,
|
|
26730750,
|
|
179500000,
|
|
26734350,
|
|
"NBE223WPKEBHQPCYUC4U4CDUQCRRFMPZLOQLB5OP",
|
|
1000000,
|
|
1,
|
|
)
|
|
|
|
t = serialize_transfer(
|
|
m.transaction,
|
|
m.transfer,
|
|
unhexlify(
|
|
"f85ab43dad059b9d2331ddacc384ad925d3467f03207182e01296bacfb242d01"
|
|
),
|
|
bytearray("enjoy! :)"),
|
|
False,
|
|
)
|
|
serialize_mosaic(t, "imre.g", "tokens", 1)
|
|
|
|
self.assertEqual(
|
|
hashlib.sha3_256(t, keccak=True).digest(),
|
|
unhexlify(
|
|
"882dca18dcbe075e15e0ec5a1d7e6ccd69cc0f1309ffd3fde227bfbc107b3f6e"
|
|
),
|
|
)
|
|
|
|
|
|
def _create_msg(
|
|
network: int,
|
|
timestamp: int,
|
|
fee: int,
|
|
deadline: int,
|
|
recipient: str,
|
|
amount: int,
|
|
mosaics: int = 0,
|
|
):
|
|
transaction = NEMTransactionCommon(
|
|
network=network,
|
|
timestamp=timestamp,
|
|
fee=fee,
|
|
deadline=deadline,
|
|
)
|
|
|
|
transfer = NEMTransfer(
|
|
recipient=recipient,
|
|
amount=amount,
|
|
mosaics=[
|
|
NEMMosaic(namespace="abc", quantity=5, mosaic="mosaic")
|
|
for _ in range(mosaics)
|
|
],
|
|
)
|
|
|
|
return NEMSignTx(
|
|
transaction=transaction,
|
|
transfer=transfer,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|