From e28c84fa3be740d9a823fef560fffe287da07182 Mon Sep 17 00:00:00 2001 From: orman Date: Tue, 3 Oct 2023 12:36:26 +0300 Subject: [PATCH 1/9] tokenization and contract registry endpoints --- README.md | 2 +- fireblocks_sdk/api_types.py | 207 +++++++++++++++++++++++++++++++++--- fireblocks_sdk/sdk.py | 35 ++++-- 3 files changed, 221 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 8c032de..c2b2f9e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## About This repository contains the official Python SDK for Fireblocks API. -For the complete API reference, go to the [API reference](https://docs.fireblocks.com/api). +For the complete API reference, go to the [API reference](https://developers.fireblocks.com/). ## Usage ### Before You Begin diff --git a/fireblocks_sdk/api_types.py b/fireblocks_sdk/api_types.py index 990ede3..258541f 100644 --- a/fireblocks_sdk/api_types.py +++ b/fireblocks_sdk/api_types.py @@ -1,6 +1,5 @@ from enum import Enum -from typing import Optional, List, Union - +from typing import Optional, List, Union, Dict def snake_to_camel(snake_case: str): words = snake_case.split('_') @@ -317,31 +316,209 @@ class TimePeriod(str, Enum): DAY = "DAY" WEEK = "WEEK" +class StellarRippleCreateParams: + def __init__( + self, + issuerAddress: Optional[str] = None + ): + self.issuerAddress = issuerAddress + + def serialize(self) -> dict: + obj = {} + + if self.issuerAddress: + obj.update({'issuerAddress': self.issuerAddress}) -class IssueTokenRequest: - symbol: str - name: str - blockchain_id: str - eth_contract_address: Optional[str] - issuer_address: Optional[str] - decimals: int + return obj +class Parameter: + def __init__( + self, + name: str, + type: str, + internalType: str, + description: Optional[str] = None, + components: Optional[List['Parameter']] = None + ): + self.name = name + self.type = type + self.internalType = internalType + self.description = description + self.components = components + def serialize(self) -> dict: obj = { + 'name': self.name, + 'type': self.type, + 'internalType': self.internalType, + } + + if self.description: + obj.update({'description': self.description}) + if self.components: + obj.update({'components': self.components}) + + return obj + +class ParameterWithValue(Parameter): + def __init__( + self, + name: str, + type: str, + internalType: str, + value: Union[str, int, float, bool], + description: Optional[str] = None, + components: Optional[List['Parameter']] = None + ): + super().__init__(name, type, internalType, description, components) + self.value = value + + def serialize(self) -> dict: + obj = super().serialize() + obj.update({'value': self.value}) + + return obj + +class EVMTokenCreateParams: + def __init__( + self, + contractId: str, + constructorParams: Optional[List[ParameterWithValue]] = [] + ): + self.contractId = contractId + self.constructorParams = constructorParams + + def serialize(self) -> dict: + return { + 'contractId': self.contractId, + 'constructorParams': self.constructorParams, + } + +class CreateTokenRequest: + def __init__( + self, + symbol: str, + name: str, + blockchainId: str, + vaultAccountId: str, + createParams: Union[EVMTokenCreateParams, StellarRippleCreateParams] + ): + self.symbol = symbol + self.name = name + self.blockchainId = blockchainId + self.vaultAccountId = vaultAccountId + self.createParams = createParams + + def serialize(self) -> dict: + return { 'symbol': self.symbol, 'name': self.name, - 'blockchainId': self.blockchain_id, - 'decimals': self.decimals, + 'blockchainId': self.blockchainId, + 'vaultAccountId': self.vaultAccountId, + 'createParams': self.createParams } - if self.eth_contract_address: - obj.update({'ethContractAddress': self.eth_contract_address}) +class ContractDeployRequest(object): + def __init__( + self, + asset_id: str, + vault_account_id: str, + constructorParameters: Optional[List[ParameterWithValue]] = [] + ): + self.asset_id = asset_id + self.vault_account_id = vault_account_id + self.constructorParameters = constructorParameters - if self.issuer_address: - obj.update({'issuerAddress': self.issuer_address}) + def serialize(self) -> dict: + obj = { + 'assetId': self.asset_id, + 'vaultAccountId': self.vault_account_id, + } + + if self.constructorParameters: + obj.update({'constructorParameters': self.constructorParameters}) return obj +class AbiFunction(object): + def __init__( + self, + name: str, + type: str, + stateMutability: str, + inputs: List[Parameter], + outputs: Optional[List[Parameter]] = None, + description: Optional[str] = None, + returns: Optional[Dict[str, str]] = None + ): + self.name = name + self.type = type + self.stateMutability = stateMutability + self.inputs = inputs + self.outputs = outputs + self.description = description + self.returns = returns + + def serialize(self) -> dict: + obj = { + 'name': self.name, + 'type': self.type, + 'stateMutability': self.stateMutability, + 'inputs': self.inputs, + } + + if self.outputs is not None: + obj.update({'outputs': self.outputs}) + + if self.description: + obj.update({'description': self.description}) + + if self.returns: + obj.update({'returns': self.returns}) + + return obj + +class ContractUploadRequest(object): + def __init__( + self, + name: str, + description: str, + bytecode: str, + sourcecode: str, + abi: Optional[List[AbiFunction]] = None, + vendorId: Optional[str] = None, + compilerOutputMetadata: Optional[object] = None, + docs: Optional[object] = None, + attributes: Optional[Dict[str, str]] = None, + ): + self.name = name + self.description = description + self.bytecode = bytecode + self.sourcecode = sourcecode + self.abi = abi + self.vendorId = vendorId + self.compilerOutputMetadata = compilerOutputMetadata + self.docs = docs + self.attributes = attributes + + def serialize(self) -> dict: + obj = { + 'name': self.name, + 'description': self.description, + 'bytecode': self.bytecode, + 'sourcecode': self.sourcecode, + } + + if self.compilerOutputMetadata: + obj.update({'compilerOutputMetadata': self.compilerOutputMetadata}) + + if self.attributes: + obj.update({'attributes': self.attributes}) + + if self.vendorId: + obj.update({'vendorId': self.vendorId}) + + return obj class PolicyTransactionType(str, Enum): ANY = "*" diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index daed13e..81137c5 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -9,9 +9,9 @@ from .api_types import FireblocksApiException, TRANSACTION_TYPES, TRANSACTION_STATUS_TYPES, TransferPeerPath, \ DestinationTransferPeerPath, TransferTicketTerm, TRANSACTION_TRANSFER, SIGNING_ALGORITHM, UnsignedMessage, \ - FEE_LEVEL, PagedVaultAccountsRequestFilters, TransactionDestination, NFTOwnershipStatusValues, IssueTokenRequest, \ + FEE_LEVEL, PagedVaultAccountsRequestFilters, TransactionDestination, NFTOwnershipStatusValues, RawMessage, \ GetAssetWalletsFilters, TimePeriod, GetOwnedCollectionsSortValue, GetOwnedNftsSortValues, GetNftsSortValues, OrderValues, \ - GetOwnedAssetsSortValues, PolicyRule + GetOwnedAssetsSortValues, PolicyRule, CreateTokenRequest, ContractUploadRequest, ContractDeployRequest from .sdk_token_provider import SdkTokenProvider @@ -61,11 +61,10 @@ def get_linked_tokens(self, limit: int = 100, offset: int = 0): "limit": limit, "offset": offset } - url = f"/v1/tokenization/tokens" - return self._get_request(url, query_params=request_filter) + return self._get_request(f"/v1/tokenization/tokens", query_params=request_filter) - def issue_new_token(self, request: IssueTokenRequest): - return self._post_request("/v1/tokenization/tokens", request.serialize()) + def issue_new_token(self, request: CreateTokenRequest): + return self._post_request("/v1/tokenization/tokens", request) def get_linked_token(self, asset_id: str): return self._get_request(f"/v1/tokenization/tokens/{asset_id}") @@ -76,6 +75,28 @@ def link_token(self, asset_id: str): def unlink_token(self, asset_id: str): return self._delete_request(f"/v1/tokenization/tokens/{asset_id}") + def get_contract_templates(self, limit: int = 100, offset: int = 0): + request_filter = { + "limit": limit, + "offset": offset + } + return self._get_request(f"/v1/contract-registry/contracts", query_params=request_filter) + + def upload_contract_template(self, request: ContractUploadRequest): + return self._post_request(f"/v1/contract-registry/contracts", request.serialize()) + + def get_contract_template(self, contract_id: str): + return self._get_request(f"/v1/contract-registry/contracts/{contract_id}") + + def get_contract_template_constructor(self, contract_id: str, with_docs: bool=False): + return self._get_request(f"/v1/contract-registry/contracts/{contract_id}/constructor?withDocs=${with_docs}`") + + def delete_contract_template(self, contract_id: str): + return self._delete_request(f"/v1/contract-registry/contracts/{contract_id}") + + def deploy_contract(self, contract_id: str, request: ContractDeployRequest): + return self._post_request(f"/v1/contract-registry/contracts/{contract_id}/deploy", request.serialize()) + def get_nft(self, id: str): url = "/v1/nfts/tokens/" + id @@ -1592,7 +1613,7 @@ def get_vault_balance_by_asset(self, asset_id=None): return self._get_request(url) - def create_raw_transaction(self, raw_message, source=None, asset_id=None, note=None): + def create_raw_transaction(self, raw_message: RawMessage, source=None, asset_id=None, note=None): """Creates a new raw transaction with the specified parameters Args: From 2c08857f4c8cde3e7ec1f012f81a6a0712e6f5c6 Mon Sep 17 00:00:00 2001 From: orman Date: Wed, 4 Oct 2023 17:14:30 +0300 Subject: [PATCH 2/9] output_dict --- fireblocks_sdk/api_types.py | 58 ++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/fireblocks_sdk/api_types.py b/fireblocks_sdk/api_types.py index 258541f..13eae66 100644 --- a/fireblocks_sdk/api_types.py +++ b/fireblocks_sdk/api_types.py @@ -324,12 +324,12 @@ def __init__( self.issuerAddress = issuerAddress def serialize(self) -> dict: - obj = {} + output_dict = {} if self.issuerAddress: - obj.update({'issuerAddress': self.issuerAddress}) + output_dict['issuerAddress'] = self.issuerAddress - return obj + return output_dict class Parameter: def __init__( @@ -347,18 +347,18 @@ def __init__( self.components = components def serialize(self) -> dict: - obj = { + output_dict = { 'name': self.name, 'type': self.type, 'internalType': self.internalType, } if self.description: - obj.update({'description': self.description}) + output_dict['description'] = self.description if self.components: - obj.update({'components': self.components}) + output_dict['components'] = self.components - return obj + return output_dict class ParameterWithValue(Parameter): def __init__( @@ -374,25 +374,29 @@ def __init__( self.value = value def serialize(self) -> dict: - obj = super().serialize() - obj.update({'value': self.value}) + output_dict = super().serialize() + output_dict['value'] = self.value - return obj + return output_dict class EVMTokenCreateParams: def __init__( self, contractId: str, - constructorParams: Optional[List[ParameterWithValue]] = [] + constructorParams: Optional[List[ParameterWithValue]] = None ): self.contractId = contractId self.constructorParams = constructorParams def serialize(self) -> dict: - return { + output_dict = { 'contractId': self.contractId, - 'constructorParams': self.constructorParams, } + + if self.constructorParams: + output_dict['constructorParams'] = self.constructorParams + + return output_dict class CreateTokenRequest: def __init__( @@ -423,22 +427,22 @@ def __init__( self, asset_id: str, vault_account_id: str, - constructorParameters: Optional[List[ParameterWithValue]] = [] + constructorParameters: Optional[List[ParameterWithValue]] = None ): self.asset_id = asset_id self.vault_account_id = vault_account_id self.constructorParameters = constructorParameters def serialize(self) -> dict: - obj = { + output_dict = { 'assetId': self.asset_id, 'vaultAccountId': self.vault_account_id, } if self.constructorParameters: - obj.update({'constructorParameters': self.constructorParameters}) + output_dict['constructorParameters'] = self.constructorParameters - return obj + return output_dict class AbiFunction(object): def __init__( @@ -460,7 +464,7 @@ def __init__( self.returns = returns def serialize(self) -> dict: - obj = { + output_dict = { 'name': self.name, 'type': self.type, 'stateMutability': self.stateMutability, @@ -468,15 +472,15 @@ def serialize(self) -> dict: } if self.outputs is not None: - obj.update({'outputs': self.outputs}) + output_dict['outputs'] = self.outputs if self.description: - obj.update({'description': self.description}) + output_dict['description'] = self.description if self.returns: - obj.update({'returns': self.returns}) + output_dict['returns'] = self.returns - return obj + return output_dict class ContractUploadRequest(object): def __init__( @@ -502,7 +506,7 @@ def __init__( self.attributes = attributes def serialize(self) -> dict: - obj = { + output_dict = { 'name': self.name, 'description': self.description, 'bytecode': self.bytecode, @@ -510,15 +514,15 @@ def serialize(self) -> dict: } if self.compilerOutputMetadata: - obj.update({'compilerOutputMetadata': self.compilerOutputMetadata}) + output_dict['compilerOutputMetadata'] = self.compilerOutputMetadata if self.attributes: - obj.update({'attributes': self.attributes}) + output_dict['attributes'] = self.attributes if self.vendorId: - obj.update({'vendorId': self.vendorId}) + output_dict['vendorId'] = self.vendorId - return obj + return output_dict class PolicyTransactionType(str, Enum): ANY = "*" From 6eda750b49f0397e74b2b3b9e3ad36a9721132a3 Mon Sep 17 00:00:00 2001 From: orman Date: Wed, 4 Oct 2023 17:41:34 +0300 Subject: [PATCH 3/9] to_dict --- fireblocks_sdk/api_types.py | 108 ++++++------------------------------ 1 file changed, 18 insertions(+), 90 deletions(-) diff --git a/fireblocks_sdk/api_types.py b/fireblocks_sdk/api_types.py index 13eae66..ebd8255 100644 --- a/fireblocks_sdk/api_types.py +++ b/fireblocks_sdk/api_types.py @@ -14,7 +14,7 @@ def convert_class_to_dict(class_dict: dict): in value] elif hasattr(value, 'to_dict') and callable(getattr(value, 'to_dict')): output_dict[snake_to_camel(key)] = value.to_dict() - else: + elif value is not None: output_dict[snake_to_camel(key)] = value return output_dict @@ -323,13 +323,8 @@ def __init__( ): self.issuerAddress = issuerAddress - def serialize(self) -> dict: - output_dict = {} - - if self.issuerAddress: - output_dict['issuerAddress'] = self.issuerAddress - - return output_dict + def to_dict(self): + return convert_class_to_dict(self.__dict__) class Parameter: def __init__( @@ -346,19 +341,8 @@ def __init__( self.description = description self.components = components - def serialize(self) -> dict: - output_dict = { - 'name': self.name, - 'type': self.type, - 'internalType': self.internalType, - } - - if self.description: - output_dict['description'] = self.description - if self.components: - output_dict['components'] = self.components - - return output_dict + def to_dict(self): + return convert_class_to_dict(self.__dict__) class ParameterWithValue(Parameter): def __init__( @@ -372,12 +356,9 @@ def __init__( ): super().__init__(name, type, internalType, description, components) self.value = value - - def serialize(self) -> dict: - output_dict = super().serialize() - output_dict['value'] = self.value - - return output_dict + + def to_dict(self): + return convert_class_to_dict(self.__dict__) class EVMTokenCreateParams: def __init__( @@ -388,15 +369,8 @@ def __init__( self.contractId = contractId self.constructorParams = constructorParams - def serialize(self) -> dict: - output_dict = { - 'contractId': self.contractId, - } - - if self.constructorParams: - output_dict['constructorParams'] = self.constructorParams - - return output_dict + def to_dict(self): + return convert_class_to_dict(self.__dict__) class CreateTokenRequest: def __init__( @@ -413,14 +387,8 @@ def __init__( self.vaultAccountId = vaultAccountId self.createParams = createParams - def serialize(self) -> dict: - return { - 'symbol': self.symbol, - 'name': self.name, - 'blockchainId': self.blockchainId, - 'vaultAccountId': self.vaultAccountId, - 'createParams': self.createParams - } + def to_dict(self): + return convert_class_to_dict(self.__dict__) class ContractDeployRequest(object): def __init__( @@ -433,16 +401,8 @@ def __init__( self.vault_account_id = vault_account_id self.constructorParameters = constructorParameters - def serialize(self) -> dict: - output_dict = { - 'assetId': self.asset_id, - 'vaultAccountId': self.vault_account_id, - } - - if self.constructorParameters: - output_dict['constructorParameters'] = self.constructorParameters - - return output_dict + def to_dict(self): + return convert_class_to_dict(self.__dict__) class AbiFunction(object): def __init__( @@ -463,24 +423,8 @@ def __init__( self.description = description self.returns = returns - def serialize(self) -> dict: - output_dict = { - 'name': self.name, - 'type': self.type, - 'stateMutability': self.stateMutability, - 'inputs': self.inputs, - } - - if self.outputs is not None: - output_dict['outputs'] = self.outputs - - if self.description: - output_dict['description'] = self.description - - if self.returns: - output_dict['returns'] = self.returns - - return output_dict + def to_dict(self): + return convert_class_to_dict(self.__dict__) class ContractUploadRequest(object): def __init__( @@ -505,24 +449,8 @@ def __init__( self.docs = docs self.attributes = attributes - def serialize(self) -> dict: - output_dict = { - 'name': self.name, - 'description': self.description, - 'bytecode': self.bytecode, - 'sourcecode': self.sourcecode, - } - - if self.compilerOutputMetadata: - output_dict['compilerOutputMetadata'] = self.compilerOutputMetadata - - if self.attributes: - output_dict['attributes'] = self.attributes - - if self.vendorId: - output_dict['vendorId'] = self.vendorId - - return output_dict + def to_dict(self): + return convert_class_to_dict(self.__dict__) class PolicyTransactionType(str, Enum): ANY = "*" From a69321a92d535620f31583b2c0d268f9fcd3051c Mon Sep 17 00:00:00 2001 From: orman Date: Tue, 24 Oct 2023 19:33:16 +0300 Subject: [PATCH 4/9] sdk.py --- fireblocks_sdk/sdk.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 925e39d..1fe877b 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -21,7 +21,6 @@ PagedVaultAccountsRequestFilters, TransactionDestination, NFTOwnershipStatusValues, - IssueTokenRequest, GetAssetWalletsFilters, TimePeriod, GetOwnedCollectionsSortValue, @@ -33,6 +32,9 @@ GetSmartTransferFilters, NFTsWalletTypeValues, NFTOwnershipStatusUpdatedPayload, + CreateTokenRequest, + ContractUploadRequest, + ContractDeployRequest, ) from .sdk_token_provider import SdkTokenProvider From bf8407fd36ff8ae25d0e6b83ee01e69bb2659588 Mon Sep 17 00:00:00 2001 From: orman Date: Tue, 24 Oct 2023 19:40:27 +0300 Subject: [PATCH 5/9] SdkTokenProvider --- fireblocks_sdk/sdk.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 1fe877b..9742950 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -19,17 +19,18 @@ UnsignedMessage, FEE_LEVEL, PagedVaultAccountsRequestFilters, + RawMessage, TransactionDestination, - NFTOwnershipStatusValues, GetAssetWalletsFilters, TimePeriod, GetOwnedCollectionsSortValue, - GetOwnedNftsSortValues, - GetNftsSortValues, OrderValues, GetOwnedAssetsSortValues, PolicyRule, GetSmartTransferFilters, + NFTOwnershipStatusValues, + GetOwnedNftsSortValues, + GetNftsSortValues, NFTsWalletTypeValues, NFTOwnershipStatusUpdatedPayload, CreateTokenRequest, From ee1fd37a3dcd473eff68b1f1873277b793b7b10d Mon Sep 17 00:00:00 2001 From: orman Date: Mon, 13 Nov 2023 11:21:59 +0200 Subject: [PATCH 6/9] revert --- fireblocks_sdk/sdk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index 8d9a7ad..f7748c6 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -2046,7 +2046,7 @@ def get_vault_balance_by_asset(self, asset_id=None): return self._get_request(url) def create_raw_transaction( - self, raw_message: RawMessage, source=None, asset_id=None, note=None + self, raw_message, source=None, asset_id=None, note=None ): """Creates a new raw transaction with the specified parameters From 9c3bf43526b417c73f6100e306aa74f79785b792 Mon Sep 17 00:00:00 2001 From: orman Date: Mon, 13 Nov 2023 11:23:07 +0200 Subject: [PATCH 7/9] revert --- fireblocks_sdk/sdk.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fireblocks_sdk/sdk.py b/fireblocks_sdk/sdk.py index f7748c6..dbfe3f0 100644 --- a/fireblocks_sdk/sdk.py +++ b/fireblocks_sdk/sdk.py @@ -19,7 +19,6 @@ UnsignedMessage, FEE_LEVEL, PagedVaultAccountsRequestFilters, - RawMessage, TransactionDestination, GetAssetWalletsFilters, TimePeriod, From bb6e657d1287dfb6939da1ac35e8fc30e0f76480 Mon Sep 17 00:00:00 2001 From: orman Date: Mon, 13 Nov 2023 11:27:24 +0200 Subject: [PATCH 8/9] removing object --- fireblocks_sdk/api_types.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fireblocks_sdk/api_types.py b/fireblocks_sdk/api_types.py index ccb7f00..f86afc6 100644 --- a/fireblocks_sdk/api_types.py +++ b/fireblocks_sdk/api_types.py @@ -460,7 +460,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) -class ContractDeployRequest(object): +class ContractDeployRequest(): def __init__( self, asset_id: str, @@ -474,7 +474,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) -class AbiFunction(object): +class AbiFunction(): def __init__( self, name: str, @@ -496,7 +496,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) -class ContractUploadRequest(object): +class ContractUploadRequest(): def __init__( self, name: str, @@ -521,6 +521,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) + class PolicyTransactionType(str, Enum): ANY = "*" CONTRACT_CALL = "CONTRACT_CALL" From 1f7f41ec6edbf2639c3fc26942776ced3c41a8e8 Mon Sep 17 00:00:00 2001 From: orman Date: Mon, 13 Nov 2023 13:17:44 +0200 Subject: [PATCH 9/9] removing object --- fireblocks_sdk/api_types.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fireblocks_sdk/api_types.py b/fireblocks_sdk/api_types.py index f86afc6..3cea1ce 100644 --- a/fireblocks_sdk/api_types.py +++ b/fireblocks_sdk/api_types.py @@ -8,7 +8,7 @@ def snake_to_camel(snake_case: str): def convert_class_to_dict(class_dict: dict): output_dict = {} - for key, value in class_dict.items(): + for key, value in class_dict.items: if isinstance(value, list): output_dict[snake_to_camel(key)] = [item.to_dict() if hasattr(item, 'to_dict') else item for item in value] @@ -460,7 +460,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) -class ContractDeployRequest(): +class ContractDeployRequest: def __init__( self, asset_id: str, @@ -474,7 +474,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) -class AbiFunction(): +class AbiFunction: def __init__( self, name: str, @@ -496,7 +496,7 @@ def __init__( def to_dict(self): return convert_class_to_dict(self.__dict__) -class ContractUploadRequest(): +class ContractUploadRequest: def __init__( self, name: str,