diff --git a/Cargo.lock b/Cargo.lock index 5bf24e7..311704e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1078,6 +1078,7 @@ name = "firefly-balius" version = "0.1.0" dependencies = [ "balius-sdk", + "serde", ] [[package]] diff --git a/firefly-balius/Cargo.toml b/firefly-balius/Cargo.toml index f02b513..7682241 100644 --- a/firefly-balius/Cargo.toml +++ b/firefly-balius/Cargo.toml @@ -6,3 +6,4 @@ repository = "https://github.com/blockfrost/firefly-cardano" [dependencies] balius-sdk = { git = "https://github.com/txpipe/balius.git", rev = "a72601f" } +serde = { version = "1", features = ["derive"] } diff --git a/firefly-balius/src/lib.rs b/firefly-balius/src/lib.rs index a85c8e4..213d688 100644 --- a/firefly-balius/src/lib.rs +++ b/firefly-balius/src/lib.rs @@ -1,6 +1,7 @@ use balius_sdk::txbuilder::{ primitives::TransactionInput, BuildContext, BuildError, InputExpr, UtxoSource, }; +use serde::Deserialize; pub struct CoinSelectionInput(pub UtxoSource, pub u64); @@ -43,3 +44,9 @@ impl InputExpr for CoinSelectionInput { } } } + +#[derive(Deserialize)] +pub struct SubmittedTx { + pub method: String, + pub hash: String, +} diff --git a/firefly-cardanoconnect/src/contracts.rs b/firefly-cardanoconnect/src/contracts.rs index 6f1cf13..86c0fe5 100644 --- a/firefly-cardanoconnect/src/contracts.rs +++ b/firefly-cardanoconnect/src/contracts.rs @@ -99,6 +99,17 @@ impl ContractManager { } } + pub async fn handle_submit(&self, contract: &str, method: &str, tx_id: &str) { + let params = serde_json::json!({ + "method": method, + "hash": tx_id, + }); + let runtime = self.get_contract_runtime(contract).await; + let mut lock = runtime.lock().await; + + let _: Result<_, _> = lock.invoke("__tx_submitted", params).await; + } + pub async fn listen(&self, listener: &Listener) -> ContractListener { let contracts = find_contract_names(&listener.filters); let mut runtimes = vec![]; diff --git a/firefly-cardanoconnect/src/operations/manager.rs b/firefly-cardanoconnect/src/operations/manager.rs index 95e1773..66c12e5 100644 --- a/firefly-cardanoconnect/src/operations/manager.rs +++ b/firefly-cardanoconnect/src/operations/manager.rs @@ -83,7 +83,9 @@ impl OperationsManager { } }; if let Some(tx) = value { - op.tx_id = Some(self.submit_transaction(from, tx).await?); + let tx_id = self.submit_transaction(from, tx).await?; + op.tx_id = Some(tx_id.clone()); + self.contracts.handle_submit(contract, method, &tx_id).await; } op.status = OperationStatus::Succeeded; diff --git a/wasm/simple-tx/Cargo.lock b/wasm/simple-tx/Cargo.lock index c232a9a..b9295c8 100644 --- a/wasm/simple-tx/Cargo.lock +++ b/wasm/simple-tx/Cargo.lock @@ -302,6 +302,7 @@ name = "firefly-balius" version = "0.1.0" dependencies = [ "balius-sdk", + "serde", ] [[package]]