Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions crypto/transactions/builder/abstract_transaction_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def __init__(self, data: dict):
'gasPrice': '5',
'nonce': '1',
'network': Network.get_network().chain_id(),
'gasLimit': 1_000_000,
'gas': 1_000_000,
'data': '',

**data,
Expand All @@ -26,12 +26,12 @@ def __str__(self):
def new(cls):
return cls({})

def gas_limit(self, gas_limit: int):
self.transaction.data['gasLimit'] = int(gas_limit)
def gas(self, gas: int):
self.transaction.data['gas'] = int(gas)
return self

def recipient_address(self, recipient_address: str):
self.transaction.data['recipientAddress'] = recipient_address
def to(self, to: str):
self.transaction.data['to'] = to
return self

def gas_price(self, gas_price: int):
Expand All @@ -50,7 +50,7 @@ def sign(self, passphrase: str):
keys = PrivateKey.from_passphrase(passphrase)
self.transaction.data['senderPublicKey'] = keys.public_key
self.transaction = self.transaction.sign(keys)
self.transaction.data['id'] = self.transaction.get_id()
self.transaction.data['hash'] = self.transaction.get_id()
return self

def verify(self):
Expand Down
8 changes: 4 additions & 4 deletions crypto/transactions/builder/multipayment_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ def __init__(self, data: dict):

self.transaction.data['pay'] = [[], []]

self.recipient_address(ContractAddresses.MULTIPAYMENT.value)
self.to(ContractAddresses.MULTIPAYMENT.value)
self.transaction.refresh_payload_data()

def pay(self, address: str, amount: str):
def pay(self, address: str, value: str):
self.transaction.data['pay'][0].append(address)
self.transaction.data['pay'][1].append(amount)
self.transaction.data['pay'][1].append(value)

self.transaction.refresh_payload_data()

self.transaction.data['value'] = str(int(self.transaction.data['value']) + int(amount))
self.transaction.data['value'] = str(int(self.transaction.data['value']) + int(value))

return self

Expand Down
2 changes: 1 addition & 1 deletion crypto/transactions/builder/unvote_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class UnvoteBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
self.to(ContractAddresses.CONSENSUS.value)

def get_transaction_instance(self, data: dict):
return Unvote(data)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class UsernameRegistrationBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.USERNAMES.value)
self.to(ContractAddresses.USERNAMES.value)

def username(self, username: str):
self.is_valid_username(username)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class UsernameResignationBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.USERNAMES.value)
self.to(ContractAddresses.USERNAMES.value)

def get_transaction_instance(self, data: dict):
return UsernameResignation(data)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class ValidatorRegistrationBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
self.to(ContractAddresses.CONSENSUS.value)

def validator_public_key(self, validator_public_key: str):
self.transaction.data['validatorPublicKey'] = validator_public_key
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class ValidatorResignationBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
self.to(ContractAddresses.CONSENSUS.value)

def get_transaction_instance(self, data: dict):
return ValidatorResignation(data)
2 changes: 1 addition & 1 deletion crypto/transactions/builder/vote_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class VoteBuilder(AbstractTransactionBuilder):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
self.to(ContractAddresses.CONSENSUS.value)

def vote(self, vote: str):
self.transaction.data['vote'] = vote
Expand Down
6 changes: 3 additions & 3 deletions crypto/transactions/deserializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ def deserialize(self) -> AbstractTransaction:
'network': Deserializer.__parse_number(decoded_rlp[0]),
'nonce': Deserializer.__parse_big_number(decoded_rlp[1]),
'gasPrice': Deserializer.__parse_number(decoded_rlp[3]),
'gasLimit': Deserializer.__parse_number(decoded_rlp[4]),
'recipientAddress': Deserializer.__parse_address(decoded_rlp[5]),
'gas': Deserializer.__parse_number(decoded_rlp[4]),
'to': Deserializer.__parse_address(decoded_rlp[5]),
'value': Deserializer.__parse_big_number(decoded_rlp[6]),
'data': Deserializer.__parse_hex(decoded_rlp[7]),
}
Expand All @@ -55,7 +55,7 @@ def deserialize(self) -> AbstractTransaction:
transaction.data = data
transaction.recover_sender()

transaction.data['id'] = transaction.get_id()
transaction.data['hash'] = transaction.get_id()

return transaction

Expand Down
2 changes: 1 addition & 1 deletion crypto/transactions/types/abstract_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def recover_sender(self):
hash_ = bytes.fromhex(self.hash(skip_signature=True))
public_key = self.__recover_public_key(signature_with_recid, hash_)
self.data['senderPublicKey'] = public_key.public_key
self.data['senderAddress'] = Address.from_public_key(self.data['senderPublicKey'])
self.data['from'] = Address.from_public_key(self.data['senderPublicKey'])

def verify(self) -> bool:
signature_with_recid = self._get_signature()
Expand Down
9 changes: 4 additions & 5 deletions crypto/utils/transaction_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,22 @@
class TransactionUtils:
@classmethod
def to_buffer(cls, transaction: dict, skip_signature: bool = False) -> bytes:
# Process recipientAddress
hex_address = cls.parse_hex_from_str(transaction.get('recipientAddress', ''))
hex_address = cls.parse_hex_from_str(transaction.get('to', ''))

# Pad with leading zero if necessary
if len(hex_address) % 2 != 0:
hex_address = '0' + hex_address

recipient_address = bytes.fromhex(hex_address.lower())
to = bytes.fromhex(hex_address.lower())

# Build the fields array
fields = [
cls.to_be_array(int(transaction['network'])),
cls.to_be_array(int(transaction.get('nonce', 0))),
cls.to_be_array(0),
cls.to_be_array(int(transaction['gasPrice'])),
cls.to_be_array(int(transaction['gasLimit'])),
recipient_address,
cls.to_be_array(int(transaction['gas'])),
to,
cls.to_be_array(int(transaction.get('value', 0))),
bytes.fromhex(cls.parse_hex_from_str(transaction.get('data', ''))) if transaction.get('data') else b'',
[],
Expand Down
38 changes: 19 additions & 19 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ def transaction_type_0():
"nonce": 5,
"senderPublicKey": '023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3',
"fee": 10000000,
"amount": 1,
"value": 1,
"expiration": 0,
"recipientId": '0xb693449AdDa7EFc015D87944EAE8b7C37EB1690A',
"to": '0xb693449AdDa7EFc015D87944EAE8b7C37EB1690A',
"signature": '95abbcadcfb4b8991392b1ce819777abd471d837ae8bfbf28f39cad4c7b2e815116622f3ceb099386ec19b781d7b38bdf008e1851a7f848bb88382f893ff85ea',
"id": '0ba2a3bf50747a89e5527235ec9beaab055ceadedfa347e81e95ba97e5166c6b',
"hash": '0ba2a3bf50747a89e5527235ec9beaab055ceadedfa347e81e95ba97e5166c6b',
"serialized": "ff011e0100000000000500000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3809698000000000000010000000000000000000000b693449adda7efc015d87944eae8b7c37eb1690a95abbcadcfb4b8991392b1ce819777abd471d837ae8bfbf28f39cad4c7b2e815116622f3ceb099386ec19b781d7b38bdf008e1851a7f848bb88382f893ff85ea",
}
return data
Expand All @@ -76,8 +76,8 @@ def transaction_type_2():
'validatorPublicKey': 'a08058db53e2665c84a40f5152e76dd2b652125a6079130d4c315e728bcf4dd1dfb44ac26e82302331d61977d3141118'
},
'signature': '5a1a0dba931a1b0a9055801578109a657fd4a2551fdb42dfd24a2c3a70835648d576f1d6b76b7a1cfedb4061d877c0a0f8adb3b47c7bbcb43b1b038da6b3ab19', # noqa
'amount': 0,
'id': '89b3df28b9069b9cba26ba8a4d2b970bb7e87a37271a96a0e9e0dd831e831f8d',
'value': 0,
'hash': '89b3df28b9069b9cba26ba8a4d2b970bb7e87a37271a96a0e9e0dd831e831f8d',
'serialized': 'ff011e0100000002000500000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d300f902950000000000a08058db53e2665c84a40f5152e76dd2b652125a6079130d4c315e728bcf4dd1dfb44ac26e82302331d61977d31411185a1a0dba931a1b0a9055801578109a657fd4a2551fdb42dfd24a2c3a70835648d576f1d6b76b7a1cfedb4061d877c0a0f8adb3b47c7bbcb43b1b038da6b3ab19' # noqa
}
return data
Expand All @@ -100,8 +100,8 @@ def transaction_type_3():
"votes": ["03f25455408f9a7e6c6a056b121e68fbda98f3511d22e9ef27b0ebaf1ef9e4eabc"]
},
"signature": "5946eea46e46026bd5feb5335ba9411fa30677c9a9a9a788065cf1e95bf2896659485fd26b78613640b1209827ce6d4587a05a4721c63e8af24d3351e1eeaa6c", # noqa
"amount": 0,
"id": "a2ff7837281cb978d6f293b46da7bb0342fe09923eede0bfbef9dd57ffee9158",
"value": 0,
"hash": "a2ff7837281cb978d6f293b46da7bb0342fe09923eede0bfbef9dd57ffee9158",
"serialized":
"ff011e0100000003000500000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d300e1f50500000000000103f25455408f9a7e6c6a056b121e68fbda98f3511d22e9ef27b0ebaf1ef9e4eabc005946eea46e46026bd5feb5335ba9411fa30677c9a9a9a788065cf1e95bf2896659485fd26b78613640b1209827ce6d4587a05a4721c63e8af24d3351e1eeaa6c" # noqa
}
Expand All @@ -119,8 +119,8 @@ def transaction_type_4():
'type': 4,
'nonce': 5,
'senderPublicKey': '023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3',
'id': 'f140e52f89c3b782da2fc47111abc85610e784ab3a55115712fe5fb2aa061f16',
'amount': 0,
'hash': 'f140e52f89c3b782da2fc47111abc85610e784ab3a55115712fe5fb2aa061f16',
'value': 0,
'fee': 500000000,
'signature': '5cc5dc6ca87dd1b3bd24dba27e72cce6b32284821f217f1a0195ba319e3ad3b8c9bdae225da62cd52ee911e7ffecd5e4d1197421070a8c92ee57e00398cf3dcb', # noqa
'asset': {
Expand Down Expand Up @@ -155,21 +155,21 @@ def transaction_type_6():
'nonce': 5,
'senderPublicKey': '023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3',
'fee': 10000000,
'amount': 0,
'value': 0,
'asset': {
'payments': [
{
'amount': 100000000,
'value': 100000000,
'recipientId': '0xb693449AdDa7EFc015D87944EAE8b7C37EB1690A'
},
{
'amount': 200000000,
'value': 200000000,
'recipientId': '0xb693449AdDa7EFc015D87944EAE8b7C37EB1690A'
},
],
},
'signature': '220b5d1597716c63f7945da495793f6fcb9997481108e9c1e4e7b72c6ec31fe11b2015b4940938ca8979e84ec06550825b3c0a24e23fdae087173d4d74e4d8bc',
'id': 'c42df7851d62e99ef52363b6344a7f81069e5a2e239144853990839aa4084fb3',
'hash': 'c42df7851d62e99ef52363b6344a7f81069e5a2e239144853990839aa4084fb3',
'serialized': 'ff011e0100000006000500000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3809698000000000000020000e1f50500000000b693449adda7efc015d87944eae8b7c37eb1690a00c2eb0b00000000b693449adda7efc015d87944eae8b7c37eb1690a220b5d1597716c63f7945da495793f6fcb9997481108e9c1e4e7b72c6ec31fe11b2015b4940938ca8979e84ec06550825b3c0a24e23fdae087173d4d74e4d8bc'
}
return data
Expand All @@ -187,9 +187,9 @@ def transaction_type_7():
'nonce': 5,
'senderPublicKey': '023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3',
'fee': 2500000000,
'amount': 0,
'value': 0,
'signature': '34ec032ec41273043cf4f809e16e0892104743fac7da1d7ff33fb75b5569cc1c59e03558ceb2f28daf1cfaec8b88ce994c2114177f4bfeca03c0b0533d58dc1f',
'id': '4579323b640090f5a43f1b22d29082348a6f0016b2b28ad3bc44f1838647c83d',
'hash': '4579323b640090f5a43f1b22d29082348a6f0016b2b28ad3bc44f1838647c83d',
'serialized': 'ff011e0100000007000500000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d300f90295000000000034ec032ec41273043cf4f809e16e0892104743fac7da1d7ff33fb75b5569cc1c59e03558ceb2f28daf1cfaec8b88ce994c2114177f4bfeca03c0b0533d58dc1f'
}
return data
Expand All @@ -211,8 +211,8 @@ def transaction_type_8():
'username': 'test_username'
},
'signature': 'd6886e48b8df120f5f51d22c00583ef9cda61c32fd578cd07812f95cca16cdf98972e7f0789221cf1e0ad8fe174f68b4b3fe57a32692c83e0f7b1bd18c9b1640', # noqa
'amount': 0,
'id': 'f6ae0049bc3b79ddac96e37ceb6dadbf311b817d70ae1613ca5a97ceba6c8d40',
'value': 0,
'hash': 'f6ae0049bc3b79ddac96e37ceb6dadbf311b817d70ae1613ca5a97ceba6c8d40',
'serialized': 'ff011e0100000008000900000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d300f9029500000000000d746573745f757365726e616d65d6886e48b8df120f5f51d22c00583ef9cda61c32fd578cd07812f95cca16cdf98972e7f0789221cf1e0ad8fe174f68b4b3fe57a32692c83e0f7b1bd18c9b1640' # noqa
}
return data
Expand All @@ -230,9 +230,9 @@ def transaction_type_9():
'nonce': 9,
'senderPublicKey': '023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d3',
'fee': 2500000000,
'amount': 0,
'value': 0,
'signature': '728c2c5d5f090e8c5dfd433bb2b15b30442cbafb9b882117f7b6f284da4093c6a96e8456f764628ec809514ac4e8b06d5450978b9b763f7d01f696b8881f702a',
'id': '9d01eb12cb47d5acbfe0ba0aff501e24e8313e2b08ecba118bb45332903d776b',
'hash': '9d01eb12cb47d5acbfe0ba0aff501e24e8313e2b08ecba118bb45332903d776b',
'serialized': 'ff011e0100000009000900000000000000023efc1da7f315f3c533a4080e491f32cd4219731cef008976c3876539e1f192d300f902950000000000728c2c5d5f090e8c5dfd433bb2b15b30442cbafb9b882117f7b6f284da4093c6a96e8456f764628ec809514ac4e8b06d5450978b9b763f7d01f696b8881f702a'
}
return data
8 changes: 4 additions & 4 deletions tests/fixtures/transactions/evm-sign.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
"network": 10000,
"nonce": "1",
"gasPrice": 5000000000,
"gasLimit": 200000,
"recipientAddress": "0xE536720791A7DaDBeBdBCD8c8546fb0791a11901",
"gas": 200000,
"to": "0xE536720791A7DaDBeBdBCD8c8546fb0791a11901",
"value": "0",
"data": "a9059cbb00000000000000000000000027fa7caffaae77ddb9ab232fdbda56d5e5af23930000000000000000000000000000000000000000000000000000000000000064",
"v": 28,
"r": "8cd7afafdfaaa6c4b6c97e49888dff89713c99f8b1324693ef4427ce88994bbe",
"s": "01c589bb8d3bc908aaee56d64ca35458f2cebf977bbc29180c574aba8bc12b0d",
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
"id": "85cdc2ae6cd4569dd1b5b11df10fc409b3996864032d6acf87ff907286f40a03"
"from": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
"hash": "85cdc2ae6cd4569dd1b5b11df10fc409b3996864032d6acf87ff907286f40a03"
},
"serialized": "02f8af822710018085012a05f20083030d4094e536720791a7dadbebdbcd8c8546fb0791a1190180b844a9059cbb00000000000000000000000027fa7caffaae77ddb9ab232fdbda56d5e5af23930000000000000000000000000000000000000000000000000000000000000064c001a08cd7afafdfaaa6c4b6c97e49888dff89713c99f8b1324693ef4427ce88994bbea001c589bb8d3bc908aaee56d64ca35458f2cebf977bbc29180c574aba8bc12b0d"
}
10 changes: 5 additions & 5 deletions tests/fixtures/transactions/multipayment-empty.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
"network": 10000,
"nonce": "1",
"gasPrice": 5000000000,
"gasLimit": 200000,
"recipientAddress": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
"gas": 200000,
"to": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
"value": "0",
"data": "084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"v": 27,
"r": "cbec73e1cba1177789adf44fcd3cea797d132563635fae211c350acd7c328046",
"s": "216eabb6cd1eb5c0000e7eb74f66595bd5b688f43dd646f15f33e3827c8c966b",
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
"id": "555fcaca65f9319c638ebb15c5ffdee0a5e41b7dc3b171aca3707bc43f40ed57"
"from": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
"hash": "555fcaca65f9319c638ebb15c5ffdee0a5e41b7dc3b171aca3707bc43f40ed57"
},
"serialized": "02f8ef822710018085012a05f20083030d409400efd0d4639191c49908a7bddbb9a11a994a852780b884084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cbec73e1cba1177789adf44fcd3cea797d132563635fae211c350acd7c328046a0216eabb6cd1eb5c0000e7eb74f66595bd5b688f43dd646f15f33e3827c8c966b"
}
}
10 changes: 5 additions & 5 deletions tests/fixtures/transactions/multipayment-single.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
"network": 10000,
"nonce": "1",
"gasPrice": 5000000000,
"gasLimit": 200000,
"recipientAddress": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
"gas": 200000,
"to": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
"value": "100000",
"data": "084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006f0182a0cc707b055322ccf6d4cb6a5aff1aeb22000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a0",
"v": 28,
"r": "e381eb89f21e450009706650346e3abfaee0c91c5685c8ec923d86b8212a2427",
"s": "5b3a7bfdec8ca69469e989805e7715f5d317bf62304f868a905224e7dabe7b37",
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
"id": "1d0e3d567ffa39defba7904202941070b224f885f9399c817a58aeb36f4f3863"
"from": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
"hash": "1d0e3d567ffa39defba7904202941070b224f885f9399c817a58aeb36f4f3863"
},
"serialized": "02f90132822710018085012a05f20083030d409400efd0d4639191c49908a7bddbb9a11a994a8527830186a0b8c4084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006f0182a0cc707b055322ccf6d4cb6a5aff1aeb22000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a0c001a0e381eb89f21e450009706650346e3abfaee0c91c5685c8ec923d86b8212a2427a05b3a7bfdec8ca69469e989805e7715f5d317bf62304f868a905224e7dabe7b37"
}
}
Loading