前言
在以太坊的智能合约开发中,常常需要与社区中其他开发者进行技术交流和讨论。这时候,一个好的讨论工具对于项目的推进和开发质量都有着重要的意义。NPM 提供了许多开源的包,可以方便地在项目中使用。其中,discuss-eth-contracts 就是一个用于以太坊智能合约开发中的讨论工具。
本文将会介绍 discuss-eth-contracts npm 包的用法和相关注意事项,以及如何使用该工具来加强项目中的讨论和交流。
安装
通过以下命令可以方便地安装 npm 包:
npm install discuss-eth-contracts
使用方法
初始化
在初始化 discuss-eth-contracts 实例之前,需要准备一个 Web3 对象,可以使用任何一种 Web3 的实现,如 ethers.js 或者 web3.js。下面以 ethers.js 为例来创建一个 Web3 对象:
const { ethers } = require("ethers"); const provider = new ethers.providers.JsonRpcProvider(); const network = await provider.getNetwork(); const signer = provider.getSigner(); const web3utils = ethers.utils;
初始化 discuss-eth-contracts 实例:
-- -------------------- ---- ------- ----- - ------------------- - - --------------------------------- ----- ------- - --- --------------------- ----- - --------- --------- -- ---- -------- ---------- ---------------- -- -------- ------- -- ------- ------- -- -------- ------- ------ ---------- ---------- -- ---- --------- -- ------------ --- -- --- -- --- ----- -------- ---------------- --- -- ------- -- --- ----- -------- ----------- --- -- ---------- ---- ------- --- -- ------ ---------- ---- ---
参数说明:
web3.provider
: Web3 Provider 对象,可以使用 ethers.js 或者 web3.js 中提供的任何 Provider。web3.networkId
: Ethereum 网络 ID。web3.signer
: Ethereum 账号签名器。web3.web3utils
: Web3 工具库,例如 ethers.js 中的 utils。contractAbi
: 合约的 ABI。contractAddress
: 合约地址。discussion
: 讨论标题名称。github
: Github 仓库名称,如OpenZeppelin/zeppelin-contracts
。
发起讨论
在实例初始化之后,可以通过 discuss.add()
方法来发起一个讨论。该方法有两个必选参数:标题和描述,以及一个可选参数,该参数的格式应该是符合 contractIndex:topicIndex
的字符串,用于指定要讨论的合约方法和讨论主题。
const title = "讨论标题"; const description = "讨论描述"; const txHash = await discuss.add(title, description);
在成功添加讨论之后,返回的是讨论在以太坊中产生的交易哈希值。
回复讨论
使用 discuss.reply()
方法可以回复讨论。该方法有三个必选参数:所回复讨论的 ID,回复的标题和回复的内容。
const parentId = 1; const replyTitle = "回复标题"; const replyDescription = "回复内容"; const txHash = await discuss.reply(parentId, replyTitle, replyDescription);
在成功添加回复之后,返回的是回复在以太坊中产生的交易哈希值。
注意事项
- 在使用 discuss-eth-contracts 进行讨论之前,需要先将目标合约进行部署并获取其 ABI 和合约地址。
- 交易的 gas 费用需要根据当前网络的情况进行调整。
- 推荐在讨论中使用 Markdown 语法进行格式化。
示例代码
下面是使用 discuss-eth-contracts 进行讨论和回复的完整示例代码:
-- -------------------- ---- ------- ----- - ------ - - ------------------ ----- -------- - --- ----------------------------------- ----- ------- - ----- ---------------------- ----- ------ - --------------------- ----- --------- - ------------- ----- - ------------------- - - --------------------------------- ----- ------- - --- --------------------- ----- - --------- --------- ---------- ---------------- ------- ------- ---------- ---------- -- ------------ --- ----- ---- ---------------- ---------------------------------------------- ----------- ----------- ------------ ------- ----------------- --- -- --- - --- ---------- ----- ----- ----- - --- ----- ---------- ------- ----- ----------- - ----- -- -- ---- ----- ---------- ------ ---- -- --- --- ----- ----- ----- ----- ------ - ----- ------------------ ------------- ---------------- ---------- ----- ------ ------------ -- ----- -- --- ---------- ----- ----- -------- - -- ----- ---------- - -- ---- ----- ----- ---------------- - -- ---- ---- ----- ----- ------ ----- ------ - ----- ----------------------- ----------- ------------------ ---------------- ----- -- ---------- ----- ------------ ------ ------------
代码中,contractAbi
和 contractAddress
为目标合约的 ABI 和地址。discussion
是讨论主题的名称,github
是讨论主题所对应的 Github 仓库名。在示例代码中,发起了一个讨论主题,并通过 parentId
指定了要回复的讨论主题的 ID。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005663d81e8991b448e2439