40个版本

0.18.0 2023年7月2日
0.17.0 2023年3月23日
0.16.0 2022年10月25日
0.13.4 2022年7月23日
0.3.1 2020年10月16日

#990 in 神奇豆

Download history 2580/week @ 2024-04-22 1517/week @ 2024-04-29 1600/week @ 2024-05-06 1886/week @ 2024-05-13 2584/week @ 2024-05-20 1886/week @ 2024-05-27 2255/week @ 2024-06-03 1757/week @ 2024-06-10 2296/week @ 2024-06-17 2259/week @ 2024-06-24 1473/week @ 2024-07-01 1493/week @ 2024-07-08 2649/week @ 2024-07-15 2598/week @ 2024-07-22 2690/week @ 2024-07-29 2389/week @ 2024-08-05

10,419 每月下载量
68 个crate(56 个直接)中使用

Apache-2.0

210KB
5K SLoC

Rust 4.5K SLoC // 0.0% comments TypeScript 579 SLoC // 0.1% comments

Cw721基础

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

实现

  • CW721基础
  • 元数据扩展
  • 可枚举扩展

实现

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.65+,并具有 wasm32-unknown-unknown 目标。

您可以通过以下方式运行单元测试

cargotest

一旦您对内容满意,您可以通过以下方式将其编译为wasm

RUSTFLAGS='-C link-arg=-s' cargo wasm
cp ../../target/wasm32-unknown-unknown/release/cw721_base.wasm .
ls -l cw721_base.wasm
sha256sum cw721_base.wasm

或对于生产就绪(优化)的构建,在仓库根目录中运行构建命令:https://github.com/CosmWasm/cw-plus#compiling

导入此合约

您还可以导入此合约的许多逻辑来构建另一个符合CW721的合约,例如可交易名称、加密猫咪或代币化房地产。

基本上,您只需编写您的处理函数,并导入 cw721_base::contract::handle_transfer 等等,并将它们分派到它们。这允许您使用自定义 ExecuteMsgQueryMsg 以及您的附加调用,但使用底层实现来支持您想要支持的cw721消息标准。同样,对于 QueryMsg 也是如此。您很可能会编写一个自定义的、特定领域的 instantiate

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

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

依赖项

~4–6MB
~126K SLoC