Как найти токен по адресу контракта

0x5a65585ce8213d1c9433e63d53d4e468540a5019 is my CRC20 token. I can search the token info on etherscan. https://ropsten.etherscan.io/token-search

Token Attributes Found: 
 totalSupply = 100
 name = ZONO
 symbol = ZONO
 decimals = 0

How can I do it without etherscan? I have my own geth server. Is it possible to get from my geth server? Are there any good libralies?


Update 1

I guess I can use eth_call. I know how to get balance of an address like below. I need to know the hex of totalSupply, name, symbol, and decimals.

var balanceHex = "0x70a08231"; // I believe this is the hex for balance
var contractAddress = "0x5a65585ce8213d1c9433e63d53d4e468540a5019";
var userAddress = "0x5DBB9793537515398A1176d365b636A5321D9e39";
var balanceCall = getDataObj(contractAddress, balanceHex, [getNakedAddress(userAddress)]);
var balance = web3.eth.call(balanceCall);

Update 2

I think the following is fine.

var totalSupply = web3.sha3('totalSupply()').substring(0,10);
console.log(totalSupply); // 0x18160ddd

How can I retrieve my account’s Augur (REP) token balance via JSON-RPC?

Создайте токен BEP20 вместе с нами, следуя пошаговой инструкции. В ж ой статье мы рассмотрим все тонкости и поищем подводные камни этого процесса. Если вы уже прекрасно ориентируетесь в понятиях DeFi, переходите сразу ко второй части статьи, где подробно описано создание токена BEP20.

Какова цель цифрового токена?

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

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

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

Что такое смарт-контракт?

Технически, это исходный код, в котором с помощью условных конструкций описаны правила проведения транзакций. Например, «Если отправитель подтверждает разрешение на перевод, получателю на адрес кошелька поступает N монет». Смарт-контракты программируются пользователями или создаются автоматически специальными сервисами.

При развертывании контракта, его создатель (или владелец) инициирует запись программы на каждом узле. Программа защищена кодом, поэтому взломать контракт токена очень сложно. Программа может быть запущена запросом на получение или отправку цифрового токена. 

Какая связь между токеном и смарт-контрактами?

Говоря простыми словами, токен рождается и существует как часть смарт-контракта. Многие действия в рамках условий контракта приводят к изменению данных, которые в нем хранятся. Так осуществляются переводы активов между адресами.

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

Что такое токены BEP20?

Это стандарт разработки смарт-контрактов. Представляет собой набор правил – какие функции должны быть описаны в программном коде. Основан на общем для большинства таких протоколов ERC-20.

Виталик Бутерин, русский программист, взял за основу Эфириума идею смарт-контракта, предложенную еще в 90-х. Он придумал максимально простые, но эффективные правила его создания и воплотил их в Эфириуме. Основной идеей как раз и была разработка смарт-контрактов на все случаи жизни. Так как блокчейн Бутерина в принципе может решить любую задачу (то есть ее можно описать в виде смарт-контракта, который при определенных обстоятельствах будет иметь истинные условия и выполнится), он считается завершенным по Тьюрингу. Для пользователей это означает, что в рамках Эфириума можно реализовать абсолютно любую идею.

Binance Chain – это цепочка, предназначенная для торговли криптовалютой и токенами. Чтобы пользователям было проще пользоваться огромными возможностями мира DeFi, была создана параллельная цепочка – Binance Smart Chain (BSC), предназначенная для создания собственных сетей и приложений. Она является ответвлением Эфириума. А BEP20 токен – это общее обозначение всех смарт-контрактов, которые созданы в этой экосистеме. Соответственно, BEP20 – стандарт токена (разработки смарт-контрактов), практически полностью совпадающий с ERC20. Это делает их совместимыми.

Кому нужно создавать BEP20 токены?

В первую очередь тем, кто разворачивает собственный бизнес в DeFi. В настоящее время далеко не все возможности децентрализованных финансов реализованы, поэтому стартапы здесь не редкость. Проект описывается в виде «белой бумаги» и продвигается в массы. Выпускаются собственные токены, которые распространяются в виде первичного предложения между первыми фолловерами. Если проект «выстрелит», создатель и владельцы токена получают прибыль.

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

Стоимость создания токена BEP20

Цена за создание токена равна комиссии сайта. Например, на Binance в настоящее время вы будете платить около 3,5 долларов США.

Почему Binance Smart Chain?

На первый взгляд кажется, что Эфириум надежнее – ведь он функционирует уже почти 9 лет, а BSC появился в прошлом году. Но это ответвление было придумано не для получения дополнительного дохода создателями биржи Binance Chain. Его основная задача – усовершенствовать возможности родительского блокчейна. Прежде всего технические:

  1. Скорость обработки блока в BSC 3 секунды.
  2. Плата за транзакцию (газ) в разы ниже, чем в Эфириуме.

Токены BEP20 легко реализуются и их можно проверить в тестовом варианте цепочки. Необязательно сразу генерировать смарт-контракт в главной сети – Binance Smart Chain реализовал структуру для тестирования программного кода.

Создаем тестовый токен BEP20 по шагам

Создание кошелька

Чаще всего используется MetaMask, так как сама платформа Binance Smart Chain принимает его подключение в виде расширения.

На официальном сайте нажимаем на кнопку «Скачать» и выбираем установку под браузер, в нашем случае Chrome.

В интернет-магазине браузера жмем «Установить». Пропускаем обучающее видео и переходим к настройке кошелька. После ввода и подтверждения пароля нужно скопировать и сохранить предложенную секретную фразу, которая представляет собой просто набор случайных слов. Это очень важный шаг, так как именно эта фраза лежит в основе генерации приватного ключа к кошельку.

После подтверждения кошелек создан.

Подключение к тестовой сети Binance Smart Chain

Пока мы подключены к Эфириуму. Нужно выбрать другой блокчейн.

Заполняем форму, добавляя данные TestNet от BSC. Ниже в таблице можно скопировать строки.

Пополняем счет

Пока у нас пустой кошелек.

Для получения монет нужно перейти на BSC (https://testnet.binance.org/faucet-smart) и вставить адрес кошелька.

Деньги понадобятся для регистрации смарт-контракта и оплаты комиссии.

Адрес копируем в кошельке.

Менее чем через минуту на счет будет зачислен 1 BNB (токен BSC).

Нужно учитывать, что система не дает более одного BNB в сутки.

Написание программы смарт-контракта

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

Функция

Описание

Статус

totalSupply()

Получить количество выпущенных токенов

READ

balanceOf(account)

Узнать количество токенов на счету аккаунта

READ

transfer(recipient, amount)

Отправить указанное количество актива

WRITE

transferFrom(sender, recipient, amount)

Отправить указанное количество актива от отправителя к получателю

WRITE

allowance(owner, sender)

Установить, сколько токенов может потратить отправитель от имени получателя. Используется, например, для вывода токенов на другой ресурс

READ

approve(sender, amount)

Создать подтверждение на списывание токенов для отправителя

WRITE

Approval(owner, sender, value)

Установить, когда выполнилась функция подтвердить. Относится к событиям системы

EVENT

Transfer(sender, recipient, value)

Установить, когда выполнилась функция отправить. Относится к событиям системы

EVENT

При вызове функций, которые вносят записи в блокчейн (статус WRITE), взимается комиссия.

Для программирования функций в сети можно найти готовые шаблоны. 

Укажем имя токена BEP20 как «AAAToken», символ установим «ATK», количество и делимость оставим по умолчанию.

Программа пишется на языке Solidity. Описание функций можно найти на сайте openzeppelin (https://docs.openzeppelin.com/contracts).

Компиляция смарт-контракта

Чтобы получить рабочий код нужно его скомпилировать. Это делается в интегрированной среде разработки Remix, доступной онлайн из браузера.

Для комфортной работы создаем новое рабочее пространство.

Введем имя.

В папке контрактов создадим новый файл с расширением sol и вставим в него наш код. Переходим в компилятор.

Выберем версию компилятора 0.8.4 и нажмем кнопку компиляции.

Развертывание токена BEP20

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

Далее нужно выбрать среду.

После чего автоматически появится запрос от кошелька.

После успешного соединения в поле «Account» появился адрес. Нажимаем оранжевую кнопку. Появится окно с запросом подтверждения.

Подтвердили и увидели наш первый блок.

Комиссии за создание токена BEP20

Вы увидите комиссию по умолчанию, уплаченную при выпуске токена. Ее можно изменить, но не рекомендуется. Если выставить слишком маленькую – транзакция может не пройти успешно. 

На момент написания статьи стоимость комиссии составляет примерно 3,5 доллара США.

В кошельке тоже произошли изменения. В разделе «Activity» можно щелкнуть по операции и получить ее детали.

Пользовательский токен и транзакции контракта

Скопируем идентификатор, перейдем на сайт https://bscscan.com и выберем тестовую сеть.

Вставим полученные данные и нажмем кнопку поиска.

Далее можно посмотреть все данные по токену.

Теперь можно импортировать свои токены в кошелек. Нажимаем в MetaMask «Import tokens» и вставляем адрес смарт-контракта.

Все получилось.

Теперь вы можете пересылать собственный токен BEP20 кому угодно.

Верификация и публикация смарт-контракта

На вкладке «Contract», которая появится в BSCScan после перехода по ссылке, содержащей адрес контракта, нужно нажать ссылку верификации. Заполняем поля данными и подтверждаем операцию.

Далее вводим код программы и ждем верификации.

Для проверки в кошельке можно создать еще один аккаунт и переслать на него токены.

В сервисе проверки мы увидим транзакцию.

Особенности разработки токена BEP20

Разработка токена требует не только навыков программирования, но и понимания алгоритмов проекта: нужно сформулировать условия и описать характеристики токенов:

  • можно ли сжигать токены;
  • кто может чеканить токены и можно ли отключить эту функцию;
  • каков лимит;
  • логика голосования;
  • следует ли распределить роли для токенов или они будут общедоступными;
  • нужно ли создавать собственный цифровой токен, доступный для генерации владельцем.

Это входит в задачу аналитика, который превращает идею в целостный алгоритм. Без глубокого понимания технологии smart chain и техники построения смарт-контрактов ответить на эти вопросы сложно. 

В ICODA можно получить предварительную консультацию и заказать услуги по генерации токенов в сети Binance Smart Chain. Мы тщательно анализируем предметную область и выбираем наиболее оптимальные характеристики.

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

Продвижение проекта

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

Заказывая реализацию смарт-контракта в ICODA, обратите внимание на услуги продвижения. Так как наши специалисты будут знать все тонкости «изнутри», мы сможем презентовать ваш бизнес с самой выгодной стороны.

Заключение

С технической точки зрения создать токены BEP20 несложно, потому что вы можете просто использовать любой генератор токенов и подключить Trust Wallet или кошелек MetaMask. Однако надо помнить, что смарт-контракт включает в себя программный код, представляющий алгоритм идеи проекта. Следовательно, его реализация требует глубокого анализа и моделирования абсолютно всех бизнес-процессов. Поэтому лучше всего обращаться к специалистам, которые быстро разработают надежный программный код.

Уровень риска

Проверка контракта

Этот сканер можно использовать для проверки контракта на ханипот и раг пул. Учтите, что выданный результат не дает 100% гарантию.

Ханипот



Владение контрактом





Черный список





Изменение макс. TX





Изменение макс. продажи





Изменение комиссии





Отключение торговли



Раг Пул



Риск





Ликвидность





Холдеры





Топ 5 Холдеров





Минт





Разблокировано



Результат проверки на ханипот

Продажи открыты с высокой комиссией (20-50%)

Продажи открыты с высокой комиссией (50-99%)

Проверка на ханипот:
Продажи открыты

Проверка на ханипот:
Продажи закрыты

Уязвимости обнаруженные в коде контракта:

Как узнать смарт-контракт токена?

В некоторых случаях, пользователям необходимо узнать адрес контракта определенного токена. Причины могут быть разными: токен не отображается в кошельке и его необходимо туда импортировать или пользовать желает приобрести токен на децентрализованной бирже (DEX). Кроме того, зная адрес контракта токена можно посмотреть различную информацию в блокчейне, связанную с токеном. В этой статье мы подробно опишем, как найти адрес смарт-контракта токена и при этом не попасться на уловки мошенников и не приобрести поддельный токен.

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

1. Используем известные сервисы

Этот способ самый простой, но таким образом не получится найти смарт-контракт любого токена. Если токен, достаточно известный, то вероятнее всего он находится в базе таких сервисов, как CoinMarketCap и CoinGecko. Достаточно просто найти в них этот токен и на странице описания взять необходимой контракт.

Пример с токеном MATIC на CoinMarketCap:

Пример с токеном MATIC на CoinMarketCap

Пример с токеном AURORA на CoinGecko:

Пример с токеном AURORA на CoinGecko

В некоторых случаях понадобятся оба сервиса, так как в каждом по отдельности может существовать не полная информация и может не хватать контрактов в определенных сетях, если токен существует не только в одной сети.

2. Официальный сайт проекта

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

Чаще всего, адрес контракта токена бывает опубликован в документах проекта (Docs) или в белой бумаге проекта (WhitePaper).

Пример с токеном BSW децентрализованной биржи Biswap:

Как найти смарт-контракт токена?

3. Как узнать контракт токена, находящегося в вашем кошельке?

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

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

Если вы уверены на 100%, что токен находящийся на вашем кошельке настоящий и необходимо узнать его смарт-контракт, то потребуется обозреватель блоков в той сети, в которой находится токен в вашем кошельке. В каждой сети существуют свои обозреватели блоков, вот несколько примеров для популярных сетей:

  • Ethereum — https://etherscan.io/
  • BNB Chain — https://bscscan.com/
  • Polygon — https://polygonscan.com/
  • Fantom — https://ftmscan.com/
  • Avalanche — https://snowtrace.io/

Пример с токеном NMX децентрализованной биржи Nomiswap в сети BNB Chain:

1. Перейдите в обозреватель блоков BSCScan (для сети BNB Chain) и введите адрес своего кошелька в строку поиска:

Обозреватель блоков BSCScan

2. Нажмите BEP-20 Token Txns, если вы хотите узнать адрес контракта обычного токена или нажмите ERC-721 Token Txns, если вы хотите узнать адрес контракта NFT-токена:

BEP-20 Token Txns

3. В списке появятся все входящие и исходящие транзакции токенов, которые совершались в вашем кошельке. Найдите необходимой токен и нажмите на него:

Токен NMX

4. Откроется страница смарт-контракта необходимого токена, где мы и можем увидеть его адрес:

Контракт токена NMX

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

Читайте также:

  • Token Pocket — защита кошелька при работе с Web3 и NFT
  • Как снять апрувы (Approve) со своего кошелька?

Оглавление

  • 1 Основы мира DeFi
  • 2 Интерфейс ERC 20/BEP 20 как основа контракта токена, разбор функций контракта
  • 3 Что происходит под капотом при работе с контрактом / Пример использования функций
  • 4 Разбор основных типов скама: рагпул, ханипот, свистоперделки. Где и как искать в контракте.
  • 5 Заключение

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

Учимся читать смарт контракты и обходить скам: Часть 1

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

Основы мира DeFi

Смарт-контракты

  • Смарт-контракт это программный код, который выполняется на нодах блокчейна, а результат выполнения (если это прописано в программе) сохраняется в блокчейне в специальном хранилище. Назовем данные, сохраняемые в блокчейне – персистент данными.
  • Код смарт-контракта после заливки в блокчейн дополнительно заливается сверху слоем эпоксидки, чтобы предотвратить любое случайное или намеренное изменение кода.
  • Функции смарт контракта могут быть вызваны извне (с кошелька пользователя или из другого контракта) и делятся на две большие группы:

– Не меняющие состояние персистент данных (только чтение из блокчейна)

– Меняющие состояние  персистент данных

Вызов функций первой группы не стоит газа и денег и не уходит дальше ближайшей ноды, к которой мы подцеплены (пример: Balance Of, TotalSupply, Allowance). В BSC scan эти функции перечислены во вкладке “READ”

Вызов функций второй группы превращается в полноценную транзакцию, которая майнится, включается в блок и результат которой записывается в блокчейн. (пример: Approve, Transfer, TransferFrom). В BSC scan эти функции перечислены во вкладке “WRITE”

Блокчейны состояния

  • Etherium и блокчейны, построенные на его основе (Polygon/matic, BSC, и т.д.), относятся к блокчейнам состояния.
  • Каждый адрес хранит в блокчейне значение своего баланса в нативной монете блокчейна (ETH, BNB, MATIC)
  • Каждый смарт-контракт хранит в блокчейне значения своих персистент переменных
  • На текущий момент времени (Блок Х) состояние блокчейна описывается балансом всех существующих адресов в сети и текущими значениями персистент переменных всех смарт-контрактов в блокчейне.

Аккаунты

  • Сид-фраза (12 слов) которую вы записали при первом создании вашего кошелька, при помощи протокола BIP 39 превращается в приватный ключ, который при помощи алгоритма ECDSA (Elliptic Curve Digital Signature Algorithm) превращается в публичный ключ, который при помощи хеширования и обрезания превращается в ваш адрес в блокчейне. То есть:

Сид-Фраза -> Приватный ключ -> Публичный ключ -> Адрес

  • И это превращение совершенно однозначное. Из одной и той же сид фразы вы всегда получите один и тот же адрес со своим балансом.
  • Поэтому чтобы перенести свой аккаунт на другой кошелек (MetaMask, Trust wallet, SafePal, Coin98. …) Вам всего лишь надо восстановить ваш аккаунт на новом кошельке используя сохраненную сид фразу.
  • Отсюда следует, что сид фразу надо хранить как зеницу ока, поскольку она дает полный доступ к вашему аккаунту.

А где же наши токены?

  • Для каждого аккаунта (адреса) в блокчейне хранится только баланс этого адреса в нативной монете блокчейна и все. А где же токены, которые мы купили?
  • Баланс вашего адреса в каждом купленном токене хранится в смарт-контракте этого токена в таблице (условно) balances, состоящей из двух столбцов – адрес и его баланс в токенах.

В BSC scan эта таблица отображается на вкладке “HOLDERS”

  • Именно поэтому чтобы баланс токена появился в вашем кошельке токен надо в него (кошелек) добавить. После добавления кошелек запрашивает смарт-контракт токена на предмет текущего баланса своего аккаунта и радостно отображает это в интерфейсе.

Один адрес – множество сетей

  • ethereum был первым блокчейн (спасибо Виталий!) построенным вокруг идеологии смарт-контрактов. Первым и настолько успешным, что породил множество клонов, различающихся между собой порой только алгоритмом консенсуса и стоимостью транзакций.
  • Поэтому вы можете использовать (и используете) один и тот же адрес в сетях BSC, Polygon. Ethereum, и т.д. Когда вы находитесь внутри кошелька (хорошо что не чайника, да?) представьте что вы стоите на вокзале с билетом на поезд с номером 0хbc12….dd, вокруг вас множество дверей, на них написано Ethereum, BSC, Polygon,,, За дверями разные железные дороги и поезда, кто-то на угле, кто-то на ядерном реакторе, кого-то вообще еще лошади тянут. Но все они стоят на рельсах, везде есть локомотив и вагоны. И ваш билет всегда соответствует месту в одном из таких вагонов какую бы дверь вы ни открыли.

***

Итак:

  • Ключом к вашему аккаунту является сид-фраза или секретный ключ, однозначно определяющая ваш адрес в сети и дающая полный доступ к аккаунту
  • Ваш баланс какого-то токена лежит в смарт-контракте этого токена
  • Вы можете использовать один адрес для всех Ethernet-based блокчейнов
  • Смарт-Контракт это неизменяемая программа плюс изменяемые данные, которые хранятся в блокчейне
  • У смарт-контракта есть две группы функций, которые можно вызвать извне – не изменяющие состояние блокчейна (READ) и изменяющие (WRITE)

Интерфейс ERC 20/BEP 20 как основа контракта токена, разбор функций контракта

Что такое Интерфейс

  • Интерфейс – (грубо, но нам подойдет) это описание внешних воздействий (органов управления) каким-либо объектом и однозначных реакций объекта на это управление.
  • Пример – вождение автомобиля. Интерфейсом является набор органов управления (руль, три педали, рычаг переключения передач) и описание однозначных реакций автомобиля на использование этих органов.
  • Осознав этот интерфейс вы, с той или иной степенью успешности и эффективности, сможете управлять и Окой и Белазом.

Интерфейс ERC-20

  • На текущий момент уже создано и каждый день создается множество токенов. Но с любым токеном мы можем взаимодействовать единообразно – пересылать, свапать, апрувить и т.д. За счет чего же достигается подобная унификация?
  • Чтобы токен мог называться токеном, он должен “реализовывать” интерфейс ERC 20/BEP 20. Реализовывать означает, что смарт контракт токена должен содержать вполне определенный набор функций и параметров с однозначно прописанной реакцией (что смарт контракт должен сделать) на вызов каждой из этих функций.

Interface of the erc20 standard as defined in the EIP.

FUNCTIONS

  • totalSupply()
  • balanceOf(account)
  • transfer(recipient, amount)
  • transferFrom(sender, recipient, amount)
  • allowance(owner, spender)
  • approve(spender, amount)

EVENTS

  • Transfer(from, to, value)
  • Approval(owner, spender, value)
  • Также не забываем, что при вызове каждой функции у нас незримо присутствуют еще два параметра (на самом деле их больше, но не будем усложнять):

msg.sender – адрес с которого прилетела транзакция (кто вызвал функцию)

msg.value – количество денег (нативных монет – ETH/BNB) пересланных с транзакцией

  • EVENT – способ передать информацию из смарт-контракта наружу, в web3 программу, вызвавшую контракт. Как флажок о том, что выполнена такая-то операция. Подробно рассматривать не будем, просто запомните.

Описание функций ERC-20

Разобьем наши 6 функций на две группы:

Группа READ (только читаем из блокчейна):

  • totalSupply() – возвращает общую эмиссию токена
  • balance Of(account)– возвращает баланс адреса account
  • allowance(owner, spender)– возвращает количество токенов, которое owner разрешил списать со своего аккаунта spender (см также approve)

Группа WRITE (меняем состояние блокчейна):

  • transfer(recipient, amount)– передает amount токенов от msg.sender к recipient
  • transferFrom(sender, recipient, amount)– передает amount токенов от sender к recipient
  • approve(spender, amount)– выдает разрешение spender списать amount токенов с баланса msg.sender.  (см также allowance)

***

  • Существует стандарт ERC-20 описывающий интерфейс (функции, их параметры и возвращаемые значения), который должен реализовывать смарт-контракт, чтобы называться токеном.
  • Если смарт-контракт реализует интерфейс ERC-20, то мы можем его использовать везде, где возможно использование токена – свапать его на dex, пересылать друг другу, сжигать и т.д. И совершенно неважно что на самом деле представляет собой этот контракт.
  • Помните – если что-то выглядит как утка, ходит как утка и крякает как утка, то мы можем ее использовать как утку, КАКАЯ РАЗНИЦА ЧТО ЭТО ТАКОЕ НА САМОМ ДЕЛЕ )

Что происходит под капотом при работе с контрактом / Пример использования функций

Давайте рассмотрим на примере:

  • Вася решает создать свой токен. Он берет самую стандартную реализацию ERC20, меняет название, количество (1000), прописывает что при создании контракта ему должны быть намечены (переданы) все 1000 токенов и деплоит смарт-контракт в блокчейн.

Смарт контракт выполняет функцию конструктора (специальная функция выполняющаяся один раз при деплое контракта), которая инициализирует внутренние переменные, в частности создает две пустые таблицы – balances и allowances, затем вызывает функцию mint, которая создает первую строчку в таблице balances:

Вася – 1000

И завершает работу. Контракт готов.

  • Вася решает подарить своим друзьям Коле и Борису по 100 токенов

Кошелек Васи инициирует две транзакции к смарт-контракту токена: transfer(Коля, 100) и transfer(Борис, 100). В данном случае с кого надо списать монеты определяется тем, кто послал транзакцию, т.е. с баланса Васи (msg.sender, помните?).

Смарт-контракт просто меняет таблицу balances добавляя в нее две новые строчки и меняя сумму у Васи:

Вася – 800

Коля – 100

Борис – 100

  • Вася решает вывести токен на биржу, для этого он идет на панкейк и создает пару ликвидности Token-BNB. (800 токенов – 2 BNB)

Панкейк роутер создает пару ликвидности, Вася заливает в нее 800 токенов и 2 BNB, в результате где-то в другой вселенной в контракте BNB появляется строчка CAKE-LP-Token – 2, а в контракте токена таблица balances теперь выглядит так:

Вася – 0

Коля – 100

Борис – 100

CAKE-LP-Token/Pancake Router – 800   (В BSC scan мы можем увидеть ликвидность в таблице holders)

* для простоты рассказа считаем, что Pancake Router и CAKE-LP-Token с точки зрения контракта токена это одно и то же. На самом деле нет, там все хитрее, но не будем усложнять, для наших целей такое упрощение вполне допустимо.

  • Коля решает прикупить еще 100 токенов, он идет на Панкейк, говорит “Хочу купить 100 токенов за BNN, почем нынче овес?”

Панкейк рутер запрашивает у пары ликвидности текущий курс токена к BNB (по алгоритму AMM) и говорит Коле – Это будет тебе стоить 0.25 BNB + комиссия.

  • Договорились, Коля отправляет Панкейку 0.25 BNB и ждет свои токены.

Панкейк рутер видит, что деньги пришли и создает транзакцию на смарт-контракт токена: transfer(Коля, 100) от имени LP пары.

Смарт контракт выполняет запрошенное, дебетуя счет пары и кредитуя счет Коли. В результате:

Вася – 0

Коля – 200

Борис – 100

CAKE-LP-Token – 700 

Панкейк роутер отправляет 0.25 BNB на другой конец вселенной и на другом плече LP пары в контракте BNB значение баланса пары CAKE-LP-Token увеличивается с 2 до 2.25

  • В это время Борис решает продать все токены и купить на все Binamon (БИНАМООН :). Он идет на панкейк и говорит: “Хочу продать 100 токенов, почем возьмешь?”

Панкейк рутер запрашивает у пары ликвидности текущий курс токена к BNB (по алгоритму AMM) и говорит Коле – Это будет тебе стоить 0.37 BNB + комиссия.

Одновременно с этим панкейк запрашивает у смарт-контракта токена а разрешил ли Борис ему(Панкейку) списывать токены со своего счета, для этого он запрашивает у смарт-контракта результат функции: allowance(Борис, Панкейк-рутер).

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

Борис до этого ничего не продавал, результат выполнения функции = 0. Панкейк видит это и в интерфейсе свопа рисует для Бориса кнопку “APPROVE”.

  • Борис нажимает на кнопку “APPROVE”

Кошелек Бориса инициирует транзакцию к смарт-контракту токена: approve(Панкейк-рутер, 99999999999999999), позволяя роутеру списывать со своего счета столько токенов, сколько ему (рутеру) надо.

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

Смарт-контракт токена выполняем операцию, добавляя в таблицу allowance строчку:

Борис – (Панкейк-рутер, 999999999) и генерирует событие Approval

Панкейк роутер видит это событие и перезапрашивает у смарт-контракта результат функции: allowance(Борис, Панкейк-рутер).

Если смарт-контракт возвращает 9999999999 и это значение больше или равно сумме текущей транзакции, то рутер убирает кнопку “APPROVE” из интерфейса и включает кнопку “SWAP”. Если возвращается 0, то кнопка “APPROVE” не исчезает, кнопка “SWAP” все еще неактивна.

  • Борис нажимает на кнопку “SWAP”

Панкейк рутер дает команду BNB-шному плечу LP пары отправить 0.37 BNB Борису и создает транзакцию на смарт-контракт токена вызывая функцию transferFrom(Борис, Панкейк-рутер, 100)

Смарт-контракт проверяет наличие в таблице allowance строчки, разрешающей Панкейку списывать монеты с адреса Бориса, находит ее и выполняет операцию.

Таблица balances теперь имеет вид:

Вася – 0

Коля – 200

Борис – 0

CAKE-LP-Token – 800 

  • Все получилось, все довольны, все операции проведены, время пить кофе )

***

  • Токены пересылаются с баланса отправителя транзакции (обычно это кошелек пользователя) на любой другой адрес с помощью функции transfer.
  • Токены могут пересылаться с любого адреса на любой адрес, только если есть разрешение через функцию approve списывать деньги с адреса дебитора.
  • Функция approve вызывается владельцем адреса, который выдает разрешение другому адресу списать токены с его баланса.
  • Наличие разрешения можно посмотреть через функцию allowance.
  • При любых трансферах токены просто переезжают из одной строчки таблицы balances в другую, никогда не покидая пределов своего смарт-контракта.
  • Если вы хотите заранее апрувить продажу токена, вы заходите в смарт-контракт ТОКЕНА, вкладка WRITE, ищете там функцию APPROVE и вставляете адрес смарт-контракта РУТЕРА той свалки где хотите свапать. В нашем случае это адрес Панкейк-рутера: 0x10ED43C718714eb63d5aA57B78B54704E256024E

Разбор основных типов скама: рагпул, ханипот, свистоперделки. Где и как искать в контракте.

A) Рагпул – Ситуация, когда в токене на свалке внезапно (или очень быстро) исчезает вся ликвидность и вы остаетесь с кучей токенов, которые невозможно продать.

Заключение

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

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

Удачи!

  • https://t.me/ak74lab
  • https://t.me/Kruegger
  • Учимся читать смарт контракты и обходить скам: Часть 1
  • Расширенная работа со Смарт-контрактами. Основы языка “Solidity”. Учимся обходить скам: Часть 2
  • Опасно ли аппрувить что-либо на PancakeSwap? Учимся обходить скам: Часть 3
  • Трехуровневая схема работы DeFi или сам себе DApp. Учимся обходить скам: Часть 4
  • Как хомяку выжить в DeFi? Учимся обходить скам: Часть 5

— ПОДПИСЫВАЙТЕСЬ НА НАШ КАНАЛ В ТЕЛЕГРАМЕ @WHATTONEWS

Понравилась статья? Поделить с друзьями:
  • Как составить письмо в благотворительный фонд на лечение ребенка образец
  • Как составить онлайн экскурсию
  • Одна нога выше другой как исправить
  • Фильм как нашли золото на стройке
  • Как найти наушники airpods без айфона