#nft #contract #cw721 #terra #basic #base #extension

cw721-base-terra

为Terra实现cw721 NFT的基本版本

2个版本

0.9.3 2022年5月5日
0.9.2 2022年5月4日

#9 in #terra

Apache-2.0

82KB
2K SLoC

Rust 1.5K SLoC // 0.0% comments TypeScript 290 SLoC // 0.1% comments

Terra Cw721基本

这是一个cw721 NFT合约的基本实现。它实现了CW721规范,并设计为直接部署或导入到其他合约中,以方便构建具有自定义逻辑的cw721兼容NFT。

实现

  • CW721基础
  • 元数据扩展
  • 可枚举扩展(AllTokens已完成,但Tokens未完成 - 需要#81

实现

ExecuteMsgQueryMsg的实现遵循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 等等,并将它们分发到它们。这允许您使用自定义的 ExecuteMsgQueryMsg 与您的附加调用一起使用,但然后使用底层实现来支持标准 cw721 消息。对于 QueryMsg 也是如此。您很可能想编写一个定制的、特定领域的 instantiate

待办事项:编写时添加示例

目前,您可以查看 cw20-staking 以了解如何“继承”cw20功能并将其与自定义逻辑结合。对于cw721,过程类似。

依赖项

~3.5–5MB
~104K SLoC