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

Токен CRC1155 похож на токен CRC721, однако, он имеет большее количеств функций в том числе для экономии газа. В отличие от CRC721, CRC1155 позволяет создавать много копий различных NFT в одной транзакции. Это называется периодической чеканкой (batch minting) и позволяет эффективно расходовать газ. CRC1155 также известен как мульти токен (Multi token Standard), поскольку он может взаимодействовать одновременно с взаимозаменяемыми и не взаимозаменяемыми токенами.

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

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

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

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

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

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

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

contract CRC1155 is ERC1155

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

constructor(string memory _globalURI) ERC1155(_globalURI)

{}

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

function mintToken( address _to, uint256[] calldata _tokenIds, uint256[] calldata _amounts) 

external {

_mintBatch(_to, _tokenIds, _amounts, "0x00");

}

Он также содержит две функции, которые возвращают имя и символ CRC1155 NFT:

function name() public pure returns (string memory) {

return "Conflux 1155";
}
function symbol() public pure returns (string memory) {
return "CFX1155";
}

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

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

import { abi, bytecode } from '../artifacts/contracts/CRC1155.sol/CRC1155.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(), [0, 1, 2, 3, 4], [5, 4, 3, 2, 1]) .sendTransaction({ from: acct.toString() })
npx hardhat run scripts/deploy.ts

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

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

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

1 Like