Un paquete Python diseñado para facilitar la integración y adopción de tokens NFT (ERC721, ERC1155) en aplicaciones de software.
En 1.2.2A1, las clases de salida están integradas pero todas las funciones devuelven RAW
NFTPY permite la interacción con la máquina virtual Ethereum (EVM) a través de RPC para recuperar los detalles del contrato y los titulares de tokens. Proporciona una vía de comunicación directa entre el cliente y la cadena de bloques. Actualmente, los métodos transaccionales no son compatibles, pero se implementarán en futuras actualizaciones. Los siguientes métodos están disponibles:
NFTPY incluye características integrales para interactuar con billeteras Ethereum, incluidos los saldos de consulta, la obtención de precios de la gasolina y la transferencia de NFT. La interfaz de la billetera admite operaciones de solo lectura y transaccional.
Características de la billetera:
NFTPY incluye una interfaz incorporada para interactuar con OpenSea a través de una clave API. Esto permite consultas de paquetes en OpenSea, permitiendo el acceso a la información de precios y otros datos específicos de Opensea. La interfaz OpenSea se puede configurar para centrarse en una sola colección o consulta múltiples colecciones. Los métodos disponibles incluyen:
Clase de Opensea:
Clase de OpensaAcollection:
Clase OpenseaWallet:
NFTPY incluye una interfaz integral para interactuar con rarible a través de una clave API. Esto permite que las consultas en el paquete rarible, permitiendo el acceso a la información NFT, los datos del mercado y más. Los métodos disponibles incluyen:
Clase rarible:
NFTPY permite la creación de cadenas personalizadas con ID de cadena específicos, URL RPC, URL de exploradores y nombres. Esta característica mejora la flexibilidad al permitir la adición de redes blockchain que no están predefinidas en la biblioteca.
Creando una cadena personalizada:
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
)¡Usando nftpy.evm.nft vamos a consultar la colección Pixelmon NFT en Ethereum Mainnet! Primero comenzaremos creando nuestra clase. Vamos a definir nuestra clase con tres argumentos:
import nftpy . EVM as EVM
Pixelmon = EVM . NFT ( "0x32973908FaeE0Bf825A343000fE412ebE56F802A" , abi = EVM . ABI . ERC721 , network = EVM . Chains . ETH )
# Contract Address ABI Network To Query (Ethereum)Ahora que hemos creado nuestro objeto NFT, podemos consultarlo. Comenzaremos con obtener los metadatos de una ficha. Solo estoy poniendo una ficha aleatoria como argumento.
print ( Pixelmon . get_token_metadata ( 5580 ))Después de ejecutar esto, deberíamos ver una salida que se asemeja a esto
{
"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 "
}
Podemos hacer mucho más con esto. Por ejemplo:
print ( Pixelmon . get_token_uri ( 5580 ))
print ( Pixelmon . get_owner ( 5580 ))
print ( Pixelmon . get_balance ( "0x5AF7875766D1a50d144DF63E581c0764f6573487" ))
print ( Pixelmon . get_approved ( 5580 ))Para los tokens ERC1155, puede consultar saldos de múltiples ID de token y verificar las aprobaciones:
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 } ' ) Crear una instancia de NFTWallet requiere una clave privada para el acceso completo o simplemente una dirección para el acceso de solo lectura. También puede especificar múltiples cadenas para conectarse a diferentes redes simultáneamente.
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'} Después de obtener el hash de la transacción, podemos retrasar el programa hasta que la transacción procese en la cadena de bloques.
# 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 Al usar una dirección de solo lectura (es decir, solo proporcionando una dirección y no una clave privada), aún puede interactuar con la información de blockchain para consultar la información, pero no podrá realizar transacciones. Esto es útil para monitorear billeteras y recuperar datos sin la necesidad de credenciales confidenciales.
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}Primero comenzaremos creando nuestra clase con los siguientes argumentos:
Tenga en cuenta : al definir la cadena, debe hacerse con nftpy.OpenSea.OpenSeaChain , ya que la API requiere un formato especial para la definición de la cadena.
from nftpy import OpenSea , OpenSeaChain
opensea = OpenSea ( api_key = 'your-opensea-api-key' , chain = OpenSeaChain . POLYGON )Para consultar las estadísticas de una colección NFT, use el siguiente método:
opensea . get_collection_stats ( 'your-collection-slug' )Después de ejecutar eso, deberíamos ver una salida que se asemeja a esto:
{
"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
}
}Para obtener detalles de una colección, use el siguiente método:
opensea . get_collection ( 'your-collection-slug' )Para obtener detalles de un NFT específico, use el siguiente método:
opensea . get_nft ( '0xYourContractAddress' , '1' )Para enumerar eventos relacionados con un NFT específico, use el siguiente método:
opensea . list_events_by_nft ( '0xYourContractAddress' , '1' )Para enumerar NFTS propiedad de una cuenta específica, use el siguiente método:
opensea . list_nfts_by_account ( '0xYourWalletAddress' )Para administrar una colección, cree una instancia de la clase OpensaAcollection :
from nftpy import OpenSeaCollection
collection = OpenSeaCollection ( collection_name = 'your-collection-name' , api_key = 'your-api-key' )Para obtener detalles de una colección específica, use el siguiente método:
details = collection . get_collection_details ()Para enumerar todos los NFT dentro de una colección, use el siguiente método:
nfts = collection . get_nfts ()Para administrar una billetera, cree una instancia de la clase OpenseaWallet :
from nftpy import OpenSeaWallet
wallet = OpenSeaWallet ( address = 'your-wallet-address' , api_key = 'your-api-key' )Para verificar el equilibrio de la billetera, use el siguiente método:
balance = wallet . get_balance ()Para recuperar todos los NFT propiedad de la billetera, use el siguiente método:
nfts = wallet . get_nfts ()Primero comenzaremos creando nuestra clase con los siguientes argumentos:
Tenga en cuenta : al definir la cadena, debe hacerse con nftpy.rarible.rariblElakain, ya que la API requiere un formato especial para la definición de la cadena.
from nftpy import Rarible , RaribleChain
rarible = Rarible ( api_key = 'your-rarible-api-key' , chain = RaribleChain . ETHEREUM )Para obtener detalles de un elemento específico por su ID, use el siguiente método:
rarible . get_item_by_id ( 'item_id' )Para obtener detalles de múltiples elementos por sus ID, use el siguiente método:
rarible . get_items_by_ids ([ 'item_id1' , 'item_id2' ])Para recuperar información de regalías para un elemento específico por su identificación, use el siguiente método:
rarible . get_item_royalties_by_id ( 'item_id' )Para obtener elementos propiedad de una dirección específica, use el siguiente método:
rarible . get_items_by_owner ( 'owner_address' )Para validar una firma para un conjunto de datos dado, use el siguiente método:
rarible . validate_signature ( data = { 'your' : 'data' })Para obtener los datos de entrada necesarios para generar una firma, use el siguiente método:
rarible . get_signature_input ( data = { 'your' : 'data' })Para codificar datos para el protocolo rarible, use el siguiente método:
rarible . encode_data ( data = { 'your' : 'data' })Para obtener el tipo de cambio de USD para una moneda específica, use el siguiente método:
rarible . get_usd_rate ( 'currency' )Para obtener todas las monedas compatibles, use el siguiente método:
rarible . get_all_currencies ()Para recuperar el saldo de un usuario específico en una moneda especificada, use el siguiente método:
rarible . get_user_balance ( 'user_address' , 'currency' )