Sudah sangat diketahui bahwa kontrak pintar bisa jadi rumit. Orang-orang non-teknis tergoda untuk membeli token ERC20 berdasarkan level hype, tanpa pengetahuan sebelumnya mengenai kualitas token dan keamanan token yang mereka beli.
Bitfinex, salah satu bursa crypto terbesar di industri, telah mengeluarkan token yang disebut LEO. Token ini memungkinkan entitas yang mengontrolnya untuk mencetak atau mencetak token baru tanpa batas, juga memungkinkan mereka untuk menghapus koin siapa pun termasuk tetapi tidak terbatas pada yang ada di bursa terpusat atau terdesentralisasi, penyimpanan panas atau dingin, dompet perangkat keras atau perangkat lunak, dan / atau kertas atau dompet otak.
Jangan tertipu, membeli ERC20 bukan berarti aset Anda benar-benar milik Anda! Ini bukan pertama kalinya saya mengungkap kontrak pintar semacam itu. Baru minggu lalu kami menerbitkan di Cointelligence sebuah laporan tentang kontrak pintar serupa yang memungkinkan fungsi yang sama, lihat ulasan kami tentang KAPAN Kontrak Cerdas.
Apakah kontrak LEO ERC20 memungkinkan penipuan dan / atau penipuan bernilai miliaran dolar?
Kami menyerahkan kepada Anda untuk memutuskan, sekarang mari selami lebih dalam tentang Token LEO.
pengantar
LEO adalah token ERC20 yang diperkenalkan pada 10 Mei 2019 oleh iFinex Inc. di pengumuman mereka. Anda dapat menemukan Buku Putih LEO sini. Meskipun kami tidak dapat menemukan repositori GitHub, kode kontrak token mereka telah diverifikasi di Etherscan. Kami menggunakan kode Etherscan terverifikasi untuk LEO, LeoController, dan TokenFactory untuk menguji dan menerapkan salinan token ini di Ropsten testnet.
Token LEO – Token ERC20 yang diterbitkan oleh Unus Sed Leo Limited, anak perusahaan iFinex Inc.
Kontroler – Kontrak pengontrol memungkinkan pemilik untuk mentransfer, menyetujui, menerbitkan, membakar, dan mengubah pengontrol itu sendiri. Harap perhatikan juga bahwa meskipun kontrak “0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672” saat ini “mengontrol” kontrak LEO ERC20, “pengontrol” dapat dengan mudah ditingkatkan atau diubah ke alamat mana pun kapan saja oleh pemilik sehingga memungkinkan mereka untuk melakukan banyak hal dengan token LEO.
Kontrak LEOController: Pemilik dapat mengubah “Pengontrol” kontrak LEO ERC20
Itu LEOController pemilik kontrak dapat mengubah “pengontrol” kapan saja dan mengaturnya ke alamat dompet mana pun yang mereka kontrol.
- Dengan memanggil fungsi “upgradeController” di baris 698 dan memasukkan alamat dompet pilihan mereka.
- Setelah transaksi di atas dikonfirmasi, alamat yang dimasukkan akan menjadi “pengendali” baru Kontrak LEO ERC20.
Kontrak LEO: Pemilik dapat membakar token Anda dan mencetak token baru tanpa batas
Bagaimana pemilik LEO bisa terus mencetak token selamanya?
Seperti dijelaskan sebelumnya, setelah alamat pengontrol diubah ke alamat dompet (atau bahkan kontrak pintar baru), mereka dapat dengan mudah memanggil fungsi “generateTokens” pada baris 460.
Parameter
- _owner → Dompet yang akan menerima token LEO yang baru dibuat.
- _amount → Jumlah token yang akan “dicetak” yang akan dikirim ke alamat di atas.
Catatan – Whitepaper LEO tidak menyebutkan jumlah maksimum pasokan token dan kontrak ini memungkinkan mereka untuk terus mencetak token LEO karena kami dapat “mencetak” kuadriliun token LEO di testnet menggunakan kode mereka.
Bagaimana pemilik LEO bisa menghapus token orang lain?
Fungsi “destroyTokens” pada 477 memungkinkan dompet pengontrol LEO untuk membakar token LEO siapa pun termasuk namun tidak terbatas pada token yang ada dalam pertukaran terpusat atau terdesentralisasi, dompet perangkat keras atau perangkat lunak, penyimpanan panas atau dingin, dan / atau kertas atau otak dompet. Tidak masalah di mana koin Anda, mereka dapat menghapus koin Anda jika mereka mau. Sesimpel itu.
Parameter
- _owner → Dompet tempat token LEO yang ada akan dibakar.
- _amount → Jumlah token yang akan “dihapus” dari alamat dompet yang disebutkan di atas.
Bukti lebih lanjut
Kami menyalin kode yang sama persis untuk token LEO ERC20, pengontrol, dan pabrik untuk menerapkan kontrak berikut pada Ropsten testnet.
Dompet / Alamat
- Alamat Pengirim: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Alamat yang dibuat secara acak: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Pertama kita mengubah pengontrol dari alamat Pengirim ke salinan “LEOController” untuk melihat apakah kita dapat mengubah pengontrol kembali ke alamat Pengirim menggunakan fungsi “upgradeController”.
Langkah
- Pabrik Token Diterapkan
- Token LEO Diterapkan
- LEOController Diterapkan
- Memeriksa siapa sebenarnya “pengontrol” di kontrak token LEO: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Mengubah pengontrol menggunakan fungsi “changeController” pada kontrak LEO menjadi diterapkan sebelumnya Kontrak “LEOController”
- Mengonfirmasi bahwa pengontrol benar-benar diubah ke alamat kontrak pintar.
Pada titik ini, kontrak LEO testnet kami sama persis dengan kontrak LEO ERC20 dalam hal-hal berikut
- Pengontrol kontrak LEO adalah kontrak pintar.
- Kode pengontrol di testnet sama persis dengan yang satu di mainnet.
Sekarang, kami mencoba untuk menentukan:
- Jika kami dapat membakar atau menghancurkan token LEO orang lain dengan mengubah pengontrol terlebih dahulu.
- Jika kami dapat mengeluarkan token LEO dalam jumlah yang sangat besar untuk melihat apakah ada batasannya.
Langkah
- Meskipun, pada titik ini, kami tahu bahwa tidak mungkin bagi pemilik untuk mengubah pengontrol pada kontrak “LEO” menggunakan fungsi “changeController”, kami tetap sengaja mengirimkan transaksi tersebut agar dapat dikembalikan atau gagal. Gagal
- Kami pergi ke kontrak “LEOController” dan menggunakan fungsi “upgradeController” untuk mengubah pengontrol kontrak pintar terkontrol, yaitu LEO, ke alamat Pengirim lagi. Berhasil
Catatan – bahwa kami mengubah pengontrol dari Pengirim ke kontrak pintar dan kemudian kembali ke Pengirim karena kami ingin menunjukkan kepada Anda bahwa cukup mudah bagi kami untuk mengubah pengontrol di testnet (dan untuk mereka di mainnet).
Penerbitan Token
Karena sekarang Pengirim adalah pengontrol kontrak LEO lagi, Pengirim dapat mengakses fungsi kontrak LEO “generateTokens” dan “destroyTokens”. Kami membuat alamat dompet acak “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” untuk mengirim beberapa secara gila-gilaan token LEO dalam jumlah besar 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000 (satu undecillion) LEO ditransfer.
Token Pembakaran
Kami ingin menentukan apakah kami (Pengirim) dapat menghapus atau menghancurkan token dari alamat acak 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 yang kami buat sebelumnya.
Dalam transaksi di atas, kami berhasil membakar / menghapus / menghancurkan 10.000.000.000 (sepuluh miliar) token dari dompet orang lain atau alamat yang tidak kami miliki.
Anda dapat melihat bahwa alamat “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” sekarang memiliki saldo 999,999,999,999,999,999,999,999,990,000,000,000 (sembilan ratus sembilan puluh sembilan puluh sembilan triliun sembilan ratus sembilan puluh sembilan juta sembilan puluh sembilan ratus sembilan puluh sembilan ratus sembilan puluh sembilan miliar sembilan puluh sembilan ratus sembilan puluh sembilan miliar sembilan puluh sembilan , sembilan ratus sembilan puluh sembilan triliun, sembilan ratus sembilan puluh sembilan kuadriliun, sembilan ratus sembilan puluh sembilan triliun, sembilan ratus sembilan puluh miliar) hanya token testnet LEO.
Perbandingan Kontrak | |||
LEO | Asli | Testnet | Diff |
MiniMeTokenFactory | Asli | Testnet | Diff |
LEOController | Asli | Testnet | Diff |
TLDR: Bagaimana ini mempengaruhi saya?
Paolo Ardoino, CTO dari Bitfinex, membalas tweet kami yang menguraikan masalah ini, menyatakan:
“Demi keamanan dan alasan bukti di masa mendatang, kami juga meninggalkan kemampuan untuk meningkatkan Kontrak Token. Itu benar-benar fitur kunci untuk kontrak yang mungkin berumur bertahun-tahun. Meminta lebih banyak token tidak akan masuk akal bagi Finex … seperti menembak kaki kita. “
Kami tidak hanya menyukai tweetnya, tetapi juga ingin berterima kasih secara terbuka atas balasannya, karena kami percaya inilah cara kami meminta pertanggungjawaban dan membantu memandu industri ini menuju masa depan yang lebih baik..
Sekarang mari kita kembali ke bisnis! Perhatikan baik-baik bahwa kontrak pintar dirancang untuk tidak dapat dipercaya. Bitfinex merusak kepercayaan di sini dengan meletakkan pintu belakang di sini, yang memberi mereka tiket untuk menipu kapan pun mereka perlu, dengan keuntungan yang tidak adil atas orang-orang seperti Anda dan saya. Berulang kali di seluruh artikel ini, satu-satunya fakta yang kami tunjukkan adalah kemampuan mereka untuk mencetak koin LEO dalam jumlah berapa pun (atau tidak terbatas) atas kebijaksanaan mereka dan menghapus koin dompet apa pun, sekarang atau di masa depan.
Untuk meringkas dan menyederhanakan segalanya untuk pembaca non-teknis kami, kami tidak menyangkal atau mempertanyakan kemampuan kontrak pintar untuk dapat ditingkatkan. Masalahnya di sini bukanlah teknis tetapi filosofis. Jika Anda setuju Bitfinex dapat melakukan apa yang dapat mereka lakukan dengan LEO, kami juga memahami hal itu dan menghormati sudut pandang Anda. Tetapi bagi kami, LEO tidak cocok dengan semangat dan filosofi blockchain karena mereka dapat mendikte persyaratan. Juga, berdasarkan pemahaman kami yang cacat dan rendah hati, sebuah cryptocurrency:
- Harus terbuka untuk semua orang. Anda bisa datang dan pergi sesuka Anda. ✓
- Harus adil. Tidak seorang pun boleh memiliki keuntungan yang tidak adil atas orang lain. ✘
- Harus inklusif. Itu tidak boleh dibatasi untuk siapa pun terlepas dari apa yang mereka katakan atau lakukan atau dari mana mereka berasal, alih-alih "WHO" mereka atau "apa" mereka mungkin bisa menjadi. ✘
- Harus tahan sensor jika tidak bebas sensor. Tidak seorang pun boleh berhenti menggunakan atau mengakses fitur apa pun pada titik waktu tertentu. Ketika datang ke jaringan blockchain (kontrak pintar dalam hal ini), bahkan pelaku jahat seperti penipu, peretas, dan penipu harus diperlakukan dengan cara yang tidak disensor – secara inklusif, setara, terbuka, dan adil. Jika Anda tidak dapat menyensor pelaku jahat di Bitcoin, mengapa Anda dapat melakukannya di LEO? “Peningkatan” tidak membenarkan “kemampuan” untuk mendikte istilah. ✘
- Harus kekal. Apa pun yang telah terjadi harus tetap ada selamanya agar setiap orang dan semua orang dapat memvalidasi, menyetujui, atau tidak setuju. ✓
- Jaringan harus didesentralisasi. Seharusnya tidak ada entitas pusat yang dapat mendikte persyaratan tentang apa yang harus terjadi. Meskipun jaringan Ethereum terdesentralisasi, kontrak token LEO bukan karena mereka dapat mendikte persyaratan. ✘
- Harus didistribusikan. Setiap orang harus bisa mendapatkan riwayat jaringan dan memvalidasi keaslian data. ✓
Orang-orang mempercayai blockchain karena tidak dapat dipercaya. Sifat blockchain yang terpercaya dan tidak dapat dipercaya membuat orang-orang seperti Anda dan saya tertarik pada teknologi luar biasa ini.
Kami tidak menyimpan dendam apa pun terhadap Bitfinex pada tingkat pribadi, tetapi tidak takut untuk menunjukkan jari kami kepada mereka ketika kami merasa mereka salah dan mereka perlu melakukan hal yang benar. Kami menawarkan solusi untuk Bitfinex, untuk membuat token baru tanpa fitur tersebut dan menukarnya dengan investor. Tindakan ini sendiri mungkin dapat meningkatkan kepercayaan investor pada token LEO.
Akhirnya, perdebatan ini bisa berputar-putar karena Bitfinex akan berpendapat bahwa mereka membutuhkan “kemampuan ditingkatkan” (benarkah?) Dan kami tidak akan begitu saja menerima fakta bahwa koin orang lain dapat dihapus meskipun itu bukan milik kami. Kami dengan ini menyerahkan kasus kami kepada Anda, pembaca kami yang luar biasa, untuk mengambil keputusan sendiri dan melihat apakah Anda ingin mempercayai kontrak LEO ERC20.