一種轉移並在 Os 拍賣不可轉移靈魂綁定代幣的方法
— 導讀 / 原用標題
— 導讀/ 原用標題
作者:十四君
封面: Photo by Aron Visuals on Unsplash
5 月初,以太坊創始人 Vitalik 的靈魂代幣 SBT 論文發表之後,迅速成為整個 Web3 領域最熱門的話題之一。不久前,Vitalik 發布新書時便使用了此 SBT,任何人均可捐贈任意金額,並獲得一個靈魂綁定的 NFT,但是新的 Token 標準不僅缺乏市場上對靈魂綁定的可靠應用,更是其靈魂代幣本身還存在強制轉移的漏洞。
對於合約技術的老手而言,只需合約錢包/A3S 協議兩個關鍵詞即可理解核心內容,如果對實現細節有興趣,且同本文一同探索吧
靈魂綁定代幣是什麼
一直以來,自由主義都是 Web3 或者說區塊鏈世界發展蓬勃發展的基石,但是蠻橫的自由主義催生的是只有黑客才是 web2 向 web3 轉型的最成功的群體。所以如果說真正有價值的 Web3 ,需要怎樣的意識形態呢?
Vitalik 認為,Web3 需要以負責任的自由主義作為新的信念基礎。所以 SBT 其本質就是將信譽機制引入到了 Web3 當中,使得數字世界能夠對賬戶的信譽進行評價和度量,在去中心化世界裡建立聲譽、責任和社會資本
而實現的方式,就是以錢包地址的目標之下,發行不可以轉移的 Token,並稱之為 Soulbond(靈魂綁定)
SBT 的應用場景案例
SBT,Soulbond Token(靈魂綁定通證),顧名思義,就是綁定於用戶賬戶或錢包的 Token,一旦生成則不可交易。可用來代表承諾、資格、從屬關係等,類似於履歷表作為相應社會關係的一種證明。
在 Vitalik 的論文中,把綁定 SBT 的相關賬戶定義為 Soul(靈魂)
舉例來說,以太坊基金會所綁定的賬戶(Soul)可以向參加其開發者大會的人發放相應的 SBT,某大學所綁定的賬戶(Soul)也可以向其畢業生髮放代表學位證書的 SBT,等等。
而本文的樣例目標,就是由 Vitalik 發布新書時候,將會附帶贈送給捐贈地址的 SBT
SBT 的最小實現
其實無論 ERC20 還是 ERC721 都是通過合約標準中的 transfer 和 SafeTransferFrom 來執行轉移功能,因此對 SBT 的最小實現,只需要刪除掉 transfer 的代碼,讓其只有 Mint 時可以修改用戶餘額表_balances 即可
對標準實現可拓展閱讀:【源碼解讀】你買的 NFT 到底是什麼?
轉移 SBT 的漏洞是什麼?
錢包分類概述
其實很簡單,能夠鏈上發起交易的是錢包,而錢包分單籤和多簽。
單簽錢包,我們要往區塊鏈上發送一筆轉賬交易,需要去用錢包去做一個簽名,我們自己簽好名把交易發送出去,交易執行成功轉賬就成功,這就是典型的單簽錢包,也是我們平時使用最多的錢包。
而多簽錢包,顧名思義,就是需要多個人去簽名執行某個操作的錢包。使用多簽錢包進行轉賬,往往需要>= 1 個人去簽名發送交易之後,轉賬操作才真正完成。使用多簽錢包時,我們可以指定 m/n 的簽名模式,就是 n 個人裡面有 m 個人簽名即可完成操作。
多簽錢包,常常應用為需求強安全性的個人,以及管理公共資產的投資機構、交易所以及項目方。核心價值是資金安全與資金共同管理
多簽錢包如何 mintNFT?
在以太坊中,多簽錢包往往是一個智能合約,而合約要實現多簽管理,有兩大種路徑分別對應
- Ownbit 多簽錢包使用持簽授權法:用你的私鑰對相應的花費(金額、目標地址等等)進行簽名,並給出簽名結果
- Gnosis 多簽錢包使用交易授權法:用你的私鑰發送一筆以太坊交易,去調用某個特定接口,並給予特定參數;
咱們用 Gnosis 的早期版本實現 V1 版做例子
Gnosis 多簽執行任意交易的流程
整體分成 4 個階段:初始化階段→提案階段→投票階段→執行階段
- 初始化階段:定義若干管理員_owners,後續的交易僅這些地址可調用
- 提案階段:任意管理員之一通過 submitTransaction 方法提交交易,得到一個交易號 transactionId,提交的交易需要攜帶 destination, value, data 這三個參數
- 投票階段:其餘管理員通過提交 ETH 交易來投票,調用合約的 confirmTransaction 方法
- 執行階段:當 confirm 的人數達到最低要求,executeTransaction 的內部邏輯將被觸發,
最終合約通過 call 遠程調用執行任意操作
tx.destination.call.value(tx.value)(tx.data)
為何可以執行任意操作?
因為其中 destination 是目標地址,value 是金額,data 是交易附帶的參數
在一筆以太坊交易中,Data 字段是交易的附帶信息,有明確的規則控制,比如下圖是最常規的 ERC20 轉賬交易,其在 Etherscan 解析後的展示邏輯如下,而其實交易解析前的原文是
0xa9059cbb0000000000000000000000003baf10686c60680d491f49ea3f720a1831c3391e00000000000000000000000000000000000000000000f92e1b81422bfc3a0000
其解析的原理是,依據前 8 位對應合約的 ABI 文件可以得知對應的函數名與參數列表,後續每 64 位按不同參數類型做不同轉換做解析
所以,對於提案,只需要清晰的規定,目標地址、金額、交易附帶參數,即可執行任意操作
小結-合約錢包模式優缺對比
這裡概述了核心的 GnosisV1 版本實現邏輯,其實後來他已經逐步改版成類 Ownbit 的形式,採用持簽驗籤的模式了,主要原因是用發送交易代表提案和投票,有著簡單易懂規避了複雜簽名計算,且全程線上實現任何時候追溯都有據可查等優勢,但是缺點也很顯著
- 一次提案需要多人交易成本高昂
- 最後投票者 gas 費更高,即成本不平衡
- 再交易實際邏輯在 data 字段中,難以閱讀理解
所以用戶利弊成本權衡,最終放棄了交易確認法,讓他走向持簽驗籤的模式。
SBT 如何在 OpenSea 上售賣?
至此已經非常顯著了,只需要用合約錢包無論是 Gnosis 還是 Ownbit 的方法,都可以發起捐贈然後領走 NFT,那轉移不了 Token 本身,連著錢包本身一起賣不就可以了麼。
當然,獲得不是終點,我們的目標是還要有合適的方法來拍賣他!從而為 SBT 實現定價
這裡就需要使用一種特殊的協議名為:A3S
他是構建下一代地址標準的多鏈協議。為地址提供了流動性和可整合性,A3S 使地址能夠安全地交易、租賃和託管。因此,他是地址成為可以轉移和定價的鏈上基礎設施。
用戶從智能合約地址工廠中鑄造一個 Commander NFT,它就會自動部署相應的智能合約。智能合約的所有者指向相應的 NFT 持有者。合約可以接收任何類型的鏈上資產,並且只允許所有者發送資產,就是將這個智能合約將作為用戶與任何區塊鏈 dApp 交互的載體。
誰持有這個 NFT,即是拿著這個智能合約的遙控器,如果 NFT 發生了轉移,那麼智能合約的管理權也發送了轉移。
通過此原理最終,我們可以看到出現了一些基於此協議的在 Opensea 上的掛單,當然沒啥價格,畢竟錢包地址的交易還不具備較大規模的社會共識。
總結
本文概述了 SBT 的理念基石,高度認可 Web3 需要以負責任的自由主義作為新的信念基礎,但是新的概念需要周全的考慮智能合約這樣的黑暗森林中發出的狙擊槍,通過概述鏈上合約錢包 Gnosis 和 Ownbit 的實現原理,並結合較為前沿的 A3S 錢包地址轉移協議,系統的說明 SBT 即使 Token 本身不可轉移,也會伴隨其地址權限本身的轉移,而動搖靈魂綁定的意義。
最後當我收集本文資料的時候,也發現原來已經有類似思路的研究者 5660.eth,將此種 SBT 合約錢包轉移給到 Vitalik 的錢包地址,或許可以提醒 V 神以及其以太坊基金會能夠對後續 EIp 圍繞 SBT 的提案,做更週期的優化,比如檢測授予對像是否為合約地址等等。
附錄
轉移給 Vitalik 的交易:
https://etherscan.io/tx/0xb461f4ef55b00c3e1786c4e51d6ec457ca0858147215c72beba20f14325bb68e
A3S 協議文檔:
https://a3sprotocolcontact.gitbook.io/a3s-protocol/about/background
V 神新書對應 SBT 合約地址
https://etherscan.io/address/0x5bf5bcc5362f88721167c1068b58c60cad075aac
https://proofofstake.gitcoin.co/
GnosisV1 版本合約代碼
https://etherscan.io/address/0xcafe1a77e84698c83ca8931f54a755176ef75f2c#code
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。