From 53e56fdd26ced8b6eea231d9242b82fe1bf18487 Mon Sep 17 00:00:00 2001 From: bruwbird Date: Wed, 29 May 2024 15:04:04 +0900 Subject: [PATCH] config: make lwk-related settings clear To make lwk-related settings easier to understand, the following changes have been made. * Simplification of default settings in documentation * Clarified logging in case of incorrect configuration --- clightning/config.go | 4 ++-- cmd/peerswaplnd/config.go | 4 ++-- docs/setup_lwk.md | 4 +--- lwk/conf_builder.go | 8 +++---- lwk/config.go | 47 +++++++++++++++++++++++++++++++-------- lwk/config_test.go | 40 +++++++++++++++++++++++++++++++-- 6 files changed, 85 insertions(+), 22 deletions(-) diff --git a/clightning/config.go b/clightning/config.go index 98e14452..5f19976b 100644 --- a/clightning/config.go +++ b/clightning/config.go @@ -257,14 +257,14 @@ func LWKConfigFromToml(filePath string) (*lwk.Conf, error) { c.SetSignerName(lwk.NewConfName(cfg.LWK.SignerName)) } if cfg.LWK.LWKEndpoint != "" { - lwkEndpoint, err := lwk.NewConfURL(cfg.LWK.LWKEndpoint) + lwkEndpoint, err := lwk.NewLWKURL(cfg.LWK.LWKEndpoint) if err != nil { return nil, err } c.SetLWKEndpoint(*lwkEndpoint) } if cfg.LWK.ElectrumEndpoint != "" { - electrumEndpoint, err := lwk.NewConfURL(cfg.LWK.ElectrumEndpoint) + electrumEndpoint, err := lwk.NewElectrsURL(cfg.LWK.ElectrumEndpoint) if err != nil { return nil, err } diff --git a/cmd/peerswaplnd/config.go b/cmd/peerswaplnd/config.go index 87dcdc46..b7fe1c36 100644 --- a/cmd/peerswaplnd/config.go +++ b/cmd/peerswaplnd/config.go @@ -214,14 +214,14 @@ func LWKFromIniFileConfig(filePath string) (*lwk.Conf, error) { c.SetSignerName(lwk.NewConfName(cfg.LWK.SignerName)) } if cfg.LWK.LWKEndpoint != "" { - lwkEndpoint, err := lwk.NewConfURL(cfg.LWK.LWKEndpoint) + lwkEndpoint, err := lwk.NewLWKURL(cfg.LWK.LWKEndpoint) if err != nil { return nil, err } c.SetLWKEndpoint(*lwkEndpoint) } if cfg.LWK.ElectrumEndpoint != "" { - electrumEndpoint, err := lwk.NewConfURL(cfg.LWK.ElectrumEndpoint) + electrumEndpoint, err := lwk.NewElectrsURL(cfg.LWK.ElectrumEndpoint) if err != nil { return nil, err } diff --git a/docs/setup_lwk.md b/docs/setup_lwk.md index f94235a8..db7c81ce 100644 --- a/docs/setup_lwk.md +++ b/docs/setup_lwk.md @@ -42,7 +42,7 @@ The following settings are available * signer name * lwk endpoint : lwk jsonrpc endpoint * electrumEndpoint : electrum JSON-RPC serverのendpoint -* network : `liquid`、`liquid-testnet`.`"liquid-regtest` +* network : **`liquid`, `liquid-testnet`, `liquid-regtest`** * liquidSwaps : `true` if used Set up in INI (.ini) File Format for lnd and in toml format for cln @@ -52,7 +52,6 @@ Example configuration in lnd ```sh lwk.signername=signername lwk.walletname=walletname -lwk.lwkendpoint=http://localhost:32110 lwk.network=liquid lwk.liquidswaps=true ``` @@ -62,7 +61,6 @@ Example configuration in cln [LWK] signername="signername" walletname="walletname" -lwkendpoint="http://localhost:32110" network="liquid" liquidswaps=true ``` \ No newline at end of file diff --git a/lwk/conf_builder.go b/lwk/conf_builder.go index 13c0a0b5..72f7be63 100644 --- a/lwk/conf_builder.go +++ b/lwk/conf_builder.go @@ -28,11 +28,11 @@ func (b *confBuilder) DefaultConf() (*confBuilder, error) { lwkEndpoint = "http://localhost:32110" electrumEndpoint = "ssl://blockstream.info:995" } - lwkURL, err := NewConfURL(lwkEndpoint) + lwkURL, err := NewLWKURL(lwkEndpoint) if err != nil { return nil, err } - elementsURL, err := NewConfURL(electrumEndpoint) + elementsURL, err := NewElectrsURL(electrumEndpoint) if err != nil { return nil, err } @@ -53,12 +53,12 @@ func (b *confBuilder) SetWalletName(name confname) *confBuilder { return b } -func (b *confBuilder) SetLWKEndpoint(endpoint confurl) *confBuilder { +func (b *confBuilder) SetLWKEndpoint(endpoint lwkurl) *confBuilder { b.lwkEndpoint = endpoint return b } -func (b *confBuilder) SetElectrumEndpoint(endpoint confurl) *confBuilder { +func (b *confBuilder) SetElectrumEndpoint(endpoint electsurl) *confBuilder { b.electrumEndpoint = endpoint return b } diff --git a/lwk/config.go b/lwk/config.go index 28f5206a..ec026b05 100644 --- a/lwk/config.go +++ b/lwk/config.go @@ -2,6 +2,7 @@ package lwk import ( "errors" + "fmt" "net/url" "github.com/vulpemventures/go-elements/network" @@ -10,8 +11,8 @@ import ( type Conf struct { signerName confname walletName confname - lwkEndpoint confurl - electrumEndpoint confurl + lwkEndpoint lwkurl + electrumEndpoint electsurl network LwkNetwork liquidSwaps bool } @@ -100,7 +101,7 @@ func NewlwkNetwork(lekNetwork string) (LwkNetwork, error) { case "liquid-regtest": return NetworkRegtest, nil default: - return "", errors.New("invalid network") + return "", fmt.Errorf("expected liquid, liquid-testnet or liquid-regtest, got %s", lekNetwork) } } @@ -130,24 +131,52 @@ func (n confname) String() string { return string(n) } -type confurl struct { +type lwkurl struct { *url.URL } -func NewConfURL(endpoint string) (*confurl, error) { +func NewLWKURL(endpoint string) (*lwkurl, error) { u, err := url.ParseRequestURI(endpoint) if err != nil { return nil, err } - return &confurl{u}, nil + return &lwkurl{u}, nil } -func (n confurl) validate() error { - if n.URL == nil { +func (u lwkurl) validate() error { + if u.URL == nil { return errors.New("url must be set") } - if n.URL.String() == "" { + if u.URL.String() == "" { return errors.New("could not parse url") } + if u.Scheme != "http" && u.Scheme != "https" { + return fmt.Errorf("expected http or https scheme, got %s", u.Scheme) + } + return nil +} + +type electsurl struct { + *url.URL +} + +func NewElectrsURL(endpoint string) (*electsurl, error) { + u, err := url.ParseRequestURI(endpoint) + if err != nil { + return nil, err + } + return &electsurl{u}, nil +} + +func (u electsurl) validate() error { + if u.URL == nil { + return errors.New("url must be set") + } + if u.URL.String() == "" { + return errors.New("could not parse url") + } + if u.Scheme != "ssl" && u.Scheme != "tcp" { + return fmt.Errorf("expected ssl or tcp scheme, got %s", u.Scheme) + } return nil } diff --git a/lwk/config_test.go b/lwk/config_test.go index 738ce32b..9f09205f 100644 --- a/lwk/config_test.go +++ b/lwk/config_test.go @@ -41,7 +41,7 @@ func TestNewlwkNetwork(t *testing.T) { } } -func TestNewConfURL(t *testing.T) { +func TestLWKURL(t *testing.T) { t.Parallel() tests := map[string]struct { endpoint string @@ -65,7 +65,43 @@ func TestNewConfURL(t *testing.T) { tt := tt t.Run(name, func(t *testing.T) { t.Parallel() - got, err := lwk.NewConfURL(tt.endpoint) + got, err := lwk.NewLWKURL(tt.endpoint) + if tt.wantErr { + assert.Error(t, err) + return + } + if got.String() != tt.want { + t.Errorf("NewConfURL() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestElectrsURL(t *testing.T) { + t.Parallel() + tests := map[string]struct { + endpoint string + want string + wantErr bool + }{ + "valid url": { + endpoint: "ssl://localhost:32111", + want: "ssl://localhost:32111", + }, + "without protocol": { + endpoint: "localhost:32111", + want: "localhost:32111", + }, + "invalid url": { + endpoint: "invalid url", + wantErr: true, + }, + } + for name, tt := range tests { + tt := tt + t.Run(name, func(t *testing.T) { + t.Parallel() + got, err := lwk.NewElectrsURL(tt.endpoint) if tt.wantErr { assert.Error(t, err) return