# OpenSea 簡易運作原理

By [0x0016區塊猿](https://paragraph.com/@0x0016) · 2022-04-03

---

_本文亦發佈在作者網站： 最後更新：2021-10-03_

[https://www.frank.hk/blog/opensea/](https://www.frank.hk/blog/opensea/)

OpenSea 是目前最大的 NFT 交易平台，就宛如現實世界中的 Amazon ， 淘寶網一樣。如果嘗試過在 OpenSea 中出售自己擁有的 NFT，估計你都會有印象，前後要經歷 3 次和 MetaMask 的「互動」， 可是你究竟是否了解這三次「互動」究竟是在做什麼？

上架 NFT
------

下面的影片，展示了在 OpenSea 上架的過程：

我們可以看到，過程中前後需要經歷 Initialize Wallet ，Approve Token，Confirm Listing 三個步驟，這三個步驟分別是在做什麼呢？

### Initialize Wallet

screen 20210928090647

Initialize Wallet

我們可以從 MetaMask 中看到，所謂 Initialize Wallet， 其實是調用 OpenSea 上的「Proxy Registry」裡的一個 「Register Proxy」的 function。 從 [Etherscan](https://rinkeby.etherscan.io/tx/0x8c1563f458fc484d76e7e0b1926752c8d187ddad526f1711f5b886be18936233#internal) 上可以看到，這個 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

screen 20210928091339

Approve Token

Approve Token 則比較容易理解。有沒有想過你擁有的 NFT，為什麼 OpenSea 能夠代你賣給別人？它哪裡來的權力呢？答案就是這個步驟，我們看到這個 Approve Token 其實是調用了「Set Approval For All」function， 透過查看ERC721原始碼發現，這個 Set Approval For All ， 其實就是一個授權操作，一旦授權，被授權的地址將可以調用 transferFrom 將 NFT 的擁有權轉移到另一個地址。

approval

從 [Etherscan](https://rinkeby.etherscan.io/tx/0x9cf04947041e4b081aa2edcab3cfc8cba9cbdaf48d2bcfb0d3ed787b73fbf2f1) 上看到，這個授權操作傳入了一個被授權地址，`0x...548c` ，而這個地址，正正是上面第一步「Initialize Wallet」時新建立的合約地址，也就是說，這一部完成後，你作為 NFT 的擁有者，便授權了`0x...548c` 這個合約可以轉移你的 NFT 資產。

因為這個操作也需要改寫區塊鏈的數據，因此也是需要支付礦工費的。

### Confirm Listing

screen 20210928092312

最後一步 Confirm Listing， 則最為簡單，這個操作並沒有改寫任何區塊鏈的內容，因此不需要支付任何費用。這個操作是使用你的私鑰簽名一段信息，用以讓 OpenSea 認證你的身份，確認「你是你」，認證成功後才會代你進行上架操作。

購買 NFT
------

對比上架 NFT， 購買 NFT 則相對簡單。即便是新的帳戶，亦不需要太多的步驟。

DraggedImage

購買的操作，調用了 OpenSea 交易所合約中的 「atomic match」function，這個 function 最後會做幾件事：

1.  轉帳該筆金額的 97.5% 給NFT 原擁有者；
    
2.  轉帳該筆金額的 2.5% 給 OpenSea；
    
3.  透過上面的 proxy 合約，調用 NFT 合約的 `transferFrom` function，轉移 NFT；
    

screen 20210930150644

至此，一個 NFT 的交易便完成了。

透過查看 Etherscan 不難發現，OpenSea 背後使用的是 [Wyvern Protocol](https://wyvernprotocol.com/) ， 這是一個基於以太坊的開放協議，用以交易虛擬資產。網上似乎並沒有太多的關於這個協議的資料。以後有時間再研究一下。

screen 20210930150257

技術交流，其他諮詢等，請[按此聯絡](https://www.frank.hk/contact)。

---

*Originally published on [0x0016區塊猿](https://paragraph.com/@0x0016/opensea)*
