From 291511262b0777ffc7dc92efa18ed8ddc5680542 Mon Sep 17 00:00:00 2001 From: Pratham Prasoon <42303128+PrasoonPratham@users.noreply.github.com> Date: Fri, 12 Nov 2021 00:02:43 +0530 Subject: [PATCH 1/5] NFT.py all methods commented --- .gitignore | 2 + thirdweb/modules/nft.py | 126 ++++++++++++++++++++++++---------------- 2 files changed, 78 insertions(+), 50 deletions(-) diff --git a/.gitignore b/.gitignore index 803bd68e..9122e269 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ examples/test.py **/*.pyc *.egg-info + +./docs diff --git a/thirdweb/modules/nft.py b/thirdweb/modules/nft.py index 8622e92f..e6ba0137 100644 --- a/thirdweb/modules/nft.py +++ b/thirdweb/modules/nft.py @@ -12,28 +12,42 @@ class NftModule(BaseModule): - """ + """ NFT Methods """ address: str __abi_module: NFT + def __init__(self, address: str, client: Web3): + """ + Initializing the class attributes + """ super().__init__() self.address = address + """ + NFT module contract address [Dashboard: Project ➝ NFT Module] + """ + self.__abi_module = NFT(client, address) + """ + The ABI makes calls the EVM. Client is defaul 'Web3' and Address is nft module contract address. + """ def mint(self, arg: MintArg) -> NftType: """ - Mints a new token + Mints a new token. + Arguments passed: + Returns the 'NftMetadata(name,description,image,properties,id,uri) """ return self.mint_to(self.get_signer_address(), arg) + def mint_to( - self, - to_address: str, - arg: MintArg, + self, + to_address: str, + arg: MintArg, ) -> NftType: """ Mints a new token @@ -46,20 +60,21 @@ def mint_to( storage = self.get_storage() meta = { - 'name': arg.name, - 'description': arg.description, - 'image': arg.image_uri, - 'properties': final_properties + "name": arg.name, + "description": arg.description, + "image": arg.image_uri, + "properties": final_properties, } - uri = storage.upload(json.dumps(meta), self.address, - self.get_signer_address()) + uri = storage.upload(json.dumps(meta), self.address, self.get_signer_address()) tx = self.__abi_module.mint_nft.build_transaction( - to_address, uri, self.get_transact_opts()) + to_address, uri, self.get_transact_opts() + ) receipt = self.execute_tx(tx) result = self.__abi_module.get_minted_event( - tx_hash=receipt.transactionHash.hex()) - token_id = result[0]['args']['tokenId'] + tx_hash=receipt.transactionHash.hex() + ) + token_id = result[0]["args"]["tokenId"] return self.get(token_id) def total_supply(self) -> int: @@ -85,8 +100,7 @@ def __get_metadata_uri(self, token_id: int): """ uri = self.__abi_module.token_uri.call(token_id) if uri == "": - raise Exception( - "Could not find NFT metadata, are you sure it exists?") + raise Exception("Could not find NFT metadata, are you sure it exists?") return uri def mint_batch(self, args: List[MintArg]): @@ -99,29 +113,41 @@ def mint_batch_to(self, to_address: str, args: List[MintArg]): """ Mints a batch of tokens to the given address """ - uris = [self.get_storage().upload(json.dumps({ - 'name': arg.name, - 'description': arg.description, - 'image': arg.image_uri, - 'properties': arg.properties if arg.properties is not None else {} - }), self.address, self.get_signer_address()) for arg in args] + uris = [ + self.get_storage().upload( + json.dumps( + { + "name": arg.name, + "description": arg.description, + "image": arg.image_uri, + "properties": arg.properties + if arg.properties is not None + else {}, + } + ), + self.address, + self.get_signer_address(), + ) + for arg in args + ] tx = self.__abi_module.mint_nft_batch.build_transaction( - to_address, uris, self.get_transact_opts()) + to_address, uris, self.get_transact_opts() + ) receipt = self.execute_tx(tx) result = self.__abi_module.get_minted_batch_event( - tx_hash=receipt.transactionHash.hex()) - token_ids = result[0]['args']['tokenIds'] + tx_hash=receipt.transactionHash.hex() + ) + token_ids = result[0]["args"]["tokenIds"] return [self.get(i) for i in token_ids] def burn(self, token_id: int): - """ + """ Burns a given token """ tx = self.__abi_module.burn.build_transaction( - token_id, - self.get_transact_opts() + token_id, self.get_transact_opts() ) self.execute_tx(tx) @@ -130,10 +156,7 @@ def transfer_from(self, from_address: str, to_address: str, token_id: int): Transfers a token from one address to another """ tx = self.__abi_module.transfer_from.build_transaction( - from_address, - to_address, - token_id, - self.get_transact_opts() + from_address, to_address, token_id, self.get_transact_opts() ) self.execute_tx(tx) @@ -142,10 +165,7 @@ def transfer(self, to_address: str, token_id: int): Transfers NFT from the current signers wallet to another wallet """ tx = self.__abi_module.safe_transfer_from1.build_transaction( - self.get_signer_address(), - to_address, - token_id, - self.get_transact_opts() + self.get_signer_address(), to_address, token_id, self.get_transact_opts() ) self.execute_tx(tx) @@ -154,7 +174,8 @@ def set_royalty_bps(self, amount: int): Sets the royalty percentage for the NFT """ tx = self.__abi_module.set_royalty_bps.build_transaction( - amount, self.get_transact_opts()) + amount, self.get_transact_opts() + ) self.execute_tx(tx) @@ -174,8 +195,9 @@ def get_owned(self, address: str = "") -> List[NftType]: address = self.get_signer_address() balance = self.__abi_module.balance_of.call(address) - owned_tokens = [self.__token_of_owner_by_index( - address, i) for i in range(balance)] + owned_tokens = [ + self.__token_of_owner_by_index(address, i) for i in range(balance) + ] return [self.get(i) for i in owned_tokens] def __token_of_owner_by_index(self, address: str, token_id: int) -> int: @@ -221,13 +243,16 @@ def set_approval(self, operator: str, approved: bool = True): Sets approval for specified operator, defaults to grant approval """ tx = self.__abi_module.set_approval_for_all.build_transaction( - operator, approved, self.get_transact_opts()) + operator, approved, self.get_transact_opts() + ) self.execute_tx(tx) def set_restricted_transfer(self, restricted: bool = True): - self.execute_tx(self.__abi_module.set_restricted_transfer.build_transaction( - restricted, self.get_transact_opts() - )) + self.execute_tx( + self.__abi_module.set_restricted_transfer.build_transaction( + restricted, self.get_transact_opts() + ) + ) def get_with_owner(self, token_id: int, owner: str): """ @@ -235,19 +260,18 @@ def get_with_owner(self, token_id: int, owner: str): """ owner = self.owner_of(token_id) meta = self.get_metadata(token_id) - return { - owner: owner, - meta: meta - } + return {owner: owner, meta: meta} def set_module_metadata(self, metadata: str): """ Sets the metadata for the module """ uri = self.get_storage().upload_metadata( - metadata, self.address, self.get_signer_address()) + metadata, self.address, self.get_signer_address() + ) tx = self.__abi_module.set_contract_uri.build_transaction( - uri, self.get_transact_opts()) + uri, self.get_transact_opts() + ) self.execute_tx(tx) def set_restricted_transfer(self, restricted: bool = False): @@ -256,8 +280,10 @@ def set_restricted_transfer(self, restricted: bool = False): """ tx = self.__abi_module.set_restricted_transfer.build_transaction( - restricted, self.get_transact_opts()) + restricted, self.get_transact_opts() + ) self.execute_tx(tx) def get_abi_module(self) -> NFT: + """To be removed""" return self.__abi_module From 80621e62fa6fbb7becdca97c44b746e601f22c36 Mon Sep 17 00:00:00 2001 From: Pratham Prasoon <42303128+PrasoonPratham@users.noreply.github.com> Date: Fri, 12 Nov 2021 00:44:36 +0530 Subject: [PATCH 2/5] More comments in NFT.py --- .gitignore | 2 +- thirdweb/modules/nft.py | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 9122e269..84e2adea 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,4 @@ examples/test.py *.egg-info -./docs +./docs/* diff --git a/thirdweb/modules/nft.py b/thirdweb/modules/nft.py index e6ba0137..6c281c82 100644 --- a/thirdweb/modules/nft.py +++ b/thirdweb/modules/nft.py @@ -27,19 +27,19 @@ def __init__(self, address: str, client: Web3): super().__init__() self.address = address """ - NFT module contract address [Dashboard: Project ➝ NFT Module] + NFT module contract address [https://thirdweb.com/: Dashboard: Project ➝ NFT Module] """ self.__abi_module = NFT(client, address) """ - The ABI makes calls the EVM. Client is defaul 'Web3' and Address is nft module contract address. + The ABI makes calls the EVM. Client is default 'Web3' and Address is nft module contract address. """ def mint(self, arg: MintArg) -> NftType: """ - Mints a new token. - Arguments passed: - Returns the 'NftMetadata(name,description,image,properties,id,uri) + - Mints a new token. + - Arguments passed: Note, a class is used -> MintArg(name, description, image_uri, properties) *Preferrably, using a link + - Returns the 'NftMetadata(name,description,image,properties,id,uri) """ return self.mint_to(self.get_signer_address(), arg) @@ -203,15 +203,25 @@ def get_owned(self, address: str = "") -> List[NftType]: def __token_of_owner_by_index(self, address: str, token_id: int) -> int: return self.__abi_module.token_of_owner_by_index.call(address, token_id) + def balance(self) -> int: """ Returns balance of the current signers wallet + - Arguments: none. Method refers to nft module class. + - Use-case: Use this method if you want to use the currently connected wallet + - Dashboard: Project ➝ NFT Module ➝ Total amount of NFT's + """ + return self.__abi_module.balance_of.call(self.get_signer_address()) + def balance_of(self, address: str) -> int: """ - Returns balance of the given address + Returns balance of the given addressss + - Arguments: Pass the address of which to check the balance + - Use-case: Use this method if you don't want to use the connected wallet, but want to check another wallet. + - Dashboard: Project ➝ NFT Module ➝ Total amount of NFT's """ return self.__abi_module.balance_of.call(address) From d8b245b471b04a6504b189386cd0dc0dc8214c6e Mon Sep 17 00:00:00 2001 From: Pratham Prasoon <42303128+PrasoonPratham@users.noreply.github.com> Date: Fri, 12 Nov 2021 02:27:04 +0530 Subject: [PATCH 3/5] Update nft.py --- thirdweb/modules/nft.py | 1 - 1 file changed, 1 deletion(-) diff --git a/thirdweb/modules/nft.py b/thirdweb/modules/nft.py index 6c281c82..30e4ac1b 100644 --- a/thirdweb/modules/nft.py +++ b/thirdweb/modules/nft.py @@ -295,5 +295,4 @@ def set_restricted_transfer(self, restricted: bool = False): self.execute_tx(tx) def get_abi_module(self) -> NFT: - """To be removed""" return self.__abi_module From 006a1f2b24ac9d3cdb0ef9f4b7b1934cd5a0926c Mon Sep 17 00:00:00 2001 From: ayush <62694274+ayshptk@users.noreply.github.com> Date: Sat, 13 Nov 2021 02:24:34 +0530 Subject: [PATCH 4/5] Update nft.py --- thirdweb/modules/nft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thirdweb/modules/nft.py b/thirdweb/modules/nft.py index 30e4ac1b..35651fe0 100644 --- a/thirdweb/modules/nft.py +++ b/thirdweb/modules/nft.py @@ -38,7 +38,7 @@ def __init__(self, address: str, client: Web3): def mint(self, arg: MintArg) -> NftType: """ - Mints a new token. - - Arguments passed: Note, a class is used -> MintArg(name, description, image_uri, properties) *Preferrably, using a link + - Arguments passed: Note, a class is used -> MintArg(name, description, image_uri, properties) - Returns the 'NftMetadata(name,description,image,properties,id,uri) """ return self.mint_to(self.get_signer_address(), arg) From fbb55e02da73d4a3b177fc55978552cd7ba43b02 Mon Sep 17 00:00:00 2001 From: Pratham Prasoon <42303128+PrasoonPratham@users.noreply.github.com> Date: Sat, 13 Nov 2021 02:36:56 +0530 Subject: [PATCH 5/5] Changes to comments --- thirdweb/modules/nft.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/thirdweb/modules/nft.py b/thirdweb/modules/nft.py index 35651fe0..09c0157f 100644 --- a/thirdweb/modules/nft.py +++ b/thirdweb/modules/nft.py @@ -37,9 +37,9 @@ def __init__(self, address: str, client: Web3): def mint(self, arg: MintArg) -> NftType: """ - - Mints a new token. + Mints a new token to the signer. - Arguments passed: Note, a class is used -> MintArg(name, description, image_uri, properties) - - Returns the 'NftMetadata(name,description,image,properties,id,uri) + - Returns the `NftMetadata(name,description,image,properties,id,uri)` *Preferrably, using a link """ return self.mint_to(self.get_signer_address(), arg) @@ -50,7 +50,9 @@ def mint_to( arg: MintArg, ) -> NftType: """ - Mints a new token + Mints a new token to an address + - Arguments passed: `to_address` and a class -> `MintArg(name, description, image_uri, properties)` + - Returns the `NftMetadata(name,description,image,properties,id,uri)` *Preferrably, using a link """ final_properties: Dict if arg.properties is None: