3 个稳定版本
1.0.2 | 2024年5月16日 |
---|
#11 in #cw721
每月 64 次下载
用于 cw721-base-soulbound
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}
- 撤销先前授予指定 operator
的 ApproveAll
权限。
查询
OwnerOf{token_id, include_expired}
- 返回给定代币的所有者以及任何对此特定代币有批准的人。如果代币未知,则返回错误。返回类型为 OwnerOfResponse
。如果 include_expired
被设置,则在结果中显示已过期的所有者,否则忽略它们。
Approval{token_id, spender, include_expired}
- 返回关于给定 token_id
的 spender
的批准。返回类型为 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{}
- 返回关于合约的顶层元数据。具体为 name
和 symbol
。
NftInfo{token_id}
- 返回关于一个特定代币的元数据。返回值基于 ERC721 Metadata JSON Schema,但直接来自合约,而不是作为 Uri。只有图片链接是 Uri。
AllNftInfo{token_id}
- 返回 NftInfo
和 OwnerOf
的结果,作为单个查询返回,作为对客户端的优化,这些客户端可能希望显示单个 NFT 的信息。
可枚举的
查询
分页是通过 start_after
和 limit
实现的。限制是由客户端设置的请求,如果未设置,合约将自动将其设置为 DefaultLimit
(建议 10)。如果设置,则将使用到 MaxLimit
值(建议 30)。合约可以定义其他 DefaultLimit
和 MaxLimit
值,而不会违反 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