OpenSea 是目前最大的 NFT 交易平台,就宛如現實世界中的 Amazon , 淘寶網一樣。如果嘗試過在 OpenSea 中出售自己擁有的 NFT,估計你都會有印象,前後要經歷 3 次和 MetaMask 的「互動」, 可是你究竟是否了解這三次「互動」究竟是在做什麼?
上架 NFT
下面的影片,展示了在 OpenSea 上架的過程:
我們可以看到,過程中前後需要經歷 Initialize Wallet ,Approve Token,Confirm Listing 三個步驟,這三個步驟分別是在做什麼呢?
Initialize Wallet
我們可以從 MetaMask 中看到,所謂 Initialize Wallet, 其實是調用 OpenSea 上的「Proxy Registry」裡的一個 「Register Proxy」的 function。 從 Etherscan 上可以看到,這個 function 建立並部署了一個新的智能合約 0x...548c
,也就是所謂的 Proxy 合約。
根據 OpenSea 的說明:「On OpenSea, each user has a "proxy" account that they control, and is ultimately called by the marketplace contracts to trade their items.」得知,每一個 OpenSea 賬戶, 都會有一個 Proxy 合約與之對應,因此如果是一個全新的賬戶,就必須要經過這個「部署 Proxy 合約」的步驟,但如果已經擁有了 Proxy 合約,則下次上架 NFT 就不需要再次部署了。
因為這個操作需要改寫區塊鏈的數據,因此需要支付礦工費。另外因為需要進行合約部署,礦工費用也會相較其他操作更貴。
Approve Token
Approve Token 則比較容易理解。有沒有想過你擁有的 NFT,為什麼 OpenSea 能夠代你賣給別人?它哪裡來的權力呢?答案就是這個步驟,我們看到這個 Approve Token 其實是調用了「Set Approval For All」function, 透過查看ERC721原始碼發現,這個 Set Approval For All , 其實就是一個授權操作,一旦授權,被授權的地址將可以調用 transferFrom 將 NFT 的擁有權轉移到另一個地址。
從 Etherscan 上看到,這個授權操作傳入了一個被授權地址,0x...548c
,而這個地址,正正是上面第一步「Initialize Wallet」時新建立的合約地址,也就是說,這一部完成後,你作為 NFT 的擁有者,便授權了0x...548c
這個合約可以轉移你的 NFT 資產。
因為這個操作也需要改寫區塊鏈的數據,因此也是需要支付礦工費的。
Confirm Listing
最後一步 Confirm Listing, 則最為簡單,這個操作並沒有改寫任何區塊鏈的內容,因此不需要支付任何費用。這個操作是使用你的私鑰簽名一段信息,用以讓 OpenSea 認證你的身份,確認「你是你」,認證成功後才會代你進行上架操作。
購買 NFT
對比上架 NFT, 購買 NFT 則相對簡單。即便是新的帳戶,亦不需要太多的步驟。
購買的操作,調用了 OpenSea 交易所合約中的 「atomic match」function,這個 function 最後會做幾件事:
- 轉帳該筆金額的 97.5% 給NFT 原擁有者;
- 轉帳該筆金額的 2.5% 給 OpenSea;
- 透過上面的 proxy 合約,調用 NFT 合約的
transferFrom
function,轉移 NFT;
至此,一個 NFT 的交易便完成了。
透過查看 Etherscan 不難發現,OpenSea 背後使用的是 Wyvern Protocol , 這是一個基於以太坊的開放協議,用以交易虛擬資產。網上似乎並沒有太多的關於這個協議的資料。以後有時間再研究一下。