目录
🥑原文:Toward Achieving Anonymous NFT Trading
正文
在本节中,我们将展示基于以太坊和 Wyvern 协议的典型 NFT 市场 OpenSea 的工作流程。
下图展示 OpenSea 中 NFT 交易的简要过程:
注意:本文没有介绍 Wyvern 协议,只是提了一句。
A 创建并上架 NFT
NFT 交易始于铸造并上架一个新的 NFT 代币。OpenSea 通过其网站提供创建新 NFT 合约的方法,但它也接受已经部署的 NFT 合约。
🥕NFT 代币 ≠ NFT 合约
Ethereum:代币合约提供了一些功能,例如将代币从一个帐户转移到另一个帐户,获取帐户的当前代币余额,获取代币的所有者,以及整个网络的可用代币总供应量。
下图是 OpenSea 网站 NFT 创建的页面:
拿自己的 Google 邮箱注册了一个 OpenSea 的账号😇
考虑到现实世界的状况,交易可能会有多种形式。NFT 可以通过固定价格出售,也可以通过拍卖出售。由于拍卖主要涉及智能合约的功能设计,因此我们的方案将只讨论价格固定的情况。
如果是拍卖出售的话,竞拍者的最高出价改变,那么 NFT 的最终价格也会跟着改变。
卖家 提交某一 NFT 的 卖出订单 并在 OpenSea 网站上列出。之后,买家 浏览 OpenSea 网站并提交相应的 买入订单。
下图是 OpenSea 网站的 NFT 购买页面:
碎碎念:之前看到一篇 NFT + 慈善拍卖的论文,其中就设计了竞拍者们竞价的流程。
B 授权代理
由于某一 NFT 的上架时间通常与被购买的时间不同,因此让卖家一直等待潜在买家提交 买入订单,然后再将 NFT 转让给相应买家的做法并不实用。
个人理解:卖家在 OpenSea 网站把 NFT 上架后就可以离开了,而不需要一直等着别人来买。其中,买卖的过程涉及 NFT 所有权在买家和卖家之间的转让。
为了解决这种不便,每个 OpenSea 用户都需要在以太坊区块链上有一个一对一匹配的 代理。通过调用 代理注册 (proxy registry) 合约 来实例化 代理,它能分别为买方或卖方生成交易以帮助完成自动交换。
引用:用户创建钱包时,其实就是调用 OpenSea 上的 [Proxy Registry] 里的一个 [Register Proxy] 方法。这个方法将创建并部署一个新的智能合约,也就是所谓的代理合约。
提交订单后,用户通过调用 代理 (proxy) 函数 授权 TA 的 代理 访问目标 NFT,从而委托这个 代理 处理资产交换。
个人理解:代理是一个智能合约的实例,作为中介来帮助用户买卖数字资产。不过读到论文后面看到,貌似只有卖方需要代理。事实上,代理主要做的事情就是完成 NFT 所有权的转移。然而,买方又没有 NFT 的所有权,那 TA 还要什么代理呢?
C 处理订单
买家或卖家通过 OpenSea 的前端将订单提交到 OpenSea 的 订单簿 中。这些订单包含包括订单创建者、代理注册表 (proxy registry)、目标 NFT、价格、calldata 等信息。
calldata 是一个可配置的谓词,通常由一些关于委托某些行动的段组成,并用于代理的执行。
calldata 关键字用于存储函数参数和返回值,并且是只读的,即在函数内部不能对其进行修改。在函数参数进行声明时,默认情况下是 calldata 类型。
通过可配置性,可以替换掉使用 位掩码 保护的 calldata 数组。这样做的好处是,卖家在创建订单时不需要包含买家的地址,反之亦然。
这个翻译好像有点炸裂😇
位掩码是一个整数,其中每个位代表一种标志或开关。通过使用位掩码,可以在一个整数中同时存储多个布尔值或状态。
提交的订单以 捆绑包 (bundles) 的形式上传到 交易所 (the exchange) 智能合约中。
在前端开发中,捆绑包是指将多个文件合并为单个文件,以便在浏览器中实现更高效的加载和传输。“交易所” 就是这个智能合约的名字,不用产生怀疑😇
交易所协议 负责根据价格等信息来匹配买方和卖方的订单。
如果存在匹配,那么交易所协议将完成 calldata 并调用双方的 代理 进行交换程序。之后,数字资产 —— ETH 和 NFT —— 的所有权将进行交换。
个人理解:这里的 “交易所协议” 就是前面提到的 “交易所” 智能合约。
总结
回顾 OpenSea 的工作流程图:
- 买家和卖家创建账户的同时,初始化并授权一个代理来帮助管理资产;
- 买家和卖家分别提交买入订单和卖出订单到 OpenSea 的数据库;
- 交易所协议会根据价格等信息来匹配买方和卖方的订单;
- 若存在匹配的订单,则交易所协议呼唤
买方和卖方的代理来交换资产。
这里存疑,在一笔交易中是否需要使用到买方的代理?我觉得图上画的是没有关系的两个用户,而不是一笔交易中的买方和卖方。由于用户既可以当买方又可以当卖方,因此为两个用户都画了代理。