Struct VelocityApprover

Source
pub struct VelocityApprover<A: Approve> { /* private fields */ }
Expand description

An approver that auto-approves L2 payments under a certain velocity. If the invoice is over the velocity, it is passed on to a delegate approver. You can use this to allow micropayments to arbitrary destinations.

You can also pass in a delegate approver, to allow asking the user for approval for payments over the micropayment maximum velocity.

L1 payments are always passed to the delegate approver (i.e. velocity control is not used for approval).

use lightning_signer::util::clock::ManualClock;
use lightning_signer::util::velocity::{
    VelocityControl,
    VelocityControlIntervalType::Hourly,
    VelocityControlSpec
};

let delegate = NegativeApprover();
let clock = Arc::new(ManualClock::new(Duration::ZERO));
let spec = VelocityControlSpec {
    limit_msat: 1000000,
    interval_type: Hourly
};
let control = VelocityControl::new(spec);
let approver = VelocityApprover::new(clock.clone(), control, delegate);
let state = approver.control().get_state();
// persist the state here if you don't want the velocity control to be cleared
// every time the signer restarts
// ...
// now restore from the state
let restored_control = VelocityControl::load_from_state(spec, state);
let restored_approver = VelocityApprover::new(clock.clone(), restored_control, delegate);

Implementations§

Source§

impl<A: Approve> VelocityApprover<A>

Source

pub fn new(clock: Arc<dyn Clock>, control: VelocityControl, delegate: A) -> Self

Create a new velocity approver with the given velocity control and delgate approver

Source

pub fn control(&self) -> VelocityControl

Get a snapshot of the velocity control, for persistence

Source

pub fn set_control(&self, control: VelocityControl)

Set the velocity control

Trait Implementations§

Source§

impl<A: Approve> Approve for VelocityApprover<A>

Source§

fn approve_invoice(&self, invoice: &Invoice) -> bool

Approve an invoice for payment
Source§

fn approve_keysend(&self, payment_hash: PaymentHash, amount_msat: u64) -> bool

Approve a keysend (ad-hoc payment)
Source§

fn approve_onchain( &self, tx: &Transaction, prev_outs: &[TxOut], unknown_indices: &[usize], ) -> bool

Approve an onchain payment to an unknown destination Read more
Source§

fn handle_proposed_invoice( &self, node: &Arc<Node>, invoice: Invoice, ) -> Result<bool, Status>

Checks invoice for approval and adds to the node if needed and appropriate
Source§

fn handle_proposed_keysend( &self, node: &Arc<Node>, payee: PublicKey, payment_hash: PaymentHash, amount_msat: u64, ) -> Result<bool, Status>

Checks keysend for approval and adds to the node if needed and appropriate. The payee is not validated yet.
Source§

fn handle_proposed_onchain( &self, node: &Arc<Node>, tx: &Transaction, segwit_flags: &[bool], prev_outs: &[TxOut], uniclosekeys: &[Option<(SecretKey, Vec<Vec<u8>>)>], opaths: &[Vec<u32>], ) -> Result<bool, Status>

Checks onchain payment for unknown destinations and checks approval for any such outputs. Returns Ok(false) if any unknown destinations were not approved.
Source§

impl<A: Approve> SendSync for VelocityApprover<A>

Auto Trait Implementations§

§

impl<A> !Freeze for VelocityApprover<A>

§

impl<A> !RefUnwindSafe for VelocityApprover<A>

§

impl<A> Send for VelocityApprover<A>

§

impl<A> Sync for VelocityApprover<A>

§

impl<A> Unpin for VelocityApprover<A>
where A: Unpin,

§

impl<A> !UnwindSafe for VelocityApprover<A>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Gets the type name of self
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: AsAny + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more