就在2023.3.7日,由10K Universe 提出的以太坊改進提議EIP-6147 已移至最終版本(Final)!
該標準是ERC-721 的擴展,分離了NFT和SBT的持有權和轉讓權,並定義了一個新的可設置到期時間的"守衛者"角色Guard,可使得NFT 防盜、借貸、租賃、 SBT 等更具靈活。
本文將系統講述ERC-6147的實現機制,並對比往期NFT租賃協議專案ERC-4907、ERC-5055,來綜合分析點評此協議以及適合的應用場景!
1、背景
NFT已經可謂是個老生常談的話題了,借助鏈上的不可篡改特性以及合約本身的自動化運作,實現了鏈上資產的確權與管理,筆者也從標準協議,租賃拓展協議,乃至於NFT交易市場的幾種主流模式來撰寫過多篇文章長文。
如果要論證NFT的優勢可能可以羅列上幾頁紙,但要論證NFT的劣勢,則千言萬語彙聚成一個詞:流動性!
當然各位可能要質疑的是,流動性不足的困境與實現產權分離標準有什麼關係呢?
在筆者看來,事實上NFT流動性的困境更多不是源於NFT協議本身,對ID的非同質化機制和限定ID區間導致的,哪怕是近乎無窮的ERC20token難道就不缺乏流動性了嗎?更重要的是,流動性本身是出於對金融產品的定價訴求而產生的話題,如何讓NFT本身俱有使用價值,便成了讓價值有所依歸而不是只依賴於市場操作的協議。
影響使用價值NFT使用價值的,也正是NFT協議本身
1.1、產權耦合,高價值NFT會傾向於安全避險
目前NFT被盜的案例很多,然而現有的NFT防盜方案,比如將NFT轉入冷錢包等都會使得NFT的使用不便。
並且在目前的NFT借貸中,NFT所有者需要將NFT轉移到NFT借貸合約中,NFT所有者在獲得借貸期間不再擁有NFT的使用權,這邊是產權耦合的問題,這其實和我們現實中購買房產再房產抵押換取流動性資金時,再非風險條件下是不用被佔用房屋使用權的情況很不同。
記憶尤新的是,猴子APE空投時被攻擊者用閃電貸結合NFTX進行攻擊
原事件分析可拓展閱讀: EIP-5058 能否防止NFT項目方提桶跑路?
整件事情裡,唯一受損的則是質押了猴子的用戶,本來是賺取微不足道的時間利差卻痛失了ape的海量空投。
同樣的,產權耦合的還有SBT的問題
對於SBT,目前主流觀點認為SBT是不可轉讓的,這使得SBT與以太地址綁定。但是,當用戶地址的私鑰洩露或丟失時,找回SBT將成為一項複雜的工作,並且沒有相應的標準。 SBT本質上實現了NFT持有權和轉讓權的分離。當SBT所在的錢包被盜或不可用時,SBT應該是可以恢復的。
例如,如果一所大學向其畢業生頒發基於文憑的SBT,如果大學後來發現畢業生有學術不端行為或損害大學聲譽,它應該有能力收回此文憑的SBT。
1.2、產權分離分案,強制性維度難以把控
過往十四也解讀過若干嘗試產權分離的方案,例如ERC-4907和ERC-5058,不可避免的最大的難題在於強制性程度的衡量,這並不是方案本身的問題,而是方案本身的哲學理念問題。
1.2.1、簡單哲學ERC-4907,定義願景剩下交給共識
在2022-07月,NFT 租賃市場Double Protocol 提交的可租賃NFT 標準“EIP-4907”通過了以太坊開發團隊的最終審核,成為第30 個ERC 標準“Final”的狀態。
代碼極為簡單僅有72行,使用這個標準,就是在原來的ERC721之上新增
1個事件(用於通知鏈下應用稱為事件)
3個方法(用於實現鏈上數據管理功能)
struct UserInfo { address user;// 用户地址uint64 expires;//用户到期时间}
歸咎原理,其實4907只是新增了一個數據對象UserInfo在所有權的概念之外增加“用戶”的維度,但是畢竟其強制性有限,只要轉移就能強行終止出租授權
詳情可拓展閱讀:
721租賃協議解讀: 以太坊新標準EIP-4907是怎樣實現NFT租賃的?
1155租賃協議解讀: NFT租賃提案EIP-5006步入最後審核!
1.2.2、0信任哲學的ERC-5058,代碼即法律
他本質上是對NFT的鎖定狀態進行管理,讓項目方在繼承5058實現的NFT項目中,提供鎖定即轉移的功能,也可以在繼承中實現更多功能比如版稅等
他封裝提供了若干提供方法:只有用戶許可以及項目方執行之後才會完全鎖定
用戶可調用
lockApprove(許可鎖定單個NFT)
setLockApprovalForAll(許可鎖定該地址下全部NFT)
項目方合約調用:
lockFrom(鎖定用戶的NFT)
unlockFrom(解鎖用戶的NFT)
鎖定期的定義也極具強制性,近乎只依據設定之初的時間點
項目方(第三方)鎖定NFT 時,需要指定鎖定過期的區塊高度,該高度必須大於當前區塊高度。鎖到期後,NFT 自動釋放,才可以進行轉移。
項目目前還是處於草稿階段,或許強制性過高以及用戶項目方雙向操作的較高成本所致
詳情可拓展閱讀: EIP-5058 能否防止NFT項目方提桶跑路?
講述完上述完全不強制4907,以及完全強制的5058,便到了本文主題:最新通過以太坊基金會審查,確定為Final的ERC-6147,雖然他原生的標題是:《Guard of NFT/SBT, an Extension of ERC-721 》,但十四君從系列的租賃研究經驗來看,他更應該稱是《半強制的NFT產權分離標準》
2、ERC-6147的運作機制
此協議整體代碼也非常精簡且高度復用,屬於對ERC721的拓展標準,但是要注意,如果使用了他,則轉移的操作可能與常規的721的邏輯不同,操作不當可能容易被釣魚,具體如何咱們展開說說。
建議拓展閱讀: 【源碼解讀】你買的NFT到底是什麼?
2.1、Guard是什麼?誰能控制?
首先ERC-6147定義了一個名為Guard(守衛者)的角色,和4907的UserInfo很相似,
struct GuardInfo{ address guard; // 守卫者地址, uint64 expires; // 到期时间, }
而Guard只有該NFT的當前所有者地址以及有代扣權限的地址,可以通過changeGuard設置,
通過源碼可以看到,在設置Guard的時候若干的細節// 防止誤鎖定,所以Guard不能設置為0地址
require(newGuard != address(0), "ERC6147: new guard can not be null"); // 只有Guard可以修改自己require(guard == _msgSender(), "ERC6147: only guard can change it self"); // 只有nft的所有者或者获得授权者可以设置Guard require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC6147: caller is not owner nor approved");
設置成功後,任何人都可以通過guardInfo 方法來查詢某個NFTID,當前的Guard信息,同時這裡也沿用了和4907一樣的基於時間戳的設計,所以是到期無需二次上鍊交易,就可以自動失效。
那Guard的身份,誰可以去除掉呢?只有Guard自己以及時間(到期)可以。
2.2、Guard能做什麼?
首先具有了強制轉移權,對於設置了Guard的NFT而言,在進行transferFrom的時候,會查詢交易發起方是否是守衛地址,是才能轉移。
? 請特別注意1:
對於設置了Guard的NFT而而言,原持有者將只有持有權,並沒有轉移權(即使用權),其他Dapp依舊可以查詢到此NFT的所有者是原用戶,但原用戶無法驅動其進行轉移。
所以對於設置了守衛的NFT,在opensea、x2y2等交易平台上的簽名是有效的(但是無法進行實際轉移,因為Seaport等協議執行轉移的時候,是由Seaport協議通過代扣授權來執行)
對於交易市場的運作機制可拓展閱讀:
? 請特別注意2:
如果守衛直接進行了轉移該NFT,如果是使用原生的transferFrom或者safeTransferFrom方法,其實守衛的設置是不會自動清除的,當然如果是守衛將NFT轉給自己自然無妨,但是如果轉給某用戶,然後再藉助守衛者的設置是可以再次進行轉移的。
因此如果後續使用Guard,則更多是需要檢驗是否使用的是transferAndRemove方法,此方法會在轉移後直接清除守衛者信息。
並且,守衛者本質上也是一種較高的控制權力,雷同於房屋租賃,抵押的那一刻,其實本質已經屬於銀行,只是只有銀行在滿足某些社會條款的情況下(如違約)才會執行拍賣等操作,既然是某種金融抵押品的屬性,則自然也可以二次轉移此守衛權使用changeGuard方法即可。
對於transferRemove的設計原則是為了適應不同場景。
比如防盜中,如果NFT在熱錢包,而熱錢包被盜了,冷錢包依然安全,其實只要transferFrom到其他安全地址就好了。
或者租賃的時候,guard調用transferFrom轉到新的租賃地址,就實現了租賃。
還有SBT的社交恢復,將SBT轉移到新地址,依然不影響SBT的不可轉移特性
2.3、Guard不能做什麼?
從源碼可以看到Guard相關的只有在授予時,是持有者和Approve授權者可以設置,但Guard是不能設置代扣的。
一方面是出於已經不需要考慮代扣授權者了,因為本質上該NFT的轉移權被限製到了Guard上,另一方面是Guard也不能設置Approve,是防止在守衛者歸還了轉移權後,反而用approve轉移走了NFT,這樣違背原本意願,用戶又難以發現的場景。
3、總結
用一張充滿金融屬性,稍有世俗的統計來呈現如今以太坊上NFT類型的資產概覽把
每天30多萬筆NFT交易,20餘萬各類NFT合約,這樣的總數都呈現出的是圍繞資產確權帶來的金融屬性價值。
但是任何時候金融屬性都需要逐漸依歸,我們可以看到用NFT來確認社交關係的Lens,可以看到用NFT來做遊戲資產的各種Gamefi,也可以看到圍繞內容創作借助分拆眾籌的Mirror等,
在以太坊問世區區8年多的時間來,圍繞EIP的提案總數已經達到6500+ ,
對比於同樣重磅的4907而言,6147更多是強在兼容性的優化
比如4907做租賃,user這個角色需要項目的主動認可,如果一個遊戲沒考慮user這個角色,只考慮owner,4907是不適用的。而6147只要認可owner就夠了,並不用在意遊戲項目和NFT本身是否支持租賃,現在大部分應用協議仍然是只認owner的,這也是4907問世後,還無法大幅度改變現狀的原因,只有先適應時代潮流之中能逐漸發光發熱。
另外6147也提出了“可管理的SBT”和“有效的SBT”概念,現在的SBT提案設計太注重Vitalik提出的“不可轉移”特性了,但是卻忽略NFT的潛在管理場景,比如社交恢復、收回SBT(比如學術不端,需要收回學位,或者一個DAO成員在社區作惡,需要收回它的SBT權限)
參考鏈接:
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6147.md
https://ethereum-magicians.org/t/final-eip-6147-guard-of-nft-sbt-an-extension-of-erc-721/12052