如何在 5 分钟内创建灵魂绑定的治理令牌‍
老雅痞
2022-06-04 12:39
订阅此专栏
收藏此文章


Soulbound 代币或 SBT 现在很热门。


在 Puja Ohlhaver、Vitalik Buterin 和 Glen Weyl 最近的论文“去中心化社会:寻找 Web3 的灵魂”中描述,SBT 本质上是不可转让的 NFT。因为它们是不可转让的,所以 SBT 可以与一个特定的人或“灵魂”相关联,并用于代表个人独特的链上身份。你可以想象灵魂绑定的代币被用来代表各种重要的永久信息,例如投票历史或链上工作凭证。借助灵魂绑定令牌的集合,链上“灵魂”或身份可以代表有关特定人的明确的、分散的链上信息库。


SBT 的一个有希望的用例是 DAO 治理。例如,灵魂绑定代币可用于实施一人一票的规则,或强制执行特定提案的链上投票要求。


让我们开始动手建造一个!


尽管名字听起来很有bigeer,但 SBT 是脚踏实地的技术。我们已经知道构建它们所需的所有代码。在这个例子中,我们将构建一个不可转让的 NFT,它可以与OpenZeppelin Governor一起使用来为 DAO 提供动力。


步骤1


首先,我们将打开OpenZeppelin 向导来构建我们的合约基础。


由于我们正在构建 NFT,我们将选择“ERC721”作为我们的合约类型,“Mintable”,以便我们可以创建新的和“投票”,以便与 DAO 兼容。



第2步


现在我们有了基础,我们需要自定义我们的代码。为此,让我们通过单击“在 Remix 中打开”在 Remix 中打开我们的代码。您也可以单击此处在 Remix 中打开。


代码应如下所示:


Github:https ://gist.github.com/crazyrabbitLTC/d1298c1666c1fb3f05cf2ff11ecd5a07

我们已经拥有启动兼容 DAO 的 NFT 代币所需的所有代码!(OpenZeppelin Contracts Wizard非常棒)。现在,我们只需要进行一些更改以使其“灵魂绑定”(即不可转让)。


在 OpenZeppelin ERC721 Contracts API文档中,你会发现一些我们将用来控制代币可转移性的钩子。


我们已经在使用函数 _afterTokenTransfer(address from, address to, uint256 tokenId) 但我们需要添加一个新函数来检查令牌转移之前以阻止它发生。


要阻止令牌转移,请将以下内容添加到你的代码中:



Github:https ://gist.github.com/crazyrabbitLTC/00a969fbeb4baf9a266ce74eb9390416


现在,在任何人发送令牌之前,require 语句将检查是否:true == false

当它显然不是时,将阻止传输并显示错误消息Err. token is SOUL BOUND。


第 3 步:


很好,除非我们有问题。这个钩子将在所有传输上运行,这意味着它甚至会阻止铸币,这在技术上是从零地址到真实地址的传输。这不是缚魂信物!


为了解决这个问题,我们应该检查发件人是不是零地址,这样我们就知道这是一个铸币交易而不是转账。让我们更新我们的代码来检查这一点:



Github:https ://gist.github.com/crazyrabbitLTC/4c0fa2bfab0334a36e8575ac0ea5b2ea


完美!现在我们有了一个可以铸造但不能转移的灵魂绑定 NFT。这非常适合不可转让的投票系统,或任何你不希望参与者在公开市场上出售的徽章。因为我们将 ERC721 与 Votes 扩展一起使用,所以我们的新 SBT 也可以在带有 OpenZeppelin Governor 的 DAO 中使用。


最终代码:



开始玩儿吧~

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

相关Wiki
老雅痞
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开