From c85b1e4e56a06182c83070661393095fa94c6cb7 Mon Sep 17 00:00:00 2001 From: bruwbird Date: Thu, 21 Mar 2024 13:08:18 +0900 Subject: [PATCH] btcclient+btcjson: feeRate to BTC/kvB defaultMaxFeeRate was set to 1e8 / 10(sat/kb) as a parameter. But BTC/kvB is the expected value, so the units was wrong. This commit updates defaultMaxFeeRate to BTC/kvB and sets it to 0.1, which is the default value of Bitcoin Core. This commit also updates the comment to reflect the change. Because maxFeeRate sanity check has been added in bitcoin core v27.0 or later, sendrawtransaction cannot be executed without this change. --- btcjson/chainsvrcmds.go | 4 ++-- btcjson/chainsvrcmds_test.go | 8 ++++---- rpcclient/rawtransactions.go | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 956b4db604..fd46a3b133 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -862,7 +862,7 @@ func (a *AllowHighFeesOrMaxFeeRate) UnmarshalJSON(data []byte) error { case bool: a.Value = Bool(v) case float64: - a.Value = Int32(int32(v)) + a.Value = Float64(v) default: return fmt.Errorf("invalid allowhighfees or maxfeerate value: "+ "%v", unmarshalled) @@ -895,7 +895,7 @@ func NewSendRawTransactionCmd(hexTx string, allowHighFees *bool) *SendRawTransac // sendrawtransaction JSON-RPC command to a bitcoind node. // // A 0 maxFeeRate indicates that a maximum fee rate won't be enforced. -func NewBitcoindSendRawTransactionCmd(hexTx string, maxFeeRate int32) *SendRawTransactionCmd { +func NewBitcoindSendRawTransactionCmd(hexTx string, maxFeeRate float64) *SendRawTransactionCmd { return &SendRawTransactionCmd{ HexTx: hexTx, FeeSetting: &AllowHighFeesOrMaxFeeRate{ diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index d3143a528c..38113a687e 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1257,16 +1257,16 @@ func TestChainSvrCmds(t *testing.T) { { name: "sendrawtransaction optional, bitcoind >= 0.19.0", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("sendrawtransaction", "1122", &btcjson.AllowHighFeesOrMaxFeeRate{Value: btcjson.Int32(1234)}) + return btcjson.NewCmd("sendrawtransaction", "1122", &btcjson.AllowHighFeesOrMaxFeeRate{Value: btcjson.Float64(0.1234)}) }, staticCmd: func() interface{} { - return btcjson.NewBitcoindSendRawTransactionCmd("1122", 1234) + return btcjson.NewBitcoindSendRawTransactionCmd("1122", 0.1234) }, - marshalled: `{"jsonrpc":"1.0","method":"sendrawtransaction","params":["1122",1234],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"sendrawtransaction","params":["1122",0.1234],"id":1}`, unmarshalled: &btcjson.SendRawTransactionCmd{ HexTx: "1122", FeeSetting: &btcjson.AllowHighFeesOrMaxFeeRate{ - Value: btcjson.Int32(1234), + Value: btcjson.Float64(0.1234), }, }, }, diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index 9c95041fd4..5834ccf202 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -17,9 +17,9 @@ import ( ) const ( - // defaultMaxFeeRate is the default maximum fee rate in sat/KB enforced + // defaultMaxFeeRate is the default maximum fee rate in BTC/kvB enforced // by bitcoind v0.19.0 or after for transaction broadcast. - defaultMaxFeeRate = btcutil.SatoshiPerBitcoin / 10 + defaultMaxFeeRate float64 = 0.1 ) // SigHashType enumerates the available signature hashing types that the @@ -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 int32 + var maxFeeRate float64 if !allowHighFees { maxFeeRate = defaultMaxFeeRate }