CosmWasm 的定价格式:cw721-fixed-price 怎么用一条转账消息完成限购铸造 图 1
CosmWasm 的定价格式:cw721-fixed-price 怎么用一条转账消息完成限购铸造 · 图 1

以太坊上的固定价限量发售通常是一个合约同时管收款和发币。CosmWasm 仓库里有一个更小气的做法:cw721-fixed-price,一个把”按固定单价、限量卖出有限版次”这件事做成通用模板的合约,属于官方 cw-nfts 仓库的示例合约之一。它的特点是把铸币合约和收款路径拆开,用一条 CW20 的转账消息触发铸造。

先看实例化。部署这个合约时必须一次性给齐参数:合约所有者、用于收款的 CW20 代币合约地址、最大铸造数量、每枚 NFT 的单价、cw721 合约的 code ID,以及 NFT 的 token info 与元数据。值得注意的是最后一组:cw721 代币合约是在实例化 fixed-price 合约的过程中动态创建出来的,官方 README 特别写明——不需要事先单独实例化一个 cw721 代币合约。换句话说,发行方部署一个入口合约,代币合约作为它的”产物”自动存在,所有铸造动作都要经过这个入口。

买家的动线因此非常短。README 规定铸造走 CW20 的 Send 与 Receive 流程:买家对 CW20 代币合约发起一次 Send,指定目标为 fixed-price 合约,代币合约会把”有人带钱来了”这条消息转给 fixed-price,后者核对金额是否等于单价、总量是否还没到上限,都满足就铸造一枚发给你。不先用 ERC-20 式的 approve 再调 mint 的两步走,一条转账消息本身就是铸造请求,授权窗口不留在链上。

这个结构决定了三件事。第一,价格与上限在部署时锁进合约配置,链上公开,任何人都能在实例化参数里读到最大铸造数量和单价;改不改得动,取决于合约所有者有没有保留更新权限。第二,付款和铸造在同一笔交易的两个合约调用里完成,要么都成要么都不成,不存在”钱付了、铸造失败”的中间态被留在链上让你手动补救——失败会以交易回滚的形态直接暴露。第三,CW20 是唯一收款通道,如果你想用链原生代币付款,这个模板不合适。

把动线再放慢看一遍。买家钱包里先要有这个 CW20 代币,发起 Send 时指定接收合约为 fixed-price 合约、附上恰好等于单价的金额;CW20 合约收到 Send 后回调 fixed-price 的接收端,后者按自己的规则判定:金额对不对、总额满没满、这个地址有没有份数上限(模板本身没有按地址限额,上限只作用于总量),全过才铸币并发到付款地址。任何一步不满足,整笔回滚,代币不会离手。这个”CW20 Send 触发接收端逻辑”的模式在整个 CosmWasm 生态通用,看懂这一条,等于看懂了这类代币兑换合约的公共骨架。相比之下,以太坊上 approve 加 mint 的两段式里,approve 一旦签出就是一个挂在链上的授权记录,忘了撤销就是长期敞口;Send 模式没有这种残留授权,攻击面天然小一圈——这也是把”一次消费”设计成转账而非授权的实际收益。

对想发固定价版次的人来说,这个合约把发行规则放到了尽可能窄的面上:版次上限、单价、集合级元数据全部实例化时可见。对买家来说,核对动作同样收窄——在发起 Send 之前,确认目标地址就是你打算参与的那个 fixed-price 合约、确认它引用的 CW20 地址是你要花的币、确认最大数量还剩多少。三项都能从链上读取,不依赖任何前端展示。

也要如实说清模板的边界。README 的语气是”示例合约”性质:它展示 CW20 接收端怎么做,官方仓库同时给了 cw721-base 供按需改造成你自己的发行合约。fixed-price 本身不带白名单、不带分阶段价格、不带按钱包限额,它的价值恰恰是窄:一个行为完全可预测的兑换口。带复杂发行规则的场合,仓库文档建议基于 cw721-base 扩展,而不是往 fixed-price 上堆逻辑。

最后照例提醒执行层面的事:这类合约把”规则在链上”做干净了,但发行方是谁、元数据指向哪里、后续版税声明是什么,仍需逐项自查。本文描述的参数表与流程以 CosmWasm 官方 cw-nfts 仓库当前 README 为准,引用具体地址前先核对你所接入链上的部署版本。

本文为机制说明,不构成任何投资建议。

CosmWasm 的定价格式:cw721-fixed-price 怎么用一条转账消息完成限购铸造 图 2
CosmWasm 的定价格式:cw721-fixed-price 怎么用一条转账消息完成限购铸造 · 图 2