Запускаем код!
Третья часть этой серии:
Если у вас есть среда, настроенная в соответствии с частью 2 этой серии, теперь пришло время начать программировать на Rust.
Выбранный мной проект требует создания доступных невзаимозаменяемых токенов.
После недельного поиска блокчейна, где я могу создавать смарт-контракты на Rust, я наконец остановился на протоколе NEAR, так как другие блокчейны либо не поддерживают Rust (Cardano), либо метаданные NFT слишком сложны для настройки (Solana), вы можете делать что угодно, но я не могу понять, как сделать одну простую вещь (Substrate), или NFT слишком дороги (Ethereum).
Когда я искал это доступное решение NFT, меня удивило то, что вы не можете просто создавать NFT, сначала вам нужно создать свою собственную «машину для чеканки NFT», смарт-контракт. Так что это намного сложнее, чем я ожидал.
Если вы хотите научиться создавать смарт-контракты в Rust для чеканки невзаимозаменяемых токенов, вот как это сделать:
Предварительные требования
Для тестирования нам нужен Node.js, мы можем установить его в тестовой среде с помощью:
login YOURUSERACCOUNTID
sudo curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash
sudo apt-get install -y nodejs
Нам нужно проверить, что у нас есть версия Node.js 16 или выше.
node -v
Нам также нужна пряжа для построения смарт-контракта.
sudo apt-get update && sudo apt-get install yarn curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null echo “deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main” | sudo tee /etc/apt/sources.list.d/yarn.list
Целью является Webassembly, поэтому нам нужно установить ее для Rust.
rustup target add wasm32-unknown-unknown
Далее создайте тестовый кошелек в NEAR Protocol, выбрав имя для своей учетной записи; YOURNEARPROTOCACCOUNTID.testnet
Установите NEAR-CLI в тестовой среде
sudo npm install -g [email protected]
sudo npm install -g near-cli
https://docs.near.org/tools/near-cli#setupwe can login to near
Настройте переменные среды
Добавьте в .bashrc следующее:
export NEARID=YOURNEARPROTOCOLACCOUNTID.testnet
export NFT_CONTRACT_ID="YOURNEARPROTOCOLACCOUNTID.testnet"
Примечание. Вам придется сделать это несколько раз. При запуске тестов вы обнаружите, что смарт-контракты сохраняют свое состояние в блокчейне. Полной противоположностью идемпотента можно назвать то, что вы не можете запускать смарт-контракт в целях тестирования более одного раза, игнорируя предыдущие запуски. Поэтому вам может понадобиться тестовая учетная запись для каждого набора тестов.
выйдите из системы и войдите в свою компьютерную сессию
Войдите в тестовую сеть протокола NEAR
Войдите в ближайшую тестовую сеть из тестовой среды, используя:
near login
Скопируйте и вставьте сгенерированный URL-адрес в браузер. Вам нужно добавить «s» и IP компьютера, на котором находится браузер:
https://wallet.testnet.near.org/login/?referrer=NEAR+CLI&public_key=ed25519THISISSTRINGGENERATEDWHENYOURUNNEARLOGINsuccess_url=https%3A%2F%2FIPOFTHEBROWSERWHEREYOUVISITTHEURL%3A5000
Подтвердите вход из браузера.
Закодируйте наш смарт-контракт
Далее нам нужно скачать код учебника NFT с помощью
git clone https://github.com/near-examples/nft-tutorial/
И переключитесь на ветку, используемую в туториале.
cd ~/nft-tutorial
sudo git switch 1.skeleton git checkout 1.skeleton
Внесите изменения и обновления в соответствии со следующим руководством, добавляя любые пользовательские изменения для своих целей:
Удалите любые предупреждения компиляции, которые вы, вероятно, найдете.
Создайте смарт-контракт
Когда все будет готово из каталога, в котором запущен cargo.toml:
yarn build
Разверните смарт-контракт
В каталоге, где вы видите, есть подкаталог «out», в котором выполняется следующая команда:
near deploy --wasmFile out/main.wasm --accountId $NFT_CONTRACT_ID
Убедитесь, что правильный идентификатор учетной записи напечатан в терминале
Инициализировать контракт
near call $NFT_CONTRACT_ID new_default_meta '{"owner_id": "'$NFT_CONTRACT_ID'"}' --accountId $NFT_CONTRACT_ID
Выпустить невзаимозаменяемый токен
near call $NFT_CONTRACT_ID nft_mint '{"token_id": "token-1", "metadata": {"title": "My Non Fungible Team Token", "description": "The Team Most Certainly Goes :)", "media": "https://bafybeiftczwrtyr3k7a2k4vutd3amkwsmaqyhrdzlhvpt33dyjivufqusq.ipfs.dweb.link/goteam-gif.gif"}, "receiver_id": "'$NFT_CONTRACT_ID'"}' --accountId $NFT_CONTRACT_ID --amount 0.1
Просмотр невзаимозаменяемого токена
near view $NFT_CONTRACT_ID nft_token '{"token_id": "token-1"}'
near view $NFT_CONTRACT_ID nft_metadata
Успех! Смарт-контракт, написанный на Rust, который можно использовать для создания доступных невзаимозаменяемых токенов.