Adalah sangat terkenal bahawa kontrak pintar boleh menjadi sukar. Orang bukan teknikal tergoda untuk membeli token ERC20 berdasarkan tahap gembar-gembur, tanpa pengetahuan sebelumnya mengenai kualiti token dan keselamatan token yang mereka beli.
Bitfinex, salah satu pertukaran crypto terbesar dalam industri, telah mengeluarkan token yang dipanggil LEO. Token ini membolehkan entiti yang mengendalikannya mencetak atau mencetak token baru tanpa had, juga membolehkan mereka menghapus syiling sesiapa sahaja termasuk tetapi tidak terhad kepada yang ada di bursa terpusat atau terdesentralisasi, storan panas atau sejuk, dompet perkakasan atau perisian, dan / atau kertas atau dompet otak.
Jangan tertipu, membeli ERC20 tidak bermaksud aset anda benar-benar milik anda! Ini bukan kali pertama saya mendedahkan kontrak pintar seperti itu. Baru minggu lalu kami menerbitkan laporan mengenai Cointelligence mengenai kontrak pintar serupa yang membolehkan fungsi yang sama, lihat ulasan kami mengenai WHEN Smart Contract.
Adakah kontrak LEO ERC20 memungkinkan penipuan dan / atau penipuan berbilion dolar?
Kami serahkan kepada anda untuk membuat keputusan, sekarang mari kita selami Token LEO.
Pengenalan
LEO adalah token ERC20 yang diperkenalkan pada 10 Mei 2019 oleh iFinex Inc. di pengumuman mereka. Anda boleh mendapatkan Buku Putih LEO di sini. Walaupun kami tidak dapat mencari repositori GitHub, kod kontrak token mereka telah disahkan di Etherscan. Kami menggunakan kod Etherscan yang disahkan untuk LEO, LeoController, dan TokenFactory untuk menguji dan menyebarkan salinan token ini di testnet Ropsten.
Token LEO – Token ERC20 yang dikeluarkan oleh Unus Sed Leo Limited, anak syarikat iFinex Inc..
Pengawal – Kontrak pengawal membolehkan pemilik memindahkan, menyetujui, mengeluarkan, membakar, dan menukar pengawal itu sendiri. Perhatikan juga bahawa walaupun kontrak “0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672” pada masa ini “mengawal” kontrak LEO ERC20, “pengawal” dapat dengan mudah ditingkatkan atau diubah ke alamat mana-mana sahaja pada bila-bila masa oleh pemilik sehingga membolehkan mereka melakukan apa-apa dengan token LEO.
Kontrak LEOController: Pemilik boleh menukar “Pengawal” kontrak LEO ERC20
The LEOController pemilik kontrak boleh menukar “pengawal” pada bila-bila masa dan menetapkannya ke alamat dompet yang mereka kendalikan.
- Dengan memanggil fungsi “upgradeController” pada talian 698 dan memasukkan alamat dompet pilihan mereka.
- Setelah transaksi di atas disahkan, alamat yang dimasukkan akan menjadi “pengawal” Kontrak LEO ERC20 yang baru.
Kontrak LEO: Pemilik boleh membakar token anda dan mendapatkan token baru tanpa had
Bagaimana mungkin pemilik LEO terus mencetak token selama-lamanya?
Seperti yang dijelaskan sebelumnya, setelah alamat pengawal diubah menjadi alamat dompet (atau bahkan kontrak pintar baru), mereka hanya dapat memanggil fungsi “menghasilkanTokens” pada baris 460.
Parameter
- _owner → Dompet yang akan menerima token LEO yang baru dicetak.
- _amount → Jumlah token untuk “mencetak” yang akan pergi ke alamat di atas.
Catatan – Buku putih LEO tidak menyebutkan berapa jumlah token maksimum dan kontrak ini membolehkan mereka terus mencetak token LEO kerana kami dapat “mencetak” token LEO empat juta pada testnet menggunakan kod mereka.
Bagaimana pemilik LEO boleh menghapus token orang lain?
Fungsi “faaumatiaTokens” pada 477 membolehkan dompet pengawal LEO membakar token LEO sesiapa sahaja termasuk tetapi tidak terhad kepada yang terdapat dalam pertukaran terpusat atau terdesentralisasi, dompet perkakasan atau perisian, penyimpanan panas atau sejuk, dan / atau kertas atau otak dompet. Tidak kira di mana duit syiling anda berada, mereka boleh memadamkan duit syiling anda jika mereka mahu. Semudah itu.
Parameter
- _owner → Dompet dari mana token LEO yang ada akan dibakar.
- _amount → Jumlah token untuk “hapus” dari alamat dompet yang disebutkan di atas.
Bukti Lebih Lanjut
Kami menyalin kod yang sama untuk token, pengawal, dan kilang LEO ERC20 untuk menerapkan kontrak berikut di Ropsten testnet.
Dompet / Alamat
- Alamat Pengirim: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Alamat yang dihasilkan secara rawak: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Mula-mula kita menukar pengawal dari alamat Pengirim ke salinan “LEOController” untuk melihat apakah kita dapat mengubah pengawal kembali ke alamat Pengirim menggunakan fungsi “upgradeController”.
Langkah-langkah
- Kilang Token Digunakan
- Token LEO Digunakan
- LEOController Digunakan
- Memeriksa siapa sebenarnya “pengawal” pada kontrak token LEO: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Mengubah pengawal menggunakan fungsi “changeController” pada kontrak LEO untuk digunakan sebelumnya Kontrak “LEOController”
- Mengesahkan bahawa pengawal sebenarnya ditukar ke alamat kontrak pintar.
Pada tahap ini, kontrak LEO testnet kami sama dengan kontrak LEO ERC20 dengan cara berikut
- Pengawal kontrak LEO adalah kontrak pintar.
- Kod pengawal di testnet betul-betul sesuai dengan yang satu di mainnet.
Sekarang, kami cuba menentukan:
- Sekiranya kita dapat membakar atau memusnahkan token LEO orang lain dengan menukar pengawal terlebih dahulu.
- Sekiranya kita dapat mengeluarkan sejumlah besar token LEO untuk melihat apakah ada had.
Langkah-langkah
- Walaupun, pada saat ini, kami tahu bahawa tidak mungkin pemilik menukar pengawal pada kontrak “LEO” menggunakan fungsi “changeController”, kami masih dengan sengaja mengirim transaksi tersebut untuk mengembalikan atau gagal. Gagal
- Kami pergi ke kontrak “LEOController” dan menggunakan fungsi “upgradeController” untuk menukar pengawal kontrak pintar terkawal, iaitu LEO, ke alamat Pengirim sekali lagi. Berjaya
Catatan – bahawa kami menukar pengawal dari Pengirim ke kontrak pintar dan sekali lagi kembali ke Pengirim kerana kami ingin menunjukkan kepada anda bahawa agak mudah bagi kami untuk menukar pengawal dalam testnet (dan untuk mereka di mainnet).
Mengeluarkan Token
Oleh kerana sekarang Pengirim adalah pengawal kontrak LEO lagi, ia dapat mengakses fungsi kontrak LEO “generatorTokens” dan “destruktif Tokens”. Kami menghasilkan alamat dompet rawak “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” untuk menghantar beberapa sejumlah besar token LEO 1,000,000,000,000,000,000,000,000,000,000,000,000,000 (satu undecillion) LEO dipindahkan.
Token Pembakar
Kami ingin menentukan sama ada kami (Pengirim) dapat menghapus atau memusnahkan token dari alamat rawak 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 yang kami hasilkan sebelum ini.
Dalam urus niaga di atas, kami berjaya membakar / menghapus / memusnahkan 10,000,000,000 (sepuluh bilion) token dari dompet orang lain atau alamat yang tidak kami miliki.
Anda dapat melihat bahawa alamat “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” kini mempunyai baki 999,999,999,999,999,999,999,999,990,000,000,000 (sembilan ratus sembilan puluh sembilan desil, sembilan ratus sembilan puluh sembilan sembilan, sembilan ratus sembilan puluh sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan sembilan , sembilan ratus sembilan puluh sembilan quintillion, sembilan ratus sembilan puluh sembilan quadrillion, sembilan ratus sembilan puluh sembilan trilion, sembilan ratus sembilan puluh bilion) token testnet LEO sahaja.
Perbandingan Kontrak | |||
LEO | Asal | Testnet | Diff |
MiniMeTokenFactory | Asal | Testnet | Diff |
LEOController | Asal | Testnet | Diff |
TLDR: Bagaimana ini mempengaruhi saya?
Paolo Ardoino, CTO Bitfinex, membalas tweet kami yang menggariskan masalah ini, dengan menyatakan:
“Atas alasan keselamatan dan bukti masa depan, kami meninggalkan kemampuan untuk meningkatkan Token Kontrak. Itu benar-benar ciri utama untuk kontrak yang mungkin hidup bertahun-tahun. Mencetak lebih banyak token tidak akan masuk akal untuk Finex … seperti menembak kaki kita. “
Kami bukan sahaja menyukai tweetnya tetapi juga ingin mengucapkan terima kasih secara terbuka atas jawapannya, kerana kami yakin ini adalah bagaimana kami dapat mempertanggungjawabkan diri dan membantu membimbing industri ini ke arah masa depan yang lebih baik.
Sekarang mari kita kembali ke perniagaan! Perhatikan bahawa kontrak pintar dirancang agar tidak boleh dipercayai. Bitfinex memecah kepercayaan di sini dengan meletakkan pintu belakang di sini, yang memberi mereka tiket untuk menipu setiap kali mereka memerlukan, dengan kelebihan yang tidak adil terhadap orang seperti anda dan saya. Berulang kali sepanjang keseluruhan artikel ini, satu-satunya fakta yang telah kami tunjukkan adalah kemampuan mereka untuk mencetak sejumlah (atau tanpa had) sejumlah duit syiling LEO mengikut budi bicara mereka dan menghapus duit syiling dompet mana pun, sekarang atau akan datang.
Untuk meringkaskan dan mempermudah segalanya bagi pembaca bukan teknikal kami, kami tidak menolak atau mempersoalkan kemampuan kontrak pintar untuk ditingkatkan. Masalahnya di sini bukan teknikal tetapi falsafah. Sekiranya anda baik-baik saja dengan Bitfinex dapat melakukan apa yang boleh mereka lakukan dengan LEO, kami juga memahami hal itu dan menghormati pandangan anda. Tetapi bagi kami, LEO tidak bermain dengan semangat dan falsafah blockchain kerana mereka boleh menentukan syarat. Juga, berdasarkan pemahaman kami yang lemah dan rendah hati, cryptocurrency:
- Harus terbuka untuk semua orang. Anda boleh datang dan pergi sesuka hati. ✓
- Harus berlaku adil. Tidak ada orang yang harus mempunyai kelebihan yang tidak adil berbanding orang lain. ✘
- Harus inklusif. Ia tidak boleh dibatasi kepada siapa pun tanpa mengira apa yang mereka katakan atau lakukan atau dari mana asalnya, sebaliknya tidak peduli sama sekali "who" mereka atau "apa" mereka mungkin menjadi. ✘
- Harus tahan penapisan jika tidak bebas penapisan. Tidak ada yang boleh dihalang untuk menggunakan atau mengakses ciri apa pun pada waktu tertentu. Ketika datang ke rangkaian blockchain (kontrak pintar dalam kes ini), bahkan pelaku buruk seperti penipu, penggodam, dan penipu harus diperlakukan dengan cara yang tidak disensor – secara inklusif, sama rata, terbuka, dan adil. Sekiranya anda tidak dapat menapis pelakon jahat dalam Bitcoin, mengapa anda mesti dapat melakukannya di LEO? “Kemasukan” tidak membenarkan “kemampuan” menentukan istilah. ✘
- Harus berubah. Apa sahaja yang berlaku harus tinggal di sana selama-lamanya bagi sesiapa sahaja dan semua orang untuk mengesahkan, bersetuju atau tidak. ✓
- Rangkaian harus terdesentralisasi. Seharusnya tidak ada entiti pusat yang dapat menentukan syarat mengenai apa yang harus berlaku. Walaupun rangkaian Ethereum terdesentralisasi, kontrak token LEO bukan kerana mereka dapat menentukan syarat. ✘
- Harus diedarkan. Setiap orang harus dapat memperoleh sejarah rangkaian dan mengesahkan kesahihan data. ✓
Orang mempercayai blockchain kerana tidak boleh dipercayai. Sifat blockchain yang tidak dipercayai dan dipercayai menjadikan orang seperti anda dan saya berminat dengan teknologi yang luar biasa ini.
Kami tidak menyimpan dendam terhadap Bitfinex pada tahap peribadi, tetapi tidak takut untuk menuding jari kepada mereka apabila kami merasakan mereka salah dan mereka perlu melakukan perkara yang betul. Kami menawarkan penyelesaian kepada Bitfinex, untuk membuat token baru tanpa ciri tersebut dan menukarnya dengan pelabur. Tindakan ini sahaja dapat meningkatkan keyakinan pelabur terhadap token LEO.
Akhirnya, perbahasan ini boleh berlaku dalam bulatan kerana Bitfinex berpendapat mereka memerlukan “peningkatan kemampuan” (adakah mereka benar-benar?) Dan kami tidak akan menerima kenyataan bahawa duit syiling orang lain boleh dihapuskan walaupun itu bukan milik kami. Kami dengan ini menyerahkan kes kami kepada anda, pembaca kami yang luar biasa, untuk membuat keputusan anda sendiri dan melihat apakah anda ingin mempercayai kontrak LEO ERC20.