作者:今天有更懂這個世界一點了嗎
原文標題:可以退款的ERC721R會成為闖入NFT市場的鯰魚嗎?
幾天前我曾在群裡與大家探討目前NFT存在的問題,其中我提到目前購買者在NFT市場處於弱勢方,在一級市場被項目方操盤玩弄於股掌之中,二級市場又依賴於項目方真正做事而不是捲款跑路,並推演了一個理想的模型:
當時推演出的模型是一級市場的mint過程要保證絕對公平,二級市場則需要讓項目方確保拿到的錢真正的去兌現roadmap而不是捲款割韭菜,所以首先項目方不可以將mint後的錢直接進行提款,畢竟賬上躺著價值數百上千萬的資產,只需要動動手指頭就可以提到個人賬戶,這種誘惑很難有人抗拒,其次項目方的提款需要用在正道上,即去實現roadmap裡的承諾,要知道用戶花錢買的不是項目方的jpg,而是這張jpg後的權益與故事,用戶在買的那一瞬間是透支了項目方未來的時間。
我認為NFT市場應該是一個良幣驅逐劣幣的市場,若實現以上的模型,如果項目方不用,則用戶會認為項目方心虛從而不買,繼而倒逼項目方使用更健康的模型,最終形成正循環淨化整個市場。
今天看群裡有人提到新出來的一個ERC721R協議,有點上文中聊到的意思,故我們來分析分析它實現了什麼,又是怎麼實現的。
我們可以看到媒體報導說它允許鑄造者進行退款,即以前你在淘寶買到假貨只能認栽,現在你可以7天無理由退款。
我們打開ERC721R的官網https://erc721r.org/,可以看到其slogen是為NFT創造者帶來巨大的責任感,所以它是製約了項目方的權利從而要求項目方認真做事,否則用戶會把到了你兜里的錢取回來。
可以看到他們列出的4點優勢也是重點在強調項目方跑路的問題,30天內項目方沒有做事可以退款。
在QA中提到項目方在退款期間是無法將mint資金提出來的,其次他也為項目方進行了解釋,即說哎呀你們如果是個正經項目方肯定也不會需要mint完就立馬將錢提出來,所以放幾天也沒關係,言下之意就是你不用我的協議那就是心裡有鬼,良幣驅逐劣幣。
理念都挺好的,接下來我們看看他們的代碼具體是怎麼實現上述過程的,我們進入他們的github主頁https://github.com/exo-digital-labs/ERC721R
可以看到更詳細的描述,說是在原有的721和1155協議上新增了退款功能。
對於工作原理的描述,用戶交的錢先到了智能合約(721、1155也本身就是這樣的),然後有個鎖定期,這個期間項目方不能提款,但是用戶可以退款。
這是它的示例代碼,我來帶大家一起拆解一下。
首先定義了鎖定期refundPeriod並默認45天,當然項目方也可以自己改。
然後定義了構造函數,默認提款賬號為合約部署者,
並調用了一個時間計算的函數,即獲取當前合約部署的時間再加上鎖定期就是最終項目方可以提款的日期。
這個函數是用來校驗是否處於鎖定期的,在下文用戶退款的操作中會用到。
然後我們看一下核心的退款操作,用戶輸入自己要退款的對應token id,因為是數組格式可以退多個NFT,然後合約首先用剛才說到的校驗函數來判定是否處於鎖定期,若處於的話用戶就可以從裡面退款,然後用for循環遍歷用戶輸入的token id,並逐個校驗是否真的屬於當前用戶,若屬於的話則調用transfer函數將用戶的NFT還給項目方。然後再計算出應該退還給用戶多少錢,即用戶退的NFT數量乘以mint價格,然後再調用第三方合約的sendValue把錢打給用戶。
這是正常的項目方提款函數,這裡加了個校驗是否達到了鎖定時間,如果沒達到就不能執行函數,
總結一下,721R對於721、1155等協議的主要改動在於2點:
提款函數多加了一層時間校驗,沒有到時間不能提款,從而限制項目方
新增了一個給用戶退款的函數。
全程代碼量不超過30行,其次也沒有像721A在底層進行封裝,只在最上層的mint合約代碼中進行了修改,所以先定性:它不屬於協議,或它達不到協議的層次。
其次因為都是在上層合約裡改,所以治標不治本,且不說項目方會不會在裡面把一些限制去掉,當然去了後代碼一開源也會被大家識破,不過到了這裡你們是否有發現一個漏洞?
還記得上文中提到的退款時,給用戶退的錢是NFT數量乘以mint價格,但是mint價格是參數呀,只要是參數就可以改的,如果我mint時的價格是1eth,mint完項目方把價格改成0eth,那我退了個寂寞...而且這個過程在用戶退款前是不會被發現的。
所以我們來跑一下代碼試試看這樣做可不可行。
我將價格設置為1eth,然後mint了5個。
此時我的餘額為94.99(測試網初始100)
然後我將id為1的NFT進行退款。
執行完成後我的餘額多了1eth。
那麼此時假設我作為一個毫無良知道德敗壞只想著割韭菜的項目方我肯定要想辦法搞點破壞是吧,我把價格改成0,我讓你們退。
然後我再退id為2的NFT試試看。
NFT是退回去了,但是餘額沒有變化.....
所以如果要解決這一點也非常依賴於項目方的自覺性,不要改價格,或者直接把價格寫成常量壓根不能改,大家也不要一聽到有項目方使用了ERC721R就衝,還是要認真看一看代碼,到底有沒有給你們埋坑。
綜上所述,ERC721R是當今NFT市場的一股清流,他指出了這個市場的弊端,真正站到了用戶的角度去考慮,並提出了一種切實可行的解決方案,不過這套方案並不是那麼的完美,依然有大量需要完善補充的地方,但這並不妨礙他成為這個市場敢於說真話的吹哨人(這麼說會不會太過譽了)。
如之前的文章web3的世界一片蠻荒-詳解ERC721A,web3的世界現在還一片蠻荒,有大量的土地等待我們開墾,ERC721R開了一個好頭,後面需要我們做的事情還很多。