Un package Python conçu pour faciliter l'intégration et l'adoption des jetons NFT (ERC721, ERC1155) dans les applications logicielles.
Dans 1.2.2a1, les classes de sortie sont intégrées mais toutes les fonctions renvoient brutes
NFTPY permet l'interaction avec la machine virtuelle Ethereum (EVM) via RPC pour récupérer les détails du contrat et les détenteurs de jetons. Il fournit une voie de communication directe entre le client et la blockchain. Actuellement, les méthodes transactionnelles ne sont pas prises en charge mais seront implémentées dans les futures mises à jour. Les méthodes suivantes sont disponibles:
NFTPY comprend des fonctionnalités complètes pour interagir avec les portefeuilles Ethereum, y compris les soldes de requête, la récupération des prix du gaz et le transfert de NFT. L'interface du portefeuille prend en charge les opérations en lecture seule et transactionnelle.
Caractéristiques du portefeuille:
NFTPY comprend une interface intégrée pour interagir avec OpenSea via une clé API. Cela permet aux requêtes dans le package d'Opensea, permettant l'accès aux informations de tarification et à d'autres données spécifiques à l'OpenSEA. L'interface OpenSea peut être configurée pour se concentrer sur une seule collection ou interroger plusieurs collections. Les méthodes disponibles comprennent:
Classe OpenSea:
Classe OpenseCollection:
Classe OpenSeAwallet:
NFTPY comprend une interface complète pour interagir avec rarement via une clé API. Cela permet aux requêtes dans le package de rarement, permettant l'accès aux informations NFT, aux données du marché, etc. Les méthodes disponibles comprennent:
Classe rarement:
NFTPY permet la création de chaînes personnalisées avec des ID de chaîne spécifiques, des URL RPC, des URL d'explorateur et des noms. Cette fonctionnalité améliore la flexibilité en permettant l'ajout de réseaux de blockchain qui ne sont pas prédéfinis dans la bibliothèque.
Création d'une chaîne personnalisée:
from nftpy . EVM import Chain
custom_chain = Chain (
name = "Ethereum" ,
symbol = "ETH" ,
chain_id = 1 ,
rpc_url = "https://eth.llamarpc.com" ,
explorer_url = "https://etherscan.io" ,
testnet = False
)En utilisant nftpy.evm.nft, nous allons interroger la collection Pixelmon NFT sur Ethereum MainNet! Nous allons d'abord commencer par créer notre classe. Nous allons définir notre classe avec trois arguments:
import nftpy . EVM as EVM
Pixelmon = EVM . NFT ( "0x32973908FaeE0Bf825A343000fE412ebE56F802A" , abi = EVM . ABI . ERC721 , network = EVM . Chains . ETH )
# Contract Address ABI Network To Query (Ethereum)Maintenant que nous avons créé notre objet NFT, nous pouvons l'interroger. Nous allons commencer par obtenir les métadonnées d'un jeton. Je mets juste un jeton aléatoire comme argument.
print ( Pixelmon . get_token_metadata ( 5580 ))Après avoir exécuté cela, nous devrions voir une sortie ressemblant à ce
{
"name" : " Pixelmon #5580 " ,
"image_url" : " https://pixelmon-training-rewards.s3-accelerate.amazonaws.com/0/Moler.jpg " ,
"external_url" : " https://pixelmon.club/ " ,
"reward_bitmask" : 6 ,
"attributes" : [
{ "trait_type" : " Species " , "value" : " Moler " },
{ "trait_type" : " Origin " , "value" : " Earth " },
{ "trait_type" : " Rarity " , "value" : " Uncommon " },
{ "trait_type" : " Evolution " , "value" : " Evolution 1 " },
{ "trait_type" : " Hatched On " , "display_type" : " date " , "value" : 1672272943 }
],
"animation_url" : " https://pixelmon-training-rewards.s3-accelerate.amazonaws.com/6/Moler.mp4 "
}
Nous pouvons en faire beaucoup plus avec cela. Par exemple:
print ( Pixelmon . get_token_uri ( 5580 ))
print ( Pixelmon . get_owner ( 5580 ))
print ( Pixelmon . get_balance ( "0x5AF7875766D1a50d144DF63E581c0764f6573487" ))
print ( Pixelmon . get_approved ( 5580 ))Pour les jetons ERC1155, vous pouvez interroger les soldes pour plusieurs ID de jetons et vérifier les approbations:
erc1155_nft = EVM . NFT ( contract_address = '0xYourERC1155ContractAddress' , network = EVM . Chains . ETH , abi = EVM . ABI . ERC1155 )
wallet_address = '0xYourWalletAddress'
token_id = 1
token_ids = [ 1 , 2 , 3 , 4 , 5 ]
# Get the balance of a specific token owned by the wallet
token_balance = erc1155_nft . get_token_balance ( wallet_address , token_id )
print ( f'Token ID { token_id } Balance: { token_balance } ' )
# Get the balance of multiple tokens owned by the wallet
tokens_balance = erc1155_nft . get_tokens ( wallet_address , token_ids )
print ( f'Tokens Balance: { tokens_balance } ' )
# Check if an address is approved for all tokens (ERC1155)
is_approved_erc1155 = erc1155_nft . is_approved_for_all_erc1155 ( wallet_address , '0xOperatorAddress' )
print ( f'Is Approved For All (ERC1155): { is_approved_erc1155 } ' ) La création d'une instance de NFTWallet nécessite soit une clé privée pour un accès complet, soit une adresse pour l'accès en lecture seule. Vous pouvez également spécifier plusieurs chaînes pour vous connecter simultanément à différents réseaux.
from nftpy import *
# Initialize the wallet with a private key and specify chains
wallet = NFTWallet ( private_key = "0x9015a0eb4c1ceab5f5544ac6e0a75eabb37d7dec26f1dfcb09adb43632330736" , chains = [ Chains . ETH_SEPOLIA ])
# Get the balance of the wallet in Ether
print ( wallet . get_balance ())
# Output: {"Balances": {'Sepolia Testnet': Decimal('0.8341469847291797')}}
# Get the balance of the wallet in Wei
print ( wallet . get_balance_wei ())
# Output: {"Balances": {'Sepolia Testnet': 834146984729179700}}
# Get the current gas price in Wei
print ( wallet . get_gas_price_wei ())
# Output: {'Sepolia Testnet': 20000000000}
# Get the current gas price in Gwei
print ( wallet . get_gas_price_gwei ())
# Output: {'Sepolia Testnet': Decimal('20')}
# Transfer an NFT to another wallet
to_wallet = "0xa693190103733280E23055BE70C838d9b6708b9a"
contract = "0x725Ea5eEA79F1515e34A921b83D4307b325cC8b9"
gas_price = wallet . get_gas_price_gwei ()[ "Sepolia Testnet" ]
gas_limit = 65000 # Disclaimer! Gas Limit set for Sepolia, WILL fail on other networks
# Transfer the NFT and get the transaction hash and explorer URL
print ( wallet . transfer_nft ( to = to_wallet , contract_address = contract , amount = 1 , gas_limit = gas_limit ,
gas_price_gwei = gas_price , abi = ABI . OPENSEA_ERC1155 , token_id = 1 ))
# Output: {'transaction_hash': '0x18a076a4a30c1cc014b1620aa907db06a04e8a709bda47e9beed2233a23f532f', 'explorer_url': 'https://sepolia.etherscan.io/tx/0x18a076a4a30c1cc014b1620aa907db06a04e8a709bda47e9beed2233a23f532f'} Après avoir obtenu le hachage de transaction, nous pouvons avoir le retard du programme jusqu'à ce que les processus de transaction sur la blockchain.
# Wait until the transaction is processed
transaction_hash = "0xcd74c93bbf42cae24f329c45da995bde7e1c89ea848855d04db516c6460eda02"
print ( wallet . wait_until_transaction_processes ( transaction_hash , chain = Chains . ETH_SEPOLIA ))
# Output: True | When the transaction fully processes on the blockchain Lorsque vous utilisez une adresse en lecture seule (c'est-à-dire, en fournissant une adresse et non une clé privée), vous pouvez toujours interagir avec la blockchain pour interroger les informations, mais vous ne pourrez pas effectuer de transactions. Ceci est utile pour surveiller les portefeuilles et récupérer les données sans avoir besoin de références sensibles.
from nftpy import *
# Initialize the wallet with an address and specify chains
readonly_wallet = NFTWallet ( address = "0xYourReadOnlyWalletAddress" , chains = [ Chains . ETH_SEPOLIA ])
# Get the balance of the wallet in Ether
print ( readonly_wallet . get_balance ())
# Output: {"Balances": {'Sepolia Testnet': Decimal('0.123456789012345678')}}
# Get the balance of the wallet in Wei
print ( readonly_wallet . get_balance_wei ())
# Output: {"Balances": {'Sepolia Testnet': 123456789012345678}}
# Get the current gas price in Wei
print ( readonly_wallet . get_gas_price_wei ())
# Output: {'Sepolia Testnet': 20000000000}Nous allons d'abord commencer par créer notre classe avec les arguments suivants:
Veuillez noter : Lors de la définition de la chaîne, cela doit être fait avec nftpy.OpenSea.OpenSeaChain car l'API nécessite un format spécial pour la définition de la chaîne.
from nftpy import OpenSea , OpenSeaChain
opensea = OpenSea ( api_key = 'your-opensea-api-key' , chain = OpenSeaChain . POLYGON )Pour interroger les statistiques d'une collection NFT, utilisez la méthode suivante:
opensea . get_collection_stats ( 'your-collection-slug' )Après avoir exécuté cela, nous devrions voir une sortie ressemblant à ceci:
{
"stats" : {
"one_day_volume" : 12.34 ,
"one_day_change" : 0.56 ,
"one_day_sales" : 78 ,
"one_day_average_price" : 0.16 ,
"total_volume" : 1234.56 ,
"total_sales" : 7890 ,
"total_supply" : 10000 ,
"count" : 10000 ,
"num_owners" : 2345 ,
"average_price" : 0.123 ,
"num_reports" : 0 ,
"market_cap" : 4567.89 ,
"floor_price" : 0.123
}
}Pour récupérer les détails d'une collection, utilisez la méthode suivante:
opensea . get_collection ( 'your-collection-slug' )Pour obtenir les détails d'une NFT spécifique, utilisez la méthode suivante:
opensea . get_nft ( '0xYourContractAddress' , '1' )Pour répertorier les événements liés à une NFT spécifique, utilisez la méthode suivante:
opensea . list_events_by_nft ( '0xYourContractAddress' , '1' )Pour répertorier les NFT appartenant à un compte spécifique, utilisez la méthode suivante:
opensea . list_nfts_by_account ( '0xYourWalletAddress' )Pour gérer une collection, créez une instance de la classe OpenSeCollection :
from nftpy import OpenSeaCollection
collection = OpenSeaCollection ( collection_name = 'your-collection-name' , api_key = 'your-api-key' )Pour obtenir des détails d'une collection spécifique, utilisez la méthode suivante:
details = collection . get_collection_details ()Pour répertorier toutes les NFT dans une collection, utilisez la méthode suivante:
nfts = collection . get_nfts ()Pour gérer un portefeuille, créez une instance de la classe OpenSeAwallet :
from nftpy import OpenSeaWallet
wallet = OpenSeaWallet ( address = 'your-wallet-address' , api_key = 'your-api-key' )Pour vérifier l'équilibre du portefeuille, utilisez la méthode suivante:
balance = wallet . get_balance ()Pour récupérer toutes les NFT appartenant au portefeuille, utilisez la méthode suivante:
nfts = wallet . get_nfts ()Nous allons d'abord commencer par créer notre classe avec les arguments suivants:
Veuillez noter : Lors de la définition de la chaîne, cela doit être fait avec nftpy.rarible.rariblechain car l'API nécessite un format spécial pour la définition de la chaîne.
from nftpy import Rarible , RaribleChain
rarible = Rarible ( api_key = 'your-rarible-api-key' , chain = RaribleChain . ETHEREUM )Pour récupérer les détails d'un élément spécifique par son identifiant, utilisez la méthode suivante:
rarible . get_item_by_id ( 'item_id' )Pour récupérer les détails de plusieurs éléments par leurs ID, utilisez la méthode suivante:
rarible . get_items_by_ids ([ 'item_id1' , 'item_id2' ])Pour récupérer les informations de redevance pour un élément spécifique par son identifiant, utilisez la méthode suivante:
rarible . get_item_royalties_by_id ( 'item_id' )Pour récupérer les éléments appartenant à une adresse spécifique, utilisez la méthode suivante:
rarible . get_items_by_owner ( 'owner_address' )Pour valider une signature pour un ensemble de données donné, utilisez la méthode suivante:
rarible . validate_signature ( data = { 'your' : 'data' })Pour obtenir des données d'entrée requises pour générer une signature, utilisez la méthode suivante:
rarible . get_signature_input ( data = { 'your' : 'data' })Pour coder des données pour le protocole rarement, utilisez la méthode suivante:
rarible . encode_data ( data = { 'your' : 'data' })Pour obtenir le taux de change USD pour une devise spécifique, utilisez la méthode suivante:
rarible . get_usd_rate ( 'currency' )Pour récupérer toutes les devises prises en charge, utilisez la méthode suivante:
rarible . get_all_currencies ()Pour récupérer le solde d'un utilisateur spécifique dans une devise spécifiée, utilisez la méthode suivante:
rarible . get_user_balance ( 'user_address' , 'currency' )