简介
@0x/contracts-erc1155 是一个提供 ERC1155 智能合约的 npm 包,由 0x Labs 开发并维护,是 0x 协议家族中的一员。此 npm 包可以帮助使用者快速创建符合 ERC1155 标准的智能合约,且具有高度可定制性。本篇文章将为大家详细介绍此 npm 包的使用方法。
前提条件
使用 @0x/contracts-erc1155 npm 包需要先安装 Node.js 并全局安装 truffle 和 ganache-cli。
npm install -g truffle ganache-cli
具体安装过程可参考官方文档:https://nodejs.org/zh-cn/download/
安装
使用 npm 安装 @0x/contracts-erc1155:
npm install @0x/contracts-erc1155
使用方式
编写合约代码
在项目文件夹中新建一个 contracts 文件夹,用于存放智能合约代码。在该文件夹下新建一个名为 MyERC1155.sol 的文件,并写入以下代码:
-- -------------------- ---- ------- ------ -------- ------- ------ ------------------------------------------------------------- -------- --------- -- ------- - ------------- ------ - ----------------------------------------------------------- - -------- ------------ ---- ------- --------- ------- ------- ------ - ---------- --------- ------- ---- - -
- 首先,我们继承了 @0x/contracts-erc1155 中的 ERC1155 合约,使我们的合约能够符合 ERC1155 标准;
- 其次,我们添加了一个名为 mint 的函数,用于在 MyERC1155.sol 合约中铸造新的代币;
- 最后,我们在构造函数中通过 _registerInterface 函数注册了 "MINT_WITH_ADDRESS" 接口,使得我们可以通过 @0x/contracts-erc1155 npm 包的的一些其他功能,比如使用 Exchange 中的批量转移函数。
创建 truffle 项目
接下来,在项目文件夹中创建 truffle 项目:
truffle init
mudules.js 文件
在项目中添加 modules.js 文件,内容如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---------------- - -------------------------------------- ----- ----------------- - ------------------------------ ----- -------- - --------------------- -------------- - - -------------------------- -------------------- ------------------- --------- - ------------ - ----- ------------ ----- ----- ----------- ---- -- -------- - --------- -------- -- - ------ --- ----------------- --------- --------------------------------------------------- -- -- ----------- -- -- -------- - --------- -------- -- - ------ --- ----------------- --------- --------------------------------------------------- -- -- ----------- -- -- -- --
modules.js 文件指定了 truffle 编译合约时的输出目录,以及各个网络的连接配置。我们在编译合约时需要连接到本地的 Ganache 以及 Rinkeby 和主网 Infura 节点。
其中 MNEMONIC 和 INFURA_PROJECT_ID 参数需要与真实情况相符。MNEMONIC 是连接以太坊网络所需的助记词,可以从 Metamask 或其他以太坊钱包中获得。INFURA_PROJECT_ID 是 Infura 节点在连接时所需的项目 ID,需要在 https://infura.io/ 上创建并获取。
配置 truffle-config.js 文件
在 truffle 项目的根目录下,创建 truffle-config.js 文件,并在其中添加以下代码:
-- -------------------- ---- ------- ----- ---------------- - -------------------------------------- ----- -- - ------------------------ ----- ----------------- - ------------------------------ ----- -------- - --------------------- -------------- - - -------- - --------------------------- -- --------- - -------- - --------- -- -- - ------ --- ----------------- --- --------------------------------------------------- -- -- ----------- -- --------- ---- -- -------- - --------- -- -- - ------ --- ----------------- --- --------------------------------------------------- -- -- ----------- -- --------- ----- - -- --------- - ---------- ----------------------------- -- ---------- - ----- - -------- --------- ---------- - -------- ----- ----- ---- -- -- -- --
truffle-config.js 文件与 modules.js 文件类似,也需要指定连接到各个链的信息。但这里我们还需要指定编译器版本以及安装到 verify 合约的插件。
其中,ETHEREUM_PRIVATE_KEY 和 INFURA_PROJECT_ID 与 MNEMONIC 参数同理,需要替换为真实值。ETHERSCAN_API_KEY 是调用 Etherscan API(验证合约)所需的 API key,在 https://etherscan.io/ 上申请并获取。
编译合约
truffle compile
以上命令将会在 build/contracts 文件夹中生成合约的 ABI 与 bytecode。
部署合约
在项目根目录下创建一个名为 deploy.js 的文件,并复制以下代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---------------- - -------------------------------------- ----- ---- - ---------------- ----- -- - -------------- ----- ----------------- - ------------------------------ ----- -------- - --------------------- ----- ---- - --- ----- --- -------------------------- ---------------------------------------------------- -- ----- --------------------- - ---------- ---------- -------- ------------ ---------------- -- ----- ----------------- - --------------------------------------------------- ------ -- -- - ----- -------- - ----- ----------------------- ---------------------- -------------- ----- --------------- - --- ----------------------------------------- ----- ----------- - ------------------------ ----- --------------------------- --- ----------- ------- ----- ------------ ---- -------- -- ------- --- ----- --------- ---- -- --------------- -- - ---------------------- -------- -------- -- - ----------------------------- -- -------------- -- - --------------------- --- -----
以上代码定义了一个可以部署 MyERC1155 合约的脚本。在执行脚本前,需要先进行以下配置:
- 将 INFURA_PROJECT_ID 和 MNEMONIC 替换为真实值。
运行部署脚本:
node deploy.js
使用合约
在项目根目录下新建一个名为 useMyERC1155.js 的文件,在其中编写以下代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---------------- - -------------------------------------- ----- ---- - ---------------- ----- -- - -------------- ----- ----------------- - ------------------------------ ----- -------- - --------------------- ----- ---- - --- ----- --- -------------------------- ---------------------------------------------------- -- ----- --------------------- - ---------- ---------- -------- ------------ ---------------- -- ----- ----------------- - --------------------------------------------------- ------ -- -- - ----- -------- - ----- ----------------------- ---------------------- -------------- ----- --------- - --- ---------------------------------------- ---------------------------------------------- ----- ------- - ------------ ----- ------- - -- ----- ---------- - --- ----- ------------- - ----- ------------------------------------ ---------------- ------------------- -------- ------------------- ----- ------------------------------- -------- ----------------------- ---------- ----- ------------ - ----- ------------------------------------ ---------------- ------------------ -------- ------------------ -----
以上代码演示了如何从部署合约的地址中获取 MyERC1155 合约实例,并通过 mint 函数铸造代币。在执行脚本前需要先进行以下配置:
- 将 INFURA_PROJECT_ID 和 MNEMONIC 替换为真实值;
- 将 web3.eth.Contract 的第二个参数替换为部署的合约地址。
执行脚本:
node useMyERC1155.js
此时,控制台应该会输出两次代币数量,第一次为铸造代币前的数量,第二次为铸造代币后的数量。
总结
通过本文的介绍,我们了解了如何使用 npm 包 @0x/contracts-erc1155 在 truffle 中创建符合 ERC1155 标准的智能合约,并且介绍了如何在 truffle 中部署合约、获得合约实例以及使用合约。希望大家能够在自己的项目中体验 @0x/contracts-erc1155 包所带来的方便和便利。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedac7db5cbfe1ea0610a3f