#bindings-generator #generate #contracts #type-safe #ethereum #generation #generated-bindings

ethcontract-generate-fork

用于生成类型安全的以太坊智能合约绑定代码

1 个不稳定版本

0.25.6 2024年5月14日

#2651魔法豆

每月 23 次下载
ethcontract-derive-fork 中使用

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
~222K SLoC