Запускаем код!

Третья часть этой серии:



Если у вас есть среда, настроенная в соответствии с частью 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, который можно использовать для создания доступных невзаимозаменяемых токенов.

Далее в этой серии: Как изменить Boringtun-cli для использования невзаимозаменяемого токена вместо файла конфигурации. Следите за обновлениями!