February 24, 2022

Solidity | Part 2, продолжаем играться😜

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

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

Способы старта сейла:

1. С отправкой транзакции админа контракта, по типу setSaleState, toggleSale.
После того как эта транзакция исполняется в блоке, все транзакции после нее, отправленные на покупку будут успешны, а все что до нее зафейлены.
Под этот способ ботоводы подключается к WebSocket-у RPC и читают весь mem-pool из транзакций которые летят в блокчейне.
Как только они видят транзакцию от создателя, которая начинает сейл, боты начинают подставлять свои транзакции с такими же GWEI, чтобы лежать в блоке сразу же после этой транзакции(если поставить GWEI выше, то вы будете лежать в блоке перед этой транзакцией, соответственно сейл еще не начался)
Пример такого сейла:
Контракт Planktoons | Тот самый блок с транзакцией
Как вы можете заметить, все транзакции отправленные на покупку до Set Public Sale от овнеры были зафейлены, т.к. их гвей выше чем у этой транзакции. А все что после успешны.

2. С опр. времени блока (block.timestamp)
Сейл становится активным автоматически без каких-либо транзакций от админов по наступлении опр. времени. В этом случае боты либо проверяют estimateGas либо же время у текущего последнего блока.
Пример такого сейла:
Контракт KaraFuru | Блок с началом сейла
Если вы пролистаете в прошлый блок и посмотрите транзакции, которые находятся в нем, то увидете что все они были зафейлены, т.к. block.timestamp еще был меньше старта сейла.

Есть еще и другие способы, но сейчас я затронул самые популярные.

Чаще всего админы таких сейлов используют именно первый способ. Обычные люди и простые боты начинают отправлять транзакции по одной или даже сразу несколько. Однако есть способы быть быстрее и умнее.

За последнюю неделю такое происходило как минимум на 2 сейлах:
HeroGalaxy транзакция / Love Addicted Girls транзакция

Как вы видите, пользователь за 1 транзакцию покупает сразу очень много NFT, а сама транзакция идет вообще на другой контракт.
И, о да!! Я попробовал сделать также и у меня получилось :)

Ссылочка на код
Транзакция на покупку за ETH
Транзакция на покупку за ERC20 токен

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

От себя хочу добавить для всех тех, кто хочет изучать Solidity или просто смотреть как делать такие штучки. Лично мне очень зашел вот этот канал , кучу всего узнал именно оттуда, а не из гайдов и обучалок.
Когда смотрел вот этот видос , вообще думал ебать что это о_о

P.S: Эксперты Solidity пожалуйста осторожней смотрите на код и не кидайте палками. Я тут первый день и мне ваши external, pure, calldata, memory и др. после питухона вообще еще не запоминаются! Также возможно я где-то говорю полную чушь, если так то поправьте :)

P.S.S: Не знаю, заходит ли вообще такой контент. Если да, то ставьте этот ваш палец вверх и тогда я позже дропну вторую часть, которую также изучаю сейчас.

Share out tern.crypto