#ethereum #icp #dfinity #bindings-generator #web3 #rpc

ic-solidity-bindgen

生成用于 Solidity 合约的绑定。底层使用 web3。这是 graphprotocol/solidity-bindgen 的分支。

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

Download history 379/week @ 2024-04-28 9/week @ 2024-05-05 80/week @ 2024-05-12 216/week @ 2024-05-19 3/week @ 2024-05-26 22/week @ 2024-06-02 27/week @ 2024-06-09 57/week @ 2024-06-16 18/week @ 2024-06-23 8/week @ 2024-06-30 19/week @ 2024-07-07 14/week @ 2024-07-14 60/week @ 2024-07-28

每月 65 次下载

MIT 许可证

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