47个不稳定版本

0.25.7 2024年5月15日
0.25.5 2024年2月22日
0.25.4 2023年11月24日
0.25.0 2023年7月13日
0.2.0 2019年12月20日

#2371 in 神奇豆子

Download history 432/week @ 2024-04-17 353/week @ 2024-04-24 304/week @ 2024-05-01 230/week @ 2024-05-08 556/week @ 2024-05-15 238/week @ 2024-05-22 226/week @ 2024-05-29 254/week @ 2024-06-05 414/week @ 2024-06-12 329/week @ 2024-06-19 412/week @ 2024-06-26 506/week @ 2024-07-03 469/week @ 2024-07-10 174/week @ 2024-07-17 154/week @ 2024-07-24 488/week @ 2024-07-31

1,369 每月下载量
10 个crate中使用(4个直接使用)

MIT/Apache

160KB
3.5K SLoC

ethcontract-generate

build.rs脚本生成类型安全合约绑定的替代API。使用此方法而不是过程宏有几个优点

  • 与RLS和Racer的良好集成,以支持自动完成;
  • 能够检查生成的代码。

使用生成器API的缺点是需要有构建脚本而不是宏调用。

入门指南

使用crate需要两个依赖项 - 一个用于运行时,一个用于生成器

[dependencies]
ethcontract = { version = "...", default-features = false }

[build-dependencies]
ethcontract-generate = "..."

建议保持两个版本同步,否则可能会出现意外的行为。

然后,在您的build.rs中包含以下代码

use ethcontract_generate::loaders::TruffleLoader;
use ethcontract_generate::ContractBuilder;

fn main() {
    // Prepare filesystem paths.
    let out_dir = std::env::var("OUT_DIR").unwrap();
    let dest = std::path::Path::new(&out_dir).join("rust_coin.rs");
    
    // Load a contract.
    let contract = TruffleLoader::new()
        .load_contract_from_file("../build/Contract.json")
        .unwrap();
    
    // Generate bindings for it.
    ContractBuilder::new()
        .generate(&contract)
        .unwrap()
        .write_to_file(dest)
        .unwrap();
}

ethcontract-derive的关系

ethcontract-derive在内部使用ethcontract-generate,因此它们生成的绑定应该相同,只是提供了不同的API来执行相同的功能。

此项目的长期目标是维护ethcontract-derive。目前没有将其拆分为两个单独crate的额外工作。话虽如此,如果RLS对过程宏生成的代码支持改进,那么只要没有充分的理由保留它,这个crate可能会被弃用,以支持ethcontract-derive

依赖项

~6–16MB
~217K SLoC