Skip to content

Commit

Permalink
move min/max payment size into opening fee params
Browse files Browse the repository at this point in the history
  • Loading branch information
JssDWt committed Feb 23, 2024
1 parent 99f6a7e commit d6b8caf
Show file tree
Hide file tree
Showing 18 changed files with 228 additions and 122 deletions.
8 changes: 8 additions & 0 deletions channel_opener_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ func (s *channelOpenerServer) ChannelInformation(ctx context.Context, in *lspdrp
ValidUntil: p.ValidUntil,
MaxIdleTime: p.MinLifetime,
MaxClientToSelfDelay: p.MaxClientToSelfDelay,
MinPaymentSizeMsat: p.MinPaymentSizeMsat,
MaxPaymentSizeMsat: p.MaxPaymentSizeMsat,
Promise: p.Promise,
})
}
Expand Down Expand Up @@ -129,6 +131,8 @@ func (s *channelOpenerServer) RegisterPayment(
ValidUntil: pi.OpeningFeeParams.ValidUntil,
MinLifetime: pi.OpeningFeeParams.MaxIdleTime,
MaxClientToSelfDelay: pi.OpeningFeeParams.MaxClientToSelfDelay,
MinPaymentSizeMsat: pi.OpeningFeeParams.MinPaymentSizeMsat,
MaxPaymentSizeMsat: pi.OpeningFeeParams.MaxPaymentSizeMsat,
Promise: pi.OpeningFeeParams.Promise,
},
node.PublicKey,
Expand All @@ -145,6 +149,8 @@ func (s *channelOpenerServer) RegisterPayment(
ValidUntil: time.Now().UTC().Add(time.Duration(time.Hour * 24)).Format(lsps0.TIME_FORMAT),
MaxIdleTime: uint32(node.NodeConfig.MaxInactiveDuration / 600),
MaxClientToSelfDelay: uint32(10000),
MinPaymentSizeMsat: node.NodeConfig.MinPaymentSizeMsat,
MaxPaymentSizeMsat: node.NodeConfig.MaxPaymentSizeMsat,
}
}

Expand All @@ -159,6 +165,8 @@ func (s *channelOpenerServer) RegisterPayment(
ValidUntil: pi.OpeningFeeParams.ValidUntil,
MinLifetime: pi.OpeningFeeParams.MaxIdleTime,
MaxClientToSelfDelay: pi.OpeningFeeParams.MaxClientToSelfDelay,
MinPaymentSizeMsat: pi.OpeningFeeParams.MinPaymentSizeMsat,
MaxPaymentSizeMsat: pi.OpeningFeeParams.MaxPaymentSizeMsat,
Promise: pi.OpeningFeeParams.Promise,
}
err = s.store.RegisterPayment(token, params, pi.Destination, pi.PaymentHash, pi.PaymentSecret, pi.IncomingAmountMsat, pi.OutgoingAmountMsat, pi.Tag)
Expand Down
27 changes: 26 additions & 1 deletion common/opening_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ func (s *openingService) GetFeeParamsMenu(token string, privateKey *btcec.Privat
ValidUntil: validUntil.Format(lsps0.TIME_FORMAT),
MinLifetime: setting.Params.MinLifetime,
MaxClientToSelfDelay: setting.Params.MaxClientToSelfDelay,
MinPaymentSizeMsat: setting.Params.MinPaymentSizeMsat,
MaxPaymentSizeMsat: setting.Params.MaxPaymentSizeMsat,
}

promise, err := createPromise(privateKey, params)
Expand Down Expand Up @@ -133,6 +135,26 @@ func createPromise(lspPrivateKey *btcec.PrivateKey, params *OpeningFeeParams) (*
}

func paramsHash(params *OpeningFeeParams) ([]byte, error) {
// First hash all the values in the params in a fixed order.
items := []interface{}{
params.MinFeeMsat,
params.Proportional,
params.ValidUntil,
params.MinLifetime,
params.MaxClientToSelfDelay,
params.MinPaymentSizeMsat,
params.MaxPaymentSizeMsat,
}
blob, err := json.Marshal(items)
if err != nil {
log.Printf("paramsHash error: %v", err)
return nil, err
}
hash := sha256.Sum256(blob)
return hash[:], nil
}

func deprecatedParamsHash(params *OpeningFeeParams) ([]byte, error) {
// First hash all the values in the params in a fixed order.
items := []interface{}{
params.MinFeeMsat,
Expand All @@ -153,7 +175,10 @@ func paramsHash(params *OpeningFeeParams) ([]byte, error) {
func verifyPromise(lspPublicKey *btcec.PublicKey, params *OpeningFeeParams) error {
hash, err := paramsHash(params)
if err != nil {
return err
hash, err = deprecatedParamsHash(params)
if err != nil {
return err
}
}
sig, err := hex.DecodeString(params.Promise)
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions common/opening_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ type OpeningFeeParams struct {
ValidUntil string `json:"valid_until"`
MinLifetime uint32 `json:"max_idle_time"`
MaxClientToSelfDelay uint32 `json:"max_client_to_self_delay"`
MinPaymentSizeMsat uint64 `json:"min_payment_size_msat,string"`
MaxPaymentSizeMsat uint64 `json:"max_payment_size_msat,string"`
Promise string `json:"promise"`
}

Expand Down
6 changes: 6 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,16 @@ type NodeConfig struct {

// The minimum payment size accepted in LSPS2 forwards that need a channel
// open.
//
// Deprecated: MinPaymentSizeMsat is now part of the OpeningFeeParams
// settings.
MinPaymentSizeMsat uint64 `json:"minPaymentSizeMsat,string"`

// The maximum payment size accepted in LSPS2 forwards that need a channel
// open.
//
// Deprecated: MaxPaymentSizeMsat is now part of the OpeningFeeParams
// settings.
MaxPaymentSizeMsat uint64 `json:"maxPaymentSizeMsat,string"`

// Set this field to connect to an LND node.
Expand Down
2 changes: 2 additions & 0 deletions interceptor/intercept_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ func (i *Interceptor) Intercept(req common.InterceptRequest) common.InterceptRes
ValidUntil: time.Now().UTC().Add(time.Duration(time.Hour * 24)).Format(lsps0.TIME_FORMAT),
MinLifetime: uint32(i.config.MaxInactiveDuration / 600),
MaxClientToSelfDelay: uint32(10000),
MinPaymentSizeMsat: i.config.MinPaymentSizeMsat,
MaxPaymentSizeMsat: i.config.MaxPaymentSizeMsat,
}
}

Expand Down
4 changes: 4 additions & 0 deletions itest/dynamic_fee_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ func testDynamicFeeFlow(p *testParams) {
ValidUntil: params.ValidUntil,
MaxIdleTime: params.MaxIdleTime,
MaxClientToSelfDelay: params.MaxClientToSelfDelay,
MinPaymentSizeMsat: params.MinPaymentSizeMsat,
MaxPaymentSizeMsat: params.MaxPaymentSizeMsat,
Promise: params.Promise,
},
}, true)
Expand All @@ -83,6 +85,8 @@ func testDynamicFeeFlow(p *testParams) {
ValidUntil: params.ValidUntil,
MaxIdleTime: params.MaxIdleTime,
MaxClientToSelfDelay: params.MaxClientToSelfDelay,
MinPaymentSizeMsat: params.MinPaymentSizeMsat,
MaxPaymentSizeMsat: params.MaxPaymentSizeMsat,
// Modify promise
Promise: params.Promise + "aa",
},
Expand Down
6 changes: 3 additions & 3 deletions itest/lspd_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,8 @@ func (l *lspBase) Initialize() error {
l.harness.Ctx,
`INSERT INTO new_channel_params (validity, params, token)
VALUES
(3600, '{"min_msat": "1000000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432}', 'hello'),
(259200, '{"min_msat": "1100000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432}', 'hello');`,
(3600, '{"min_msat": "1000000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432, "min_payment_size_msat": "1000", "max_payment_size_msat": "4000000000"}', 'hello'),
(259200, '{"min_msat": "1100000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432, "min_payment_size_msat": "1000", "max_payment_size_msat": "4000000000"}', 'hello');`,
)
if err != nil {
lntest.PerformCleanup(cleanups)
Expand Down Expand Up @@ -345,7 +345,7 @@ func SetFeeParams(l LspNode, settings []*FeeParamSetting) error {
}

query += fmt.Sprintf(
`(%d, '{"min_msat": "%d", "proportional": %d, "max_idle_time": 4320, "max_client_to_self_delay": 432}', 'hello')`,
`(%d, '{"min_msat": "%d", "proportional": %d, "max_idle_time": 4320, "max_client_to_self_delay": 432, "min_payment_size_msat": "1000", "max_payment_size_msat": "4000000000"}', 'hello')`,
int64(setting.Validity.Seconds()),
setting.MinMsat,
setting.Proportional,
Expand Down
6 changes: 3 additions & 3 deletions itest/lsps2_buy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ func testLsps2Buy(p *testParams) {
ValidUntil string `json:"valid_until"`
MinLifetime uint32 `json:"min_lifetime"`
MaxClientToSelfDelay uint32 `json:"max_client_to_self_delay"`
MinPaymentSizeMsat uint64 `json:"min_payment_size_msat,string"`
MaxPaymentSizeMsat uint64 `json:"max_payment_size_msat,string"`
Promise string `json:"promise"`
}
data := new(struct {
Result struct {
Menu []params `json:"opening_fee_params_menu"`
MinPayment uint64 `json:"min_payment_size_msat,string"`
MaxPayment uint64 `json:"max_payment_size_msat,string"`
Menu []params `json:"opening_fee_params_menu"`
} `json:"result"`
})
err := json.Unmarshal(resp.Data[:], &data)
Expand Down
2 changes: 2 additions & 0 deletions itest/lsps2_get_info_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ func testLsps2GetInfo(p *testParams) {
ValidUntil string `json:"valid_until"`
MinLifetime uint32 `json:"min_lifetime"`
MaxClientToSelfDelay uint32 `json:"max_client_to_self_delay"`
MinPaymentSizeMsat uint64 `json:"min_payment_size_msat,string"`
MaxPaymentSizeMsat uint64 `json:"max_payment_size_msat,string"`
Promise string `json:"promise"`
}{}
err = json.Unmarshal(result["opening_fee_params_menu"], &menu)
Expand Down
2 changes: 2 additions & 0 deletions lsps2/intercept_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ func defaultOpeningFeeParams() common.OpeningFeeParams {
ValidUntil: time.Now().UTC().Add(5 * time.Hour).Format(lsps0.TIME_FORMAT),
MinLifetime: 1000,
MaxClientToSelfDelay: 2016,
MinPaymentSizeMsat: 1000,
MaxPaymentSizeMsat: 4_000_000_000,
Promise: "fake",
}
}
Expand Down
10 changes: 6 additions & 4 deletions lsps2/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ type GetInfoRequest struct {

type GetInfoResponse struct {
OpeningFeeParamsMenu []*OpeningFeeParams `json:"opening_fee_params_menu"`
MinPaymentSizeMsat uint64 `json:"min_payment_size_msat,string"`
MaxPaymentSizeMsat uint64 `json:"max_payment_size_msat,string"`
}

type OpeningFeeParams struct {
Expand All @@ -36,6 +34,8 @@ type OpeningFeeParams struct {
ValidUntil string `json:"valid_until"`
MinLifetime uint32 `json:"min_lifetime"`
MaxClientToSelfDelay uint32 `json:"max_client_to_self_delay"`
MinPaymentSizeMsat uint64 `json:"min_payment_size_msat,string"`
MaxPaymentSizeMsat uint64 `json:"max_payment_size_msat,string"`
Promise string `json:"promise"`
}

Expand Down Expand Up @@ -149,13 +149,13 @@ func (s *server) GetInfo(
ValidUntil: p.ValidUntil,
MinLifetime: p.MinLifetime,
MaxClientToSelfDelay: p.MaxClientToSelfDelay,
MinPaymentSizeMsat: p.MinPaymentSizeMsat,
MaxPaymentSizeMsat: p.MaxPaymentSizeMsat,
Promise: p.Promise,
})
}
return &GetInfoResponse{
OpeningFeeParamsMenu: menu,
MinPaymentSizeMsat: node.NodeConfig.MinPaymentSizeMsat,
MaxPaymentSizeMsat: node.NodeConfig.MaxPaymentSizeMsat,
}, nil
}

Expand All @@ -173,6 +173,8 @@ func (s *server) Buy(
ValidUntil: request.OpeningFeeParams.ValidUntil,
MinLifetime: request.OpeningFeeParams.MinLifetime,
MaxClientToSelfDelay: request.OpeningFeeParams.MaxClientToSelfDelay,
MinPaymentSizeMsat: request.OpeningFeeParams.MinPaymentSizeMsat,
MaxPaymentSizeMsat: request.OpeningFeeParams.MaxPaymentSizeMsat,
Promise: request.OpeningFeeParams.Promise,
}
paramsValid := s.openingService.ValidateOpeningFeeParams(
Expand Down
35 changes: 22 additions & 13 deletions lsps2/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ func Test_GetInfo_EmptyMenu(t *testing.T) {

assert.Nil(t, err)
assert.Equal(t, []*OpeningFeeParams{}, resp.OpeningFeeParamsMenu)
assert.Equal(t, node.NodeConfig.MinPaymentSizeMsat, resp.MinPaymentSizeMsat)
assert.Equal(t, node.NodeConfig.MaxPaymentSizeMsat, resp.MaxPaymentSizeMsat)
}

func Test_GetInfo_PopulatedMenu_Ordered(t *testing.T) {
Expand All @@ -82,14 +80,18 @@ func Test_GetInfo_PopulatedMenu_Ordered(t *testing.T) {
ValidUntil: "a",
MinLifetime: 3,
MaxClientToSelfDelay: 4,
MinPaymentSizeMsat: 5,
MaxPaymentSizeMsat: 6,
Promise: "b",
},
{
MinFeeMsat: 5,
Proportional: 6,
MinFeeMsat: 7,
Proportional: 8,
ValidUntil: "c",
MinLifetime: 7,
MaxClientToSelfDelay: 8,
MinLifetime: 9,
MaxClientToSelfDelay: 10,
MinPaymentSizeMsat: 11,
MaxPaymentSizeMsat: 12,
Promise: "d",
},
}}
Expand All @@ -108,17 +110,18 @@ func Test_GetInfo_PopulatedMenu_Ordered(t *testing.T) {
assert.Equal(t, "a", resp.OpeningFeeParamsMenu[0].ValidUntil)
assert.Equal(t, uint32(3), resp.OpeningFeeParamsMenu[0].MinLifetime)
assert.Equal(t, uint32(4), resp.OpeningFeeParamsMenu[0].MaxClientToSelfDelay)
assert.Equal(t, uint64(5), resp.OpeningFeeParamsMenu[0].MinPaymentSizeMsat)
assert.Equal(t, uint64(6), resp.OpeningFeeParamsMenu[0].MaxPaymentSizeMsat)
assert.Equal(t, "b", resp.OpeningFeeParamsMenu[0].Promise)

assert.Equal(t, uint64(5), resp.OpeningFeeParamsMenu[1].MinFeeMsat)
assert.Equal(t, uint32(6), resp.OpeningFeeParamsMenu[1].Proportional)
assert.Equal(t, uint64(7), resp.OpeningFeeParamsMenu[1].MinFeeMsat)
assert.Equal(t, uint32(8), resp.OpeningFeeParamsMenu[1].Proportional)
assert.Equal(t, "c", resp.OpeningFeeParamsMenu[1].ValidUntil)
assert.Equal(t, uint32(7), resp.OpeningFeeParamsMenu[1].MinLifetime)
assert.Equal(t, uint32(8), resp.OpeningFeeParamsMenu[1].MaxClientToSelfDelay)
assert.Equal(t, uint32(9), resp.OpeningFeeParamsMenu[1].MinLifetime)
assert.Equal(t, uint32(10), resp.OpeningFeeParamsMenu[1].MaxClientToSelfDelay)
assert.Equal(t, uint64(11), resp.OpeningFeeParamsMenu[0].MinPaymentSizeMsat)
assert.Equal(t, uint64(12), resp.OpeningFeeParamsMenu[0].MaxPaymentSizeMsat)
assert.Equal(t, "d", resp.OpeningFeeParamsMenu[1].Promise)

assert.Equal(t, node.NodeConfig.MinPaymentSizeMsat, resp.MinPaymentSizeMsat)
assert.Equal(t, node.NodeConfig.MaxPaymentSizeMsat, resp.MaxPaymentSizeMsat)
}

func Test_Buy_UnsupportedVersion(t *testing.T) {
Expand Down Expand Up @@ -151,6 +154,8 @@ func Test_Buy_InvalidFeeParams(t *testing.T) {
ValidUntil: "2023-08-18T13:39:00.000Z",
MinLifetime: 3,
MaxClientToSelfDelay: 4,
MinPaymentSizeMsat: 5,
MaxPaymentSizeMsat: 6,
Promise: "fake",
},
})
Expand Down Expand Up @@ -241,6 +246,8 @@ func Test_Buy_PaymentSize(t *testing.T) {
ValidUntil: "2023-08-18T13:39:00.000Z",
MinLifetime: 3,
MaxClientToSelfDelay: 4,
MinPaymentSizeMsat: 5,
MaxPaymentSizeMsat: 6,
Promise: "fake",
},
PaymentSizeMsat: &c.paymentSize,
Expand Down Expand Up @@ -276,6 +283,8 @@ func Test_Buy_Registered(t *testing.T) {
ValidUntil: "2023-08-18T13:39:00.000Z",
MinLifetime: 3,
MaxClientToSelfDelay: 4,
MinPaymentSizeMsat: 5,
MaxPaymentSizeMsat: 6,
Promise: "fake",
},
PaymentSizeMsat: &paymentSize,
Expand Down
14 changes: 13 additions & 1 deletion postgresql/lsps2_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ func (s *Lsps2Store) RegisterBuy(
, params_valid_until
, params_min_lifetime
, params_max_client_to_self_delay
, params_min_payment_size_msat
, params_max_payment_size_msat
, params_promise
, token
)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)`,
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)`,
uuid,
req.LspId,
req.PeerId,
Expand All @@ -74,6 +76,8 @@ func (s *Lsps2Store) RegisterBuy(
req.OpeningFeeParams.ValidUntil,
req.OpeningFeeParams.MinLifetime,
req.OpeningFeeParams.MaxClientToSelfDelay,
req.OpeningFeeParams.MinPaymentSizeMsat,
req.OpeningFeeParams.MaxPaymentSizeMsat,
req.OpeningFeeParams.Promise,
token,
)
Expand Down Expand Up @@ -102,6 +106,8 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor
, r.params_valid_until
, r.params_min_lifetime
, r.params_max_client_to_self_delay
, r.params_min_payment_size_msat
, r.params_max_payment_size_msat
, r.params_promise
, r.token
, c.funding_tx_id
Expand All @@ -123,6 +129,8 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor
var db_params_valid_until string
var db_params_min_lifetime uint32
var db_params_max_client_to_self_delay uint32
var db_params_min_payment_size_msat int64
var db_params_max_payment_size_msat int64
var db_params_promise string
var db_token string
var db_funding_tx_id *[]byte
Expand All @@ -140,6 +148,8 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor
&db_params_valid_until,
&db_params_min_lifetime,
&db_params_max_client_to_self_delay,
&db_params_min_payment_size_msat,
&db_params_max_payment_size_msat,
&db_params_promise,
&db_token,
&db_funding_tx_id,
Expand Down Expand Up @@ -183,6 +193,8 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor
ValidUntil: db_params_valid_until,
MinLifetime: db_params_min_lifetime,
MaxClientToSelfDelay: db_params_max_client_to_self_delay,
MinPaymentSizeMsat: uint64(db_params_min_payment_size_msat),
MaxPaymentSizeMsat: uint64(db_params_max_payment_size_msat),
Promise: db_params_promise,
},
PaymentSizeMsat: paymentSizeMsat,
Expand Down
4 changes: 2 additions & 2 deletions postgresql/migrations/000011_new_channel_params.up.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ CREATE TABLE public.new_channel_params (
CREATE UNIQUE INDEX new_channel_params_validity_idx ON public.new_channel_params (validity);

INSERT INTO public.new_channel_params (validity, params)
VALUES(259200, '{"min_msat": "12000000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432}'::jsonb);
VALUES(259200, '{"min_msat": "12000000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432, "min_payment_size_msat": "1000", "max_payment_size_msat": "4000000000"}'::jsonb);

INSERT INTO public.new_channel_params (validity, params)
VALUES(3600, '{"min_msat": "10000000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432}'::jsonb);
VALUES(3600, '{"min_msat": "10000000", "proportional": 7500, "max_idle_time": 4320, "max_client_to_self_delay": 432, "min_payment_size_msat": "1000", "max_payment_size_msat": "4000000000"}'::jsonb);
2 changes: 2 additions & 0 deletions postgresql/migrations/000017_payment_sizes.down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE lsps2.buy_registrations DROP COLUMN params_min_payment_size_msat;
ALTER TABLE lsps2.buy_registrations DROP COLUMN params_max_payment_size_msat;
5 changes: 5 additions & 0 deletions postgresql/migrations/000017_payment_sizes.up copy.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ALTER TABLE lsps2.buy_registrations ADD COLUMN params_min_payment_size_msat BIGINT NULL;
ALTER TABLE lsps2.buy_registrations ADD COLUMN params_max_payment_size_msat BIGINT NULL;
UPDATE lsps2.buy_registrations SET params_min_payment_size_msat = 0, params_max_payment_size_msat = 0;
ALTER TABLE lsps2.buy_registrations ALTER COLUMN params_min_payment_size_msat SET NOT NULL;
ALTER TABLE lsps2.buy_registrations ALTER COLUMN params_max_payment_size_msat SET NOT NULL;
Loading

0 comments on commit d6b8caf

Please sign in to comment.