Как взламывали сейл Пломбира. Каждый мог
Тут я расскажу как был устроен смарт контракт и почему "надо было просто нанять кодеров" не работает. Надо было нанять хороших кодеров
Сама информация о контракте появилась часа за 2 до начала, а с учетом переноса, часов за 5. Просто был трансфер 16kk $GEL и стало понятно куда.
Когда мы узнали адрес контракта стало возможно прочитать, что он позволяет делать, прямо в etherscan.
Видно много-много точек взаимодействия с контрактом, все они явно имеют названия связанные с сейлом. Но нас интересует конечно же buyDolphin
"Дальше дело техники - жмем Connect to web3 и взаимодействуем, токен наш!". Так говорят нам знатоки.
А что писать в поле signature?
На этом простой учебник о взаимодействии со смарт-контрактами заканчивается и начинается методичка по криптографии.
Помочь ответить на вопрос что такое signature мне смог другой метод isDolphin. Он тоже принимает на вход этот аргумент но для работы с ним не нужно платить комиссии.
Посмотрим код базового контракта:
Эта функция проверяет, дельфин ли вы. Для этого мы проверяем, что signer - это тот, кто подписал ваш адрес и получил в результате signature. Другими словами, на их стороне, в процессе подготовки контракта, ими был создан signer. Он для каждого из ключей в whitelist создал signature, причем таким образом, что имея адрес ключа и signature можно проверить что signature создана signer-ом. Если ты не signer, то создать такую же ты не можешь. Только проверить.
Сама идея sorbet платформы в том, что signature становится известной строго в указанное время. И только после этого, предоставляя правильный signature, мы можем вызывать методы контракта. Можно ли было узнать signature до начала сейла? И вот тут кроется главный фейл сегодняшнего дня. Кажется, что можно было. Если вы видели, что ваш статус ОК, и вы в вайтлисте и дельфин, значит вы уже провзаимодействовали с контрактом.
То есть уже можно было кидать транзакции на покупку. И вот даже есть один кандидат, сделавший все довольно заранее. Подставляя его адрес и сигнатуру видим, что он все понял.
Собственно, исходя из этого можно понять что те, кто уделил час времени такому анализу вполне могли войти в блоки первыми сделав вид что входят за первые 2 секунды, готовясь на самом деле заблаговременно. Да же?
Ну и напоследок простой контракт чтобы продемонстрировать как работает signature. Разработал его в remix по-быстрому.
Подставляем вот такие параметры
{ "address _address": "0x7D852B24Ea94504F03743289131034bFb5DB954d", "bytes signature": "0xf14c4b5004d205155cb1a722b4e0424decd4f89f82e4bc70020f12db16312edf32042e759d978cdbb5c9cbd713d777e0dff4d96917c2f370d06f73d8da1a17d51c" }
получаем вычисленный адрес signer { "0": "address: 0x1aF41728737f8bC40E9eA1a9E1A3b19F4Db3Bdf9" }. Это собственно адрес разработчика контракта GEL.
Пишите если думаете что мы можем сотрудничать. [email protected]