Anda semua sudah familiar dengan token ERC20 karena Anda mungkin memiliki beberapa, didistribusikan oleh semacam penjualan token. Tapi tahukah Anda lebih banyak standar yang ada selain ERC20? Ethereum memiliki sejarah panjang standar yang dikembangkan.
Untuk memberi Anda gambaran yang lebih baik tentang apa artinya ERC, itu adalah singkatan dari “Permintaan Ethereum untuk Komentar”. Ini adalah proposal yang diajukan untuk diskusi dan saran dengan standar yang sebenarnya. Angka (seperti 20) mengacu pada nomor masalah pada platform berbagi kode Github. Pertama, mari kita lihat standar ERC20.
Standar ERC20
Apa sebenarnya standar ERC20?
Munculnya token ERC20 merevolusi pasar cryptocurrency dan membuka pintu bagi kebanyakan ICO cryptocurrency proyek yang disaksikan dunia selama 2017. Diperkenalkan pada tahun 2015, kode ERC20 menguraikan daftar aturan spesifik yang harus diterapkan oleh token berbasis Ethereum, menyederhanakan proses pemrograman fungsi token pada blockchain Ethereum. Pada dasarnya, token ERC20 adalah bentuk khusus dari kontrak pintar yang memanfaatkan blockchain Ethereum.
Contoh paling menonjol dari token ERC20 termasuk Bancor, EOS, Tronix, BNB, VeChain, dan Bankex.
Sebelum inovasi standar ERC20 untuk token Ethereum, pembuat kode harus membuat standar implementasi khusus untuk mengembangkan token dan meluncurkannya di jaringan Ethereum. Namun demikian, kode token ERC20 telah menyederhanakan proses pembuatan token, berkat protokol yang disederhanakan dan standar kontrak pintar. Kode ERC20 mengurangi kerumitan yang terkait dengan implementasi kontrak pintar token, yang secara signifikan mengurangi kemungkinan melanggar kontrak token..
Per April 2018, ada 66.468 kontrak token ERC20, berkat keseragaman kode token yang disediakan oleh standar ERC20, yang memudahkan pertukaran mata uang kripto untuk mencantumkan berbagai token di platform perdagangan mereka. Dengan demikian, standar ERC20 telah membantu komunitas crypto mengatasi masalah likuiditas yang dapat dikaitkan dengan sejumlah besar token berbasis Ethereum..
Fungsi token ERC20:
Kode ERC20 menguraikan enam fungsi khusus untuk token, yaitu
1- Mendapatkan total pasokan token melalui "totalSupply" fungsi
2- Mengambil saldo token dari akun lain yang terkait dengan "_pemilik" alamat melalui " balanceOf (address _owner) pengembalian konstan (saldo uint256)" fungsi.
3- Mengirim token dalam jumlah tertentu "_nilai" ke alamat tertentu melalui " transfer (address _to, uint256 _value) return (sukses bool)" fungsi.
4- Mengirim sejumlah token tertentu "_nilai" dari satu alamat token (kontrak) ke alamat token (kontrak) lainnya melalui "transferFrom (address _from, address _to, uint256 _value) return (sukses bool)" fungsi.
5- Mengaktifkan akun tertentu untuk menarik token dari akun seseorang berulang kali, sambil menentukan batas atas untuk jumlah token yang akan ditarik dengan "_nilai" parameter. Ini dapat dicapai melalui "menyetujui (address _spender, uint256 _value) return (sukses bool)". Batas atas untuk penarikan, yaitu "_nilai" parameter, bisa ditimpa saat fungsi dipanggil kembali.
6- Mengembalikan jumlah sisa token, dalam jumlah yang telah ditentukan sebelumnya yang ditentukan oleh batas atas yang diizinkan untuk dibelanjakan oleh "_pemboros" untuk menarik dari akun "_pemilik". Ini dapat dijalankan melalui "tunjangan (alamat * _owner *, alamat * _spender *) pengembalian konstan (sisa uint256)" fungsi.
Enam fungsi yang ditentukan oleh kode ERC20 ini mewakili masalah fungsionalitas landasan, yang mencakup bagaimana token ini akan ditransfer antar akun yang berbeda, dan bagaimana pengguna dapat mengambil data yang terkait dengan token ERC20 yang diberikan. Kelompok fungsi ini ditentukan untuk memastikan bahwa token berbasis Ethereum akan berfungsi dengan cara yang sama dalam bagian mana pun dari platform Ethereum. Dengan demikian, semua dompet kripto yang sesuai dengan koin eter juga akan mendukung token berdasarkan standar ERC20..
Bug kritis:
ERC20 adalah standar token pertama Ethereum. Seperti yang sering terjadi pada kode baru, kode ini mengandung beberapa bug atau kesalahan logis. ERC20 mengasumsikan dua cara untuk melakukan transaksi token. Pertama-tama, fungsi transfer memungkinkan Anda mengirim token ke alamat seseorang. Jika Anda ingin menyetor token ke kontrak pintar, Anda harus menggunakan kombinasi ‘setujui + transferFrom’. Anda harus mengizinkan kontrak ini untuk menarik token Anda melalui fungsi persetujuan. Kemudian, Anda perlu memanggil fungsi kontrak yang akan menangani deposit Anda dan menarik token Anda melalui fungsi transferFrom.
Bagaimana jika Anda menyetor token secara tidak sengaja ke kontrak dengan fungsi transfer? Transaksi akan berhasil tetapi transaksi ini tidak akan diakui oleh kontrak penerima. Misalnya, jika Anda mengirim token ke kontrak pertukaran terdesentralisasi, maka kontrak pertukaran akan menerima token Anda tetapi tidak akan mengkredit token ini ke saldo token pertukaran Anda. Selain itu, jika kontrak pertukaran terdesentralisasi tidak menerapkan fungsi ekstraksi token darurat, maka tidak mungkin untuk mendapatkan kembali token Anda, yang mengakibatkan hilangnya token secara permanen. Karena bug ini, ekosistem Ethereum telah kehilangan jutaan dolar.
Mengapa kami masih menggunakan standar ERC20?
Pengguna Reddit u / Dexaran, pencipta standar ERC223, adalah salah satu pengembang pertama yang memberi tahu komunitas tentang bug yang disebutkan di atas. Kami bertanya mengapa ERC20 masih digunakan secara luas, bahkan ketika mengetahui tentang bug kritis ini. Dia memberikan alasan berikut:
- Karena pengembang token tidak bertanggung jawab secara kriminal atas perbuatan mereka.
- Karena Ethereum Foundation masih mempromosikan standar token ERC20 meskipun diketahui mengandung bug. Situasi yang sama dengan TheDAO sebelumnya. Mereka perlu mengatakannya "Hentikan ini sekarang" tapi mereka tidak mau.
- Karena alasan utama pengembangan token adalah pengambilan dana, bukan pembuatan produk.
- Karena menggunakan standar yang berbeda akan menghasilkan efek jaringan yang lebih tinggi. Ini bukan yang kami butuhkan mengingat jaringan Ethereum sudah memiliki masalah skalabilitas.
Standar ERC223
Itu ERC223 standar diusulkan oleh u / Dexaran yang membantu membuat artikel ini. ERC223 adalah standar token yang memungkinkan transfer token berperilaku persis seperti transaksi eter. ERC223 menggunakan penanganan peristiwa (menganggap transaksi sebagai peristiwa) untuk mencegah token hilang dalam transaksi yang tidak tertangani. Standar yang ditingkatkan ini menyelesaikan bug kritis ERC20 dengan membuat fungsi transfer memberikan kesalahan pada transfer yang tidak valid dan membatalkan transaksi sehingga tidak ada dana yang hilang. Singkatnya, ERC223 berfokus pada keamanan.
Penambahan dan masalah
ERC223 menambahkan parameter data tambahan ke fungsi transfer, untuk memungkinkan operasi yang lebih kompleks daripada hanya transfer token.
Perhatian utama Dexaran adalah terlalu banyak orang yang dapat kehilangan token mereka dengan mengirimkannya ke kontrak menggunakan fungsi transfer, bukan metode setujui dan transferFrom seperti yang dibahas sebelumnya. Solusinya adalah memodifikasi metode transfer untuk memeriksa apakah alamat penerima adalah kontrak (yaitu berisi data) atau tidak. Jika itu adalah kontrak, maka diasumsikan bahwa ada fungsi tokenFallback untuk memanggilnya kembali. Kelemahan utamanya adalah jika tokenFallback tidak ada, maka fungsi fallback kontrak penerima akan dipanggil dan token yang dikirim mungkin masih hilang..
ERC777 standar
ERC777 adalah standar token baru yang dapat dipertukarkan yang bergantung pada ERC820 (Kontrak pseudo-introspection registry) dan mencoba untuk memecahkan masalah ERC20, seperti kurangnya mekanisme penanganan transaksi yang menyebabkan hilangnya jutaan dolar dari ekosistem Ethereum. Singkatnya, ERC777 berfokus pada adopsi dengan menawarkan a berbagai mekanisme penanganan transaksi.
Manfaat
Keuntungan utama ERC777 adalah menggunakan metode baru untuk mengenali antarmuka kontrak. Standar ini mengasumsikan bahwa ada pusat pendaftaran kontrak di jaringan Ethereum (ini didefinisikan dalam ERC820). Setiap orang dapat memanggil registri ini untuk mengetahui apakah alamat tertentu (tidak masalah apakah alamat ini kontrak atau tidak) mendukung serangkaian fungsi tertentu, yaitu `antarmuka`.
Salah satu masalah utama Ethereum adalah ketidakmampuan untuk mengetahui fungsi apa yang diimplementasikan kontrak. ERC820 dimaksudkan untuk mengatasi ini. ERC777 memanfaatkan pendekatan ini, yang tentunya merupakan ide yang bagus.
Di sisi lain, Anda dapat membuat token yang akan mengimplementasikan fungsi default ERC20 bersama dengan fungsi ERC777 baru tanpa penggantian (dan secara opsional mewarisi bug kritis ERC20). Ini dapat menjamin efek jaringan yang baik untuk standar token baru ini dan adopsi yang lebih cepat. Seperti yang diperlihatkan oleh praktik, tujuan utama pengembang token adalah mengumpulkan uang yang mengasumsikan bahwa mereka perlu mendorong token mereka ke bursa. Lebih mudah bagi pertukaran untuk mendukung token yang mengimplementasikan fungsi ERC20 lama (tidak masalah apakah fungsi ini mengandung bug atau tidak) tanpa penelitian apa pun tentang fungsionalitas yang lebih baru dari standar token baru. Semakin mudah pertukaran untuk mendukung token pada standar baru, semakin banyak pengembang akan menggunakannya. Ini meningkatkan adopsi ERC777, sementara ERC223 tidak memiliki properti ini.
Apa bedanya?
Standar token ini mendefinisikan sekumpulan fungsi yang benar-benar baru, yaitu fungsi `kirim` alih-alih fungsi` transfer`. `authoriseOperator` bukan` setujui`. Fungsi handler `tokensReceived` sebagai ganti fungsi handler` tokenFallback`.
Pendekatan semacam itu dapat menjamin bahwa fungsi standar ini tidak akan bersilangan dan menimpa dengan fungsi standar token lainnya, sehingga dimungkinkan untuk membuat token yang akan kompatibel dengan standar ERC777 dan ERC820 secara bersamaan..
Akhirnya, ERC777 melakukan standarisasi Mint dan Burn fungsionalitas token.
Poin kegagalan dan masalah keamanan
ERC777 mengimplementasikan fungsi `authoriseOperator` yang memungkinkan seseorang untuk mengelola token atas nama Anda. Dexaran menjelaskan kepada kami bahwa menurutnya metode ini sudah usang dan tidak boleh digunakan. Selain itu, memberi otorisasi kepada seseorang untuk mengelola token atas nama Anda merusak bandwidth jaringan dan membutuhkan lebih banyak bahan bakar. `authoriseOperator` sudah mewakili satu transaksi, dan transaksi lain diperlukan untuk melakukan "penarikan resmi". Jadi, dibutuhkan dua transaksi untuk melakukan transfer yang bisa dilakukan hanya dengan satu transaksi.
Selanjutnya, standar ERC777 berisi tanda opsional untuk mencegah token macet dengan melakukan beberapa pemeriksaan tentang antarmuka ITokenRecipient, dan untuk memeriksa apakah alamat tersebut masuk daftar putih. Karena standar ini difokuskan pada keamanan jaringan yang menangani token bernilai jutaan dolar, bukanlah hal yang baik untuk menjadikan pemeriksaan ini opsional.
Standar lainnya
Ada banyak standar lain seperti ERC827 yang menggabungkan beberapa keunggulan ERC223 dengan fungsi ERC20 lama. Itu ERC664 standar berfokus pada modularitas standar token. Standar ini memungkinkan kontrak token dapat ditingkatkan, tetapi mewarisi bug kritis ERC20. Standar lain termasuk ERC721, ERC677, dan ERC820, tetapi kurang terkenal.
Kompatibilitas antar standar
Kami bertanya kepada Dexaran standar mana yang kompatibel ke belakang. Dia memberi tahu kami bahwa pertama-tama kami harus memahami apa singkatan dari ‘kompatibilitas mundur’: “Kompatibilitas mundur adalah properti dari sistem, produk, atau teknologi yang memungkinkan interoperabilitas dengan sistem lama yang lebih lama, atau dengan masukan yang dirancang untuk sistem semacam itu.”
ERC20 & ERC223: Token ERC223 kompatibel dengan ERC20. Segala sesuatu yang dirancang untuk bekerja dengan baik dengan ERC20 (seperti dompet) dapat bekerja dengan ERC223 juga. Satu-satunya pengecualian di sini adalah kontrak yang mengandalkan persetujuan + transfer Dari pola setoran token. Namun, dimungkinkan untuk mengimplementasikan fungsi approve + transferFrom dengan token ERC223, bahkan jika mereka tidak termasuk dalam standar sekarang. Sedangkan untuk dompet dan layanan pihak ketiga yang bukan kontrak pintar, mereka mendukung ERC223 secara otomatis karena data panggilan masukan dari token ERC20 berlaku untuk ERC223.
ERC20 & ERC777: Anda dapat menemukan pernyataan berikut di bagian ‘Kompatibilitas Mundur’ pada proposal ERC777: “EIP ini tidak menyebabkan inkompatibilitas mundur dan kompatibel dengan standar token ERC-20 yang lebih lama.”
Namun, Dexaran memberi tahu kami hal yang sebaliknya dan memberi kami contoh ini: “Dompet dan layanan seperti MetaMask, Mist, dan MyEtherWallet bekerja dengan token ERC20. Input yang dirancang untuk token ERC20 adalah panggilan kontrak yang berisi parameter yang disandikan dan tanda tangan fungsi. Panggilan fungsi di Mesin Virtual Ethereum ditentukan oleh empat byte data pertama yang dikirim dengan transaksi. Tanda tangan 4-byte ini didefinisikan sebagai empat byte pertama dari hash representasi kanonik dari tanda tangan fungsi. Ini berarti bahwa fungsi `transfer (address, uint256)` dan `send (address, uint256)` akan memiliki tanda tangan yang berbeda. Akibatnya, masukan yang dirancang untuk token ERC20 tidak akan valid untuk token ERC777. ” Saat kami menggunakan definisi kompatibilitas mundur, ERC777 tidak kompatibel dengan standar token ERC20.
Kapan menggunakan standar yang mana
ERC20: Pengguna Reddit u / Dexaran memberi kami saran sarkastik ini, “Saat Anda ingin investor kehilangan uang karena bug”.
ERC223: Standar token ini juga dapat digunakan bersama dengan ERC777. ERC777 memiliki beberapa fitur elegan yang tidak dimiliki ERC223, tetapi logika ERC223 sangat mudah dibandingkan dengan ERC777 yang dapat menjamin bahwa hal itu akan bermanfaat. lebih sedikit kode yang rawan kesalahan. Selain itu, ERC223 tidak bergantung pada layanan pusat apa pun yang berarti token ERC223 Anda hanya akan bergantung pada implementasi Anda sendiri. Seperti yang telah kami sebutkan sebelumnya, ERC223 bertujuan untuk peningkatan keamanan, tetapi ini membuat token ERC223 tidak sesuai dengan standar ERC20.
ERC777: Standar token ini sudah dapat digunakan. Di sisi lain, ERC777 memiliki beberapa masalah keamanan seperti yang disebutkan di atas. Mereka juga mengandalkan registri kontrak pusat yang merupakan masalah keamanan juga. Registri pusat dapat membuat hidup pengembang lebih mudah tetapi juga bertindak sebagai titik pusat kegagalan persis seperti pada Parity Multisig. Semua Parity Multisigs mengandalkan pustaka kode pusat. Kebetulan ada bug di perpustakaan dan itu dieksploitasi. Akibatnya, semua Parity Multisigs mengalami crash. Selain itu, ERC777 mendefinisikan satu set fungsi baru. Ini adalah upaya untuk memungkinkan pengembang token membuat token mereka kompatibel dengan standar ERC20 dan ERC777 secara bersamaan untuk kepentingan adopsi. Ini berarti bahwa pengembang dapat mewarisi bug ERC20 di ERC777, tetapi memungkinkan pengembang untuk menggunakan lebih banyak peristiwa penanganan transaksi.
Secara umum: Semua token memiliki kasus penggunaan yang serupa – ICO. Saya akan mengatakan bahwa ERC223 dan ERC777 mencoba memecahkan satu masalah ERC20 dengan cara yang berbeda. ERC223 sudah mengambil tempatnya Ethereum Klasik bukan ERC20.
Artikel ini dibuat dengan bantuan Dexaran, pengembang ERC223. Beberapa komentar Paul Edge tentang standar token Ethereum juga digunakan.