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. Скопируйте этот адрес и сохраните, так как он вам понадобится в следующем шаге.

Создание контракта FA1.2

Вы можете использовать Taquito для создания контракта, но для краткости этого материала, мы используем LIGO web-ide для разворачивания нового смарт-контракта сети Tezos.

  • Документация по созданию смарт-контрактов с помощью инструмента Taquito может быть найдена по этой ссылке.

  • LIGO Web ide использует Taquito, и вы можете найти его открытый код по следующей ссылке.

  • Пример использования стандарта смарт-контракта FA1.2( и даже больше!) используя Taquito может быть найден тут.

Для развертывания вашего актива контракта:

  1. Нажмите на ссылку LIGO, чтобы открыть полноценную имплементацию PascaLIGO со стандартом контракта FA1.2.

  2. Выберите действие «Deploy/Развертывание» в раскрывающемся списке «Configure/Настройки».

  3. В поле ‘Storage‘ вы должны увидеть изначальные данные по этому смарт контракту. Измените следующие два значения:

    • Замените YOUR_TZ_ADDRESS на адрес, который вы скопировали ранее с файла вилки .json.

    • Замените оба значения TOKENSна то количество токенов, которое вы хотите выпустить.

  4. Когда вы выберете “Deploy/Развертывание‘, далее нажмите на ‘Run/Запустить’. После этого процесс развёртывания контракта должен начаться (обычно занимает несколько минут).

  5. Когда развертывание контракта успешно завершилось, скопируйте адрес только что созданного контракта. (По желанию вы можете просмотреть ваш контракт через любой блокчейн-эксплорер)

Теперь только что созданный контракт уже имеет эмитированные токены на вашем адресе Tezos используя ваш ключ вилки.

Использование Taquito Для Перевода токенов Контракта

Давайте используем 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.

Материалы разработаны TQ Tezos переведены на русский язык Tezos Ukraine

Last updated