#token #nft #cw721 #cosmwasm #contract #type #soulbound

cw721-soulbound

CosmWasm-721 NFT接口的定义和类型

3 个稳定版本

1.0.2 2024年5月16日

#11 in #cw721

Download history 294/week @ 2024-05-13 27/week @ 2024-05-20 5/week @ 2024-06-03 4/week @ 2024-06-10 14/week @ 2024-07-01 64/week @ 2024-07-29

每月 64 次下载
用于 cw721-base-soulbound

Apache-2.0

18KB
275

CW721规范(soulbound):非同质化代币

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

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

通过移除转让和发送能力来实现soulbound代币。

基础

这处理所有权和允许。所有CW721合约都必须以这种方式支持。请注意,所有代币都必须有一个所有者和ID。ID是合同内唯一的任意字符串。

消息

Approve{spender, token_id, expires} - 授予 spender 作为给定代币的支出者的权限。这只能在 env.sender 是给定 token_id 的所有者或操作者时执行。由于代币是soulbound,这允许批准的支出者 Burn

Revoke{spender, token_id} - 这撤销了之前授予的 Burn 给定 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{} - 发行代币总数

查询

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_id。返回类型是 TokensResponse{tokens: Vec<token_id>}

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

依赖

~4-6MB
~125K SLoC