Ruka kwenda kwenye maudhui makuu
Change page

Kiwango cha Tokeni isiyoweza kubadilishwa cha ERC-721

Ukurasa ulihaririwa mwisho: 14 Februari 2026

Utangulizi

Tokeni isiyoweza kubadilishwa ni nini?

Tokeni isiyoweza kubadilishwa (NFT) hutumika kutambua kitu au mtu kwa njia ya kipekee. Aina hii ya Tokeni inafaa sana kutumika kwenye majukwaa yanayotoa vitu vya kukusanywa, funguo za ufikiaji, tiketi za bahati nasibu, viti vilivyo na nambari kwa ajili ya matamasha na mechi za michezo, n.k. Aina hii maalum ya Tokeni ina uwezekano wa ajabu kwa hivyo inastahili Kiwango kinachofaa, ERC-721 ilikuja kutatua hilo!

ERC-721 ni nini?

ERC-721 inaleta kiwango cha NFT, kwa maneno mengine, aina hii ya Tokeni ni ya kipekee na inaweza kuwa na thamani tofauti kuliko Tokeni nyingine kutoka kwa Mkataba-erevu uleule, labda kutokana na umri wake, uhaba wake au hata kitu kingine kama mwonekano wake. Subiri, mwonekano?

Ndiyo! NFT zote zina kigezo cha uint256 kinachoitwa tokenId, kwa hivyo kwa Mkataba wowote wa ERC-721, jozi ya anwani ya mkataba, uint256 tokenId lazima iwe ya kipekee duniani kote. Kwa kusema hivyo, mfumo mtawanyo wa kimamlaka unaweza kuwa na "kigeuzi" kinachotumia tokenId kama ingizo na kutoa picha ya kitu kizuri, kama mazombi, silaha, ujuzi au paka wa ajabu!

Mahitaji ya awali

Mwili

ERC-721 (Ombi la Maoni la Ethereum 721), iliyopendekezwa na William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs mnamo Januari 2018, ni Kiwango cha Tokeni isiyoweza kubadilishwa kinachotekeleza API ya tokeni ndani ya Mikataba-erevu.

Hutoa utendaji kama vile kuhamisha tokeni kutoka akaunti moja hadi nyingine, kupata salio la sasa la tokeni la akaunti, kupata mmiliki wa tokeni maalum na pia jumla ya usambazaji wa tokeni inayopatikana kwenye mtandao. Kando na hizi, pia ina utendaji mwingine kama kuidhinisha kwamba kiasi cha tokeni kutoka kwa akaunti kinaweza kuhamishwa na akaunti ya wahusika wengine.

Ikiwa Mkataba-erevu unatekeleza mbinu na matukio yafuatayo unaweza kuitwa Mkataba wa Tokeni isiyoweza kubadilishwa wa ERC-721 na, mara tu utakapowekwa, utakuwa na jukumu la kufuatilia tokeni zilizoundwa kwenye Ethereum.

Kutoka EIP-721opens in a new tab:

Mbinu

1 function balanceOf(address _owner) external view returns (uint256);
2 function ownerOf(uint256 _tokenId) external view returns (address);
3 function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
4 function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
5 function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
6 function approve(address _approved, uint256 _tokenId) external payable;
7 function setApprovalForAll(address _operator, bool _approved) external;
8 function getApproved(uint256 _tokenId) external view returns (address);
9 function isApprovedForAll(address _owner, address _operator) external view returns (bool);
Onyesha yote

Matukio

1 event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
2 event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
3 event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

Mifano

Hebu tuone jinsi Kiwango kilivyo muhimu sana kurahisisha mambo kwetu kukagua Mkataba wowote wa Tokeni wa ERC-721 kwenye Ethereum. Tunahitaji tu Kiolesura cha Binary cha Programu ya Mkataba (ABI) ili kuunda kiolesura cha Tokeni yoyote ya ERC-721. Ama unaweza Tazama chini kutumia ABI rahisi, kuifanya mfano wa msuguano mdogo.

Mfano wa Web3.py

Kwanza, hakikisha umesakinisha maktaba ya Python ya Web3.pyopens in a new tab:

1pip install web3
1from web3 import Web3
2from web3._utils.events import get_event_data
3
4
5w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))
6
7ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # Mkataba wa CryptoKitties
8
9acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # Mnada wa Mauzo wa CryptoKitties
10
11# Hiki ni Kiolesura cha Binary cha Programu ya Mkataba (ABI) kilichorahisishwa cha Mkataba wa NFT wa ERC-721.
12# Kitaonyesha tu mbinu: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply()
13simplified_abi = [
14 {
15 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],
16 'name': 'balanceOf',
17 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
18 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
19 },
20 {
21 'inputs': [],
22 'name': 'name',
23 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
24 'stateMutability': 'view', 'type': 'function', 'constant': True
25 },
26 {
27 'inputs': [{'internalType': 'uint256', 'name': 'tokenId', 'type': 'uint256'}],
28 'name': 'ownerOf',
29 'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
30 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
31 },
32 {
33 'inputs': [],
34 'name': 'symbol',
35 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
36 'stateMutability': 'view', 'type': 'function', 'constant': True
37 },
38 {
39 'inputs': [],
40 'name': 'totalSupply',
41 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
42 'stateMutability': 'view', 'type': 'function', 'constant': True
43 },
44]
45
46ck_extra_abi = [
47 {
48 'inputs': [],
49 'name': 'pregnantKitties',
50 'outputs': [{'name': '', 'type': 'uint256'}],
51 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
52 },
53 {
54 'inputs': [{'name': '_kittyId', 'type': 'uint256'}],
55 'name': 'isPregnant',
56 'outputs': [{'name': '', 'type': 'bool'}],
57 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
58 }
59]
60
61ck_contract = w3.eth.contract(address=w3.to_checksum_address(ck_token_addr), abi=simplified_abi+ck_extra_abi)
62name = ck_contract.functions.name().call()
63symbol = ck_contract.functions.symbol().call()
64kitties_auctions = ck_contract.functions.balanceOf(acc_address).call()
65print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}")
66
67pregnant_kitties = ck_contract.functions.pregnantKitties().call()
68print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}")
69
70# Kutumia ABI ya Tukio la Uhamisho kupata maelezo kuhusu Paka waliohamishwa.
71tx_event_abi = {
72 'anonymous': False,
73 'inputs': [
74 {'indexed': False, 'name': 'from', 'type': 'address'},
75 {'indexed': False, 'name': 'to', 'type': 'address'},
76 {'indexed': False, 'name': 'tokenId', 'type': 'uint256'}],
77 'name': 'Transfer',
78 'type': 'event'
79}
80
81# Tunahitaji saini ya tukio ili kuchuja kumbukumbu
82event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex()
83
84logs = w3.eth.get_logs({
85 "fromBlock": w3.eth.block_number - 120,
86 "address": w3.to_checksum_address(ck_token_addr),
87 "topics": [event_signature]
88})
89
90# Kumbuka:
91# - Ongeza idadi ya bloku kutoka 120 ikiwa hakuna tukio la Uhamisho linalorejeshwa.
92# - Ikiwa haukupata tukio lolote la Uhamisho unaweza pia kujaribu kupata tokenId kwenye:
93# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events
94# Bofya ili kupanua kumbukumbu za tukio na kunakili hoja yake ya "tokenId"
95recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs]
96
97if recent_tx:
98 kitty_id = recent_tx[0]['tokenId'] # Bandika "tokenId" hapa kutoka kwa kiungo hapo juu
99 is_pregnant = ck_contract.functions.isPregnant(kitty_id).call()
100 print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}")
Onyesha yote

Mkataba wa CryptoKitties una Matukio kadhaa ya kuvutia zaidi ya yale ya Kiwango.

Hebu tuangalie mawili kati yao, Pregnant na Birth.

1# Kutumia ABI ya Matukio ya Pregnant na Birth kupata maelezo kuhusu Paka wapya.
2ck_extra_events_abi = [
3 {
4 'anonymous': False,
5 'inputs': [
6 {'indexed': False, 'name': 'owner', 'type': 'address'},
7 {'indexed': False, 'name': 'matronId', 'type': 'uint256'},
8 {'indexed': False, 'name': 'sireId', 'type': 'uint256'},
9 {'indexed': False, 'name': 'cooldownEndBlock', 'type': 'uint256'}],
10 'name': 'Pregnant',
11 'type': 'event'
12 },
13 {
14 'anonymous': False,
15 'inputs': [
16 {'indexed': False, 'name': 'owner', 'type': 'address'},
17 {'indexed': False, 'name': 'kittyId', 'type': 'uint256'},
18 {'indexed': False, 'name': 'matronId', 'type': 'uint256'},
19 {'indexed': False, 'name': 'sireId', 'type': 'uint256'},
20 {'indexed': False, 'name': 'genes', 'type': 'uint256'}],
21 'name': 'Birth',
22 'type': 'event'
23 }]
24
25# Tunahitaji saini ya tukio ili kuchuja kumbukumbu
26ck_event_signatures = [
27 w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(),
28 w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(),
29]
30
31# Hili ni Tukio la Pregnant:
32# - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog
33pregnant_logs = w3.eth.get_logs({
34 "fromBlock": w3.eth.block_number - 120,
35 "address": w3.to_checksum_address(ck_token_addr),
36 "topics": [ck_event_signatures[0]]
37})
38
39recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs]
40
41# Hili ni Tukio la Birth:
42# - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a
43birth_logs = w3.eth.get_logs({
44 "fromBlock": w3.eth.block_number - 120,
45 "address": w3.to_checksum_address(ck_token_addr),
46 "topics": [ck_event_signatures[1]]
47})
48
49recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] for log in birth_logs]
Onyesha yote
  • Kifuatiliaji cha NFT cha Etherscanopens in a new tab huorodhesha NFT maarufu kwenye Ethereum kwa ujazo wa uhamisho.
  • CryptoKittiesopens in a new tab ni mchezo unaohusu viumbe wanaoweza kuzalishwa, kukusanywa, na wa kupendeza sana tunaowaita CryptoKitties.
  • Sorareopens in a new tab ni mchezo wa kimataifa wa soka ya njozi ambapo unaweza kukusanya vitu vya toleo pungufu vya kukusanya, kusimamia timu zako na kushindana ili kujishindia zawadi.
  • Huduma ya Majina ya Ethereum (ENS)opens in a new tab hutoa njia salama na iliyogatuliwa ya kuweka anwani kwa rasilimali ndani na nje ya mnyororo wa bloku kwa kutumia majina rahisi, yanayosomeka na binadamu.
  • POAPopens in a new tab huwasilisha NFT za bure kwa watu wanaohudhuria matukio au kukamilisha vitendo maalum. POAP ni za bure kuunda na kusambaza.
  • Unstoppable Domainsopens in a new tab ni kampuni iliyoko San Francisco inayounda vikoa kwenye minyororo wa bloku. Vikoa vya mnyororo wa bloku hubadilisha anwani za sarafu ya kidigitali na majina yanayosomeka na binadamu na vinaweza kutumika kuwezesha tovuti zinazostahimili udhibiti.
  • Gods Unchained Cardsopens in a new tab ni TCG kwenye mnyororo wa bloku wa Ethereum inayotumia NFT kuleta umiliki halisi kwa mali za ndani ya mchezo.
  • Bored Ape Yacht Clubopens in a new tab ni mkusanyiko wa NFT 10,000 za kipekee, ambazo, pamoja na kuwa kazi ya sanaa adimu inayoweza kuthibitishwa, hufanya kazi kama tokeni ya uanachama wa klabu, ikitoa marupurupu na manufaa kwa wanachama yanayoongezeka kadri muda unavyopita kutokana na juhudi za jumuiya.

Masomo zaidi

Je! makala haya yamekusaidia?