حزمة Python مصممة لتسهيل تكامل وتبني NFT (ERC721 ، ERC1155) في تطبيقات البرمجيات.
في 1.2.2a1 ، يتم دمج فئات الإخراج ولكن جميع الوظائف ترجع الخام
يتيح NFTPY التفاعل مع الجهاز الظاهري Ethereum (EVM) من خلال RPC لاسترداد تفاصيل العقد وحاملي الرمز المميز. يوفر مسار اتصال مباشر بين العميل و blockchain. حاليًا ، لا يتم دعم أساليب المعاملات ولكن سيتم تنفيذها في التحديثات المستقبلية. الأساليب التالية متوفرة:
يتضمن NFTPY ميزات شاملة للتفاعل مع محافظ Ethereum ، بما في ذلك الأرصدة الاستعلام ، وجلب أسعار الغاز ، ونقل NFTs. تدعم واجهة المحفظة العمليات القراءة فقط والمعاملات.
ميزات المحفظة:
يتضمن NFTPY واجهة مدمجة للتفاعل مع Opensea عبر مفتاح API. يسمح ذلك بالاستعلامات داخل الحزمة إلى Opensea ، مما يتيح الوصول إلى معلومات التسعير وغيرها من البيانات الخاصة بـ OpenSea. يمكن تكوين واجهة OpenSea للتركيز على مجموعة واحدة أو الاستعلام عن مجموعات متعددة. تتضمن الطرق المتاحة:
فئة Opensea:
فئة OpenSeacollection:
فئة OpenSeawallet:
يتضمن NFTPY واجهة شاملة للتفاعل مع نادرة عبر مفتاح API. يسمح ذلك بالاستعلامات داخل الحزمة إلى نادرة ، مما يتيح الوصول إلى معلومات NFT وبيانات السوق والمزيد. تتضمن الطرق المتاحة:
فئة نادرة:
يسمح NFTPY بإنشاء سلاسل مخصصة مع معرفات سلسلة محددة وعنوان URL RPC وعناوين URL و Explorer والأسماء. تعزز هذه الميزة المرونة من خلال تمكين إضافة شبكات blockchain التي لم يتم تحديدها مسبقًا في المكتبة.
إنشاء سلسلة مخصصة:
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
)باستخدام nftpy.evm.nft ، سنقوم بالاستعلام عن مجموعة Pixelmon NFT على Ethereum Mainnet! سنبدأ أولاً عن طريق إنشاء فصلنا. سنقوم بتحديد فصلنا بثلاث حجج:
import nftpy . EVM as EVM
Pixelmon = EVM . NFT ( "0x32973908FaeE0Bf825A343000fE412ebE56F802A" , abi = EVM . ABI . ERC721 , network = EVM . Chains . ETH )
# Contract Address ABI Network To Query (Ethereum)الآن بعد أن أنشأنا كائن NFT الخاص بنا ، يمكننا الاستعلام عنه. سنبدأ بالحصول على بيانات تعريف رمزية. أنا فقط أضع رمزًا عشوائيًا كحجة.
print ( Pixelmon . get_token_metadata ( 5580 ))بعد تشغيل هذا ، يجب أن نرى إخراجًا يشبه هذا
{
"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 "
}
يمكننا أن نفعل الكثير مع هذا. على سبيل المثال:
print ( Pixelmon . get_token_uri ( 5580 ))
print ( Pixelmon . get_owner ( 5580 ))
print ( Pixelmon . get_balance ( "0x5AF7875766D1a50d144DF63E581c0764f6573487" ))
print ( Pixelmon . get_approved ( 5580 ))لرموز ERC1155 ، يمكنك الاستعلام عن أرصدة معرفات رمزية متعددة والتحقق من الموافقات:
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 } ' ) يتطلب إنشاء مثيل لـ NFTWallet إما مفتاحًا خاصًا للوصول الكامل أو مجرد عنوان للوصول إلى القراءة فقط. يمكنك أيضًا تحديد سلاسل متعددة للاتصال بشبكات مختلفة في وقت واحد.
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'} بعد أن نحصل على تجزئة المعاملة ، يمكننا الحصول على تأخير البرنامج حتى عمليات المعاملة على 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 عند استخدام عنوان للقراءة فقط (أي فقط توفير عنوان وليس مفتاحًا خاصًا) ، لا يزال بإمكانك التفاعل مع blockchain للاستعلام عن معلومات ، لكنك لن تتمكن من إجراء المعاملات. هذا مفيد لمراقبة المحافظ واسترداد البيانات دون الحاجة إلى بيانات اعتماد حساسة.
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}سنبدأ أولاً بإنشاء فصلنا مع الحجج التالية:
يرجى ملاحظة : عند تحديد السلسلة ، يجب أن يتم مع nftpy.OpenSea.OpenSeaChain حيث أن واجهة برمجة التطبيقات تتطلب تنسيقًا خاصًا لتعريف السلسلة.
from nftpy import OpenSea , OpenSeaChain
opensea = OpenSea ( api_key = 'your-opensea-api-key' , chain = OpenSeaChain . POLYGON )للاستعلام عن إحصائيات مجموعة NFT ، استخدم الطريقة التالية:
opensea . get_collection_stats ( 'your-collection-slug' )بعد تشغيل ذلك ، يجب أن نرى إخراجًا يشبه هذا:
{
"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
}
}لجلب تفاصيل المجموعة ، استخدم الطريقة التالية:
opensea . get_collection ( 'your-collection-slug' )للحصول على تفاصيل NFT محددة ، استخدم الطريقة التالية:
opensea . get_nft ( '0xYourContractAddress' , '1' )لسرد الأحداث المتعلقة بـ NFT محددة ، استخدم الطريقة التالية:
opensea . list_events_by_nft ( '0xYourContractAddress' , '1' )لسرد NFTS مملوكة لحساب معين ، استخدم الطريقة التالية:
opensea . list_nfts_by_account ( '0xYourWalletAddress' )لإدارة مجموعة ، قم بإنشاء مثيل لفئة OpenSeAcollection :
from nftpy import OpenSeaCollection
collection = OpenSeaCollection ( collection_name = 'your-collection-name' , api_key = 'your-api-key' )للحصول على تفاصيل مجموعة معينة ، استخدم الطريقة التالية:
details = collection . get_collection_details ()لسرد جميع NFTS داخل المجموعة ، استخدم الطريقة التالية:
nfts = collection . get_nfts ()لإدارة محفظة ، قم بإنشاء مثيل لفئة OpenSeawallet :
from nftpy import OpenSeaWallet
wallet = OpenSeaWallet ( address = 'your-wallet-address' , api_key = 'your-api-key' )للتحقق من توازن المحفظة ، استخدم الطريقة التالية:
balance = wallet . get_balance ()لاسترداد جميع NFTs المملوكة للمحفظة ، استخدم الطريقة التالية:
nfts = wallet . get_nfts ()سنبدأ أولاً بإنشاء فصلنا مع الحجج التالية:
يرجى ملاحظة : عند تحديد السلسلة ، يجب أن يتم ذلك باستخدام nftpy.rarible.rariblechain حيث يتطلب API تنسيقًا خاصًا لتعريف السلسلة.
from nftpy import Rarible , RaribleChain
rarible = Rarible ( api_key = 'your-rarible-api-key' , chain = RaribleChain . ETHEREUM )لجلب تفاصيل عنصر معين حسب معرفه ، استخدم الطريقة التالية:
rarible . get_item_by_id ( 'item_id' )لجلب تفاصيل عناصر متعددة عن طريق معرفاتها ، استخدم الطريقة التالية:
rarible . get_items_by_ids ([ 'item_id1' , 'item_id2' ])لاسترداد معلومات الملوك لعنصر معين عن طريق معرفه ، استخدم الطريقة التالية:
rarible . get_item_royalties_by_id ( 'item_id' )لجلب العناصر التي يملكها عنوان معين ، استخدم الطريقة التالية:
rarible . get_items_by_owner ( 'owner_address' )للتحقق من توقيع مجموعة بيانات معينة ، استخدم الطريقة التالية:
rarible . validate_signature ( data = { 'your' : 'data' })للحصول على بيانات الإدخال المطلوبة لإنشاء توقيع ، استخدم الطريقة التالية:
rarible . get_signature_input ( data = { 'your' : 'data' })لتشفير البيانات للبروتوكول النادر ، استخدم الطريقة التالية:
rarible . encode_data ( data = { 'your' : 'data' })للحصول على سعر صرف الدولار للدولار الأمريكي لعملة معينة ، استخدم الطريقة التالية:
rarible . get_usd_rate ( 'currency' )لجلب جميع العملات المدعومة ، استخدم الطريقة التالية:
rarible . get_all_currencies ()لاسترداد رصيد مستخدم معين بعملة محددة ، استخدم الطريقة التالية:
rarible . get_user_balance ( 'user_address' , 'currency' )