mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-01-19 05:43:55 +01:00
Make confirmables
Deref
.. the bindings branch needed a small patch as it doesn't support `dyn` traits. Here, we opt to use `Deref` in the hopes this works with bindings, rendering the patch unnecessary.
This commit is contained in:
parent
2701bc512a
commit
777ce7b059
@ -4,6 +4,7 @@ use bitcoin::{Txid, BlockHash, Transaction, OutPoint};
|
||||
use bitcoin::block::Header;
|
||||
|
||||
use std::collections::{HashSet, HashMap};
|
||||
use std::ops::Deref;
|
||||
|
||||
|
||||
// Represents the current state.
|
||||
@ -33,10 +34,12 @@ impl SyncState {
|
||||
pending_sync: false,
|
||||
}
|
||||
}
|
||||
pub fn sync_unconfirmed_transactions(
|
||||
&mut self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>,
|
||||
pub fn sync_unconfirmed_transactions<C: Deref>(
|
||||
&mut self, confirmables: &Vec<C>,
|
||||
unconfirmed_txs: Vec<Txid>,
|
||||
) {
|
||||
)
|
||||
where C::Target: Confirm,
|
||||
{
|
||||
for txid in unconfirmed_txs {
|
||||
for c in confirmables {
|
||||
c.transaction_unconfirmed(&txid);
|
||||
@ -57,10 +60,12 @@ impl SyncState {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn sync_confirmed_transactions(
|
||||
&mut self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>,
|
||||
pub fn sync_confirmed_transactions<C: Deref>(
|
||||
&mut self, confirmables: &Vec<C>,
|
||||
confirmed_txs: Vec<ConfirmedTx>
|
||||
) {
|
||||
)
|
||||
where C::Target: Confirm,
|
||||
{
|
||||
for ctx in confirmed_txs {
|
||||
for c in confirmables {
|
||||
c.transactions_confirmed(
|
||||
|
@ -83,7 +83,9 @@ where
|
||||
/// [`ChainMonitor`]: lightning::chain::chainmonitor::ChainMonitor
|
||||
/// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
|
||||
/// [`Filter`]: lightning::chain::Filter
|
||||
pub fn sync(&self, confirmables: Vec<&(dyn Confirm + Sync + Send)>) -> Result<(), TxSyncError> {
|
||||
pub fn sync<C: Deref>(&self, confirmables: Vec<C>) -> Result<(), TxSyncError>
|
||||
where C::Target: Confirm
|
||||
{
|
||||
// This lock makes sure we're syncing once at a time.
|
||||
let mut sync_state = self.sync_state.lock().unwrap();
|
||||
|
||||
@ -378,9 +380,11 @@ where
|
||||
Ok(confirmed_txs)
|
||||
}
|
||||
|
||||
fn get_unconfirmed_transactions(
|
||||
&self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>,
|
||||
) -> Result<Vec<Txid>, InternalError> {
|
||||
fn get_unconfirmed_transactions<C: Deref>(
|
||||
&self, confirmables: &Vec<C>,
|
||||
) -> Result<Vec<Txid>, InternalError>
|
||||
where C::Target: Confirm
|
||||
{
|
||||
// Query the interface for relevant txids and check whether the relevant blocks are still
|
||||
// in the best chain, mark them unconfirmed otherwise
|
||||
let relevant_txids = confirmables
|
||||
|
@ -84,7 +84,9 @@ where
|
||||
/// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
|
||||
/// [`Filter`]: lightning::chain::Filter
|
||||
#[maybe_async]
|
||||
pub fn sync(&self, confirmables: Vec<&(dyn Confirm + Sync + Send)>) -> Result<(), TxSyncError> {
|
||||
pub fn sync<C: Deref>(&self, confirmables: Vec<C>) -> Result<(), TxSyncError>
|
||||
where C::Target: Confirm
|
||||
{
|
||||
// This lock makes sure we're syncing once at a time.
|
||||
#[cfg(not(feature = "async-interface"))]
|
||||
let mut sync_state = self.sync_state.lock().unwrap();
|
||||
@ -239,10 +241,11 @@ where
|
||||
}
|
||||
|
||||
#[maybe_async]
|
||||
fn sync_best_block_updated(
|
||||
&self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>, sync_state: &mut SyncState, tip_hash: &BlockHash,
|
||||
) -> Result<(), InternalError> {
|
||||
|
||||
fn sync_best_block_updated<C: Deref>(
|
||||
&self, confirmables: &Vec<C>, sync_state: &mut SyncState, tip_hash: &BlockHash,
|
||||
) -> Result<(), InternalError>
|
||||
where C::Target: Confirm
|
||||
{
|
||||
// Inform the interface of the new block.
|
||||
let tip_header = maybe_await!(self.client.get_header_by_hash(tip_hash))?;
|
||||
let tip_status = maybe_await!(self.client.get_block_status(&tip_hash))?;
|
||||
@ -369,9 +372,11 @@ where
|
||||
}
|
||||
|
||||
#[maybe_async]
|
||||
fn get_unconfirmed_transactions(
|
||||
&self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>,
|
||||
) -> Result<Vec<Txid>, InternalError> {
|
||||
fn get_unconfirmed_transactions<C: Deref>(
|
||||
&self, confirmables: &Vec<C>,
|
||||
) -> Result<Vec<Txid>, InternalError>
|
||||
where C::Target: Confirm
|
||||
{
|
||||
// Query the interface for relevant txids and check whether the relevant blocks are still
|
||||
// in the best chain, mark them unconfirmed otherwise
|
||||
let relevant_txids = confirmables
|
||||
|
Loading…
Reference in New Issue
Block a user