Pada tanggal 2 Februari, Pandora, sebuah proyek yang berfokus pada fragmentasi NFT, diluncurkan. Fitur intinya adalah ERC404, sebuah standar token yang menggabungkan ERC20 dan ERC721 dan memiliki karakteristik likuiditas asli dan fragmentasi NFT. Sebagai protokol yang baru diluncurkan, ERC404 telah memicu diskusi yang luas di komunitas. Volume perdagangan harian proyek pertamanya, Pandora, juga telah melampaui $50 juta. Lebih banyak proyek berdasarkan ERC404 atau standar token serupa yang siap diluncurkan.
Karena ERC404 terbuka secara langsung bagi komunitas untuk melakukan eksperimen tanpa diskusi dan peninjauan Proposal Peningkatan Ethereum (EIP) dan Permintaan Komentar Ethereum (ERC), protokol itu sendiri memiliki banyak area yang memerlukan perbaikan. Tim keamanan Beosin akan melakukan analisis mendetail mengenai mekanisme desain dan kode kontrak ERC404 untuk membantu pengguna kripto memahami ERC404.
Apa itu ERC404?
ERC404 adalah protokol eksperimental baru yang "menyatukan" dua standar token, ERC20 dan ERC721. Sederhananya, ERC404 memungkinkan NFT untuk dipecah dan diperdagangkan seperti token ERC20. Token ERC404 adalah token ERC20 dan NFT, yaitu, satu token ERC404 dapat dianggap sebagai satu token ERC20 atau satu NFT.
Saat pengguna membeli token ERC404, dompet pengguna akan secara otomatis menerima NFT Replicant. Saat pengguna menjual token tersebut, NFT yang bersangkutan akan secara otomatis dimusnahkan.
Ambil contoh Pandora, proyek pertama ERC404, sebagai contoh. Token ERC404 dari proyek ini adalah PANDORA, dan Replicant NFT yang terkait adalah Pandora Replicant. Total pasokan token PANDORA adalah 10.000, sehingga total pasokan NFT Pandora juga berjumlah 10.000.
Saat pengguna membeli token PANDORA di Uniswap, memegang 1 token PANDORA setara dengan memegang 1 Pandora NFT pada waktu yang sama. Anda kemudian dapat memilih untuk menjual token PANDORA atau pergi ke pasar perdagangan NFT seperti OpenSea untuk menjual Pandora NFT. Pengguna juga dapat membeli NFT Pandora terlebih dahulu, lalu memilih untuk menjual token PANDORA di DEX.

Karena ERC404 melibatkan dua karakteristik token ERC20 dan NFT, berikut adalah fitur desain ERC404, yang juga perlu diperhatikan oleh pengguna:
1.
Jika token ERC404 diperdagangkan sebagai token ERC20, desimal akan dilibatkan dan dipertimbangkan. ERC404 menetapkan bahwa jumlah token dibulatkan ke bawah ke nomor NFT yang sesuai. Misalnya, jika pengguna memegang 2,9 token PANDORA, ia hanya memegang 2 Pandora NFT dari perspektif NFT.
2.
Dalam ERC404 v1, jika token ERC404 diperdagangkan sebagai token ERC20, NFT yang bersangkutan akan dimusnahkan dan NFT baru akan dihasilkan selama perdagangan. Dengan cara ini, setiap kali NFT baru dibuat, nomor ID-nya akan ditambahkan dari nomor ID tertinggi dari NFT asli. ERC404 v2 mengubah mekanisme pembakaran ini, yang akan dijelaskan nanti. Karena Pandora NFT disetel untuk memiliki kelangkaan, pengguna akan memperdagangkan token Pandora untuk meningkatkan kelangkaan Pandora NFT untuk arbitrase, dan mengganti NFT asli dengan Pandora NFT yang lebih langka.
3.
Dalam kasus ERC404 v1, jika pengguna memegang 2,9 token PANDORA dan menjual 1 token PANDORA, token tersebut tidak memiliki kelangkaan, namun NFT yang terkait memiliki kelangkaan yang berbeda. Saat menjual 1 token, Pandora terakhir yang diterima oleh pengguna akan dimusnahkan terlebih dahulu sehingga pengguna perlu memperhatikan kelangkaan NFT yang terkait dengan token PANDORA. Direkomendasikan agar satu alamat hanya menyimpan satu token PANDORA, sesuai dengan satu NFT Pandora, atau pengguna dapat langsung memperdagangkan NFT Pandora mereka.
Analisis kode ERC404
ERC404 v1 dirilis di Github oleh Acme, mantan insinyur perangkat lunak di Coinbase, dan memiliki banyak ruang untuk perbaikan. Dengan bantuan komunitas, tim ERC404 saat ini sedang membangun dan meningkatkan ERC404 dan meluncurkan ERC404v2 pada tanggal 15 Februari.ERC404v2 sangat mengurangi konsumsi bahan bakar dan mengoptimalkan mekanisme jual beli ERC404 token. Repositori kode terbarunya adalah https://github.com/Pandora-Labs-Org/erc404.
Kali ini kami akan menggunakan alat Beosin VaaS untuk memindai kontrak pintar ERC404 v2, menganalisis kode ERC404 v2, dan memberikan saran keamanan untuk proyek ERC404 dengan pakar keamanan Beosin.

Kontrak ERC404 v2 umumnya mencakup ERC404.sol, ERC721Receiver.sol, dan DoubleEndedQueue.sol. DoubleEndedQueue adalah struktur data baru yang diperkenalkan oleh tim ERC404 untuk mengubah logika perdagangan token dan pembakaran NFT.
ERC404 v2, mirip dengan v1, adalah implementasi hibrida dari ERC721 dan ERC20, yang memungkinkan token ERC721 direpresentasikan sebagai token ERC20. Diantaranya, setiap token ERC721 sesuai dengan jumlah token ERC20 yang tetap (ditentukan oleh parameter unit). Saat mentransfer token ERC721, token ERC20 yang terkait akan ditransfer dalam satuan.
Dibandingkan dengan v1, ERC404 v2 memiliki peningkatan berikut:
1.
Mendukung EIP-2612
ERC404 v2 telah mendukung EIP-2612, yang memungkinkan transaksi tanpa bahan bakar melalui pesan yang ditandatangani (izin). "DOMAIN_SEPARATOR" dikalkulasikan dalam konstruktor dan dapat dihitung ulang jika ID rantai berubah, sehingga meningkatkan kompatibilitas kontraknya.
konstruktor(string memori nama_, string memori simbol_, uint8 desimal_) {
nama = nama_;
simbol = simbol_;
if (desimal_ < 18) {
mengembalikan DesimalTerlaluRendah();
}
desimal = desimal_;
satuan = 10 ** desimal;
// Inisialisasi EIP-2612
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();
}
2.
Pemeriksaan Transfer aman
Fungsi SafeTransferFrom dalam kontraknya mengikuti onERC721Received() dalam standar ERC721 dan akan memeriksa penerima untuk memastikan bahwa penerima dapat menangani token ERC721 (misalnya, penerima adalah kontrak).
fungsi amanTransferDari(
alamat dari_,
dialamatkan ke_,
uint256 id_,
byte memori data_
) publik virtual {
if (id_ > dicetak || id == 0) {
kembalikan InvalidId();
}
transferFrom(dari_, ke_, id_);
jika (
to_.code.length != 0 &&
ERC721Receiver(to_).onERC721Received(msg.sender, from_, id_, data_) !=
ERC721Receiver.onERC721Received.selector
) {
mengembalikan UnsafeRecipient();
}
}
3. Logika Pencetakan dan Pembakaran yang Lebih Baik
Berbeda dari v1, saat memperdagangkan token ERC404 v2, NFT yang bersangkutan tidak akan dimusnahkan. Sebaliknya, semua ID NFT disimpan dalam antrian berujung ganda untuk digunakan kembali. Dengan cara ini, NFT yang terkait dengan ERC404 sama dengan token ERC721 pada umumnya. Sama seperti koin. Pendekatan ini tidak hanya mengurangi konsumsi gas, tetapi juga menyederhanakan logika transfer ERC404.

Penyempurnaan pada ERC404 v2 menjadikan ERC404 lebih terukur dan berkelanjutan, namun masih terdapat beberapa risiko keamanan yang perlu diperhatikan:
1.
Fungsi Daftar Putih
ERC404 mengizinkan alamat tertentu yang masuk daftar putih untuk mentransfer token ERC721 secara internal, yang dapat digunakan untuk mengoptimalkan penggunaan gas dari kontrak atau alamat tertentu. Namun, hal ini juga dapat menimbulkan masalah sentralisasi atau potensi penyalahgunaan.
kontrak abstrak ERC404 adalah IERC404 {
.......
pemetaan(alamat => bool) publik erc721TransferExempt;
......
// Menangani pengecualian ERC-721.
fungsi _transferERC20DenganERC721(
//menghemat bahan bakar dengan perdagangan internal
}
}
2.
Masalah Fungsi Transfer
Fungsi transferFrom menangani transfer ERC20 dan ERC721, serta membedakan logika kedua standar token berdasarkan parameter valueOrId_. Pengembang atau pengguna mungkin membuat kesalahan saat memanggil fungsi ini, karena fungsi ini mempunyai anggapan bahwa jika nilai transfer lebih besar dari nilai penghitungan pembuatan, maka transfer tersebut adalah tentang transfer token ERC20.
transfer fungsiDari(
alamat dari_,
dialamatkan ke_,
uint256 nilaiOrId_
) pengembalian virtual publik (bool) {
......
if (valueOrId_ <= _minted) {
// Tujuannya adalah untuk mentransfer sebagai token ERC-721 (id).
uint256 id = nilaiOrId_;
......
}
3.
Optimalisasi gas
Meskipun ERC404 v2 telah secara signifikan mengurangi biaya bahan bakar yang diperlukan untuk interaksi pengguna dibandingkan dengan v1, masih terdapat banyak ruang untuk perbaikan. Misalnya saja, kontrak ERC404 v2 menggunakan error revert NotFound() khusus, dan bukan pernyataan yang memerlukan dengan pesan error, yang meningkatkan konsumsi gasnya.
4.
Kurangnya fungsi jeda darurat
Sebagai protokol yang baru lahir, ERC404 mungkin memiliki potensi kerentanan kontrak yang tidak dapat diabaikan. Oleh karena itu, ketika tim mengembangkan kontrak, fungsi jeda darurat harus dipertimbangkan untuk ditetapkan dalam kontrak dan rencana respons risiko harus dirumuskan untuk merespons dan memperbaiki kerentanan dengan cepat ketika risiko muncul.
Sebelumnya, Beosin telah menyebutkan saran keamanan di atas kepada tim proyek ketika menyelesaikan audit Avatar, sebuah proyek inovatif berdasarkan ERC404, yang membantu tim Avatar meningkatkan keamanan kontrak pintar dan memastikan pengoperasian Ava yang aman. proyek tar. Audit ini mencakup verifikasi formal dan audit manual oleh pakar keamanan untuk memastikan bahwa kode tidak memiliki kerentanan logis:

Secara keseluruhan, ERC404 berusaha memecahkan masalah ketidakterpisahan NFT dan likuiditas yang tidak memadai dari perspektif baru. Dibandingkan dengan proyek fragmentasi NFT sebelumnya, proyek ini dimulai dari standar token asli, yang lebih sederhana dan lebih efektif untuk diterapkan dan menyediakan metode baru untuk memperdagangkan NFT. Namun, ERC404 adalah kontrak yang relatif kompleks di antara kontrak token. Developer perlu memperhatikan karakteristik ERC20 dan ERC721 serta risiko yang mungkin timbul akibat penambahan fungsi baru. Tim keamanan perlu memeriksa dengan cermat interaksi antara fungsi ERC20 dan ERC721 selama audit, serta dampak dari berbagai risiko optimalisasi gas dan sentralisasi dalam kontrak ERC404.
Beosin adalah perusahaan keamanan blockchain global terkemuka. Perusahaan ini memiliki kantor di Singapura, Korea, Jepang, dan 10+ negara lainnya. Dengan misi "Mengamankan Ekosistem Blockchain", Beosin menyediakan solusi keamanan blockchain "Semua dalam satu" yang mencakup Audit Kontrak Cerdas, Pemantauan & Peringatan Risiko, KYT/AML, dan Pelacakan Kripto. Beosin telah mengaudit lebih dari 3000 kontrak pintar dan proyek ERC404 dipersilakan untuk meminta konsultasi dan audit kami.