Crates.io | ic-solidity-bindgen |
lib.rs | ic-solidity-bindgen |
version | 0.1.16 |
source | src |
created_at | 2023-06-05 08:19:23.681852 |
updated_at | 2024-05-22 07:25:11.476163 |
description | Generates bindings for solidity contracts. Uses web3 under the hood. This is a fork of graphprotocol/solidity-bindgen |
homepage | |
repository | |
max_upload_size | |
id | 882886 |
size | 16,630 |
This is a tool to generate Rust bindings for Solidity contracts to use with the Internet Computer.
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
}