#smart-contracts #parser #blockchain #contract #string #slice #scilla

scilla-parser

Scilla 智能合约解析器,用 Rust 语言编写

12 个版本 (1 个稳定版)

1.0.0 2024年1月9日
0.11.0 2024年1月9日
0.10.0 2023年12月25日

#16 in 魔法豆

Download history 54/week @ 2024-03-13 3/week @ 2024-03-27 4/week @ 2024-04-03 35/week @ 2024-04-24 210/week @ 2024-05-01 311/week @ 2024-05-08 252/week @ 2024-05-15 288/week @ 2024-05-22 374/week @ 2024-05-29 180/week @ 2024-06-05 216/week @ 2024-06-12 290/week @ 2024-06-19 203/week @ 2024-06-26

942 每月下载次数
用于 zilliqa-rs

MIT 许可证

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 文件。有两种选项

  1. 使用 Contract::parse 并传递合约路径。
  2. 解析包含 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