就在2023.3.7日,由10K Universe 提出的以太坊改進提議EIP-6147 已移至最終版本(Final)!

該標準是ERC-721 的擴展,分離了NFT和SBT的持有權和轉讓權,並定義了一個新的可設置到期時間的"守衛者"角色Guard,可使得NFT 防盜、借貸、租賃、 SBT 等更具靈活。

本文將系統講述ERC-6147的實現機制,並對比往期NFT租賃協議專案ERC-4907、ERC-5055,來綜合分析點評此協議以及適合的應用場景!

解讀最新Final的ERC-6147:極簡的半強制性NFT產權分離標準

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進行攻擊

解讀最新Final的ERC-6147:極簡的半強制性NFT產權分離標準

原事件分析可拓展閱讀: 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在所有權的概念之外增加“用戶”的維度,但是畢竟其強制性有限,只要轉移就能強行終止出租授權

詳情可拓展閱讀:

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自己以及時間(到期)可以。

解讀最新Final的ERC-6147:極簡的半強制性NFT產權分離標準

2.2、Guard能做什麼?

首先具有了強制轉移權,對於設置了Guard的NFT而言,在進行transferFrom的時候,會查詢交易發起方是否是守衛地址,是才能轉移。

解讀最新Final的ERC-6147:極簡的半強制性NFT產權分離標準

? 請特別注意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合約,這樣的總數都呈現出的是圍繞資產確權帶來的金融屬性價值。

解讀最新Final的ERC-6147:極簡的半強制性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