1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
// LNP/BP Core Library implementing LNPBP specifications & standards
// Written in 2020 by
// Dr. Maxim Orlovsky <orlovsky@pandoracore.com>
//
// To the extent possible under law, the author(s) have dedicated all
// copyright and related and neighboring rights to this software to
// the public domain worldwide. This software is distributed without
// any warranty.
//
// You should have received a copy of the MIT License
// along with this software.
// If not, see <https://opensource.org/licenses/MIT>.
use std::convert::TryFrom;
use std::fmt::{Debug, Display};
use std::hash::Hash;
use strict_encoding;
use super::channel;
use crate::Messages;
/// Marker trait for creating extension nomenclatures, defining order in which
/// extensions are applied to the channel transaction structure.
///
/// Extension nomenclature is an enum with members convertible into `u16`
/// representation
pub trait Nomenclature
where
Self: Clone
+ Copy
+ PartialEq
+ Eq
+ PartialOrd
+ Ord
+ Hash
+ Debug
+ Display
+ Default
+ TryFrom<u16, Error = strict_encoding::Error>
+ Into<u16>,
{
}
pub trait Extension {
type Identity: Nomenclature;
fn identity(&self) -> Self::Identity;
/// Updates extension state from the data taken from the message received
/// from the remote peer
fn update_from_peer(
&mut self,
data: &Messages,
) -> Result<(), channel::Error>;
/// Returns extension state for persistence & backups
///
/// These are extension configuration data, like the data that are the part
/// of the channel parameters negotiatied between peeers or preconfigured
/// parameters from the configuration file
fn extension_state(&self) -> Box<dyn channel::State>;
}
pub trait RoutingExtension: Extension {}
pub trait GossipExtension: Extension {}
pub trait ChannelExtension: Extension {
/// Returns channel state for persistence & backups.
///
/// These are channel-specific data generated from channel operations,
/// including client-validated data
fn channel_state(&self) -> Box<dyn channel::State>;
/// Applies state to the channel transaction graph
fn apply(
&mut self,
tx_graph: &mut channel::TxGraph,
) -> Result<(), channel::Error>;
}