2个版本
0.9.3 | 2022年5月5日 |
---|---|
0.9.2 | 2022年5月4日 |
#9 in #terra
82KB
2K SLoC
Terra Cw721基本
这是一个cw721 NFT合约的基本实现。它实现了CW721规范,并设计为直接部署或导入到其他合约中,以方便构建具有自定义逻辑的cw721兼容NFT。
实现
- CW721基础
- 元数据扩展
- 可枚举扩展(AllTokens已完成,但Tokens未完成 - 需要#81)
实现
ExecuteMsg
和QueryMsg
的实现遵循CW721规范,并在其中进行了描述。除此之外,我们还做了一些补充
InstantiateMsg
接受名称和符号(用于元数据),以及一个铸造者地址。这是一个具有完全权限铸造新NFT(但不能修改现有NFT)的特殊地址ExecuteMsg::Mint{token_id, owner, token_uri}
- 创建一个给定所有者和(可选)元数据的新代币。它只能由在instantiate
中设置的铸造者调用。QueryMsg::Minter{}
- 返回此合约的铸造者地址。
它要求所有代币都必须在标准格式(无扩展)中定义元数据。对于通用NFT来说,这通常已经足够。
铸造者可以是外部演员(例如,使用PubKey的Web服务器)或另一个合约。如果您只想自定义铸造行为而不想修改其他功能,则可以扩展此合约(导入代码并将其连接起来)或创建一个自定义合约作为所有者,并使用该合约进行铸造。
如果提供,则预期token_uri指向遵循ERC721元数据JSON模式的JSON文件。
运行此合约
您需要安装Rust 1.44.1+,并安装wasm32-unknown-unknown
目标。
您可以通过以下方式运行单元测试:
cargotest
一旦您对内容满意,您可以通过以下方式编译为wasm:
RUSTFLAGS='-C link-arg=-s' cargo wasm
cp ../../target/wasm32-unknown-unknown/release/cw20_base.wasm .
ls -l cw20_base.wasm
sha256sum cw20_base.wasm
或者,对于生产就绪(优化)的构建,在存储库根目录中运行构建命令: https://github.com/CosmWasm/cw-plus#compiling。
导入此合约
您还可以将此合约的大部分逻辑导入以构建另一个符合CW721标准的合约,例如可交易名称、加密猫咪或代币化房地产。
基本上,您只需编写您的处理函数,导入 cw721_base::contract::handle_transfer
等等,并将它们分发到它们。这允许您使用自定义的 ExecuteMsg
和 QueryMsg
与您的附加调用一起使用,但然后使用底层实现来支持标准 cw721 消息。对于 QueryMsg
也是如此。您很可能想编写一个定制的、特定领域的 instantiate
。
待办事项:编写时添加示例
目前,您可以查看 cw20-staking
以了解如何“继承”cw20功能并将其与自定义逻辑结合。对于cw721,过程类似。
依赖项
~3.5–5MB
~104K SLoC