Este foarte bine cunoscut faptul că contractele inteligente pot fi dificile. Oamenii non-tehnici sunt tentați să cumpere un jeton ERC20 pe baza nivelului de hype, fără nicio cunoștință prealabilă cu privire la calitatea jetonului și siguranța jetonului pe care îl cumpără.
Bitfinex, unul dintre cele mai mari schimburi criptografice din industrie, a emis un simbol numit LEO. Acest jeton permite entității care îl controlează să imprime sau să imprime noi jetoane nelimitate, de asemenea, le permite să șteargă monedele oricui, inclusiv, dar fără a se limita la acestea, pe schimburi centralizate sau descentralizate, stocare la cald sau la rece, portofel hardware sau software și / sau portofel de hârtie sau creier.
Nu vă lăsați păcăliți, cumpărarea unui ERC20 nu înseamnă că activele dvs. sunt cu adevărat ale voastre! Nu este prima dată când expun un contract atât de inteligent. Chiar săptămâna trecută am publicat pe Cointelligence un raport despre un contract inteligent similar care permite aceeași funcționalitate, consultați recenzia noastră despre WHEN Smart Contract.
Contractul LEO ERC20 permite înșelăciunea și / sau frauda de mai multe miliarde de dolari??
Vă lăsăm pe voi să decideți, acum să ne scufundăm adânc în Tokenul LEO.
Introducere
LEO este un token ERC20 introdus pe 10 mai 2019 de iFinex Inc. în anunțul lor. Puteți găsi Cartea albă LEO Aici. Deși nu am reușit să găsim un depozit GitHub, codul lor de contract token a fost verificat pe Etherscan. Am folosit codul Etherscan verificat pentru LEO, LeoController și TokenFactory pentru a testa și implementa o copie a acestui simbol în Ropsten testnet.
Jeton LEO – Jetonul ERC20 emis de Unus Sed Leo Limited, o filială a iFinex Inc.
Controlor – Contractul de controler permite proprietarului să transfere, să aprobe, să emită, să ardă și să schimbe controlerul însuși. Rețineți, de asemenea, că, deși contractul „0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672” în prezent „controlează” contractul LEO ERC20, „controlorul” poate fi ușor actualizat sau schimbat la orice adresă în orice moment de către proprietar, permițându-le astfel să facă aproape orice cu simbolul LEO.
Contractul LEOController: Proprietarul poate schimba „Controlerul” contractului LEO ERC20
LEOController proprietarul contractului poate schimba „controlerul” în orice moment și îl poate seta la orice adresă de portofel pe care o controlează.
- Apelând funcția „upgradeController” pe linia 698 și introducând orice adresă de portofel la alegere.
- Odată ce tranzacția de mai sus este confirmată, adresa introdusă va deveni noul „controlor” al Contractului LEO ERC20.
Contract LEO: Proprietarul vă poate arde jetoanele și poate crea noi jetoane nelimitate
Cum ar putea proprietarul LEO să continue să bată jetoane pentru totdeauna?
După cum s-a explicat anterior, odată ce adresa controlerului a fost schimbată într-o adresă de portofel (sau chiar un nou contract inteligent), acestea ar putea pur și simplu să apeleze funcția „generateTokens” de pe linia 460.
Parametrii
- _proprietar → Portofelul care va primi jetoanele LEO nou create.
- _sumă → Cantitatea de jetoane de „tipărit” care vor merge la adresa de mai sus.
Notă – Cartea albă LEO nu menționează care este aprovizionarea maximă de jetoane și acest contract le permite să continue să crească jetoane LEO, deoarece am reușit să „imprimăm” un jetoan LEO pe un testnet folosind codul lor folosind codul lor.
Cum ar putea proprietarul LEO să șteargă jetoanele altcuiva?
Funcția „destroyTokens” de pe 477 permite portofelului controlerului LEO să ardă jetoanele LEO ale oricui, inclusiv, dar fără a se limita la cele prezente într-un schimb centralizat sau descentralizat, un portofel hardware sau software, stocare la cald sau la rece și / sau o hârtie sau un creier portofel. Nu contează unde sunt monedele tale, ele îți pot șterge monedele dacă doresc. Simplu ca buna ziua.
Parametrii
- _proprietar → Portofelul din care vor fi arse jetoanele LEO existente.
- _sumă → Cantitatea de jetoane de „șters” de pe adresa portofelului menționată mai sus.
Dovezi suplimentare
Am copiat exact același cod pentru simbolul, controlerul și fabrica LEO ERC20 pentru a implementa următorul contract pe Ropsten testnet.
Portofele / Adrese
- Adresa expeditorului: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Adresă generată aleatoriu: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Mai întâi am schimbat controlerul de la adresa expeditorului la o copie a „LEOController” pentru a vedea dacă putem schimba din nou controlerul la adresa expeditorului folosind funcția „upgradeController”.
Pași
- Fabrica de jetoane Implementat
- Jeton LEO Implementat
- LEOController Implementat
- Am verificat cine este de fapt „controlorul” contractului de jeton LEO: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Schimbat controlerul folosind funcția „changeController” din contractul LEO la implementat anterior Contract „LEOController”
- Confirmat că controlerul a fost de fapt schimbat la adresa contractului inteligent.
În acest moment, contractul nostru testnet LEO este exact similar cu contractul LEO ERC20 în următoarele moduri
- Controlorul contractului LEO este un contract inteligent.
- Codul controlerului în testnet se potriveste exact cu cel în mainnet.
Acum, încercăm să stabilim:
- Dacă putem arde sau distruge jetoanele LEO ale altcuiva schimbând mai întâi controlerul.
- Dacă putem emite o cantitate extrem de mare de jeton LEO pentru a vedea dacă există o limită.
Pași
- Deși, în acest moment, știam că nu este posibil ca proprietarul să schimbe controlerul contractului „LEO” utilizând funcția „changeController”, am trimis în mod intenționat acea tranzacție pentru ca aceasta să revină sau să eșueze. A eșuat
- Am mers la contractul „LEOController” și am folosit funcția „upgradeController” pentru a schimba din nou controlorul contractului inteligent controlat, adică LEO, la adresa expeditorului. Reușit
Notă – că am schimbat controlerul de la expeditor la un contract inteligent și apoi din nou la expeditor pentru că am vrut să vă arătăm că este destul de ușor pentru noi să schimbăm controlerul într-o rețea de testare (și pentru ei în rețeaua principală).
Emiterea de jetoane
Din moment ce Expeditorul este din nou controlorul contractului LEO, poate accesa funcțiile contractului LEO „generateTokens” și „destroyTokens”. Am generat o adresă aleatorie a portofelului „0xada183F6Ff6E7805EE5bDA701d40958858FeE548” pentru a le trimite cu nebunie o cantitate imensă de jetoane LEO 1.000.000.000.000.000.000.000.000.000.000.000.000.000 (o undecilie) LEO transferat.
Jetoane arzătoare
Am vrut să stabilim dacă noi (Expeditorul) putem șterge sau distruge jetoane de la adresa aleatorie 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 pe care le-am generat anterior.
În tranzacția de mai sus, am ars / șters / distrus cu succes 10.000.000.000 (zece miliarde) de jetoane din portofelul altcuiva sau de pe o adresă pe care nu o dețineam.
Puteți vedea că adresa „0xada183F6Ff6E7805EE5bDA701d40958858FeE548“ are acum un sold de 999,999,999,999,999,999,999,999,990,000,000,000 (990-9 decillion, 990-9 nonillion, 990-9 octillion, 990-9 septillion, 990-9 sextilioane , nouă sute nouăzeci și nouă de cinci miliarde, nouă sute nouăzeci și nouă de miliarde, nouă sute nouăzeci și nouă de miliarde, nouă sute nouăzeci de miliarde) testnet LEO token.
Compararea contractelor | |||
LEU | Original | Testnet | Diff |
MiniMeTokenFactory | Original | Testnet | Diff |
LEOController | Original | Testnet | Diff |
TLDR: Cum mă afectează acest lucru?
Paolo Ardoino, CTO al Bitfinex, a răspuns la tweet-ul nostru care subliniază această problemă, afirmând:
„Din motive de securitate și dovezi viitoare, am lăsat și posibilitatea de a actualiza contractul de token. Aceasta este cu adevărat o caracteristică cheie pentru un contract care ar putea trăi mulți ani. Imprimarea mai multor jetoane nu ar avea sens pentru Finex … cum ar fi să ne tragem piciorul. „
Nu numai că ne-a plăcut tweet-ul său, dar am dori, de asemenea, să-i mulțumim public pentru răspunsul său, deoarece credem că astfel ne putem trage la răspundere și ne putem ajuta să orientăm această industrie către un viitor mai bun.
Acum să revenim la afaceri! Rețineți că contractele inteligente sunt concepute pentru a nu avea încredere. Bitfinex rupe încrederea aici punând un backdoor aici, care le oferă un bilet pentru a trișa ori de câte ori au nevoie, cu un avantaj nedrept față de oameni ca tine și mine. În mod repetat de-a lungul întregului articol, singurul fapt pe care l-am subliniat este capacitatea lor de a bate orice număr de monede LEO (sau nelimitate) la discreția lor și de a șterge orice monedă a portofelului, acum sau în viitor..
Pentru a rezuma și simplifica totul pentru cititorii noștri non-tehnici, nu negăm sau nu punem la îndoială capacitatea contractului inteligent de a putea fi actualizat. Problema aici nu este tehnică, ci filosofică. Dacă sunteți bine ca Bitfinex să poată face ceea ce pot face cu LEO, înțelegem și asta și vă respectăm punctul de vedere. Dar pentru noi, LEO nu se joacă bine cu spiritul și filosofia blockchain-ului, deoarece acestea pot dicta termeni. De asemenea, pe baza înțelegerii noastre defecte și umile, o criptomonedă:
- Ar trebui să fie deschis tuturor. Puteți veni și pleca după bunul plac. ✓
- Ar trebui să fie corect. Nimeni nu ar trebui să aibă vreun avantaj nedrept față de nimeni altcineva. ✘
- Ar trebui să fie inclusiv. Nu ar trebui să se limiteze la nimeni, indiferent de ceea ce au spus sau au făcut sau de unde provin, fiind în schimb total indiferent față de "care" sunt sau "ce" ar putea deveni posibil. ✘
- Ar trebui să fie rezistent la cenzură, dacă nu liber. Nimeni nu ar trebui să fie oprit de la utilizarea sau accesarea oricărei caracteristici în orice moment dat. Când vine vorba de o rețea blockchain (contract inteligent în acest caz), chiar și actorii răi, cum ar fi fraudatorii, hackerii și escrocii, ar trebui tratați în mod necenzurat – inclusiv, în mod egal, deschis și corect. Dacă nu puteți cenzura actorii răi din Bitcoin, de ce ar trebui să puteți face acest lucru în LEO? „Capacitatea de actualizare” nu justifică „capacitatea” dictării termenilor. ✘
- Ar trebui să fie imuabil. Orice s-a întâmplat ar trebui să rămână acolo pentru totdeauna pentru ca oricine și toată lumea să valideze, să fie de acord sau să nu fie de acord. ✓
- Rețeaua ar trebui să fie descentralizată. Nu ar trebui să existe nicio entitate centrală care să poată dicta termeni asupra a ceea ce ar trebui să se întâmple. Chiar dacă rețeaua Ethereum este descentralizată, contractul de token LEO nu este pentru că pot dicta termeni. ✘
- Ar trebui distribuit. Toată lumea ar trebui să poată obține ei înșiși istoricul rețelei și să valideze autenticitatea datelor. ✓
Oamenii au încredere în blockchain, deoarece este lipsit de încredere. Natura de încredere a blockchain-ului i-a făcut pe oameni ca tine și ca mine să fim interesați de această tehnologie uimitoare.
Nu avem nicio ranchiună față de Bitfinex la nivel personal, dar nu ne este frică să arătăm cu degetele spre ei atunci când simțim că greșesc și că trebuie să facă ceea ce trebuie. Oferim o soluție pentru Bitfinex, pentru a crea un nou token fără astfel de caracteristici și a le schimba cu investitorii. Doar această acțiune ar putea spori încrederea investitorilor în simbolul LEO.
În cele din urmă, această dezbatere se poate desfășura în cercuri, deoarece Bitfinex ar susține că au nevoie de „capacitate de actualizare” (nu-i așa?) Și nu am accepta pur și simplu faptul că moneda altcuiva poate fi ștearsă, chiar dacă acestea nu ar fi ale noastre. Prin prezenta vă prezentăm cazul dvs., cititorul nostru uimitor, pentru a vă hotărî și a vedea dacă doriți să aveți încredere în contractul LEO ERC20.