-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathtest_batch_transfer_builder.py
More file actions
110 lines (86 loc) · 3.78 KB
/
Copy pathtest_batch_transfer_builder.py
File metadata and controls
110 lines (86 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import pytest
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.batch_transfer_builder import (
BatchTransferBuilder,
)
RECIPIENT_A = '0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22'
RECIPIENT_B = '0xc3bbe9b1cee1ff85ad72b87414b0e9b7f2366763'
TOKEN_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7'
def test_it_should_default_to_the_batch_transfer_contract():
builder = BatchTransferBuilder.new()
assert builder.transaction.data['to'] == ContractAddresses.BATCH_TRANSFER.value
def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('transactions/batch-transfer')
builder = (
BatchTransferBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.gas_limit(fixture['data']['gasLimit'])
.nonce(fixture['data']['nonce'])
.token_address(TOKEN_ADDRESS)
.add_recipient(RECIPIENT_A, 100000)
.add_recipient(RECIPIENT_B, 200000)
.sign(passphrase)
)
assert builder.transaction.data['gasPrice'] == int(fixture['data']['gasPrice'])
assert builder.transaction.data['gasLimit'] == int(fixture['data']['gasLimit'])
assert builder.transaction.data['nonce'] == fixture['data']['nonce']
assert builder.transaction.data['value'] == 0
assert builder.transaction.data['to'] == fixture['data']['to']
assert builder.transaction.data['data'] == fixture['data']['data']
assert builder.transaction.data['v'] == fixture['data']['v']
assert builder.transaction.data['r'] == fixture['data']['r']
assert builder.transaction.data['s'] == fixture['data']['s']
assert builder.transaction.data['hash'] == fixture['data']['hash']
assert builder.transaction.serialize().hex() == fixture['serialized']
assert builder.verify()
def test_it_should_handle_single_recipient(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('transactions/batch-transfer')
builder = (
BatchTransferBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.gas_limit(fixture['data']['gasLimit'])
.nonce(fixture['data']['nonce'])
.token_address(TOKEN_ADDRESS)
.add_recipient(RECIPIENT_A, 100000)
.sign(passphrase)
)
assert builder.transaction.data['data'].startswith('4885b254')
assert builder.transaction.data['value'] == 0
assert builder.verify()
def test_it_should_encode_large_amounts(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('transactions/batch-transfer')
builder = (
BatchTransferBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.gas_limit(fixture['data']['gasLimit'])
.nonce(fixture['data']['nonce'])
.token_address(TOKEN_ADDRESS)
.add_recipient(RECIPIENT_A, 1000000000000000000000)
.sign(passphrase)
)
assert builder.verify()
def test_it_should_throw_when_signing_with_no_recipients(passphrase):
builder = (
BatchTransferBuilder
.new()
.gas_price('5000000000')
.gas_limit('21000')
.nonce('1')
.token_address(TOKEN_ADDRESS)
)
with pytest.raises(Exception, match='Must add at least one recipient before encoding.'):
builder.sign(passphrase)
def test_it_should_throw_when_signing_without_a_token_address(passphrase):
builder = (
BatchTransferBuilder
.new()
.gas_price('5000000000')
.gas_limit('21000')
.nonce('1')
.add_recipient(RECIPIENT_A, 100000)
)
with pytest.raises(Exception, match='Must set tokenAddress before encoding.'):
builder.sign(passphrase)