diff --git a/lsps2/store.go b/lsps2/store.go index 7dcc886..6f3c7b2 100644 --- a/lsps2/store.go +++ b/lsps2/store.go @@ -25,6 +25,7 @@ type BuyRegistration struct { Id uint64 LspId string PeerId string // TODO: Make peerId in the registration a byte array. + Token string Scid lightning.ShortChannelID OpeningFeeParams shared.OpeningFeeParams PaymentSizeMsat *uint64 diff --git a/postgresql/lsps2_store.go b/postgresql/lsps2_store.go index 9536b40..fed6de6 100644 --- a/postgresql/lsps2_store.go +++ b/postgresql/lsps2_store.go @@ -25,7 +25,20 @@ func (s *Lsps2Store) RegisterBuy( ctx context.Context, req *lsps2.RegisterBuy, ) error { - _, err := s.pool.Exec( + row := s.pool.QueryRow( + ctx, + `SELECT token + FROM lsps2.promises + WHERE promise = $1`, + req.OpeningFeeParams.Promise, + ) + var token string + err := row.Scan(&token) + if err != nil { + return fmt.Errorf("promise does not have matching token") + } + + _, err = s.pool.Exec( ctx, `INSERT INTO lsps2.buy_registrations ( lsp_id @@ -39,6 +52,7 @@ func (s *Lsps2Store) RegisterBuy( , params_min_lifetime , params_max_client_to_self_delay , params_promise + , token ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)`, req.LspId, @@ -52,6 +66,7 @@ func (s *Lsps2Store) RegisterBuy( req.OpeningFeeParams.MinLifetime, req.OpeningFeeParams.MaxClientToSelfDelay, req.OpeningFeeParams.Promise, + token, ) if err != nil { if strings.Contains(err.Error(), "idx_lsps2_buy_registrations_scid") { @@ -79,6 +94,7 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor , r.params_min_lifetime , r.params_max_client_to_self_delay , r.params_promise + , r.token , c.funding_tx_id , c.funding_tx_outnum , c.is_completed @@ -99,6 +115,7 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor var db_params_min_lifetime uint32 var db_params_max_client_to_self_delay uint32 var db_params_promise string + var db_token string var db_funding_tx_id []byte var db_funding_tx_outnum uint32 var db_is_completed bool @@ -114,6 +131,7 @@ func (s *Lsps2Store) GetBuyRegistration(ctx context.Context, scid lightning.Shor &db_params_min_lifetime, &db_params_max_client_to_self_delay, &db_params_promise, + &db_token, &db_funding_tx_id, &db_funding_tx_outnum, &db_is_completed, diff --git a/postgresql/migrations/000014_lsps2_buy.up.sql b/postgresql/migrations/000014_lsps2_buy.up.sql index 6041420..4986a49 100644 --- a/postgresql/migrations/000014_lsps2_buy.up.sql +++ b/postgresql/migrations/000014_lsps2_buy.up.sql @@ -11,7 +11,8 @@ CREATE TABLE lsps2.buy_registrations ( params_valid_until varchar NOT NULL, params_min_lifetime bigint NOT NULL, params_max_client_to_self_delay bigint NOT NULL, - params_promise varchar NOT NULL + params_promise varchar NOT NULL, + token VARCHAR NOT NULL ); CREATE UNIQUE INDEX idx_lsps2_buy_registrations_scid ON lsps2.buy_registrations (scid); CREATE INDEX idx_lsps2_buy_registrations_valid_until ON lsps2.buy_registrations (params_valid_until); @@ -30,3 +31,8 @@ CREATE TABLE lsps2.bought_channels ( ON DELETE CASCADE ); CREATE INDEX idx_lsps2_bought_channels_registration_id ON lsps2.bought_channels (registration_id); + +CREATE TABLE lsps2.promises ( + promise varchar PRIMARY KEY, + token varchar NOT NULL +) \ No newline at end of file