Det är mycket känt att smarta kontrakt kan vara knepiga. Icke-tekniska personer blir frestade att köpa en ERC20-token baserat på hype-nivå, utan någon tidigare kunskap om tokens kvalitet och säkerheten för det token de köper.
Bitfinex, ett av de största kryptobörserna i branschen, har utfärdat en token som heter LEO. Denna token tillåter den enhet som kontrollerar den att skriva ut eller prägla obegränsade nya tokens, det gör det också möjligt för dem att ta bort någons mynt inklusive men inte begränsat till de på centraliserade eller decentraliserade börser, varm- eller kallförvaring, hårdvara eller programvaruplånbok och / eller papper eller hjärnplånbok.
Låt dig inte luras, att köpa en ERC20 betyder inte att dina tillgångar verkligen är dina! Det här är inte första gången jag avslöjar ett sådant smart kontrakt. Bara förra veckan publicerade vi på Cointelligence en rapport om ett liknande smart kontrakt som tillåter samma funktionalitet, kolla in vår recension om WHEN Smart Contract.
Tillåter LEO ERC20-kontrakt bluff och / eller bedrägeri för flera miljarder dollar?
Vi låter upp till dig att bestämma, nu ska vi dyka djupt in i LEO-token.
Introduktion
LEO är en ERC20-token som introducerades den 10 maj 2019 av iFinex Inc. i deras tillkännagivande. Du hittar LEO Whitepaper här. Även om vi inte kunde hitta ett GitHub-arkiv verifierades deras tokenavtalskod på Etherscan. Vi använde den verifierade Etherscan-koden för LEO, LeoController och TokenFactory för att testa och distribuera en kopia av denna token i Ropsten testnet.
LEO-token – ERC20-token utfärdat av Unus Sed Leo Limited, ett dotterbolag till iFinex Inc..
Kontroller – Controller-avtalet gör det möjligt för ägaren att överföra, godkänna, utfärda, bränna och ändra själva controller. Observera också att även om kontraktet “0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672” för närvarande “kontrollerar” LEO ERC20-kontraktet, kan “kontrollern” enkelt uppgraderas eller ändras till valfri adress när som helst av ägaren, vilket gör att de i stort sett kan göra vad som helst med LEO-token.
LEOController-kontrakt: Ägaren kan ändra “Controller” för LEO ERC20-kontraktet
De LEOController Kontraktsägaren kan byta “kontroller” när som helst och ställa in den till vilken plånbokadress som helst.
- Genom att ringa funktionen “upgradeController” på linje 698 och ange valfri plånbokadress.
- När ovanstående transaktion har bekräftats blir den inmatade adressen den nya “controller” för LEO ERC20 Contract.
LEO-kontrakt: Ägaren kan bränna dina tokens och mynta obegränsat antal nya tokens
Hur kunde LEO-ägaren behålla prickar för alltid?
Som förklarats tidigare, när kontrolleradressen har ändrats till en plånbokadress (eller till och med ett nytt smart kontrakt), kan de helt enkelt kalla funktionen “generera Tokens” på rad 460.
Parametrar
- _ägare → Plånboken som tar emot de nyligen präglade LEO-tokens.
- _belopp → Mängden tokens som ska “skrivas ut” som kommer till adressen ovan.
Notera – LEO-whitepaper nämner inte vad den maximala token-utbudet är och detta kontrakt gör det möjligt för dem att fortsätta prägla LEO-tokens eftersom vi kunde “skriva ut” en kvadrillion LEO-tokens på ett testnät med deras kod.
Hur kunde LEO-ägaren ta bort någon annans tokens?
Funktionen ”destroyTokens” på 477 gör det möjligt för LEO-kontrollerplånboken att bränna någons LEO-tokens inklusive men inte begränsat till de som finns i en centraliserad eller decentraliserad växel, en hårdvaru- eller programvaruplånbok, varm- eller kalllagring och / eller ett papper eller hjärna plånbok. Det spelar ingen roll var dina mynt är, de kan ta bort dina mynt om de vill. Så enkelt som det.
Parametrar
- _ägare → Plånboken från vilken de befintliga LEO-tokens kommer att brännas.
- _belopp → Antalet tokens som ska “raderas” från ovan nämnda plånbokadress.
Vidare bevis
Vi kopierade exakt samma kod för LEO ERC20-token, styrenhet och fabrik för att distribuera följande kontrakt på Ropsten testnet.
Plånböcker / adresser
- Avsändaradress: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Slumpmässigt genererad adress: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Först ändrade vi styrenheten från avsändaradressen till en kopia av “LEOController” för att se om vi återigen kunde ändra styrenheten tillbaka till avsändaradressen med funktionen “upgradeController”.
Steg
- Token Factory Utplacerad
- LEO-token Utplacerad
- LEOController Utplacerad
- Kontrolleras vem som faktiskt är “controller” på LEO-tokenavtal: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Ändrade styrenheten med funktionen ”changeController” på LEO-kontraktet till tidigare distribuerat “LEOController” -avtal
- Bekräftat att styrenheten faktiskt ändrades till den smarta kontraktsadressen.
Vid denna tidpunkt liknar vårt testnet LEO-kontrakt exakt LEO ERC20-kontrakt på följande sätt
- Styrenheten för LEO-avtalet är ett smart kontrakt.
- Styrenhetens kod i testnet matchar exakt den i mainnet.
Nu försöker vi bestämma:
- Om vi kan bränna eller förstöra någon annans LEO-tokens genom att först ändra kontrollenheten.
- Om vi kan ge ut en vansinnigt stor mängd LEO-token för att se om det finns ett lock.
Steg
- Även om vi vid denna tidpunkt visste att det inte var möjligt för ägaren att byta controller på “LEO” -kontraktet med funktionen “changeController” skickade vi fortfarande avsiktligt den transaktionen för att den skulle återställa eller misslyckas. Misslyckades
- Vi gick till “LEOController” -kontraktet och använde funktionen “upgradeController” för att ändra styrenheten för det kontrollerade smarta kontraktet, dvs. LEO, till avsändaradressen igen. Lyckades
Notera – att vi bytte controller från Sender till ett smart kontrakt och sedan tillbaka till Sender eftersom vi ville visa dig att det är ganska lätt för oss att byta controller i ett testnät (och för dem i mainnet).
Utfärdande tokens
Eftersom avsändaren nu är controller för LEO-avtalet igen, kan den komma åt LEO-kontraktsfunktionerna “generera Tokens” och “förstör Tokens”. Vi genererade en slumpmässig plånboksadress “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” för att skicka några galet enorm mängd LEO-tokens 1.000.000.000.000.000.000.000.000.000.000.000.000.000 (en undecillion) LEO överförd.
Burning Tokens
Vi ville avgöra om vi (avsändaren) kunde ta bort eller förstöra tokens från den slumpmässiga adressen 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 vi genererade tidigare.
I ovanstående transaktion brände / raderade / förstörde vi 10.000.000.000 (tio miljarder) tokens från någon annans plånbok eller en adress som vi inte äger.
Du kan se att adressen “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” nu har en balans på 999,999,999,999,999,999,999,999,990,000,000,000 (nio hundra nittio nio nio nio nio nio nio nio nio nio nio nio nio nio , nio hundra nittio nionde kvintillioner, nio hundra nittio nio kvadrillioner, nio hundra nittio nio biljoner, nio hundra nittio miljarder) testnet endast LEO-tokens.
Jämförelse av kontrakt | |||
LEO | Original | Testnät | Diff |
MiniMeTokenFactory | Original | Testnät | Diff |
LEOController | Original | Testnät | Diff |
TLDR: Hur påverkar detta mig?
Paolo Ardoino, CTO för Bitfinex, svarade på vår tweet som beskriver denna fråga och säger:
”Av säkerhetsskäl och framtidssäkra skäl lämnade vi också möjligheten att uppgradera Token Contract. Det är verkligen en nyckelfunktion för ett kontrakt som kan leva många år. Att prägla fler tokens skulle bara inte vara meningsfullt för Finex … som att skjuta vår fot. “
Vi älskade inte bara hans tweet utan skulle också vilja tacka honom offentligt för hans svar, för vi tror att det är så vi kan hålla oss ansvariga och hjälpa till att vägleda denna bransch mot en bättre framtid.
Nu ska vi återgå till affärer! Notera att smarta kontrakt är utformade för att vara pålitliga. Bitfinex bryter förtroendet här genom att sätta en bakdörr här, vilket ger dem en biljett att fuska när de behöver, med en orättvis fördel över människor som du och jag. Upprepade gånger under hela denna artikel är det enda faktum som vi har påpekat deras förmåga att mynta valfritt antal (eller obegränsat) LEO-mynt efter eget gottfinnande och ta bort alla plånboksmynt, nu eller i framtiden.
För att sammanfatta och förenkla allt för våra icke-tekniska läsare förnekar eller ifrågasätter vi inte det smarta kontraktets förmåga att kunna uppgraderas. Problemet här är inte tekniskt utan filosofiskt. Om du är okej med att Bitfinex kan göra vad de kan göra med LEO, förstår vi det också och respekterar din åsikt. Men för oss spelar LEO inte bra med blockchainens anda och filosofi eftersom de kan diktera villkor. Baserat på vår bristfälliga och ödmjuka förståelse, en kryptovaluta:
- Bör vara öppen för alla. Du kan komma och gå som du vill. ✓
- Bör vara rättvist. Ingen bör ha någon orättvis fördel framför någon annan. ✘
- Bör inkludera. Det bör inte begränsas till någon oavsett vad de sa eller gjorde eller var de kom ifrån, istället vara helt likgiltiga för "WHO" de är eller "Vad" de skulle möjligen kunna bli. ✘
- Bör vara censurbeständig om inte censurfri. Ingen bör hindras från att använda eller komma åt någon funktion vid en viss tidpunkt. När det gäller ett blockchain-nätverk (smart kontrakt i det här fallet) bör även dåliga aktörer som bedragare, hackare och bedragare behandlas på ett ocensurerat sätt – inkluderande, lika, öppet och rättvist. Om du inte kan censurera dåliga skådespelare i Bitcoin, varför skulle du kunna göra det i LEO? ”Uppgraderbarhet” motiverar inte ”förmågan” att diktera termer. ✘
- Bör vara oföränderlig. Vad som än har hänt bör stanna där för alltid för alla och alla att validera, hålla med eller vara oense. ✓
- Nätverket bör vara decentraliserat. Det borde inte finnas någon central enhet som kan diktera villkor om vad som ska hända. Även om Ethereum-nätverket är decentraliserat är LEO-tokenavtalet inte för att de kan diktera villkor. ✘
- Bör distribueras. Alla ska kunna själva få nätverkets historik och validera datans äkthet. ✓
Människor litar på blockchain eftersom det är pålitligt. Den betrodda tillförlitliga karaktären hos blockchain gjorde att människor som du och jag var intresserade av denna fantastiska teknik.
Vi har inga nag mot Bitfinex på personlig nivå, men är inte rädda för att peka fingrarna på dem när vi känner att de har fel och att de behöver göra rätt. Vi erbjuder en lösning på Bitfinex, att skapa en ny token utan sådana funktioner och byta dem med investerarna. Den här åtgärden ensam kan möjligen öka investerarnas förtroende för LEO-token.
Slutligen kan den här debatten gå i cirklar eftersom Bitfinex skulle hävda att de behöver “uppgraderbarhet” (gör de verkligen?) Och vi skulle inte bara acceptera det faktum att någon annans mynt kan raderas även om det inte var vårt. Vi vilar härmed vårt ärende till dig, vår fantastiska läsare, för att bestämma dig själv och se om du vill lita på LEO ERC20-kontraktet.