Files
ark/server/internal/infrastructure/wallet/btc-embedded/bitcoind.go
Louis Singer 0fb34cb13d Dynamic min-relay-fee and dust amount (#280)
* [btc-embedded] add chainfee.Estimator and extraAPI interfaces

* dynamic fee amount

* dynamic dust amount

* [client] fix linter errors

* [domain] fix unit tests

* [server] return dust amount in GetInfo RPC

* [sdk] fix lnd dependencie

* go work sync

* fix witness stack size forfeit tx size estimator

* remove hardcoded fee values in covenant txbuilder

* lower liquid feerate

* fix after reviews

* go work sync
2024-09-10 17:22:09 +02:00

66 lines
1.4 KiB
Go

package btcwallet
import (
"encoding/hex"
"strings"
"github.com/ark-network/ark/server/internal/core/ports"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcwallet/chain"
)
type bitcoindRPCClient struct {
chainClient *chain.BitcoindClient
}
func (b *bitcoindRPCClient) broadcast(txhex string) error {
var tx wire.MsgTx
err := tx.Deserialize(hex.NewDecoder(strings.NewReader(txhex)))
if err != nil {
return err
}
_, err = b.chainClient.SendRawTransaction(&tx, true)
if err != nil {
if err == chain.ErrNonBIP68Final {
return ports.ErrNonFinalBIP68
}
return err
}
return nil
}
func (b *bitcoindRPCClient) getTxStatus(txid string) (isConfirmed bool, blocktime int64, err error) {
txhash, err := chainhash.NewHashFromStr(txid)
if err != nil {
return false, 0, err
}
tx, err := b.chainClient.GetRawTransactionVerbose(txhash)
if err != nil {
if strings.Contains(err.Error(), "No such mempool or blockchain transaction") {
return false, 0, nil
}
return false, 0, err
}
return tx.Confirmations > 0, tx.Blocktime, nil
}
func (b *bitcoindRPCClient) getTx(txid string) (*wire.MsgTx, error) {
txhash, err := chainhash.NewHashFromStr(txid)
if err != nil {
return nil, err
}
tx, err := b.chainClient.GetRawTransaction(txhash)
if err != nil {
return nil, err
}
return tx.MsgTx(), nil
}