FA1.2 LIGO
Работа со стандартом FA1.2 используя LIGO и Taquito
Данный разд ел направлен на то, чтобы показать каким образом можно создавать (развертывать) и инициировать контракт FA1.2, написанным на PascaLIGO, используя Taquitto toolkit.
Taquito является библиотекой TypeScript, которая позволяет более легко взаимодействовать с блокчейном Tezos, а также со смарт-контрактами. Разработчики могут вызывать точки входа контрактов, как если бы они просто были объектами JavaScript или TypeScrypt.
Мы создадим смарт-контракт FA1.2 в тестовой сети Tezos.
Когда мы создаем контракт, то нам нужно инициировать хранилище самого контракта с начальными значениями. Два основных параметра параметра - это количество токенов, а также адрес на котором будет хранится эмиссия.
До того как мы создадим контракт, нам понадобится адрес Tezos, а также немного токенов Tezos для "оплаты горючего", которая взимается за вызов смарт-контракта. Стоимость "горючего" оплачивается исключительно через токен Tezos(XTZ), но никак не с помощью созданных далее через контракт токенов.
Чтобы получить новый адрес в тестовой сети, посетите сайт Вилки(eng. Faucet): faucet.tzalpha.net и нажмите на кнопку "Get ꜩ".
Сохраните файл вилки на ваш компьютер и назовите его
faucet.json
. Открыв сам файл, вы сможете там найти значение свойстваpkh
, которое имеет адрес контракта Tezos, начинающийся со значения tz1
. Скопируйте этот адрес и сохраните, так как он вам понадобится в следующем шаге.Вы можете использовать Taquito для создания контракта, но для краткости этого материала, мы используем LIGO web-ide для разворачивания нового смарт-контракта сети Tezos.
Для развертывания вашего актива контракта:
- 2.Выберите действие «Deploy/Развертывание» в раскрывающемся списке «Configure/Настройки».
- 3.В поле ‘Storage‘ вы должны увидеть изначальные данные по этому смарт контракту. Измените следующие два значения:
- Замените
YOUR_TZ_ADDRESS
на адрес, который вы скопировали ранее с файла вилки .json. - Замените оба значения
TOKENS
на то количество токенов, которое вы хотите выпустить.
- 4.Когда вы выберете “Deploy/Развертывание‘, далее нажмите на ‘Run/Запустить’. После этого процесс развёртывания контракта должен начаться (обычно занимает несколько минут).
- 5.Когда развертывание контракта успешно завершилось, скопируйте адрес только что созданного контракта. (По желанию вы можете просмотреть ваш контракт через любой блокчейн-эксплорер)
Теперь только что созданный контракт уже имеет эмитированные токены на вашем адресе Tezos используя ваш ключ вилки.
Давайте используем Taquito для трансфера токенов!
Мы предполагаем, что у вас есть новый TypeScript или JavaScript проект, и вы используетеnpm.
Установите Taquito в ваш новый проект :
npm install @taquito/taquito
Создайте новый файл для нашего примера, который называется, например
fa_taquito.ts
Импортируйте основной пакет Taquito в ваш проект.
const { Tezos } = require('@taquito/taquito')
Следующий код загружает и применяет приватный ключ из файла
faucet.json
, который мы создали ранее. Код использует подпись в памяти Taquito, которая удобна для разработки и тестирования. Однако ее использование в продакшне не рекомендуется . Для продакшена используйте настоящий кошелёк или инструмент удаленной подписи с поддержкой HSM.const fs = require("fs");
const { email, password, mnemonic, secret } = JSON.parse(fs.readFileSync('./faucet.json').toString())
Tezos.setProvider({ rpc: 'https://api.tez.ie/rpc/carthagenet' })
Tezos.importKey(email, password, mnemonic.join(" "), secret)
Далее мы должны сделать запрос по поводу контракта, который мы создали ранее, к блокчейн сети.
await const contract = await Tezos.contract.at('KT1...your_address_from_earlier')
Когда этот код выполняется, Taquito извлекает код контракта из сети и динамически генерирует методы для вашего объекта контракта, которые соответствуют точкам входа FA1.2. Эти методы - ‘абстракция’, которая предоставляется Taquito для более интуитивного взаимодействия со смарт контрактами с точки зрения языка JavaScript.
Теперь мы можем выполнить трансфер наших токенов между нашим адресом и другим адресом.
Перевод
2
токенов является таким же простым, как и вызов функции contract.methods.transfer()
. В первую очередь давайте настроим переменные src
и dst
.const pkhSrc = await Tezos.signer.publicKeyHash())
const pkhDst = "tz1eY5Aqa1kXDFoiebL28emyXFoneAoVg1zh"
Теперь нам нужно сделать вызов
transfer
метода в нашем контракте:const op = await contract.methods.transfer(pkhSrc, pkhDst, "2").send()
await op.confirmation()
const storage = await contract.storage()
Теперь мы можем запросить баланс для каждого адреса следующим образом:
console.log((await storage.ledger.get(pkhSrc)).balance)
console.log((await storage.ledger.get(pkhDst)).balance)
Теперь вы обладаете базовыми знаниями по взаимодействию со стандартом контракта FA1.2 на блокчейне Tezos с использованием Taquito. Мы использовали LIGO в этом уроке, но Taquito работает с любым смарт-контрактом Tezos.