{
"trader": "0x558395439377A3146aF3076B44B51E41504bD588",
"side": 0,
"matchingPolicy": "0x18e8DC0F5AB80076Bc4A4F9007187A73EE38cd61",
"collection": "0x4539885B6c2222d79140044262dbD82E3e7238c7",
"tokenId": 1,
"amount": 0,
"paymentToken": "0x3dEEfe08f3Fd1a1789b152357B1A4a8428d1629d",
"price": "1000000000000000000",
"listingTime": "0",
"expirationTime": "1679630942",
"fees": [
{
"rate": 300,
"recipient": "0x0017446d75054F370106976DE781ff60b53630Df"
}
],
"salt": 0,
"extraParams": "0x",
"nonce": 0
}
- _validateOrderParameters 验证订单参数的有效性
- _transferTo 以ETH 或 WETH 转账金额 (eth, weth, 也可以是 blur pool 中的 pool_eth )
- _executeTokenTransfer 通过代理转移 NFT (1155, 721)
-
2种 合约升级模式
UUPSUpgradeable
-
4种事件监听方式
-
pragma abicoder v2;
-
存储结构
https://docs.soliditylang.org/zh/v0.8.17/internals/layout_in_memory.html
3.16 会议
Marketplace 上线 4.20 号
发合约 出接口 4.5
todo:
-
部署 2
-
升级
-
开源
-
js 前端调用 测试
-
js 联调
-
后端 事件联调
NonceIncremented
-
UUPS 部署 升级
-
权限 设置的 测试 委托代理 合约测试 转移 NFT, weth 设置测试
-
Order 参数结构
- 怎么构建 NFT 卖单 订单
- 卖家怎么签名
- 后端 / 合约 验证签名是否有效
- 买家 构建 erc20 买单
- 买单 是否需要签名呢 ? 验证?
- 调用合约 执行
- 验证买卖 订单的策略 是否匹配
-
策略 匹配的 验证测试
-
订单执行 测试
execution test
mapping(address => uint256) public nonces; // user address --> 0,1,2,3,4 ....
index.ts exchange.test execution.test
-
RevokeApproval: 禁用 (用户) 默认未禁用
-
GrantApproval: 授权 (用户)
-
ApproveContract: 授权合约 (管理员) 默认未授权
-
DenyContract: 禁用合约 (管理员)
-
OrdersMatched 订单匹配完成 (用户) --> execute(Input calldata sell, Input calldata buy)
-
OrderCancelled 取消订单 (用户)
-
NonceIncremented 取消用户当前的所有订单 (用户)
-
Opened (管理员)
-
Closed (管理员)
-
NewExecutionDelegate(管理员) --> setExecutionDelegate
-
NewPolicyManager(管理员) --> setPolicyManager
-
NewOracle (管理员) --> setOracle
-
NewBlockRange(管理员) --> setBlockRange