16 个版本
0.1.16 | 2024 年 5 月 22 日 |
---|---|
0.1.15 | 2024 年 5 月 1 日 |
0.1.14 | 2024 年 4 月 30 日 |
0.1.12 | 2024 年 3 月 5 日 |
0.1.5 | 2023 年 6 月 9 日 |
#33 in #icp
每月 65 次下载
17KB
362 行
ic-solidity-bindgen
这是一个生成 Rust 绑定以与互联网计算机一起使用 Solidity 合约的工具。
使用方法
contract_abis!("../abi");
thread_local! {
static ORACLE_ADDRESSES: RefCell<BTreeMap<SupportedNetwork,Address>> = RefCell::new(BTreeMap::new());
}
#[update]
#[candid_method(update)]
async fn set_value(symbol: String, value: WrappedU256) {
struct Dist {
nw: SupportedNetwork,
addr: Address,
}
for d in ORACLE_ADDRESSES.with(|addresses| {
addresses
.borrow()
.iter()
.map(|(&k, &v)| Dist { nw: k, addr: v })
.collect::<Vec<Dist>>()
}) {
let context = ctx(d.nw).unwrap();
let oracle = IPriceOracle::new(d.addr.clone(), &context); // This is the generated binding
let res = oracle
.set_price(
symbol.to_string().clone(),
value.value(),
Some(call_options()),
)
.await.unwrap();
ic_cdk::println!("set_value: {:?}", res);
}
}
fn call_options() -> Options {
let call_options = CallOptionsBuilder::default()
.transform(Some(TransformContext {
function: TransformFunc(candid::Func {
principal: ic_cdk::api::id(),
method: "transform_request".to_string(),
}),
context: vec![],
}))
.max_resp(None)
.cycles(None)
.build()
.unwrap();
let mut opts = Options::default();
opts.call_options = Some(call_options);
opts
}
依赖关系
~7–16MB
~206K SLoC