12 个版本 (1 个稳定版)
1.0.0 | 2024年1月9日 |
---|---|
0.11.0 | 2024年1月9日 |
0.10.0 | 2023年12月25日 |
#16 in 魔法豆
942 每月下载次数
用于 zilliqa-rs
165KB
3.5K SLoC
Scilla 解析器
此仓库包含用于 Scilla 智能合约语言的 Rust 解析器。 Scilla 是 Zilliqa 区块链中使用的智能合约语言。
安装
将以下内容添加到您的 Cargo.toml 中
[dependencies]
scilla_parser = "1.0.0"
或者,您可以运行以下命令
cargo add scilla_parser
这将按照上述安装说明将 scilla_parser 依赖项添加到 Cargo.toml 中。
用法
此库解析 .scilla 文件。有两种选项
- 使用
Contract::parse
并传递合约路径。 - 解析包含 Scilla 合约的字符串(切片)。
要解析 Scilla 文件
以下是解析 SendZil.scilla 合约的代码
let contract_path = PathBuf::from("tests/contracts/SendZil.scilla");
let contract = Contract::parse(&contract_path).unwrap();
assert_eq!(
contract,
Contract {
name: "SendZil".to_string(),
init_params: FieldList::default(),
fields: FieldList(vec![
Field::new("test_field", Type::Uint256),
Field::new("bool", Type::Bool),
Field::new("empty_bool", Type::Option(Box::new(Type::Bool))),
Field::new("some_int", Type::Option(Box::new(Type::Int32))),
Field::new(
"pair",
Type::Pair(Box::new(Type::String), Box::new(Type::Uint32))
),
Field::new("list", Type::List(Box::new(Type::Int32))),
]),
transitions: TransitionList(vec![
Transition::new_without_param("acceptZil"),
Transition::new(
"updateTestField",
FieldList(vec![Field::new("val", Type::Uint256)])
),
Transition::new_without_param("dontAcceptZil"),
Transition::new(
"fundUserWithTag",
FieldList(vec![
Field::new("user", Type::ByStr(20)),
Field::new("amount", Type::Uint128)
])
),
Transition::new(
"fundUser",
FieldList(vec![
Field::new("user", Type::ByStr(20)),
Field::new("amount", Type::Uint128)
])
),
Transition::new(
"fundContract",
FieldList(vec![
Field::new("contract_address", Type::ByStr(20)),
Field::new("amount", Type::Uint128)
])
),
Transition::new(
"callOtherContract",
FieldList(vec![
Field::new("contract_address", Type::ByStr(20)),
Field::new("tag", Type::String),
Field::new("value", Type::Uint256)
])
),
])
}
);
要解析包含 Scilla 合约的字符串
let contract_code: &str = "contract HelloWorld";
let contract: Contract = contract_code.parse().unwrap();
有关更多示例,请参阅 测试。
依赖项
~2.5–5.5MB
~90K SLoC