Varnostna analiza pametne pogodbe ERC 1155 NFT

Varnostna analiza pametne pogodbe ERC 1155 NFT

Security Analysis of the ERC 1155 NFT Smart Contract PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Čas branja: 5 min

Gotovo ste že slišali za žetone kriptovalut. Različni žetoni igrajo ključno vlogo v ekosistemu web3. Ti žetoni predstavljajo lastništvo, bogastvo, verodostojnost in avtoriteto v kriptovaluti. Zabavno je, da lahko izdelate tudi svoj žeton kriptovalute. 

Ti žetoni so pametne pogodbe, ki vključujejo različne funkcije za različna dejanja, kot so prenos, preverjanje stanja itd. Žeton lahko ustvarite tako, da zanj ustvarite pametno pogodbo. Kljub temu, da bi zagotovili, da je vaš žeton varen in mu pripisali občutek zaupanja, je ERC 20 standard pametne pogodbe ki ga je priporočljivo upoštevati pri ustvarjanju zamenljivih žetonov, ERC 721 pa je standard pametne pogodbe, ki se uporablja za ustvarjanje nezamenljivih žetonov (NFT).

ERC 20 in ERC 721 sta splošno sprejeta protokola pametnih pogodb za ustvarjanje žetonov. Zagotavljajo varno in zaupanja vredno okolje za žetone. In ti protokoli se še naprej izboljšujejo in postajajo vedno boljši. Korak v tej smeri vodi k oblikovanju novega protokola pametne pogodbe ERC 1155 za žetone. Poglejmo, kaj je.

1. Kaj je ERC 1155?

Vsi ERC, kot sta 20 in 721, so le standardi za ustvarjanje pametnih pogodb, ki ustrezajo različnim okoliščinam za NFT. Imamo ERC 721 in zamenljivi žetoni, kot sta USDT in DAI, sledijo standardom ERC 20. ERC 1155 je en standard, ki vključuje funkcije in lastnosti ERC 20 in ERC 721.

Recimo, da želite ustvariti program, v katerem ustvarite več izdelkov. Na primer, želite ustvariti žeton z imenom zlato, drug žeton z imenom srebro in enega kralja, logika pa pravi, da bo tisti z več zlata in srebra kralj. Lahko je samo en kralj. To je preprost protokol, a da ga ustvarite, boste morali uporabiti 3 pogodbe samo za sredstva, eno za zlati žeton, drugo za srebro in eno za kralja, ki bo ERC 721. Kaj pa, ko lahko uporabite samo eno pogodbo, ki navaja vse te različne žetone?

To je eden takšnih problemov, ki jih ERC 1155 rešuje. Ni vam treba razviti pogodbe za vsakega od žetonov, ki jih želite v verigi blokov. To je bil en tak primer pogodbe ERC 1155. Uganite, kje potrebujemo to vrsto sistema z več sredstvi, nekaterimi zamenljivimi, nekaterimi nezamenljivimi. Odgovor so igre web3. ERC 1155 omogoča razvijalcem iger Web3 razširljivost in gladek razvoj za transakcije v verigi.

1.1 ID-ji žetonov v ERC 1155

Zavedati se morate, kako je mogoče preveriti stanje v različnih žetonih ERC 20, lahko samo pokličete balanceOf(naslov_lastnik) in lahko ugotovite, koliko žetonov ima ta naslov. Toda ERC 1155 obravnava različne žetone, zato moramo različnim žetonom zagotoviti različne ID-je. Skoraj vsaka funkcija, povezana z žetoni, vključuje vsaj dva parametra tokenId (sredstvo, o katerem želite poizvedovati) in naslov, o katerem želite izvedeti.

Na primer, recimo, da ima pogodba 3 žetone, zlato, srebro in kralja. Če želite vedeti, koliko zlata ima določen naslov v tem protokolu, lahko pokličete funkcijo balanceOf(Naslov _lastnik, uint256 _id) na pametni pogodbi. Recimo, da je tokenId za zlato določen na 1. Potem lahko pokličete balnceOf(0x4Bf9DeCE75Bc7C4a9054d5b3BB13D53543eE4096, 1).

2 Revizijske smernice za pametno pogodbo ERC 1155

ERC 1155 obstaja že nekaj časa in nekatere funkcije niso na voljo v običajnem protokolu ERC 20 ali ERC 721, na primer paketni prenos. Prav tako je ERC 1155 manj razširjen na trgu, zaradi česar je to področje za mnoge razvijalce manj raziskano. QuillAudits deli ključne vpoglede za protokole, ki želijo BUIDL na ERC 1155, tako da lahko pomagajo ustvariti varnejši ekosistem web3 tako, da se zaščitijo. 

2.1 Vmesnik sprejemnika ERC 1155

Ko naša pogodba ERC 1155 prenese sredstva v drugo pogodbo, kar je na splošno zahteva v protokolu igre web3, je POMEMBNO, da imate vmesnik ERC1155Receiver v prejemni pogodbi za uspešno transakcijo žetonov.

Dve funkciji, ki spadata pod vmesnik sprejemnika ERC 1155, sta: -

  • onERC1155Received(operator, from, id, value, data)
  • onERC1155BatchReceived(operator, from, ids, values, data)

Obe funkciji imata skoraj podobno funkcionalnost, edina razlika je v tem, da je slednja, ko imamo opravka z več kot eno transakcijo hkrati, torej paketom imen, med parametri in vrnjenimi vrednostmi majhna razlika. Toda tukaj bomo govorili samo o onERC1155Recieved. 

Te funkcije NE SME klicati zunaj procesa kovnice ali prenosa. Če želite sprejeti prenos, mora vrniti bytes4(keccak256(“onERC1155Received(address,address,uint256,uint256,bytes)”)), če je prenos dovoljen.

Če pogledam parametre: -

  1. operator:- Naslov, ki je sprožil prenos (tj. msg.sender) 
  2. from:- Naslov, ki je prej imel v lasti žeton
  3. id:- ID žetona, ki se prenaša 
  4. vrednost:- Število žetonov, ki se prenašajo 
  5. podatki:- Dodatni podatki brez določene oblike 

2.2 Ni funkcije approve()?

Če ste kdaj delali z ERC 20 ali ERC 721, bi naleteli na funkcijo approve(), ki dovoljuje, da neki naslov vzame odobrene žetone iz lastnikovega stanja. Na primer, če A želi B-ju odobriti prevzem 100 žetonov DAI, lahko A pokliče funkcijo odobritve in pove, da je B upravičen do 100 žetonov DAI, pozneje pa lahko B izvede transakcijo s tem zneskom.

Toda ERC 1155 nima odobri funkcijo za en žeton. Imamo setApprovalForAll(naslovni operater, bool odobren) funkcijo, ki jo pokliče lastnik in sprejme operator naslovnega parametra, ki je naslov porabnika ali tistega, ki mu želimo odobriti naše žetone. Torej ne moremo poklicati odobri funkcijo ali dodelite odobritev za en sam žeton z našega seznama žetonov ERC 1155, vendar bo namesto tega odobren dostop do vseh žetonov naenkrat. Razvojna ekipa se mora tega zavedati. Če se ne upošteva, lahko to povzroči velike izgube in ogrozi protokol.

2.3 Nekateri redni pregledi

Zgornja dva razdelka sta raziskala dva edinstvena preverjanja, povezana z ERC 1155. V tem razdelku bomo šli skozi nekaj rednih pregledov, ki ne potrebujejo zelo poglobljene razlage.

  1. Upoštevajte ID-je: - Vsaka zunanja funkcija ali vmesnik, ki deluje z ERC 1155, mora imeti določen ID žetona, da to sprejme kot vhod.
  2. Burn/Mint: - Kadar koli se pokličejo te funkcije, morajo spremeniti samo stanje in totalSupply za podani ID žetona.
  3. Podobnost ERC 20: - Številne lastnosti so podobne standardu žetonov ERC 20. Pri tej zadevi bo v pomoč tudi pregled varnostnih smernic za ERC 20.
  4. Ponovni vstop: - Kot smo že omenili, ERC 1155 preveri podprt vmesnik v logiki prenosa. Tako lahko pride do različnih scenarijev ranljivost pri ponovnem vstopu. Priporočljivo je, da modifikatorje zaščite pred ponovnim vstopom obdržite na ustreznih funkcijah.

3. Zaključek

Ekosistem Web3 vidi stalen razvoj v običajnih standardih za izboljšanje varnosti in funkcionalnosti. ERC 1155 je korak v to smer. Ko pa so izdani novi standardi, se ustvari vrzel v znanju, ki vključuje ne tako zelo običajne standarde v protokolih, in prinaša tveganje manjšega vzorčnega prostora za varnostne ukrepe. Takrat nastopi QuillAudits z ekipo strokovnjakov. Lotevamo se, analiziramo in iščemo različne načine, na katere bi lahko bil protokol ogrožen, ter zavarujemo protokol naših strank z neverjetnimi rezultati. Obiščite našo spletno stran in zaščitite svoj projekt Web3!

17 Ogledov

Časovni žig:

Več od Quillhash