目录

Wyvern on the OpenSea

1  交易流程

1.1  卖家

1.2  买家

2  组成部分

2.1  WyvernProxyRegistry

2.2  OwnableDelegateProxy

2.3  NFT Contract

2.4  OpenSea Order Book

2.5  Wyvern Exchange Contract

3  总结

陋原文:Wyvern on the OpenSea

陋警告:自 2022 年 5 月 25 日起,OpenSea 就把 Wyvern 协议替换为 Seaport 协议了。

Wyvern on the OpenSea

OpenSea 交易所是如何运作的

双足翼龙「Wyvern」如下图所示,是一种神话中的有两条腿和有倒钩尾巴的龙,它也是 OpenSea 用来促进 NFT 去中心化交易的协议的名称。

本文将为您概述买家和卖家在 OpenSea 进行交易的所有步骤以及其技术。

1  交易流程

1.1  卖家

卖家的交易流程如下图所示:

卖家创建「代理」并进行注册;卖家对「代理」进行授权;卖家将「卖出订单」及其签名发送给 OpenSea 订单簿。

1.2  买家

买家的交易流程如下图所示:

买家支付 ETH 以请求交易所合约执行 atomicMatch_ 方法; 交易所合约将 ETH 费用支付给 OpenSea;交易所合约将 ETH 支付给卖家;交易所合约呼唤卖家代理;卖家代理执行 NFT 合约的 transferFrom 方法;NFT 合约转移卖家的 NFT 所有权。

2  组成部分

上述流程中有许多组成部分,让我们来逐个进行介绍。

2.1  WyvernProxyRegistry

当一个卖家首次在 OpenSea 上进行出售时,WyvernProxyRegistry 将为其创建一个名为 OwnableDelegateProxy 的智能合约。

WyvernProxyRegistry 是代理注册合约,OwnableDelegateProxy 是代理合约。

卖家拥有此合约,合约的地址存储在「proxy registry,代理注册表」中:

contract ProxyRegistry is Ownable {

/* Authenticated proxies by user. */

mapping(address => OwnableDelegateProxy) public proxies;

}

即,存储了代理所有者和「代理」之间的映射关系。

点击查看 WyvernProxyRegistry 的完整代码

首先是「Initialize your wallet」的步骤:

To get set up for selling on OpenSea for the first time, you must initialize your wallet, which requires a one-time gas fee. 为了第一次在 OpenSea 上出售商品,你必须先初始化你的钱包,这需要支付一次性的 Gas 费。

具体的交易过程如下图所示:

简而言之,每个 OpenSea 账户都会有一个「代理」合约与之对应。因此,如果是一个全新的账户,那么必须要经过「Initialize your wallet」的步骤,在该过程中进行代理合约的部署。但如果已经拥有了「代理」合约,那么下次上架 NFT 就不需要再次部署了。

由于这个操作需要改写区块链的数据,因此需要支付矿工费。另外因为需要进行合约部署,所以矿工费用也会相较其他操作更贵。

2.2  OwnableDelegateProxy

在 2.1 节中谈到,每个卖家都会创建一个 OwnableDelegateProxy 合约。

Wyvern「exchange contract,交易所合约」将使用这个「代理」合约来代表卖家采取行动。「代理」合约可以调用其他合约的方法,而无需存储有关这些合约的任何信息。

这个过程称为「proxy delegation,代理委派」。关于它是如何工作的,超出了本文的范围,但你可以 点击这里 了解更多。

也就是代理合约可以调用 NFT 合约中的各种方法,但是不需要存储 NFT 合约中的数据?

2.3  NFT Contract

这是卖家试图上架的 NFT「collection,收藏」的合约。卖家第一次在该「收藏」中上架任何物品时,他们会给予其 OwnableDelegateProxy 合约转移代币的权限。

只有在第一次上架的时候需要进行授权,之后就不需要了。

然后是「Approve this item for sale」的步骤:

具体的交易过程如下图所示:

上图中的 Set Approval For All 就是 NFT 合约中的授权方法。

2.4  OpenSea Order Book

OpenSea 要求卖家签署一个包含其「listing,列表」详细信息的消息,包括售价和到期日期。这个消息被称为「sell order,卖出订单」。签名的作用是验证卖家请求了该订单,并且没有人修改过它。OpenSea 将在一个称为「order book,订单簿」的「集中式数据库」中存储所有「卖出订单」和「卖家签名」。

这些「卖出订单」可以通过 OpenSea API 获取。这使得市场聚合器如 Genie 等能够展示 OpenSea 上的有效「listing,列表」。尽管订单是在链下存储的,但市场可以在链上履行任何有效订单。这就是为什么上架商品的过程是免费的,但是取消订单的过程是需要消耗燃料费的。

所有订单在被链上取消或过期之前都是有效的。

个人理解:上架商品不涉及区块链上的操作,取消订单会涉及区块链上的操作。

最后是「Confirm listing」的步骤,「卖出订单」在该步骤中被创建并被签名:

Accept the signature request in your wallet and wait for your listing to process. 在您的钱包中接受签名请求并等待您的上架处理完成。

具体的交易过程如下图所示:

GPT 说上图中的 maker 是指卖家地址,exchange 是指「交易所合约」地址,taker 是指买家地址。

2.5  Wyvern Exchange Contract

Wyvern「交易所合约」负责执行订单。您可以 点击链接 查看此合约的代码。

买家需要支付足够的 ETH 以执行「交易所合约」的 atomicMatch_ 方法。

atomicMatch_ 方法接收卖出订单、卖家签名、买入订单和买家签名。它将检查「卖出订单」和「买入订单」是否匹配且仍然有效。然后它会向 OpenSea 发送费用,向卖家发送付款,并使用卖家的 OwnableDelegateProxy 合约将 NFT 的所有权从卖家转移到买家。完成这些步骤后,买卖订单在合约中被标记为已最终化。

对于买家的交易看起来是这样的:

以上便是交易流程中的最后一步。如果一切顺利,那么买家将拥有 NFT 的所有权,而卖家将收到 ETH 付款。

3  总结

本文涵盖的 Wyvern Protocol 内容远不止这些,但我希望这篇文章能让您对每个步骤有更深的理解。如果您想要更加深入地了解,我附上了一些资源供您参考:

Wyvern ProtocolProxy Delegate from Solidity PatternsOpenSea: Wyvern Exchange Contract v2Project Wyvern Proxy RegistryOpenSea API Reference@javamonnn's Breakdown of The Wyvern Exchange Contract

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。