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 神奇豆子
1,369 每月下载量
在 10 个crate中使用(4个直接使用)
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