Skip to content

Commit 4cb126b

Browse files
authored
refactor: unit converter parse as int (#154)
1 parent 9f86cbc commit 4cb126b

12 files changed

Lines changed: 73 additions & 50 deletions

crypto/transactions/builder/base.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from typing import Optional
2-
32
from crypto.configuration.network import get_network
43
from crypto.identity.private_key import PrivateKey
54
from crypto.transactions.types.abstract_transaction import AbstractTransaction
@@ -8,7 +7,7 @@
87
class AbstractTransactionBuilder:
98
def __init__(self, data: Optional[dict] = None):
109
default_data = {
11-
'value': '0',
10+
'value': 0,
1211
'senderPublicKey': '',
1312
'gasPrice': '5',
1413
'nonce': '1',
@@ -26,15 +25,15 @@ def new(cls, data: Optional[dict] = None):
2625
return cls(data)
2726

2827
def gas_limit(self, gas_limit: int):
29-
self.transaction.data['gasLimit'] = gas_limit
28+
self.transaction.data['gasLimit'] = int(gas_limit)
3029
return self
3130

3231
def recipient_address(self, recipient_address: str):
3332
self.transaction.data['recipientAddress'] = recipient_address
3433
return self
3534

3635
def gas_price(self, gas_price: int):
37-
self.transaction.data['gasPrice'] = gas_price
36+
self.transaction.data['gasPrice'] = int(gas_price)
3837
return self
3938

4039
def nonce(self, nonce: str):

crypto/transactions/builder/transfer_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44

55
class TransferBuilder(AbstractTransactionBuilder):
6-
def value(self, value: str):
7-
self.transaction.data['value'] = value
6+
def value(self, value: int):
7+
self.transaction.data['value'] = int(value)
88
self.transaction.refresh_payload_data()
99
return self
1010

crypto/utils/unit_converter.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ class UnitConverter:
88
ARK_MULTIPLIER = '1000000000000000000' # 1e18
99

1010
@staticmethod
11-
def parse_units(value: Union[float, int, str, Decimal], unit='ark') -> str:
11+
def parse_units(value: Union[float, int, str, Decimal], unit='ark') -> int:
1212
value = Decimal(str(value))
1313

1414
unit = unit.lower()
1515
if unit == 'wei':
16-
return format((value * Decimal(UnitConverter.WEI_MULTIPLIER)).normalize(), 'f')
16+
return int((value * Decimal(UnitConverter.WEI_MULTIPLIER)).normalize())
1717

1818
if unit == 'gwei':
19-
return format((value * Decimal(UnitConverter.GWEI_MULTIPLIER)).normalize(), 'f')
19+
return int((value * Decimal(UnitConverter.GWEI_MULTIPLIER)).normalize())
2020

2121
if unit == 'ark':
22-
return format((value * Decimal(UnitConverter.ARK_MULTIPLIER)).normalize(), 'f')
22+
return int((value * Decimal(UnitConverter.ARK_MULTIPLIER)).normalize())
2323

2424
raise ValueError(f"Unsupported unit: {unit}. Supported units are 'wei', 'gwei', and 'ark'.")
2525

tests/transactions/builder/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@ def username():
1717
"""Username used for tests"""
1818

1919
return 'fixture'
20+
21+
@pytest.fixture
22+
def address():
23+
"""Address used for tests"""
24+
25+
return '0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22'

tests/transactions/builder/test_evm_call_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_evm_call_transaction(passphrase, load_transaction_fixture):
1919
assert builder.transaction.data['network'] == fixture['data']['network']
2020
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
2121
assert builder.transaction.data['recipientAddress'].lower() == fixture['data']['recipientAddress'].lower()
22-
assert builder.transaction.data['value'] == fixture['data']['value']
22+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
2323
assert builder.transaction.data['v'] == fixture['data']['v']
2424
assert builder.transaction.data['r'] == fixture['data']['r']
2525
assert builder.transaction.data['s'] == fixture['data']['s']

tests/transactions/builder/test_transfer_builder.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from crypto.transactions.builder.transfer_builder import TransferBuilder
2+
from crypto.utils.unit_converter import UnitConverter
23

34
def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixture):
45
fixture = load_transaction_fixture('transfer')
@@ -19,11 +20,29 @@ def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixtur
1920
assert builder.transaction.data['network'] == fixture['data']['network']
2021
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
2122
assert builder.transaction.data['recipientAddress'] == fixture['data']['recipientAddress']
22-
assert builder.transaction.data['value'] == fixture['data']['value']
23+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
2324
assert builder.transaction.data['v'] == fixture['data']['v']
2425
assert builder.transaction.data['r'] == fixture['data']['r']
2526
assert builder.transaction.data['s'] == fixture['data']['s']
2627

2728
assert builder.transaction.serialize().hex() == fixture['serialized']
2829
assert builder.transaction.data['id'] == fixture['data']['id']
2930
assert builder.verify()
31+
32+
def test_it_should_handle_unit_converter(passphrase, address):
33+
builder = (
34+
TransferBuilder()
35+
.gas_price(UnitConverter.parse_units(5, 'gwei'))
36+
.nonce('1')
37+
.gas_limit(UnitConverter.parse_units(0.1, 'gwei'))
38+
.recipient_address(address)
39+
.value(UnitConverter.parse_units(10, 'ark'))
40+
.sign(passphrase)
41+
)
42+
43+
assert builder.transaction.data['gasPrice'] == 5000000000
44+
assert builder.transaction.data['nonce'] == '1'
45+
assert builder.transaction.data['gasLimit'] == 100000000
46+
assert builder.transaction.data['value'] == 10000000000000000000
47+
48+
assert builder.verify()

tests/transactions/builder/test_unvote_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def test_unvote_transaction(passphrase, load_transaction_fixture):
1818
assert builder.transaction.data['network'] == fixture['data']['network']
1919
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
2020
assert builder.transaction.data['recipientAddress'] == fixture['data']['recipientAddress']
21-
assert builder.transaction.data['value'] == fixture['data']['value']
21+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
2222
assert builder.transaction.data['v'] == fixture['data']['v']
2323
assert builder.transaction.data['r'] == fixture['data']['r']
2424
assert builder.transaction.data['s'] == fixture['data']['s']
@@ -44,7 +44,7 @@ def test_unvote_transaction_with_default_recipient_address(passphrase, load_tran
4444
assert builder.transaction.data['network'] == fixture['data']['network']
4545
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
4646
assert builder.transaction.data['recipientAddress'].lower() == fixture['data']['recipientAddress'].lower()
47-
assert builder.transaction.data['value'] == fixture['data']['value']
47+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
4848
assert builder.transaction.data['v'] == fixture['data']['v']
4949
assert builder.transaction.data['r'] == fixture['data']['r']
5050
assert builder.transaction.data['s'] == fixture['data']['s']

tests/transactions/builder/test_validator_registration_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def test_validator_registration_transaction(passphrase, validator_public_key, lo
2020
assert builder.transaction.data['network'] == fixture['data']['network']
2121
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
2222
assert builder.transaction.data['recipientAddress'] == fixture['data']['recipientAddress']
23-
assert builder.transaction.data['value'] == fixture['data']['value']
23+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
2424
assert builder.transaction.data['v'] == fixture['data']['v']
2525
assert builder.transaction.data['r'] == fixture['data']['r']
2626
assert builder.transaction.data['s'] == fixture['data']['s']
@@ -47,7 +47,7 @@ def test_validator_registration_transaction_with_default_recipient_address(passp
4747
assert builder.transaction.data['network'] == fixture['data']['network']
4848
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
4949
assert builder.transaction.data['recipientAddress'].lower() == fixture['data']['recipientAddress'].lower()
50-
assert builder.transaction.data['value'] == fixture['data']['value']
50+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
5151
assert builder.transaction.data['v'] == fixture['data']['v']
5252
assert builder.transaction.data['r'] == fixture['data']['r']
5353
assert builder.transaction.data['s'] == fixture['data']['s']

tests/transactions/builder/test_validator_resignation_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def test_validator_resignation_transaction(passphrase, load_transaction_fixture)
1818
assert builder.transaction.data['network'] == fixture['data']['network']
1919
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
2020
assert builder.transaction.data['recipientAddress'] == fixture['data']['recipientAddress']
21-
assert builder.transaction.data['value'] == fixture['data']['value']
21+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
2222
assert builder.transaction.data['v'] == fixture['data']['v']
2323
assert builder.transaction.data['r'] == fixture['data']['r']
2424
assert builder.transaction.data['s'] == fixture['data']['s']
@@ -44,7 +44,7 @@ def test_validator_resignation_transaction_with_default_recipient_address(passph
4444
assert builder.transaction.data['network'] == fixture['data']['network']
4545
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
4646
assert builder.transaction.data['recipientAddress'].lower() == fixture['data']['recipientAddress'].lower()
47-
assert builder.transaction.data['value'] == fixture['data']['value']
47+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
4848
assert builder.transaction.data['v'] == fixture['data']['v']
4949
assert builder.transaction.data['r'] == fixture['data']['r']
5050
assert builder.transaction.data['s'] == fixture['data']['s']

tests/transactions/builder/test_vote_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_vote_transaction(passphrase, load_transaction_fixture):
1919
assert builder.transaction.data['network'] == fixture['data']['network']
2020
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
2121
assert builder.transaction.data['recipientAddress'] == fixture['data']['recipientAddress']
22-
assert builder.transaction.data['value'] == fixture['data']['value']
22+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
2323
assert builder.transaction.data['v'] == fixture['data']['v']
2424
assert builder.transaction.data['r'] == fixture['data']['r']
2525
assert builder.transaction.data['s'] == fixture['data']['s']
@@ -46,7 +46,7 @@ def test_vote_transaction_with_default_recipient_address(passphrase, load_transa
4646
assert builder.transaction.data['network'] == fixture['data']['network']
4747
assert builder.transaction.data['gasLimit'] == fixture['data']['gasLimit']
4848
assert builder.transaction.data['recipientAddress'].lower() == fixture['data']['recipientAddress'].lower()
49-
assert builder.transaction.data['value'] == fixture['data']['value']
49+
assert builder.transaction.data['value'] == int(fixture['data']['value'])
5050
assert builder.transaction.data['v'] == fixture['data']['v']
5151
assert builder.transaction.data['r'] == fixture['data']['r']
5252
assert builder.transaction.data['s'] == fixture['data']['s']

0 commit comments

Comments
 (0)