use std::time::{SystemTime, UNIX_EPOCH};
use std::sync::{Arc,Mutex};
use std::{mem};
-use std::collections::HashMap;
+use std::collections::{HashMap, HashSet};
pub struct TestVecWriter(pub Vec<u8>);
impl Writer for TestVecWriter {
pub struct TestBroadcaster {
pub txn_broadcasted: Mutex<Vec<Transaction>>,
+ pub broadcasted_txn: Mutex<HashSet<Sha256dHash>> // Temporary field while refactoring out tx duplication
}
impl chaininterface::BroadcasterInterface for TestBroadcaster {
fn broadcast_transaction(&self, tx: &Transaction) {
+ {
+ if let Some(_) = self.broadcasted_txn.lock().unwrap().get(&tx.txid()) {
+ // If commitment tx, HTLC-timeout or HTLC-Success, duplicate broadcast are still ok
+ if tx.input[0].sequence == 0xfffffffd {
+ return;
+ }
+ }
+ }
+ self.broadcasted_txn.lock().unwrap().insert(tx.txid());
self.txn_broadcasted.lock().unwrap().push(tx.clone());
}
}
fn get_node_secret(&self) -> SecretKey { self.backing.get_node_secret() }
fn get_destination_script(&self) -> Script { self.backing.get_destination_script() }
fn get_shutdown_pubkey(&self) -> PublicKey { self.backing.get_shutdown_pubkey() }
- fn get_channel_keys(&self, inbound: bool) -> EnforcingChannelKeys { EnforcingChannelKeys::new(self.backing.get_channel_keys(inbound)) }
+ fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> EnforcingChannelKeys {
+ EnforcingChannelKeys::new(self.backing.get_channel_keys(inbound, channel_value_satoshis))
+ }
fn get_onion_rand(&self) -> (SecretKey, [u8; 32]) {
match *self.override_session_priv.lock().unwrap() {