From ae7e62bcb4c32e9ea11689c846ff8ecfe2f74a5e Mon Sep 17 00:00:00 2001 From: Felipe Gonzalez Date: Mon, 2 Mar 2026 17:33:38 -0300 Subject: [PATCH] chore: Update u5c to 0.18.1 --- Cargo.lock | 12 ++++++------ balius-runtime/Cargo.toml | 2 +- balius-runtime/src/lib.rs | 1 + balius-runtime/src/submit/u5c.rs | 25 +++++++++++-------------- balius-runtime/tests/e2e.rs | 2 +- balius-runtime/tests/u5c-chainsync.rs | 16 ++++++++++------ balius-runtime/tests/u5c-ledger.rs | 14 ++++++++------ balius-sdk/Cargo.toml | 2 +- balius-sdk/src/qol.rs | 17 +++++++++++++++++ balius-sdk/src/txbuilder/dsl.rs | 17 ++++++++++++++++- examples/wallet/offchain/src/lib.rs | 2 +- 11 files changed, 73 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c714cb..4455efa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -321,7 +321,7 @@ dependencies = [ "tracing", "tracing-subscriber", "url", - "utxorpc-spec 0.16.0", + "utxorpc-spec 0.18.1", "wit-bindgen", ] @@ -4088,15 +4088,15 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utxorpc" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60b6baab3e86e71acf144ebfe97263f22eddcf2707d19fca5ffdaeeea95e96f" +checksum = "6a7693fb6cd3db60ea90f87a4445d0fc572dd8bbdb541fc68a32337c0a275e44" dependencies = [ "bytes", "thiserror 2.0.12", "tokio", "tonic", - "utxorpc-spec 0.17.0", + "utxorpc-spec 0.18.1", ] [[package]] @@ -4133,9 +4133,9 @@ dependencies = [ [[package]] name = "utxorpc-spec" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d984ee351b308377e118135e638a5d544fdb0855f12a3b088d9dcaf0432052" +checksum = "e59de89d0dfd8e594377b53a8f67a10de01bb63b15b169248760188fa06fb92a" dependencies = [ "bytes", "futures-core", diff --git a/balius-runtime/Cargo.toml b/balius-runtime/Cargo.toml index 4b01bf1..6b04d6a 100644 --- a/balius-runtime/Cargo.toml +++ b/balius-runtime/Cargo.toml @@ -23,7 +23,7 @@ tracing = "0.1.40" hex = "0.4.3" itertools = "0.14.0" async-trait = "0.1.83" -utxorpc = { version = "0.12.0" } +utxorpc = { version = "0.13.0" } # utxorpc = { path = "../../../utxorpc/rust-sdk" } tokio-util = "0.7.12" prost = "0.13" diff --git a/balius-runtime/src/lib.rs b/balius-runtime/src/lib.rs index 89bce96..cda6191 100644 --- a/balius-runtime/src/lib.rs +++ b/balius-runtime/src/lib.rs @@ -290,6 +290,7 @@ impl Block { slot: block.header.as_ref().unwrap().slot, hash: block.header.as_ref().unwrap().hash.clone(), height: block.header.as_ref().unwrap().height, + timestamp: block.timestamp, }), } } diff --git a/balius-runtime/src/submit/u5c.rs b/balius-runtime/src/submit/u5c.rs index 683eef6..6cd9b47 100644 --- a/balius-runtime/src/submit/u5c.rs +++ b/balius-runtime/src/submit/u5c.rs @@ -30,21 +30,18 @@ impl Submit { } pub async fn submit_tx(&mut self, tx: wit::Cbor) -> Result<(), wit::SubmitError> { - self.client - .submit_tx(vec![tx]) - .await - .map_err(|err| match err { - utxorpc::Error::GrpcError(status) => { - let code: i32 = status.code().into(); - if code == 3 { - wit::SubmitError::Invalid(status.to_string()) - } else { - wit::SubmitError::Internal(status.to_string()) - } + self.client.submit_tx(tx).await.map_err(|err| match err { + utxorpc::Error::GrpcError(status) => { + let code: i32 = status.code().into(); + if code == 3 { + wit::SubmitError::Invalid(status.to_string()) + } else { + wit::SubmitError::Internal(status.to_string()) } - utxorpc::Error::TransportError(err) => wit::SubmitError::Internal(err.to_string()), - utxorpc::Error::ParseError(err) => wit::SubmitError::Internal(err.to_string()), - })?; + } + utxorpc::Error::TransportError(err) => wit::SubmitError::Internal(err.to_string()), + utxorpc::Error::ParseError(err) => wit::SubmitError::Internal(err.to_string()), + })?; Ok(()) } } diff --git a/balius-runtime/tests/e2e.rs b/balius-runtime/tests/e2e.rs index 0c64931..330fd02 100644 --- a/balius-runtime/tests/e2e.rs +++ b/balius-runtime/tests/e2e.rs @@ -43,7 +43,7 @@ async fn faucet_claim() { let store = Store::open("tests/balius.db", None).unwrap(); - let mut runtime = Runtime::builder(store) + let runtime = Runtime::builder(store) .with_ledger(ledgers::mock::Ledger.into()) .build() .unwrap(); diff --git a/balius-runtime/tests/u5c-chainsync.rs b/balius-runtime/tests/u5c-chainsync.rs index a1b0548..f04ba02 100644 --- a/balius-runtime/tests/u5c-chainsync.rs +++ b/balius-runtime/tests/u5c-chainsync.rs @@ -1,5 +1,6 @@ #![cfg(test)] -#![cfg(feature = "utxorpc")] + +use std::collections::HashMap; use balius_runtime::{drivers, Runtime, Store}; use serde_json::json; @@ -8,21 +9,24 @@ use tokio_util::sync::CancellationToken; #[tokio::test] async fn wallet_balance() { let store = Store::open("tests/balius.db", None).unwrap(); - - let mut runtime = Runtime::builder(store).build().unwrap(); - + let runtime = Runtime::builder(store).build().unwrap(); let config = json!({ "address": "addr1qx2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3n0d3vllmyqwsx5wktcd8cc3sq835lu7drv2xwl2wywfgse35a3x" }); + let wasm = std::fs::read("tests/wallet.wasm").unwrap(); runtime - .register_worker("wallet", "tests/wallet.wasm", config) + .register_worker("wallet", &wasm, config) .await .unwrap(); let chainsync_config = drivers::chainsync::Config { endpoint_url: "https://mainnet.utxorpc-v0.demeter.run".to_string(), - api_key: "dmtr_utxorpc1wgnnj0qcfj32zxsz2uc8d4g7uclm2s2w".to_string(), + headers: Some(HashMap::from([( + "api-key".to_string(), + "dmtr_utxorpc1wgnnj0qcfj32zxsz2uc8d4g7uclm2s2w".to_string(), + )])), + // api_key: "dmtr_utxorpc1wgnnj0qcfj32zxsz2uc8d4g7uclm2s2w".to_string(), }; drivers::chainsync::run(chainsync_config, runtime, CancellationToken::new()) diff --git a/balius-runtime/tests/u5c-ledger.rs b/balius-runtime/tests/u5c-ledger.rs index bd319b5..f9c8aba 100644 --- a/balius-runtime/tests/u5c-ledger.rs +++ b/balius-runtime/tests/u5c-ledger.rs @@ -1,21 +1,22 @@ #![cfg(test)] -#![cfg(feature = "utxorpc")] use balius_runtime::{ledgers, Runtime, Store}; use serde_json::json; +use std::collections::HashMap; #[tokio::test] async fn faucet_claim() { let store = Store::open("tests/balius.db", None).unwrap(); - - let ledger = ledgers::u5c::Ledger::new(ledgers::u5c::Config { + let ledger = ledgers::u5c::Ledger::new(&ledgers::u5c::Config { endpoint_url: "https://mainnet.utxorpc-v0.demeter.run".to_string(), - api_key: "dmtr_utxorpc1wgnnj0qcfj32zxsz2uc8d4g7uclm2s2w".to_string(), + headers: Some(HashMap::from([ + ("api-key".to_string(), "dmtr_utxorpc1wgnnj0qcfj32zxsz2uc8d4g7uclm2s2w".to_string()), + ])), }) .await .unwrap(); - let mut runtime = Runtime::builder(store) + let runtime = Runtime::builder(store) .with_ledger(ledger.into()) .build() .unwrap(); @@ -31,8 +32,9 @@ async fn faucet_claim() { } }); + let wasm = std::fs::read("tests/faucet.wasm").unwrap(); runtime - .register_worker("faucet", "tests/faucet.wasm", config) + .register_worker("faucet", &wasm, config) .await .unwrap(); diff --git a/balius-sdk/Cargo.toml b/balius-sdk/Cargo.toml index 9ce46f3..e2da144 100644 --- a/balius-sdk/Cargo.toml +++ b/balius-sdk/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://github.com/txpipe/balius" readme = "README.md" [dependencies] -utxorpc-spec = { version = "0.16.0", features = ["ledgers"], default-features = false } +utxorpc-spec = { version = "0.18.1", features = ["ledgers"], default-features = false } balius-macros = { version = "0.5.2", path = "../balius-macros" } hex = "0.4.3" pallas-addresses = { version = "0.32.0" } diff --git a/balius-sdk/src/qol.rs b/balius-sdk/src/qol.rs index be23e54..549331e 100644 --- a/balius-sdk/src/qol.rs +++ b/balius-sdk/src/qol.rs @@ -281,6 +281,23 @@ pub struct Utxo { pub datum: Option, } +impl Utxo { + pub fn coin(&self) -> u64 { + self.utxo + .coin + .as_ref() + .and_then(|x| { + x.big_int.as_ref().and_then(|y| match y { + utxorpc_spec::utxorpc::v1alpha::cardano::big_int::BigInt::Int(z) => { + Some(*z as u64) + } + _ => None, + }) + }) + .unwrap_or_default() + } +} + impl TryFrom for Utxo { type Error = Error; diff --git a/balius-sdk/src/txbuilder/dsl.rs b/balius-sdk/src/txbuilder/dsl.rs index 20fb181..e12535b 100644 --- a/balius-sdk/src/txbuilder/dsl.rs +++ b/balius-sdk/src/txbuilder/dsl.rs @@ -340,7 +340,22 @@ impl ValueExpr for MinUtxoLovelace { }; let serialized = pallas_codec::minicbor::to_vec(parent).unwrap(); - let min_lovelace = (160u64 + serialized.len() as u64) * ctx.pparams.coins_per_utxo_byte; + let coins_per_utxo_byte = ctx + .pparams + .coins_per_utxo_byte + .as_ref() + .and_then(|x| { + x.big_int.as_ref().and_then(|y| match y { + utxorpc_spec::utxorpc::v1alpha::cardano::big_int::BigInt::Int(z) => { + Some(*z as u64) + } + _ => None, + }) + }) + .ok_or(BuildError::LedgerError( + "Missing coins_per_utxo_byte protocol parameter".to_string(), + ))?; + let min_lovelace = (160u64 + serialized.len() as u64) * coins_per_utxo_byte; let current_value = match parent { conway::PseudoTransactionOutput::PostAlonzo(x) => &x.value, _ => unimplemented!(), diff --git a/examples/wallet/offchain/src/lib.rs b/examples/wallet/offchain/src/lib.rs index d61fe13..2230bd2 100644 --- a/examples/wallet/offchain/src/lib.rs +++ b/examples/wallet/offchain/src/lib.rs @@ -42,7 +42,7 @@ fn handle_utxo(_: Config, utxo: Utxo) -> WorkerResult let balances = BalanceTable::new("balances".to_string()); balances - .set(&hex::encode(&utxo.utxo.address), utxo.utxo.coin) + .set(&hex::encode(&utxo.utxo.address), utxo.coin()) .unwrap(); Ok(Ack)