Как разобраться в смарт-контракте, если ты не технарь
Смарт-контракт — это самоисполняющееся цифровое соглашение, которое позволяет взаимодействовать с пользователями и платформами без посредников. Он представляет из себя договор, записанный в виде программы.
Смарт-контракт может выполнять самые различные функции: от хранения информации до взаимодействия с другими смарт-контрактами. Например, смарт-контракт Tether (USDT) хранит в себе информацию о держателях токена, записывая пары «адрес-число».
Давайте разберемся в устройстве смарт-контрактов на примере Tether. Для начала нужно найти адрес контракта токена в определенной сети. Для примера возьмем Ethereum и скопируем адрес на Coinmarketcap.
How to Read Smart Contracts
The first part in a series of articles on how to read smart contracts. This tutorial is made primarily for enthusiasts who want to learn how to understand the crypto world, but do not have a deep knowledge of protocols, the inner mechanisms of blockchains, etc.
![]()
![]()
This material was created by Alex Kruegger (Telegram: @kruegger), author of the AK74-Lab Telegram Channel. Translated by the swap.net project team.
DeFi basics
Smart Contracts
A smart contract is a code that is executed on blockchain nodes, and the result of the execution (if spelled out in the program) is stored in the blockchain in a special repository — persistence data. The smart contract code, once uploaded to the blockchain, is additionally locked to prevent any accidental or intentional changes to the code.
The smart contract functions can be called from the outside (from the user’s wallet or from another contract) and divide into two large groups:
— Not changing the persistence data (only read from the blockchain)
— Changing the persistence data
Calling the first group of functions does not cost any gas or money and does not go further than the nearest node (Balance of, TotalSupply, Allowance). In BSC scan these functions are under the “READ” tab.
Calling the second group of functions turns into a full-fledged transaction, which is mined, included in the block and the result of which is written to the blockchain (Approve, Transfer, TransferFrom). In BSC scan these functions are under the “WRITE” tab.
State blockchains
Ethereum and Ethereum-based blockchains (Polygon, BSC, etc.) are state blockchains. Each address stores in the blockchain the value of its balance in the native coin of the blockchain (ETH, BNB, MATIC, etc.). Each smart contract stores in the blockchain the values of its persistent variables. The current state of the blockchain is described by the balance of all existing addresses in the network and the current values of persistence variables of all smart contracts in the blockchain.
Accounts
The Seed-Phrase (12 words) that you wrote down when you first created your wallet is turned into a private key using the BIP 39 protocol, which is turned into a public key using the ECDSA (Elliptic Curve Digital Signature Algorithm), which is turned into your address in the blockchain using hashing and trimming.
Seed-Phrase →Private Key →Public Key →Address
You will always get the same address with your balance from the same seed phrase. To transfer your account to another wallet (MetaMask, Trust Wallet, SafePal, Coin98, etc.) you just need to restore your account on the new wallet using the saved seed phrase. Keep this phrase carefully, because it gives full access to your account.
Where are the tokens?
For each account (address), the blockchain stores only the balance of that address in native blockchain coin and that’s it. The balance of your address in each purchased token is stored in the smart contract of that token in the balances table — the address/balance in tokens.
In BSC scan this table is displayed on the “HOLDERS” tab.
Token must be added to your wallet in order for the balance to appear. After adding, the wallet queries the token’s smart contract for the current balance of your account and displays it in the interface.
One address — many chains
Ethereum was the first blockchain built around the ideology of smart contracts. It has spawned many clones that differ from each other only by consensus algorithm and transaction gas. That’s why you can use the same address for BSC, Ethereum, Polygon blockchains.
Imagine standing on the train station holding the 0x…bc19 ticket. There are a lot of platforms around you named Ethereum, BSC, Polygon, etc. Near them are different railroads and trains: on coal, a nuclear reactor, some still pulled by horses. But each stands on rails, there are locomotives and wagons everywhere. And your ticket always sticked to a seat in any wagon on any platform.
To summarize the above
- The key to account is a Seed Phrase / Secret Key that identifies online address and gives full access to account
- Token balance is in the Smart Contract of that token
- You can use one address for all Ethernet-based blockchains
- A Smart Contract is an inchangable program + variable data stored in a blockchain
- A Smart Contract has two groups of functions that can be called from the outside — those that do not change the state of the blockchain (READ) and those that change (WRITE)
ERC 20/BEP 20 interface as the basis of a token contract, a breakdown of contract functions.
What is an Interface
Interface — a description of external influences (controls) on some object and object’s reactions to this control.
For example, car driving. The interface is a set of controls (steering wheel, pedals, gear box) and car’s responses to the use of these controls.
ERC-20 Interface
At the moment, many tokens have already been created and are being created every day. We can interact with any token in the same way — send, swap, approve, etc. So how does this unification come?
Token has to “implement” the ERC 20/BEP 20 interface. Implementing means that a smart token contract must contain a define set of functions and parameters with an unambiguous reaction (what a smart contract should do) to each of these functions.
Interface of the ERC20 standard as defined in the EIP.
FUNCTIONS
EVENTS
Each function call has two more parameters:
msg.sender — address from which the transaction came (who called the function)
msg.value —the amount of tokens (ETH/BNB) sent with the transaction
EVENT — a way to pass information from a smart contract outward, to the web3 program that called the contract. As a checkbox to say that such operation has been made.
Description of ERC-20 functions
Let’s divide 6 functions into two groups:
READ functions (only reading on blockchain):
-
— shows the total issuance of the token — shows the balance of the address account — shows the total amount of tokens owner allowed spender to debit (check approve)
WRITE functions (changing the blockchain):
-
— transfer token amount from msg.sender to recipient — transfer token amount from sender to recipient — allow spender to debit token amount from msg.sender balance. (check allowance)
To summarize the above
- There is an ERC-20 standard describing the interface (functions, their parameters and return values) that must implement a smart contract in order to be called a token.
- If a smart contract implements the ERC-20 interface, then we can use it wherever we can use the token — swap it to DEX, forward it to each other, burn it, etc. And it doesn’t matter at all what the contract actually is.
- If something looks like a duck, walks like a duck and quacks like a duck, we can use it as a duck, no matter what it actually is
What happens when working with a contract / Example
Example:
- Ben decides to create his own token. He takes the most standard implementation of ERC20, changes the name, number (1,000), prescribes that all 1,000 tokens must be intended (transferred) to him when creating the contract, and deploys the smart contract into the blockchain.
A Smart Contract performs a builder function (a special function that is executed once when a contract is deployed) that initializes internal variables, creates two empty tables — balances and allowances, then calls the mint function, which creates the first line in the balances:
— BEN — 1000
And he is finishes the work. The contract is ready.
- Ben decides to give his friends Ivan and Jake 100 tokens each.
Ben’s wallet initiates two transactions to the smart token contract: transfer(Ivan, 100) and transfer(Jake, 100). In this case, who should be debited with the coins is determined by who sent the transaction — Ben’s balance (msg.sender).
The smart contract simply changes the table by adding two new lines and changing the amount at Ben:
— BEN— 800
— IVAN— 100
— JAKE— 100
- Ben decides to put the token on the DEXchange, so he goes to the pancake (for example) and creates a Token-BNB liquidity pair (800 tokens — 2 BNB).
Pancake router creates a liquidity pair, Ben transfers 800 tokens and 2 BNB into it, as a result somewhere in the other universe a line CAKE-LP-Token — 2 appears in the BNB contract, and the token contract table now looks like this:
— BEN — 0
— IVAN — 100
— JAKE— 100
— CAKE-LP-Token/Pancake Router — 800
(In BSC scan we can see the liquidity in the holders)
- Ivan decides to buy another 100 tokens, he goes to Pancake, says “I want to buy 100 tokens for BNB”
The pancake router asks the liquidity pair for the current exchange rate of the token to BNB (using the AMM algorithm) and tells Ivan— “It will cost you 0.25 BNB + fee.”
- Ivan sends 0.25 BNB to Pancake and waits for his tokens.
The panckake router sees that the money has arrived and creates a transaction on the smart token contract: transfer(Kolya, 100) on behalf of the LP pair.
The smart contract fulfils the request by debiting the pair’s account and crediting Ivan’s account. The result:
— BEN— 0
— IVAN— 200
— JAKE— 100
— CAKE-LP-Token — 700
The panckake router sends 0.25 BNB to the other end of the universe and on the other part of the LP pair in the BNB contract the value of the CAKE-LP-Token pair balance increases from 2 to 2.25
- At this time Jake decides to sell all the tokens and buy Binamon. He goes to the pancake and says: “I want to sell 100 tokens”.
The pancake router asks the LP for the current exchange rate of the token to BNB (using the AMM algorithm) and tells Jake — This will cost you 0.37 BNB + fee.
Then the Pancake asks the smart token contract whether Jake has allowed him (the Pancake) to debit tokens from his account, to do this it asks the smart token contract for the result of the: allowance(JAKE, Pancake-router) function
*Pancake router logically trusts no one, so all debit transactions take place in his name, which is why Jake has to say that he trusts Pancake to debit his token balance*
Jake has not sold anything before, the result = 0. Pancake sees this and draws an “APPROVE” button for Jake in the swap interface.
- Jake pushes “APPROVE”
Jake’s wallet initiates a transaction to the smart token contract: approve(pancake router, 999999999999999999999), allowing the router to debit his account with as many tokens as he (the router) needs.
*Actually it would be more correct to give permission for each transaction only for the amount of that transaction, but people are lazy creatures and so usually no one bothers and puts the maximum possible number as the number of tokens allowed to be debited. In our example, for simplicity, that’s a lot of 9s.*
The smart token contract performs the operation by adding a line to the allowance table:
JAKE— (Pancake router, 999999999) and generates an Approval event
The Pancake router sees this event and requeries again the smart contract for the result of the function: allowance(JAKE, punk router).
If the smart contract returns 9999999999 and this value is greater than or equal to the amount of the current transaction, then the router will remove the “APPROVE” button from the interface and enable the “SWAP” button. If 0 is returned, the “APPROVE” button does not disappear, the “SWAP” button is still inactive.
- Jake pushes “SWAP”
The Panckake router commands the LP pair’s BNB part to send 0.37 BNB to Jake and creates a transaction on the smart token contract by calling the transferFrom(JAKE, punk ruther, 100) function.
The Smart Contract checks for an allowance line table allowing Pancake to debit coins from Jakes’ address, finds it and executes the operation.
The table now looks like this:
— BEN— 0
— IVAN— 200
— JAKE— 0
— CAKE-LP-Token — 800
- Everything worked out, everyone is happy, all the operations have been carried out
- The tokens are transferred from the balance of the sender of the transaction (usually the user’s wallet) to any other address using the transfer function.
- The tokens can be sent from any address to any address, only if there is permission through the approve function to debit the address of the debtor.
- The function approve is called by the owner of the address, who gives permission for another address to debit tokens from his balance.
- Permission can be viewed via the allowance function.
- With any transfers, the tokens simply move from one line of the balancesheet to another, never leaving the confines of their smart contract.
- If you want to pre-approve token sell, then go into the TOKEN smart contract, WRITE tab, look for the APPROVE function there and insert the address of the smart ROUTER contract of the place where you want to swap. In our case this is the address of the Pancake Router: 0x10ED43C718714eb63d5aA57B78B54704E256024E
In this tutorial we have looked at the fundamental things about your accounts, contracts, and seen the main points of interaction between them.
Strongly advise you to take a basic programming course in order to be able to read contract code at a minimum level and understand at least approximately what a particular piece of code does.
Как проверить смарт-контракт на скам

Смарт-контракт в блокчейне – запись из кода, которая отвечает за хранение активов, их продажу, банальное отображение и общее управление. То есть у каждого токена или криптовалютного проекта есть свой смарт-контракт, который может прочитать любой пользователь и решить, насколько он безопасен.
Сама безопасность зависит от того, может ли создатель смарт-контракта вносить в него изменения, как были распределены токены и хранится ли в коде вредоносная программа, способная после подписания контракта, например, списать с вашего кошелька весь баланс других токенов. Для проверки контрактов обычно нужен полноценный аудит с участием специализированных групп программистов и экспертов. Они делают вывод по безопасности смарт-контракта и публикуют соответствующую документацию. Однако поверхностную проверку можно произвести и самостоятельно, используя функциональности разных сайтов, веб-сервисов или даже своего кошелька.
В этой статье за пример будут взяты несколько подозрительных токенов и их смарт-контракты для проверки. Проверка смарт-контрактов проектов по типу сайтов для стейкинга или высокодоходных рисковых пирамид – все это проверяется только через аудит и уже нужно отдельно знакомиться с документацией, которая должна предоставляться создателями таких контрактов.
Проверка токена через сканер и поиск смарт-контракта
В одну операцию можно объединить как поиск смарт-контракта подозрительного токена, который поступил вам на баланс, так и сразу проверку его на подозрительность через сканер выбранной сети. Это актуально как раз в том случае, когда криптовалюта уже поступила на ваш баланс и вы ищете информацию о ее происхождении.
Откройте сканер соответствующей сети, в которой находится монета. Введите адрес своего кошелька и выполните поиск.![]()
Разверните список «Token» и в нем выберите ту самую подозрительную монету.![]()
Если она была разослана на множество кошельков за короткий срок, то рядом будет надпись «Spam». Это уже свидетельствует о том, что смарт-контракт этого токена может быть ненадежным и потенциально опасным. Для «Unsafe» тоже характерны подобные подозрения, поскольку сканер считает монету небезопасной по ряду причин.![]()
После перехода на страницу одной из подозрительных монет вы тоже получите соответствующее уведомление о том, что нужно быть осторожнее.![]()
Если нужно проверить ее смарт-контракт самостоятельно, скопируйте его для этого из поля справа.![]()
Если же вы только узнали о монете, где-то прочитали новости о ее выходе и скором росте, перешли на свап-обменник и выбрали для покупки, но получили уведомление о подозрении, можете прямо там скопировать адрес смарт-контракта. Большинство таких обменников по типу UniSwap, Pancake и других всегда выводят смарт-контракты монет и предлагают их скопировать для дальнейшего изучения.
Сканирование через Token Sniffer
Самым информативным и удобным в использовании сайтом для автоматического аудита смарт-контрактов можно считать Token Sniffer. Он предоставляет наибольшее количество полезной информации и даже может определять некоторый встроенный вредоносный код. Единственным его минусом можно считать то, что анализатор поддерживает исключительно Ethereum и BSC-сеть. Пока что с другими сетями взаимодействие невозможно, но, вполне вероятно, что расширение функциональности в будущем все же произойдет.
Начать взаимодействие с Token Sniffer, конечно, стоит со ввода адреса контракта в соответствующее поле. После этого подтвердите начало анализа.![]()
Процесс займет где-то около минуты, после чего можно приступить к ознакомлению с результатами. В первую очередь вы видите связанные со смарт-контрактом ссылки, графики, где можно отследить его цену, время создания и ссылку на сам адрес создателя.![]()
Далее обратите внимание на оценку. Если она высокая, то с большой долей вероятности смарт-контракт имеет вшитый вредоносный код, при помощи которого и можно своровать деньги.![]()
Ниже показана аналитика по тому, где торгуется токен. Если его нигде нельзя продать, анализатор посчитает эту часть аудита непройденной и уже вызывающей подозрения.![]()
Далее идет блок «Contract Analysis». Здесь вы видите, прошел ли источник контакта верификацию, может ли создатель вносить изменения в этот контракт и имеет ли какие-либо другие специальные преимущества.![]()
Ниже можно получить информацию о владельцах токена. Вы будете уведомлены, какой его текущий саплай, сколько было сожжено монет, какое их количество находится на кошельке у создателя и у других владельцев данной криптовалюты.![]()
Завершающий анализ связан с ликвидностью. Оценивается несколько обменников и доступная на них ликвидность. Чем она ниже, тем меньше оборота монеты происходит в целом, значит, не всегда получится продать ее по нормальной цене, а также есть риски резких скачков этой цены.![]()
В самом конце страницы будет информация о том, есть ли похожие с этим контракты. По большей части это актуально для самых дешевых копий известных монет, которые точно нацелены на скам. Сейчас таких уже не очень много, поскольку создание смарт-контракта уже не является чем-то трудным и затратным по ресурсам.![]()
Как видно, при помощи Token Sniffer можно получить комплексные сведения о монете и решить, насколько безопасно ею пользоваться. Инструмент отлично вычисляет скам-проекты, а также позволяет в один клик оценить экономику монеты без необходимости вручную проверять каждый показатель и через сканер отслеживать холдеров.
Сканирование через Bscheck
Еще один довольно популярный сайт для автоматического аудита токенов называется Bscheck. Он поддерживает большее количество сетей, но предоставляет немного меньше информации о токене, поэтому подойдет не всем пользователям. Давайте более детально остановимся на том, как работать с данным анализатором.
На главной странице введите адрес контракта и нажмите кнопку для проверки.![]()
Если сеть токена отличается от BSC, то предварительно выберите нужную в списке сверху.![]()
Через несколько секунд после начала обработки уже появится информация о рейтинге токена и оценке от аудита. Есть несколько разных состояний монеты, начиная от полностью безопасной и заканчивая стопроцентным скамом. Рейтинг зависит от того, насколько хорошо токен пройдет аудит от Bscheck.![]()
В первой плитке ниже вы видите общее количество токенов, сколько их было сожжено и текущее количество владельцев.![]()
В списке «Top Holders Info» можно получить информацию о том, какие кошельки имеют больше всего токенов на балансе. Иногда это позволяет вычислить владельца и понять, что именно он владеет почти всеми активами.![]()
Ниже идет общая информация о ликвидности, о том, где и когда происходило сжигание, торгуется ли монета и в каких парах. Ликвидность у скам-монет обычно полностью отсутствует.![]()
Получилось совсем немного информации по монете, но этого уже достаточно, чтобы примерно понимать, насколько можно доверять проекту. Вместе с этим отмечу, что иногда у Bscheck наблюдаются проблемы с откликом по некоторым сетям, в частности, сайт не может получить сведения со сканеров, из-за чего не удается завершить аудит. Если у вас тоже возникла такая ситуация, подождите 1-2 часа, после чего снова попробуйте запустить проверку.
Дополнительные идентификаторы скам-токенов
Вы всегда можете использовать и другие методы обнаружения потенциально опасных монет. Во-первых, обращайте внимание на их названия и количество поступлений на кошелек. Скорее всего, если вы получили 50 000 неизвестных монет, у которых даже не отображается цена, – это стандартный скам, который приходит на большинство криптовалютных кошельков. Если вы применяете социальные сети по криптовалюте или дашборды для отслеживания активности своего кошелька, можете использовать информацию из них, чтобы тоже быть в курсе транзакций с подозрительными монетами.
Так, помощь в обнаружении скам-транзакций осуществляет нашумевшая социальная сеть в сфере криптовалют под названием DeBank. Если вы пользуетесь ею или хотите зарегистрироваться, нажмите по номеру своего кошелька после авторизации для перехода на страницу профиля.![]()
Перейдите на вкладку «Transactions».![]()
Все подозрительные переводы на ваш кошелек будут скрыты серым цветом, а также иметь рядом подпись «Scam Tx». В большинстве случаев это как раз значит, что не нужно ничего делать с этими монетами, никуда их переводить или пытаться обменять.![]()
Точно так же можно получить немного сведений в разных криптовалютных кошельках. На следующем скриншоте вы как раз видите то, что есть неизвестные токены со странными названиями, без цены и ссылками на разные сайты, якобы для получения награды. Не переходите по таким ссылкам и не подключайте свои кошельки. Это банальные уловки на то, чтобы заполучить все ваши средства.![]()
Надеюсь, предоставленная информация помогла вам разобраться в том, как обнаруживать подозрительные монеты и не попадаться на уловки мошенников. Всегда внимательно следите за тем, что вы хотите обменять и за что вам поступили на баланс какие-то токены.
Как читать смарт-контракты
Код смарт-контракта после заливки в блокчейн дополнительно заливается сверху слоем эпоксидки, чтобы предотвратить любое случайное или намеренное изменение кода.
Функции смарт-контракта могут быть вызваны извне (с кошелька пользователя или из другого контракта) и делятся на две большие группы:
-
Не меняющие состояние персистент данных (только чтение из блокчейна) Меняющие состояние персистент данных
Персистент данных — это данные, сохраняемые в блокчейне
Интерфейс ERC-20
Интерфейс – это описание внешних воздействий каким-либо объектом и однозначных реакций объекта на это управление. Если смарт-контракт реализует интерфейс ERC-20, то мы можем его использовать везде, где возможно использование токена.
На текущий момент уже создано и каждый день создается множество токенов. Но с любым токеном мы можем взаимодействовать единообразно – пересылать, свапать, апрувить и т.д. Токен должен соотвествовать интерфейсу ERC 20/BEP 20. Реализовывать означает, что смарт контракт токена должен содержать вполне определенный набор функций и параметров с однозначно прописанной реакцией на вызов каждой из этих функций.
Основные функции, которые должны быть прописаны в смарт-контракте:
-
totalSupply() — возвращает эмиссию токена balanceOf(account) — возвращает баланс адреса transfer(recipient, amount) — передает amount токенов от msg.sender к recipient transferFrom(sender, recipient, amount) — передает amount токенов от sender к recipient allowance(owner, spender) — возвращает количество токенов, которые разрешены списать approve(spender, amount) — выдает разрешение spender списать amount токенов с баланса msg.sender transfer(from, to, value) Approval(owner, spender, value)
Также при вызове каждой функции присутствуют еще несколько параметров. Основные из них:
-
msg.sender – адрес с которого вызвана транзакция msg.value – количество токенов пересланных с транзакцией
Виды скама
-
Контракт, в коде которого прописана невозможность продажи токенов. Купить вам позволяют, а вот продать – нет.
Либо вам не дают возможности подтвердить своп (код помещается в функцию approve), либо не дают возможности передать ваши токены (код помещается в функцию transferFrom).
Выглядит код так:
Т.е. подтвердить транзакцию может только владелец контракта.
-
Дополнительный функционал контракта, который мешает нам совершить транзакцию
Смотрим на конструктор (функция, которая вызывается один раз при создании контракта ) – там обычно идет инициализация всех переменных, по названию которых можно понять что включено в контракт. Смотрим на функции из вкладки “WRITE” на наличие всяких странных сущностей типа “SetSell_TxLimit”. В функциях transfer/transferFrom также будет присутствовать код проверки на всякие дополнительные условия, при нарушении которых нам не дадут совершить продажу.
Использование BSCscan для чтения контрактов
Для начала вам нужно найти адрес токена. Как это сделать:
-
Переходите на сайт СМС и через поиск находите нужный вам токен. Копируете адрес токена (где найти показано на скриншоте):
Переходим к анализу токена:
-
Переходите на сайты по типу BSCSCan, EtherScan (в зависимости от сети, на которой развернут токен) и вставляете в поиск адрес токена. Листаете чуть вниз:
-
Таблица балансов всех адресов держателей монеты отображается во вкладке “HOLDERS”
-
Во вкладке “CONTRACT” три панели:
-
READ – перечислены все функции и переменные, которые мы можем читать из контракта не тратя газ и не совершая транзакций. WRITE – перечислены все функции, которые инициируются транзакциями. Именно тут будет минт, изменение тарифов, включение и выключение возможности продажи и т.д. CODE – исходный код контракта
Здесь вы можете просмотреть весь код смарт-контракта.
Ищите функции, в которых упоминаются слова «transfer», «burn», «mint» или «create». Функции с такими названиями, в основном, описывают процесс оборота токенов. В них же злоумышленники могут спрятать операции по бесконечному выпуску токенов. Если создатели проекта утверждают, что всего будет выпущено лишь 21 млн монет, а в коде есть функция с названием «mint», «create» или «issue» и большим объемом строк внутри функции — есть смысл задуматься.
Найдите комментарии к функциям. Хорошо, если они есть, хуже, если нет. Как правило, добросовестные разработчики комментируют чуть ли не каждую строчку кода и описывают действия прямо в смарт-контракте через символ слэш