Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit f38897d

Browse files
committed
msgs for LSPS1
1 parent 58fbce0 commit f38897d

File tree

3 files changed

+203
-0
lines changed

3 files changed

+203
-0
lines changed

src/channel_request/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
// licenses.
99

1010
//! Types and primitives that implement the LSPS1: Channel Request specification.
11+
pub mod msgs;

src/channel_request/msgs.rs

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
2+
use serde::{Deserialize, Serialize};
3+
4+
//use bitcoin::hashes::hmac::{Hmac, HmacEngine};
5+
//use bitcoin::hashes::sha256::Hash as Sha256;
6+
//use bitcoin::hashes::{Hash, HashEngine};
7+
use crate::transport::msgs::{RequestId, ResponseError};
8+
use crate::utils;
9+
10+
pub(crate) const LSPS1_GETINFO_METHOD_NAME: &str = "lsps1.getinfo";
11+
pub(crate) const LSPS1_CREATE_ORDER_METHOD_NAME: &str = "lsps1.create_order";
12+
pub(crate) const LSPS1_GET_ORDER_METHOD_NAME: &str = "lsps1.get_order";
13+
14+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
15+
#[serde(default)]
16+
pub struct GetInfoRequest {}
17+
18+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
19+
pub struct OptionsSupported {
20+
pub minimum_channel_confirmations: u8,
21+
pub minimum_onchain_payment_confirmations: u8,
22+
pub supports_zero_channel_reserve: bool,
23+
pub min_onchain_payment_size_sat: Option<u32>,
24+
pub max_channel_expiry_blocks: u32,
25+
pub min_initial_client_balance_sat: u64,
26+
pub max_initial_client_balance_sat: u64,
27+
pub min_initial_lsp_balance_sat: u64,
28+
pub max_initial_lsp_balance_sat: u64,
29+
pub min_channel_balance_sat: u64,
30+
pub max_channel_balance_sat: u64,
31+
}
32+
33+
34+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
35+
pub struct GetInfoResponse {
36+
pub supported_versions: Vec<u16>,
37+
pub website: String,
38+
pub options: Vec<OptionsSupported>,
39+
}
40+
41+
impl GetInfoResponse {
42+
fn is_valid(&self) -> bool {
43+
// TODO check validity of min < max for every pair
44+
// Use of hmacengine/hash for checking
45+
1
46+
}
47+
}
48+
49+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
50+
pub struct CreateOrderRequest {
51+
pub api_version: u8,
52+
pub lsp_balance_sat: String,
53+
pub client_balance_sat: String,
54+
pub confirms_within_blocks: u8,
55+
pub channel_expiry_blocks: u8,
56+
pub token: String,
57+
// String of Onchain address, maybe object- String/bech32,
58+
pub refund_onchain_address: String,
59+
pub announce_channel: bool,
60+
}
61+
62+
impl CreateOrderRequest {
63+
fn is_valid(&self, req: &GetInfoResponse) -> bool {
64+
// implement the conditions
65+
}
66+
}
67+
68+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
69+
pub struct Order {
70+
pub order_id: String,
71+
pub api_version: u16,
72+
pub lsp_balance_sat: u64,
73+
pub client_balance_sat: u64,
74+
pub confirms_within_blocks: u32,
75+
pub channel_expiry_blocks: u32,
76+
pub token: String,
77+
pub created_at: String,
78+
pub expires_at: String,
79+
pub announce_channel: bool,
80+
pub order_state: OrderState,
81+
pub payment: Payment,
82+
pub channel: Option<Channel>,
83+
}
84+
85+
86+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
87+
pub struct CreateOrderResponse{
88+
pub response: Order,
89+
}
90+
91+
impl CreateOrderResponse {
92+
fn new(request: &CreateOrderRequest) -> () {
93+
// Few of the parameters are mirrored from the orderrequest.
94+
}
95+
96+
fn is_valid(&self) -> () {
97+
// Check the following conditions
98+
99+
}
100+
}
101+
102+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
103+
pub enum OrderState {
104+
Created,
105+
Completed,
106+
Failed,
107+
}
108+
109+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
110+
pub struct Payment {
111+
pub state: PaymentState,
112+
pub fee_total_sat: u64,
113+
pub order_total_sat: u64,
114+
pub onchain_address: String,
115+
pub bolt11_invoice: String,
116+
pub onchain_block_confirmations_required: u8,
117+
pub minimum_fee_for_0conf: u8,
118+
pub onchain_payment: OnchainPayment,
119+
}
120+
121+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
122+
pub enum PaymentState{
123+
ExpectPayment,
124+
Hold,
125+
Paid,
126+
Refunded,
127+
}
128+
129+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
130+
pub struct OnchainPayment{
131+
pub outpoint: String,
132+
pub sat: u64,
133+
pub confirmed: bool,
134+
}
135+
136+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
137+
pub struct Channel {
138+
pub state: ChannelState,
139+
pub funded_at: String,
140+
pub funding_outpoint: String,
141+
pub scid: Option<String>,
142+
pub expires_at: String,
143+
pub closing_transaction: Option<String>,
144+
pub closed_at: Option<String>,
145+
}
146+
147+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
148+
pub enum ChannelState {
149+
Opening,
150+
Opened,
151+
Closed,
152+
}
153+
154+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
155+
pub struct GetOrderRequest {
156+
pub order_id: String,
157+
}
158+
159+
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
160+
pub struct GetOrderResponse {
161+
pub response: OrderState,
162+
}
163+
164+
#[derive(Clone, Debug, PartialEq, Eq)]
165+
pub enum Request {
166+
GetInfo(GetInfoRequest),
167+
CreateOrder(CreateOrderRequest),
168+
GetOrder(GetOrderRequest),
169+
}
170+
171+
impl Request {
172+
pub fn method(&self) -> &str {
173+
match self {
174+
Request::GetInfo(_) => LSPS1_GETINFO_METHOD_NAME,
175+
Request::CreateOrder(_) => LSPS1_CREATE_ORDER_METHOD_NAME,
176+
Request::GetOrder(_) => LSPS1_GET_ORDER_METHOD_NAME,
177+
}
178+
}
179+
}
180+
181+
#[derive(Clone, Debug, PartialEq, Eq)]
182+
pub enum Response {
183+
GetInfo(GetInfoResponse),
184+
GetInfoError(ResponseError),
185+
CreateOrder(CreateOrderResponse),
186+
OrderError(ResponseError),
187+
GetOrder(GetOrderResponse),
188+
GetOrderError(ResponseError),
189+
}
190+
191+
192+
#[derive(Clone, Debug, PartialEq, Eq)]
193+
pub enum Message {
194+
Request(RequestId, Request),
195+
Response(RequestId, Response),
196+
}

src/transport/msgs.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ use std::collections::HashMap;
88
use std::convert::TryFrom;
99
use std::fmt;
1010

11+
use crate::channel_request;
12+
1113
const LSPS_MESSAGE_SERIALIZED_STRUCT_NAME: &str = "LSPSMessage";
1214
const JSONRPC_FIELD_KEY: &str = "jsonrpc";
1315
const JSONRPC_FIELD_VALUE: &str = "2.0";
@@ -100,6 +102,7 @@ impl From<LSPS0Message> for LSPSMessage {
100102
pub enum LSPSMessage {
101103
Invalid,
102104
LSPS0(LSPS0Message),
105+
LSPS1(channel_request::msgs::Message)
103106
}
104107

105108
impl LSPSMessage {
@@ -116,6 +119,9 @@ impl LSPSMessage {
116119
LSPSMessage::LSPS0(LSPS0Message::Request(request_id, request)) => {
117120
Some((request_id.0.clone(), request.method().to_string()))
118121
}
122+
LSPSMessage::LSPS1(channel_request::msgs::Message::Request(request_id, request)) => {
123+
Some((request_id.0.clone(), request.method().to_string()))
124+
}
119125
_ => None,
120126
}
121127
}

0 commit comments

Comments
 (0)