Создание 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
Post #332
168
- 👍 4