原文引自:ODAILY《一種轉移並在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的提案,做更週期的優化,比如檢測授予對像是否為合約地址等等。
原文引自:ODAILY《一種轉移並在Os拍賣不可轉移靈魂綁定代幣的方法》
原作者:十四君