mirror of
https://github.com/stakwork/sphinx-key.git
synced 2025-12-17 15:24:32 +01:00
alternate pubkey persistence
This commit is contained in:
@@ -22,7 +22,7 @@ pub struct FsPersister {
|
|||||||
channels: DoubleBucket<ChannelEntry>,
|
channels: DoubleBucket<ChannelEntry>,
|
||||||
allowlist: Bucket<AllowlistItemEntry>,
|
allowlist: Bucket<AllowlistItemEntry>,
|
||||||
chaintracker: Bucket<ChainTrackerEntry>,
|
chaintracker: Bucket<ChainTrackerEntry>,
|
||||||
pubkeys: Bucket<PublicKey>,
|
pubkeys: Bucket<Vec<PublicKey>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FsPersister {
|
impl FsPersister {
|
||||||
@@ -44,6 +44,36 @@ fn get_channel_key(channel_id: &[u8]) -> &[u8] {
|
|||||||
channel_id.get(length - 11..length - 7).unwrap()
|
channel_id.get(length - 11..length - 7).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const PUBKEY_KEY: &str = "PKS";
|
||||||
|
|
||||||
|
impl FsPersister {
|
||||||
|
fn get_pubkeys(&self) -> Vec<PublicKey> {
|
||||||
|
match self.pubkeys.get(PUBKEY_KEY) {
|
||||||
|
Ok(ps) => ps,
|
||||||
|
Err(_) => Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn add_pubkey(&self, pubkey: &PublicKey) {
|
||||||
|
let mut pks: Vec<PublicKey> = match self.pubkeys.get(PUBKEY_KEY) {
|
||||||
|
Ok(ps) => ps,
|
||||||
|
Err(_) => Vec::new(),
|
||||||
|
};
|
||||||
|
let pk = pubkey.clone();
|
||||||
|
if !pks.contains(&pk) {
|
||||||
|
pks.push(pk);
|
||||||
|
let _ = self.pubkeys.put(PUBKEY_KEY, pks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn remove_pubkey(&self, pk: &PublicKey) {
|
||||||
|
let pks: Vec<PublicKey> = match self.pubkeys.get(PUBKEY_KEY) {
|
||||||
|
Ok(ps) => ps,
|
||||||
|
Err(_) => Vec::new(),
|
||||||
|
};
|
||||||
|
let newpks = pks.iter().filter(|p| *p != pk).map(|p| p.clone()).collect();
|
||||||
|
let _ = self.pubkeys.put(PUBKEY_KEY, newpks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Persist for FsPersister {
|
impl Persist for FsPersister {
|
||||||
fn new_node(&self, node_id: &PublicKey, config: &NodeConfig, seed: &[u8]) {
|
fn new_node(&self, node_id: &PublicKey, config: &NodeConfig, seed: &[u8]) {
|
||||||
let pk = hex::encode(node_id.serialize());
|
let pk = hex::encode(node_id.serialize());
|
||||||
@@ -53,14 +83,14 @@ impl Persist for FsPersister {
|
|||||||
network: config.network.to_string(),
|
network: config.network.to_string(),
|
||||||
};
|
};
|
||||||
let _ = self.nodes.put(&pk, entry);
|
let _ = self.nodes.put(&pk, entry);
|
||||||
let _ = self.pubkeys.put(&pk, node_id.clone());
|
self.add_pubkey(node_id);
|
||||||
}
|
}
|
||||||
fn delete_node(&self, node_id: &PublicKey) {
|
fn delete_node(&self, node_id: &PublicKey) {
|
||||||
let pk = hex::encode(node_id.serialize());
|
let pk = hex::encode(node_id.serialize());
|
||||||
// clear all channel entries within "pk" sub-bucket
|
// clear all channel entries within "pk" sub-bucket
|
||||||
let _ = self.channels.clear(&pk);
|
let _ = self.channels.clear(&pk);
|
||||||
let _ = self.nodes.remove(&pk);
|
let _ = self.nodes.remove(&pk);
|
||||||
let _ = self.pubkeys.remove(&pk);
|
self.remove_pubkey(node_id);
|
||||||
}
|
}
|
||||||
fn new_channel(&self, node_id: &PublicKey, stub: &ChannelStub) -> Result<(), ()> {
|
fn new_channel(&self, node_id: &PublicKey, stub: &ChannelStub) -> Result<(), ()> {
|
||||||
let pk = hex::encode(node_id.serialize());
|
let pk = hex::encode(node_id.serialize());
|
||||||
@@ -171,15 +201,11 @@ impl Persist for FsPersister {
|
|||||||
}
|
}
|
||||||
fn get_nodes(&self) -> Vec<(PublicKey, CoreNodeEntry)> {
|
fn get_nodes(&self) -> Vec<(PublicKey, CoreNodeEntry)> {
|
||||||
let mut res = Vec::new();
|
let mut res = Vec::new();
|
||||||
let list = match self.nodes.list() {
|
let list = self.get_pubkeys();
|
||||||
Ok(ns) => ns,
|
for pubkey in list {
|
||||||
Err(_) => return res,
|
let pk = hex::encode(pubkey.serialize());
|
||||||
};
|
if let Ok(node) = self.nodes.get(&pk) {
|
||||||
for pk in list {
|
res.push((pubkey, node.into()));
|
||||||
if let Ok(pubkey) = self.pubkeys.get(&pk) {
|
|
||||||
if let Ok(node) = self.nodes.get(&pk) {
|
|
||||||
res.push((pubkey, node.into()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res
|
res
|
||||||
|
|||||||
Reference in New Issue
Block a user