Skip to content

Commit

Permalink
Merge pull request #283 from YusukeShimizu/set-label
Browse files Browse the repository at this point in the history
Set label (LND BTC+lbtc and CLN lbtc only for now)
  • Loading branch information
wtogami authored Mar 5, 2024
2 parents a2836c9 + 5128839 commit f3a6489
Show file tree
Hide file tree
Showing 14 changed files with 165 additions and 169 deletions.
73 changes: 36 additions & 37 deletions clightning/clightning_wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ import (
"github.com/elementsproject/peerswap/version"
)

func (cl *ClightningClient) CreateOpeningTransaction(swapParams *swap.OpeningParams) (unpreparedTxHex string, fee uint64, vout uint32, err error) {
func (cl *ClightningClient) CreateOpeningTransaction(swapParams *swap.OpeningParams) (unpreparedTxHex, address string, fee uint64, vout uint32, err error) {
addr, err := cl.bitcoinChain.CreateOpeningAddress(swapParams, onchain.BitcoinCsv)
if err != nil {
return "", 0, 0, err
return "", "", 0, 0, err
}
outputs := []*glightning.Outputs{
{
Expand All @@ -26,35 +26,35 @@ func (cl *ClightningClient) CreateOpeningTransaction(swapParams *swap.OpeningPar
}
prepRes, err := cl.glightning.PrepareTx(outputs, &glightning.FeeRate{Directive: glightning.Urgent}, nil)
if err != nil {
return "", 0, 0, err
return "", "", 0, 0, err
}

// Backwards compatibility layer. Since `v23.05`, `preparetx` returns a
// psbt v2 instead of v0. We still want to support `v23.02` so we skip the
// conversion of the psbt (from v2 to v0).
isV2, err := version.CompareVersionStrings(cl.Version(), "v23.05")
if err != nil {
return "", 0, 0, err
return "", "", 0, 0, err
}
if isV2 {
res, err := cl.glightning.SetPSBTVersion(prepRes.Psbt, 0)
if err != nil {
return "", 0, 0, err
return "", "", 0, 0, err
}
prepRes.Psbt = res.Psbt
}

fee, err = cl.bitcoinChain.GetFeeSatsFromTx(prepRes.Psbt, prepRes.UnsignedTx)
if err != nil {
return "", 0, 0, err
return "", "", 0, 0, err
}

_, vout, err = cl.bitcoinChain.GetVoutAndVerify(prepRes.UnsignedTx, swapParams)
if err != nil {
return "", 0, 0, err
return "", "", 0, 0, err
}
cl.hexToIdMap[prepRes.UnsignedTx] = prepRes.TxId
return prepRes.UnsignedTx, fee, vout, nil
return prepRes.UnsignedTx, addr, fee, vout, nil
}

func (cl *ClightningClient) BroadcastOpeningTx(unpreparedTxHex string) (txId, txHex string, error error) {
Expand All @@ -71,30 +71,30 @@ func (cl *ClightningClient) BroadcastOpeningTx(unpreparedTxHex string) (txId, tx
return sendRes.TxId, sendRes.SignedTx, nil
}

func (cl *ClightningClient) CreatePreimageSpendingTransaction(swapParams *swap.OpeningParams, claimParams *swap.ClaimParams) (txId, txHex string, err error) {
func (cl *ClightningClient) CreatePreimageSpendingTransaction(swapParams *swap.OpeningParams, claimParams *swap.ClaimParams) (txId, txHex, address string, err error) {

_, vout, err := cl.bitcoinChain.GetVoutAndVerify(claimParams.OpeningTxHex, swapParams)
if err != nil {
return "", "", err
return "", "", "", err
}

newAddr, err := cl.glightning.NewAddr()
if err != nil {
return "", "", err
return "", "", "", err
}

tx, sigHash, redeemScript, err := cl.bitcoinChain.PrepareSpendingTransaction(swapParams, claimParams, newAddr, vout, 0, 0)
if err != nil {
return "", "", err
return "", "", "", err
}
sigBytes, err := claimParams.Signer.Sign(sigHash)
if err != nil {
return "", "", err
return "", "", "", err
}

preimage, err := lightning.MakePreimageFromStr(claimParams.Preimage)
if err != nil {
return "", "", err
return "", "", "", err
}

tx.TxIn[0].Witness = onchain.GetPreimageWitness(sigBytes.Serialize(), preimage[:], redeemScript)
Expand All @@ -103,37 +103,37 @@ func (cl *ClightningClient) CreatePreimageSpendingTransaction(swapParams *swap.O

err = tx.Serialize(bytesBuffer)
if err != nil {
return "", "", err
return "", "", "", err
}

txHex = hex.EncodeToString(bytesBuffer.Bytes())

txId, err = cl.gbitcoin.SendRawTx(txHex)
if err != nil {
return "", "", err
return "", "", "", err
}
return txId, txHex, nil
return txId, txHex, newAddr, nil
}

func (cl *ClightningClient) CreateCsvSpendingTransaction(swapParams *swap.OpeningParams, claimParams *swap.ClaimParams) (txId, txHex string, error error) {
func (cl *ClightningClient) CreateCsvSpendingTransaction(swapParams *swap.OpeningParams, claimParams *swap.ClaimParams) (txId, txHex, address string, error error) {
newAddr, err := cl.glightning.NewAddr()
if err != nil {
return "", "", err
return "", "", "", err
}

_, vout, err := cl.bitcoinChain.GetVoutAndVerify(claimParams.OpeningTxHex, swapParams)
if err != nil {
return "", "", err
return "", "", "", err
}

tx, sigHash, redeemScript, err := cl.bitcoinChain.PrepareSpendingTransaction(swapParams, claimParams, newAddr, vout, onchain.BitcoinCsv, 0)
if err != nil {
return "", "", err
return "", "", "", err
}

sigBytes, err := claimParams.Signer.Sign(sigHash)
if err != nil {
return "", "", err
return "", "", "", err
}

tx.TxIn[0].Witness = onchain.GetCsvWitness(sigBytes.Serialize(), redeemScript)
Expand All @@ -142,43 +142,43 @@ func (cl *ClightningClient) CreateCsvSpendingTransaction(swapParams *swap.Openin

err = tx.Serialize(bytesBuffer)
if err != nil {
return "", "", err
return "", "", "", err
}

txHex = hex.EncodeToString(bytesBuffer.Bytes())

txId, err = cl.gbitcoin.SendRawTx(txHex)
if err != nil {
return "", "", err
return "", "", "", err
}
return txId, txHex, nil
return txId, txHex, address, nil
}

func (cl *ClightningClient) CreateCoopSpendingTransaction(swapParams *swap.OpeningParams, claimParams *swap.ClaimParams, takerSigner swap.Signer) (txId, txHex string, error error) {
func (cl *ClightningClient) CreateCoopSpendingTransaction(swapParams *swap.OpeningParams, claimParams *swap.ClaimParams, takerSigner swap.Signer) (txId, txHex, address string, error error) {
refundAddr, err := cl.NewAddress()
if err != nil {
return "", "", err
return "", "", "", err
}
refundFee, err := cl.GetRefundFee()
if err != nil {
return "", "", err
return "", "", "", err
}
_, vout, err := cl.bitcoinChain.GetVoutAndVerify(claimParams.OpeningTxHex, swapParams)
if err != nil {
return "", "", err
return "", "", "", err
}
spendingTx, sigHashBytes, redeemScript, err := cl.bitcoinChain.PrepareSpendingTransaction(swapParams, claimParams, refundAddr, vout, 0, refundFee)
if err != nil {
return "", "", err
return "", "", "", err
}

takerSig, err := takerSigner.Sign(sigHashBytes[:])
if err != nil {
return "", "", err
return "", "", "", err
}
makerSig, err := claimParams.Signer.Sign(sigHashBytes[:])
if err != nil {
return "", "", err
return "", "", "", err
}

spendingTx.TxIn[0].Witness = onchain.GetCooperativeWitness(takerSig.Serialize(), makerSig.Serialize(), redeemScript)
Expand All @@ -187,23 +187,22 @@ func (cl *ClightningClient) CreateCoopSpendingTransaction(swapParams *swap.Openi

err = spendingTx.Serialize(bytesBuffer)
if err != nil {
return "", "", err
return "", "", "", err
}

txHex = hex.EncodeToString(bytesBuffer.Bytes())

txId, err = cl.gbitcoin.SendRawTx(txHex)
if err != nil {
return "", "", err
return "", "", "", err
}
return spendingTx.TxHash().String(), txHex, nil
return spendingTx.TxHash().String(), txHex, address, nil
}

func (cl *ClightningClient) LabelTransaction(txId, label string) error {
func (cl *ClightningClient) SetLabel(txID, address, label string) error {
// todo implement
// This function assigns an identifiable label to the target transaction based on the txid.
// Currently no such functionality is available, so it has not been implemented.
// Supported by lnd only.
return nil
}

Expand Down
4 changes: 3 additions & 1 deletion cmd/peerswap-plugin/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ func run(ctx context.Context, lightningPlugin *clightning.ClightningClient) erro
config.Liquid.RpcUser,
config.Liquid.RpcPassword,
config.Liquid.RpcHost,
config.Liquid.RpcPasswordFile,
config.Liquid.RpcPort,
)
if err != nil {
Expand Down Expand Up @@ -436,8 +437,9 @@ func getBitcoinClient(li *glightning.Lightning, pluginConfig *clightning.Config)
rpcPassword := pluginConfig.Bitcoin.RpcPassword
rpcHost := pluginConfig.Bitcoin.RpcHost
rpcPort := pluginConfig.Bitcoin.RpcPort
ppcCookie := pluginConfig.Bitcoin.RpcPasswordFile

bitcoin := gbitcoin.NewBitcoin(rpcUser, rpcPassword)
bitcoin := gbitcoin.NewBitcoin(rpcUser, rpcPassword, ppcCookie)
bitcoin.SetTimeout(10)
err := bitcoin.StartUp(rpcHost, "", uint(rpcPort))
if err != nil {
Expand Down
3 changes: 2 additions & 1 deletion cmd/peerswaplnd/peerswapd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ func run() error {
liquidConfig.RpcUser,
liquidConfig.RpcPassword,
liquidConfig.RpcHost,
liquidConfig.RpcPasswordFile,
liquidConfig.RpcPort,
)
if err != nil {
Expand Down Expand Up @@ -441,7 +442,7 @@ func getBitcoinChain(ctx context.Context, li lnrpc.LightningClient) (*chaincfg.P
}

func getBitcoinClient(cfg *peerswaplnd.OnchainConfig) (*gbitcoin.Bitcoin, error) {
bitcoin := gbitcoin.NewBitcoin(cfg.RpcUser, cfg.RpcPassword)
bitcoin := gbitcoin.NewBitcoin(cfg.RpcUser, cfg.RpcPassword, cfg.RpcCookieFilePath)
err := bitcoin.StartUp(cfg.RpcHost, "", cfg.RpcPort)
if err != nil {
return nil, err
Expand Down
4 changes: 2 additions & 2 deletions elements/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (
type ElementsClientBuilder struct {
}

func NewClient(rpcUser, rpcPassword, rpcHost string, rpcPort uint) (*gelements.Elements, error) {
c := gelements.NewElements(rpcUser, rpcPassword)
func NewClient(rpcUser, rpcPassword, rpcHost, RpcPasswordFile string, rpcPort uint) (*gelements.Elements, error) {
c := gelements.NewElements(rpcUser, rpcPassword, RpcPasswordFile)

var backoff int64 = 1
for {
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ require (
github.com/btcsuite/btcd/btcutil v1.1.2
github.com/btcsuite/btcd/btcutil/psbt v1.1.5
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1
github.com/elementsproject/glightning v0.0.0-20231126051537-e32b4dae6cbb
github.com/elementsproject/glightning v0.0.0-20240224063423-55240d61b52a
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3
github.com/jessevdk/go-flags v1.5.0
Expand Down Expand Up @@ -124,7 +124,7 @@ require (
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/net v0.0.0-20221004154528-8021a29435af // indirect
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect
golang.org/x/sys v0.0.0-20221010160319-abe0a0adba9c // indirect
golang.org/x/sys v0.0.0-20221010160319-abe0a0adba9c
golang.org/x/term v0.0.0-20220919170432-7a66f970e087 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect
Expand Down
10 changes: 4 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -186,12 +186,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dvyukov/go-fuzz v0.0.0-20220726122315-1d375ef9f9f6 h1:sE4tvxWw01v7K3MAHwKF2UF3xQbgy23PRURntuV1CkU=
github.com/dvyukov/go-fuzz v0.0.0-20220726122315-1d375ef9f9f6/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
github.com/elementsproject/glightning v0.0.0-20230508201707-c2410b204731 h1:OAY0lNrZiCO1lwlaGiVH4htwrih1AAxxpuWRA9qQYwI=
github.com/elementsproject/glightning v0.0.0-20230508201707-c2410b204731/go.mod h1:YAdIeSyx8VEhDCtEaGOJLmWNpPaQ3x4vYSAj9Vrppdo=
github.com/elementsproject/glightning v0.0.0-20230525134205-ef34d849f564 h1:orSb6yU9D1Ow9epbRZJVAfGF6vC1HxaPqg9zLWga6Hw=
github.com/elementsproject/glightning v0.0.0-20230525134205-ef34d849f564/go.mod h1:YAdIeSyx8VEhDCtEaGOJLmWNpPaQ3x4vYSAj9Vrppdo=
github.com/elementsproject/glightning v0.0.0-20231126051537-e32b4dae6cbb h1:ob08+u2vJvk9uFoPhwFe/DWom1pgUFLGh+VXUbfarWs=
github.com/elementsproject/glightning v0.0.0-20231126051537-e32b4dae6cbb/go.mod h1:YAdIeSyx8VEhDCtEaGOJLmWNpPaQ3x4vYSAj9Vrppdo=
github.com/elementsproject/glightning v0.0.0-20240224063423-55240d61b52a h1:xnVQmVqGmSs3m8zPQF4iYEYiUAmJx8MlT9vJ3lAaOjc=
github.com/elementsproject/glightning v0.0.0-20240224063423-55240d61b52a/go.mod h1:YAdIeSyx8VEhDCtEaGOJLmWNpPaQ3x4vYSAj9Vrppdo=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
Expand Down Expand Up @@ -669,6 +665,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yusukeshimizu/glightning v0.0.0-20240214001938-06d9e0562297 h1:j/R71Kv5Cvgds6OrqTPKLx2/sBL3WTt1xyMETp5qHf8=
github.com/yusukeshimizu/glightning v0.0.0-20240214001938-06d9e0562297/go.mod h1:YAdIeSyx8VEhDCtEaGOJLmWNpPaQ3x4vYSAj9Vrppdo=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.5-0.20200615073812-232d8fc87f50/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
Expand Down
15 changes: 8 additions & 7 deletions lnd/lnd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ import (
"encoding/base64"
"encoding/hex"
"fmt"
"io/ioutil"
"log"
"math/rand"
"path/filepath"
"strconv"
"testing"
"time"

"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/btcutil"
"github.com/btcsuite/btcd/btcutil/psbt"
Expand All @@ -29,13 +37,6 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"gopkg.in/macaroon.v2"
"io/ioutil"
"log"
"math/rand"
"path/filepath"
"strconv"
"testing"
"time"
)

type Testthing struct {
Expand Down
Loading

0 comments on commit f3a6489

Please sign in to comment.