🐶原文: Understanding Security Issues in the NFT Ecosystem
🐶写在前面: 本博客只摘取了原论文的第二、三节。由于某些机翻内容太奇怪了,因此我在一些中文术语后面配有英文原文。
NFT 生态系统剖析
在本节中,我们提供了一个关于围绕 NFT 发展起来的经济的概述(如下图所示)。具体来说,我们确定了参与生态系统的参与者以及他们所互动的组成部分。

- 内容创作者将数字艺术品上传到数据托管服务器;
- 内容创作者授权卖家帮助自己完成 NFT 的铸造和出售;
- 卖家请求 NFT 市场上架一个 NFT 商品;
- NFT 市场根据卖家提供的信息去数据托管服务器获取数字艺术品;
- NFT 市场向代币合约传入相应的数字资产及其资产信息;
- 代币合约为其铸造新的 NFT 代币;
- 买家通过 NFT 市场下订单或出价;
- 订单被接受或拍卖结束后发生 NFT 所有权转移;
- 买家可以在自己的显示设备上查看数字艺术品;
- 显示设备从区块链那里获取代币;
- 显示设备从数据托管服务器那里获取数字艺术品;
我不理解为什么要单独拎一个显示硬件出来,因为 NFT 市场连的线已经太多了吗?
1 用户
NFT 通常用于销售数字艺术品,例如图像、音频和视频。NFT 生态系统中的用户分为三类:
- 内容创作者 c o n t e n t c r e a t o r \mathsf{content\ creator} content creator
- 卖家 s e l l e r \mathsf{seller} seller
- 买家 b u y e r \mathsf{buyer} buyer
首先,创作者 c r e a t o r \mathsf{creator} creator 创建数字内容并上传到数据托管服务器,以使艺术品公开可访问。在对内容进行销售时,有些创作者 c r e a t o r \mathsf{creator} creator 的技术水平不够,无法将他们的艺术作品转化为 NFT 并将其作为代币存放在区块链上。因此,他们授权卖家 s e l l e r \mathsf{seller} seller 来铸造 NFT 并在市场上销售。不过,内容创作者 c r e a t o r \mathsf{creator} creator 也可以自己扮演卖家 s e l l e r \mathsf{seller} seller 的角色。
一旦在市场上列出
l
i
s
t
\mathsf{list}
list,买家就可以按照售价购买艺术品,通过下订单
m
a
k
e
o
r
d
e
r
s
\mathsf{make\ orders}
make orders 或者出价
p
l
a
c
e
b
i
d
s
\mathsf{place\ bids}
place bids 的方式。如果他们的订单被接受或者他们在拍卖中获胜,则通过调用 transferFrom() 方法来将 NFT 的所有权从卖家转移到买家。
个人认为:NFT 市场中的 l i s t \mathsf{list} list 这一术语,就是指把艺术品上架以展示给潜在的客户。
2 市场
NFT 市场 N F T M \mathsf{NFTM} NFTM 是用于交易 NFT 的 dApp 平台。 N F T M \mathsf{NFTM} NFTM 通常有两个主要组成部分:面向用户的网页应用程序、一组与区块链交互的智能合约。用户与网页应用程序交互,该应用程序随后代表用户向智能合约发送交易。主要有两种类型的合约:
- ( 1 ) \mathsf{(1)} (1) 市场合约,实现与区块链交互的 NFTM 协议部分;
- ( 2 ) \mathsf{(2)} (2) 代币合约,管理 NFT;
市场通常允许用户执行以下活动:
- ( 1 ) \mathsf{(1)} (1) 用户认证
- ( 2 ) \mathsf{(2)} (2) 代币铸造
- ( 3 ) \mathsf{(3)} (3) 代币上架
- ( 4 ) \mathsf{(4)} (4) 代币交易
这些与代币相关联的活动被统称为 e v e n t \mathsf{event} event 事件。
根据这些事件存储的位置,可能有三种广泛的 NFTM 协议设计:
- 链上:所有事件都存储在区块链上。由于每个动作都需要消耗燃料费,这种设计使得对用户来说 NFTM 的运营成本很高。遵循这种设计的 NFTM 包括:Axie、CryptoPunks、Foundation 和 SuperRare;
- 链下:事件被记录在一个由 NFTM 管理的集中式、链下数据库中。用户通过与网页应用程序交互来执行各种活动,而不是与区块链交互,因此这种设计对燃料费友好。Nifty 是一个链下 NFTM 的例子;
- 混合型:根据事件的类型,一些存储在链上,一些存储在链下。为了确保操作的完整性,链上和链下事件通过加密校验相互关联。OpenSea 和 Rarible 采用这种模式。
3 用户身份验证
用户只有在完成注册后才能使用 NFTM 的服务。注册后,有两种不同的身份验证流程:
- ( 1 ) \mathsf{(1)} (1) 基于经典凭据(用户名/密码)的身份验证;
- ( 2 ) \mathsf{(2)} (2) 基于签名的身份验证。用户首先被要求对一个挑战字符串进行签名。然后,市场从椭圆曲线签名中恢复签署者(用户)的地址。OpenSea、Rarible、Foundation、CryptoPunks 和 SuperRare 采用这种模式。由于以太坊私钥本质上是不可猜测的,这种身份验证方法通常比传统的密码(密码通常是从有限字符集、较短长度和更容易暴力破解)更安全。
4 代币铸造
通过调用代币合约中的方法来铸造代币,代币合约通常遵守 ERC-721 或 ERC-1155 标准。
一个代币合约可以管理多个 NFT 的所有权。每个 NFT 都被分配了一个称为 _tokenId 的整数。因此在区块链上,NFT 被
(
t
o
k
e
n
_
c
o
n
t
r
a
c
t
_
a
d
d
r
e
s
s
,
_
t
o
k
e
n
I
d
)
\mathsf{(token\_contract\_address,\ \_tokenId)}
(token_contract_address, _tokenId) 对
p
a
i
r
\mathsf{pair}
pair 唯一标识。
不同合约之间的
_tokenId貌似没有说不能重复?因此这个 p a i r \mathsf{pair} pair 像是一个复合主键😇
一组类似的或属于同一主题的 NFT 被称为 c o l l e c t i o n \mathsf{collection} collection 集合,例如 CryptoPunks,如下图所示:

NFT 可以通过许多不同的方式铸造:
- ( 1 ) \mathsf{(1)} (1) 默认合约:代币作为由市场管理的、预先部署的、指定的代币合同的一部分被铸造。 N F T M \mathsf{NFTM} NFTM 如 OpenSea、Foundation、SuperRare 等在创建者 c r e a t o r \mathsf{creator} creator 未部署自定义合约的情况下,提供了帮助拥有一个 NFT 的默认合约;
- ( 2 ) \mathsf{(2)} (2) 复制品合约: N F T M \mathsf{NFTM} NFTM 代表创作者 c r e a t o r \mathsf{creator} creator 来部署一个合约以管理 NFT 所属的集合。部署的合约具有相同的字节码,但可以通过一些初始化参数进行定制。这样的 N F T M \mathsf{NFTM} NFTM 包括 Nifty 和 Rarible 等。由于默认合约和复制品合约都由 N F T M \mathsf{NFTM} NFTM 管理,因此它们一起被称为内部代币合约。
- ( 3 ) \mathsf{(3)} (3) 外部合约:创作者 c r e a t o r \mathsf{creator} creator 自己部署一个自定义合约来管理 c o l l e c t i o n \mathsf{collection} collection 收藏,然后再将其导入市场。为了与 N F T M \mathsf{NFTM} NFTM 互操作,外部合约必须遵循一个成熟稳定的代币标准。否则,需要进行定制集成。OpenSea 和 Rarible 允许在其平台上使用外部合约。
虽然单个的代币合约可以管理一个或多个
c
o
l
l
e
c
t
i
o
n
\mathsf{collection}
collection 集合,但是在一般情况下,复制品合约和外部合约管理单个集合,而市场默认合约管理多个集合。在后一种情况下,
N
F
T
M
\mathsf{NFTM}
NFTM 去中心化应用(dApp)需要维护一个链下关联,将一系列的 _tokenId 与它们所属的
c
o
l
l
e
c
t
i
o
n
\mathsf{collection}
collection 集合关联起来。
5 代币上架
一旦创建完毕,卖家就会列出 l i s t \mathsf{list} list 他们的资产以供销售。要想在平台中上架 NFT,一些 NFT 市场,如 Foundation、SuperRare、Nifty,规定要么是卖家本身,要么是 NFT 所属的整个 c o l l e c t i o n \mathsf{collection} collection 集合通过验证。即使那些提供可选验证功能的 NFT 市场,例如 OpenSea、Rarible,艺术家或 c o l l e c t i o n \mathsf{collection} collection 集合的验证也能提供可信度,并增加买家的信心。NFT 市场在经过验证的艺术家和 c o l l e c t i o n \mathsf{collection} collection 集合的资料页上显示特殊的徽章,这有助于建立品牌,并享受优先待遇以提高销售。例如搜索优先权和安全上架,以在购买前抑制与安全相关的警报。
6 代币交易
买家可以通过下订单 m a k e o r d e r s \mathsf{make\ orders} make orders 或者出价 p l a c e b i d s \mathsf{place\ bids} place bids 的方式购买正在出售的资产。当一个订单被接受,或者一个拍卖被结算时,NFT 市场会将资产从卖家的账户转移到买家的账户。通常,这时 NFT 市场会收取服务费用。
在 NFT 市场中有两种购买方式:一种是卖家固定价格,买家直接购买;另一种是卖家实施拍卖,买家之间通过竞价购买。
下面讨论 NFT 市场拍卖系统的几个关键方面:
- ( 1 ) \mathsf{(1)} (1) 定价协议:出价价格可以随着每次出价而增加或减少。在英式拍卖中,出价从保留价格开始,这是卖家愿意接受的 NFT 最低价格。买家的后续出价逐渐提高价格。NFT 最终归最高出价者所有。大多数 NFT 市场,如 OpenSea、Foundation 和 SuperRare,使用的都是英式拍卖方法。在荷兰式拍卖中,出价从高价开始。卖家随后逐渐降低价格。NFT 归第一个接受出价的出价者所有。Axie 遵循荷兰式拍卖的模式。
- ( 2 ) \mathsf{(2)} (2) 出价存储:出价可以存储在链上,例如 CryptoPunks、Foundation、SuperRare,或者存储在链下,例如 Nifty、Rarible、OpenSea 。有一些协议,如 OpenSea 使用的 Wyvern,为了节省燃料费,将卖出订单和出价都存储在链下,尽管订单匹配和 NFT 转移是在链上发生的。因此,市场合约通过加密验证买入订单与相关的卖出订单,以防止恶意买家购买不在销售中的物品,或者篡改现有的卖出订单。
- ( 3 ) \mathsf{(3)} (3) 活跃出价:一些 NFT 市场不允许对同一资产提出多个活跃出价。例如,在 CryptoPunks、Foundation 或 SuperRare 中,当一个出价者超过了当前的最高出价者,后者会自动获得退款。
- ( 4 ) \mathsf{(4)} (4) 出价撤回:一些 NFT 市场,如 CryptoPunks,允许出价的撤回,而其他市场,例如 Foundation,则不允许。
- ( 5 ) \mathsf{(5)} (5) 出价结算:在大多数情况下,出价结算不需要卖家的干预,即资产会自动归最高出价者所有。然而,对于一些像 CryptoPunks 这样的 NFT 市场,出价必须得到卖家的明确接受。
当一个资产由非创作者 c r e a t o r \mathsf{creator} creator 的卖家 s e l l e r \mathsf{seller} seller 出售时,这被称为二次销售。版税是创作者 c r e a t o r \mathsf{creator} creator 因每一次这样的二次销售所获得的支付。在第一次销售发生之前,创作者 c r e a t o r \mathsf{creator} creator 需要指定版税金额,之后从每一次二次销售中扣除并支付给 c r e a t o r \mathsf{creator} creator 创作者。扣款在链上或链下都能进行:
- ( 1 ) \mathsf{(1)} (1) 在链上进行,在每一次购买交易中由市场合约计算版税;
- ( 2 ) \mathsf{(2)} (2) 在链下进行,由 NFT 市场的 dApp 跟踪从每次销售中累积的版税;
7 外部实体
在 NFT 市场和区块链之外,存在一些服务和设备,它们为系统的运作提供了必要的基础设施支持。例如,创作者 c r e a t o r \mathsf{creator} creator 会将他们的艺术品存储在 Web 服务器或存储 s t o r a g e \mathsf{storage} storage 服务器上,如 Amazon S3 或 IPFS 。当买家购买 NFT 时,创作者 c r e a t o r \mathsf{creator} creator 可以在相册风格的网站或数字 NFT 相框上展示自己的艺术品。这些网站、相框和 NFT 市场分别从区块链中获取代币,从服务器中获取艺术品。