Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
3 changes: 3 additions & 0 deletions crypto/enums/abi_function.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ class AbiFunction(Enum):
USERNAME_RESIGNATION = 'resignUsername'
VALIDATOR_REGISTRATION = 'registerValidator'
VALIDATOR_RESIGNATION = 'resignValidator'
UPDATE_VALIDATOR = 'updateValidator'
TRANSFER = 'transfer'
APPROVE = 'approve'
1 change: 1 addition & 0 deletions crypto/enums/contract_abi_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ class ContractAbiType(Enum):
CUSTOM = 'custom'
CONSENSUS = 'consensus'
MULTIPAYMENT = 'multipayment'
TOKEN = 'token'
USERNAMES = 'usernames'
27 changes: 27 additions & 0 deletions crypto/transactions/builder/token_approve_builder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from crypto.enums.abi_function import AbiFunction
from crypto.enums.contract_abi_type import ContractAbiType
from crypto.transactions.builder.abstract_transaction_builder import (
AbstractTransactionBuilder,
)
from crypto.transactions.types.evm_call import EvmCall
from crypto.utils.abi_encoder import AbiEncoder
from crypto.utils.transaction_utils import TransactionUtils


class TokenApproveBuilder(AbstractTransactionBuilder):
def contract_address(self, address):
self.transaction.data['to'] = address
return self

def spender(self, address, amount):
encoder = AbiEncoder(ContractAbiType.TOKEN)
payload = encoder.encode_function_call(
AbiFunction.APPROVE.value, [address, amount]
)
self.transaction.data['data'] = TransactionUtils.parse_hex_from_str(
payload
)
return self

def get_transaction_instance(self, data):
return EvmCall(data)
27 changes: 27 additions & 0 deletions crypto/transactions/builder/token_transfer_builder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from crypto.enums.abi_function import AbiFunction
from crypto.enums.contract_abi_type import ContractAbiType
from crypto.transactions.builder.abstract_transaction_builder import (
AbstractTransactionBuilder,
)
from crypto.transactions.types.evm_call import EvmCall
from crypto.utils.abi_encoder import AbiEncoder
from crypto.utils.transaction_utils import TransactionUtils


class TokenTransferBuilder(AbstractTransactionBuilder):
def contract_address(self, address):
self.transaction.data['to'] = address
return self

def recipient(self, address, amount):
encoder = AbiEncoder(ContractAbiType.TOKEN)
payload = encoder.encode_function_call(
AbiFunction.TRANSFER.value, [address, amount]
)
self.transaction.data['data'] = TransactionUtils.parse_hex_from_str(
payload
)
return self

def get_transaction_instance(self, data):
return EvmCall(data)
Loading
Loading