Skip to content

Commit

Permalink
btcclient+btcjson: add type alias for BTC/kvB
Browse files Browse the repository at this point in the history
Added type alias BTC/kvB to explicitly indicate that
it represents the fee in BTC for a transaction size of 1 kB.
Because bitcoind uses its own fee rate type
(BTC/kvB instead of sat/kWU we use in lnd),
define the type in btcjson package,
as it's the only place where we actually use BTC/kvB.
  • Loading branch information
YusukeShimizu committed Mar 27, 2024
1 parent bbb6967 commit 80b27f5
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
14 changes: 9 additions & 5 deletions btcjson/chainsvrcmds.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ import (
"github.com/btcsuite/btcd/wire"
)

// BTCPerkvB is the units used to represent Bitcoin transaction fees.
// This unit represents the fee in BTC for a transaction size of 1 kB.
type BTCPerkvB = float64

// AddNodeSubCmd defines the type used in the addnode JSON-RPC command for the
// sub command field.
type AddNodeSubCmd string
Expand Down Expand Up @@ -142,7 +146,7 @@ type FundRawTransactionOpts struct {
ChangeType *ChangeType `json:"change_type,omitempty"`
IncludeWatching *bool `json:"includeWatching,omitempty"`
LockUnspents *bool `json:"lockUnspents,omitempty"`
FeeRate *float64 `json:"feeRate,omitempty"` // BTC/kB
FeeRate *BTCPerkvB `json:"feeRate,omitempty"` // BTC/kB
SubtractFeeFromOutputs []int `json:"subtractFeeFromOutputs,omitempty"`
Replaceable *bool `json:"replaceable,omitempty"`
ConfTarget *int `json:"conf_target,omitempty"`
Expand Down Expand Up @@ -822,7 +826,7 @@ func NewSearchRawTransactionsCmd(address string, verbose, skip, count *int, vinE
}

// AllowHighFeesOrMaxFeeRate defines a type that can either be the legacy
// allowhighfees boolean field or the new maxfeerate int field.
// allowhighfees boolean field or the new maxfeerate float64 field.
type AllowHighFeesOrMaxFeeRate struct {
Value interface{}
}
Expand Down Expand Up @@ -896,7 +900,7 @@ func NewSendRawTransactionCmd(hexTx string, allowHighFees *bool) *SendRawTransac
// maxFeeRate is the maximum fee rate for the transaction in BTC/kvB.
//
// A 0 maxFeeRate indicates that a maximum fee rate won't be enforced.
func NewBitcoindSendRawTransactionCmd(hexTx string, maxFeeRate float64) *SendRawTransactionCmd {
func NewBitcoindSendRawTransactionCmd(hexTx string, maxFeeRate BTCPerkvB) *SendRawTransactionCmd {
return &SendRawTransactionCmd{
HexTx: hexTx,
FeeSetting: &AllowHighFeesOrMaxFeeRate{
Expand Down Expand Up @@ -1051,13 +1055,13 @@ type TestMempoolAcceptCmd struct {

// Reject transactions whose fee rate is higher than the specified
// value, expressed in BTC/kvB, optional, default="0.10".
MaxFeeRate float64 `json:"omitempty"`
MaxFeeRate BTCPerkvB `json:"omitempty"`
}

// NewTestMempoolAcceptCmd returns a new instance which can be used to issue a
// testmempoolaccept JSON-RPC command.
func NewTestMempoolAcceptCmd(rawTxns []string,
maxFeeRate float64) *TestMempoolAcceptCmd {
maxFeeRate BTCPerkvB) *TestMempoolAcceptCmd {

return &TestMempoolAcceptCmd{
RawTxns: rawTxns,
Expand Down
8 changes: 4 additions & 4 deletions rpcclient/rawtransactions.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
const (
// defaultMaxFeeRate is the default maximum fee rate in BTC/kvB enforced
// by bitcoind v0.19.0 or after for transaction broadcast.
defaultMaxFeeRate float64 = 0.1
defaultMaxFeeRate btcjson.BTCPerkvB = 0.1
)

// SigHashType enumerates the available signature hashing types that the
Expand Down Expand Up @@ -365,7 +365,7 @@ func (c *Client) SendRawTransactionAsync(tx *wire.MsgTx, allowHighFees bool) Fut
if version.SupportUnifiedSoftForks() {
// Using a 0 MaxFeeRate is interpreted as a maximum fee rate not
// being enforced by bitcoind.
var maxFeeRate float64
var maxFeeRate btcjson.BTCPerkvB
if !allowHighFees {
maxFeeRate = defaultMaxFeeRate
}
Expand Down Expand Up @@ -915,7 +915,7 @@ func (r FutureTestMempoolAcceptResult) Receive() (
//
// See TestMempoolAccept for the blocking version and more details.
func (c *Client) TestMempoolAcceptAsync(txns []*wire.MsgTx,
maxFeeRate float64) FutureTestMempoolAcceptResult {
maxFeeRate btcjson.BTCPerkvB) FutureTestMempoolAcceptResult {

// Due to differences in the testmempoolaccept API for different
// backends, we'll need to inspect our version and construct the
Expand Down Expand Up @@ -1010,7 +1010,7 @@ func (c *Client) TestMempoolAcceptAsync(txns []*wire.MsgTx,
//
// The maximum number of transactions allowed is 25.
func (c *Client) TestMempoolAccept(txns []*wire.MsgTx,
maxFeeRate float64) ([]*btcjson.TestMempoolAcceptResult, error) {
maxFeeRate btcjson.BTCPerkvB) ([]*btcjson.TestMempoolAcceptResult, error) {

return c.TestMempoolAcceptAsync(txns, maxFeeRate).Receive()
}
Expand Down

0 comments on commit 80b27f5

Please sign in to comment.