TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.47K subscribers
Post #332 168
Создание soulbound NFT. Часть 1

Как я понял, единого стандарта ERC для подобных токенов пока нет. Поэтому я взял пример создание токена из этого репозитария на Github. Вы можете скачать его к себе в папку, выполнив команду в консоли:

git clone https://github.com/dappuniversity/Soul-Bound-token

Мне он понравился большим количеством проверок и достойной реализацией. Поэтому давайте рассмотрим его подробнее.

Библиотека Counters

Она создает счетчики, которые можно уменьшать, увеличивать или обнулять. Используется для отслеживания количества элементов в mapping, ids в ERC721 или подсчете id запросов.

Uint value специально размещен в struct, так как не должен быть доступен сторонним пользователям.

Библиотека Strings

Представлены три функции для перевода: из uint в string, из uint в hash, из uint в hash с фиксированной длинной.

Абстрактный контракт Context

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

Библиотеке Address

Возвращает true, если аккаунт, куда мы пересылаем токены является контрактом. Однако здесь стоит пройтись по функциям внимательнее.

Функция isContract() поверяет является ли аккаунт смарт контрактом с помощью знакомой нам функции "account.code.length > 0". Т.е. если возвращается true, то мы имеем дело с контрактом, если false - с аккаунтом.

Однако, есть исключения. Эта функция может вернуть false для следующих типов адресов:

- учетные записи, принадлежащие внешним пользователям, EOA;
- контракт в конструкторе;
- адрес, где будет создаваться контракт;
- адрес, где был создан контракт ранее, то теперь уничтожен;

Также не следует полагаться на эту функцию для защиты от атак flash loan.

Функция sendValue() призвана заместить внутреннюю функцию Solidity transfer(), где предполагается лимит газа и откат из-за потенциальных ошибок.

Тут нужно быть внимательным и перед (bool, success) создать свою защиту от reentrancy!

Функция functionCall() - более защищенная версия низкоуровневой функции call в Solidity. Дальнейшие функции, которая она вызывает просто дополняются проверками на ошибки при разных обстоятельствах.

#soulbound #nft #token
  • 👍 4
More from @solidityset
  1. Oct 15, 2026Немного новостей про Core Solidity Команда Solidity опубликовала обновление о разработке C…
  2. Oct 8, 2026Промо видео для SaaS и других ваших проектов Хочу поделить с вами одним из своих открытий…
  3. Oct 8, 2026video post
  4. Oct 2, 2026Вторая сложность — как доказать, что установилось именно опубликованное. В первом варианте…
  5. Oct 2, 2026Задача с полуоткрытым кодом На днях, в процессе создания одного приложения, столкнулся с и…
  6. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →