# 一种转移并在Os拍卖不可转移灵魂绑定代币的方法

By [shisi.eth](https://paragraph.com/@shisi-eth) · 2022-09-18

---

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

![](https://storage.googleapis.com/papyrus_images/c4103f3b51f291295b3ea896d27239fdb119839037213d23a2876a81177fbc32.png)

### 1.2、SBT的最小实现

其实无论ERC20还是ERC721都是通过合约标准中的transfer和SafeTransferFrom 来执行转移功能，因此对SBT的最小实现，只需要删除掉transfer的代码，让其只有Mint时可以修改用户余额表\_balances 即可

![](https://storage.googleapis.com/papyrus_images/99c0332a1de3775a50aaa195f85e5509302bef52219435b25f92ef9538100ba6.png)

对标准实现可拓展阅读：[【源码解读】你买的NFT到底是什么？](https://mp.weixin.qq.com/s?__biz=MzIyMTQ5MTg5Mw==&mid=2247483815&idx=1&sn=5f91df631b450944739419be185e597c&scene=21#wechat_redirect)

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远程调用执行任意操作

    tx.destination.call.value(tx.value)(tx.data)
    

### 2.4、为何可以执行任意操作？

因为其中destination是目标地址，value是金额，data是交易附带的参数

在一笔以太坊交易中，Data字段是交易的附带信息，有明确的规则控制，比如下图是最常规的ERC20转账交易，其在Etherscan解析后的展示逻辑如下，而其实交易解析前的原文是

![](https://storage.googleapis.com/papyrus_images/daae7bdab5cb8091c667d3e416b404bce2e3702fe11fc0c2a50d9e7d7d6e28cf.png)

其解析的原理是，依据前8位对应合约的ABI文件可以得知对应的函数名与参数列表，后续每64位按不同参数类型做不同转换做解析

![](https://storage.googleapis.com/papyrus_images/655d5d2f7b23d4b45f6cb88e5a1c8d8e259a88c95b972204e0a84a117fe3fa15.png)

所以，对于提案，只需要清晰的规定，目标地址、金额、交易附带参数，即可执行任意操作

### 2.5、小结-合约钱包模式优缺对比

这里概述了核心的GnosisV1版本实现逻辑，其实后来他已经逐步改版成类Ownbit的形式，采用持签验签的模式了，主要原因是

用发送交易代表提案和投票，有着简单易懂规避了复杂签名计算，且全程线上实现任何时候追溯都有据可查等优势，但是缺点也很显著

*   一次提案需要多人交易成本高昂
    
*   最后投票者gas费更高，即成本不平衡
    
*   再交易实际逻辑在data字段中，难以阅读理解
    

所以用户利弊成本权衡，最终放弃了交易确认法，让他走向持签验签的模式。

3、SBT如何在OpenSea上售卖？
-------------------

至此已经非常显著了，只需要用合约钱包无论是Gnosis还是Ownbit的方法，都可以发起捐赠然后领走NFT，那转移不了Token本身，连着钱包本身一起卖不就可以了么。

当然，获得不是终点，我们的目标是还要有合适的方法来拍卖他！从而为SBT实现定价

这里就需要使用一种特殊的协议名为：A3S

![A3S协议架构图](https://storage.googleapis.com/papyrus_images/793768792e3302124bad986114c5a158553998ee247ecd3ba827a6bbe5503361.png)

A3S协议架构图

他是构建下一代地址标准的多链协议。为地址提供了流动性和可整合性，**A3S使地址能够安全地交易、租赁和托管**。因此，他是地址成为可以转移和定价的链上基础设施。

用户从智能合约地址工厂中铸造一个 Commander NFT，它就会自动部署相应的智能合约。智能合约的所有者指向相应的 NFT 持有者。合约可以接收任何类型的链上资产，并且只允许所有者发送资产，就是将这个智能合约将作为用户与任何区块链 dApp 交互的载体。

**谁持有这个NFT，即是拿着这个智能合约的遥控器**，如果NFT发生了转移，那么智能合约的管理权也发送了转移。

通过此原理最终，我们可以看到出现了一些基于此协议的在Opensea上的挂单，当然没啥价格，毕竟钱包地址的交易还不具备较大规模的社会共识。

![](https://storage.googleapis.com/papyrus_images/430a00d50ad22b80bf0a16e341ee52ec0310255c0770643ffc34b50da423bcc1.png)

4、总结
----

本文概述了SBT的理念基石，高度认可**Web3 需要以负责任的自由主义作为新的信念基础**，但是新的概念需要周全的考虑智能合约这样的黑暗森林中发出的狙击枪，通过概述链上合约钱包Gnosis和Ownbit的实现原理，并结合较为前沿的A3S钱包地址转移协议，系统的说明SBT即使Token本身不可转移，也会伴随其地址权限本身的转移，而动摇灵魂绑定的意义。

最后当我收集本文资料的时候，也发现原来已经有类似思路的研究者5660.eth，**将此种SBT合约钱包转移给到Vitalik的钱包地址**，或许可以提醒V神以及其以太坊基金会能够对后续EIp围绕SBT的提案，做更周期的优化，比如检测授予对象是否为合约地址等等。

![](https://storage.googleapis.com/papyrus_images/201d1b12a2715530771f8448e126b257071923b813bfb3d818bade83f6786cb8.png)

欢迎你从后台提交web3行业问题探讨

点赞关注十四，用技术视角带给你价值

![](https://storage.googleapis.com/papyrus_images/b48f70bbbea572ee015d69b3cc0cb9b004349b41bd23b1e91ba285c352944d08.png)

---

*Originally published on [shisi.eth](https://paragraph.com/@shisi-eth/os)*
