mirror of
https://github.com/lightninglabs/loop.git
synced 2026-08-13 12:33:03 +02:00
Compare commits
47 commits
v0.34.0-be
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d1dbcb599 | ||
|
|
f826260266 | ||
|
|
e772f8ccfa | ||
|
|
b596eabab3 | ||
|
|
b689e361c1 | ||
|
|
6853e69a05 | ||
|
|
b3776e92f4 | ||
|
|
51eb8f410a | ||
|
|
c75d7e3e81 | ||
|
|
41b884f610 | ||
|
|
2989ceee42 | ||
|
|
806c1f9356 | ||
|
|
7cab89d45b | ||
|
|
aa79fa5262 | ||
|
|
95e184a40f | ||
|
|
1b81a06b42 | ||
|
|
57fb007f95 | ||
|
|
6f0d817db4 | ||
|
|
f5f76a61cc | ||
|
|
4016f4a8f2 | ||
|
|
414760c607 | ||
|
|
a8e3e9c853 | ||
|
|
b686d97445 | ||
|
|
9e97992e18 | ||
|
|
cfbade1239 | ||
|
|
dc39d63d8d | ||
|
|
c7d5e466cd | ||
|
|
514c3f06ad | ||
|
|
8f831e85ae | ||
|
|
2dda482660 | ||
|
|
dede47e727 | ||
|
|
f51148a3a0 | ||
|
|
4acabf72ee | ||
|
|
6b942941fb | ||
|
|
edad26b876 | ||
|
|
4732ec71e9 | ||
|
|
4ca7a9c5ec | ||
|
|
cb97b2a37f | ||
|
|
4161f5d128 | ||
|
|
d5fb8b8da8 | ||
|
|
4a2bcb3374 | ||
|
|
e3e6205a4b | ||
|
|
f5cc85f7f3 | ||
|
|
7200a7ce09 | ||
|
|
34cf98e8e8 | ||
|
|
df7dfba12a | ||
|
|
4c03e46928 |
166 changed files with 7606 additions and 393 deletions
3
.github/pull_request_template.md
vendored
3
.github/pull_request_template.md
vendored
|
|
@ -1,2 +1,3 @@
|
|||
#### Pull Request Checklist
|
||||
- [ ] Update `release_notes.md` if your PR contains major features, breaking changes or bugfixes
|
||||
- [ ] Add an entry to `docs/release-notes/release-notes-next.md`, or apply the
|
||||
`no-changelog` label (required by CI)
|
||||
|
|
|
|||
66
.github/workflows/gateway.yml
vendored
Normal file
66
.github/workflows/gateway.yml
vendored
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
name: gateway
|
||||
|
||||
# Opt-in code-review bot. Triggered by a `/gateway <command>` comment on a PR
|
||||
# (e.g. `/gateway review`); review/approve commands are gated to maintainers.
|
||||
# Comment-commands only — no pull_request triggers — so fork PRs (which receive
|
||||
# no secrets) never spawn failing runs. v0.5.0 added the
|
||||
# pull_request_review_comment trigger: /gateway dismiss, promote, and explain
|
||||
# now also work as replies on a finding's inline thread (finding id inferred
|
||||
# from the thread when omitted). Also a comment event — same fork-PR safety
|
||||
# profile as issue_comment.
|
||||
#
|
||||
# Thin shim: the public lightninglabs/gateway-action mints an App token and
|
||||
# checks out the private gateway runtime at execution time. The runtime stays
|
||||
# private; only this entry point is public.
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
|
||||
permissions:
|
||||
# The action mints an App installation token internally; the GITHUB_TOKEN
|
||||
# handed to this shim is unused, so we minimise it.
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
review:
|
||||
# issue_comment fires for all issues and every PR comment. Filter to PR
|
||||
# comments that look like a /gateway command so unrelated comments don't
|
||||
# spin up a no-op runner. `contains` (not `startsWith`) because the runtime
|
||||
# accepts the command at column 0 of any line, including multi-line bodies.
|
||||
if: >-
|
||||
${{
|
||||
(github.event_name == 'issue_comment'
|
||||
&& github.event.issue.pull_request != null
|
||||
&& contains(github.event.comment.body, '/gateway')) ||
|
||||
(github.event_name == 'pull_request_review_comment'
|
||||
&& contains(github.event.comment.body, '/gateway'))
|
||||
}}
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
env:
|
||||
GATEWAY_REVIEW_MODE: multi
|
||||
steps:
|
||||
- uses: lightninglabs/gateway-action@334a8455ee316e40668ae3ac85249150c62704ec # v0.6.0
|
||||
with:
|
||||
# Pin the private runtime to an immutable commit (matches the action
|
||||
# SHA-pin above) so runtime upgrades go through a loop PR, not a moved
|
||||
# tag. Without this, runtime_ref defaults to the v0.6.0 tag.
|
||||
runtime_ref: 75f6e67deac362bdcfc10d10629ddcf69c0e2615 # gateway v0.6.0
|
||||
event_name: ${{ github.event_name }}
|
||||
event_action: ${{ github.event.action }}
|
||||
repo: ${{ github.repository }}
|
||||
pr_number: ${{ github.event.issue.number || github.event.pull_request.number }}
|
||||
actor: ${{ github.event.sender.login }}
|
||||
comment_body: ${{ github.event.comment.body }}
|
||||
comment_id: ${{ github.event.comment.id }}
|
||||
comment_in_reply_to: ${{ github.event.comment.in_reply_to_id }}
|
||||
# installation_id intentionally omitted: as of gateway v0.4.4 the
|
||||
# runtime resolves the App installation covering this repo from
|
||||
# app_id/private_key, so a hardcoded (and easily wrong-org) id is no
|
||||
# longer needed.
|
||||
app_id: ${{ secrets.GATEWAY_APP_ID }}
|
||||
private_key: ${{ secrets.GATEWAY_PRIVATE_KEY }}
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
58
.github/workflows/release-notes.yml
vendored
Normal file
58
.github/workflows/release-notes.yml
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
name: Release Notes
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
- labeled
|
||||
- unlabeled
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
release-notes:
|
||||
name: Release Notes
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Skip release notes check
|
||||
if: contains(github.event.pull_request.labels.*.name, 'no-changelog')
|
||||
run: echo "Release notes check skipped by the no-changelog label."
|
||||
|
||||
- name: git checkout
|
||||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-changelog') }}
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Check for a release note
|
||||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-changelog') }}
|
||||
env:
|
||||
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
||||
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
||||
RELEASE_NOTES_FILE: docs/release-notes/release-notes-next.md
|
||||
run: |
|
||||
if git diff --unified=0 "$BASE_SHA...$HEAD_SHA" -- \
|
||||
"$RELEASE_NOTES_FILE" |
|
||||
awk '
|
||||
/^@@/ { in_hunk = 1; next }
|
||||
in_hunk && /^\+/ {
|
||||
line = substr($0, 2)
|
||||
if (line ~ /[^[:space:]]/) found = 1
|
||||
}
|
||||
END { exit found ? 0 : 1 }
|
||||
'
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "::error file=$RELEASE_NOTES_FILE::Add a release note or apply the no-changelog label."
|
||||
exit 1
|
||||
|
|
@ -72,3 +72,12 @@ the binding dependencies are the asset loop-out fields
|
|||
`routerrpc.SendPaymentRequest.first_hop_custom_records` and
|
||||
`lnrpc.Route.custom_channel_data` (lnd v0.18.4-beta), plus the sweep-batcher fee
|
||||
floor `walletrpc.EstimateFeeResponse.min_relay_fee_sat_per_kw` (lnd v0.18.3-beta).
|
||||
|
||||
**6. Pull Request Release Notes:**
|
||||
|
||||
Every pull request must either add at least one non-empty line to
|
||||
`docs/release-notes/release-notes-next.md` or carry the `no-changelog` label.
|
||||
Before finishing any change intended for a pull request, add a concise entry
|
||||
under the appropriate section (`New Features`, `Breaking Changes`, `Bug Fixes`,
|
||||
or `Maintenance`). For a change that does not warrant a release note, ensure the
|
||||
pull request uses the `no-changelog` label instead. This is enforced by CI.
|
||||
|
|
|
|||
|
|
@ -133,4 +133,4 @@ go install ./...
|
|||
## Reproducible builds
|
||||
|
||||
If you want to build release files yourself, follow
|
||||
[the guide](./docs/release.md).
|
||||
[the guide](./docs/reproducible_release.md).
|
||||
|
|
|
|||
107
assets/client.go
107
assets/client.go
|
|
@ -4,6 +4,8 @@ import (
|
|||
"context"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math"
|
||||
"math/big"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
|
|
@ -11,7 +13,6 @@ import (
|
|||
|
||||
"github.com/btcsuite/btcd/btcutil"
|
||||
"github.com/lightninglabs/taproot-assets/rfqmath"
|
||||
"github.com/lightninglabs/taproot-assets/rpcutils"
|
||||
"github.com/lightninglabs/taproot-assets/taprpc"
|
||||
"github.com/lightninglabs/taproot-assets/taprpc/priceoraclerpc"
|
||||
"github.com/lightninglabs/taproot-assets/taprpc/rfqrpc"
|
||||
|
|
@ -78,14 +79,19 @@ type TapdClient struct {
|
|||
rfqrpc.RfqClient
|
||||
universerpc.UniverseClient
|
||||
|
||||
cfg *TapdConfig
|
||||
assetNameCache map[string]string
|
||||
assetNameMutex sync.Mutex
|
||||
cc *grpc.ClientConn
|
||||
rfqTimeoutSeconds uint32
|
||||
assetNameCache map[string]string
|
||||
assetNameMutex sync.RWMutex
|
||||
cc *grpc.ClientConn
|
||||
}
|
||||
|
||||
// NewTapdClient returns a new taproot assets client.
|
||||
func NewTapdClient(config *TapdConfig) (*TapdClient, error) {
|
||||
rfqTimeoutSeconds, err := getRfqTimeoutSeconds(config.RFQtimeout)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create the client connection to the server.
|
||||
conn, err := getClientConn(config)
|
||||
if err != nil {
|
||||
|
|
@ -96,7 +102,7 @@ func NewTapdClient(config *TapdConfig) (*TapdClient, error) {
|
|||
client := &TapdClient{
|
||||
assetNameCache: make(map[string]string),
|
||||
cc: conn,
|
||||
cfg: config,
|
||||
rfqTimeoutSeconds: rfqTimeoutSeconds,
|
||||
TaprootAssetsClient: taprpc.NewTaprootAssetsClient(conn),
|
||||
TaprootAssetChannelsClient: tapchannelrpc.NewTaprootAssetChannelsClient(conn),
|
||||
PriceOracleClient: priceoraclerpc.NewPriceOracleClient(conn),
|
||||
|
|
@ -139,7 +145,7 @@ func (c *TapdClient) GetRfqForAsset(ctx context.Context,
|
|||
PeerPubKey: peerPubkey,
|
||||
PaymentMaxAmt: uint64(paymentMaxAmt),
|
||||
Expiry: uint64(expiry),
|
||||
TimeoutSeconds: uint32(c.cfg.RFQtimeout.Seconds()),
|
||||
TimeoutSeconds: c.rfqTimeoutSeconds,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -152,21 +158,26 @@ func (c *TapdClient) GetRfqForAsset(ctx context.Context,
|
|||
rfq.GetRejectedQuote())
|
||||
}
|
||||
|
||||
if rfq.GetAcceptedQuote() != nil {
|
||||
return rfq.GetAcceptedQuote(), nil
|
||||
acceptedQuote := rfq.GetAcceptedQuote()
|
||||
if acceptedQuote == nil {
|
||||
return nil, fmt.Errorf("no accepted quote")
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("no accepted quote")
|
||||
_, err = unmarshalAssetRate(acceptedQuote.BidAssetRate)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid accepted quote asset rate: %w",
|
||||
err)
|
||||
}
|
||||
|
||||
return acceptedQuote, nil
|
||||
}
|
||||
|
||||
// GetAssetName returns the human-readable name of the asset.
|
||||
func (c *TapdClient) GetAssetName(ctx context.Context,
|
||||
assetId []byte) (string, error) {
|
||||
|
||||
c.assetNameMutex.Lock()
|
||||
defer c.assetNameMutex.Unlock()
|
||||
assetIdStr := hex.EncodeToString(assetId)
|
||||
if name, ok := c.assetNameCache[assetIdStr]; ok {
|
||||
if name, ok := c.getCachedAssetName(assetIdStr); ok {
|
||||
return name, nil
|
||||
}
|
||||
|
||||
|
|
@ -192,11 +203,28 @@ func (c *TapdClient) GetAssetName(ctx context.Context,
|
|||
assetName = assetStats.AssetStats[0].Asset.AssetName
|
||||
}
|
||||
|
||||
c.assetNameCache[assetIdStr] = assetName
|
||||
c.cacheAssetName(assetIdStr, assetName)
|
||||
|
||||
return assetName, nil
|
||||
}
|
||||
|
||||
// getCachedAssetName returns an asset name from the cache.
|
||||
func (c *TapdClient) getCachedAssetName(assetID string) (string, bool) {
|
||||
c.assetNameMutex.RLock()
|
||||
defer c.assetNameMutex.RUnlock()
|
||||
|
||||
name, ok := c.assetNameCache[assetID]
|
||||
return name, ok
|
||||
}
|
||||
|
||||
// cacheAssetName adds an asset name to the cache.
|
||||
func (c *TapdClient) cacheAssetName(assetID, name string) {
|
||||
c.assetNameMutex.Lock()
|
||||
defer c.assetNameMutex.Unlock()
|
||||
|
||||
c.assetNameCache[assetID] = name
|
||||
}
|
||||
|
||||
// GetAssetPrice returns the price of an asset in satoshis. NOTE: this currently
|
||||
// uses the rfq process for the asset price. A future implementation should
|
||||
// use a price oracle to not spam a peer.
|
||||
|
|
@ -220,7 +248,7 @@ func (c *TapdClient) GetAssetPrice(ctx context.Context, assetID string,
|
|||
},
|
||||
PaymentMaxAmt: uint64(msatAmt),
|
||||
Expiry: uint64(rfqExpiry),
|
||||
TimeoutSeconds: uint32(c.cfg.RFQtimeout.Seconds()),
|
||||
TimeoutSeconds: c.rfqTimeoutSeconds,
|
||||
PeerPubKey: peerPubkey,
|
||||
})
|
||||
if err != nil {
|
||||
|
|
@ -254,7 +282,7 @@ func (c *TapdClient) GetAssetPrice(ctx context.Context, assetID string,
|
|||
func getSatsFromAssetAmt(assetAmt uint64, assetRate *rfqrpc.FixedPoint) (
|
||||
btcutil.Amount, error) {
|
||||
|
||||
rateFP, err := rpcutils.UnmarshalRfqFixedPoint(assetRate)
|
||||
rateFP, err := unmarshalAssetRate(assetRate)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("cannot unmarshal asset rate: %w", err)
|
||||
}
|
||||
|
|
@ -266,6 +294,33 @@ func getSatsFromAssetAmt(assetAmt uint64, assetRate *rfqrpc.FixedPoint) (
|
|||
return msatAmt.ToSatoshis(), nil
|
||||
}
|
||||
|
||||
// unmarshalAssetRate validates and converts an RPC asset rate to the fixed
|
||||
// point representation used for RFQ arithmetic.
|
||||
func unmarshalAssetRate(assetRate *rfqrpc.FixedPoint) (
|
||||
*rfqmath.BigIntFixedPoint, error) {
|
||||
|
||||
if assetRate == nil {
|
||||
return nil, fmt.Errorf("asset rate cannot be nil")
|
||||
}
|
||||
if assetRate.Scale > math.MaxUint8 {
|
||||
return nil, fmt.Errorf("scale value overflow: %v", assetRate.Scale)
|
||||
}
|
||||
|
||||
coefficient, ok := new(big.Int).SetString(assetRate.Coefficient, 10)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid asset rate coefficient: %q",
|
||||
assetRate.Coefficient)
|
||||
}
|
||||
if coefficient.Sign() <= 0 {
|
||||
return nil, fmt.Errorf("asset rate coefficient must be positive")
|
||||
}
|
||||
|
||||
return &rfqmath.BigIntFixedPoint{
|
||||
Coefficient: rfqmath.NewBigInt(coefficient),
|
||||
Scale: uint8(assetRate.Scale),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// getPaymentMaxAmount returns the milisat amount we are willing to pay for the
|
||||
// payment.
|
||||
func getPaymentMaxAmount(satAmount btcutil.Amount, feeLimitMultiplier float64) (
|
||||
|
|
@ -288,6 +343,26 @@ func getPaymentMaxAmount(satAmount btcutil.Amount, feeLimitMultiplier float64) (
|
|||
)
|
||||
}
|
||||
|
||||
// getRfqTimeoutSeconds converts the configured RFQ timeout to the whole
|
||||
// seconds accepted by tapd. Fractional seconds are rounded up so tapd's
|
||||
// timeout is never shorter than the configured duration.
|
||||
func getRfqTimeoutSeconds(timeout time.Duration) (uint32, error) {
|
||||
if timeout <= 0 {
|
||||
return 0, fmt.Errorf("RFQ timeout must be greater than zero")
|
||||
}
|
||||
|
||||
seconds := timeout / time.Second
|
||||
if timeout%time.Second != 0 {
|
||||
seconds++
|
||||
}
|
||||
if seconds > time.Duration(math.MaxUint32) {
|
||||
return 0, fmt.Errorf("RFQ timeout exceeds maximum of %v seconds",
|
||||
uint64(math.MaxUint32))
|
||||
}
|
||||
|
||||
return uint32(seconds), nil
|
||||
}
|
||||
|
||||
func getClientConn(config *TapdConfig) (*grpc.ClientConn, error) {
|
||||
// Load the specified TLS certificate and build transport credentials.
|
||||
creds, err := credentials.NewClientTLSFromFile(config.TLSPath, "")
|
||||
|
|
|
|||
|
|
@ -1,20 +1,64 @@
|
|||
package assets
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"encoding/pem"
|
||||
"math"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/btcutil"
|
||||
"github.com/lightninglabs/taproot-assets/taprpc/rfqrpc"
|
||||
"github.com/lightninglabs/taproot-assets/taprpc/universerpc"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/grpc"
|
||||
"gopkg.in/macaroon.v2"
|
||||
)
|
||||
|
||||
type blockingUniverseClient struct {
|
||||
universerpc.UniverseClient
|
||||
|
||||
queryStarted chan struct{}
|
||||
releaseQuery chan struct{}
|
||||
}
|
||||
|
||||
func (b *blockingUniverseClient) QueryAssetStats(context.Context,
|
||||
*universerpc.AssetStatsQuery, ...grpc.CallOption) (
|
||||
*universerpc.UniverseAssetStats, error) {
|
||||
|
||||
close(b.queryStarted)
|
||||
<-b.releaseQuery
|
||||
|
||||
return &universerpc.UniverseAssetStats{
|
||||
AssetStats: []*universerpc.AssetStatsSnapshot{
|
||||
{
|
||||
Asset: &universerpc.AssetStatsAsset{
|
||||
AssetName: "queried asset",
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
type staticRfqClient struct {
|
||||
rfqrpc.RfqClient
|
||||
|
||||
response *rfqrpc.AddAssetSellOrderResponse
|
||||
}
|
||||
|
||||
func (s *staticRfqClient) AddAssetSellOrder(context.Context,
|
||||
*rfqrpc.AddAssetSellOrderRequest, ...grpc.CallOption) (
|
||||
*rfqrpc.AddAssetSellOrderResponse, error) {
|
||||
|
||||
return s.response, nil
|
||||
}
|
||||
|
||||
// TestDefaultTapdConfig tests that the default tapd connection paths match
|
||||
// tapd's mainnet defaults.
|
||||
func TestDefaultTapdConfig(t *testing.T) {
|
||||
|
|
@ -82,6 +126,144 @@ func TestTapdConfigClientConn(t *testing.T) {
|
|||
)
|
||||
}
|
||||
|
||||
// TestGetAssetNameCachedLookupNotBlocked verifies that a slow universe query
|
||||
// for one asset does not prevent another caller from reading a cached name.
|
||||
func TestGetAssetNameCachedLookupNotBlocked(t *testing.T) {
|
||||
const cachedName = "cached asset"
|
||||
|
||||
cachedAssetID := []byte{1}
|
||||
queryStarted := make(chan struct{})
|
||||
releaseQuery := make(chan struct{})
|
||||
client := &TapdClient{
|
||||
UniverseClient: &blockingUniverseClient{
|
||||
queryStarted: queryStarted,
|
||||
releaseQuery: releaseQuery,
|
||||
},
|
||||
assetNameCache: map[string]string{
|
||||
hex.EncodeToString(cachedAssetID): cachedName,
|
||||
},
|
||||
}
|
||||
|
||||
queryResult := make(chan error, 1)
|
||||
go func() {
|
||||
_, err := client.GetAssetName(context.Background(), []byte{2})
|
||||
queryResult <- err
|
||||
}()
|
||||
|
||||
select {
|
||||
case <-queryStarted:
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("universe query did not start")
|
||||
}
|
||||
|
||||
type nameResult struct {
|
||||
name string
|
||||
err error
|
||||
}
|
||||
cachedResult := make(chan nameResult, 1)
|
||||
go func() {
|
||||
name, err := client.GetAssetName(
|
||||
context.Background(), cachedAssetID,
|
||||
)
|
||||
cachedResult <- nameResult{name: name, err: err}
|
||||
}()
|
||||
|
||||
select {
|
||||
case result := <-cachedResult:
|
||||
require.NoError(t, result.err)
|
||||
require.Equal(t, cachedName, result.name)
|
||||
case <-time.After(time.Second):
|
||||
close(releaseQuery)
|
||||
t.Fatal("cached lookup blocked behind universe query")
|
||||
}
|
||||
|
||||
close(releaseQuery)
|
||||
require.NoError(t, <-queryResult)
|
||||
}
|
||||
|
||||
// TestGetRfqForAssetValidatesRate verifies that malformed accepted quote rates
|
||||
// are rejected before they reach downstream RFQ arithmetic.
|
||||
func TestGetRfqForAssetValidatesRate(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
assetRate *rfqrpc.FixedPoint
|
||||
expectError bool
|
||||
}{
|
||||
{
|
||||
name: "valid",
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "100000", Scale: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "nil",
|
||||
assetRate: nil,
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
name: "malformed coefficient",
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "not-a-number", Scale: 0,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
name: "zero coefficient",
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "0", Scale: 0,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
name: "negative coefficient",
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "-1", Scale: 0,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
name: "scale overflow",
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "1", Scale: 256,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
acceptedQuote := &rfqrpc.PeerAcceptedSellQuote{
|
||||
BidAssetRate: test.assetRate,
|
||||
}
|
||||
acceptedResponse :=
|
||||
&rfqrpc.AddAssetSellOrderResponse_AcceptedQuote{
|
||||
AcceptedQuote: acceptedQuote,
|
||||
}
|
||||
client := &TapdClient{
|
||||
RfqClient: &staticRfqClient{
|
||||
response: &rfqrpc.AddAssetSellOrderResponse{
|
||||
Response: acceptedResponse,
|
||||
},
|
||||
},
|
||||
rfqTimeoutSeconds: 60,
|
||||
}
|
||||
|
||||
quote, err := client.GetRfqForAsset(
|
||||
context.Background(), 1000, []byte{1}, []byte{2},
|
||||
time.Now().Add(time.Minute).Unix(), 1,
|
||||
)
|
||||
if test.expectError {
|
||||
require.Error(t, err)
|
||||
require.Nil(t, quote)
|
||||
return
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Same(t, acceptedQuote, quote)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetPaymentMaxAmount(t *testing.T) {
|
||||
tests := []struct {
|
||||
satAmount btcutil.Amount
|
||||
|
|
@ -141,6 +323,62 @@ func TestGetPaymentMaxAmount(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// TestGetRfqTimeoutSeconds verifies that configured durations are safely
|
||||
// converted to tapd's whole-second timeout field.
|
||||
func TestGetRfqTimeoutSeconds(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
timeout time.Duration
|
||||
expectedSeconds uint32
|
||||
expectError bool
|
||||
}{
|
||||
{
|
||||
name: "whole seconds",
|
||||
timeout: 60 * time.Second,
|
||||
expectedSeconds: 60,
|
||||
},
|
||||
{
|
||||
name: "sub-second rounded up",
|
||||
timeout: time.Millisecond,
|
||||
expectedSeconds: 1,
|
||||
},
|
||||
{
|
||||
name: "fractional second rounded up",
|
||||
timeout: time.Second + time.Nanosecond,
|
||||
expectedSeconds: 2,
|
||||
},
|
||||
{
|
||||
name: "zero",
|
||||
timeout: 0,
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
name: "negative",
|
||||
timeout: -time.Second,
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
name: "overflow",
|
||||
timeout: time.Duration(math.MaxUint32)*time.Second +
|
||||
time.Nanosecond,
|
||||
expectError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
seconds, err := getRfqTimeoutSeconds(test.timeout)
|
||||
if test.expectError {
|
||||
require.Error(t, err)
|
||||
return
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, test.expectedSeconds, seconds)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetSatsFromAssetAmt(t *testing.T) {
|
||||
tests := []struct {
|
||||
assetAmt uint64
|
||||
|
|
@ -166,6 +404,39 @@ func TestGetSatsFromAssetAmt(t *testing.T) {
|
|||
expected: btcutil.Amount(0),
|
||||
expectError: false,
|
||||
},
|
||||
{
|
||||
assetAmt: 1000,
|
||||
assetRate: nil,
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
assetAmt: 1000,
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "not-a-number", Scale: 0,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
assetAmt: 1000,
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "0", Scale: 0,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
assetAmt: 1000,
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "-1", Scale: 0,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
assetAmt: 1000,
|
||||
assetRate: &rfqrpc.FixedPoint{
|
||||
Coefficient: "1", Scale: 256,
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
|
|
|||
|
|
@ -183,6 +183,8 @@ func instantOut(ctx context.Context, cmd *cli.Command) error {
|
|||
|
||||
fmt.Println("Starting instant swap out")
|
||||
|
||||
maxSwapFee := quote.ServiceFeeSat
|
||||
|
||||
// Now we can request the instant out swap.
|
||||
instantOutRes, err := client.InstantOut(
|
||||
ctx,
|
||||
|
|
@ -190,6 +192,9 @@ func instantOut(ctx context.Context, cmd *cli.Command) error {
|
|||
ReservationIds: selectedReservations,
|
||||
OutgoingChanSet: outgoingChanSet,
|
||||
DestAddr: cmd.String("addr"),
|
||||
MaxSwapFee: &looprpc.InstantOutRequest_MaxSwapFeeSat{
|
||||
MaxSwapFeeSat: maxSwapFee,
|
||||
},
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -560,10 +560,7 @@ func parseAmt(text string) (btcutil.Amount, error) {
|
|||
|
||||
func logSwap(swap *looprpc.SwapStatus) {
|
||||
// If our swap failed, we add our failure reason to the state.
|
||||
swapState := fmt.Sprintf("%v", swap.State)
|
||||
if swap.State == looprpc.SwapState_FAILED {
|
||||
swapState = fmt.Sprintf("%v (%v)", swapState, swap.FailureReason)
|
||||
}
|
||||
swapState := monitorSwapState(swap)
|
||||
|
||||
if swap.Type == looprpc.SwapType_LOOP_OUT {
|
||||
fmt.Printf("%v %v %v %v - %v",
|
||||
|
|
@ -585,10 +582,32 @@ func logSwap(swap *looprpc.SwapStatus) {
|
|||
}
|
||||
}
|
||||
|
||||
if swap.State != looprpc.SwapState_INITIATED &&
|
||||
swap.State != looprpc.SwapState_HTLC_PUBLISHED &&
|
||||
swap.State != looprpc.SwapState_PREIMAGE_REVEALED {
|
||||
showCost := shouldShowSwapCost(swap.GetState())
|
||||
if swap.Type == looprpc.SwapType_STATIC_LOOP_IN {
|
||||
staticState := swap.GetStaticLoopInState()
|
||||
// Static loop-ins key cost visibility off the dedicated FSM state, not
|
||||
// the generic SwapState lifecycle used by traditional swaps.
|
||||
switch staticState {
|
||||
case looprpc.StaticAddressLoopInSwapState_INIT_HTLC,
|
||||
looprpc.StaticAddressLoopInSwapState_SIGN_HTLC_TX,
|
||||
looprpc.StaticAddressLoopInSwapState_MONITOR_INVOICE_HTLC_TX,
|
||||
looprpc.StaticAddressLoopInSwapState_SWEEP_STATIC_ADDRESS_HTLC_TIMEOUT,
|
||||
looprpc.StaticAddressLoopInSwapState_MONITOR_HTLC_TIMEOUT_SWEEP,
|
||||
looprpc.StaticAddressLoopInSwapState_UNLOCK_DEPOSITS:
|
||||
|
||||
showCost = false
|
||||
|
||||
case looprpc.StaticAddressLoopInSwapState_PAYMENT_RECEIVED,
|
||||
looprpc.StaticAddressLoopInSwapState_HTLC_STATIC_ADDRESS_TIMEOUT_SWEPT,
|
||||
looprpc.StaticAddressLoopInSwapState_SUCCEEDED,
|
||||
looprpc.StaticAddressLoopInSwapState_SUCCEEDED_TRANSITIONING_FAILED,
|
||||
looprpc.StaticAddressLoopInSwapState_FAILED_STATIC_ADDRESS_SWAP:
|
||||
|
||||
showCost = true
|
||||
}
|
||||
}
|
||||
|
||||
if showCost {
|
||||
fmt.Printf(" (cost: server %v, onchain %v, offchain %v)",
|
||||
swap.CostServer, swap.CostOnchain, swap.CostOffchain,
|
||||
)
|
||||
|
|
@ -597,6 +616,38 @@ func logSwap(swap *looprpc.SwapStatus) {
|
|||
fmt.Println()
|
||||
}
|
||||
|
||||
// monitorSwapState returns the static loop-in FSM label for static swaps and
|
||||
// the shared swap-state label for all others.
|
||||
func monitorSwapState(swap *looprpc.SwapStatus) string {
|
||||
if swap.Type == looprpc.SwapType_STATIC_LOOP_IN {
|
||||
return swap.GetStaticLoopInState().String()
|
||||
}
|
||||
|
||||
return genericMonitorSwapState(swap)
|
||||
}
|
||||
|
||||
// shouldShowSwapCost reports whether a swap's generic state is terminal enough
|
||||
// to include the persisted cost summary in monitor output.
|
||||
func shouldShowSwapCost(loopState looprpc.SwapState) bool {
|
||||
return loopState != looprpc.SwapState_INITIATED &&
|
||||
loopState != looprpc.SwapState_HTLC_PUBLISHED &&
|
||||
loopState != looprpc.SwapState_PREIMAGE_REVEALED
|
||||
}
|
||||
|
||||
// genericMonitorSwapState formats the shared swap-state label and failure
|
||||
// reason used by non-static swaps.
|
||||
func genericMonitorSwapState(swap *looprpc.SwapStatus) string {
|
||||
loopState := swap.GetState()
|
||||
swapState := fmt.Sprintf("%v", loopState)
|
||||
if loopState == looprpc.SwapState_FAILED {
|
||||
swapState = fmt.Sprintf(
|
||||
"%v (%v)", swapState, swap.FailureReason,
|
||||
)
|
||||
}
|
||||
|
||||
return swapState
|
||||
}
|
||||
|
||||
// getClientConn dials the loopd gRPC server with TLS and macaroon auth.
|
||||
func getClientConn(address, tlsCertPath, macaroonPath string) (daemonConn,
|
||||
func(), error) {
|
||||
|
|
|
|||
275
cmd/loop/monitor_test.go
Normal file
275
cmd/loop/monitor_test.go
Normal file
|
|
@ -0,0 +1,275 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/lightninglabs/loop/looprpc"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// TestMonitorSwapStateKeepsRegularLoopInFailureReason preserves the generic
|
||||
// failure suffix for regular loop-in swaps so terminal errors stay visible.
|
||||
func TestMonitorSwapStateKeepsRegularLoopInFailureReason(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
Type: looprpc.SwapType_LOOP_IN,
|
||||
State: looprpc.SwapState_FAILED,
|
||||
FailureReason: looprpc.
|
||||
FailureReason_FAILURE_REASON_TIMEOUT,
|
||||
}
|
||||
|
||||
got := monitorSwapState(swap)
|
||||
require.Equal(t, "FAILED (FAILURE_REASON_TIMEOUT)", got)
|
||||
}
|
||||
|
||||
// TestMonitorSwapStateLabelsStaticLoopInStages locks the precise static loop-in
|
||||
// stage names so monitor output stays stable as the FSM evolves.
|
||||
func TestMonitorSwapStateLabelsStaticLoopInStages(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
staticState looprpc.StaticAddressLoopInSwapState
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "init htlc",
|
||||
staticState: looprpc.StaticAddressLoopInSwapState_INIT_HTLC,
|
||||
want: "INIT_HTLC",
|
||||
},
|
||||
{
|
||||
name: "sign htlc",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_SIGN_HTLC_TX,
|
||||
want: "SIGN_HTLC_TX",
|
||||
},
|
||||
{
|
||||
name: "monitor invoice and htlc",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_MONITOR_INVOICE_HTLC_TX,
|
||||
want: "MONITOR_INVOICE_HTLC_TX",
|
||||
},
|
||||
{
|
||||
name: "unlock deposits",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_UNLOCK_DEPOSITS,
|
||||
want: "UNLOCK_DEPOSITS",
|
||||
},
|
||||
{
|
||||
name: "payment received",
|
||||
staticState: looprpc.StaticAddressLoopInSwapState_PAYMENT_RECEIVED,
|
||||
want: "PAYMENT_RECEIVED",
|
||||
},
|
||||
{
|
||||
name: "timeout sweep",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_SWEEP_STATIC_ADDRESS_HTLC_TIMEOUT,
|
||||
want: "SWEEP_STATIC_ADDRESS_HTLC_TIMEOUT",
|
||||
},
|
||||
{
|
||||
name: "monitor timeout sweep",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_MONITOR_HTLC_TIMEOUT_SWEEP,
|
||||
want: "MONITOR_HTLC_TIMEOUT_SWEEP",
|
||||
},
|
||||
{
|
||||
name: "timeout swept",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_HTLC_STATIC_ADDRESS_TIMEOUT_SWEPT,
|
||||
want: "HTLC_STATIC_ADDRESS_TIMEOUT_SWEPT",
|
||||
},
|
||||
{
|
||||
name: "success",
|
||||
staticState: looprpc.StaticAddressLoopInSwapState_SUCCEEDED,
|
||||
want: "SUCCEEDED",
|
||||
},
|
||||
{
|
||||
name: "succeeded transitioning failed",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_SUCCEEDED_TRANSITIONING_FAILED,
|
||||
want: "SUCCEEDED_TRANSITIONING_FAILED",
|
||||
},
|
||||
{
|
||||
name: "failed",
|
||||
staticState: looprpc.
|
||||
StaticAddressLoopInSwapState_FAILED_STATIC_ADDRESS_SWAP,
|
||||
want: "FAILED_STATIC_ADDRESS_SWAP",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: test.staticState,
|
||||
},
|
||||
}
|
||||
|
||||
got := monitorSwapState(swap)
|
||||
require.Equal(t, test.want, got)
|
||||
})
|
||||
}
|
||||
|
||||
initSwap := &looprpc.SwapStatus{
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: looprpc.
|
||||
StaticAddressLoopInSwapState_INIT_HTLC,
|
||||
},
|
||||
}
|
||||
signSwap := &looprpc.SwapStatus{
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: looprpc.
|
||||
StaticAddressLoopInSwapState_SIGN_HTLC_TX,
|
||||
},
|
||||
}
|
||||
require.NotEqual(t, monitorSwapState(initSwap), monitorSwapState(signSwap))
|
||||
}
|
||||
|
||||
// TestMonitorSwapStateLabelsUnknownStaticLoopIn ensures the absent static
|
||||
// oneof maps to the UNKNOWN static loop-in label.
|
||||
func TestMonitorSwapStateLabelsUnknownStaticLoopIn(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
}
|
||||
|
||||
got := monitorSwapState(swap)
|
||||
require.Equal(t, "UNKNOWN_STATIC_ADDRESS_SWAP_STATE", got)
|
||||
}
|
||||
|
||||
// TestLogSwapHidesStaticLoopInCostForInFlightState proves in-flight static FSM
|
||||
// state suppresses cost even with generic SUCCESS set deliberately.
|
||||
func TestLogSwapHidesStaticLoopInCostForInFlightState(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
LastUpdateTime: time.Unix(1, 0).UnixNano(),
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
State: looprpc.SwapState_SUCCESS,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: looprpc.
|
||||
StaticAddressLoopInSwapState_INIT_HTLC,
|
||||
},
|
||||
Amt: 50_000,
|
||||
CostServer: 11,
|
||||
CostOnchain: 22,
|
||||
CostOffchain: 33,
|
||||
HtlcAddressP2Wsh: "bc1qstaticinflighttestaddress",
|
||||
}
|
||||
|
||||
output := captureStdout(t, func() {
|
||||
logSwap(swap)
|
||||
})
|
||||
|
||||
require.Contains(t, output, "STATIC_LOOP_IN INIT_HTLC 0.00050000 BTC")
|
||||
require.NotContains(t, output, "(cost:")
|
||||
}
|
||||
|
||||
// TestLogSwapHidesCostForUnknownStaticLoopInState ensures unknown static
|
||||
// states print the UNKNOWN label without a cost summary.
|
||||
func TestLogSwapHidesCostForUnknownStaticLoopInState(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
LastUpdateTime: time.Unix(3, 0).UnixNano(),
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: looprpc.
|
||||
StaticAddressLoopInSwapState_UNKNOWN_STATIC_ADDRESS_SWAP_STATE,
|
||||
},
|
||||
Amt: 50_000,
|
||||
CostServer: 11,
|
||||
CostOnchain: 22,
|
||||
CostOffchain: 33,
|
||||
HtlcAddressP2Wsh: "bc1qunknownstaticterminaltestaddress",
|
||||
}
|
||||
|
||||
output := captureStdout(t, func() {
|
||||
logSwap(swap)
|
||||
})
|
||||
|
||||
require.Contains(
|
||||
t, output, "STATIC_LOOP_IN UNKNOWN_STATIC_ADDRESS_SWAP_STATE 0.00050000 BTC",
|
||||
)
|
||||
require.NotContains(t, output, "(cost:")
|
||||
}
|
||||
|
||||
// TestLogSwapShowsStaticLoopInCostForTerminalState preserves terminal cost
|
||||
// output, including the P2WSH address, once the static loop-in is done.
|
||||
func TestLogSwapShowsStaticLoopInCostForTerminalState(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
LastUpdateTime: time.Unix(2, 0).UnixNano(),
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
State: looprpc.SwapState_INITIATED,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: looprpc.
|
||||
StaticAddressLoopInSwapState_SUCCEEDED,
|
||||
},
|
||||
Amt: 50_000,
|
||||
CostServer: 11,
|
||||
CostOnchain: 22,
|
||||
CostOffchain: 33,
|
||||
HtlcAddressP2Wsh: "bc1qstaticterminaltestaddress",
|
||||
}
|
||||
|
||||
output := captureStdout(t, func() {
|
||||
logSwap(swap)
|
||||
})
|
||||
|
||||
require.Contains(
|
||||
t, output,
|
||||
"STATIC_LOOP_IN SUCCEEDED 0.00050000 BTC - P2WSH: bc1qstaticterminaltestaddress",
|
||||
)
|
||||
require.Contains(
|
||||
t, output,
|
||||
"(cost: server 11, onchain 22, offchain 33)",
|
||||
)
|
||||
}
|
||||
|
||||
// TestLogSwapDisplaysStaticLoopInTypeAndStage ensures the monitor output names
|
||||
// the static loop-in type and active FSM stage instead of collapsing them.
|
||||
func TestLogSwapDisplaysStaticLoopInTypeAndStage(t *testing.T) {
|
||||
swap := &looprpc.SwapStatus{
|
||||
LastUpdateTime: time.Unix(1, 0).UnixNano(),
|
||||
Type: looprpc.SwapType_STATIC_LOOP_IN,
|
||||
StaticLoopInStateOptional: &looprpc.SwapStatus_StaticLoopInState{
|
||||
StaticLoopInState: looprpc.
|
||||
StaticAddressLoopInSwapState_SIGN_HTLC_TX,
|
||||
},
|
||||
Amt: 50_000,
|
||||
HtlcAddressP2Wsh: "tb1q5cyxnuxmeuwuvkwfem96llyxf8duyshm56t8k8",
|
||||
}
|
||||
|
||||
output := captureStdout(t, func() {
|
||||
logSwap(swap)
|
||||
})
|
||||
|
||||
require.Contains(
|
||||
t, output, "STATIC_LOOP_IN SIGN_HTLC_TX 0.00050000 BTC",
|
||||
)
|
||||
require.Contains(
|
||||
t, output, "P2WSH: tb1q5cyxnuxmeuwuvkwfem96llyxf8duyshm56t8k8",
|
||||
)
|
||||
require.NotContains(t, output, "STATIC_LOOP_IN INIT_HTLC")
|
||||
}
|
||||
|
||||
func captureStdout(t *testing.T, fn func()) string {
|
||||
t.Helper()
|
||||
|
||||
originalStdout := os.Stdout
|
||||
reader, writer, err := os.Pipe()
|
||||
require.NoError(t, err)
|
||||
os.Stdout = writer
|
||||
|
||||
fn()
|
||||
|
||||
require.NoError(t, writer.Close())
|
||||
os.Stdout = originalStdout
|
||||
|
||||
var buf bytes.Buffer
|
||||
_, err = io.Copy(&buf, reader)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, reader.Close())
|
||||
|
||||
return strings.TrimSpace(buf.String())
|
||||
}
|
||||
|
|
@ -15,9 +15,10 @@ import (
|
|||
|
||||
var listSwapsCommand = &cli.Command{
|
||||
Name: "listswaps",
|
||||
Usage: "list all swaps in the local database",
|
||||
Description: "Allows the user to get a list of all swaps that are " +
|
||||
"currently stored in the database",
|
||||
Usage: "list traditional Loop In and Loop Out swaps",
|
||||
Description: "Lists traditional Loop In and Loop Out swaps that are " +
|
||||
"currently stored in the database. Static address loop-ins are not " +
|
||||
"included; use `loop static listswaps` to view them.",
|
||||
Action: listSwaps,
|
||||
Flags: []cli.Flag{
|
||||
&cli.BoolFlag{
|
||||
|
|
@ -128,10 +129,12 @@ func listSwaps(ctx context.Context, cmd *cli.Command) error {
|
|||
|
||||
var swapInfoCommand = &cli.Command{
|
||||
Name: "swapinfo",
|
||||
Usage: "show the status of a swap",
|
||||
Usage: "show the status of a traditional swap",
|
||||
ArgsUsage: "id",
|
||||
Description: "Allows the user to get the status of a single swap " +
|
||||
"currently stored in the database",
|
||||
Description: "Shows the status of a traditional Loop In or Loop Out " +
|
||||
"swap currently stored in the database. Static address loop-ins " +
|
||||
"must be viewed with `loop static listswaps`; there is no generic " +
|
||||
"per-swap static lookup command.",
|
||||
Flags: []cli.Flag{
|
||||
&cli.Uint64Flag{
|
||||
Name: "id",
|
||||
|
|
|
|||
267
cmd/loop/testdata/sessions/basic-swaps/04_loop-monitor-static-loop-in.json
vendored
Normal file
267
cmd/loop/testdata/sessions/basic-swaps/04_loop-monitor-static-loop-in.json
vendored
Normal file
|
|
@ -0,0 +1,267 @@
|
|||
{
|
||||
"metadata": {
|
||||
"args": [
|
||||
"loop",
|
||||
"monitor",
|
||||
"--network",
|
||||
"regtest"
|
||||
],
|
||||
"env": {},
|
||||
"version": "0.33.3-beta commit= commit_hash=",
|
||||
"run_error": "recv: rpc error: code = Canceled desc = context canceled",
|
||||
"duration": 25407490958,
|
||||
"clock_start_unix": 1784150305
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"time_ms": 13,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "send",
|
||||
"message_type": "looprpc.MonitorRequest",
|
||||
"payload": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 13,
|
||||
"kind": "stdout",
|
||||
"data": {
|
||||
"lines": [
|
||||
"Note: offchain cost may report as 0 after loopd restart during swap\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 16479,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "recv",
|
||||
"message_type": "looprpc.SwapStatus",
|
||||
"payload": {
|
||||
"amt": "500000",
|
||||
"id": "bec3777d45337f652d96136e5714ed90a5d4f7cda87b5842110ecc38c9a65826",
|
||||
"id_bytes": "vsN3fUUzf2UtlhNuVxTtkKXU982oe1hCEQ7MOMmmWCY=",
|
||||
"type": "STATIC_LOOP_IN",
|
||||
"state": "INITIATED",
|
||||
"static_loop_in_state": "INIT_HTLC",
|
||||
"failure_reason": "FAILURE_REASON_NONE",
|
||||
"initiation_time": "1784150320647961000",
|
||||
"last_update_time": "1784150321494895000",
|
||||
"htlc_address": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2wsh": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2tr": "",
|
||||
"cost_server": "0",
|
||||
"cost_onchain": "0",
|
||||
"cost_offchain": "0",
|
||||
"last_hop": "",
|
||||
"outgoing_chan_set": [],
|
||||
"label": "",
|
||||
"asset_info": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 16479,
|
||||
"kind": "stdout",
|
||||
"data": {
|
||||
"lines": [
|
||||
"2026-07-15T18:18:41-03:00 STATIC_LOOP_IN INIT_HTLC 0.00500000 BTC - P2WSH: bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 16482,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "recv",
|
||||
"message_type": "looprpc.SwapStatus",
|
||||
"payload": {
|
||||
"amt": "500000",
|
||||
"id": "bec3777d45337f652d96136e5714ed90a5d4f7cda87b5842110ecc38c9a65826",
|
||||
"id_bytes": "vsN3fUUzf2UtlhNuVxTtkKXU982oe1hCEQ7MOMmmWCY=",
|
||||
"type": "STATIC_LOOP_IN",
|
||||
"state": "INITIATED",
|
||||
"static_loop_in_state": "SIGN_HTLC_TX",
|
||||
"failure_reason": "FAILURE_REASON_NONE",
|
||||
"initiation_time": "1784150320647961000",
|
||||
"last_update_time": "1784150321499639000",
|
||||
"htlc_address": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2wsh": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2tr": "",
|
||||
"cost_server": "0",
|
||||
"cost_onchain": "0",
|
||||
"cost_offchain": "0",
|
||||
"last_hop": "",
|
||||
"outgoing_chan_set": [],
|
||||
"label": "",
|
||||
"asset_info": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 16482,
|
||||
"kind": "stdout",
|
||||
"data": {
|
||||
"lines": [
|
||||
"2026-07-15T18:18:41-03:00 STATIC_LOOP_IN SIGN_HTLC_TX 0.00500000 BTC - P2WSH: bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 16530,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "recv",
|
||||
"message_type": "looprpc.SwapStatus",
|
||||
"payload": {
|
||||
"amt": "500000",
|
||||
"id": "bec3777d45337f652d96136e5714ed90a5d4f7cda87b5842110ecc38c9a65826",
|
||||
"id_bytes": "vsN3fUUzf2UtlhNuVxTtkKXU982oe1hCEQ7MOMmmWCY=",
|
||||
"type": "STATIC_LOOP_IN",
|
||||
"state": "INITIATED",
|
||||
"static_loop_in_state": "MONITOR_INVOICE_HTLC_TX",
|
||||
"failure_reason": "FAILURE_REASON_NONE",
|
||||
"initiation_time": "1784150320647961000",
|
||||
"last_update_time": "1784150321548450000",
|
||||
"htlc_address": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2wsh": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2tr": "",
|
||||
"cost_server": "0",
|
||||
"cost_onchain": "0",
|
||||
"cost_offchain": "0",
|
||||
"last_hop": "",
|
||||
"outgoing_chan_set": [],
|
||||
"label": "",
|
||||
"asset_info": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 16530,
|
||||
"kind": "stdout",
|
||||
"data": {
|
||||
"lines": [
|
||||
"2026-07-15T18:18:41-03:00 STATIC_LOOP_IN MONITOR_INVOICE_HTLC_TX 0.00500000 BTC - P2WSH: bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 17027,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "recv",
|
||||
"message_type": "looprpc.SwapStatus",
|
||||
"payload": {
|
||||
"amt": "500000",
|
||||
"id": "bec3777d45337f652d96136e5714ed90a5d4f7cda87b5842110ecc38c9a65826",
|
||||
"id_bytes": "vsN3fUUzf2UtlhNuVxTtkKXU982oe1hCEQ7MOMmmWCY=",
|
||||
"type": "STATIC_LOOP_IN",
|
||||
"state": "INITIATED",
|
||||
"static_loop_in_state": "PAYMENT_RECEIVED",
|
||||
"failure_reason": "FAILURE_REASON_NONE",
|
||||
"initiation_time": "1784150320647961000",
|
||||
"last_update_time": "1784150322044521000",
|
||||
"htlc_address": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2wsh": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2tr": "",
|
||||
"cost_server": "1828",
|
||||
"cost_onchain": "0",
|
||||
"cost_offchain": "0",
|
||||
"last_hop": "",
|
||||
"outgoing_chan_set": [],
|
||||
"label": "",
|
||||
"asset_info": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 17027,
|
||||
"kind": "stdout",
|
||||
"data": {
|
||||
"lines": [
|
||||
"2026-07-15T18:18:42-03:00 STATIC_LOOP_IN PAYMENT_RECEIVED 0.00500000 BTC - P2WSH: bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv (cost: server 1828, onchain 0, offchain 0)\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 17036,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "recv",
|
||||
"message_type": "looprpc.SwapStatus",
|
||||
"payload": {
|
||||
"amt": "500000",
|
||||
"id": "bec3777d45337f652d96136e5714ed90a5d4f7cda87b5842110ecc38c9a65826",
|
||||
"id_bytes": "vsN3fUUzf2UtlhNuVxTtkKXU982oe1hCEQ7MOMmmWCY=",
|
||||
"type": "STATIC_LOOP_IN",
|
||||
"state": "INITIATED",
|
||||
"static_loop_in_state": "SUCCEEDED",
|
||||
"failure_reason": "FAILURE_REASON_NONE",
|
||||
"initiation_time": "1784150320647961000",
|
||||
"last_update_time": "1784150322052572000",
|
||||
"htlc_address": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2wsh": "bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv",
|
||||
"htlc_address_p2tr": "",
|
||||
"cost_server": "1828",
|
||||
"cost_onchain": "0",
|
||||
"cost_offchain": "0",
|
||||
"last_hop": "",
|
||||
"outgoing_chan_set": [],
|
||||
"label": "",
|
||||
"asset_info": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 17036,
|
||||
"kind": "stdout",
|
||||
"data": {
|
||||
"lines": [
|
||||
"2026-07-15T18:18:42-03:00 STATIC_LOOP_IN SUCCEEDED 0.00500000 BTC - P2WSH: bcrt1qjsl6tmv2vf3p5wwv28jh6xwettds934k02c3l5w6zyjsyrsd3lfskgdjmv (cost: server 1828, onchain 0, offchain 0)\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 25406,
|
||||
"kind": "signal",
|
||||
"data": {
|
||||
"signal": "interrupt"
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 25407,
|
||||
"kind": "grpc",
|
||||
"data": {
|
||||
"method": "/looprpc.SwapClient/Monitor",
|
||||
"event": "error",
|
||||
"error": "rpc error: code = Canceled desc = context canceled",
|
||||
"status": {
|
||||
"code": 1,
|
||||
"message": "context canceled"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 25407,
|
||||
"kind": "stderr",
|
||||
"data": {
|
||||
"lines": [
|
||||
"[loop] recv: rpc error: code = Canceled desc = context canceled\n"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"time_ms": 25407,
|
||||
"kind": "exit",
|
||||
"data": {
|
||||
"run_error": "recv: rpc error: code = Canceled desc = context canceled"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -139,7 +139,8 @@
|
|||
"Mu65fbhayEtRzougKLBnoeRN8f+tEM1+O9QuNvUIfbI="
|
||||
],
|
||||
"outgoing_chan_set": [],
|
||||
"dest_addr": ""
|
||||
"dest_addr": "",
|
||||
"max_swap_fee_sat": "4800"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -148,7 +148,8 @@
|
|||
"outgoing_chan_set": [
|
||||
"125344325763072"
|
||||
],
|
||||
"dest_addr": ""
|
||||
"dest_addr": "",
|
||||
"max_swap_fee_sat": "3200"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -162,7 +162,8 @@
|
|||
"cSfKVONNmsK9+p4Uc5nc3ZtE+37uOODHeq1vprhh/x4="
|
||||
],
|
||||
"outgoing_chan_set": [],
|
||||
"dest_addr": ""
|
||||
"dest_addr": "",
|
||||
"max_swap_fee_sat": "1600"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ fetches a new L402 authentication token from the server
|
|||
\fB--help, -h\fP: show help
|
||||
|
||||
.SH listswaps
|
||||
list all swaps in the local database
|
||||
list traditional Loop In and Loop Out swaps
|
||||
|
||||
.PP
|
||||
\fB--channel\fP="": the comma-separated list of short channel IDs of the channels to loop out
|
||||
|
|
@ -233,7 +233,7 @@ list all swaps in the local database
|
|||
\fB--start_time_ns\fP="": Unix timestamp in nanoseconds to select swaps initiated after this time (default: 0)
|
||||
|
||||
.SH swapinfo
|
||||
show the status of a swap
|
||||
show the status of a traditional swap
|
||||
|
||||
.PP
|
||||
\fB--help, -h\fP: show help
|
||||
|
|
|
|||
|
|
@ -235,9 +235,9 @@ The following flags are supported:
|
|||
|
||||
### `listswaps` command
|
||||
|
||||
list all swaps in the local database.
|
||||
list traditional Loop In and Loop Out swaps.
|
||||
|
||||
Allows the user to get a list of all swaps that are currently stored in the database.
|
||||
Lists traditional Loop In and Loop Out swaps that are currently stored in the database. Static address loop-ins are not included; use `loop static listswaps` to view them.
|
||||
|
||||
Usage:
|
||||
|
||||
|
|
@ -261,9 +261,9 @@ The following flags are supported:
|
|||
|
||||
### `swapinfo` command
|
||||
|
||||
show the status of a swap.
|
||||
show the status of a traditional swap.
|
||||
|
||||
Allows the user to get the status of a single swap currently stored in the database.
|
||||
Shows the status of a traditional Loop In or Loop Out swap currently stored in the database. Static address loop-ins must be viewed with `loop static listswaps`; there is no generic per-swap static lookup command.
|
||||
|
||||
Usage:
|
||||
|
||||
|
|
|
|||
113
docs/release-notes/README.md
Normal file
113
docs/release-notes/README.md
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
Release notes are listed in chronological order and include every published
|
||||
GitHub release. Previous and next links connect adjacent files in this index.
|
||||
Contributor lists are derived from non-merge commit authors and co-authors
|
||||
between consecutive official release tags.
|
||||
|
||||
Add user-facing changes to [release-notes-next.md](release-notes-next.md).
|
||||
When preparing a release, use
|
||||
[release-notes-template.md](release-notes-template.md) to turn those notes into
|
||||
a versioned file, then reset the next-release sections.
|
||||
|
||||
| Release notes | Date | Highlights |
|
||||
| --- | --- | --- |
|
||||
| [v0.1-alpha](release-notes-0.1.md) | 2019-03-21 | Initial Loop Out release |
|
||||
| [v0.1.1-alpha](release-notes-0.1.1.md) | 2019-04-17 | Added testnet Loop In |
|
||||
| [v0.1.2-alpha](release-notes-0.1.2.md) | 2019-05-03 | Fixed macaroon, testnet, and routing fee handling |
|
||||
| [v0.1.3-beta](release-notes-0.1.3-beta.md) | 2019-05-31 | Published the v0.1.3 beta tag with Docker and accounting updates |
|
||||
| [v0.1.3-alpha](release-notes-0.1.3.md) | 2019-05-31 | Added Docker support and accounting improvements |
|
||||
| [v0.2-alpha](release-notes-0.2.md) | 2019-06-26 | Introduced Loop In |
|
||||
| [v0.2.0-alpha](release-notes-0.2.0.md) | 2019-06-26 | Aliased v0.2-alpha without source changes |
|
||||
| [v0.2.1-alpha](release-notes-0.2.1.md) | 2019-07-25 | Added configurable Loop Out sweep confirmation targets |
|
||||
| [v0.2.2-alpha](release-notes-0.2.2.md) | 2019-07-31 | Improved external Loop Out validation |
|
||||
| [v0.2.3-alpha](release-notes-0.2.3.md) | 2019-10-03 | Fixed REST parity, fee estimation, and confirmation targets |
|
||||
| [v0.2.4-alpha](release-notes-0.2.4.md) | 2019-10-11 | Prepared flexible swap fees and timing |
|
||||
| [v0.3.0-alpha](release-notes-0.3.0.md) | 2019-11-21 | Added delayed, batchable Loop Out execution |
|
||||
| [v0.3.1-alpha](release-notes-0.3.1.md) | 2020-01-15 | Added fee controls for Loop Out and fast quotes |
|
||||
| [v0.4.0-rc1.beta](release-notes-0.4.0-rc1.md) | 2020-01-24 | Previewed authenticated requests and fixed Loop In timeouts |
|
||||
| [v0.4.0-beta](release-notes-0.4.0.md) | 2020-02-04 | Added authenticated requests and REST monitoring |
|
||||
| [v0.4.1-beta](release-notes-0.4.1.md) | 2020-02-11 | Added REST CORS controls and fixed delayed quote errors |
|
||||
| [v0.5.0-beta](release-notes-0.5.0.md) | 2020-03-05 | Added Loop In last-hop selection |
|
||||
| [v0.5.1-beta](release-notes-0.5.1.md) | 2020-03-15 | Improved Loop In quotes and fee sanity checks |
|
||||
| [v0.6.0-beta](release-notes-0.6.0.md) | 2020-04-30 | Added LND v0.10 support and Loop In confirmation targets |
|
||||
| [v0.6.1-beta](release-notes-0.6.1.md) | 2020-05-12 | Added native SegWit Loop In HTLCs and fixed multipart limits |
|
||||
| [v0.6.2-beta](release-notes-0.6.2.md) | 2020-05-12 | Published native SegWit Loop In and multipart-limit fixes |
|
||||
| [v0.6.3-beta](release-notes-0.6.3.md) | 2020-06-04 | Restored multi-channel Loop Out with LND v0.10.1 |
|
||||
| [v0.6.4-beta](release-notes-0.6.4.md) | 2020-06-12 | Improved Loop Out restart behavior and liquidity speed |
|
||||
| [v0.6.5-beta](release-notes-0.6.5.md) | 2020-07-02 | Added human-readable server messages |
|
||||
| [v0.7.0-beta](release-notes-0.7.0.md) | 2020-07-21 | Added longer confirmation targets and server status subscriptions |
|
||||
| [v0.8.0-beta](release-notes-0.8.0.md) | 2020-08-11 | Improved swap failure reporting and confirmation controls |
|
||||
| [v0.8.1-beta](release-notes-0.8.1.md) | 2020-08-28 | Reduced Loop Out routing and sweep fees |
|
||||
| [v0.9.0-beta](release-notes-0.9.0.md) | 2020-09-10 | Introduced liquidity management and TLS |
|
||||
| [v0.10.0-beta](release-notes-0.10.0.md) | 2020-10-13 | Added multipath Loop In and fee-aware swap suggestions |
|
||||
| [v0.11.0-beta](release-notes-0.11.0.md) | 2020-10-27 | Introduced Autoloop and transaction labels |
|
||||
| [v0.11.1-beta](release-notes-0.11.1.md) | 2020-11-12 | Added swap initiator metadata |
|
||||
| [v0.11.2-beta](release-notes-0.11.2.md) | 2020-12-08 | Added configurable Autoloop swap size limits |
|
||||
| [v0.11.3-beta](release-notes-0.11.3.md) | 2021-02-09 | Added locked-LND startup waiting and single macaroon support |
|
||||
| [v0.11.4-beta](release-notes-0.11.4.md) | 2021-02-11 | Defaulted to LND's admin macaroon path |
|
||||
| [v0.12.0-beta](release-notes-0.12.0.md) | 2021-03-06 | Added per-peer Autoloop rules |
|
||||
| [v0.12.1-beta](release-notes-0.12.1.md) | 2021-03-26 | Added verbose quote and swap output |
|
||||
| [v0.12.2-beta](release-notes-0.12.2.md) | 2021-04-29 | Retried failed LSAT payments |
|
||||
| [v0.13.0-beta](release-notes-0.13.0.md) | 2021-05-19 | Raised the minimum LND version to v0.11.1-beta |
|
||||
| [v0.14.0-beta](release-notes-0.14.0.md) | 2021-06-01 | Reported Loop Out routing failures to the server |
|
||||
| [v0.14.1-beta](release-notes-0.14.1.md) | 2021-06-09 | Removed protobuf startup warnings |
|
||||
| [v0.14.2-beta](release-notes-0.14.2.md) | 2021-07-20 | Fixed Python gRPC client connectivity |
|
||||
| [v0.15.0-beta](release-notes-0.15.0.md) | 2021-08-03 | Added Loop In quote probing |
|
||||
| [v0.15.1-beta](release-notes-0.15.1.md) | 2021-11-18 | Updated to LND v0.14 and added WASM RPC stubs |
|
||||
| [v0.16.0-beta](release-notes-0.16.0.md) | 2021-12-14 | Added private Loop In route hints |
|
||||
| [v0.17.0-beta](release-notes-0.17.0.md) | 2022-02-07 | Added Loop In support to Autoloop |
|
||||
| [v0.18.0-beta](release-notes-0.18.0.md) | 2022-03-30 | Added optional routing plugins |
|
||||
| [v0.19.1-beta](release-notes-0.19.1.md) | 2022-06-09 | Persisted liquidity parameters |
|
||||
| [v0.20.0-beta](release-notes-0.20.0.md) | 2022-07-20 | Added experimental P2TR HTLCs and MuSig2 sweeps |
|
||||
| [v0.20.1-beta](release-notes-0.20.1.md) | 2022-08-01 | Improved sweep transaction logging |
|
||||
| [v0.20.2-beta](release-notes-0.20.2.md) | 2022-10-26 | Raised the minimum LND version for Taproot support |
|
||||
| [v0.21.0-beta](release-notes-0.21.0.md) | 2022-12-16 | Added Autoloop destination addresses |
|
||||
| [v0.22.0-beta](release-notes-0.22.0.md) | 2023-03-29 | Added recurring Autoloop budgets |
|
||||
| [v0.22.1-beta](release-notes-0.22.1.md) | 2023-04-24 | Corrected the HTLC script version for legacy swaps |
|
||||
| [v0.23.0-beta](release-notes-0.23.0.md) | 2023-04-25 | Made MuSig2 the default swap protocol |
|
||||
| [v0.24.0-beta](release-notes-0.24.0.md) | 2023-05-24 | Added Easy Autoloop |
|
||||
| [v0.24.1-beta](release-notes-0.24.1.md) | 2023-05-26 | Added REST bindings for GetInfo |
|
||||
| [v0.25.0-beta](release-notes-0.25.0.md) | 2023-07-03 | Added SQL stores and Easy Autoloop fee fixes |
|
||||
| [v0.25.1-beta](release-notes-0.25.1.md) | 2023-07-04 | Removed Windows 386 release builds |
|
||||
| [v0.25.2-beta](release-notes-0.25.2.md) | 2023-07-04 | Removed unsupported release platforms |
|
||||
| [v0.26.0-beta](release-notes-0.26.0.md) | 2023-07-28 | Added xpub-backed Loop Out destinations |
|
||||
| [v0.26.1-beta](release-notes-0.26.1.md) | 2023-08-08 | Recorded swap initiators and repaired faulty timestamps |
|
||||
| [v0.26.2-beta](release-notes-0.26.2.md) | 2023-08-09 | Migrated faulty Loop Out timestamps |
|
||||
| [v0.26.3-beta](release-notes-0.26.3.md) | 2023-09-18 | Added the FSM foundation and hardened Loop In settlement |
|
||||
| [v0.26.4-beta](release-notes-0.26.4.md) | 2023-10-04 | Added Easy Autoloop destinations and Apple Silicon builds |
|
||||
| [v0.26.5-beta](release-notes-0.26.5.md) | 2023-10-31 | Fixed leap-year parsing and refactored database startup |
|
||||
| [v0.26.6-beta](release-notes-0.26.6.md) | 2023-11-28 | Added Loop In abandonment and specific balance failures |
|
||||
| [v0.27.0-beta](release-notes-0.27.0.md) | 2024-01-30 | Added batched Loop Out sweeps |
|
||||
| [v0.27.1-beta](release-notes-0.27.1.md) | 2024-02-14 | Automatically recovered incorrectly funded external Loop Ins |
|
||||
| [v0.28.0-beta](release-notes-0.28.0.md) | 2024-03-05 | Expanded Instant Out listing, destinations, and fee accounting |
|
||||
| [v0.28.1-beta](release-notes-0.28.1.md) | 2024-04-16 | Routed Loop Out prepayments over selected channels |
|
||||
| [v0.28.2-beta](release-notes-0.28.2.md) | 2024-05-25 | Renamed LSAT options and APIs to L402 |
|
||||
| [v0.28.3-beta](release-notes-0.28.3.md) | 2024-06-03 | Corrected stored Loop Out costs and batch restoration |
|
||||
| [v0.28.4-beta](release-notes-0.28.4.md) | 2024-06-04 | Fixed pending-swap cost migration and added RPC timeouts |
|
||||
| [v0.28.5-beta](release-notes-0.28.5.md) | 2024-06-06 | Paginated cost-migration payment lookups |
|
||||
| [v0.28.6-beta](release-notes-0.28.6.md) | 2024-07-11 | Expanded sweep-batcher signing and fee controls |
|
||||
| [v0.28.7-beta](release-notes-0.28.7.md) | 2024-08-08 | Improved sweep selection and stored swap metadata |
|
||||
| [v0.28.8-beta](release-notes-0.28.8.md) | 2024-10-21 | Introduced the notification manager and mixed sweep batches |
|
||||
| [v0.28.9-beta](release-notes-0.28.9.md) | 2024-10-30 | Added L402 retrieval and FSM context propagation |
|
||||
| [v0.29.0-beta](release-notes-0.29.0.md) | 2024-12-18 | Persisted static address Loop In mode |
|
||||
| [v0.29.1-beta](release-notes-0.29.1.md) | 2025-03-18 | Added Taproot Asset Loop Outs and partial static withdrawals |
|
||||
| [v0.30.0-beta](release-notes-0.30.0.md) | 2025-03-27 | Added Taproot Asset Easy Autoloop and hardened recovery |
|
||||
| [v0.31.0-beta](release-notes-0.31.0.md) | 2025-04-25 | Added filtering and pagination to loop listswaps |
|
||||
| [v0.31.1-beta](release-notes-0.31.1.md) | 2025-05-05 | Changed Autoloop to use a slow publication deadline |
|
||||
| [v0.31.2-beta](release-notes-0.31.2.md) | 2025-06-18 | Corrected commit hash and version reporting |
|
||||
| [v0.31.3-beta](release-notes-0.31.3.md) | 2025-09-25 | Added partial static Loop Ins and hardened static address recovery |
|
||||
| [v0.31.4-beta](release-notes-0.31.4.md) | 2025-10-16 | Added fast static Loop Ins and reproducible releases |
|
||||
| [v0.31.5-beta](release-notes-0.31.5.md) | 2025-10-31 | Added swap resumption and notification versioning |
|
||||
| [v0.31.5-beta-lnd0.20](release-notes-0.31.5-lnd0.20.md) | 2025-10-31 | Updated LND 0.20 compatibility and module version metadata |
|
||||
| [v0.31.6-beta](release-notes-0.31.6.md) | 2025-11-26 | Added Easy Autoloop peer exclusions and loop stop |
|
||||
| [v0.31.7-beta](release-notes-0.31.7.md) | 2025-11-26 | Bumped the release version after v0.31.6 |
|
||||
| [v0.31.8-beta](release-notes-0.31.8.md) | 2026-02-03 | Added manual HTLC sweeps and PSBT static withdrawals |
|
||||
| [v0.32.0-beta](release-notes-0.32.0.md) | 2026-03-02 | Opened channels directly from static address deposits |
|
||||
| [v0.32.1-beta](release-notes-0.32.1.md) | 2026-03-02 | Updated reproducible releases to Go 1.26 |
|
||||
| [v0.33.0-beta](release-notes-0.33.0.md) | 2026-04-08 | Added static Loop In fee caps and lifecycle hardening |
|
||||
| [v0.33.1-beta](release-notes-0.33.1.md) | 2026-05-26 | Added Static Address Autoloop and CLI session tests |
|
||||
| [v0.33.2-beta](release-notes-0.33.2.md) | 2026-06-08 | Exposed static swap details and hardened MuSig2 inputs |
|
||||
| [v0.33.3-beta](release-notes-0.33.3.md) | 2026-06-21 | Raised the LND floor and updated the LND dependency |
|
||||
| [v0.34.0-beta](release-notes-0.34.0.md) | 2026-07-23 | Tracked low-confirmation deposits and production Taproot channels |
|
||||
| [Next release](release-notes-next.md) | Unreleased | No changes yet |
|
||||
148
docs/release-notes/release-notes-0.1.1.md
Normal file
148
docs/release-notes/release-notes-0.1.1.md
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-04-17
|
||||
- **Release page:**
|
||||
[v0.1.1-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.1.1-alpha)
|
||||
- **Previous release:** [v0.1-alpha](release-notes-0.1.md)
|
||||
- **Next release:** [v0.1.2-alpha](release-notes-0.1.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
This is a minor release of the Lightning Loop Go client.
|
||||
|
||||
Includes changes to:
|
||||
- Add testnet support for Loop In (on-chain to off-chain swaps)
|
||||
- Add amt as a keyword argument
|
||||
|
||||
The Loop In implementation can be kicked off using the `loop in ` command:
|
||||
```
|
||||
⛰ loop in -h
|
||||
NAME:
|
||||
loop in - perform an on-chain to off-chain swap (loop in)
|
||||
|
||||
USAGE:
|
||||
loop in [command options] amt
|
||||
|
||||
DESCRIPTION:
|
||||
|
||||
Send the amount in satoshis specified by the amt argument off-chain.
|
||||
|
||||
OPTIONS:
|
||||
--amt value the amount in satoshis to loop in (default: 0)
|
||||
--external expect htlc to be published externally
|
||||
```
|
||||
|
||||
The `--external` flag is of note as it allows the HTLC to be paid by a wallet
|
||||
other then `lnd`. This allows for users to do things like top-off channel from
|
||||
_another wallet_, or _withdrawal_ funds from an exchange directly into one's
|
||||
channel. It can also be used to obtain an address to give to someone else, which
|
||||
once paid and Looped In, is credited to your channel!
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fix monitoring exception
|
||||
|
||||
#### Maintenance
|
||||
|
||||
- Documentation updates
|
||||
|
||||
**Verifying the Release**
|
||||
|
||||
In order to verify the release, you'll need to have `gpg` or `gpg2` installed on
|
||||
your system. Once you've obtained a copy (and hopefully verified that as well),
|
||||
you'll first need to import the keys that have signed this release if you
|
||||
haven't done so already:
|
||||
```
|
||||
curl https://keybase.io/roasbeef/pgp_keys.asc | gpg --import
|
||||
```
|
||||
|
||||
Once you have his PGP key you can verify the release (assuming
|
||||
`manifest-v0.1.1-alpha.txt` and `manifest-v0.1.1-alpha.txt.sig` are in the
|
||||
current directory) with:
|
||||
```
|
||||
gpg --verify manifest-v0.1.1-alpha.txt
|
||||
```
|
||||
|
||||
You should see the following if the verification was successful:
|
||||
```
|
||||
gpg: assuming signed data in 'manifest-v0.1.1-alpha.txt'
|
||||
gpg: Signature made Wed Apr 17 15:20:49 2019 PDT
|
||||
gpg: using RSA key F8037E70C12C7A263C032508CE58F7F8E20FD9A2
|
||||
gpg: Good signature from "Olaoluwa Osuntokun <laolu32@gmail.com>" [ultimate]
|
||||
```
|
||||
|
||||
That will verify the signature on the main manifest page which ensures integrity
|
||||
and authenticity of the binaries you've downloaded locally. Next, depending on
|
||||
your operating system you should then re-calculate the `sha256` sum of the
|
||||
binary, and compare that with the following hashes (which are included in the
|
||||
manifest file):
|
||||
```
|
||||
d3c3db1bed3ff0fb125514d9072d621492ff2b86f4a90200e93686052f18f5bd loop-darwin-386-v0.1.1-alpha.tar.gz
|
||||
ebf461a604b681d8a5c82bae14a0620a38a9f65604ca4f532aedb44ddc7c4ea0 loop-darwin-amd64-v0.1.1-alpha.tar.gz
|
||||
bc83eb2eefb91054858c2a9164fdf245848f2f861d01526261e65dbd2d8237e0 loop-dragonfly-amd64-v0.1.1-alpha.tar.gz
|
||||
ece2bb8e4c477627a4485f809e7f0d1c88893e01ca7e33363784c392875f00b6 loop-freebsd-386-v0.1.1-alpha.tar.gz
|
||||
496941befd46331a4551ff9ff60fe4dc1a49434c1593960f3ed53a255aca0783 loop-freebsd-amd64-v0.1.1-alpha.tar.gz
|
||||
6e21b065178d9616e78a63bacdca4401f8ed36a82dbdfb0d915099af29ae29da loop-freebsd-arm-v0.1.1-alpha.tar.gz
|
||||
3264e23ffe8994bd374c961f4973eaa6288e4dce0531967de85b23b342518824 loop-linux-386-v0.1.1-alpha.tar.gz
|
||||
476f26083febb42fab15fa263048cf8bddcc86671aeaa98e1b74f5c422ebaee4 loop-linux-amd64-v0.1.1-alpha.tar.gz
|
||||
9f13fb6cc9df51501e4c9560da96d96a9d0f385e600eb77fdbfdb97fb731a4a6 loop-linux-arm64-v0.1.1-alpha.tar.gz
|
||||
53faaf225412c4f9dc16d437252f666243dba13f9135f07886ec019e5b109ebb loop-linux-armv6-v0.1.1-alpha.tar.gz
|
||||
4e8c04d1585476a8efb02805181dde80be0a1b45816d24f004924b6756298dd5 loop-linux-armv7-v0.1.1-alpha.tar.gz
|
||||
a21b05379615a6d7d4de68c3edb2f5a341f23dd0f4895b646b5272e6b99e98d2 loop-linux-mips64-v0.1.1-alpha.tar.gz
|
||||
047c2a9e62b477db7eb8c4f88a5bda68bcdd10bb396d4ba66ff34328a7b9e6d8 loop-linux-mips64le-v0.1.1-alpha.tar.gz
|
||||
bd25a16e27fb3140be8ae62a8df1076a80ceac443420738d6261f0c375e60bb5 loop-linux-ppc64-v0.1.1-alpha.tar.gz
|
||||
ef1a37d85c8ae1eb7fba34a66613344042f26867ab838017b3995ef4d7d8cd95 loop-netbsd-386-v0.1.1-alpha.tar.gz
|
||||
1962c2b174bc401c5362ca1f7282e8129b6958dae08a1fd0248de6505d4b6c4c loop-netbsd-amd64-v0.1.1-alpha.tar.gz
|
||||
be27b8c84fac5c0e492aa7b395e3b344f8e0c7170525610e2df51238f8fea7de loop-openbsd-386-v0.1.1-alpha.tar.gz
|
||||
31ce199daf1af10f328af3b5d8b9cfcefc980eabffd6b91481ddf8a5d2b1e235 loop-openbsd-amd64-v0.1.1-alpha.tar.gz
|
||||
406d5989ec935faf85dbdaccb88a659ba88ff35ca111b71bf769871f20139ccd loop-source-v0.1.1-alpha.tar.gz
|
||||
61395e480f7e1cecb9b945a7cad4a0b81186767474da5520dee48b6e89191f9b loop-windows-386-v0.1.1-alpha.zip
|
||||
01848825834fb4fc1c13841ffdfdc1b59b4f352d350d5b7ffbb3252885f0330d loop-windows-amd64-v0.1.1-alpha.zip
|
||||
2f0fcaca1479d04b49e85e0a3b7f70dd430cf675daaaa4b77104a83747bba3e0 vendor.tar.gz
|
||||
```
|
||||
|
||||
One can use the `shasum -a 256 <file name here>` tool in order to re-compute the
|
||||
`sha256` hash of the target binary for your operating system. The produced hash
|
||||
should be compared with the hashes listed above and they should match *exactly*.
|
||||
|
||||
Finally, you can also verify the _tag_ itself with the following command:
|
||||
```
|
||||
git verify-tag v0.1.1-alpha
|
||||
```
|
||||
|
||||
**Building the Contained Release**
|
||||
|
||||
With this new version of `loop`, we've modified our release process to ensure
|
||||
the bundled release is now _fully self contained_. As a result, with only the
|
||||
attached payload with this release, users will be able to rebuild the target
|
||||
release themselves without having to fetch any of the dependancies. Note that at
|
||||
this stage, binaries aren't yet fully reproducible (even with `go modules` ).
|
||||
This is due to the fact that by default,
|
||||
[Go will include the full directory path where the binary was built in the binary itself](https://github.com/golang/go/issues/16860).
|
||||
As a result, unless your file system exactly mirrors the machine used to build
|
||||
the binary, you'll get a different binary, as it includes artifacts from your
|
||||
local file system. This will be fixed in `go1.13`, and before then we may modify
|
||||
our release system to do this automatically.
|
||||
|
||||
In order to re-build from scratch, assuming that `vendor.tar.gz` and
|
||||
`loop-source-v0.1.1-alpha.tar.gz` are in the current directory:
|
||||
```
|
||||
tar -xvzf vendor.tar.gz
|
||||
tar -xvzf loop-source-v0.1.1-alpha.tar.gz
|
||||
GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightninglabs/loop.Commit=v0.1.1-alpha" ./cmd/loop
|
||||
GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightninglabs/loop.Commit=v0.1.1-alpha" ./cmd/loopd
|
||||
```
|
||||
|
||||
The `-mod=vendor` flag tells the `go build` command that it doesn't need to
|
||||
fetch the dependencies, and instead, they're all enclosed in the local vendor
|
||||
directory.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- conscott
|
||||
- Francisco Calderón
|
||||
- Joost Jager
|
||||
- Olaoluwa Osuntokun
|
||||
27
docs/release-notes/release-notes-0.1.2.md
Normal file
27
docs/release-notes/release-notes-0.1.2.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-05-03
|
||||
- **Release page:**
|
||||
[v0.1.2-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.1.2-alpha)
|
||||
- **Previous release:** [v0.1.1-alpha](release-notes-0.1.1.md)
|
||||
- **Next release:** [v0.1.3-beta](release-notes-0.1.3-beta.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
Patch release for Loop client with fixes:
|
||||
|
||||
- No more need to regenerate macaroons
|
||||
- Fixes issue that required specifying testnet remote service URL directly
|
||||
- Reduce max routing fee
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Joost Jager
|
||||
- Olaoluwa Osuntokun
|
||||
31
docs/release-notes/release-notes-0.1.3-beta.md
Normal file
31
docs/release-notes/release-notes-0.1.3-beta.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-05-31
|
||||
- **Release page:**
|
||||
[v0.1.3-beta](https://github.com/lightninglabs/loop/releases/tag/v0.1.3-beta)
|
||||
- **Previous release:** [v0.1.2-alpha](release-notes-0.1.2.md)
|
||||
- **Next release:** [v0.1.3-alpha](release-notes-0.1.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add Docker integration.
|
||||
[PR #46](https://github.com/lightninglabs/loop/pull/46)
|
||||
* Persist completed swap costs and expose them through the RPC interface.
|
||||
[PR #55](https://github.com/lightninglabs/loop/pull/55)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Increase the maximum Lightning gRPC receive size to accommodate larger
|
||||
responses.
|
||||
[PR #56](https://github.com/lightninglabs/loop/pull/56)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Geoff Taylor
|
||||
- Joost Jager
|
||||
- Valentine Wallace
|
||||
26
docs/release-notes/release-notes-0.1.3.md
Normal file
26
docs/release-notes/release-notes-0.1.3.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-05-31
|
||||
- **Release page:**
|
||||
[v0.1.3-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.1.3-alpha)
|
||||
- **Previous release:** [v0.1.3-beta](release-notes-0.1.3-beta.md)
|
||||
- **Next release:** [v0.2-alpha](release-notes-0.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
Minor changes:
|
||||
|
||||
- Add Docker support
|
||||
- Improve after-the-fact accounting
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Joost Jager
|
||||
- Olaoluwa Osuntokun
|
||||
- Valentine Wallace
|
||||
170
docs/release-notes/release-notes-0.1.md
Normal file
170
docs/release-notes/release-notes-0.1.md
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-03-21
|
||||
- **Release page:**
|
||||
[v0.1-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.1-alpha)
|
||||
- **Previous release:** None
|
||||
- **Next release:** [v0.1.1-alpha](release-notes-0.1.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
This is the first major release of Lightning Loop! This release is the first of
|
||||
many planned, and includes the initial base functionality for the system.
|
||||
[Check out our blog post for a high level overview on how the Loop service works](https://blog.lightning.engineering/posts/2019/03/20/loop.html).
|
||||
With this new release, users can use Loop Out to free up inbound receiving
|
||||
bandwidth in their channels and also send coins on chain from their existing
|
||||
channel.
|
||||
|
||||
The Lightning Loop client software is similar to `lnd`. There's the primary
|
||||
daemon `loopd`, and its command-line interface `loop`.
|
||||
[Check out the instructions in the `README` to get started](https://github.com/lightninglabs/loop/blob/master/README.md).
|
||||
The `loop` command is very simple and at initial release has the following
|
||||
commands:
|
||||
```
|
||||
⛰ loop -h
|
||||
NAME:
|
||||
loop - control plane for your loopd
|
||||
|
||||
USAGE:
|
||||
loop [global options] command [command options] [arguments...]
|
||||
|
||||
VERSION:
|
||||
0.1.0-alpha commit=v0.1-alpha
|
||||
|
||||
COMMANDS:
|
||||
out perform an off-chain to on-chain swap (looping out)
|
||||
terms Display the current swap terms imposed by the server.
|
||||
monitor monitor progress of any active swaps
|
||||
quote get a quote for the cost of a swap
|
||||
help, h Shows a list of commands or help for one command
|
||||
|
||||
GLOBAL OPTIONS:
|
||||
--loopd value loopd daemon address host:port (default: "localhost:11010")
|
||||
--help, -h show help
|
||||
--version, -v print the version
|
||||
```
|
||||
|
||||
You'll most frequently be using `loop out`. A sample run looks something like:
|
||||
```
|
||||
loop out 500000 --addr=bc1qnrhawnjr7fn3gd09s8gltzzjdfsxsrm2k64ze7
|
||||
```
|
||||
|
||||
By specifying the optional `addr` flag, I tell `loopd` that I'd like to have the
|
||||
funds sent to that target address. This lets one do cool things like send
|
||||
directly from your channel into cold storage, or even deposit directly into an
|
||||
exchange or another wallet under one's control.
|
||||
|
||||
Once the loop has been initiated, you can use `loop monitor` to check on its
|
||||
status.
|
||||
|
||||
The other primary way to
|
||||
[interact with Lightning Loop is via the gRPC API](https://lightning.engineering/loop).
|
||||
This lets existing lapps, services, and businesses drive Loop programmatically
|
||||
in a similar fashion to how they interact with `lnd` today. We'll have more
|
||||
example uses cases, documentation, and explainers in the near future.
|
||||
|
||||
Loop there it is!! ⚡️🔁
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
**Verifying the Release**
|
||||
|
||||
In order to verify the release, you'll need to have `gpg` or `gpg2` installed on
|
||||
your system. Once you've obtained a copy (and hopefully verified that as well),
|
||||
you'll first need to import the keys that have signed this release if you
|
||||
haven't done so already:
|
||||
```
|
||||
curl https://keybase.io/roasbeef/pgp_keys.asc | gpg --import
|
||||
```
|
||||
|
||||
Once you have his PGP key you can verify the release (assuming
|
||||
`manifest-v0.1-alpha.txt` and `manifest-v0.1-alpha.txt.sig` are in the current
|
||||
directory) with:
|
||||
```
|
||||
gpg --verify manifest-v0.1-alpha.txt
|
||||
```
|
||||
|
||||
You should see the following if the verification was successful:
|
||||
```
|
||||
gpg: assuming signed data in 'manifest-v0.1-alpha.txt'
|
||||
gpg: Signature made Wed Mar 20 20:22:49 2019 PDT
|
||||
gpg: using RSA key F8037E70C12C7A263C032508CE58F7F8E20FD9A2
|
||||
gpg: Good signature from "Olaoluwa Osuntokun <laolu32@gmail.com>" [ultimate]
|
||||
```
|
||||
|
||||
That will verify the signature on the main manifest page which ensures integrity
|
||||
and authenticity of the binaries you've downloaded locally. Next, depending on
|
||||
your operating system you should then re-calculate the `sha256` sum of the
|
||||
binary, and compare that with the following hashes (which are included in the
|
||||
manifest file):
|
||||
```
|
||||
5c63d870d007d4dd9d0480a0ebc1fee83f1099acac12a4bdd121d3882b772bfb loop-darwin-386-v0.1-alpha.tar.gz
|
||||
98fc299e107c89df4875af0f2fe46957b228321036c60661507ecdbb9ba1a56a loop-darwin-amd64-v0.1-alpha.tar.gz
|
||||
761c5af296e62b2eaa9421e9d36a258e9f435a2bc53df33b950b41d3a9eef89d loop-dragonfly-amd64-v0.1-alpha.tar.gz
|
||||
269997eba3daebeeac7edb82739b3406df3e52b3345c61124c60b145b9080c0f loop-freebsd-386-v0.1-alpha.tar.gz
|
||||
38fb7a32c9c36f80cac9a47e448338dedde53554f569454202236d278654eadf loop-freebsd-amd64-v0.1-alpha.tar.gz
|
||||
7226a8c5171c6e10adf754d1c3acd81dee84497d170877981ea441108368fee7 loop-freebsd-arm-v0.1-alpha.tar.gz
|
||||
e07552fd11967743262a678060369f5fbe17bcde3c4ee6cc21196618248afb9c loop-linux-386-v0.1-alpha.tar.gz
|
||||
816a7050c91652a8e5b881e939c1bc70e06fe23e8309ac80ef5d38fda06969b7 loop-linux-amd64-v0.1-alpha.tar.gz
|
||||
75a9ce3f605359735d39d9a0fb5037676c6ac29a70d7db5bc75fc1e5e3fcc465 loop-linux-arm64-v0.1-alpha.tar.gz
|
||||
b7c7668c90f1d67689a9e557346e32bf10c169ace220cd507ae4ee63f64b12d1 loop-linux-armv6-v0.1-alpha.tar.gz
|
||||
8aad519ff927643c35968bc9eb4e91a5a1f063ebf60e50b12c05f745d3602540 loop-linux-armv7-v0.1-alpha.tar.gz
|
||||
5b3be8f2ab4acff7e854a794ecde59abd7feed3002bb13177f89c1cd1c9419e7 loop-linux-mips64-v0.1-alpha.tar.gz
|
||||
aa3da5049eb2d411912aba8386dcc241f9db2b41dd4571ddbea80cf07f3fbc20 loop-linux-mips64le-v0.1-alpha.tar.gz
|
||||
1a6a8e8e93df6c02eac1e61d4e9f3a518bc2c2a096deb0b77f0e5a6c0afb553d loop-linux-ppc64-v0.1-alpha.tar.gz
|
||||
85e4f4e32783aad5e7e53125ca4c2efecaf997b24e81e54db0cc380cdf876cf9 loop-netbsd-386-v0.1-alpha.tar.gz
|
||||
8896df3499e9287177b5eacb2fc6b964e6dec698807f49582cbccbd3b7088878 loop-netbsd-amd64-v0.1-alpha.tar.gz
|
||||
133b069ad151adeac9c62596ba507f9ed425cfe6670a03e2e5dea6316e522f18 loop-openbsd-386-v0.1-alpha.tar.gz
|
||||
a9d1f80d34f698450d413844ff1a4536a4377faa6debd7c16bcfde94964cd628 loop-openbsd-amd64-v0.1-alpha.tar.gz
|
||||
94c35abdcafeebb17f19850b5e88031926116cce8bd22cdf56d905716a0063d8 loop-source-v0.1-alpha.tar.gz
|
||||
5cd5171f469e639ece6b37a2ff35bae3dac6d1b0a9490ed9e3f90e4f1fcadb97 loop-windows-386-v0.1-alpha.zip
|
||||
b139416e426868b060ea6fd28ba840398a6e45ad492eac50297462d4391bc0ce loop-windows-amd64-v0.1-alpha.zip
|
||||
e2ab0d8f7ec07468ea46e551f17521799147a01f48a3f2c5b1c2d62efd9512a5 vendor.tar.gz
|
||||
```
|
||||
|
||||
One can use the `shasum -a 256 <file name here>` tool in order to re-compute the
|
||||
`sha256` hash of the target binary for your operating system. The produced hash
|
||||
should be compared with the hashes listed above and they should match *exactly*.
|
||||
|
||||
Finally, you can also verify the _tag_ itself with the following command:
|
||||
```
|
||||
git verify-tag v0.1-alpha
|
||||
```
|
||||
|
||||
**Building the Contained Release**
|
||||
|
||||
With this new version of `loop`, we've modified our release process to ensure
|
||||
the bundled release is now _fully self contained_. As a result, with only the
|
||||
attached payload with this release, users will be able to rebuild the target
|
||||
release themselves without having to fetch any of the dependancies. Note that at
|
||||
this stage, binaries aren't yet fully reproducible (even with `go modules` ).
|
||||
This is due to the fact that by default,
|
||||
[Go will include the full directory path where the binary was built in the binary itself](https://github.com/golang/go/issues/16860).
|
||||
As a result, unless your file system exactly mirrors the machine used to build
|
||||
the binary, you'll get a different binary, as it includes artifacts from your
|
||||
local file system. This will be fixed in `go1.13`, and before then we may modify
|
||||
our release system to do this automatically.
|
||||
|
||||
In order to re-build from scratch, assuming that `vendor.tar.gz` and
|
||||
`loop-source-v0.1-alpha.tar.gz` are in the current directory:
|
||||
```
|
||||
tar -xvzf vendor.tar.gz
|
||||
tar -xvzf loop-source-v0.1-alpha.tar.gz
|
||||
GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightninglabs/loop.Commit=v0.1-alpha" ./cmd/loop
|
||||
GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightninglabs/loop.Commit=v0.1-alpha" ./cmd/loopd
|
||||
```
|
||||
|
||||
The `-mod=vendor` flag tells the `go build` command that it doesn't need to
|
||||
fetch the dependencies, and instead, they're all enclosed in the local vendor
|
||||
directory.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Joost Jager
|
||||
- Olaoluwa Osuntokun
|
||||
- Wilmer Paulino
|
||||
56
docs/release-notes/release-notes-0.10.0.md
Normal file
56
docs/release-notes/release-notes-0.10.0.md
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2020-10-13
|
||||
- **Release page:**
|
||||
[v0.10.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.10.0-beta)
|
||||
- **Previous release:** [v0.9.0-beta](release-notes-0.9.0.md)
|
||||
- **Next release:** [v0.11.0-beta](release-notes-0.11.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Multi-path payment has been enabled for Loop In. This means that it is now
|
||||
possible to replenish multiple channels via a single Loop In request and a
|
||||
single on-chain htlc. This has to potential to greatly reduce chain fee costs.
|
||||
Note that it is not yet possible to select specific peers to loop in through.
|
||||
* The daemon now sends a user agent string with each swap. This allows
|
||||
developers to identify their fork or custom implementation of the loop client.
|
||||
|
||||
**Updated Swap Suggestions**
|
||||
|
||||
* The swap suggestions endpoint has been updated to be fee-aware. Swaps that
|
||||
exceed the fee limits set by the liquidity manager will no longer be suggested
|
||||
(see `getparams` for the current limits, and use `setparams` to update these
|
||||
values).
|
||||
* Swap suggestions are now aware of ongoing and previously failed swaps. They
|
||||
will not suggest swaps for channels that are currently being utilized for
|
||||
swaps, and will not suggest any swaps if a swap that is not limited to a
|
||||
specific peer or channel is ongoing. If a channel was part of a failed swap
|
||||
within the last 24H, it will be excluded from our swap suggestions (this value
|
||||
is configurable).
|
||||
* The `debug` logging level is recommended if using this feature.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Macaroon authentication has been enabled for the `loopd` gRPC and REST
|
||||
connections. This makes it possible for the loop API to be exposed safely over
|
||||
the internet as unauthorized access is now prevented.
|
||||
|
||||
The daemon will write a default `loop.macaroon` in its main directory. For
|
||||
mainnet this file will be picked up automatically by the `loop` CLI tool. For
|
||||
testnet you need to specify the `--network=testnet` flag.
|
||||
[More information about TLS and macaroons.](../../README.md#authentication-and-transport-security)
|
||||
|
||||
* The `setparm` loopcli endpoint is renamed to `setrule` because this endpoint
|
||||
is only used for setting liqudity rules (parameters can be set using the new
|
||||
`setparams` endpoint).
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Joost Jager
|
||||
- Oliver Gugger
|
||||
37
docs/release-notes/release-notes-0.11.0.md
Normal file
37
docs/release-notes/release-notes-0.11.0.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2020-10-27
|
||||
- **Release page:**
|
||||
[v0.11.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.11.0-beta)
|
||||
- **Previous release:** [v0.10.0-beta](release-notes-0.10.0.md)
|
||||
- **Next release:** [v0.11.1-beta](release-notes-0.11.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* The loop client now labels all its on-chain transactions to make them easily
|
||||
identifiable in `lnd` 's `listchaintxns` output.
|
||||
|
||||
**Introducing Autoloop**
|
||||
|
||||
* This release includes support for opt-in automatic dispatch of loop out swaps,
|
||||
based on the output of the `Suggestions` endpoint.
|
||||
* To enable the autolooper, the following command can be used:
|
||||
`loop setparams --autoout=true --autobudget={budget in sats} --budgetstart={start time for budget}`
|
||||
* Automatically dispatched swaps are identified in the output of the `ListSwaps`
|
||||
with the label `[reserved]: autoloop-out`.
|
||||
* If autoloop is not enabled, the client will log the actions that the
|
||||
autolooper would have taken if it was enabled, and the `Suggestions` endpoint
|
||||
can be used to view the exact set of swaps that the autolooper would make if
|
||||
enabled.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Oliver Gugger
|
||||
28
docs/release-notes/release-notes-0.11.1.md
Normal file
28
docs/release-notes/release-notes-0.11.1.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2020-11-12
|
||||
- **Release page:**
|
||||
[v0.11.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.11.1-beta)
|
||||
- **Previous release:** [v0.11.0-beta](release-notes-0.11.0.md)
|
||||
- **Next release:** [v0.11.2-beta](release-notes-0.11.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* When requesting a swap, a new `initiator` field can be set on the gRPC/REST
|
||||
interface that is appended to the user agent string that is sent to the server
|
||||
to give information about Loop usage. The initiator field is meant for user
|
||||
interfaces to add their name to give the full picture of the binary used
|
||||
(`loopd`, LiT) and the method/interface used for triggering the swap (`loop`
|
||||
CLI, autolooper, LiT UI, other 3rd party UI).
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Oliver Gugger
|
||||
35
docs/release-notes/release-notes-0.11.2.md
Normal file
35
docs/release-notes/release-notes-0.11.2.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2020-12-08
|
||||
- **Release page:**
|
||||
[v0.11.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.11.2-beta)
|
||||
- **Previous release:** [v0.11.1-beta](release-notes-0.11.1.md)
|
||||
- **Next release:** [v0.11.3-beta](release-notes-0.11.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
**Autoloop Swap Size**
|
||||
|
||||
* Autoloop can now be configured with custom swap size limits. Previously,
|
||||
autoloop would use the minimum/maximum swap amount set by the server (exposed
|
||||
by the `loop terms` command) to decide on swap size.
|
||||
* Setting a custom minimum swap amount is particularly useful for clients that
|
||||
would like to perform fewer, larger swaps to save on fees. The trade-off when
|
||||
setting a large minimum amount is that autoloop will wait until your channel
|
||||
is at least the minimum amount below its incoming threshold amount before
|
||||
executing a swap, which may result in channels staying under the threshold for
|
||||
longer.
|
||||
* These values can be set using the following command:
|
||||
`loop setparams --minamt={minimum in sats} --maxamt={maximum in sats}`.
|
||||
* The values set must fall within the limits set by the loop server.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
50
docs/release-notes/release-notes-0.11.3.md
Normal file
50
docs/release-notes/release-notes-0.11.3.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-02-09
|
||||
- **Release page:**
|
||||
[v0.11.3-beta](https://github.com/lightninglabs/loop/releases/tag/v0.11.3-beta)
|
||||
- **Previous release:** [v0.11.2-beta](release-notes-0.11.2.md)
|
||||
- **Next release:** [v0.11.4-beta](release-notes-0.11.4.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* If lnd is locked when the loop client starts up, it will wait for lnd to be
|
||||
unlocked. Previous versions would exit with an error.
|
||||
* Loop will no longer need all `lnd` subserver macaroons to be present in the
|
||||
`--lnd.macaroondir`. Instead the new `--lnd.macaroonpath` option can be
|
||||
pointed to a single macaroon, for example the `admin.macaroon` or a custom
|
||||
baked one with the exact permissions needed for Loop. If the now deprecated
|
||||
flag/option `--lnd.macaroondir` is used, it will fall back to use only the
|
||||
`admin.macaroon` from that directory.
|
||||
* The rules used for autoloop have been relaxed to allow autoloop to dispatch
|
||||
swaps even if there are manually initiated swaps that are not limited to a
|
||||
single channel in progress. This change was made to allow autoloop to coexist
|
||||
with manual swaps.
|
||||
* The `SuggestSwaps` endpoint has been updated to include reasons that indicate
|
||||
why the Autolooper is not currently dispatching swaps for the set of rules
|
||||
that the client is configured with. See the
|
||||
[autoloop documentation](../autoloop.md) for a detailed explanations of
|
||||
these reasons.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* The `AutoOut`, `AutoOutBudgetSat` and `AutoOutBudgetStartSec` fields in the
|
||||
`LiquidityParameters` message used in the experimental autoloop API have been
|
||||
renamed to `Autoloop`, `AutoloopBudgetSat` and `AutoloopBudgetStartSec`.
|
||||
* The `autoout` flag for enabling automatic dispatch of loop out swaps has been
|
||||
renamed to `autoloop` so that it can cover loop out and loop in.
|
||||
* The `SuggestSwaps` rpc call will now fail with a `FailedPrecondition` grpc
|
||||
error code if no rules are configured for the autolooper. Previously the rpc
|
||||
would return an empty response.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed compile time compatibility with `lnd v0.12.0-beta`.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Oliver Gugger
|
||||
23
docs/release-notes/release-notes-0.11.4.md
Normal file
23
docs/release-notes/release-notes-0.11.4.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-02-11
|
||||
- **Release page:**
|
||||
[v0.11.4-beta](https://github.com/lightninglabs/loop/releases/tag/v0.11.4-beta)
|
||||
- **Previous release:** [v0.11.3-beta](release-notes-0.11.3.md)
|
||||
- **Next release:** [v0.12.0-beta](release-notes-0.12.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Default for `--lnd.macaroonpath` is set to the default path for the LND
|
||||
`admin.macaroon` (https://github.com/lightninglabs/loop/issues/336)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
40
docs/release-notes/release-notes-0.12.0.md
Normal file
40
docs/release-notes/release-notes-0.12.0.md
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-03-06
|
||||
- **Release page:**
|
||||
[v0.12.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.12.0-beta)
|
||||
- **Previous release:** [v0.11.4-beta](release-notes-0.11.4.md)
|
||||
- **Next release:** [v0.12.1-beta](release-notes-0.12.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Autoloop can now be configured on a per-peer basis, rather than only on an
|
||||
individual channel level. This change allows desired liquidity thresholds to
|
||||
be set for an individual peer, rather than a specific channel, and leverages
|
||||
multi-loop-out to more efficiently manage liquidity. To configure peer-level
|
||||
rules, provide the 'setrule' command with the peer's pubkey.
|
||||
* Autoloop's fee API has been simplified to allow setting a single percentage
|
||||
which will be used to limit total swap fees to a percentage of the amount
|
||||
being swapped, the default budget has been updated to reflect this. Use
|
||||
`loop setparams --feepercent={percentage}` to update this value. This fee
|
||||
setting has been updated to the default for autoloop.
|
||||
* The default confirmation target for automated loop out swap sweeps has been
|
||||
increased to 100 blocks. This change will not affect the time it takes to
|
||||
acquire inbound liquidity, but will decrease the cost of swaps.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* The loop dockerfile has been updated to use the `make` command so that the
|
||||
latest commit hash of the code being run will be included in `loopd`.
|
||||
* A bug where loop in on-chain fees were not recorded properly has been
|
||||
addressed.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- rockstardev
|
||||
40
docs/release-notes/release-notes-0.12.1.md
Normal file
40
docs/release-notes/release-notes-0.12.1.md
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-03-26
|
||||
- **Release page:**
|
||||
[v0.12.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.12.1-beta)
|
||||
- **Previous release:** [v0.12.0-beta](release-notes-0.12.0.md)
|
||||
- **Next release:** [v0.12.2-beta](release-notes-0.12.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* A new flag, `--verbose`, or `-v`, is added to `loop in`, `loop out` and
|
||||
`loop quote`. Responses from these commands are also updated to provide more
|
||||
verbose info, giving users a more intuitive view about money paid on/off-chain
|
||||
and fees incurred. Use `loop in -v`, `loop out -v`, `loop quote in -v` or
|
||||
`loop quote out -v` to view the details.
|
||||
* A stripped down version of the Loop server is now provided as a
|
||||
[Docker image](https://hub.docker.com/r/lightninglabs/loopserver). A quick
|
||||
start script and example `docker-compose` environment as well as
|
||||
[documentation on how to use the `regtest` Loop server](https://github.com/lightninglabs/loop/blob/master/regtest/README.md)
|
||||
was added too.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* A bug that would not list autoloop rules set on a per-peer basis when they
|
||||
were excluded due to insufficient budget, or the number of swaps in flight has
|
||||
been corrected. These rules will now be included in the output of
|
||||
`suggestswaps` with other autoloop peer rules.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Elle Mouton
|
||||
- Justin O'Brien
|
||||
- Oliver Gugger
|
||||
- Yong Yu
|
||||
29
docs/release-notes/release-notes-0.12.2.md
Normal file
29
docs/release-notes/release-notes-0.12.2.md
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-04-29
|
||||
- **Release page:**
|
||||
[v0.12.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.12.2-beta)
|
||||
- **Previous release:** [v0.12.1-beta](release-notes-0.12.1.md)
|
||||
- **Next release:** [v0.13.0-beta](release-notes-0.13.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
- If the payment for an LSAT fails, it is now automatically re-tried.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Instead of just blocking for forever without any apparent reason if another
|
||||
Loop daemon process is already running, we now exit with an error after 5
|
||||
seconds if acquiring the unique lock on the Loop `bbolt` DB fails.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Elle Mouton
|
||||
- Oliver Gugger
|
||||
- Yong Yu
|
||||
25
docs/release-notes/release-notes-0.13.0.md
Normal file
25
docs/release-notes/release-notes-0.13.0.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-05-19
|
||||
- **Release page:**
|
||||
[v0.13.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.13.0-beta)
|
||||
- **Previous release:** [v0.12.2-beta](release-notes-0.12.2.md)
|
||||
- **Next release:** [v0.14.0-beta](release-notes-0.14.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
A breaking change is required due to poold changes.
|
||||
|
||||
- Bumped the minimum required version of `lnd` to `v0.11.1-beta`.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Carla Kirk-Cohen
|
||||
- Oliver Gugger
|
||||
- Yong Yu
|
||||
30
docs/release-notes/release-notes-0.14.0.md
Normal file
30
docs/release-notes/release-notes-0.14.0.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-06-01
|
||||
- **Release page:**
|
||||
[v0.14.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.14.0-beta)
|
||||
- **Previous release:** [v0.13.0-beta](release-notes-0.13.0.md)
|
||||
- **Next release:** [v0.14.1-beta](release-notes-0.14.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
- The loopd client reports off-chain routing failures for loop out swaps if it
|
||||
cannot find a route to the server for the swap's prepay or invoice payment.
|
||||
This allows the server to release accepted invoices, if there are any,
|
||||
earlier, reducing the amount of time that funds are held off-chain. If the
|
||||
swap failed on one of the loop server's channels, it will report failure
|
||||
location of its off-chain failure. If the failure occurred outside of the loop
|
||||
server's infrastructure, a generic failure will be used so that no information
|
||||
about the client's position in the network is leaked.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Maurice Poirrier
|
||||
23
docs/release-notes/release-notes-0.14.1.md
Normal file
23
docs/release-notes/release-notes-0.14.1.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-06-09
|
||||
- **Release page:**
|
||||
[v0.14.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.14.1-beta)
|
||||
- **Previous release:** [v0.14.0-beta](release-notes-0.14.0.md)
|
||||
- **Next release:** [v0.14.2-beta](release-notes-0.14.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* A protobuf warning that was being logged on `loopd` startup and `loop` cli
|
||||
calls has been addressed.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
27
docs/release-notes/release-notes-0.14.2.md
Normal file
27
docs/release-notes/release-notes-0.14.2.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-07-20
|
||||
- **Release page:**
|
||||
[v0.14.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.14.2-beta)
|
||||
- **Previous release:** [v0.14.1-beta](release-notes-0.14.1.md)
|
||||
- **Next release:** [v0.15.0-beta](release-notes-0.15.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Certain versions of the Python gRPC library
|
||||
[weren't able to connect](https://github.com/grpc/grpc/issues/23172) to
|
||||
`loopd` 's gRPC interface, getting the `missing selected ALPN property` error.
|
||||
A server side fix was introduced to get rid of that error message.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Carla Kirk-Cohen
|
||||
- Olaoluwa Osuntokun
|
||||
- Oliver Gugger
|
||||
34
docs/release-notes/release-notes-0.15.0.md
Normal file
34
docs/release-notes/release-notes-0.15.0.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-08-03
|
||||
- **Release page:**
|
||||
[v0.15.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.15.0-beta)
|
||||
- **Previous release:** [v0.14.2-beta](release-notes-0.14.2.md)
|
||||
- **Next release:** [v0.15.1-beta](release-notes-0.15.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Loop-in quote now asks the server to optionally probe the client to test
|
||||
inbound liquidity. The server may use this information to give more accurate
|
||||
quotes.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Grpc error codes returned by the swap server when swap initiation fails are
|
||||
now surfaced to the client. Previously these error codes would be returned as
|
||||
a string.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Updated compile time dependencies of `lnd`, `grpc-gateway`, `protobuf` and
|
||||
`grpc`.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Carla Kirk-Cohen
|
||||
- Oliver Gugger
|
||||
- Yong Yu
|
||||
41
docs/release-notes/release-notes-0.15.1.md
Normal file
41
docs/release-notes/release-notes-0.15.1.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-11-18
|
||||
- **Release page:**
|
||||
[v0.15.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.15.1-beta)
|
||||
- **Previous release:** [v0.15.0-beta](release-notes-0.15.0.md)
|
||||
- **Next release:** [v0.16.0-beta](release-notes-0.16.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add JSON client stubs for using the Loop RPC interface from WebAssembly.
|
||||
[PR #411](https://github.com/lightninglabs/loop/pull/411)
|
||||
* Export `NewListenerConfig` so callers can construct custom listeners.
|
||||
[PR #432](https://github.com/lightninglabs/loop/pull/432)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Improve errors for explicitly configured files.
|
||||
[PR #413](https://github.com/lightninglabs/loop/pull/413)
|
||||
* Create the default macaroon only when required by the active configuration.
|
||||
[PR #428](https://github.com/lightninglabs/loop/pull/428)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Refactor Autoloop swap construction behind a swap-builder interface.
|
||||
[PR #418](https://github.com/lightninglabs/loop/pull/418)
|
||||
* Update `lndclient` and the compile-time LND dependency for LND v0.14.
|
||||
[PR #425](https://github.com/lightninglabs/loop/pull/425)
|
||||
[PR #426](https://github.com/lightninglabs/loop/pull/426)
|
||||
[PR #438](https://github.com/lightninglabs/loop/pull/438)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Carla Kirk-Cohen
|
||||
- Harsha Goli
|
||||
- Martin Habovštiak
|
||||
- Oliver Gugger
|
||||
- Turtle
|
||||
- Yong Yu
|
||||
41
docs/release-notes/release-notes-0.16.0.md
Normal file
41
docs/release-notes/release-notes-0.16.0.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2021-12-14
|
||||
- **Release page:**
|
||||
[v0.16.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.16.0-beta)
|
||||
- **Previous release:** [v0.15.1-beta](release-notes-0.15.1.md)
|
||||
- **Next release:** [v0.17.0-beta](release-notes-0.17.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* `--private` flag is now available on the `loop in` command, meaning users can
|
||||
now loop in to private nodes! This was implemented in
|
||||
[#415](https://github.com/lightninglabs/loop/pull/415) and has an
|
||||
implementation of LND's hop hints creation feature for the time being. The
|
||||
flag is also available in `loop quote in` as an extension.
|
||||
* `--route_hints` has also been added on the `loop in` and `loop quote in` cli
|
||||
commands, and was also include in
|
||||
[#415](https://github.com/lightninglabs/loop/pull/415). While the `--private`
|
||||
flag autogenerates routehints to assist the payer (Lightning Labs),
|
||||
`--route_hints` allows the user to feed their own crafted versions if they so
|
||||
please.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed issue where loop assumes the mainnet location for lnd.macaroonpath
|
||||
regardless of passed network parameters.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Carla Kirk-Cohen
|
||||
- Harsha Goli
|
||||
- Martin Habovštiak
|
||||
- Oliver Gugger
|
||||
- Turtle
|
||||
- Yong Yu
|
||||
32
docs/release-notes/release-notes-0.17.0.md
Normal file
32
docs/release-notes/release-notes-0.17.0.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-02-07
|
||||
- **Release page:**
|
||||
[v0.17.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.17.0-beta)
|
||||
- **Previous release:** [v0.16.0-beta](release-notes-0.16.0.md)
|
||||
- **Next release:** [v0.18.0-beta](release-notes-0.18.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Loop in functionality has been added to AutoLoop. This feature can be enabled
|
||||
to acquire outgoing capacity on your node automatically, using
|
||||
`loop setrule --type=in`. At present, autoloop can only be set to loop out
|
||||
*or* loop in, and cannot manage liquidity in both directions.
|
||||
|
||||
* Use LND's hop hint selector when doing private loop-ins.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Close local databases when loopd daemon is stopped programmatically.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Carla Kirk-Cohen
|
||||
- Elle Mouton
|
||||
- Suhail Saqan
|
||||
33
docs/release-notes/release-notes-0.18.0.md
Normal file
33
docs/release-notes/release-notes-0.18.0.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-03-30
|
||||
- **Release page:**
|
||||
[v0.18.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.18.0-beta)
|
||||
- **Previous release:** [v0.17.0-beta](release-notes-0.17.0.md)
|
||||
- **Next release:** [v0.19.1-beta](release-notes-0.19.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Loop client now supports optional routing plugins to improve off-chain payment
|
||||
reliability. One such plugin that the client implements will gradually prefer
|
||||
increasingly more expensive routes in case payments using cheap routes time
|
||||
out. Note that with this addition the minimum required LND version is LND
|
||||
0.14.2-beta.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Loop now supports being hooked up to a remote signing pair of `lnd` nodes, as
|
||||
long as `lnd` is `v0.14.3-beta` or later.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Harsha Goli
|
||||
- Marnix
|
||||
- Oliver Gugger
|
||||
- Yong Yu
|
||||
32
docs/release-notes/release-notes-0.19.1.md
Normal file
32
docs/release-notes/release-notes-0.19.1.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-06-09
|
||||
- **Release page:**
|
||||
[v0.19.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.19.1-beta)
|
||||
- **Previous release:** [v0.18.0-beta](release-notes-0.18.0.md)
|
||||
- **Next release:** [v0.20.0-beta](release-notes-0.20.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* User-specified liquidity parameters are persisted on disk to enable the
|
||||
liquidity manager's config to survive after a restart.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* The `SuggestSwaps` rpc now returns the correct peer pubkeys in the
|
||||
disqualified list.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Alex Miller
|
||||
- Andras Banki-Horvath
|
||||
- Carsten Otto
|
||||
- Harsha Goli
|
||||
- Oliver Gugger
|
||||
- sputn1ck
|
||||
- Yong Yu
|
||||
23
docs/release-notes/release-notes-0.2.0.md
Normal file
23
docs/release-notes/release-notes-0.2.0.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-06-26
|
||||
- **Release page:**
|
||||
[v0.2.0-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.2.0-alpha)
|
||||
- **Previous release:** [v0.2-alpha](release-notes-0.2.md)
|
||||
- **Next release:** [v0.2.1-alpha](release-notes-0.2.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
The `v0.2.0-alpha` and `v0.2-alpha` tags point to the same source commit. This
|
||||
tag does not introduce additional source changes.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
No additional contributors; this tag points to the same commit as
|
||||
`v0.2-alpha`.
|
||||
38
docs/release-notes/release-notes-0.2.1.md
Normal file
38
docs/release-notes/release-notes-0.2.1.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-07-25
|
||||
- **Release page:**
|
||||
[v0.2.1-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.2.1-alpha)
|
||||
- **Previous release:** [v0.2.0-alpha](release-notes-0.2.0.md)
|
||||
- **Next release:** [v0.2.2-alpha](release-notes-0.2.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
This release includes a new option to specify the sweep confirmation target for
|
||||
Loop Out.
|
||||
|
||||
```
|
||||
--conf_target=block_count
|
||||
```
|
||||
|
||||
This will delay the finality of the swap in favor of a potential reduction in
|
||||
chain fee expenditure.
|
||||
|
||||
If you are using this feature, please note that it does become increasingly
|
||||
important that you do not allow `loopd` to terminate before the swap is final,
|
||||
otherwise the timeout pathway may activate in the HTLC.
|
||||
|
||||
Because of the finality problem, the target will only be used at the start of
|
||||
the swap preimage reveal time period and is not a guaranteed final sweep fee
|
||||
rate.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Wilmer Paulino
|
||||
26
docs/release-notes/release-notes-0.2.2.md
Normal file
26
docs/release-notes/release-notes-0.2.2.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-07-31
|
||||
- **Release page:**
|
||||
[v0.2.2-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.2.2-alpha)
|
||||
- **Previous release:** [v0.2.1-alpha](release-notes-0.2.1.md)
|
||||
- **Next release:** [v0.2.3-alpha](release-notes-0.2.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
This release includes some important fixes for Loop Out.
|
||||
|
||||
- Improved support for selecting an external Loop Out address
|
||||
- Better validation for executing a Loop Out swap
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Bjorn Olav Jalborg
|
||||
- Joost Jager
|
||||
37
docs/release-notes/release-notes-0.2.3.md
Normal file
37
docs/release-notes/release-notes-0.2.3.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-10-03
|
||||
- **Release page:**
|
||||
[v0.2.3-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.2.3-alpha)
|
||||
- **Previous release:** [v0.2.2-alpha](release-notes-0.2.2.md)
|
||||
- **Next release:** [v0.2.4-alpha](release-notes-0.2.4.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
This patch release fixes the following issues:
|
||||
|
||||
- Max confirmations now respects a longer confirmation target more reliably
|
||||
- REST API now matches the gRPC API more closely
|
||||
- Fix issue encountered when using external address with Loop In
|
||||
|
||||
For more details, see:
|
||||
|
||||
- https://github.com/lightninglabs/loop/pull/74 - REST API Update
|
||||
- https://github.com/lightninglabs/loop/pull/86 - Loop In Fee Estimation Failure
|
||||
- https://github.com/lightninglabs/loop/pull/89 - Max Confirmation Target Issue
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Nigel Christian
|
||||
- Olaoluwa Osuntokun
|
||||
- Oliver Gugger
|
||||
- saguywalker
|
||||
- William O'Beirne
|
||||
- Wilmer Paulino
|
||||
32
docs/release-notes/release-notes-0.2.4.md
Normal file
32
docs/release-notes/release-notes-0.2.4.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-10-11
|
||||
- **Release page:**
|
||||
[v0.2.4-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.2.4-alpha)
|
||||
- **Previous release:** [v0.2.3-alpha](release-notes-0.2.3.md)
|
||||
- **Next release:** [v0.3.0-alpha](release-notes-0.3.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
This patch release includes:
|
||||
|
||||
- Preparatory changes for upcoming server changes related to swap fees and
|
||||
timing.
|
||||
|
||||
In the future, the Loop service will allow more flexibility around extensions to
|
||||
the swap timing in order to get a lower swap fee.
|
||||
|
||||
In preparation, the API will be adjusted to provide for multiple fee rates at
|
||||
different preferred swap wait times.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Johan T. Halseth
|
||||
- Oliver Gugger
|
||||
153
docs/release-notes/release-notes-0.2.md
Normal file
153
docs/release-notes/release-notes-0.2.md
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-06-26
|
||||
- **Release page:**
|
||||
[v0.2-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.2-alpha)
|
||||
- **Previous release:** [v0.1.3-alpha](release-notes-0.1.3.md)
|
||||
- **Next release:** [v0.2.0-alpha](release-notes-0.2.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
This is the first second release of Lightning Loop! This new release enables
|
||||
**Loop In** on mainnet, and also exposes some additional code used to build the
|
||||
`loop` daemon as an external package that others can use.
|
||||
[Check out our latest blog post for more details on Loop In, and the future of Lightning Loop](https://blog.lightning.engineering/announcement/2019/06/25/loop-in.html).
|
||||
|
||||
**Loop In**
|
||||
|
||||
At a high-level a Loop In swap can be used to:
|
||||
* Refilling depleted channels with funds from cold-wallets or exchange
|
||||
withdrawals
|
||||
* Servicing off-chain Lightning withdrawals using on-chain payments, with no
|
||||
funds in channels required
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* As a failsafe payment method that can be used when channel liquidity along a
|
||||
route is insufficient
|
||||
|
||||
A new command has been added to the `loop` cli command to allow users to drive
|
||||
Loop In swaps:
|
||||
```
|
||||
NAME:
|
||||
loop in - perform an on-chain to off-chain swap (loop in)
|
||||
|
||||
USAGE:
|
||||
loop in [command options] amt
|
||||
|
||||
DESCRIPTION:
|
||||
|
||||
Send the amount in satoshis specified by the amt argument off-chain.
|
||||
|
||||
OPTIONS:
|
||||
--amt value the amount in satoshis to loop in (default: 0)
|
||||
--external expect htlc to be published externally
|
||||
```
|
||||
|
||||
The `--external` argument allows the on-chain HTLC transacting to be published
|
||||
externally. This allows for a number of use cases like using this address to
|
||||
withdraw from an exchange into your Lightning channel!
|
||||
|
||||
[Additionally, the gRPC API (and REST!) docs have also been updated](https://lightning.engineering/loop).
|
||||
|
||||
Loop there it is!! ⚡️🔁
|
||||
|
||||
#### Maintenance
|
||||
|
||||
**Verifying the Release**
|
||||
|
||||
In order to verify the release, you'll need to have `gpg` or `gpg2` installed on
|
||||
your system. Once you've obtained a copy (and hopefully verified that as well),
|
||||
you'll first need to import the keys that have signed this release if you
|
||||
haven't done so already:
|
||||
```
|
||||
curl https://keybase.io/roasbeef/pgp_keys.asc | gpg --import
|
||||
```
|
||||
|
||||
Once you have his PGP key you can verify the release (assuming
|
||||
`manifest-v0.2-alpha.txt` and `manifest-v0.2-alpha.txt.sig` are in the current
|
||||
directory) with:
|
||||
```
|
||||
gpg --verify manifest-v0.2-alpha.txt
|
||||
```
|
||||
|
||||
You should see the following if the verification was successful:
|
||||
```
|
||||
gpg: assuming signed data in 'manifest-v0.2-alpha.txt'
|
||||
gpg: Signature made Wed Jun 26 09:56:58 2019 PDT
|
||||
gpg: using RSA key F8037E70C12C7A263C032508CE58F7F8E20FD9A2
|
||||
gpg: Good signature from "Olaoluwa Osuntokun <laolu32@gmail.com>" [ultimate]
|
||||
```
|
||||
|
||||
That will verify the signature on the main manifest page which ensures integrity
|
||||
and authenticity of the binaries you've downloaded locally. Next, depending on
|
||||
your operating system you should then re-calculate the `sha256` sum of the
|
||||
binary, and compare that with the following hashes (which are included in the
|
||||
manifest file):
|
||||
```
|
||||
de97a2e33fcce9650911f8976ed9089d061a1d5fb374bdfd3be0d6101871585d loop-darwin-386-v0.2-alpha.tar.gz
|
||||
666a5910757cb15dd2a62ac009b31359a97f4f1c83803d4028d10d23db6ee587 loop-darwin-amd64-v0.2-alpha.tar.gz
|
||||
4a06d43e48e7537975a92d25ac187b78a74426976ffd36bb1efaeb83bae7aa4f loop-dragonfly-amd64-v0.2-alpha.tar.gz
|
||||
f6cf356db4060d8c90b91dc1d8547472b255ceb8aae2197f531a177a285f60fc loop-freebsd-386-v0.2-alpha.tar.gz
|
||||
74fdb8d3a8e0a91cfeabe5e06f2be386a68e4524fa42d9c042b9a2030499a76d loop-freebsd-amd64-v0.2-alpha.tar.gz
|
||||
d500f36eefc1e1ee63b8259d4eefcd64f34b295781956559bd52389b5a37a98b loop-freebsd-arm-v0.2-alpha.tar.gz
|
||||
d2d01f9a8d1483173c5f1618477ff1929e8aa5e322849091d7b86694fedbf0bb loop-linux-386-v0.2-alpha.tar.gz
|
||||
da92445ec5e754da3f379e85310d697f3609a17e6639d1251a479a09fc0c16e1 loop-linux-amd64-v0.2-alpha.tar.gz
|
||||
04edae2cbdb6943b70b13cbc678901d26f4f06767f60f591f7c7d791c8b5925f loop-linux-arm64-v0.2-alpha.tar.gz
|
||||
5fae0185f8849364af9b998609d002f5e226d3e937dabfd56d1474415f6555db loop-linux-armv6-v0.2-alpha.tar.gz
|
||||
931a43c8a936db0a3a6a3d099b67d953b69344259bfa7d37faac985341ff27e9 loop-linux-armv7-v0.2-alpha.tar.gz
|
||||
757ae30b349f8fc209f7df20e1b6010814d0dd279a3717b8c7ba5cb7a092103b loop-linux-mips64-v0.2-alpha.tar.gz
|
||||
900c8ce735ac94f1d35c179e4387cc9292f261be685eb57b865d772bd668d8ec loop-linux-mips64le-v0.2-alpha.tar.gz
|
||||
aeb3d2f882405308827974515ea5d652d5e6d72188165ab315dbbb4c7402bc3f loop-linux-ppc64-v0.2-alpha.tar.gz
|
||||
0d072fd9ed648de679f46ee959a3aef1ae9e025d756140e432df2a51bfe57221 loop-netbsd-386-v0.2-alpha.tar.gz
|
||||
f26cedf2e8a38b175b47a6b6101edab99033e4776c6de21306cdc793e6dc0b0b loop-netbsd-amd64-v0.2-alpha.tar.gz
|
||||
3ea2bb1482c78d2bb45358c3de7961670b5ed64a231ec9a2dc2b6ba13a3e76a6 loop-openbsd-386-v0.2-alpha.tar.gz
|
||||
7a67ae9805beb8e43bd257e8355f8c471bbc740b1b2f1bbf8f834d50312299fe loop-openbsd-amd64-v0.2-alpha.tar.gz
|
||||
8f15d5c5f56bd19952361ee27b1821306d634bbe8799e52ab36a09f8c151ff6d loop-source-v0.2-alpha.tar.gz
|
||||
99de0a0e0464a5d7910e6ec4c5cdc881db278bf1bbb6095d5aec7c7a033aca0f loop-windows-386-v0.2-alpha.zip
|
||||
fb1e4dca3728a2608dce560385bf6e07cb319d27f4d7cfeb0a4aaf00b1cc2a4c loop-windows-amd64-v0.2-alpha.zip
|
||||
47b208033931c22fd6b1b23b723d49e18359709cb6b29a3f2623e6f80179bfbf vendor.tar.gz
|
||||
```
|
||||
|
||||
One can use the `shasum -a 256 <file name here>` tool in order to re-compute the
|
||||
`sha256` hash of the target binary for your operating system. The produced hash
|
||||
should be compared with the hashes listed above and they should match *exactly*.
|
||||
|
||||
Finally, you can also verify the _tag_ itself with the following command:
|
||||
```
|
||||
git verify-tag v0.2-alpha
|
||||
```
|
||||
|
||||
**Building the Contained Release**
|
||||
|
||||
With this new version of `loop`, we've modified our release process to ensure
|
||||
the bundled release is now _fully self contained_. As a result, with only the
|
||||
attached payload with this release, users will be able to rebuild the target
|
||||
release themselves without having to fetch any of the dependancies. Note that at
|
||||
this stage, binaries aren't yet fully reproducible (even with `go modules` ).
|
||||
This is due to the fact that by default,
|
||||
[Go will include the full directory path where the binary was built in the binary itself](https://github.com/golang/go/issues/16860).
|
||||
As a result, unless your file system exactly mirrors the machine used to build
|
||||
the binary, you'll get a different binary, as it includes artifacts from your
|
||||
local file system. This will be fixed in `go1.13`, and before then we may modify
|
||||
our release system to do this automatically.
|
||||
|
||||
In order to re-build from scratch, assuming that `vendor.tar.gz` and
|
||||
`loop-source-v0.2-alpha.tar.gz` are in the current directory:
|
||||
```
|
||||
tar -xvzf vendor.tar.gz
|
||||
tar -xvzf loop-source-v0.2-alpha.tar.gz
|
||||
GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightninglabs/loop.Commit=v0.2-alpha" ./cmd/loop
|
||||
GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightninglabs/loop.Commit=v0.2-alpha" ./cmd/loopd
|
||||
```
|
||||
|
||||
The `-mod=vendor` flag tells the `go build` command that it doesn't need to
|
||||
fetch the dependencies, and instead, they're all enclosed in the local vendor
|
||||
directory.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
No additional contributors; this tag points to the same commit as
|
||||
`v0.1.3-alpha`.
|
||||
28
docs/release-notes/release-notes-0.20.0.md
Normal file
28
docs/release-notes/release-notes-0.20.0.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-07-20
|
||||
- **Release page:**
|
||||
[v0.20.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.20.0-beta)
|
||||
- **Previous release:** [v0.19.1-beta](release-notes-0.19.1.md)
|
||||
- **Next release:** [v0.20.1-beta](release-notes-0.20.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* P2TR HTLCs and privacy preserving and cheaper MuSig2 loopout sweeps are now
|
||||
supported as an experimental feature when running `loopd` with
|
||||
the`--experimental` flag.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Carla Kirk-Cohen
|
||||
- Elle Mouton
|
||||
- Oliver Gugger
|
||||
- sputn1ck
|
||||
22
docs/release-notes/release-notes-0.20.1.md
Normal file
22
docs/release-notes/release-notes-0.20.1.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-08-01
|
||||
- **Release page:**
|
||||
[v0.20.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.20.1-beta)
|
||||
- **Previous release:** [v0.20.0-beta](release-notes-0.20.0.md)
|
||||
- **Next release:** [v0.20.2-beta](release-notes-0.20.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
- Improve logging for sweep transactions
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
26
docs/release-notes/release-notes-0.20.2.md
Normal file
26
docs/release-notes/release-notes-0.20.2.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-10-26
|
||||
- **Release page:**
|
||||
[v0.20.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.20.2-beta)
|
||||
- **Previous release:** [v0.20.1-beta](release-notes-0.20.1.md)
|
||||
- **Next release:** [v0.21.0-beta](release-notes-0.21.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Bump minimum LND version to v0.15.1-beta to avoid failed swaps due to the
|
||||
chain backend not properly supporting taproot (fixed in:
|
||||
https://github.com/lightningnetwork/lnd/pull/6798).
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Evan Kaloudis
|
||||
- sputn1ck
|
||||
30
docs/release-notes/release-notes-0.21.0.md
Normal file
30
docs/release-notes/release-notes-0.21.0.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2022-12-16
|
||||
- **Release page:**
|
||||
[v0.21.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.21.0-beta)
|
||||
- **Previous release:** [v0.20.2-beta](release-notes-0.20.2.md)
|
||||
- **Next release:** [v0.22.0-beta](release-notes-0.22.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Autoloop now has a new parameter named `destaddr` which if set to a valid
|
||||
bitcoin address will direct all funds from automatically dispatched loop outs
|
||||
towards that address.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Listing loop-in swaps will not display old, nested segwit swap htlc addresses
|
||||
correctly anymore since support for these htlc types is removed from the code
|
||||
base.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- George Tsagkarelis
|
||||
- sputn1ck
|
||||
26
docs/release-notes/release-notes-0.22.0.md
Normal file
26
docs/release-notes/release-notes-0.22.0.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-03-29
|
||||
- **Release page:**
|
||||
[v0.22.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.22.0-beta)
|
||||
- **Previous release:** [v0.21.0-beta](release-notes-0.21.0.md)
|
||||
- **Next release:** [v0.22.1-beta](release-notes-0.22.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Autoloop now uses a recurring budget. Users can now specify `autobudget` and
|
||||
`autobudgetrefreshperiod` to specify the amount of the budget and the period
|
||||
over which it will refresh.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- George Tsagkarelis
|
||||
- sputn1ck
|
||||
27
docs/release-notes/release-notes-0.22.1.md
Normal file
27
docs/release-notes/release-notes-0.22.1.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-04-24
|
||||
- **Release page:**
|
||||
[v0.22.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.22.1-beta)
|
||||
- **Previous release:** [v0.22.0-beta](release-notes-0.22.0.md)
|
||||
- **Next release:** [v0.23.0-beta](release-notes-0.23.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Correct the HTLC script version used when resuming very old swaps.
|
||||
[PR #571](https://github.com/lightninglabs/loop/pull/571)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update the Go Docker image and remove the local `swapserverrpc` module
|
||||
replacement.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Oliver Gugger
|
||||
23
docs/release-notes/release-notes-0.23.0.md
Normal file
23
docs/release-notes/release-notes-0.23.0.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-04-25
|
||||
- **Release page:**
|
||||
[v0.23.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.23.0-beta)
|
||||
- **Previous release:** [v0.22.1-beta](release-notes-0.22.1.md)
|
||||
- **Next release:** [v0.24.0-beta](release-notes-0.24.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Set musig2 to be the default swap protocol.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- George Tsagkarelis
|
||||
- sputn1ck
|
||||
26
docs/release-notes/release-notes-0.24.0.md
Normal file
26
docs/release-notes/release-notes-0.24.0.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-05-24
|
||||
- **Release page:**
|
||||
[v0.24.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.24.0-beta)
|
||||
- **Previous release:** [v0.23.0-beta](release-notes-0.23.0.md)
|
||||
- **Next release:** [v0.24.1-beta](release-notes-0.24.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
- Easy Autoloop: a new mode for autoloop which requires the user to only set a
|
||||
single target balance. Autoloop will start dispatching loop outs
|
||||
whenever the total channel balance of the node exceeds that target.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- George Tsagkarelis
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
23
docs/release-notes/release-notes-0.24.1.md
Normal file
23
docs/release-notes/release-notes-0.24.1.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-05-26
|
||||
- **Release page:**
|
||||
[v0.24.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.24.1-beta)
|
||||
- **Previous release:** [v0.24.0-beta](release-notes-0.24.0.md)
|
||||
- **Next release:** [v0.25.0-beta](release-notes-0.25.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add REST bindings for the `GetInfo` RPC.
|
||||
[PR #588](https://github.com/lightninglabs/loop/pull/588)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Slyghtning
|
||||
42
docs/release-notes/release-notes-0.25.0.md
Normal file
42
docs/release-notes/release-notes-0.25.0.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-07-03
|
||||
- **Release page:**
|
||||
[v0.25.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.25.0-beta)
|
||||
- **Previous release:** [v0.24.1-beta](release-notes-0.24.1.md)
|
||||
- **Next release:** [v0.25.1-beta](release-notes-0.25.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add SQLite and PostgreSQL stores, including migration from an existing bbolt
|
||||
database.
|
||||
[PR #585](https://github.com/lightninglabs/loop/pull/585)
|
||||
* Expose the L402 token identifier through the gRPC interface.
|
||||
[PR #601](https://github.com/lightninglabs/loop/pull/601)
|
||||
* Distinguish swaps initiated by Easy Autoloop in their labels.
|
||||
[PR #591](https://github.com/lightninglabs/loop/pull/591)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Respect the configured fee-PPM limit in Easy Autoloop.
|
||||
[PR #595](https://github.com/lightninglabs/loop/pull/595)
|
||||
* Read the Autoloop enabled flag directly from the active liquidity
|
||||
parameters.
|
||||
[PR #590](https://github.com/lightninglabs/loop/pull/590)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Correct Autoloop documentation and harden its tests.
|
||||
[PR #593](https://github.com/lightninglabs/loop/pull/593)
|
||||
[PR #594](https://github.com/lightninglabs/loop/pull/594)
|
||||
[PR #596](https://github.com/lightninglabs/loop/pull/596)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- George Tsagkarelis
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
25
docs/release-notes/release-notes-0.25.1.md
Normal file
25
docs/release-notes/release-notes-0.25.1.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-07-04
|
||||
- **Release page:**
|
||||
[v0.25.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.25.1-beta)
|
||||
- **Previous release:** [v0.25.0-beta](release-notes-0.25.0.md)
|
||||
- **Next release:** [v0.25.2-beta](release-notes-0.25.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Stop publishing Windows 386 release artifacts.
|
||||
[PR #606](https://github.com/lightninglabs/loop/pull/606)
|
||||
* Bump the release version to v0.25.1-beta.
|
||||
[PR #607](https://github.com/lightninglabs/loop/pull/607)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
25
docs/release-notes/release-notes-0.25.2.md
Normal file
25
docs/release-notes/release-notes-0.25.2.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-07-04
|
||||
- **Release page:**
|
||||
[v0.25.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.25.2-beta)
|
||||
- **Previous release:** [v0.25.1-beta](release-notes-0.25.1.md)
|
||||
- **Next release:** [v0.26.0-beta](release-notes-0.26.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Remove unsupported release platforms, including Windows 386.
|
||||
[PR #608](https://github.com/lightninglabs/loop/pull/608)
|
||||
* Bump the release version to v0.25.2-beta.
|
||||
[PR #609](https://github.com/lightninglabs/loop/pull/609)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
34
docs/release-notes/release-notes-0.26.0.md
Normal file
34
docs/release-notes/release-notes-0.26.0.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-07-28
|
||||
- **Release page:**
|
||||
[v0.26.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.0-beta)
|
||||
- **Previous release:** [v0.25.2-beta](release-notes-0.25.2.md)
|
||||
- **Next release:** [v0.26.1-beta](release-notes-0.26.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
This new feature enables loop out and autoloop out operations to sweep htlcs to
|
||||
addresses generated from an extened public key. A precondition for using the
|
||||
loop client in this fashion is onboarding a xpub account in the backing lnd
|
||||
instance, e.g.
|
||||
`lncli wallet accounts import xpub... my_loop_account --address_type p2tr --master_key_fingerprint 0df50`.
|
||||
Loop outs can then be instructed to sweep to a new derived address from the
|
||||
specified account, e.g:
|
||||
`loop out --amt 10000000 --account my_loop_account --address_type p2tr`. To use
|
||||
this functionality with autoloop out one has to set the backing lnd account and
|
||||
address type via liquidity parameters for autoloop, e.g.
|
||||
`loop --network regtest setparams --autoloop=true --account=my_loop_account --account_addr_type=p2tr...`
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- George Tsagkarelis
|
||||
- Guillermo Caracuel
|
||||
- Slyghtning
|
||||
30
docs/release-notes/release-notes-0.26.1.md
Normal file
30
docs/release-notes/release-notes-0.26.1.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-08-08
|
||||
- **Release page:**
|
||||
[v0.26.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.1-beta)
|
||||
- **Previous release:** [v0.26.0-beta](release-notes-0.26.0.md)
|
||||
- **Next release:** [v0.26.2-beta](release-notes-0.26.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Record the initiator associated with each swap.
|
||||
[PR #600](https://github.com/lightninglabs/loop/pull/600)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Repair faulty Loop Out timestamps on startup.
|
||||
[PR #617](https://github.com/lightninglabs/loop/pull/617)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Bump the release version to v0.26.1-beta.
|
||||
[PR #618](https://github.com/lightninglabs/loop/pull/618)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Andras Banki-Horvath
|
||||
- George Tsagkarelis
|
||||
- sputn1ck
|
||||
27
docs/release-notes/release-notes-0.26.2.md
Normal file
27
docs/release-notes/release-notes-0.26.2.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-08-09
|
||||
- **Release page:**
|
||||
[v0.26.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.2-beta)
|
||||
- **Previous release:** [v0.26.1-beta](release-notes-0.26.1.md)
|
||||
- **Next release:** [v0.26.3-beta](release-notes-0.26.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Add a SQL migration for faulty timestamps that may have appeared for users
|
||||
who were looping out through LiT v0.10.4-alpha.
|
||||
[PR #619](https://github.com/lightninglabs/loop/pull/619)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Bump the release version to v0.26.2-beta.
|
||||
[PR #620](https://github.com/lightninglabs/loop/pull/620)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Andras Banki-Horvath
|
||||
- sputn1ck
|
||||
33
docs/release-notes/release-notes-0.26.3.md
Normal file
33
docs/release-notes/release-notes-0.26.3.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-09-18
|
||||
- **Release page:**
|
||||
[v0.26.3-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.3-beta)
|
||||
- **Previous release:** [v0.26.2-beta](release-notes-0.26.2.md)
|
||||
- **Next release:** [v0.26.4-beta](release-notes-0.26.4.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add the reusable finite state machine module.
|
||||
[PR #631](https://github.com/lightninglabs/loop/pull/631)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Treat an already-settled Loop In invoice as a successful settlement.
|
||||
[PR #636](https://github.com/lightninglabs/loop/pull/636)
|
||||
* Correct SQL time parsing and the faulty-year migration, and skip bbolt
|
||||
migration when the SQLite database already exists.
|
||||
[PR #627](https://github.com/lightninglabs/loop/pull/627)
|
||||
[PR #630](https://github.com/lightninglabs/loop/pull/630)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Liongrass
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
32
docs/release-notes/release-notes-0.26.4.md
Normal file
32
docs/release-notes/release-notes-0.26.4.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-10-04
|
||||
- **Release page:**
|
||||
[v0.26.4-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.4-beta)
|
||||
- **Previous release:** [v0.26.3-beta](release-notes-0.26.3.md)
|
||||
- **Next release:** [v0.26.5-beta](release-notes-0.26.5.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add destination-address support to Easy Autoloop.
|
||||
[PR #644](https://github.com/lightninglabs/loop/pull/644)
|
||||
* Add Apple Silicon as a release target and provide a sample `loopd`
|
||||
configuration.
|
||||
[PR #643](https://github.com/lightninglabs/loop/pull/643)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update the compile-time LND dependency to v0.17.0-beta.
|
||||
[PR #641](https://github.com/lightninglabs/loop/pull/641)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- dstadulis
|
||||
- Oliver Gugger
|
||||
- Slyghtning
|
||||
28
docs/release-notes/release-notes-0.26.5.md
Normal file
28
docs/release-notes/release-notes-0.26.5.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-10-31
|
||||
- **Release page:**
|
||||
[v0.26.5-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.5-beta)
|
||||
- **Previous release:** [v0.26.4-beta](release-notes-0.26.4.md)
|
||||
- **Next release:** [v0.26.6-beta](release-notes-0.26.6.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Correct leap-year handling in database timestamp parsing.
|
||||
[PR #657](https://github.com/lightninglabs/loop/pull/657)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Refactor database initialization and update security-sensitive dependencies.
|
||||
[PR #649](https://github.com/lightninglabs/loop/pull/649)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
27
docs/release-notes/release-notes-0.26.6.md
Normal file
27
docs/release-notes/release-notes-0.26.6.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2023-11-28
|
||||
- **Release page:**
|
||||
[v0.26.6-beta](https://github.com/lightninglabs/loop/releases/tag/v0.26.6-beta)
|
||||
- **Previous release:** [v0.26.5-beta](release-notes-0.26.5.md)
|
||||
- **Next release:** [v0.27.0-beta](release-notes-0.27.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add RPC and CLI support for abandoning Loop In swaps.
|
||||
[PR #661](https://github.com/lightninglabs/loop/pull/661)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Finalize Loop Ins that fail because confirmed wallet funds are insufficient
|
||||
and expose a specific failure reason.
|
||||
[PR #665](https://github.com/lightninglabs/loop/pull/665)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Slyghtning
|
||||
34
docs/release-notes/release-notes-0.27.0.md
Normal file
34
docs/release-notes/release-notes-0.27.0.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-01-30
|
||||
- **Release page:**
|
||||
[v0.27.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.27.0-beta)
|
||||
- **Previous release:** [v0.26.6-beta](release-notes-0.26.6.md)
|
||||
- **Next release:** [v0.27.1-beta](release-notes-0.27.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Sweep Batcher: A new sub-system was added that handles all the loopout sweeps.
|
||||
Successful loopout HTLCs will no longer be swept back to the wallet via
|
||||
individual transactions but will instead form a single transaction that holds
|
||||
multiple inputs and pays to a single output. This will significantly reduce
|
||||
chain fee costs as it's using less block space by directly consolidating all
|
||||
the htlcs to a single address. Loopouts that pay to non-wallet addresses will
|
||||
still use individual transactions as their output cannot be mutated.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- bitcoin-lightning
|
||||
- elbandi
|
||||
- George Tsagkarelis
|
||||
- GoodDaisy
|
||||
- Mohamed Awnallah
|
||||
- shuoer86
|
||||
- sputn1ck
|
||||
28
docs/release-notes/release-notes-0.27.1.md
Normal file
28
docs/release-notes/release-notes-0.27.1.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-02-14
|
||||
- **Release page:**
|
||||
[v0.27.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.27.1-beta)
|
||||
- **Previous release:** [v0.27.0-beta](release-notes-0.27.0.md)
|
||||
- **Next release:** [v0.28.0-beta](release-notes-0.28.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
This release adds automatic sweeping of incorrectly deposited amounts to
|
||||
external loop in addresses. Previously, a mismatch in the contract amount and
|
||||
the actually deposited amount required external tools to recover the client
|
||||
funds. With this release the client automatically sweeps the funds back to the
|
||||
wallet upon contract expiry.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
35
docs/release-notes/release-notes-0.28.0.md
Normal file
35
docs/release-notes/release-notes-0.28.0.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-03-05
|
||||
- **Release page:**
|
||||
[v0.28.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.0-beta)
|
||||
- **Previous release:** [v0.27.1-beta](release-notes-0.27.1.md)
|
||||
- **Next release:** [v0.28.1-beta](release-notes-0.28.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add RPC and CLI support for listing Instant Out swaps.
|
||||
[PR #708](https://github.com/lightninglabs/loop/pull/708)
|
||||
* Allow Instant Out funds to be sent to a custom destination and improve the
|
||||
command-line flow.
|
||||
[PR #709](https://github.com/lightninglabs/loop/pull/709)
|
||||
[PR #710](https://github.com/lightninglabs/loop/pull/710)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Correct per-sweep on-chain fee accounting and improve displayed server costs.
|
||||
[PR #694](https://github.com/lightninglabs/loop/pull/694)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Increase SQLite durability.
|
||||
[PR #712](https://github.com/lightninglabs/loop/pull/712)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
28
docs/release-notes/release-notes-0.28.1.md
Normal file
28
docs/release-notes/release-notes-0.28.1.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-04-16
|
||||
- **Release page:**
|
||||
[v0.28.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.1-beta)
|
||||
- **Previous release:** [v0.28.0-beta](release-notes-0.28.0.md)
|
||||
- **Next release:** [v0.28.2-beta](release-notes-0.28.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Route the Loop Out prepayment over the selected outgoing channel set and
|
||||
populate the correct HTLC in swap updates.
|
||||
[PR #727](https://github.com/lightninglabs/loop/pull/727)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update SQLite, SQLC, PostgreSQL, and Docker dependencies and cache Docker
|
||||
builds.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Slyghtning
|
||||
36
docs/release-notes/release-notes-0.28.2.md
Normal file
36
docs/release-notes/release-notes-0.28.2.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-05-25
|
||||
- **Release page:**
|
||||
[v0.28.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.2-beta)
|
||||
- **Previous release:** [v0.28.1-beta](release-notes-0.28.1.md)
|
||||
- **Next release:** [v0.28.3-beta](release-notes-0.28.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
In loopd.conf file `maxlsatcost` and `maxlsatfee` were renamed to `maxl402cost`
|
||||
and `maxl402fee` accordingly. Old versions of the options are still recognized
|
||||
for backward compatibility, but a deprecation warning is printed. Users are
|
||||
encouraged to change the options to new names if they have been changed locally.
|
||||
|
||||
The path in looprpc "/v1/lsat/tokens" was renamed to "/v1/l402/tokens" and the
|
||||
corresponding method was renamed from `GetLsatTokens` to `GetL402Tokens`. New
|
||||
`loop` binary won't work with old `loopd`, because `loop listauth` is now
|
||||
calling `GetL402Tokens` method, which does not exist in previous `loopd` binary.
|
||||
Old `loop` binary works with new `loopd`, since `loopd` provides a wrapper for
|
||||
`GetLsatTokens` which calls `GetL402Tokens`; the wrapper logs a warning and it
|
||||
will be removed in a couple of releases. HTTP endpoint "/v1/l402/tokens" is now
|
||||
an additional binding for API "/v1/lsat/tokens", so it still works.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- Slyghtning
|
||||
31
docs/release-notes/release-notes-0.28.3.md
Normal file
31
docs/release-notes/release-notes-0.28.3.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-06-03
|
||||
- **Release page:**
|
||||
[v0.28.3-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.3-beta)
|
||||
- **Previous release:** [v0.28.2-beta](release-notes-0.28.2.md)
|
||||
- **Next release:** [v0.28.4-beta](release-notes-0.28.4.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Migrate incorrectly stored negative Loop Out costs and account for the
|
||||
prepayment amount correctly.
|
||||
[PR #764](https://github.com/lightninglabs/loop/pull/764)
|
||||
* Restore sweep-batcher swaps from the Loop database and preserve their
|
||||
confirmation targets.
|
||||
[PR #761](https://github.com/lightninglabs/loop/pull/761)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update the compile-time LND dependency to v0.18.0-beta.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- Slyghtning
|
||||
33
docs/release-notes/release-notes-0.28.4.md
Normal file
33
docs/release-notes/release-notes-0.28.4.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-06-04
|
||||
- **Release page:**
|
||||
[v0.28.4-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.4-beta)
|
||||
- **Previous release:** [v0.28.3-beta](release-notes-0.28.3.md)
|
||||
- **Next release:** [v0.28.5-beta](release-notes-0.28.5.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Make the LND RPC timeout configurable.
|
||||
[PR #771](https://github.com/lightninglabs/loop/pull/771)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Correct the cost migration for pending swaps.
|
||||
[PR #771](https://github.com/lightninglabs/loop/pull/771)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Factor out a sweep-batcher implementation that does not depend on the Loop
|
||||
database and update LND to v0.18.0-beta.1.
|
||||
[PR #766](https://github.com/lightninglabs/loop/pull/766)
|
||||
[PR #770](https://github.com/lightninglabs/loop/pull/770)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- sputn1ck
|
||||
24
docs/release-notes/release-notes-0.28.5.md
Normal file
24
docs/release-notes/release-notes-0.28.5.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-06-06
|
||||
- **Release page:**
|
||||
[v0.28.5-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.5-beta)
|
||||
- **Previous release:** [v0.28.4-beta](release-notes-0.28.4.md)
|
||||
- **Next release:** [v0.28.6-beta](release-notes-0.28.6.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Paginate LND payment lookups while migrating stored Loop Out costs.
|
||||
[PR #773](https://github.com/lightninglabs/loop/pull/773)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- jinjingroad
|
||||
34
docs/release-notes/release-notes-0.28.6.md
Normal file
34
docs/release-notes/release-notes-0.28.6.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-07-11
|
||||
- **Release page:**
|
||||
[v0.28.6-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.6-beta)
|
||||
- **Previous release:** [v0.28.5-beta](release-notes-0.28.5.md)
|
||||
- **Next release:** [v0.28.7-beta](release-notes-0.28.7.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add sweep-batcher options for custom MuSig2 signing and disabling fee
|
||||
bumping.
|
||||
[PR #783](https://github.com/lightninglabs/loop/pull/783)
|
||||
[PR #784](https://github.com/lightninglabs/loop/pull/784)
|
||||
* Track a minimum fee rate for sweeps and log transaction weight.
|
||||
[PR #785](https://github.com/lightninglabs/loop/pull/785)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fix sweep-batcher shutdown and database transaction races.
|
||||
[PR #779](https://github.com/lightninglabs/loop/pull/779)
|
||||
[PR #780](https://github.com/lightninglabs/loop/pull/780)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- chengehe
|
||||
- Slyghtning
|
||||
34
docs/release-notes/release-notes-0.28.7.md
Normal file
34
docs/release-notes/release-notes-0.28.7.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-08-08
|
||||
- **Release page:**
|
||||
[v0.28.7-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.7-beta)
|
||||
- **Previous release:** [v0.28.6-beta](release-notes-0.28.6.md)
|
||||
- **Next release:** [v0.28.8-beta](release-notes-0.28.8.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Return the last hop when fetching stored swaps.
|
||||
[PR #806](https://github.com/lightninglabs/loop/pull/806)
|
||||
* Add greedy sweep-batch selection.
|
||||
[PR #787](https://github.com/lightninglabs/loop/pull/787)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Correct command path handling, sweep fee estimates, and Instant Out SQL
|
||||
network configuration.
|
||||
[PR #803](https://github.com/lightninglabs/loop/pull/803)
|
||||
[PR #793](https://github.com/lightninglabs/loop/pull/793)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- crystalstall
|
||||
- longxiangqiao
|
||||
- Slyghtning
|
||||
- yingshanghuangqiao
|
||||
41
docs/release-notes/release-notes-0.28.8.md
Normal file
41
docs/release-notes/release-notes-0.28.8.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-10-21
|
||||
- **Release page:**
|
||||
[v0.28.8-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.8-beta)
|
||||
- **Previous release:** [v0.28.7-beta](release-notes-0.28.7.md)
|
||||
- **Next release:** [v0.28.9-beta](release-notes-0.28.9.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add a persistent notification manager and generalize the server notification
|
||||
stream.
|
||||
[PR #826](https://github.com/lightninglabs/loop/pull/826)
|
||||
* Add mixed sweep batches, configurable publication delays, transaction labels,
|
||||
and a maximum batch size.
|
||||
[PR #791](https://github.com/lightninglabs/loop/pull/791)
|
||||
[PR #801](https://github.com/lightninglabs/loop/pull/801)
|
||||
[PR #809](https://github.com/lightninglabs/loop/pull/809)
|
||||
[PR #813](https://github.com/lightninglabs/loop/pull/813)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Prevent sweep-batcher fee rates from decreasing and improve publication error
|
||||
handling.
|
||||
[PR #815](https://github.com/lightninglabs/loop/pull/815)
|
||||
[PR #833](https://github.com/lightninglabs/loop/pull/833)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Publish `looprpc` as a separately versioned Go module.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- drawdrop
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
30
docs/release-notes/release-notes-0.28.9.md
Normal file
30
docs/release-notes/release-notes-0.28.9.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-10-30
|
||||
- **Release page:**
|
||||
[v0.28.9-beta](https://github.com/lightninglabs/loop/releases/tag/v0.28.9-beta)
|
||||
- **Previous release:** [v0.28.8-beta](release-notes-0.28.8.md)
|
||||
- **Next release:** [v0.29.0-beta](release-notes-0.29.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add the `FetchL402` RPC and `loop fetchl402` command.
|
||||
[PR #841](https://github.com/lightninglabs/loop/pull/841)
|
||||
* Propagate event contexts through the FSM, reservation, and Instant Out
|
||||
packages.
|
||||
[PR #839](https://github.com/lightninglabs/loop/pull/839)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update the compile-time LND dependency to v0.18.4-beta.
|
||||
[PR #828](https://github.com/lightninglabs/loop/pull/828)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Oliver Gugger
|
||||
- sputn1ck
|
||||
28
docs/release-notes/release-notes-0.29.0.md
Normal file
28
docs/release-notes/release-notes-0.29.0.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2024-12-18
|
||||
- **Release page:**
|
||||
[v0.29.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.29.0-beta)
|
||||
- **Previous release:** [v0.28.9-beta](release-notes-0.28.9.md)
|
||||
- **Next release:** [v0.29.1-beta](release-notes-0.29.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
Add support for persisting address loop in mode
|
||||
https://docs.lightning.engineering/lightning-network-tools/loop/static-loop-in-addresses
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- pinglanlu
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
- ziggie
|
||||
38
docs/release-notes/release-notes-0.29.1.md
Normal file
38
docs/release-notes/release-notes-0.29.1.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-03-18
|
||||
- **Release page:**
|
||||
[v0.29.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.29.1-beta)
|
||||
- **Previous release:** [v0.29.0-beta](release-notes-0.29.0.md)
|
||||
- **Next release:** [v0.30.0-beta](release-notes-0.30.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add Taproot Asset Loop Outs, including asset-aware quotes, accounting, and
|
||||
command-line options.
|
||||
[PR #872](https://github.com/lightninglabs/loop/pull/872)
|
||||
[PR #876](https://github.com/lightninglabs/loop/pull/876)
|
||||
* Allow a specific amount to be withdrawn from static address deposits.
|
||||
[PR #860](https://github.com/lightninglabs/loop/pull/860)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fix Loop Out fee estimation when the confirmation target is one.
|
||||
[PR #899](https://github.com/lightninglabs/loop/pull/899)
|
||||
* Add notification backoff and pending-L402 handling to avoid busy looping.
|
||||
[PR #879](https://github.com/lightninglabs/loop/pull/879)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update the compile-time LND dependency to v0.19.0.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- Oliver Gugger
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
39
docs/release-notes/release-notes-0.3.0.md
Normal file
39
docs/release-notes/release-notes-0.3.0.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2019-11-21
|
||||
- **Release page:**
|
||||
[v0.3.0-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.3.0-alpha)
|
||||
- **Previous release:** [v0.2.4-alpha](release-notes-0.2.4.md)
|
||||
- **Next release:** [v0.3.1-alpha](release-notes-0.3.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
This minor version release includes:
|
||||
|
||||
- Change the default behavior of Loop Out swaps to use the new Loop Out delay
|
||||
- New `--fast` flag to execute Loop Out swaps immediately
|
||||
- Add delay configuration to the Loop Out client API
|
||||
|
||||
The new delay option is related to an on-going effort to minimize the on-chain
|
||||
footprint of Lightning Loop, which will deliver increased privacy and lower
|
||||
chain fees.
|
||||
|
||||
If multiple execution delayed Loop Outs are present at the time of Loop Out
|
||||
on-chain funding, the Loop service will now batch those funding outputs together
|
||||
into a single transaction, reducing the number of change outputs and required
|
||||
inputs used for each swap.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Corey Phillips
|
||||
- Johan T. Halseth
|
||||
- Joost Jager
|
||||
- Oliver Gugger
|
||||
- Wilmer Paulino
|
||||
37
docs/release-notes/release-notes-0.3.1.md
Normal file
37
docs/release-notes/release-notes-0.3.1.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2020-01-15
|
||||
- **Release page:**
|
||||
[v0.3.1-alpha](https://github.com/lightninglabs/loop/releases/tag/v0.3.1-alpha)
|
||||
- **Previous release:** [v0.3.0-alpha](release-notes-0.3.0.md)
|
||||
- **Next release:** [v0.4.0-rc1.beta](release-notes-0.4.0-rc1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
In this patch version release:
|
||||
|
||||
- `loop out` now supports an optional `--max_swap_routing_fee` flag to specify a
|
||||
max routing fee
|
||||
- `loop quote` now supports an optional `--fast` flag to specify a quote for an
|
||||
immediate swap
|
||||
|
||||
This version is recommended for all users to improve the fidelity of fee
|
||||
estimation. In a previous update the swap quote may have returned a higher
|
||||
estimated fee than would have been ultimately paid.
|
||||
|
||||
Max swap routing fee is also recommended for users who want to adjust the fee
|
||||
ceiling of their Loop Out Lightning Network fees.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- FreeThinker
|
||||
- Johan T. Halseth
|
||||
- Oliver Gugger
|
||||
- Wilmer Paulino
|
||||
35
docs/release-notes/release-notes-0.30.0.md
Normal file
35
docs/release-notes/release-notes-0.30.0.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-03-27
|
||||
- **Release page:**
|
||||
[v0.30.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.30.0-beta)
|
||||
- **Previous release:** [v0.29.1-beta](release-notes-0.29.1.md)
|
||||
- **Next release:** [v0.31.0-beta](release-notes-0.31.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add Taproot Asset support to Easy Autoloop Loop Outs.
|
||||
[PR #886](https://github.com/lightninglabs/loop/pull/886)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Make static address deposit recovery non-concurrent and correct deposit FSM
|
||||
shutdown and locking behavior.
|
||||
[PR #908](https://github.com/lightninglabs/loop/pull/908)
|
||||
* Fix data races across Loop Out payment, reservations, static addresses,
|
||||
logging, and sweep batching.
|
||||
[PR #890](https://github.com/lightninglabs/loop/pull/890)
|
||||
[PR #902](https://github.com/lightninglabs/loop/pull/902)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Run unit tests with the Go race detector.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
30
docs/release-notes/release-notes-0.31.0.md
Normal file
30
docs/release-notes/release-notes-0.31.0.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-04-25
|
||||
- **Release page:**
|
||||
[v0.31.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.0-beta)
|
||||
- **Previous release:** [v0.30.0-beta](release-notes-0.30.0.md)
|
||||
- **Next release:** [v0.31.1-beta](release-notes-0.31.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* [Enhance](https://github.com/lightninglabs/loop/pull/912) the `loop listswaps`
|
||||
command by improving the ability to filter the response. Use
|
||||
`--start_timestamp_ns` to return only swaps after that timestamp. Use
|
||||
`--max_swaps` to limit total swap outputs. Paging is enabled using the
|
||||
`next_start_time` field in the response.
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- Guillermo Caracuel
|
||||
- Sam Korn
|
||||
- Slyghtning
|
||||
30
docs/release-notes/release-notes-0.31.1.md
Normal file
30
docs/release-notes/release-notes-0.31.1.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-05-05
|
||||
- **Release page:**
|
||||
[v0.31.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.1-beta)
|
||||
- **Previous release:** [v0.31.0-beta](release-notes-0.31.0.md)
|
||||
- **Next release:** [v0.31.2-beta](release-notes-0.31.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Autoloop now defaults to a slow publication deadline (30 minutes after
|
||||
initiation) to reduce fees. To revert to the previous behavior, users can run
|
||||
`loop setparams --fast`, which causes swap HTLCs to be published immediately
|
||||
after initiation.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- ffranr
|
||||
- Oliver Gugger
|
||||
- Slyghtning
|
||||
- sputn1ck
|
||||
30
docs/release-notes/release-notes-0.31.2.md
Normal file
30
docs/release-notes/release-notes-0.31.2.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-06-18
|
||||
- **Release page:**
|
||||
[v0.31.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.2-beta)
|
||||
- **Previous release:** [v0.31.1-beta](release-notes-0.31.1.md)
|
||||
- **Next release:** [v0.31.3-beta](release-notes-0.31.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* The content of the `commit_hash` field of the `GetInfo` response has been
|
||||
updated so that it contains the Git commit hash the Loop binary build was
|
||||
based on. If the build had uncommited changes, this field will contain the
|
||||
most recent commit hash, suffixed by "-dirty".
|
||||
* The `Commit` part of the `--version` command output has been updated to
|
||||
contain the most recent git commit tag.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- Oliver Gugger
|
||||
- Slyghtning
|
||||
- Viktor Tigerström
|
||||
61
docs/release-notes/release-notes-0.31.3.md
Normal file
61
docs/release-notes/release-notes-0.31.3.md
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-09-25
|
||||
- **Release page:**
|
||||
[v0.31.3-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.3-beta)
|
||||
- **Previous release:** [v0.31.2-beta](release-notes-0.31.2.md)
|
||||
- **Next release:** [v0.31.4-beta](release-notes-0.31.4.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Allow static address Loop Ins to swap an amount smaller than the selected
|
||||
deposits and expose arbitrary static swap amounts through the server RPC.
|
||||
[PR #887](https://github.com/lightninglabs/loop/pull/887)
|
||||
[PR #951](https://github.com/lightninglabs/loop/pull/951)
|
||||
* Add deposit indices, outpoint-based deposit lookups, and CLI output for
|
||||
deposits and their swap hashes.
|
||||
[PR #959](https://github.com/lightninglabs/loop/pull/959)
|
||||
[PR #990](https://github.com/lightninglabs/loop/pull/990)
|
||||
[PR #991](https://github.com/lightninglabs/loop/pull/991)
|
||||
* Add sweep-batcher change outputs.
|
||||
[PR #976](https://github.com/lightninglabs/loop/pull/976)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Harden static address deposit recovery, withdrawal handling, block polling,
|
||||
expiry tracking, and deposit availability filtering.
|
||||
[PR #954](https://github.com/lightninglabs/loop/pull/954)
|
||||
[PR #956](https://github.com/lightninglabs/loop/pull/956)
|
||||
[PR #995](https://github.com/lightninglabs/loop/pull/995)
|
||||
[PR #996](https://github.com/lightninglabs/loop/pull/996)
|
||||
[PR #1003](https://github.com/lightninglabs/loop/pull/1003)
|
||||
[PR #1004](https://github.com/lightninglabs/loop/pull/1004)
|
||||
* Avoid creating a Loop In timeout transaction after its invoice has already
|
||||
been paid.
|
||||
[PR #998](https://github.com/lightninglabs/loop/pull/998)
|
||||
* Fix sweep-batcher reorg detection and presigned-sweep handling.
|
||||
[PR #952](https://github.com/lightninglabs/loop/pull/952)
|
||||
[PR #975](https://github.com/lightninglabs/loop/pull/975)
|
||||
* Avoid a startup panic when the Taproot Asset client is unavailable.
|
||||
[PR #970](https://github.com/lightninglabs/loop/pull/970)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update LND through v0.19.3, Taproot Assets through v0.6.1, Go, and lint
|
||||
tooling.
|
||||
[PR #985](https://github.com/lightninglabs/loop/pull/985)
|
||||
[PR #989](https://github.com/lightninglabs/loop/pull/989)
|
||||
[PR #993](https://github.com/lightninglabs/loop/pull/993)
|
||||
[PR #1001](https://github.com/lightninglabs/loop/pull/1001)
|
||||
* Build static release binaries and fix release-version matching.
|
||||
[PR #965](https://github.com/lightninglabs/loop/pull/965)
|
||||
[PR #978](https://github.com/lightninglabs/loop/pull/978)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
- George Tsagkarelis
|
||||
- Slyghtning
|
||||
38
docs/release-notes/release-notes-0.31.4.md
Normal file
38
docs/release-notes/release-notes-0.31.4.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-10-16
|
||||
- **Release page:**
|
||||
[v0.31.4-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.4-beta)
|
||||
- **Previous release:** [v0.31.3-beta](release-notes-0.31.3.md)
|
||||
- **Next release:** [v0.31.5-beta](release-notes-0.31.5.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add fast publication support to traditional and static Loop Ins.
|
||||
[PR #1009](https://github.com/lightninglabs/loop/pull/1009)
|
||||
* Add reproducible host and Docker release builds.
|
||||
[PR #1007](https://github.com/lightninglabs/loop/pull/1007)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Migrate the command-line client to `urfave/cli/v3`.
|
||||
[PR #1013](https://github.com/lightninglabs/loop/pull/1013)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Correct sweep-batcher change-output fee accounting and publish fee-rate
|
||||
calculation.
|
||||
[PR #1020](https://github.com/lightninglabs/loop/pull/1020)
|
||||
* Harden static deposit recovery, withdrawal, and swap-state handling.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Presign sweep transactions in parallel.
|
||||
[PR #1022](https://github.com/lightninglabs/loop/pull/1022)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- George Tsagkarelis
|
||||
- Slyghtning
|
||||
26
docs/release-notes/release-notes-0.31.5-lnd0.20.md
Normal file
26
docs/release-notes/release-notes-0.31.5-lnd0.20.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-10-31
|
||||
- **Release page:**
|
||||
[v0.31.5-beta-lnd0.20](https://github.com/lightninglabs/loop/releases/tag/v0.31.5-beta-lnd0.20)
|
||||
- **Previous release:** [v0.31.5-beta](release-notes-0.31.5.md)
|
||||
- **Next release:** [v0.31.6-beta](release-notes-0.31.6.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Restore the LND v0.20 release dependency set, including the corresponding
|
||||
`lndclient` and Taproot Assets versions.
|
||||
* Restore CLI documentation generation and related release tooling that had
|
||||
been removed by the dependency downgrade.
|
||||
* Correct the `looprpc` and `swapserverrpc` module versions used by this
|
||||
compatibility release.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- sputn1ck
|
||||
33
docs/release-notes/release-notes-0.31.5.md
Normal file
33
docs/release-notes/release-notes-0.31.5.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-10-31
|
||||
- **Release page:**
|
||||
[v0.31.5-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.5-beta)
|
||||
- **Previous release:** [v0.31.4-beta](release-notes-0.31.4.md)
|
||||
- **Next release:**
|
||||
[v0.31.5-beta-lnd0.20](release-notes-0.31.5-lnd0.20.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add notification versioning and a manager for resuming swaps.
|
||||
[PR #1029](https://github.com/lightninglabs/loop/pull/1029)
|
||||
* Add Instant Out and static address RPCs to `client.yaml`.
|
||||
[PR #1026](https://github.com/lightninglabs/loop/pull/1026)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Standardize static address amount flags on `--amt`.
|
||||
[PR #1023](https://github.com/lightninglabs/loop/pull/1023)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Avoid an Instant Out startup crash when experimental features are disabled.
|
||||
[PR #1030](https://github.com/lightninglabs/loop/pull/1030)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Andras Banki-Horvath
|
||||
- Boris Nagaev
|
||||
42
docs/release-notes/release-notes-0.31.6.md
Normal file
42
docs/release-notes/release-notes-0.31.6.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-11-26
|
||||
- **Release page:**
|
||||
[v0.31.6-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.6-beta)
|
||||
- **Previous release:**
|
||||
[v0.31.5-beta-lnd0.20](release-notes-0.31.5-lnd0.20.md)
|
||||
- **Next release:** [v0.31.7-beta](release-notes-0.31.7.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add Easy Autoloop peer exclusion and an option to include all peers.
|
||||
[PR #1016](https://github.com/lightninglabs/loop/pull/1016)
|
||||
* Add the `loop stop` command.
|
||||
[PR #1048](https://github.com/lightninglabs/loop/pull/1048)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Wait for the chain notifier and a positive block height during startup.
|
||||
[PR #1046](https://github.com/lightninglabs/loop/pull/1046)
|
||||
* Correct a sweep-batcher race while re-adding sweeps during shutdown.
|
||||
[PR #1042](https://github.com/lightninglabs/loop/pull/1042)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update LND to v0.20.0-beta and Taproot Assets to v0.7.0.
|
||||
[PR #1045](https://github.com/lightninglabs/loop/pull/1045)
|
||||
* Update `lndclient`, Go, and security-sensitive dependencies.
|
||||
[PR #1034](https://github.com/lightninglabs/loop/pull/1034)
|
||||
[PR #1041](https://github.com/lightninglabs/loop/pull/1041)
|
||||
[PR #1047](https://github.com/lightninglabs/loop/pull/1047)
|
||||
[PR #1049](https://github.com/lightninglabs/loop/pull/1049)
|
||||
* Add Lightning Terminal integration tests to CI.
|
||||
[PR #1050](https://github.com/lightninglabs/loop/pull/1050)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Boris Nagaev
|
||||
- ffranr
|
||||
- Slyghtning
|
||||
22
docs/release-notes/release-notes-0.31.7.md
Normal file
22
docs/release-notes/release-notes-0.31.7.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2025-11-26
|
||||
- **Release page:**
|
||||
[v0.31.7-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.7-beta)
|
||||
- **Previous release:** [v0.31.6-beta](release-notes-0.31.6.md)
|
||||
- **Next release:** [v0.31.8-beta](release-notes-0.31.8.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Bump the release version to v0.31.7-beta.
|
||||
[PR #1051](https://github.com/lightninglabs/loop/pull/1051)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
38
docs/release-notes/release-notes-0.31.8.md
Normal file
38
docs/release-notes/release-notes-0.31.8.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-02-03
|
||||
- **Release page:**
|
||||
[v0.31.8-beta](https://github.com/lightninglabs/loop/releases/tag/v0.31.8-beta)
|
||||
- **Previous release:** [v0.31.7-beta](release-notes-0.31.7.md)
|
||||
- **Next release:** [v0.32.0-beta](release-notes-0.32.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add the `SweepHtlc` RPC and `loop out sweephtlc` command for manually
|
||||
sweeping a Loop Out HTLC.
|
||||
[PR #1066](https://github.com/lightninglabs/loop/pull/1066)
|
||||
* Add PSBT-based static address withdrawals.
|
||||
[PR #1043](https://github.com/lightninglabs/loop/pull/1043)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Deprecate the previous server-driven static withdrawal RPC in favor of the
|
||||
PSBT-based endpoint.
|
||||
[PR #1043](https://github.com/lightninglabs/loop/pull/1043)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Re-register static address HTLC notifications after confirmation errors.
|
||||
* Persist confirmed sweep batches atomically.
|
||||
[PR #1044](https://github.com/lightninglabs/loop/pull/1044)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Replace deprecated gRPC dial helpers and remove unused client code.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- Slyghtning
|
||||
- Viktor Torstensson
|
||||
42
docs/release-notes/release-notes-0.32.0.md
Normal file
42
docs/release-notes/release-notes-0.32.0.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-03-02
|
||||
- **Release page:**
|
||||
[v0.32.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.32.0-beta)
|
||||
- **Previous release:** [v0.31.8-beta](release-notes-0.31.8.md)
|
||||
- **Next release:** [v0.32.1-beta](release-notes-0.32.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
Static Address Open Channel — This release introduces the ability to open
|
||||
Lightning channels directly from static address deposits. Instead of performing
|
||||
a loop-in to get funds into your Lightning node and then opening a channel as
|
||||
separate steps, you can now combine both into a single operation using the new
|
||||
loop openchannel command.
|
||||
|
||||
- Consolidate deposits into channels: If you have one or more static address
|
||||
deposits sitting on-chain, you can open a channel to any peer using those
|
||||
funds directly, skipping the loop-in swap and its associated fees.
|
||||
- Flexible funding: Use the --utxo flag to select specific deposit outpoints,
|
||||
or use --fundmax to sweep all selected UTXOs into a single channel.
|
||||
- Full channel configuration: The command supports the same options as lncli
|
||||
openchannel — channel type (tweakless, anchors, taproot), private channels,
|
||||
push amounts, fee rates, zero-conf, and more.
|
||||
|
||||
Examples:
|
||||
|
||||
```shell
|
||||
loop openchannel --node_key <peer_pubkey> --local_amt 1000000
|
||||
loop openchannel --node_key <peer_pubkey> --utxo txid:0 --fundmax
|
||||
```
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Slyghtning
|
||||
23
docs/release-notes/release-notes-0.32.1.md
Normal file
23
docs/release-notes/release-notes-0.32.1.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-03-02
|
||||
- **Release page:**
|
||||
[v0.32.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.32.1-beta)
|
||||
- **Previous release:** [v0.32.0-beta](release-notes-0.32.0.md)
|
||||
- **Next release:** [v0.33.0-beta](release-notes-0.33.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update release builds to Go 1.26.0.
|
||||
[PR #1083](https://github.com/lightninglabs/loop/pull/1083)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
32
docs/release-notes/release-notes-0.33.0.md
Normal file
32
docs/release-notes/release-notes-0.33.0.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-04-08
|
||||
- **Release page:**
|
||||
[v0.33.0-beta](https://github.com/lightninglabs/loop/releases/tag/v0.33.0-beta)
|
||||
- **Previous release:** [v0.32.1-beta](release-notes-0.32.1.md)
|
||||
- **Next release:** [v0.33.1-beta](release-notes-0.33.1.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add maximum swap-fee controls to static address Loop Ins.
|
||||
[PR #1114](https://github.com/lightninglabs/loop/pull/1114)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Harden static address startup, withdrawal notification registration, Loop In
|
||||
recovery, HTLC timeout handling, and sweep output validation.
|
||||
[PR #1078](https://github.com/lightninglabs/loop/pull/1078)
|
||||
* Ensure cleanup operations use live contexts and fix a Loop Out test goroutine
|
||||
leak.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Regenerate the command-line reference and update build dependencies.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- Slyghtning
|
||||
35
docs/release-notes/release-notes-0.33.1.md
Normal file
35
docs/release-notes/release-notes-0.33.1.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-05-26
|
||||
- **Release page:**
|
||||
[v0.33.1-beta](https://github.com/lightninglabs/loop/releases/tag/v0.33.1-beta)
|
||||
- **Previous release:** [v0.33.0-beta](release-notes-0.33.0.md)
|
||||
- **Next release:** [v0.33.2-beta](release-notes-0.33.2.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add Static Address Loop Ins to Autoloop planning and execution.
|
||||
[PR #1119](https://github.com/lightninglabs/loop/pull/1119)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Validate static address server parameters and prevent panics when displaying
|
||||
malformed or missing Instant Out reservation identifiers.
|
||||
[PR #1137](https://github.com/lightninglabs/loop/pull/1137)
|
||||
* Harden sweep-batcher shutdown and route-hint preservation.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Add record-and-replay integration tests for CLI sessions.
|
||||
[PR #1072](https://github.com/lightninglabs/loop/pull/1072)
|
||||
* Add the project security policy.
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- 0xfandom
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- Olexandr88
|
||||
- Slyghtning
|
||||
31
docs/release-notes/release-notes-0.33.2.md
Normal file
31
docs/release-notes/release-notes-0.33.2.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-06-08
|
||||
- **Release page:**
|
||||
[v0.33.2-beta](https://github.com/lightninglabs/loop/releases/tag/v0.33.2-beta)
|
||||
- **Previous release:** [v0.33.1-beta](release-notes-0.33.1.md)
|
||||
- **Next release:** [v0.33.3-beta](release-notes-0.33.3.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
* Expose static address swap timing and cost details through the RPC and CLI.
|
||||
[PR #1150](https://github.com/lightninglabs/loop/pull/1150)
|
||||
* Handle server notifications that a static address HTLC has confirmed.
|
||||
[PR #1120](https://github.com/lightninglabs/loop/pull/1120)
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Reject malformed server keys and MuSig2 signing data.
|
||||
[PR #1148](https://github.com/lightninglabs/loop/pull/1148)
|
||||
* Recover confirmed HTLCs through the direct sweep path and reuse their stored
|
||||
destinations.
|
||||
|
||||
#### Maintenance
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
- Slyghtning
|
||||
25
docs/release-notes/release-notes-0.33.3.md
Normal file
25
docs/release-notes/release-notes-0.33.3.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Loop Client Release Notes
|
||||
|
||||
- **Release date:** 2026-06-21
|
||||
- **Release page:**
|
||||
[v0.33.3-beta](https://github.com/lightninglabs/loop/releases/tag/v0.33.3-beta)
|
||||
- **Previous release:** [v0.33.2-beta](release-notes-0.33.2.md)
|
||||
- **Next release:** [v0.34.0-beta](release-notes-0.34.0.md)
|
||||
|
||||
#### New Features
|
||||
|
||||
#### Breaking Changes
|
||||
|
||||
* Raise the minimum supported LND version to v0.18.4-beta.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
#### Maintenance
|
||||
|
||||
* Update the compile-time LND dependency to v0.21.
|
||||
[PR #1153](https://github.com/lightninglabs/loop/pull/1153)
|
||||
|
||||
#### Contributors (Alphabetical Order)
|
||||
|
||||
- Alex Bosworth
|
||||
- Boris Nagaev
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue