Развертывание CRC721 токена в Conflux

Создание токена CRC721 в сети Conflux в значительной степени похоже на развертывание любого смарт-контракта в любом другом блокчейне. Однако при взаимодействии с блокчейном Conflux есть некоторые особенности, поскольку его rpc методы немного отличаются от обычных методов Eth JSON-RPC. Сеть Conflux располагает множеством инструментов, разработанных для упрощения взаимодействия с блокчейном. Например таких инструментов как:

В данной инструкции мы используем Hardhat и js-conflux-sdk в тестовой сети Conflux для написания, развертывания и взаимодействия со смарт-контрактом, совместимым с CRC721.

Для начала нам понадобятся:

  • Кошелек Conflux. Вы можете скачать его здесь. Для получения токенов CFX в тестовой сети Conflux есть кран.
  • Шаблон смарт-контракта. В качестве шаблона можете скачать этот репозиторий. Так же аналогичную структуру папок можно создать, запустив npx hardhat init в пустом каталоге, выбрав расширенный параметр Typechain .

Обратите внимание, что hardhat создаст в каталоге некоторые дополнительные файлы и модули, например, hardhat.config.ts и другие, которые не задействованы в этой инструкции, вы можете просто игнорировать их.

Давайте приступим!

Во-первых, вам необходимо понимание смарт-контракта на высоком уровне. Для упрощения задачи мы использовали стандарт ERC721 от Openzeppelin, мы создаем новый контракт под названием CRC721, который напрямую наследует готовый контракт Openzeppelin ERC721.

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract CRC721 is ERC721

Теперь мы можем описывать дополнительные функции для нашего NFT, не беспокоясь об основных функциях. В контракте есть конструктор, который задает имя и символ NFT, а также задает URI токена.

constructor(string memory _globalURI) ERC721("Conflux Token", "CFXT") {

globalURI = _globalURI;
}

И наконец данная функция позволяет пользователю бесплатно выпустить NFT на заданный адрес

function mintToken(address _to) external {

_mint(_to, tokenId);
tokenId++;
}

Теперь давайте углубимся в сценарий развертывания и взаимодействия с контрактом.

При развертывании контракта с NFT токеном, для создания самого контракта и сетевых объектов мы будем использовать js-conflux-sdk вместо ethersjs . Поскольку мы пишем скрипты развертывания на typescript, нам необходимо импортировать все необходимые модули, включая abi, байт-код нашего скомпилированного контракта CRC721 и сам модуль Conflux.

import { abi, bytecode } from '../artifacts/contracts/CRC721.sol/CRC721.json'

import { Conflux } from 'js-conflux-sdk'

abi и байт-код контракта автоматически генерируются всякий раз, когда вы запускаете скрипт hardhat или компилируете контракт, они сохраняются в каталоге artifacts.

Чтобы взаимодействовать с Conflux, вам необходимо инициализировать экземпляр (инстанс) сети с помощью Conflux sdk. В этом примере мы инициализируем экземпляр testnet.

const testnet = 'https://test.confluxrpc.com'

const cfx = new Conflux({
url: testnet,
networkId: 1,
logger: console,
})

Теперь мы можем использовать cfx для создания нового контракта и отправки транзакции развертывания.

const contract = cfx.Contract({ abi, bytecode })

//deploy contract
const txReceipt = await contract.constructor(globalURI).sendTransaction({ from: acct }).executed()

Из квитанции о транзакции мы можем получить адрес развернутого нами контракта для дальнейшего взаимодействовия с ним.

//get deployed contract instance

const nftContract = cfx.Contract({abi,address:txReceipt.contractCreated })
//call the mint function
const tx = await nftContract.mintToken(acct.toString()).sendTransaction({ from: acct.toString() })

Далее выполняем скрипт:

npx hardhat run scripts/deploy.ts

Поздравляем, вы успешно развернули токен CRC721 в сети Conflux testnet с использованием hardhat и js-conflux-sdk.

Чтобы узнать больше о методах js-conflux-sdk, рекомендуем ознакомиться с документацией на github.

Образец контракта и токена развернутого по настоящей инструкции можете увидеть здесь: https://testnet.confluxscan.io/address/cfxtest:acd7jnutafn9nv53gvh5cdk9yayct94yzjrcpjvwgk

Оригинал инструкции: https://medium.com/conflux-network/deploying-a-crc721-token-on-conflux-f0f3eaf03f52

2 Likes