Skip to content

Commit 224ed3b

Browse files
committed
generalize output pattern monitoring for RSK pegin transactions
1 parent bf32e0f commit 224ed3b

File tree

4 files changed

+39
-21
lines changed

4 files changed

+39
-21
lines changed

examples/union/participants/user.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use bitvmx_client::{
3030
variables::PartialUtxo,
3131
},
3232
spv_proof::BtcTxSPVProof,
33-
types::OutgoingBitVMXApiMessages::*,
33+
types::{OutgoingBitVMXApiMessages::*, OutputPatternFilter},
3434
};
3535

3636
const KEY_SPEND_FEE: u64 = 135;
@@ -106,9 +106,16 @@ impl User {
106106
) -> Result<(Txid, Transaction)> {
107107
info!(id = self.id, "Requesting pegin");
108108

109-
// Enable RSK pegin monitoring using the public API
109+
// Enable output pattern monitoring for RSK pegin transactions
110110
//TOOD: Define proper confirmation threshold
111-
self.bitvmx.subscribe_to_rsk_pegin(Some(1))?;
111+
self.bitvmx.subscribe_to_output_pattern(
112+
OutputPatternFilter {
113+
output_index: 1,
114+
tag: b"RSK_PEGIN".to_vec(),
115+
max_outputs: None,
116+
},
117+
Some(1),
118+
)?;
112119

113120
// Create a proper RSK pegin transaction and send it as if it was a user transaction
114121
let packet_number = 0;
@@ -145,8 +152,8 @@ impl User {
145152
request_pegin_txid
146153
);
147154

148-
// Wait for Bitvmx news PeginTransactionFound message
149-
let (_, _) = wait_until_msg!(&self.bitvmx, PeginTransactionFound(_txid, _tx_status) => (_txid, _tx_status));
155+
// Wait for Bitvmx news OutputPatternTransactionFound message
156+
let (_, _, _) = wait_until_msg!(&self.bitvmx, OutputPatternTransactionFound(_txid, _tx_status, _tag) => (_txid, _tx_status, _tag));
150157
info!("RSK request pegin completed");
151158
info!("Waiting for SPV proof...");
152159

src/bitvmx.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -609,14 +609,19 @@ impl BitVMX {
609609
context_data,
610610
));
611611
}
612-
MonitorNews::RskPeginTransaction(tx_id, tx_status) => {
612+
MonitorNews::OutputPatternTransaction(tx_id, tx_status, tag) => {
613613
let data = serde_json::to_string(
614-
&OutgoingBitVMXApiMessages::PeginTransactionFound(tx_id, tx_status),
614+
&OutgoingBitVMXApiMessages::OutputPatternTransactionFound(
615+
tx_id,
616+
tx_status,
617+
tag.clone(),
618+
),
615619
)?;
616620
self.program_context
617621
.broker_channel
618622
.send(&self.config.components.l2, data)?;
619-
ack_news = AckNews::Monitor(AckMonitorNews::RskPeginTransaction(tx_id));
623+
ack_news =
624+
AckNews::Monitor(AckMonitorNews::OutputPatternTransaction(tx_id, tag));
620625
}
621626
MonitorNews::NewBlock(block_height, block_hash) => {
622627
debug!("New block: {} {}", block_height, block_hash);
@@ -1232,14 +1237,14 @@ impl BitVMX {
12321237
Ok(())
12331238
}
12341239

1235-
fn subscribe_to_rsk_pegin(
1240+
fn subscribe_to_output_pattern(
12361241
&mut self,
1242+
filter: bitcoin_coordinator::OutputPatternFilter,
12371243
confirmation_threshold: Option<u32>,
12381244
) -> Result<(), BitVMXError> {
1239-
// Enable RSK pegin transaction monitoring
12401245
self.program_context
12411246
.bitcoin_coordinator
1242-
.monitor(TypesToMonitor::RskPegin(confirmation_threshold))?;
1247+
.monitor(TypesToMonitor::OutputPattern(filter, confirmation_threshold))?;
12431248
Ok(())
12441249
}
12451250

@@ -1496,8 +1501,8 @@ impl BitVMX {
14961501
txid,
14971502
confirmation_threshold,
14981503
) => self.subscribe_to_tx(from, uuid, txid, confirmation_threshold)?,
1499-
IncomingBitVMXApiMessages::SubscribeToRskPegin(confirmation_threshold) => {
1500-
self.subscribe_to_rsk_pegin(confirmation_threshold)?
1504+
IncomingBitVMXApiMessages::SubscribeToOutputPattern(filter, confirmation_threshold) => {
1505+
self.subscribe_to_output_pattern(filter, confirmation_threshold)?
15011506
}
15021507
IncomingBitVMXApiMessages::GetSPVProof(txid) => self.get_spv_proof(from, txid)?,
15031508

src/client.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::{
66
participant::CommsAddress,
77
variables::{VariableTypes, WitnessTypes},
88
},
9-
types::{IncomingBitVMXApiMessages, OutgoingBitVMXApiMessages},
9+
types::{IncomingBitVMXApiMessages, OutgoingBitVMXApiMessages, OutputPatternFilter},
1010
};
1111
use anyhow::Result;
1212
use bitcoin::{PublicKey, Transaction, Txid};
@@ -158,8 +158,13 @@ impl BitVMXClient {
158158
))
159159
}
160160

161-
pub fn subscribe_to_rsk_pegin(&self, confirmation_threshold: Option<u32>) -> Result<()> {
162-
self.send_message(IncomingBitVMXApiMessages::SubscribeToRskPegin(
161+
pub fn subscribe_to_output_pattern(
162+
&self,
163+
filter: OutputPatternFilter,
164+
confirmation_threshold: Option<u32>,
165+
) -> Result<()> {
166+
self.send_message(IncomingBitVMXApiMessages::SubscribeToOutputPattern(
167+
filter,
163168
confirmation_threshold,
164169
))
165170
}

src/types.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use crate::{
2828
variables::{Globals, VariableTypes, WitnessTypes, WitnessVars},
2929
},
3030
};
31+
pub use bitcoin_coordinator::OutputPatternFilter;
3132

3233
pub struct ProgramContext {
3334
pub key_manager: Rc<KeyManager>,
@@ -93,7 +94,7 @@ pub enum IncomingBitVMXApiMessages {
9394
GetHashedMessage(Uuid, String, u32, u32),
9495
Setup(ProgramId, String, Vec<CommsAddress>, u16),
9596
SubscribeToTransaction(Uuid, Txid, Option<u32>),
96-
SubscribeToRskPegin(Option<u32>),
97+
SubscribeToOutputPattern(OutputPatternFilter, Option<u32>),
9798
GetSPVProof(Txid),
9899
DispatchTransaction(Uuid, Transaction, Option<u32>),
99100
DispatchTransactionName(Uuid, String),
@@ -131,8 +132,8 @@ pub enum OutgoingBitVMXApiMessages {
131132
Pong(Uuid),
132133
// response for transaction get and dispatch
133134
Transaction(Uuid, TransactionStatus, Option<String>),
134-
// Represents when pegin transactions is found
135-
PeginTransactionFound(Txid, TransactionStatus),
135+
// Represents when a transaction matching a generic output pattern is found
136+
OutputPatternTransactionFound(Txid, TransactionStatus, Vec<u8>),
136137
// Represents when a spending utxo transaction is found
137138
SpendingUTXOTransactionFound(Uuid, Txid, u32, TransactionStatus),
138139
// Represents when a program is running out of funds
@@ -285,8 +286,8 @@ impl OutgoingBitVMXApiMessages {
285286
match self {
286287
OutgoingBitVMXApiMessages::Pong(_) => "Pong".to_string(),
287288
OutgoingBitVMXApiMessages::Transaction(_, _, _) => "Transaction".to_string(),
288-
OutgoingBitVMXApiMessages::PeginTransactionFound(_, _) => {
289-
"PeginTransactionFound".to_string()
289+
OutgoingBitVMXApiMessages::OutputPatternTransactionFound(_, _, _) => {
290+
"OutputPatternTransactionFound".to_string()
290291
}
291292
OutgoingBitVMXApiMessages::SpendingUTXOTransactionFound(_, _, _, _) => {
292293
"SpendingUTXOTransactionFound".to_string()

0 commit comments

Comments
 (0)