写在前面
OpenSea 长期是 NFT 市场的头部平台——但它早期用的是 ProjectWyvern 协议——一个 2018 年的设计,远不能满足 2022 年的需求。
2022 年 5 月 OpenSea 推出全新的 Seaport 协议,并在 2022 年 6 月切换全平台。Seaport 不是"小修小补"——它完全重新设计了 NFT 交易的链上模型:
- 多对多交易:一笔订单能涉及多种资产、多个发送方、多个接收方
- 极致 Gas 优化:单次撮合成本比 Wyvern 低 35%
- 无需特殊代理合约:用户授权流程大大简化
- Order Type 抽象:能表达拍卖、固定价、批量、套件等多种交易模式
理解 Seaport 不只是为了使用 OpenSea SDK——它代表了 NFT 协议设计的现代范式。本文讲清楚 Seaport 的核心机制和它解决的问题。
一、Wyvern 的痛点
Wyvern 是 OpenSea 早期协议的基础。它的核心思想是"让两笔配对的订单互相调用对方"——非常通用,但也有几个硬伤:
- 每个用户都要部署一个『代理合约』——首次使用要额外支付一次合约部署 Gas(昂贵)
- 撮合一笔订单要执行 12 个合约调用——Gas 成本高
- 订单数据格式僵化——无法灵活表达"批量买"、“套件”、“提供其他 NFT 换”
- 协议升级困难——和 OpenSea 业务深度绑定
2022 年的 NFT 市场已经不止"一个 NFT 换 ETH"那么简单——开发者需要更灵活的协议。Seaport 应运而生。
二、Seaport 的核心抽象:Order
Seaport 把任何交易抽象成一个 Order 结构:
| |
关键:
offer:我愿意给出什么(NFT、ERC20、ETH)consideration:我期望换回什么(同样可以是任意组合)
这种"我给 X,要 Y"的对称结构能表达几乎所有交易类型——固定价、拍卖、套件、批量、租赁、转移……
三、典型订单形态
1. 固定价出售
| |
我(offerer)给出 NFT_A,要求 10 ETH。
2. 收 offer
| |
我给 10 ETH,要求 NFT_A。任何持有 NFT_A 的人可以接受。
3. 套件交易(Bundle)
| |
打包卖三个 NFT,要求 25 ETH。
4. 物物交换
| |
用我的 NFT_A 换你的 NFT_B 加 1 ETH 找零。
5. 带版税
| |
consideration 是数组——支持把"售价"拆给多方。
四、撮合:take 和 fulfill
订单创建后挂在链下(OpenSea 后端数据库)——只在被 fulfill 时才上链。
几种 fulfill 函数
| |
fulfillBasicOrder 是最高频的——OpenSea 80% 的交易走它。它对最常见的"NFT 换 ETH/WETH/ERC20"做了特殊 Gas 优化:
- 减少 storage 读写
- 跳过不必要的检查
- 更短的 calldata 编码
五、Conduit:授权管理的核心创新
Wyvern 让每个用户部署独立代理合约——首次使用又贵又慢。Seaport 用 Conduit 解决:
- Conduit 是共享合约——多个用户共用一个 Conduit
- 用户只需 approve 一次 Conduit——之后所有 Seaport 交易都走它
- 合约部署费用全市场用户共担
OpenSea 自己有个官方 Conduit,但任何人可以创建自己的 Conduit——这是 Seaport 设计可扩展性的体现。
六、Zone:可选的"裁判"
zone 字段允许订单挂一个可选的裁判合约——成交前 Seaport 会调用 zone 的 validateOrder:
| |
zone 能做:
- 白名单检查——只允许 KYC 用户成交
- 价格保护——市场价剧烈波动时拒绝成交
- 延时撮合——某条件未达到时阻止
- 链下签名验证——用户最后确认才放行
zone 让 Seaport 可以扩展协议行为而不改 Seaport 本身——是关键的"开放性"设计。
七、Offerer = 0:开放成交
Seaport 支持一种特殊设计——offerer 写成 address(0):
| |
这表示"任何提供 NFT_A 的人,10 ETH 是给你的"——OpenSea 的『接收 offer』功能就是这么实现的。
八、为什么 Seaport 比 Wyvern 省 Gas
| Wyvern | Seaport | |
|---|---|---|
| 个人代理 | 必须部署 | 共享 Conduit |
| 撮合调用次数 | 12+ | 4-6 |
| Calldata | 大量重复 | 紧凑编码 |
| storage 读写 | 多 | 少 |
| 实际 Gas | ~250K | ~150K |
OpenSea 上线 Seaport 的第一周——用户节省了上千万美元 Gas。
九、安全设计
Seaport 经过多次审计(OpenZeppelin、Trail of Bits 等)+ 公开 bug bounty——但仍有一些值得关注的设计点:
1. 订单签名
订单是 EIP-712 签名——可读签名内容,但用户仍要小心钓鱼网站让你签复杂订单。
2. nonce 管理
每个订单有 nonce——取消的方式有两种:
- 调用
incrementCounter()——一次性把所有未成交订单作废 - 单独
cancel(orderHash)
历史上有用户误调 incrementCounter 把所有挂单作废——成本是一次 Gas。
3. 无限授权
approve Conduit 时通常是无限授权——Conduit 被攻破的话所有授权用户都受影响。OpenSea 的 Conduit 经过严格审计但用户应该知道这个风险。
4. zone 的双刃剑
恶意 zone 可以任意拒绝合法成交——用户接受订单时要确认 zone 是可信的。
十、Seaport 1.x 之后的演进
OpenSea 持续迭代 Seaport:
- Seaport 1.4 / 1.5:引入"协议版本"管理、性能优化
- Seaport 1.6:原生支持 ERC-2981 版税
- 未来:跨链交易、链下撮合 + 链上结算
Seaport 协议本身完全开源(MIT 协议)——任何项目都能直接用,不绑定 OpenSea。Blur、LooksRare 等竞争对手都在用 Seaport 或它的衍生版。
十一、对开发者的意义
如果你做 NFT 相关产品:
- 直接用 Seaport SDK——
@opensea/seaport-js已经封装好所有细节 - 理解 Order 结构——能让你设计出更灵活的业务(套件、订阅、租赁)
- 学习 Conduit + Zone 设计——是协议级"模块化"的范例
- 关注 EIP-712 签名规范——前端怎么 sign,后端怎么 verify
如果你做协议设计——Seaport 是当代 Solidity 设计的最佳学习材料之一:
- Gas 优化的极致追求
- 模块化扩展能力(zone、conduit)
- 复杂业务的简洁抽象
小结
把全文压一句:
Seaport 用『offer / consideration』的对称模型 + Conduit 共享授权 + Zone 可扩展裁判,把 NFT 交易的灵活性和 Gas 效率推到了新的高度。
工程要点:
- 任何 NFT 业务都可以用 Order 结构表达
- Conduit 解决了"每用户部署代理合约"的痛
- Zone 让协议可扩展而不需要改 Seaport 本身
- fulfillBasicOrder 是高频路径,专门优化过
- EIP-712 签名让用户能看清自己签了什么
理解 Seaport,理解的不只是 OpenSea——是 2024 年 NFT 协议设计的范式。