简介
@ferngully/daostack-arc.js 是一个基于 Ethers.js 的 DAOStack ARC (Alchemy of Regeneration and Creation) 合约的 JavaScript 包。它提供了一个方便的接口让你可以使用 JavaScript 与 DAOStack 智能合约进行交互。
安装
你可以通过 npm 包管理器来安装 @ferngully/daostack-arc.js,只需运行以下命令:
npm install @ferngully/daostack-arc.js
初始化
在使用任何功能之前,你需要先初始化该包。示例代码如下:
const { ethers } = require('ethers'); const arc = require('@ferngully/daostack-arc.js'); const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/your-infura-project-id'); const signer = new ethers.Wallet('your-wallet-private-key', provider); const daoFirestoreAddress = '0x1234567890abcdef1234567890abcdef12345678'; const dao = arc.Dao.fromFirestoreAddress(daoFirestoreAddress, signer);
在这个示例中,我们连接了 Infura 网络,并创建了一个用于访问该网络的签名用户。我们还使用了从 DAOStack UI 上获取的 Firestore 地址初始化了 DAOStack 实例。你需要提供真实的 Infura 项目 ID、私钥和 Firestore 地址。
签名交易
使用 DAOStack 合约需要通过签名交易进行。下面是一份签名 Eth 转账的示例代码:
-- -------------------- ---- ------- ----- - ------ - - ------------------ ----- --- - -------------------------------------- ----- -------- - --- ---------------------------------------------------------------------------------------- ----- ------ - --- ---------------------------------------- ---------- ----- ------------------- - --------------------------------------------- ----- --- - ------------------------------------------------- -------- ----- --------------- - - --- --------------------------------------------- ------ ---------------------------- -- ----- ----------------- - ----- ------------------------------------- ----- -------------------------
在这个示例中,我们使用了 Eth 以及 @ethersproject/bignumber 套件的常量对象,以将 1 ETH 转到目标地址。我们还将签名交易传递给 DAOStack 实例,以便它进行签名并发送交易。
创建治理提案
DAOStack 是一个用于管理 DAO 的框架,因此一个重要的功能就是支持创建提案。下面是一个创建修改 DAO 背景颜色的治理提案的示例代码:
-- -------------------- ---- ------- ----- - ------ - - ------------------ ----- --- - -------------------------------------- ----- -------- - --- ---------------------------------------------------------------------------------------- ----- ------ - --- ---------------------------------------- ---------- ----- ------------------- - --------------------------------------------- ----- --- - ------------------------------------------------- -------- ----- ------------ - - --------- ------------- ----- ------------- ---- --------------------------- ------ ------- ---------- --------------------------------------------------------------------- ------ -- ---------- ----------- -------------- --------------------------------- ------------------- ------ -- -- ------- ------------- ----- --------- - ------ ------- --- ---------- ------- ----- ----- -------- -------- -------- --- --- ---------- ----- -- ---------- -------- - - --- ------ ------ ----- ------ --- ---------- ------- -------- ---- -- - --- ----- ------ ---- ---- ------- ---------- ------ - - - -- ----- -------- - ----- ---------------------------------
在这个示例中,我们创建了一个包含以下属性的提案对象:
actionId
是执行该提案的合约方法 ID。data
是调用合约方法的参数。did
是地址,指向存储在 IPFS 上的 JSON-RPC 文档,描述该提案的更多细节。nonce
是 DAO 中下一个未被使用的 nonce 值。signature
是 MetaTransaction 交易的签名。state
是当前提案状态。timestamp
是提案创建的时间。voteMagnitude
是 DAO 的可供投票的总代币数量。votingPeriodLength
是提案开放的投票期长度(以秒为单位)。votingQuorum
是提案需要获得的最小投票占比。metadata
是一个对象,其包含更多有关提案的元数据(如标题、正文和选项)。
通过调用 DAOStack 实例的 createProposal()
函数,将返回包含有关新提案的元数据的对象。
结论
现在你已经知道如何通过 npm 包 @ferngully/daostack-arc.js 与 DAOStack 合约交互,包括签名交易和创建治理提案等操作。希望这篇文章能够帮助你更好地理解 DAOStack 的概念,并能为你在前端开发中提供指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600573e381e8991b448e9c9d