Anda semua biasa dengan token ERC20 kerana anda mungkin memiliki pasangan, diedarkan oleh beberapa jenis penjualan token. Tetapi adakah anda tahu ada lebih banyak standard selain ERC20? Ethereum mempunyai sejarah panjang mengenai standard yang dikembangkan.

Untuk memberi anda idea yang lebih baik mengenai apa yang dimaksudkan dengan ERC, ini bermaksud “Ethereum Request for Comment” Ini adalah cadangan yang dikemukakan untuk perbincangan dan cadangan mengikut standard sebenar. Nombor (seperti 20) merujuk kepada nombor terbitan di platform perkongsian kod Github. Pertama, mari kita lihat standard ERC20.

Standard ERC20

Apa sebenarnya standard ERC20?

Munculnya token ERC20 merevolusikan pasaran cryptocurrency dan membuka pintu kepada sejumlah besar Cryptocurrency ICO memproyeksikan dunia yang disaksikan pada tahun 2017. Diperkenalkan pada tahun 2015, kod ERC20 menggariskan senarai peraturan tertentu yang harus digunakan token berdasarkan Ethereum, mempermudah proses pengaturcaraan fungsi token pada blockchain Ethereum. Pada asasnya, token ERC20 adalah bentuk khas kontrak pintar yang menggunakan blockchain Ethereum.

Contoh token ERC20 yang paling menonjol termasuk Bancor, EOS, Tronix, BNB, VeChain, dan Bankex.

Sebelum inovasi standard ERC20 untuk token Ethereum, pengkod harus membuat standard pelaksanaan khusus untuk mengembangkan token dan melancarkannya di rangkaian Ethereum. Walaupun begitu, kod token ERC20 telah mempermudah proses pembuatan token, berkat protokol yang diperkemas dan standard kontrak pintar. Kod ERC20 mengurangkan kerumitan yang berkaitan dengan pelaksanaan kontrak pintar token, yang secara signifikan mengurangkan kemungkinan melanggar kontrak token.

Sehingga April 2018, terdapat 66,468 kontrak token ERC20, berkat keseragaman kod token yang disediakan oleh standard ERC20, yang memudahkan pertukaran cryptocurrency untuk menyenaraikan pelbagai token di platform perdagangan mereka. Oleh itu, standard ERC20 telah membantu komuniti kripto mengatasi masalah kecairan yang boleh dikaitkan dengan sebilangan besar token berdasarkan Ethereum.

Fungsi token ERC20:

Kod ERC20 menggariskan enam fungsi khusus untuk token, iaitu

1- Mendapatkan jumlah bekalan token melalui "jumlahBekalan" fungsi

2- Mendapatkan baki token akaun lain yang berkaitan dengan "_pemilik" alamat melalui " balanceOf (alamat _owner) pulangan tetap (baki uint256)" fungsi.

3- Menghantar jumlah token tertentu "_nilai" ke alamat tertentu melalui " pemindahan (alamat _to, uint256 _value) kembali (kejayaan bool)" fungsi.

4- Menghantar jumlah token tertentu "_nilai" dari satu alamat token (kontrak) ke alamat token (kontrak) melalui "transferFrom (alamat _dari, alamat _to, uint256 _value) mengembalikan (kejayaan bool)" fungsi.

5- Membolehkan akaun tertentu menarik token dari akaun seseorang berulang kali, sambil menentukan had atas untuk jumlah token yang dikeluarkan dengan "_nilai" parameter. Ini dapat dicapai melalui "persetujuan (alamat _spender, uint256 _value) (kejayaan bool)". Had atas pengeluaran, iaitu "_nilai" parameter, boleh ditimpa apabila fungsi dipanggil semula.

6- Mengembalikan jumlah baki token, dalam jumlah yang telah ditetapkan yang ditentukan oleh had atas yang dibenarkan untuk dibelanjakan oleh "_penghantar" untuk menarik diri dari akaun "_pemilik". Ini dapat dilaksanakan melalui "elaun (alamat * _owner *, alamat * _spender *) pulangan tetap (baki uint256)" fungsi.

Keenam fungsi ini yang ditentukan oleh kod ERC20 mewakili masalah fungsi landasan, yang merangkumi bagaimana token ini akan dipindahkan antara akaun yang berbeza, dan bagaimana pengguna dapat mengambil data yang berkaitan dengan token ERC20 yang diberikan. Kumpulan fungsi ini ditetapkan untuk memastikan bahawa token berdasarkan Ethereum akan berfungsi sama di mana-mana bahagian platform Ethereum. Oleh itu, semua dompet crypto yang mematuhi koin eter juga akan menyokong token berdasarkan standard ERC20.

Bug kritikal:

ERC20 adalah standard token pertama Ethereum. Seperti yang sering berlaku dengan kod baru, ia mengandungi beberapa bug atau kesalahan logik. ERC20 menggunakan dua cara untuk melakukan transaksi token. Pertama sekali, fungsi pemindahan membolehkan anda mengirim token ke alamat seseorang. Sekiranya anda ingin mendepositkan token ke kontrak pintar, anda harus menggunakan kombinasi ‘approve + transferFrom’. Anda harus membenarkan kontrak ini untuk menarik token anda melalui fungsi persetujuan. Kemudian, anda perlu memanggil fungsi kontrak yang akan mengendalikan deposit anda dan mengeluarkan token anda melalui fungsi transferFrom.

Bagaimana jika anda menyimpan token secara tidak sengaja untuk kontrak dengan fungsi pemindahan? Urus niaga akan berjaya tetapi transaksi ini tidak akan dikenali oleh kontrak penerima. Contohnya, jika anda menghantar token ke kontrak pertukaran terdesentralisasi, kontrak pertukaran akan menerima token anda tetapi ia tidak akan memberi kredit kepada token ini kepada baki token pertukaran anda. Lebih-lebih lagi, jika kontrak pertukaran yang terdesentralisasi tidak melaksanakan fungsi pengekstrakan token kecemasan, maka mustahil untuk mendapatkan kembali token anda dalam apa jua keadaan, yang mengakibatkan kehilangan token secara kekal. Kerana bug ini, ekosistem Ethereum telah kehilangan berjuta-juta dolar.

Mengapa kita masih menggunakan standard ERC20?

Pengguna Reddit u / Dexaran, pencipta standard ERC223, adalah salah satu pembangun pertama yang memberitahu komuniti mengenai bug tersebut. Kami bertanya kepadanya mengapa ERC20 masih digunakan secara meluas, walaupun mengetahui tentang bug kritikal ini. Dia memberikan alasan berikut:

  1. Kerana jenayah tidak bertanggungjawab terhadap pembangun token untuk perbuatan mereka.
  2. Kerana Ethereum Foundation masih mempromosikan standard token ERC20 walaupun diketahui mengandungi pepijat. Situasi yang sama seperti sebelumnya dengan TheDAO. Mereka perlu mengatakan "Hentikan ini sekarang" tetapi mereka tidak akan.
  3. Kerana sebab utama pengembangan token adalah pengambilan dana, bukan penciptaan produk.
  4. Kerana menggunakan standard yang berbeza akan membawa kepada kesan rangkaian yang lebih tinggi. Ini bukan perkara yang sangat kami perlukan memandangkan rangkaian Ethereum sudah mempunyai masalah skalabiliti.

Piawai ERC223

The ERC223 standard dicadangkan oleh u / Dexaran yang membantu membuat artikel ini. ERC223 adalah standard token yang membolehkan pemindahan token berkelakuan sama seperti transaksi eter. ERC223 menggunakan pengendalian peristiwa (menganggap transaksi sebagai peristiwa) untuk mengelakkan token hilang dalam transaksi yang tidak ditangani. Piawaian yang diperbaiki ini menyelesaikan bug kritikal ERC20 dengan membuat fungsi pemindahan membuang ralat pada pemindahan tidak sah dan membatalkan transaksi sehingga tidak ada dana yang hilang. Ringkasnya, ERC223 memberi tumpuan keselamatan.

Penambahan dan masalah

ERC223 menambahkan parameter data tambahan untuk fungsi pemindahan, untuk membolehkan operasi yang lebih kompleks daripada hanya pemindahan token.

Keprihatinan utama Dexaran ialah terlalu banyak orang yang kehilangan token mereka dengan menghantarnya ke kontrak menggunakan fungsi pemindahan, bukan kaedah menyetujui dan memindahkanDari yang telah dibincangkan sebelumnya. Penyelesaiannya adalah mengubah kaedah pemindahan untuk memeriksa sama ada alamat penerima adalah kontrak (iaitu mengandungi data) atau tidak. Sekiranya ia adalah kontrak, maka ia menganggap bahawa ada fungsi tokenFallback untuk memanggilnya kembali. Kelemahan utamanya ialah jika tokenFallback tidak ada, fungsi penggantian kontrak penerima akan dipanggil dan token yang dihantar mungkin masih hilang.

Piawaian ERC777

ERC777 adalah standard token fungible baru yang bergantung pada ERC820 (Registry pseudo-introspection kontrak) dan cuba menyelesaikan masalah ERC20, seperti kekurangan mekanisme pengendalian transaksi yang menyebabkan kerugian berjuta-juta dolar dari ekosistem Ethereum. Ringkasnya, ERC777 memberi tumpuan pengangkatan dengan menawarkan a pelbagai mekanisme pengendalian transaksi.

Kebaikan

Kelebihan utama ERC777 adalah bahawa ia menggunakan kaedah baru untuk mengenali antara muka kontrak. Piawaian ini mengandaikan bahawa terdapat pusat pendaftaran kontrak di rangkaian Ethereum (ini ditentukan dalam ERC820). Semua orang boleh meminta pendaftaran ini untuk mengetahui apakah alamat tertentu (tidak kira sama ada alamat ini adalah kontrak atau tidak) menyokong sekumpulan fungsi tertentu iaitu “antara muka”.

Salah satu masalah utama Ethereum adalah ketidakupayaan untuk mengetahui fungsi apa yang dilaksanakan oleh kontrak. ERC820 bertujuan untuk menyelesaikannya. ERC777 memanfaatkan pendekatan ini, yang pasti merupakan idea yang baik.

Sebaliknya, anda boleh membuat token yang akan melaksanakan fungsi lalai ERC20 bersama dengan fungsi ERC777 baru tanpa penggantian (dan pilihan mewarisi bug kritikal ERC20). Ini dapat menjamin kesan rangkaian yang baik untuk standard token baru ini dan penggunaan yang lebih cepat. Seperti yang ditunjukkan oleh amalan, tujuan utama pembangun token adalah untuk mengumpulkan wang yang menganggap bahawa mereka perlu mendorong token mereka ke pertukaran. Lebih mudah bagi pertukaran untuk menyokong token yang melaksanakan fungsi ERC20 lama (tidak kira sama ada fungsi ini mengandungi pepijat atau tidak) tanpa penyelidikan mengenai fungsi standard token baru yang lebih baru. Semakin mudah pertukaran untuk menyokong token dengan standard baru, semakin banyak pembangun akan menggunakannya. Ini meningkatkan penggunaan ERC777, sementara ERC223 kekurangan harta tanah ini.

Apa yang berbeza?

Piawai token ini menentukan sekumpulan fungsi yang sama sekali baru iaitu fungsi `send` dan bukannya fungsi` transfer`. `authoriseOperator` dan bukannya` setuju ‘. Fungsi pengendali `tokensReceived` dan bukannya fungsi pengendali` tokenFallback`.

Pendekatan seperti ini dapat menjamin bahawa fungsi piawai ini tidak akan melintasi dan menimpa fungsi piawai token lain, oleh itu adalah mungkin untuk membuat token yang akan serasi dengan piawaian ERC777 dan ERC820 secara serentak.

Akhirnya, ERC777 menyeragamkan Pudina dan Bakar fungsi token.

Titik kegagalan dan keselamatan

ERC777 melaksanakan fungsi `authoriseOperator` yang membolehkan seseorang menguruskan token bagi pihak anda. Dexaran menjelaskan kepada kami bahawa dia berpendapat kaedah ini tidak digunakan lagi dan tidak boleh digunakan. Di samping itu, memberi kuasa kepada seseorang untuk menguruskan token bagi pihak anda akan merugikan lebar jalur rangkaian dan memerlukan lebih banyak gas. `authoriseOperator` sudah mewakili satu transaksi, dan transaksi lain diperlukan untuk melakukan "pengeluaran yang dibenarkan". Oleh itu, dua transaksi diperlukan untuk melakukan pemindahan yang dapat dilakukan dengan hanya satu transaksi.

Seterusnya, standard ERC777 berisi bendera pilihan untuk mencegah token tersekat dengan melakukan beberapa pemeriksaan mengenai antara muka ITokenRecipient, dan untuk memeriksa apakah alamat tersebut dimasukkan ke dalam senarai putih. Oleh kerana standard ini tertumpu pada keselamatan rangkaian yang menangani token bernilai jutaan dolar, tidak baik membuat pemeriksaan ini menjadi pilihan.

Piawaian lain

Terdapat banyak standard lain seperti ERC827 yang menggabungkan beberapa kelebihan ERC223 dengan fungsi ERC20 yang lama. The ERC664 standard menumpukan pada modulariti standard token. Piawaian ini membolehkan kontrak token dapat ditingkatkan, tetapi telah mewarisi bug kritikal ERC20. Piawaian lain termasuk ERC721, ERC677, dan ERC820, tetapi mereka kurang dikenali.

Keserasian antara standard

Kami bertanya kepada Dexaran piawaian mana yang sesuai. Dia memberitahu kami, pertama-tama kita harus memahami apa yang dimaksudkan dengan ‘keserasian mundur’: “Keserasian mundur adalah hak milik sistem, produk, atau teknologi yang memungkinkan untuk saling beroperasi dengan sistem warisan yang lebih lama, atau dengan input yang dirancang untuk sistem seperti itu.”

ERC20 & ERC223: Token ERC223 serasi dengan ERC20. Semua yang dirancang untuk berfungsi dengan baik dengan ERC20 (seperti dompet) boleh berfungsi dengan ERC223 juga. Satu-satunya pengecualian di sini adalah kontrak yang bergantung pada persetujuan + pemindahanDari pola deposit token. Walau bagaimanapun, adalah mungkin untuk melaksanakan fungsi approve + transferFrom dengan token ERC223, walaupun ia tidak termasuk dalam standard sekarang. Bagi dompet dan perkhidmatan pihak ketiga yang bukan kontrak pintar, mereka menyokong ERC223 secara automatik kerana data panggilan input token ERC20 sah untuk ERC223.

ERC20 & ERC777: Anda boleh mendapatkan pernyataan berikut di bahagian ‘Keserasian Mundur’ dari cadangan ERC777: “EIP ini tidak memperkenalkan ketidakcocokan ke belakang dan serasi dengan standard token ERC-20 yang lebih lama.”

Walau bagaimanapun, Dexaran memberitahu kami sebaliknya dan memberi kami contoh ini: “Dompet dan perkhidmatan seperti MetaMask, Mist, dan MyEtherWallet bekerja dengan token ERC20. Input yang dirancang untuk token ERC20 adalah panggilan kontrak yang mengandungi parameter yang dikodkan dan tandatangan fungsi. Panggilan fungsi dalam Mesin Maya Ethereum ditentukan oleh empat bait pertama data yang dihantar dengan transaksi. Tanda tangan 4-byte ini didefinisikan sebagai empat bait pertama hash perwakilan kanonik dari tandatangan fungsi. Ini bermaksud fungsi `transfer (address, uint256)` dan `send (address, uint256)` akan mempunyai tandatangan yang berbeza. Akibatnya, input yang dirancang untuk token ERC20 tidak akan berlaku untuk token ERC777. ” Semasa kami menggunakan definisi keserasian kebelakang, ERC777 tidak serasi dengan standard token ERC20.

Bila hendak menggunakan standard mana

ERC20: Pengguna Reddit u / Dexaran memberi kami nasihat sarkastik ini, “Apabila anda mahu pelabur anda kehilangan wang kerana bug.”

ERC223: Standard token ini juga dapat digunakan bersama dengan ERC777. ERC777 mempunyai beberapa ciri elegan yang tidak dimiliki oleh ERC223, tetapi logik ERC223 mudah berbanding dengan ERC777 yang dapat menjamin bahawa ia banyak kod kurang ralat. Lebih-lebih lagi, ERC223 tidak bergantung pada perkhidmatan pusat mana pun yang bermaksud bahawa token ERC223 anda hanya akan bergantung pada pelaksanaan anda sendiri. Seperti yang telah kami sebutkan sebelumnya, ERC223 bertujuan untuk meningkatkan keselamatan, tetapi ini menjadikan token ERC223 tidak mematuhi piawaian ERC20.

ERC777: Standard token ini sudah boleh digunakan. Sebaliknya, ERC777 mempunyai beberapa masalah keselamatan seperti yang disebutkan di atas. Mereka juga bergantung pada pendaftaran kontrak pusat yang juga menjadi perhatian keselamatan. Pendaftaran pusat dapat menjadikan kehidupan pemaju lebih mudah tetapi ia juga berfungsi sebagai pusat kegagalan yang sama seperti Parity Multisig. Semua Parity Multisigs bergantung pada perpustakaan kod pusat. Kebetulan terdapat pepijat di perpustakaan dan dieksploitasi. Hasilnya, semua Parity Multisigs terhempas. Sebagai tambahan, ERC777 menentukan sekumpulan fungsi baru. Ini adalah usaha untuk membenarkan pembangun token membuat token mereka serasi dengan piawaian ERC20 dan ERC777 secara serentak untuk tujuan penggunaan. Ini bermaksud bahawa pembangun boleh mewarisi bug ERC20 di ERC777, tetapi membolehkan pembangun menggunakan lebih banyak peristiwa pengendalian transaksi.

Secara umum: Semua token mempunyai kes penggunaan yang serupa – ICO. Saya akan mengatakan bahawa ERC223 dan ERC777 berusaha menyelesaikan satu masalah ERC20 dengan cara yang berbeza. ERC223 sudah mengambil tempatnya Ethereum Classic bukannya ERC20.

Artikel ini dibuat dengan bantuan Dexaran, pembangun ERC223. Beberapa komen Paul Edge mengenai standard token Ethereum juga digunakan.