mirror of
https://github.com/stakwork/sphinx-key.git
synced 2025-12-18 07:44:21 +01:00
Persist multiple channels to the same peer
This commit is contained in:
@@ -43,6 +43,11 @@ impl FsPersister {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_channel_key(channel_id: &[u8]) -> &[u8] {
|
||||||
|
let length = channel_id.len();
|
||||||
|
channel_id.get(length-11..length-7).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
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());
|
||||||
@@ -63,16 +68,15 @@ impl Persist for FsPersister {
|
|||||||
}
|
}
|
||||||
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());
|
||||||
let id = NodeChannelId::new(node_id, &stub.id0);
|
let chan_id = hex::encode(get_channel_key(stub.id0.as_slice()));
|
||||||
let chan_id = hex::encode(id.channel_id().as_slice());
|
|
||||||
// should not exist
|
// should not exist
|
||||||
if let Ok(_) = self.channels.get(&pk, &chan_id) {
|
if let Ok(_) = self.channels.get(&pk, &chan_id) {
|
||||||
return Err(()); // already exists
|
return Err(()); // already exists
|
||||||
}
|
}
|
||||||
let entry = ChannelEntry {
|
let entry = ChannelEntry {
|
||||||
|
id: Some(stub.id0.clone()),
|
||||||
channel_value_satoshis: 0,
|
channel_value_satoshis: 0,
|
||||||
channel_setup: None,
|
channel_setup: None,
|
||||||
id: Some(id.channel_id()),
|
|
||||||
enforcement_state: EnforcementState::new(0),
|
enforcement_state: EnforcementState::new(0),
|
||||||
};
|
};
|
||||||
let _ = self.channels.put(&pk, &chan_id, entry);
|
let _ = self.channels.put(&pk, &chan_id, entry);
|
||||||
@@ -101,18 +105,13 @@ impl Persist for FsPersister {
|
|||||||
}
|
}
|
||||||
fn update_channel(&self, node_id: &PublicKey, channel: &Channel) -> Result<(), ()> {
|
fn update_channel(&self, node_id: &PublicKey, channel: &Channel) -> Result<(), ()> {
|
||||||
let pk = hex::encode(node_id.serialize());
|
let pk = hex::encode(node_id.serialize());
|
||||||
let id = NodeChannelId::new(node_id, &channel.id0);
|
let chan_id = hex::encode(get_channel_key(channel.id0.as_slice()));
|
||||||
let chan_id = hex::encode(id.channel_id().as_slice());
|
|
||||||
// should exist
|
// should exist
|
||||||
if let Err(_) = self.channels.get(&pk, &chan_id) {
|
if let Err(_) = self.channels.get(&pk, &chan_id) {
|
||||||
return Err(()); // not found
|
return Err(()); // not found
|
||||||
}
|
}
|
||||||
let entry = ChannelEntry {
|
let entry = ChannelEntry {
|
||||||
id: if channel.id.is_none() {
|
id: Some(channel.id0.clone()),
|
||||||
Some(id.channel_id())
|
|
||||||
} else {
|
|
||||||
channel.id.clone()
|
|
||||||
},
|
|
||||||
channel_value_satoshis: channel.setup.channel_value_sat,
|
channel_value_satoshis: channel.setup.channel_value_sat,
|
||||||
channel_setup: Some(channel.setup.clone()),
|
channel_setup: Some(channel.setup.clone()),
|
||||||
enforcement_state: channel.enforcement_state.clone(),
|
enforcement_state: channel.enforcement_state.clone(),
|
||||||
@@ -126,8 +125,7 @@ impl Persist for FsPersister {
|
|||||||
channel_id: &ChannelId,
|
channel_id: &ChannelId,
|
||||||
) -> Result<CoreChannelEntry, ()> {
|
) -> Result<CoreChannelEntry, ()> {
|
||||||
let pk = hex::encode(node_id.serialize());
|
let pk = hex::encode(node_id.serialize());
|
||||||
let id = NodeChannelId::new(node_id, channel_id);
|
let chan_id = hex::encode(get_channel_key(channel_id.as_slice()));
|
||||||
let chan_id = hex::encode(id.channel_id().as_slice());
|
|
||||||
let ret: ChannelEntry = match self.channels.get(&pk, &chan_id) {
|
let ret: ChannelEntry = match self.channels.get(&pk, &chan_id) {
|
||||||
Ok(ce) => ce,
|
Ok(ce) => ce,
|
||||||
Err(_) => return Err(()),
|
Err(_) => return Err(()),
|
||||||
|
|||||||
Reference in New Issue
Block a user