43 个版本

0.18.0 2023 年 6 月 29 日
0.17.0 2023 年 3 月 23 日
0.16.0 2022 年 10 月 25 日
0.13.4 2022 年 7 月 23 日
0.3.2 2020 年 10 月 28 日

#1246魔法豆

Download history 3254/week @ 2024-04-22 2246/week @ 2024-04-29 2106/week @ 2024-05-06 2427/week @ 2024-05-13 3361/week @ 2024-05-20 2623/week @ 2024-05-27 2850/week @ 2024-06-03 2493/week @ 2024-06-10 3037/week @ 2024-06-17 3049/week @ 2024-06-24 1976/week @ 2024-07-01 2116/week @ 2024-07-08 3980/week @ 2024-07-15 3834/week @ 2024-07-22 3768/week @ 2024-07-29 3080/week @ 2024-08-05

14,793 每月下载量
用于 135 个包 (63 直接)

Apache-2.0

19KB
306

CW721 规范:非同质化代币

CW721 是基于 CosmWasm 的非同质化代币规范。名称和设计基于以太坊的 ERC721 标准,并进行了一些改进。这里定义的类型可以被希望实现此规范的合约或调用任何标准 cw721 合约的合约导入。

规范分为多个部分,合约可能只实现其中的一部分,但必须实现基础部分。

基础

这部分处理所有权、转让和许可。所有 CW721 合约都必须支持这些功能。请注意,所有代币都必须有一个所有者,以及一个 ID。ID 是一个任意字符串,在合约内是唯一的。

消息

TransferNft{recipient, token_id} - 这将代币的所有权转让给 recipient 账户。这是设计用来发送到由私钥控制的地址的,不会在接收方(如果它是合约)上触发任何操作。

需要 token_id 指向一个有效的代币,并且 env.sender 是它的所有者或有权转让它。

SendNft{contract, token_id, msg} - 将代币的所有权转移给 contract 账户。 contract 必须是一个由实现 CW721Receiver 接口的智能合约控制的地址。 msg 将与 token_id 一起传递给接收合约。

需要 token_id 指向一个有效的代币,并且 env.sender 是它的所有者或有权转让它。

Approve{spender, token_id, expires} - 授予 spender 转移或发送指定代币的权限。这只能在 env.sender 是指定 token_id 的所有者或操作者时执行。每个代币可以有多个spender账户,一旦代币被转移或发送,它们就会被清除。

Revoke{spender, token_id} - 撤销之前授予转移指定 token_id 的权限。这只能在 env.sender 是指定 token_id 的所有者或操作者时执行。

ApproveAll{operator, expires} - 授予 operator 转移或发送 env.sender 拥有的所有代币的权限。此批准与所有者相关,而不是与代币相关,并且适用于所有者将来收到的任何代币。

RevokeAll{operator} - 撤销之前授予指定 operatorApproveAll 权限。

查询

OwnerOf{token_id, include_expired} - 返回指定代币的所有者以及拥有此特定代币批准的任何人。如果代币未知,则返回错误。返回类型是 OwnerOfResponse。如果设置了 include_expired,则显示结果中的过期所有者,否则忽略它们。

Approval{token_id, spender, include_expired} - 返回关于指定 token_idspender 的批准。返回类型是 ApprovalResponse。如果设置了 include_expired,则显示结果中的过期所有者,否则忽略它们。

Approvals{token_id, include_expired} - 返回所有者给予访问权限的所有批准。返回类型是 ApprovalsResponse。如果设置了 include_expired,则显示结果中的过期所有者,否则忽略它们。

AllOperators{owner, include_expired, start_after, limit} - 列出可以访问所有所有者代币的所有操作员。返回类型是 OperatorsResponse。如果设置了 include_expired,则在结果中显示已过期的所有者,否则忽略它们。如果设置了 start_after,则返回给定操作员之后的第一 limit 个操作员。

NumTokens{} - 发行的代币总数

接收者

SendNft 的对应函数是 ReceiveNft,任何希望管理 CW721 代币的合约都必须实现该函数。这通常 由任何 CW721 合约实现。

ReceiveNft{sender, token_id, msg} - 该函数用于处理 SendNft 消息。合约的地址存储在 env.sender 中,因此无法伪造。合约应确保发送者匹配它期望处理的代币合约,并且不允许任意地址。

sender 是请求移动代币的原始账户,msg 是可以解码为特定合约消息的 Binary 数据。这可能为空,如果我们只有一个默认操作,或者它可能是一个 ReceiveMsg 变体,以明确意图。例如,如果我们发送到一个交易所,我们可以指定我们想要列出代币的价格。

元数据

查询

ContractInfo{} - 该函数返回关于合约的高级元数据。即,namesymbol

NftInfo{token_id} - 该函数返回特定代币的元数据。返回值基于 ERC721 Metadata JSON Schema,但直接来自合约,而不是作为 Uri。只有图像链接是 Uri。

AllNftInfo{token_id} - 该函数返回 NftInfoOwnerOf 的结果,作为一个查询返回,作为客户端的优化,客户端可能想要显示一个 NFT 的信息。

可枚举

查询

分页是通过 start_afterlimit 实现的。限制是客户端设置的请求,如果未设置,合约将自动将其设置为 DefaultLimit(建议 10)。如果设置了,它将使用到 MaxLimit 值(建议 30)。合约可以定义其他 DefaultLimitMaxLimit 值,而不违反 CW721 规范,客户端不应依赖于任何特定值。

如果未设置 start_after,则查询返回第一个结果,按 token_id 顺序排列。如果设置了 start_after,则返回给定一个之后的第一个 limit 个代币。这允许通过取返回的最后结果(一个 token_id)并使用它作为未来查询中的 start_after 值来实现简单的分页。

Tokens{owner, start_after, limit} - 列出属于指定所有者的所有token_ids。返回类型是 TokensResponse{tokens: Vec<token_id>}

AllTokens{start_after, limit} - 需要分页。列出由合约控制的全部token_ids。

依赖项

~4-6MB
~125K SLoC