Намерени са измамни способности в кода на договора Bitfinex LEO ERC20
Много е известно, че интелигентните договори могат да бъдат трудни. Нетехническите хора се изкушават да купят ERC20 токен въз основа на хип ниво, без никакви предварителни знания относно качеството на токена и безопасността на токена, който купуват.
Bitfinex, една от най-големите крипто борси в индустрията, издаде токен, наречен LEO. Този маркер позволява на субекта, който го контролира, да отпечатва или изковава неограничени нови жетони, също така им позволява да изтриват нечии монети, включително, но не само, тези на централизирани или децентрализирани борси, топло или студено съхранение, хардуер или софтуерен портфейл и / или хартиен или мозъчен портфейл.
Не се заблуждавайте, купуването на ERC20 не означава, че активите ви наистина са ваши! Това не е първият път, когато излагам такъв интелигентен договор. Само миналата седмица публикувахме на Cointelligence доклад за подобен интелигентен договор, който позволява същата функционалност, разгледайте нашия преглед за КОГА интелигентен договор.
Договорът LEO ERC20 позволява ли измама и / или измама за милиарди долари?
Оставяме на вас да решите, сега нека се потопим дълбоко в LEO Token.
Въведение
LEO е ERC20 токен, въведен на 10 май 2019 г. от iFinex Inc. през тяхното съобщение. Можете да намерите LEO Бяла книга тук. Въпреки че не успяхме да намерим хранилище на GitHub, техният код на договор за маркери беше проверен на Etherscan. Използвахме проверения код на Etherscan за LEO, LeoController и TokenFactory, за да тестваме и разположим копие на този маркер в Ropsten testnet.
LEO Token – Токенът ERC20, издаден от Unus Sed Leo Limited, дъщерно дружество на iFinex Inc..
Контролер – Договорът за контролер позволява на собственика да прехвърля, одобрява, издава, записва и променя самия контролер. Моля, обърнете внимание също така, че въпреки че договорът „0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672“ понастоящем „контролира“ LEO ERC20 договора, „контролерът“ може лесно да бъде надграден или променен на всеки адрес по всяко време от собственика, като по този начин им позволява да правят почти всичко с токена LEO.
Договор за LEOController: Собственикът може да промени „Контролера“ на LEO ERC20 договора
The LEOController собственикът на договора може да промени „контролера“ по всяко време и да зададе това на всеки адрес на портфейла, който те контролират.
- Като извикате функцията “upgradeController” на ред 698 и въведете произволен адрес на портфейла по техен избор.
- След като горната транзакция бъде потвърдена, въведеният адрес ще се превърне в новия „контролер“ на LEO ERC20 Договора.
LEO договор: Собственикът може да изгори вашите жетони и да изковава неограничени нови токени
Как би могъл собственикът на LEO да запази завинаги сечене на жетони?
Както беше обяснено по-горе, след като адресът на контролера бъде променен на адрес на портфейла (или дори нов интелигентен договор), те могат просто да извикат функцията „generateTokens“ на ред 460.
Параметри
- _owner → Портфейлът, който ще получи новоотсечените LEO токени.
- _amount → Количеството на жетоните за „отпечатване“, което ще отиде на горния адрес.
Забележка – Бялата книга на LEO не споменава каква е максималната доставка на токени и този договор им позволява да продължават да секат LEO токени, тъй като успяхме да „отпечатаме“ квадрилион LEO токени на тестова мрежа, използвайки техния код.
Как би могъл собственикът на LEO да изтрие чужди жетони?
Функцията „Унищожи токени“ на 477 позволява на портфейла на LEO контролера да изгаря LEO токени на някой, включително, но не само тези, присъстващи в централизирана или децентрализирана борса, хардуерен или софтуерен портфейл, топло или студено съхранение и / или хартия или мозък портфейл. Няма значение къде са вашите монети, те могат да изтрият вашите монети, ако искат. Толкова просто.
Параметри
- _owner → Портфейлът, от който ще бъдат изгорени съществуващите LEO токени.
- _amount → Количеството символи, които да „изтриете“ от гореспоменатия адрес на портфейла.
Допълнителни доказателства
Копирахме абсолютно същия код за LEO ERC20 токен, контролер и фабрика, за да разположим следния договор на Ropsten testnet.
Портфейли / Адреси
- Адрес на подателя: 0x58FA58089956c5cba21d9f61434B1902F8121b32
- Случайно генериран адрес: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548
Първо сменихме контролера от адреса на подателя на копие на „LEOController“, за да видим дали можем отново да сменим контролера на адреса на подателя, използвайки функцията „upgradeController“.
Стъпки
- Фабрика за жетони Разположена
- LEO Token Разположена
- LEOController Разположена
- Проверено кой всъщност е „администраторът“ на LEO договор за токен: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
- Промени контролера с помощта на функцията “changeController” на LEO договор на предварително разположен Договор “LEOController”
- Потвърдено, че контролерът всъщност е променен на адреса на интелигентния договор.
Към този момент нашият LEO договор за testnet е точно подобен на LEO ERC20 договор по следните начини
- Контролерът на LEO договор е интелигентен договор.
- Кодът на контролера в testnet точно съвпада с този в mainnet.
Сега се опитваме да определим:
- Ако можем да изгорим или унищожим чужди LEO токени, като първо сменим контролера.
- Ако можем да издадем безумно голямо количество LEO токен, за да видим дали има ограничение.
Стъпки
- Въпреки че към този момент знаехме, че не е възможно собственикът да промени контролера на договора „LEO“, използвайки функцията „changeController“, все пак умишлено изпратихме тази транзакция, за да се върне или провали. Се провали
- Отидохме до договора „LEOController“ и използвахме функцията „upgradeController“, за да сменим контролера на контролирания интелигентен договор, т.е. LEO, отново на адреса на подателя. Успял
Забележка – че сме сменили контролера от Изпращач на интелигентен договор и след това отново обратно към Изпращача, защото искахме да Ви покажем, че е доста лесно за нас да сменим контролера в тестова мрежа (и за тях в основната мрежа).
Издаване на токени
Тъй като сега Изпращачът отново е администратор на договор за LEO, той може да има достъп до функциите на LEO договор „generateTokens“ и „Унищожи Tokens“. Генерирахме случаен адрес на портфейла „0xada183F6Ff6E7805EE5bDA701d40958858FeE548“, за да изпратим някои безумно огромно количество LEO токени 1 000 000 000 000 000 000 000 000 000 000 000 000 (един децилион) LEO прехвърлени.
Изгаряне на жетони
Искахме да определим дали (Подателят) можем да изтрием или унищожим жетони от произволния адрес 0xada183F6Ff6E7805EE5bDA701d40958858FeE548, които преди това генерирахме.
В горната транзакция успешно изгорихме / изтрихме / унищожихме 10 000 000 000 (десет милиарда) токена от чужд портфейл или адрес, който не притежавахме.
Можете да видите, че адресът “0xada183F6Ff6E7805EE5bDA701d40958858FeE548” вече има баланс от 999,999,999,999,999,999,999,999,990,000,000,000 (деветстотин деветдесет и девет decillion, деветстотин деветдесет и девет Нонилион, деветстотин деветдесет и девет octillion, деветстотин деветдесет и девет septillion, деветстотин деветдесет и девет секстилиона , деветстотин деветдесет и девет квинтилиона, деветстотин деветдесет и девет квадрилиона, деветстотин деветдесет и девет трилиона, деветстотин деветдесет милиарда) само тестове LEO LEO.
Сравнение на договори | |||
ЛЕВ | Оригинален | Testnet | Разл |
MiniMeTokenFactory | Оригинален | Testnet | Разл |
LEOController | Оригинален | Testnet | Разл |
TLDR: Как това ми влияе?
Паоло Ардоино, технически директор на Bitfinex, отговори на нашия туит който очертава този проблем, като посочва:
„От съображения за сигурност и бъдещи доказателства оставихме възможността да надстроим и Договора за токени. Това наистина е ключова характеристика на договор, който може да живее много години. Сеченето на повече символи просто няма да има смисъл за Finex … като да стреляме с крак. „
Ние не само обичахме неговия туит, но също така бихме искали да му благодарим публично за отговора, защото вярваме, че по този начин можем да се държим отговорни и да помогнем да насочим тази индустрия към по-добро бъдеще.
Сега да се върнем към работата! Отбележете добре, че интелигентните договори са проектирани да бъдат без доверие. Bitfinex нарушава доверието тук, като поставя заден ход тук, което им дава билет за измама, когато им се наложи, с несправедливо предимство пред хора като теб и мен. Повтарящо се в цялата тази статия, единственият факт, който изтъкнахме, е тяхната способност да сече произволен брой (или неограничен) LEO монети по тяхно усмотрение и да изтрие всяка монета на портфейла, сега или в бъдеще.
За да обобщим и опростим всичко за нашите нетехнически читатели, ние не отричаме и не поставяме под въпрос способността на интелигентния договор да бъде надграждаема. Проблемът тук не е технически, а философски. Ако сте добре, че Bitfinex може да прави това, което те могат с LEO, ние също разбираме това и уважаваме вашата гледна точка. Но за нас LEO не играе добре с духа и философията на блокчейна, защото те могат да диктуват условия. Също така, въз основа на нашето погрешно и скромно разбиране, криптовалута:
- Трябва да бъде отворена за всички. Можете да дойдете и да си отидете, както искате. ✓
- Трябва да е честно. Никой не бива да има несправедливо предимство пред всеки друг. ✘
- Трябва да включва. Тя не трябва да се ограничава до никого, независимо от това, което са казали или направили, или откъде идват, вместо да бъдат напълно безразлични "Кой" те са или "Какво" те биха могли да станат. ✘
- Трябва да са устойчиви на цензура, ако не и без цензура. Никой не трябва да бъде възпрепятстван да използва или осъществява достъп до която и да е функция в даден момент от времето. Когато става въпрос за блокчейн мрежа (в този случай интелигентен договор), дори лоши актьори като измамници, хакери и измамници трябва да бъдат третирани без цензура – включително, еднакво, открито и справедливо. Ако не можете да цензурирате лоши актьори в биткойн, защо трябва да можете да правите това в LEO? „Възможност за надграждане“ не оправдава „способността“ да се диктуват условия. ✘
- Трябва да бъде неизменен. Каквото и да се е случило, трябва да остане там завинаги, за да може всеки и всеки да потвърди, да се съгласи или да не се съгласи. ✓
- Мрежата трябва да бъде децентрализирана. Не трябва да има централен орган, който може да диктува условията за това какво трябва да се случи. Въпреки че мрежата Ethereum е децентрализирана, договорът за LEO токен не е защото те могат да диктуват условия. ✘
- Трябва да се разпространява. Всеки трябва да може сам да получи историята на мрежата и да потвърди автентичността на данните. ✓
Хората се доверяват на блокчейн, защото той е без доверие. Доверената, недоверима природа на блокчейна накара хората като вас и мен да се заинтересуват от тази невероятна технология.
Ние не изпитваме неприязън към Битфинекс в личен план, но не се страхуваме да им посочваме пръстите, когато смятаме, че грешат и че трябва да постъпят правилно. Ние предлагаме решение за Bitfinex, за да създадете нов токен без такива функции и да ги замените с инвеститорите. Само това действие би могло да повиши доверието на инвеститорите в LEO токена.
И накрая, този дебат може да се върти в кръг, защото Bitfinex ще твърди, че се нуждаят от „надстройване“ (наистина ли?) И ние не бихме приели просто факта, че монета на някой друг може да бъде изтрита, дори ако те не са наши. С настоящото оставяме нашия случай на вас, нашия невероятен читател, за да решите сами и да видите дали искате да се доверите на договора LEO ERC20.