2 个不稳定版本
0.2.0 | 2024 年 5 月 14 日 |
---|---|
0.1.0 | 2024 年 3 月 28 日 |
#14 在 #casper
120 每月下载量
在 5 个 crates 中使用 (通过 odra-schema)
16KB
271 行
Casper 合同 Schema
欢迎来到我们的 Casper 合同 Schema 仓库!这是我们构建连接智能合约与 Casper 网络的标准方式的地方。这一切都是为了使区块链应用更好地协同工作,我们需要您的帮助使其更加完善。使用 Casper 合同 Schema 意味着您的区块链项目将更加兼容,并且更容易开发。
您可以如何帮助
我们正在寻找对 Schema 的反馈,并期待您的意见。如果您有任何想法、建议或问题,请提交一个问题或拉取请求。
示例
请参阅 erc20_schema.json 和 dns_schema.json 以了解示例用法。
在代码更改后更新 Schema,请运行
$ just update-schema
Schema 格式
以下是 Schema 格式的粗略描述。
根
Schema 的根是一个具有以下属性的对象
casper_contract_schema_version
- Schema 的版本。toolchain
- 编译合约使用的工具链。authors
- 合约作者的列表。repository
- 可选的仓库 URL。homepage
- 可选的项目主页 URL。contract_name
- 合约的名称。contract_version
- 合约的版本。types
- 在entry_points
和events
中使用的自定义类型列表。errors
- 用户定义的错误列表。entry_points
- 入口点列表。events
- 事件列表。call
- 描述call
方法的可选部分。不存在时为null
。
类型
类型部分用于定义在 entry_points
和 events
中自定义的所有类型。自定义类型可以由 CLTypes 和其他自定义类型构成。
有两种类型的类型
struct
- 代表具有字段列表的结构化数据。enum
- 代表具有字段列表的枚举类型。定义变体时有三种模式单个未命名字段
- 带有单个未命名字段的变体按原样编码,多个未命名字段
- 带有多个未命名字段的变体打包成一个元组,命名字段
- 带有命名字段的变体按结构体编码。
入口点、参数、结构体、结构体的成员和枚举都有一个 description
字段。它可以是字符串或 null
。
可以添加许多具有相同名称的参数。然后所有这些都必须标记为 optional
。由契约决定使用哪个。
有关所有示例,请参阅 dns_schema.json。
Casper 2.0 不再计划使用 CLType 格式。但是,它仍然应该在这里使用,因为 CLType 已经在所有 SDK 中实现。对于 2.0,我们可能准备下一个具有不同类型格式的版本。
递归类型
可以在模式中定义递归类型。例如,链表。如何处理无限递归由实现决定。我们建议将递归限制在合理的深度。
入口点
入口点是可以在合约上调用的函数。每个入口点有以下属性
name
- 入口点的名称。description
- 入口点的描述。is_mutable
- 入口点是否可变。arguments
- 入口点的命名参数列表。return_ty
- 入口点的返回类型。is_contract_context
:如果为true
,则为合约上下文,否则为会话上下文。access
- 入口点的访问控制。可以是public
或带有组列表的group
。
错误
错误是合约可能回退的自定义错误列表。每个错误有以下属性
name
- 错误的名称。description
- 错误的描述。discriminant
- 错误的区分符。
事件
事件是命名类型的列表。每个事件有以下属性
name
- 事件的名称。ty
- 事件的类型。
它旨在允许以不同的名称重用相同的类型。
依赖关系
~10MB
~207K SLoC