use ccl::providers::ChainDataProvider;
use ccl::{Bridge, Result};
use serde_json::Value;
use std::fs;
use std::path::Path;
struct LocalProvider {
utxos: Value,
params: Value,
}
impl ChainDataProvider for LocalProvider {
fn utxos(&self, _address: &str) -> Result<Value> {
Ok(self.utxos.clone())
}
fn protocol_params(&self) -> Result<Value> {
Ok(self.params.clone())
}
}
fn main() -> Result<()> {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-fixtures/plutus-mint-scalus");
let yaml = fs::read_to_string(dir.join("mint.yaml")).expect("mint.yaml");
let utxos: Value =
serde_json::from_str(&fs::read_to_string(dir.join("utxos.json")).expect("utxos.json"))
.expect("parse utxos");
let params: Value = serde_json::from_str(
&fs::read_to_string(dir.join("protocol-params.json")).expect("protocol-params.json"),
)
.expect("parse params");
let sender = utxos[0]["address"].as_str().expect("sender address").to_string();
let provider = LocalProvider { utxos, params };
let bridge = Bridge::new()?;
let result = bridge
.quicktx()
.build_with(&yaml, &provider, &sender, None)?;
println!(
"offline (Scalus) — fee: {} tx_hash: {}",
result.fee, result.tx_hash
);
Ok(())
}