Det er veldig kjent at smarte kontrakter kan være vanskelige. Ikke-tekniske mennesker blir fristet til å kjøpe et ERC20-token basert på hype-nivå, uten noen forhåndskunnskap om kvaliteten på token og sikkerheten til token de kjøper.
Bitfinex, en av de største kryptobørsene i bransjen, har utstedt et token kalt LEO. Dette tokenet tillater enheten som kontrollerer den å skrive ut eller lage ubegrensede nye tokens, og det lar dem også slette noens mynter, inkludert men ikke begrenset til de på sentraliserte eller desentraliserte børser, varm eller kald lagring, maskinvare- eller programvarelommebok og / eller papir eller hjerne lommebok.
Ikke la deg lure, å kjøpe en ERC20 betyr ikke at eiendelene dine virkelig er dine! Dette er ikke første gang jeg avslører en så smart kontrakt. Bare forrige uke publiserte vi en rapport om Cointelligence om en lignende smart kontrakt som tillater den samme funksjonaliteten, sjekk ut vår anmeldelse om WHEN Smart Contract.
Aktiverer LEO ERC20-kontrakt svindel og / eller svindel for flere milliarder dollar?
Vi overlater til deg å bestemme, la oss nå dykke dypt ned i LEO-token.
Introduksjon
LEO er et ERC20-token introdusert 10. mai 2019 av iFinex Inc. i kunngjøringen deres. Du finner LEO Whitepaper her. Selv om vi ikke kunne finne et GitHub-lager, ble deres token-kontraktkode bekreftet på Etherscan. Vi brukte den bekreftede Etherscan-koden for LEO, LeoController og TokenFactory for å teste og distribuere en kopi av dette tokenet i Ropsten testnet.
LEO Token – ERC20-token utstedt av Unus Sed Leo Limited, et datterselskap av iFinex Inc..
Kontroller – Kontrollerkontrakten gjør det mulig for eieren å overføre, godkjenne, utstede, brenne og endre kontrolleren selv. Vær også oppmerksom på at selv om kontrakten “0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672” for øyeblikket “kontrollerer” LEO ERC20-kontrakten, kan “kontrolleren” lett oppgraderes eller endres til en hvilken som helst adresse når som helst av eieren, slik at de stort sett kan gjøre hva som helst med LEO-tokenet..
LEOController-kontrakt: Eieren kan endre “Controller” av LEO ERC20-kontrakten
De LEOController kontraktseier kan endre “kontrolleren” når som helst og sette denne til hvilken som helst lommebokadresse de kontrollerer.
- Ved å kalle funksjonen “upgradeController” på linje 698 og angi hvilken som helst lommebokadresse.
- Når ovennevnte transaksjon er bekreftet, blir den angitte adressen den nye “kontrolleren” av LEO ERC20-kontrakten.
LEO-kontrakt: Eieren kan brenne polettene dine og mynte ubegrensede nye poletter
Hvordan kunne LEO-eieren beholde mynttegnene for alltid?
Som forklart før, når kontrolleradressen er endret til en lommebokadresse (eller til og med en ny smart kontrakt), kan de ganske enkelt kalle funksjonen “generere Tokens” på linje 460.
Parametere
- _eier → Lommeboken som mottar de nylig myntede LEO-tokens.
- _beløp → Mengden tokens som skal “skrives ut” som vil gå til adressen ovenfor.
Merk – LEO-papiret nevner ikke hva den maksimale tokenforsyningen er, og denne kontrakten lar dem fortsette å prege LEO-tokens, ettersom vi klarte å “skrive ut” en kvadrillion LEO-tokens på et testnett ved hjelp av koden..
Hvordan kunne LEO-eieren slette andres tokens?
Funksjonen “destroyTokens” på 477 gjør det mulig for LEO-kontrollerlommeboken å brenne noens LEO-tokens, inkludert men ikke begrenset til de som er tilstede i en sentralisert eller desentralisert sentral, en maskinvare- eller programvarelommebok, varm eller kald lagring og / eller papir eller hjerne lommebok. Det spiller ingen rolle hvor myntene dine er, de kan slette myntene dine hvis de vil. Så enkelt som det.
Parametere
- _eier → Lommeboken som eksisterende LEO-tokens blir brent fra.
- _beløp → Mengden tokens som skal “slettes” fra ovennevnte lommebokadresse.
Ytterligere bevis
Vi kopierte nøyaktig samme kode for LEO ERC20-token, kontrolleren og fabrikken for å distribuere følgende kontrakt på Ropsten testnet.
Lommebøker / adresser
- Avsenderadresse: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Tilfeldig generert adresse: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Først endret vi kontrolleren fra avsenderadressen til en kopi av “LEOController” for å se om vi igjen kunne endre kontrolleren tilbake til avsenderadressen ved hjelp av funksjonen “upgradeController”.
Fremgangsmåte
- Token Factory Implementert
- LEO Token Implementert
- LEOController Implementert
- Sjekket hvem som faktisk er “kontrolleren” på LEO-token-kontrakt: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Byttet kontrolleren ved å bruke funksjonen “changeController” på LEO-kontrakten til tidligere distribuert “LEOController” -kontrakt
- Bekreftet at kontrolleren faktisk ble endret til smart kontraktadresse.
På dette tidspunktet er vår testnet LEO-kontrakt nøyaktig lik LEO ERC20-kontrakten på følgende måter
- Kontrolleren av LEO-kontrakten er en smart kontrakt.
- Kontrollerkoden i testnet samsvarer nøyaktig med den i mainnet.
Nå prøver vi å finne ut:
- Hvis vi kan brenne eller ødelegge andres LEO-tokens ved først å bytte kontrolleren.
- Hvis vi kan utstede en sinnsykt stor mengde LEO-token for å se om det er en hette.
Fremgangsmåte
- Selv om vi på dette tidspunktet visste at det ikke var mulig for eieren å endre kontrolleren på “LEO” -kontrakten ved hjelp av funksjonen “changeController”, sendte vi fortsatt med vilje den transaksjonen for at den skulle tilbakestille eller mislykkes. Mislyktes
- Vi gikk til “LEOController” -kontrakten og brukte funksjonen “upgradeController” for å endre kontrolleren til den kontrollerte smarte kontrakten, dvs. LEO, til avsenderadressen igjen. Lyktes
Merk – at vi byttet kontroller fra avsender til en smart kontrakt og deretter igjen tilbake til avsender fordi vi ønsket å vise deg at det er ganske enkelt for oss å bytte kontrolleren i et testnett (og for dem på nettet).
Utsteder poletter
Siden nå er avsenderen kontrolleren av LEO-kontrakten igjen, kan den få tilgang til LEO-kontraktsfunksjonene “generere toker” og “ødelegge toker”. Vi genererte en tilfeldig lommebokadresse “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” for å sende noen sinnsykt stor mengde LEO-tokens 1.000.000.000.000.000.000.000.000.000.000.000.000 (en undecillion) LEO overført.
Burning Tokens
Vi ønsket å avgjøre om vi (avsenderen) kunne slette eller ødelegge tokens fra den tilfeldige adressen 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 vi genererte tidligere.
I ovennevnte transaksjon har vi med hell brent / slettet / ødelagt 10.000.000.000 (ti milliarder) tokens fra andres lommebok eller en adresse vi ikke eier.
Du kan se at adressen “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” nå har en saldo på 999.999.999.999.999.999.999.990.000.000.000 (ni hundre og ni nitti nitti nitti nitti nitti nitti nitti nitti , ni hundre og ni kvintillioner, ni hundre og nitti quadrillion, ni hundre og nitti billioner, ni hundre og nitti milliarder) bare testnet LEO tokens.
Sammenligning av kontrakter | |||
LEO | Opprinnelig | Testnet | Diff |
MiniMeTokenFactory | Opprinnelig | Testnet | Diff |
LEOController | Opprinnelig | Testnet | Diff |
TLDR: Hvordan påvirker dette meg?
Paolo Ardoino, CTO i Bitfinex, svarte på tweeten vår som skisserer dette problemet, og sier:
“Av sikkerhetsmessige og fremtidssikre grunner la vi muligheten til å oppgradere Token Contract. Det er virkelig en nøkkelfunksjon for en kontrakt som kan leve mange år. Minting av flere tokens vil bare ikke være fornuftig for Finex … som å skyte foten vår. “
Vi elsket ikke bare tweetet hans, men vil også takke ham offentlig for svaret, fordi vi tror at dette er hvordan vi kan holde oss ansvarlige og hjelpe til med å veilede denne bransjen mot en bedre fremtid.
La oss nå komme tilbake til virksomheten! Legg merke til at smarte kontrakter er designet for å være pålitelige. Bitfinex bryter tilliten her ved å sette en bakdør her, noe som gir dem en billett til å jukse når de trenger det, med en urettferdig fordel over folk som deg og meg. Gjentatte ganger gjennom hele denne artikkelen er det eneste faktum vi har påpekt, deres evne til å lage et hvilket som helst antall (eller ubegrenset) LEO-mynter etter eget skjønn og slette enhver lommeboks mynt, nå eller i fremtiden.
For å oppsummere og forenkle alt for våre ikke-tekniske lesere, benekter vi ikke eller stiller spørsmålstegn ved smarte kontrakts evne til å bli oppgraderbar. Problemet her er ikke teknisk, men filosofisk. Hvis du har det bra med at Bitfinex kan gjøre det de kan gjøre med LEO, forstår vi det også og respekterer ditt synspunkt. Men for oss spiller LEO ikke bra med ånden og filosofien til blockchain fordi de kan diktere vilkår. Også, basert på vår feil og ydmyke forståelse, en kryptovaluta:
- Bør være åpen for alle. Du kan komme og gå som du vil. ✓
- Bør være rettferdig. Ingen skal ha noen urettferdige fordeler over noen andre. ✘
- Bør være inkluderende. Det bør ikke være begrenset til noen uavhengig av hva de sa eller gjorde eller hvor de kom fra, i stedet for å være helt likegyldige overfor "WHO" de er eller "hva" de kunne muligens bli. ✘
- Bør være sensurbestandig hvis ikke sensurfri. Ingen skal forhindres i å bruke eller få tilgang til noen funksjoner på et gitt tidspunkt. Når det gjelder et blockchain-nettverk (smart kontrakt i dette tilfellet), skal til og med dårlige skuespillere som svindlere, hackere og svindlere behandles usensurert – inkludert, like, åpent og rettferdig. Hvis du ikke kan sensurere dårlige skuespillere i Bitcoin, hvorfor skal du kunne gjøre det i LEO? “Oppgraderbarhet” rettferdiggjør ikke “evnen” til å diktere termer. ✘
- Bør være uforanderlig. Uansett hva som har skjedd, skal det forbli der for alltid for alle og enhver å validere, være enig eller være uenig. ✓
- Nettverket bør desentraliseres. Det skal ikke være noen sentral enhet som kan diktere vilkår om hva som skal skje. Selv om Ethereum-nettverket er desentralisert, er ikke LEO-token-kontrakten fordi de kan diktere vilkår. ✘
- Bør distribueres. Alle skal kunne selv få historikken til nettverket og validere ektheten til dataene. ✓
Folk stoler på blockchain fordi det er pålitelig. Den pålitelige, pålitelige naturen til blockchain gjorde folk som deg og meg interessert i denne fantastiske teknologien.
Vi har ikke noen nag mot Bitfinex på et personlig nivå, men er ikke redd for å rette fingrene mot dem når vi føler at de tar feil og at de trenger å gjøre det rette. Vi tilbyr en løsning på Bitfinex, for å lage et nytt token uten slike funksjoner og bytte dem med investorene. Denne handlingen alene kan muligens øke investorens tillit til LEO-token.
Endelig kan denne debatten gå i sirkler fordi Bitfinex vil hevde at de trenger “oppgraderbarhet” (gjør de virkelig?), Og vi vil ikke bare akseptere det faktum at andres mynter kan slettes selv om de ikke var vår. Vi hviler herved på deg, vår fantastiske leser, for å bestemme deg selv og se om du vil stole på LEO ERC20-kontrakten.