Создание токена 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