SBT 即使代币本身不可转移,也会伴随其地址权限本身的转移,而动摇灵魂绑定的意义。
原文标题:《一种转移并在 Os 拍卖不可转移灵魂绑定代币的方法》
撰文:十四君
5 月初 以太坊创始人 Vitalik 的灵魂代币 SBT 论文发表之后,迅速成为整个 Web3 领域最热门的话题之一,不久前 Vitalik 发布新书时便使用了此 SBT,任何人均可捐赠任意金额,并获得一个灵魂绑定的 NFT ,但是新的 Token 标准不仅是缺乏市场上对灵魂绑定的可靠应用,更是其灵魂代币本身还存在强制转移的漏洞。
对于合约技术的老手而言,只需合约钱包 /A3S 协议两个关键词即可理解核心内容但如果对实现细节有兴趣,且同本文一同探索吧。
1、灵魂绑定代币是什么
一直以来,自由主义都是 Web3 或者说区块链世界发展蓬勃发展的基石,但是蛮横的自由主义催生的是只有黑客才是 web2 向 web3 转型的最成功的群体。所以如果说真正有价值的 Web3 ,需要怎样的意识形态呢?
Vitalik 认为,Web3 需要以负责任的自由主义作为新的信念基础。所以 SBT 其本质就是将信誉机制引入到了 Web3 当中,使得数字世界能够对账户的信誉进行评价和度量,在去中心化世界里建立声誉、责任和社会资本。
而实现的方式,就是以钱包地址的目标之下,发行不可以转移的 Token,并称之为 Soulbond(灵魂绑定)。
1.1、SBT 的应用场景案例
SBT,Soulbond Token(灵魂绑定通证),顾名思义,就是绑定于用户账户或钱包的 Token,一旦生成则不可交易。可用来代表承诺、资格、从属关系等,类似于履历表作为相应社会关系的一种证明。
在 Vitalik 的论文中,把绑定 SBT 的相关账户定义为 Soul(灵魂)。
举例来说,以太坊基金会所绑定的账户(Soul)可以向参加其开发者大会的人发放相应的 SBT,某大学所绑定的账户(Soul)也可以向其毕业生发放代表学位证书的 SBT,等等。
而本文的样例目标,就是由 Vitalik 发布新书时候,将会附带赠送给捐赠地址的 SBT。
1.2、SBT 的最小实现
其实无论 ERC20 还是 ERC721 都是通过合约标准中的 transfer 和 SafeTransferFrom 来执行转移功能,因此对 SBT 的最小实现,只需要删除掉 transfer 的代码,让其只有 Mint 时可以修改用户余额表_balances 即可。
对标准实现可拓展阅读:【源码解读】你买的 NFT 到底是什么?
2、转移 SBT 的漏洞是什么?
2.1、钱包分类概述
其实很简单,能够链上发起交易的是钱包,而钱包分单签和多签。
单签钱包,我们要往区块链上发送一笔转账交易,需要去用钱包去做一个签名,我们自己签好名把交易发送出去,交易执行成功转账就成功,这就是典型的单签钱包,也是我们平时使用最多的钱包。
而多签钱包,顾名思义,就是需要多个人去签名执行某个操作的钱包。使用多签钱包进行转账,往往需要 >= 1 个人去签名发送交易之后,转账操作才真正完成。使用多签钱包时,我们可以指定 m/n 的签名模式,就是 n 个人里面有 m 个人签名即可完成操作。
多签钱包,常常应用为需求强安全性的个人,以及管理公共资产的投资机构、交易所以及项目方。核心价值是资金安全与资金共同管理
2.2、多签钱包如何 mintNFT?
在以太坊中,多签钱包往往是一个智能合约,而合约要实现多签管理,有两大种路径分别对应
- Ownbit 多签钱包使用持签授权法:用你的私钥对相应的花费(金额、目标地址等等)进行签名,并给出签名结果
- Gnosis 多签钱包使用交易授权法:用你的私钥发送一笔以太坊交易,去调用某个特定接口,并给予特定参数;
咱们用 Gnosis 的早期版本实现 V1 版做例子
2.3、Gnosis 多签执行任意交易的流程
整体分成 4 个阶段:初始化阶段→提案阶段→投票阶段→执行阶段
- 初始化阶段:定义若干管理员_owners,后续的交易仅这些地址可调用
- 提案阶段:任意管理员之一通过 submitTransaction 方法提交交易,得到一个交易号 transactionId,提交的交易需要携带 destination, value, data 这三个参数
- 投票阶段:其余管理员通过提交 ETH 交易来投票,调用合约的 confirmTransaction 方法
- 执行阶段:当 confirm 的人数达到最低要求,executeTransaction 的内部逻辑将被触发,
最终合约通过 call 远程调用执行任意操作
2.4、为何可以执行任意操作?
因为其中 destination 是目标地址,value 是金额,data 是交易附带的参数。
在一笔以太坊交易中,Data 字段是交易的附带信息,有明确的规则控制,比如下图是最常规的 ERC20 转账交易,其在 Etherscan 解析后的展示逻辑如下,而其实交易解析前的原文是
0xa9059cbb0000000000000000000000003baf10686c60680d491f49ea3f720a1831c3391e00000000000000000000000000000000000000000000f92e1b81422bfc3a0000
其解析的原理是,依据前 8 位对应合约的 ABI 文件可以得知对应的函数名与参数列表,后续每 64 位按不同参数类型做不同转换做解析
所以,对于提案,只需要清晰的规定,目标地址、金额、交易附带参数,即可执行任意操作
2.5、小结 – 合约钱包模式优缺对比
这里概述了核心的 GnosisV1 版本实现逻辑,其实后来他已经逐步改版成类 Ownbit 的形式,采用持签验签的模式了,主要原因是
用发送交易代表提案和投票,有着简单易懂规避了复杂签名计算,且全程线上实现任何时候追溯都有据可查等优势,但是缺点也很显著
- 一次提案需要多人交易成本高昂
- 最后投票者 gas 费更高,即成本不平衡
- 再交易实际逻辑在 data 字段中,难以阅读理解
所以用户利弊成本权衡,最终放弃了交易确认法,让他走向持签验签的模式。
3、SBT 如何在 OpenSea 上售卖?
至此已经非常显著了,只需要用合约钱包无论是 Gnosis 还是 Ownbit 的方法,都可以发起捐赠然后领走 NFT,那转移不了 Token 本身,连着钱包本身一起卖不就可以了么。
当然,获得不是终点,我们的目标是还要有合适的方法来拍卖他!从而为 SBT 实现定价
这里就需要使用一种特殊的协议名为:A3S
A3S 协议架构图
他是构建下一代地址标准的多链协议。为地址提供了流动性和可整合性,A3S 使地址能够安全地交易、租赁和托管。因此,他是地址成为可以转移和定价的链上基础设施。
用户从智能合约地址工厂中铸造一个 Commander NFT,它就会自动部署相应的智能合约。智能合约的所有者指向相应的 NFT 持有者。合约可以接收任何类型的链上资产,并且只允许所有者发送资产,就是将这个智能合约将作为用户与任何区块链 dApp 交互的载体。
谁持有这个 NFT,即是拿着这个智能合约的遥控器,如果 NFT 发生了转移,那么智能合约的管理权也发送了转移。
通过此原理最终,我们可以看到出现了一些基于此协议的在 Opensea 上的挂单,当然没啥价格,毕竟钱包地址的交易还不具备较大规模的社会共识。
4、总结
本文概述了 SBT 的理念基石,高度认可 Web3 需要以负责任的自由主义作为新的信念基础,但是新的概念需要周全的考虑智能合约这样的黑暗森林中发出的狙击枪,通过概述链上合约钱包 Gnosis 和 Ownbit 的实现原理,并结合较为前沿的 A3S 钱包地址转移协议,系统的说明 SBT 即使 Token 本身不可转移,也会伴随其地址权限本身的转移,而动摇灵魂绑定的意义。
最后当我收集本文资料的时候,也发现原来已经有类似思路的研究者 5660.eth,将此种 SBT 合约钱包转移给到 Vitalik 的钱包地址,或许可以提醒 V 神以及其以太坊基金会能够对后续 EIp 围绕 SBT 的提案,做更周期的优化,比如检测授予对象是否为合约地址等等。