use util::logger::Logger;
use std::{cmp, fmt};
-use std::sync::RwLock;
+use std::sync::{RwLock, RwLockReadGuard};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::collections::BTreeMap;
use std::collections::btree_map::Entry as BtreeEntry;
nodes: BTreeMap<PublicKey, NodeInfo>,
}
+/// A simple newtype for RwLockReadGuard<'a, NetworkGraph>.
+/// This exists only to make accessing a RwLock<NetworkGraph> possible from
+/// the C bindings, as it can be done directly in Rust code.
+pub struct LockedNetworkGraph<'a>(pub RwLockReadGuard<'a, NetworkGraph>);
+
/// Receives and validates network updates from peers,
/// stores authentic and relevant data as a network graph.
/// This network graph is then used for routing payments.
logger,
}
}
+
+ /// Take a read lock on the network_graph and return it in the C-bindings
+ /// newtype helper. This is likely only useful when called via the C
+ /// bindings as you can call `self.network_graph.read().unwrap()` in Rust
+ /// yourself.
+ pub fn read_locked_graph<'a>(&'a self) -> LockedNetworkGraph<'a> {
+ LockedNetworkGraph(self.network_graph.read().unwrap())
+ }
+}
+
+impl<'a> LockedNetworkGraph<'a> {
+ /// Get a reference to the NetworkGraph which this read-lock contains.
+ pub fn graph(&self) -> &NetworkGraph {
+ &*self.0
+ }
}
use bitcoin::blockdata::constants::genesis_block;
use bitcoin::blockdata::script::Builder;
use bitcoin::blockdata::opcodes;
- use bitcoin::util::hash::BitcoinHash;
use hex;
// Announce a channel to add a corresponding node.
let unsigned_announcement = UnsignedChannelAnnouncement {
features: ChannelFeatures::known(),
- chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
+ chain_hash: genesis_block(Network::Testnet).header.block_hash(),
short_channel_id: 0,
node_id_1,
node_id_2,
let mut unsigned_announcement = UnsignedChannelAnnouncement {
features: ChannelFeatures::known(),
- chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
+ chain_hash: genesis_block(Network::Testnet).header.block_hash(),
short_channel_id: 0,
node_id_1,
node_id_2,
let zero_hash = Sha256dHash::hash(&[0; 32]);
let short_channel_id = 0;
- let chain_hash = genesis_block(Network::Testnet).header.bitcoin_hash();
+ let chain_hash = genesis_block(Network::Testnet).header.block_hash();
let amount_sats = 1000_000;
{
let node_2_btckey = &SecretKey::from_slice(&[39; 32]).unwrap();
let short_channel_id = 0;
- let chain_hash = genesis_block(Network::Testnet).header.bitcoin_hash();
+ let chain_hash = genesis_block(Network::Testnet).header.block_hash();
{
// There is no nodes in the table at the beginning.
let node_2_btckey = &SecretKey::from_slice(&[39; 32]).unwrap();
let short_channel_id = 1;
- let chain_hash = genesis_block(Network::Testnet).header.bitcoin_hash();
+ let chain_hash = genesis_block(Network::Testnet).header.block_hash();
// Channels were not announced yet.
let channels_with_announcements = net_graph_msg_handler.get_next_channel_announcements(0, 1);
let node_2_btckey = &SecretKey::from_slice(&[39; 32]).unwrap();
let short_channel_id = 1;
- let chain_hash = genesis_block(Network::Testnet).header.bitcoin_hash();
+ let chain_hash = genesis_block(Network::Testnet).header.block_hash();
// No nodes yet.
let next_announcements = net_graph_msg_handler.get_next_node_announcements(None, 10);
let node_id_2 = PublicKey::from_secret_key(&secp_ctx, node_2_privkey);
let unsigned_announcement = UnsignedChannelAnnouncement {
features: ChannelFeatures::known(),
- chain_hash: genesis_block(Network::Testnet).header.bitcoin_hash(),
+ chain_hash: genesis_block(Network::Testnet).header.block_hash(),
short_channel_id: 0,
node_id_1,
node_id_2,