mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-18 12:44:19 +01:00
Add --datadir flag (#152)
* add --datadir flag * map ENV variable to --datadir flag * revert version var
This commit is contained in:
@@ -26,20 +26,20 @@ var balanceCommand = cli.Command{
|
|||||||
func balanceAction(ctx *cli.Context) error {
|
func balanceAction(ctx *cli.Context) error {
|
||||||
withExpiryDetails := ctx.Bool("expiry-details")
|
withExpiryDetails := ctx.Bool("expiry-details")
|
||||||
|
|
||||||
client, cancel, err := getClientFromState()
|
client, cancel, err := getClientFromState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
offchainAddr, onchainAddr, redemptionAddr, err := getAddress()
|
offchainAddr, onchainAddr, redemptionAddr, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, network := getNetwork()
|
_, network := getNetwork(ctx)
|
||||||
// No need to check for error here becuase this function is called also by getAddress().
|
// No need to check for error here becuase this function is called also by getAddress().
|
||||||
// nolint:all
|
// nolint:all
|
||||||
unilateralExitDelay, _ := getUnilateralExitDelay()
|
unilateralExitDelay, _ := getUnilateralExitDelay(ctx)
|
||||||
|
|
||||||
wg := &sync.WaitGroup{}
|
wg := &sync.WaitGroup{}
|
||||||
wg.Add(3)
|
wg.Add(3)
|
||||||
@@ -47,9 +47,9 @@ func balanceAction(ctx *cli.Context) error {
|
|||||||
chRes := make(chan balanceRes, 3)
|
chRes := make(chan balanceRes, 3)
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
balance, amountByExpiration, err := getOffchainBalance(
|
balance, amountByExpiration, err := getOffchainBalance(
|
||||||
ctx.Context, explorer, client, offchainAddr, withExpiryDetails,
|
ctx, explorer, client, offchainAddr, withExpiryDetails,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
chRes <- balanceRes{0, 0, nil, nil, err}
|
chRes <- balanceRes{0, 0, nil, nil, err}
|
||||||
@@ -61,7 +61,7 @@ func balanceAction(ctx *cli.Context) error {
|
|||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
balance, err := explorer.GetBalance(onchainAddr, network.AssetID)
|
balance, err := explorer.GetBalance(onchainAddr, network.AssetID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
chRes <- balanceRes{0, 0, nil, nil, err}
|
chRes <- balanceRes{0, 0, nil, nil, err}
|
||||||
@@ -72,7 +72,7 @@ func balanceAction(ctx *cli.Context) error {
|
|||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
|
|
||||||
spendableBalance, lockedBalance, err := explorer.GetRedeemedVtxosBalance(
|
spendableBalance, lockedBalance, err := explorer.GetRedeemedVtxosBalance(
|
||||||
redemptionAddr, unilateralExitDelay,
|
redemptionAddr, unilateralExitDelay,
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1"
|
arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
@@ -21,10 +21,10 @@ type vtxo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getVtxos(
|
func getVtxos(
|
||||||
ctx context.Context, explorer Explorer, client arkv1.ArkServiceClient,
|
ctx *cli.Context, explorer Explorer, client arkv1.ArkServiceClient,
|
||||||
addr string, withExpiration bool,
|
addr string, withExpiration bool,
|
||||||
) ([]vtxo, error) {
|
) ([]vtxo, error) {
|
||||||
response, err := client.ListVtxos(ctx, &arkv1.ListVtxosRequest{
|
response, err := client.ListVtxos(ctx.Context, &arkv1.ListVtxosRequest{
|
||||||
Address: addr,
|
Address: addr,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -45,13 +45,13 @@ func getVtxos(
|
|||||||
return vtxos, nil
|
return vtxos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
redeemBranches, err := getRedeemBranches(ctx, explorer, client, vtxos)
|
redeemBranches, err := getRedeemBranches(ctx.Context, explorer, client, vtxos)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for vtxoTxid, branch := range redeemBranches {
|
for vtxoTxid, branch := range redeemBranches {
|
||||||
expiration, err := branch.expireAt()
|
expiration, err := branch.expireAt(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -67,8 +67,8 @@ func getVtxos(
|
|||||||
return vtxos, nil
|
return vtxos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getClientFromState() (arkv1.ArkServiceClient, func(), error) {
|
func getClientFromState(ctx *cli.Context) (arkv1.ArkServiceClient, func(), error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ func hashPassword(password []byte) []byte {
|
|||||||
return hash[:]
|
return hash[:]
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyPassword(password []byte) error {
|
func verifyPassword(ctx *cli.Context, password []byte) error {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ func readPassword(ctx *cli.Context, verify bool) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if verify {
|
if verify {
|
||||||
if err := verifyPassword(password); err != nil {
|
if err := verifyPassword(ctx, password); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ func readPassword(ctx *cli.Context, verify bool) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func privateKeyFromPassword(ctx *cli.Context) (*secp256k1.PrivateKey, error) {
|
func privateKeyFromPassword(ctx *cli.Context) (*secp256k1.PrivateKey, error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -127,8 +127,8 @@ func privateKeyFromPassword(ctx *cli.Context) (*secp256k1.PrivateKey, error) {
|
|||||||
return privateKey, nil
|
return privateKey, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWalletPublicKey() (*secp256k1.PublicKey, error) {
|
func getWalletPublicKey(ctx *cli.Context) (*secp256k1.PublicKey, error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -146,8 +146,8 @@ func getWalletPublicKey() (*secp256k1.PublicKey, error) {
|
|||||||
return secp256k1.ParsePubKey(publicKeyBytes)
|
return secp256k1.ParsePubKey(publicKeyBytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAspPublicKey() (*secp256k1.PublicKey, error) {
|
func getAspPublicKey(ctx *cli.Context) (*secp256k1.PublicKey, error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -165,8 +165,8 @@ func getAspPublicKey() (*secp256k1.PublicKey, error) {
|
|||||||
return secp256k1.ParsePubKey(pubKeyBytes)
|
return secp256k1.ParsePubKey(pubKeyBytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRoundLifetime() (int64, error) {
|
func getRoundLifetime(ctx *cli.Context) (int64, error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
@@ -183,8 +183,8 @@ func getRoundLifetime() (int64, error) {
|
|||||||
return int64(roundLifetime), nil
|
return int64(roundLifetime), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getUnilateralExitDelay() (int64, error) {
|
func getUnilateralExitDelay(ctx *cli.Context) (int64, error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
@@ -245,7 +245,7 @@ func coinSelect(vtxos []vtxo, amount uint64, sortByExpirationTime bool) ([]vtxo,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getOffchainBalance(
|
func getOffchainBalance(
|
||||||
ctx context.Context, explorer Explorer, client arkv1.ArkServiceClient,
|
ctx *cli.Context, explorer Explorer, client arkv1.ArkServiceClient,
|
||||||
addr string, withExpiration bool,
|
addr string, withExpiration bool,
|
||||||
) (uint64, map[int64]uint64, error) {
|
) (uint64, map[int64]uint64, error) {
|
||||||
amountByExpiration := make(map[int64]uint64, 0)
|
amountByExpiration := make(map[int64]uint64, 0)
|
||||||
@@ -272,8 +272,8 @@ func getOffchainBalance(
|
|||||||
return balance, amountByExpiration, nil
|
return balance, amountByExpiration, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBaseURL() (string, error) {
|
func getBaseURL(ctx *cli.Context) (string, error) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -286,8 +286,8 @@ func getBaseURL() (string, error) {
|
|||||||
return baseURL, nil
|
return baseURL, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTxBlocktime(txid string) (confirmed bool, blocktime int64, err error) {
|
func getTxBlocktime(ctx *cli.Context, txid string) (confirmed bool, blocktime int64, err error) {
|
||||||
baseUrl, err := getBaseURL()
|
baseUrl, err := getBaseURL(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, 0, err
|
return false, 0, err
|
||||||
}
|
}
|
||||||
@@ -323,8 +323,8 @@ func getTxBlocktime(txid string) (confirmed bool, blocktime int64, err error) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNetwork() (*common.Network, *network.Network) {
|
func getNetwork(ctx *cli.Context) (*common.Network, *network.Network) {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &common.TestNet, &network.Testnet
|
return &common.TestNet, &network.Testnet
|
||||||
}
|
}
|
||||||
@@ -346,23 +346,23 @@ func networkFromString(net string) (*common.Network, *network.Network) {
|
|||||||
return &common.Liquid, &network.Liquid
|
return &common.Liquid, &network.Liquid
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAddress() (offchainAddr, onchainAddr, redemptionAddr string, err error) {
|
func getAddress(ctx *cli.Context) (offchainAddr, onchainAddr, redemptionAddr string, err error) {
|
||||||
userPubkey, err := getWalletPublicKey()
|
userPubkey, err := getWalletPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
aspPubkey, err := getAspPublicKey()
|
aspPubkey, err := getAspPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
unilateralExitDelay, err := getUnilateralExitDelay()
|
unilateralExitDelay, err := getUnilateralExitDelay(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
arkNet, liquidNet := getNetwork()
|
arkNet, liquidNet := getNetwork(ctx)
|
||||||
|
|
||||||
arkAddr, err := common.EncodeAddress(arkNet.Addr, userPubkey, aspPubkey)
|
arkAddr, err := common.EncodeAddress(arkNet.Addr, userPubkey, aspPubkey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -382,7 +382,7 @@ func getAddress() (offchainAddr, onchainAddr, redemptionAddr string, err error)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, net := getNetwork()
|
_, net := getNetwork(ctx)
|
||||||
|
|
||||||
payment, err := payment.FromTweakedKey(vtxoTapKey, net, nil)
|
payment, err := payment.FromTweakedKey(vtxoTapKey, net, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -411,10 +411,10 @@ func printJSON(resp interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func handleRoundStream(
|
func handleRoundStream(
|
||||||
ctx context.Context, client arkv1.ArkServiceClient, paymentID string,
|
ctx *cli.Context, client arkv1.ArkServiceClient, paymentID string,
|
||||||
vtxosToSign []vtxo, secKey *secp256k1.PrivateKey, receivers []*arkv1.Output,
|
vtxosToSign []vtxo, secKey *secp256k1.PrivateKey, receivers []*arkv1.Output,
|
||||||
) (poolTxID string, err error) {
|
) (poolTxID string, err error) {
|
||||||
stream, err := client.GetEventStream(ctx, &arkv1.GetEventStreamRequest{})
|
stream, err := client.GetEventStream(ctx.Context, &arkv1.GetEventStreamRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -424,7 +424,7 @@ func handleRoundStream(
|
|||||||
PaymentId: paymentID,
|
PaymentId: paymentID,
|
||||||
}
|
}
|
||||||
for pingStop == nil {
|
for pingStop == nil {
|
||||||
pingStop = ping(ctx, client, pingReq)
|
pingStop = ping(ctx.Context, client, pingReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer pingStop()
|
defer pingStop()
|
||||||
@@ -461,12 +461,12 @@ func handleRoundStream(
|
|||||||
|
|
||||||
connectors := e.GetConnectors()
|
connectors := e.GetConnectors()
|
||||||
|
|
||||||
aspPubkey, err := getAspPublicKey()
|
aspPubkey, err := getAspPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
roundLifetime, err := getRoundLifetime()
|
roundLifetime, err := getRoundLifetime(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -484,7 +484,7 @@ func handleRoundStream(
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
unilateralExitDelay, err := getUnilateralExitDelay()
|
unilateralExitDelay, err := getUnilateralExitDelay(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -578,7 +578,7 @@ func handleRoundStream(
|
|||||||
|
|
||||||
fmt.Print("signing forfeit txs... ")
|
fmt.Print("signing forfeit txs... ")
|
||||||
|
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
|
|
||||||
connectorsTxids := make([]string, 0, len(connectors))
|
connectorsTxids := make([]string, 0, len(connectors))
|
||||||
for _, connector := range connectors {
|
for _, connector := range connectors {
|
||||||
@@ -615,7 +615,7 @@ func handleRoundStream(
|
|||||||
return "", fmt.Errorf("connector txid %s not found in the connectors list", connectorTxid)
|
return "", fmt.Errorf("connector txid %s not found in the connectors list", connectorTxid)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := signPset(pset, explorer, secKey); err != nil {
|
if err := signPset(ctx, pset, explorer, secKey); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -635,14 +635,14 @@ func handleRoundStream(
|
|||||||
fmt.Printf("\nno forfeit txs to sign, waiting for the next round...\n")
|
fmt.Printf("\nno forfeit txs to sign, waiting for the next round...\n")
|
||||||
pingStop = nil
|
pingStop = nil
|
||||||
for pingStop == nil {
|
for pingStop == nil {
|
||||||
pingStop = ping(ctx, client, pingReq)
|
pingStop = ping(ctx.Context, client, pingReq)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("%d signed\n", len(signedForfeits))
|
fmt.Printf("%d signed\n", len(signedForfeits))
|
||||||
fmt.Print("finalizing payment... ")
|
fmt.Print("finalizing payment... ")
|
||||||
_, err = client.FinalizePayment(ctx, &arkv1.FinalizePaymentRequest{
|
_, err = client.FinalizePayment(ctx.Context, &arkv1.FinalizePaymentRequest{
|
||||||
SignedForfeitTxs: signedForfeits,
|
SignedForfeitTxs: signedForfeits,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -889,9 +889,10 @@ func addVtxoInput(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func coinSelectOnchain(
|
func coinSelectOnchain(
|
||||||
|
ctx *cli.Context,
|
||||||
explorer Explorer, targetAmount uint64, exclude []utxo,
|
explorer Explorer, targetAmount uint64, exclude []utxo,
|
||||||
) ([]utxo, []utxo, uint64, error) {
|
) ([]utxo, []utxo, uint64, error) {
|
||||||
_, onchainAddr, _, err := getAddress()
|
_, onchainAddr, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, 0, err
|
return nil, nil, 0, err
|
||||||
}
|
}
|
||||||
@@ -922,17 +923,17 @@ func coinSelectOnchain(
|
|||||||
return utxos, nil, selectedAmount - targetAmount, nil
|
return utxos, nil, selectedAmount - targetAmount, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
userPubkey, err := getWalletPublicKey()
|
userPubkey, err := getWalletPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, 0, err
|
return nil, nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
aspPubkey, err := getAspPublicKey()
|
aspPubkey, err := getAspPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, 0, err
|
return nil, nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
unilateralExitDelay, err := getUnilateralExitDelay()
|
unilateralExitDelay, err := getUnilateralExitDelay(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, 0, err
|
return nil, nil, 0, err
|
||||||
}
|
}
|
||||||
@@ -944,7 +945,7 @@ func coinSelectOnchain(
|
|||||||
return nil, nil, 0, err
|
return nil, nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, net := getNetwork()
|
_, net := getNetwork(ctx)
|
||||||
|
|
||||||
pay, err := payment.FromTweakedKey(vtxoTapKey, net, nil)
|
pay, err := payment.FromTweakedKey(vtxoTapKey, net, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -994,9 +995,10 @@ func coinSelectOnchain(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addInputs(
|
func addInputs(
|
||||||
|
ctx *cli.Context,
|
||||||
updater *psetv2.Updater, utxos, delayedUtxos []utxo, net *network.Network,
|
updater *psetv2.Updater, utxos, delayedUtxos []utxo, net *network.Network,
|
||||||
) error {
|
) error {
|
||||||
_, onchainAddr, _, err := getAddress()
|
_, onchainAddr, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1041,17 +1043,17 @@ func addInputs(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(delayedUtxos) > 0 {
|
if len(delayedUtxos) > 0 {
|
||||||
userPubkey, err := getWalletPublicKey()
|
userPubkey, err := getWalletPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
aspPubkey, err := getAspPublicKey()
|
aspPubkey, err := getAspPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
unilateralExitDelay, err := getUnilateralExitDelay()
|
unilateralExitDelay, err := getUnilateralExitDelay(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var configCommand = cli.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printConfigAction(ctx *cli.Context) error {
|
func printConfigAction(ctx *cli.Context) error {
|
||||||
state, err := getState()
|
state, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
"github.com/vulpemventures/go-elements/psetv2"
|
"github.com/vulpemventures/go-elements/psetv2"
|
||||||
"github.com/vulpemventures/go-elements/transaction"
|
"github.com/vulpemventures/go-elements/transaction"
|
||||||
)
|
)
|
||||||
@@ -39,8 +40,8 @@ type explorer struct {
|
|||||||
baseUrl string
|
baseUrl string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewExplorer() Explorer {
|
func NewExplorer(ctx *cli.Context) Explorer {
|
||||||
baseUrl, err := getBaseURL()
|
baseUrl, err := getBaseURL(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@@ -69,7 +68,7 @@ func initAction(ctx *cli.Context) error {
|
|||||||
explorerURL = explorerUrl[net]
|
explorerURL = explorerUrl[net]
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := connectToAsp(ctx.Context, net, url, explorerURL); err != nil {
|
if err := connectToAsp(ctx, net, url, explorerURL); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ func initAction(ctx *cli.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return initWallet(key, password)
|
return initWallet(ctx, key, password)
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateRandomPrivateKey() (*secp256k1.PrivateKey, error) {
|
func generateRandomPrivateKey() (*secp256k1.PrivateKey, error) {
|
||||||
@@ -89,19 +88,19 @@ func generateRandomPrivateKey() (*secp256k1.PrivateKey, error) {
|
|||||||
return privKey, nil
|
return privKey, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func connectToAsp(ctx context.Context, net, url, explorer string) error {
|
func connectToAsp(ctx *cli.Context, net, url, explorer string) error {
|
||||||
client, close, err := getClient(url)
|
client, close, err := getClient(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer close()
|
defer close()
|
||||||
|
|
||||||
resp, err := client.GetInfo(ctx, &arkv1.GetInfoRequest{})
|
resp, err := client.GetInfo(ctx.Context, &arkv1.GetInfoRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return setState(map[string]string{
|
return setState(ctx, map[string]string{
|
||||||
ASP_URL: url,
|
ASP_URL: url,
|
||||||
NETWORK: net,
|
NETWORK: net,
|
||||||
ASP_PUBKEY: resp.Pubkey,
|
ASP_PUBKEY: resp.Pubkey,
|
||||||
@@ -111,7 +110,7 @@ func connectToAsp(ctx context.Context, net, url, explorer string) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func initWallet(key string, password []byte) error {
|
func initWallet(ctx *cli.Context, key string, password []byte) error {
|
||||||
var privateKey *secp256k1.PrivateKey
|
var privateKey *secp256k1.PrivateKey
|
||||||
if len(key) <= 0 {
|
if len(key) <= 0 {
|
||||||
privKey, err := generateRandomPrivateKey()
|
privKey, err := generateRandomPrivateKey()
|
||||||
@@ -144,7 +143,7 @@ func initWallet(key string, password []byte) error {
|
|||||||
PUBKEY: hex.EncodeToString(pubkey),
|
PUBKEY: hex.EncodeToString(pubkey),
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := setState(state); err != nil {
|
if err := setState(ctx, state); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
DATADIR_ENVVAR = "ARK_WALLET_DATADIR"
|
DATADIR_ENVVAR = "ARK_WALLET_DATADIR"
|
||||||
|
|
||||||
STATE_FILE = "state.json"
|
STATE_FILE = "state.json"
|
||||||
defaultNetwork = "liquid"
|
defaultNetwork = "liquid"
|
||||||
|
|
||||||
@@ -32,8 +33,8 @@ const (
|
|||||||
var (
|
var (
|
||||||
version = "alpha"
|
version = "alpha"
|
||||||
|
|
||||||
datadir = common.AppDataDir("ark-cli", false)
|
defaultDatadir = common.AppDataDir("ark-cli", false)
|
||||||
statePath = filepath.Join(datadir, STATE_FILE)
|
|
||||||
explorerUrl = map[string]string{
|
explorerUrl = map[string]string{
|
||||||
network.Liquid.Name: "https://blockstream.info/liquid/api",
|
network.Liquid.Name: "https://blockstream.info/liquid/api",
|
||||||
network.Testnet.Name: "https://blockstream.info/liquidtestnet/api",
|
network.Testnet.Name: "https://blockstream.info/liquidtestnet/api",
|
||||||
@@ -50,21 +51,17 @@ var (
|
|||||||
PUBKEY: "",
|
PUBKEY: "",
|
||||||
NETWORK: defaultNetwork,
|
NETWORK: defaultNetwork,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datadirFlag = &cli.StringFlag{
|
||||||
|
Name: "datadir",
|
||||||
|
Usage: "Specify the data directory",
|
||||||
|
Required: false,
|
||||||
|
Value: defaultDatadir,
|
||||||
|
EnvVars: []string{DATADIR_ENVVAR},
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func initCLIEnv() {
|
|
||||||
dir := cleanAndExpandPath(os.Getenv(DATADIR_ENVVAR))
|
|
||||||
if len(dir) <= 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
datadir = dir
|
|
||||||
statePath = filepath.Join(datadir, STATE_FILE)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
initCLIEnv()
|
|
||||||
|
|
||||||
app := cli.NewApp()
|
app := cli.NewApp()
|
||||||
|
|
||||||
app.Version = version
|
app.Version = version
|
||||||
@@ -81,8 +78,17 @@ func main() {
|
|||||||
&sendCommand,
|
&sendCommand,
|
||||||
&onboardCommand,
|
&onboardCommand,
|
||||||
)
|
)
|
||||||
|
app.Flags = []cli.Flag{
|
||||||
|
datadirFlag,
|
||||||
|
}
|
||||||
|
|
||||||
app.Before = func(ctx *cli.Context) error {
|
app.Before = func(ctx *cli.Context) error {
|
||||||
|
datadir := cleanAndExpandPath(ctx.String("datadir"))
|
||||||
|
|
||||||
|
if err := ctx.Set("datadir", datadir); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(datadir); os.IsNotExist(err) {
|
if _, err := os.Stat(datadir); os.IsNotExist(err) {
|
||||||
return os.Mkdir(datadir, os.ModeDir|0755)
|
return os.Mkdir(datadir, os.ModeDir|0755)
|
||||||
}
|
}
|
||||||
@@ -122,13 +128,15 @@ func cleanAndExpandPath(path string) string {
|
|||||||
return filepath.Clean(os.ExpandEnv(path))
|
return filepath.Clean(os.ExpandEnv(path))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getState() (map[string]string, error) {
|
func getState(ctx *cli.Context) (map[string]string, error) {
|
||||||
file, err := os.ReadFile(statePath)
|
datadir := ctx.String("datadir")
|
||||||
|
stateFilePath := filepath.Join(datadir, STATE_FILE)
|
||||||
|
file, err := os.ReadFile(stateFilePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !os.IsNotExist(err) {
|
if !os.IsNotExist(err) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := setInitialState(); err != nil {
|
if err := setInitialState(stateFilePath); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return initialState, nil
|
return initialState, nil
|
||||||
@@ -142,16 +150,16 @@ func getState() (map[string]string, error) {
|
|||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setInitialState() error {
|
func setInitialState(stateFilePath string) error {
|
||||||
jsonString, err := json.Marshal(initialState)
|
jsonString, err := json.Marshal(initialState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return os.WriteFile(statePath, jsonString, 0755)
|
return os.WriteFile(stateFilePath, jsonString, 0755)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setState(data map[string]string) error {
|
func setState(ctx *cli.Context, data map[string]string) error {
|
||||||
currentData, err := getState()
|
currentData, err := getState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -162,6 +170,10 @@ func setState(data map[string]string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datadir := ctx.String("datadir")
|
||||||
|
statePath := filepath.Join(datadir, STATE_FILE)
|
||||||
|
|
||||||
err = os.WriteFile(statePath, jsonString, 0755)
|
err = os.WriteFile(statePath, jsonString, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("writing to file: %w", err)
|
return fmt.Errorf("writing to file: %w", err)
|
||||||
|
|||||||
@@ -43,14 +43,14 @@ func onboardAction(ctx *cli.Context) error {
|
|||||||
return fmt.Errorf("missing amount flag (--amount)")
|
return fmt.Errorf("missing amount flag (--amount)")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, net := getNetwork()
|
_, net := getNetwork(ctx)
|
||||||
|
|
||||||
userPubKey, err := getWalletPublicKey()
|
userPubKey, err := getWalletPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
client, cancel, err := getClientFromState()
|
client, cancel, err := getClientFromState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -71,17 +71,17 @@ func onboardAction(ctx *cli.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
aspPubkey, err := getAspPublicKey()
|
aspPubkey, err := getAspPublicKey(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
roundLifetime, err := getRoundLifetime()
|
roundLifetime, err := getRoundLifetime(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
unilateralExitDelay, err := getUnilateralExitDelay()
|
unilateralExitDelay, err := getUnilateralExitDelay(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var receiveCommand = cli.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func receiveAction(ctx *cli.Context) error {
|
func receiveAction(ctx *cli.Context) error {
|
||||||
offchainAddr, onchainAddr, _, err := getAddress()
|
offchainAddr, onchainAddr, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ func redeemAction(ctx *cli.Context) error {
|
|||||||
return fmt.Errorf("missing amount flag (--amount)")
|
return fmt.Errorf("missing amount flag (--amount)")
|
||||||
}
|
}
|
||||||
|
|
||||||
client, clean, err := getClientFromState()
|
client, clean, err := getClientFromState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,7 @@ func collaborativeRedeem(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid onchain address: unknown network")
|
return fmt.Errorf("invalid onchain address: unknown network")
|
||||||
}
|
}
|
||||||
_, liquidNet := getNetwork()
|
_, liquidNet := getNetwork(ctx)
|
||||||
if net.Name != liquidNet.Name {
|
if net.Name != liquidNet.Name {
|
||||||
return fmt.Errorf("invalid onchain address: must be for %s network", liquidNet.Name)
|
return fmt.Errorf("invalid onchain address: must be for %s network", liquidNet.Name)
|
||||||
}
|
}
|
||||||
@@ -96,7 +96,7 @@ func collaborativeRedeem(
|
|||||||
addr = info.Address
|
addr = info.Address
|
||||||
}
|
}
|
||||||
|
|
||||||
offchainAddr, _, _, err := getAddress()
|
offchainAddr, _, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -108,9 +108,9 @@ func collaborativeRedeem(
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
|
|
||||||
vtxos, err := getVtxos(ctx.Context, explorer, client, offchainAddr, withExpiryCoinselect)
|
vtxos, err := getVtxos(ctx, explorer, client, offchainAddr, withExpiryCoinselect)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ func collaborativeRedeem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
poolTxID, err := handleRoundStream(
|
poolTxID, err := handleRoundStream(
|
||||||
ctx.Context,
|
ctx,
|
||||||
client,
|
client,
|
||||||
registerResponse.GetId(),
|
registerResponse.GetId(),
|
||||||
selectedCoins,
|
selectedCoins,
|
||||||
@@ -178,13 +178,13 @@ func collaborativeRedeem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func unilateralRedeem(ctx *cli.Context, client arkv1.ArkServiceClient) error {
|
func unilateralRedeem(ctx *cli.Context, client arkv1.ArkServiceClient) error {
|
||||||
offchainAddr, _, _, err := getAddress()
|
offchainAddr, _, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
vtxos, err := getVtxos(ctx.Context, explorer, client, offchainAddr, false)
|
vtxos, err := getVtxos(ctx, explorer, client, offchainAddr, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ func sendAction(ctx *cli.Context) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
|
|
||||||
if len(onchainReceivers) > 0 {
|
if len(onchainReceivers) > 0 {
|
||||||
pset, err := sendOnchain(ctx, onchainReceivers)
|
pset, err := sendOnchain(ctx, onchainReceivers)
|
||||||
@@ -117,7 +117,7 @@ func sendAction(ctx *cli.Context) error {
|
|||||||
func sendOffchain(ctx *cli.Context, receivers []receiver) error {
|
func sendOffchain(ctx *cli.Context, receivers []receiver) error {
|
||||||
withExpiryCoinselect := ctx.Bool("enable-expiry-coinselect")
|
withExpiryCoinselect := ctx.Bool("enable-expiry-coinselect")
|
||||||
|
|
||||||
offchainAddr, _, _, err := getAddress()
|
offchainAddr, _, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -152,15 +152,15 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error {
|
|||||||
})
|
})
|
||||||
sumOfReceivers += receiver.Amount
|
sumOfReceivers += receiver.Amount
|
||||||
}
|
}
|
||||||
client, close, err := getClientFromState()
|
client, close, err := getClientFromState(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer close()
|
defer close()
|
||||||
|
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
|
|
||||||
vtxos, err := getVtxos(ctx.Context, explorer, client, offchainAddr, withExpiryCoinselect)
|
vtxos, err := getVtxos(ctx, explorer, client, offchainAddr, withExpiryCoinselect)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -207,7 +207,7 @@ func sendOffchain(ctx *cli.Context, receivers []receiver) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
poolTxID, err := handleRoundStream(
|
poolTxID, err := handleRoundStream(
|
||||||
ctx.Context, client, registerResponse.GetId(),
|
ctx, client, registerResponse.GetId(),
|
||||||
selectedCoins, secKey, receiversOutput,
|
selectedCoins, secKey, receiversOutput,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -229,7 +229,7 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, net := getNetwork()
|
_, net := getNetwork(ctx)
|
||||||
|
|
||||||
targetAmount := uint64(0)
|
targetAmount := uint64(0)
|
||||||
for _, receiver := range receivers {
|
for _, receiver := range receivers {
|
||||||
@@ -254,21 +254,21 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
explorer := NewExplorer()
|
explorer := NewExplorer(ctx)
|
||||||
|
|
||||||
utxos, delayedUtxos, change, err := coinSelectOnchain(
|
utxos, delayedUtxos, change, err := coinSelectOnchain(
|
||||||
explorer, targetAmount, nil,
|
ctx, explorer, targetAmount, nil,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := addInputs(updater, utxos, delayedUtxos, net); err != nil {
|
if err := addInputs(ctx, updater, utxos, delayedUtxos, net); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if change > 0 {
|
if change > 0 {
|
||||||
_, changeAddr, _, err := getAddress()
|
_, changeAddr, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -307,18 +307,18 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) {
|
|||||||
}
|
}
|
||||||
// reselect the difference
|
// reselect the difference
|
||||||
selected, delayedSelected, newChange, err := coinSelectOnchain(
|
selected, delayedSelected, newChange, err := coinSelectOnchain(
|
||||||
explorer, feeAmount-change, append(utxos, delayedUtxos...),
|
ctx, explorer, feeAmount-change, append(utxos, delayedUtxos...),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := addInputs(updater, selected, delayedSelected, net); err != nil {
|
if err := addInputs(ctx, updater, selected, delayedSelected, net); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if newChange > 0 {
|
if newChange > 0 {
|
||||||
_, changeAddr, _, err := getAddress()
|
_, changeAddr, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -354,7 +354,7 @@ func sendOnchain(ctx *cli.Context, receivers []receiver) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := signPset(updater.Pset, explorer, prvKey); err != nil {
|
if err := signPset(ctx, updater.Pset, explorer, prvKey); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/txscript"
|
"github.com/btcsuite/btcd/txscript"
|
||||||
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
"github.com/vulpemventures/go-elements/address"
|
"github.com/vulpemventures/go-elements/address"
|
||||||
"github.com/vulpemventures/go-elements/payment"
|
"github.com/vulpemventures/go-elements/payment"
|
||||||
"github.com/vulpemventures/go-elements/psetv2"
|
"github.com/vulpemventures/go-elements/psetv2"
|
||||||
@@ -17,7 +18,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func signPset(
|
func signPset(
|
||||||
pset *psetv2.Pset, explorer Explorer, prvKey *secp256k1.PrivateKey,
|
ctx *cli.Context, pset *psetv2.Pset, explorer Explorer, prvKey *secp256k1.PrivateKey,
|
||||||
) error {
|
) error {
|
||||||
updater, err := psetv2.NewUpdater(pset)
|
updater, err := psetv2.NewUpdater(pset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -64,7 +65,7 @@ func signPset(
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, onchainAddr, _, err := getAddress()
|
_, onchainAddr, _, err := getAddress(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -79,7 +80,7 @@ func signPset(
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, liquidNet := getNetwork()
|
_, liquidNet := getNetwork(ctx)
|
||||||
|
|
||||||
prevoutsScripts := make([][]byte, 0)
|
prevoutsScripts := make([][]byte, 0)
|
||||||
prevoutsValues := make([][]byte, 0)
|
prevoutsValues := make([][]byte, 0)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/ark-network/ark/common/tree"
|
"github.com/ark-network/ark/common/tree"
|
||||||
"github.com/btcsuite/btcd/btcec/v2/schnorr"
|
"github.com/btcsuite/btcd/btcec/v2/schnorr"
|
||||||
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
"github.com/vulpemventures/go-elements/psetv2"
|
"github.com/vulpemventures/go-elements/psetv2"
|
||||||
"github.com/vulpemventures/go-elements/taproot"
|
"github.com/vulpemventures/go-elements/taproot"
|
||||||
)
|
)
|
||||||
@@ -115,10 +116,10 @@ func (r *redeemBranch) redeemPath() ([]string, error) {
|
|||||||
return transactions, nil
|
return transactions, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *redeemBranch) expireAt() (*time.Time, error) {
|
func (r *redeemBranch) expireAt(ctx *cli.Context) (*time.Time, error) {
|
||||||
lastKnownBlocktime := int64(0)
|
lastKnownBlocktime := int64(0)
|
||||||
|
|
||||||
confirmed, blocktime, _ := getTxBlocktime(r.vtxo.poolTxid)
|
confirmed, blocktime, _ := getTxBlocktime(ctx, r.vtxo.poolTxid)
|
||||||
|
|
||||||
if confirmed {
|
if confirmed {
|
||||||
lastKnownBlocktime = blocktime
|
lastKnownBlocktime = blocktime
|
||||||
@@ -131,7 +132,7 @@ func (r *redeemBranch) expireAt() (*time.Time, error) {
|
|||||||
utx, _ := pset.UnsignedTx()
|
utx, _ := pset.UnsignedTx()
|
||||||
txid := utx.TxHash().String()
|
txid := utx.TxHash().String()
|
||||||
|
|
||||||
confirmed, blocktime, err := getTxBlocktime(txid)
|
confirmed, blocktime, err := getTxBlocktime(ctx, txid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user