1 个不稳定版本
0.25.6 | 2024年5月14日 |
---|
#2651 在 魔法豆
每月 23 次下载
在 ethcontract-derive-fork 中使用
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