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
13 changes: 8 additions & 5 deletions crypto/transactions/builder/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,27 @@


class AbstractTransactionBuilder:
def __init__(self, data: Optional[dict] = None):
default_data = {
def __init__(self, data: dict):
data = {
'value': 0,
'senderPublicKey': '',
'gasPrice': '5',
'nonce': '1',
'network': get_network()['version'],
'gasLimit': 1_000_000,
'data': '',

**data,
}
self.transaction = self.get_transaction_instance(data or default_data)

self.transaction = self.get_transaction_instance(data)

def __str__(self):
return self.to_json()

@classmethod
def new(cls, data: Optional[dict] = None):
return cls(data)
def new(cls):
return cls({})

def gas_limit(self, gas_limit: int):
self.transaction.data['gasLimit'] = int(gas_limit)
Expand Down
3 changes: 1 addition & 2 deletions crypto/transactions/builder/multipayment_builder.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.multipayment import Multipayment

class MultipaymentBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.transaction.data['pay'] = [[], []]
Expand Down
3 changes: 1 addition & 2 deletions crypto/transactions/builder/unvote_builder.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.unvote import Unvote

class UnvoteBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import re
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.exceptions import InvalidUsernameException
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.username_registration import UsernameRegistration

class UsernameRegistrationBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.USERNAMES.value)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.username_resignation import UsernameResignation

class UsernameResignationBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.USERNAMES.value)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.validator_registration import ValidatorRegistration

class ValidatorRegistrationBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.validator_resignation import ValidatorResignation

class ValidatorResignationBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
Expand Down
3 changes: 1 addition & 2 deletions crypto/transactions/builder/vote_builder.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Optional
from crypto.enums.contract_addresses import ContractAddresses
from crypto.transactions.builder.base import AbstractTransactionBuilder
from crypto.transactions.types.vote import Vote

class VoteBuilder(AbstractTransactionBuilder):
def __init__(self, data: Optional[dict] = None):
def __init__(self, data: dict):
super().__init__(data)

self.recipient_address(ContractAddresses.CONSENSUS.value)
Expand Down
8 changes: 4 additions & 4 deletions crypto/transactions/deserializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def guess_transaction_from_data(self, data: dict) -> AbstractTransaction:
if multipayment_payload_data is not None:
function_name = multipayment_payload_data.get('functionName')
if function_name == AbiFunction.MULTIPAYMENT.value:
return Multipayment(data, multipayment_payload_data)
return Multipayment(data)

if data['value'] != '0':
return Transfer(data)
Expand All @@ -73,13 +73,13 @@ def guess_transaction_from_data(self, data: dict) -> AbstractTransaction:
if consensus_payload_data is not None:
function_name = consensus_payload_data.get('functionName')
if function_name == AbiFunction.VOTE.value:
return Vote(data, consensus_payload_data)
return Vote(data)

if function_name == AbiFunction.UNVOTE.value:
return Unvote(data)

if function_name == AbiFunction.VALIDATOR_REGISTRATION.value:
return ValidatorRegistration(data, consensus_payload_data)
return ValidatorRegistration(data)

if function_name == AbiFunction.VALIDATOR_RESIGNATION.value:
return ValidatorResignation(data)
Expand All @@ -88,7 +88,7 @@ def guess_transaction_from_data(self, data: dict) -> AbstractTransaction:
if username_payload_data is not None:
function_name = username_payload_data.get('functionName')
if function_name == AbiFunction.USERNAME_REGISTRATION.value:
return UsernameRegistration(data, username_payload_data)
return UsernameRegistration(data)

if function_name == AbiFunction.USERNAME_RESIGNATION.value:
return UsernameResignation(data)
Expand Down
4 changes: 2 additions & 2 deletions crypto/transactions/types/abstract_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
from crypto.utils.abi_decoder import AbiDecoder

class AbstractTransaction:
def __init__(self, data: Optional[dict] = None):
self.data = data or {}
def __init__(self, data: dict):
self.data = data
self.refresh_payload_data()

def get_payload(self) -> str:
Expand Down
7 changes: 2 additions & 5 deletions crypto/transactions/types/multipayment.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@
from crypto.enums.abi_function import AbiFunction

class Multipayment(AbstractTransaction):
def __init__(self, data: Optional[dict] = None, payload: Optional[dict] = None):
data = data or {}
if payload is None:
payload = self.decode_payload(data, ContractAbiType.MULTIPAYMENT)

def __init__(self, data: dict):
payload = self.decode_payload(data, ContractAbiType.MULTIPAYMENT)
if payload:
data['pay'] = payload.get('args', [])

Expand Down
7 changes: 2 additions & 5 deletions crypto/transactions/types/username_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@
from crypto.enums.abi_function import AbiFunction

class UsernameRegistration(AbstractTransaction):
def __init__(self, data: Optional[dict] = None, payload: Optional[dict] = None):
data = data or {}
if payload is None:
payload = self.decode_payload(data, ContractAbiType.USERNAMES)

def __init__(self, data: dict):
payload = self.decode_payload(data, ContractAbiType.USERNAMES)
if payload:
data['username'] = payload.get('args', [None])[0] if payload.get('args') else None

Expand Down
8 changes: 2 additions & 6 deletions crypto/transactions/types/validator_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@
from crypto.utils.transaction_utils import TransactionUtils

class ValidatorRegistration(AbstractTransaction):
def __init__(self, data: Optional[dict] = None, payload: Optional[dict] = None):
data = data or {}

if payload is None:
payload = self.decode_payload(data)

def __init__(self, data: dict):
payload = self.decode_payload(data)
if payload:
data['validatorPublicKey'] = TransactionUtils.parse_hex_from_str(payload.get('args', [None])[0]) if payload.get('args') else None
super().__init__(data)
Expand Down
7 changes: 2 additions & 5 deletions crypto/transactions/types/vote.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@
from crypto.enums.abi_function import AbiFunction

class Vote(AbstractTransaction):
def __init__(self, data: Optional[dict] = None, payload: Optional[dict] = None):
data = data or {}
if payload is None:
payload = self.decode_payload(data)

def __init__(self, data: dict):
payload = self.decode_payload(data)
if payload:
data['vote'] = payload.get('args', [None])[0] if payload.get('args') else None

Expand Down
3 changes: 2 additions & 1 deletion tests/transactions/builder/test_evm_call_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_evm_call_transaction(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('evm-sign')

builder = (
EvmCallBuilder()
EvmCallBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
9 changes: 6 additions & 3 deletions tests/transactions/builder/test_multipayment_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixtur
fixture = load_transaction_fixture('multipayment')

builder = (
MultipaymentBuilder()
MultipaymentBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand All @@ -30,7 +31,8 @@ def test_it_should_handle_single_recipient(passphrase, load_transaction_fixture)
fixture = load_transaction_fixture('multipayment-single')

builder = (
MultipaymentBuilder()
MultipaymentBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand All @@ -55,7 +57,8 @@ def test_it_should_handle_empty_payment(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('multipayment-empty')

builder = (
MultipaymentBuilder()
MultipaymentBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
6 changes: 4 additions & 2 deletions tests/transactions/builder/test_transfer_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixtur
fixture = load_transaction_fixture('transfer')

builder = (
TransferBuilder()
TransferBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand All @@ -31,7 +32,8 @@ def test_it_should_sign_it_with_a_passphrase(passphrase, load_transaction_fixtur

def test_it_should_handle_unit_converter(passphrase, address):
builder = (
TransferBuilder()
TransferBuilder
.new()
.gas_price(UnitConverter.parse_units(5, 'gwei'))
.nonce('1')
.gas_limit(UnitConverter.parse_units(0.1, 'gwei'))
Expand Down
6 changes: 4 additions & 2 deletions tests/transactions/builder/test_unvote_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_unvote_transaction(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('unvote')

builder = (
UnvoteBuilder()
UnvoteBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand All @@ -31,7 +32,8 @@ def test_unvote_transaction_with_default_recipient_address(passphrase, load_tran
fixture = load_transaction_fixture('unvote')

builder = (
UnvoteBuilder()
UnvoteBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ def test_username_registration_transaction(passphrase, username, load_transactio
fixture = load_transaction_fixture('username-registration')

builder = (
UsernameRegistrationBuilder()
UsernameRegistrationBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_username_resignation_transaction(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('username-resignation')

builder = (
UsernameResignationBuilder()
UsernameResignationBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_validator_registration_transaction(passphrase, validator_public_key, lo
fixture = load_transaction_fixture('validator-registration')

builder = (
ValidatorRegistrationBuilder()
ValidatorRegistrationBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down Expand Up @@ -33,7 +34,8 @@ def test_validator_registration_transaction_with_default_recipient_address(passp
fixture = load_transaction_fixture('validator-registration')

builder = (
ValidatorRegistrationBuilder()
ValidatorRegistrationBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_validator_resignation_transaction(passphrase, load_transaction_fixture)
fixture = load_transaction_fixture('validator-resignation')

builder = (
ValidatorResignationBuilder()
ValidatorResignationBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand All @@ -31,7 +32,8 @@ def test_validator_resignation_transaction_with_default_recipient_address(passph
fixture = load_transaction_fixture('validator-resignation')

builder = (
ValidatorResignationBuilder()
ValidatorResignationBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down
6 changes: 4 additions & 2 deletions tests/transactions/builder/test_vote_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def test_vote_transaction(passphrase, load_transaction_fixture):
fixture = load_transaction_fixture('vote')

builder = (
VoteBuilder()
VoteBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down Expand Up @@ -32,7 +33,8 @@ def test_vote_transaction_with_default_recipient_address(passphrase, load_transa
fixture = load_transaction_fixture('vote')

builder = (
VoteBuilder()
VoteBuilder
.new()
.gas_price(fixture['data']['gasPrice'])
.nonce(fixture['data']['nonce'])
.network(fixture['data']['network'])
Expand Down