Хорошо известно, что смарт-контракты могут быть непростыми. У нетехнических людей возникает соблазн купить токен ERC20 в зависимости от уровня ажиотажа, без каких-либо предварительных знаний о качестве токена и безопасности токена, который они покупают..

Bitfinex, одна из крупнейших криптобирж в отрасли, выпустила токен под названием LEO. Этот токен позволяет объекту, который его контролирует, печатать или чеканить неограниченное количество новых токенов, а также он позволяет им удалять любые монеты, включая, помимо прочего, те, которые находятся на централизованных или децентрализованных биржах, горячем или холодном хранилище, аппаратном или программном кошельке и / или бумажный или мозговой кошелек.

Не дайте себя обмануть, покупка ERC20 не означает, что ваши активы действительно ваши! Я не первый раз обнаруживаю такой умный контракт. Буквально на прошлой неделе мы опубликовали на Cointelligence отчет об аналогичном смарт-контракте, который поддерживает ту же функциональность, посмотрите наш обзор WHEN Smart Contract..

Допускает ли контракт LEO ERC20 возможность мошенничества и / или мошенничества на несколько миллиардов долларов??

Мы оставляем это за вами, а теперь давайте углубимся в токен LEO..

Вступление

LEO – это токен ERC20, представленный 10 мая 2019 г. компанией iFinex Inc. в их объявление. Вы можете найти Технический документ LEO здесь. Хотя нам не удалось найти репозиторий GitHub, их код контракта токена был проверен на Etherscan. Мы использовали проверенный код Etherscan для LEO, LeoController и TokenFactory, чтобы протестировать и развернуть копию этого токена в тестовой сети Ropsten..

Токен LEO – Токен ERC20, выпущенный Unus Sed Leo Limited, дочерней компанией iFinex Inc..

Контроллер – Контракт контроллера позволяет владельцу передавать, утверждать, выпускать, сжигать и изменять самого контроллера. Также обратите внимание, что хотя контракт «0xf17ebb3a24dc6d6b56d38adf0df499c1cd9e5672» в настоящее время «контролирует» контракт LEO ERC20, «контроллер» может быть легко модернизирован или изменен на любой адрес в любое время владельцем, что позволяет им практически что угодно делать с токеном LEO..

Контракт с оператором LEO

Контракт LEOController: владелец может изменить «Контроллера» контракта LEO ERC20.Контракт с LEOController Владелец может сменить Контроллера контракта LEO ERC20

В LEOController владелец контракта может изменить «контроллер» в любой момент и установить его на любой адрес кошелька, который они контролируют..

  • Вызывая функцию «upgradeController» в строке 698 и вводя любой адрес кошелька по своему выбору..
  • После подтверждения вышеуказанной транзакции введенный адрес станет новым «контроллером» контракта LEO ERC20..

Контракт LEO: владелец может сжигать ваши токены и чеканить неограниченное количество новых токенов.Контракт LEO Владелец может сжигать ваши токены и чеканить неограниченное количество новых токенов

Как мог владелец LEO вечно чеканить токены?

Как объяснялось ранее, после изменения адреса контроллера на адрес кошелька (или даже на новый смарт-контракт) они могут просто вызвать функцию «generateTokens» в строке 460..

Параметры

  • _owner → Кошелек, в который будут отправлены новые токены LEO..
  • _amount → Количество токенов для «печати», которые пойдут на указанный выше адрес..

Примечание – В техническом документе LEO не упоминается максимальный объем токенов, и этот контракт позволяет им продолжать чеканить токены LEO, поскольку мы смогли «напечатать» квадриллион токенов LEO в тестовой сети, используя их код..

Как мог владелец LEO удалить чужие токены?

Функция «destroyTokens» на 477 позволяет кошельку контроллера LEO записывать чьи-либо токены LEO, включая, помимо прочего, те, которые присутствуют в централизованной или децентрализованной бирже, аппаратном или программном кошельке, горячем или холодном хранилище и / или бумаге или мозге. бумажник. Неважно, где находятся ваши монеты, они могут удалить ваши монеты, если захотят. Так просто.

Параметры

  • _owner → Кошелек, с которого будут записаны существующие токены LEO..
  • _amount → Количество токенов, которые нужно «удалить» с вышеупомянутого адреса кошелька..

Дополнительные доказательства

Мы скопировали точно такой же код для токена, контроллера и фабрики LEO ERC20, чтобы развернуть следующий контракт на Тестовая сеть Ropsten.

Кошельки / Адреса

  • Адрес отправителя: 0x58FA58089956c5cba21d9f61434B1902F8121b32
  • Случайно сгенерированный адрес: 0xada183F6Ff6E7805EE5bDA701d40958858FeE548

Сначала мы изменили контроллер с адреса отправителя на копию «LEOController», чтобы посмотреть, сможем ли мы снова изменить контроллер обратно на адрес отправителя, используя функцию «upgradeController»..

Шаги

  • Фабрика Токенов Развернутый
  • Токен LEO Развернутый
  • LEOController Развернутый
  • Проверено, кто на самом деле является «контроллером» контракта токена LEO: 0x58FA58089956c5cba21d9f61434B1902F8121b32.
  • Изменил контроллер, использующий функцию «changeController» в контракте LEO, на ранее развернутый Контракт «ЛЕОКонтроллер»
  • Подтверждено, что контроллер действительно был изменен на адрес смарт-контракта..

На данный момент наш контракт LEO для тестовой сети в точности похож на контракт LEO ERC20 в следующих аспектах:

Теперь мы пытаемся определить:

  • Если мы можем сжечь или уничтожить чужие токены LEO, предварительно сменив контроллер.
  • Если мы сможем выпустить безумно большое количество токенов LEO, чтобы проверить, есть ли ограничение.

Шаги

  • Хотя на этом этапе мы знали, что владелец не может изменить контроллер в контракте «LEO» с помощью функции «changeController», мы все же намеренно отправили эту транзакцию, чтобы она откатилась или завершилась ошибкой.. Не удалось
  • Мы перешли к контракту «LEOController» и использовали функцию «upgradeController», чтобы снова изменить контроллер управляемого смарт-контракта, то есть LEO, на адрес отправителя.. Удалось

Примечание – что мы изменили контроллер с отправителя на смарт-контракт, а затем снова обратно на отправителя, потому что мы хотели показать вам, что для нас довольно легко изменить контроллер в тестовой сети (и для них в основной сети).

Выпуск токенов

Поскольку теперь отправитель снова является контролером контракта LEO, он может получить доступ к функциям контракта LEO «generateTokens» и «destroyTokens». Мы сгенерировали случайный адрес кошелька «0xada183F6Ff6E7805EE5bDA701d40958858FeE548», чтобы отправить безумно огромное количество токенов LEO 100000000000000000000000000000000000000 (один ундециллион) LEO передано.

Горящие жетоны

Мы хотели определить, можем ли мы (Отправитель) удалить или уничтожить токены со случайного адреса. 0xada183F6Ff6E7805EE5bDA701d40958858FeE548 мы сгенерировали ранее.

В вышеуказанной транзакции мы успешно сожгли / удалили / уничтожили 10 000 000 000 (десять миллиардов) токенов из чужого кошелька или адреса, которым мы не владели..

Вы можете видеть, что адрес «0xada183F6Ff6E7805EE5bDA701d40958858FeE548» теперь имеет баланс 999,999,999,999,999,999,999,999,990,000,000,000 (девятьсот девяносто девять decillion, девятьсот девяносто девять nonillion, девятьсот девяносто девять октиллионов, девятьсот девяносто девять септильонов, девятьсот девяносто девять секстиллионов , девятьсот девяносто девять квинтиллионов, девятьсот девяносто девять квадриллионов, девятьсот девяносто девять триллионов девятьсот девяносто миллиардов) только токены тестовой сети LEO.

Сравнение контрактов

ЛЕО Оригинал Тестовая сеть Diff
MiniMeTokenFactory Оригинал Тестовая сеть Diff
LEOController Оригинал Тестовая сеть Diff

TL; DR: как это влияет на меня?

Паоло Ардоино, технический директор Bitfinex, ответил на наш твит который описывает эту проблему, заявляя:

«По соображениям безопасности и безопасности в будущем мы также оставили возможность обновлять токен-контракт. Это действительно ключевая особенность контракта, который может длиться много лет. Для Finex просто не имеет смысла чеканить больше токенов … все равно что стрелять нам ногой. «

Нам не только понравился его твит, но и хотелось бы публично поблагодарить его за ответ, потому что мы считаем, что именно так мы сможем взять на себя ответственность и помочь направить эту отрасль к лучшему будущему..

А теперь вернемся к делу! Обратите внимание на то, что смарт-контракты не требуют доверия. Bitfinex подрывает доверие, ставя здесь бэкдор, который дает им возможность жульничать, когда им нужно, с несправедливым преимуществом перед такими людьми, как вы и я. Неоднократно на протяжении всей статьи мы указывали только на их способность чеканить любое количество (или неограниченное количество) монет LEO по своему усмотрению и удалять монеты любого кошелька, сейчас или в будущем..

Обобщая и упрощая все для читателей, не разбирающихся в технической сфере, мы не отрицаем и не ставим под сомнение возможность обновления смарт-контракта. Проблема здесь не техническая, а философская. Если вы согласны с тем, что Bitfinex может делать то, что они могут делать с LEO, мы также понимаем это и уважаем вашу точку зрения. Но для нас LEO не очень хорошо сочетается с духом и философией блокчейна, потому что они могут диктовать условия. Кроме того, исходя из нашего ошибочного и скромного понимания, криптовалюта:

  • Должен быть открыт для всех. Вы можете приходить и уходить, когда хотите. ✓
  • Должно быть честно. Никто не должен иметь несправедливого преимущества перед кем-либо другим. ✘
  • Должно быть инклюзивным. Это не должно быть ограничено кем-либо, независимо от того, что они сказали или сделали, или откуда они пришли, вместо этого быть полностью безразличным к "ВОЗ" они или "Какие" они могли бы стать. ✘
  • Должен быть устойчивым к цензуре, если не без цензуры. Никто не должен быть остановлен от использования или доступа к какой-либо функции в любой момент времени. Когда дело доходит до сети блокчейн (в данном случае смарт-контракта), даже к злоумышленникам, таким как мошенники, хакеры и мошенники, следует относиться без цензуры – в равной степени, открыто и справедливо. Если вы не можете подвергать цензуре плохих актеров в Биткойне, почему вы должны иметь возможность делать это в LEO? «Возможность обновления» не оправдывает «способность» диктовать условия. ✘
  • Должен быть неизменным. Что бы ни случилось, должно остаться навсегда, чтобы каждый мог подтвердить, согласиться или не согласиться. ✓
  • Сеть должна быть децентрализованной. Не должно быть никакого центрального органа, который мог бы диктовать условия того, что должно происходить. Несмотря на то, что сеть Ethereum децентрализована, контракт токенов LEO заключается не в том, что они могут диктовать условия. ✘
  • Должен быть распространен. Каждый должен иметь возможность получить историю сети и проверить подлинность данных. ✓

Люди доверяют блокчейну, потому что он ненадежен. Надежная и ненадежная природа блокчейна заставила людей вроде вас и меня заинтересовать эту удивительную технологию..

Мы не храним обиды на Bitfinex на личном уровне, но не боимся указывать на них пальцем, когда чувствуем, что они ошибаются и что им нужно поступать правильно. Мы предлагаем решение Bitfinex, чтобы создать новый токен без таких функций и обменять их с инвесторами. Одно только это действие может повысить доверие инвесторов к токену LEO..

Наконец, эта дискуссия может пойти по кругу, потому что Bitfinex будет утверждать, что им нужна «возможность обновления» (так ли это на самом деле?), И мы просто не согласимся с тем фактом, что чьи-то монеты могут быть удалены, даже если они не были нашими. Мы доводим дело до вас, наш замечательный читатель, решите сами и посмотрите, хотите ли вы доверять контракту LEO ERC20..