From 625df81dbb8928c6565879a86585b37064cbc4a1 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 7 Mar 2023 16:09:25 -0800 Subject: [PATCH] feat: mpool: Reduce minimum replace fee from 1.25x to 1.1x However, we're leaving the default at 1.25x for backwards compatibility, for now. Also: 1. Actually use the configured replace fee ratio. 2. Store said ratios as percentages instead of floats. 1.25, or 1+1/(2^2), can be represented as a float. 1.1, or 1 + 1/(2 * 5), cannot. fixes #10415 --- api/docgen/docgen.go | 4 +++ build/openrpc/full.json.gz | Bin 33611 -> 33614 bytes chain/messagepool/config.go | 14 ++++++--- chain/messagepool/messagepool.go | 14 ++++++--- chain/types/mpool.go | 2 +- chain/types/percent.go | 33 ++++++++++++++++++++ chain/types/percent_test.go | 31 ++++++++++++++++++ cli/mpool.go | 9 ++++-- cli/mpool_test.go | 7 +++-- documentation/en/api-v0-methods.md | 4 +-- documentation/en/api-v1-unstable-methods.md | 4 +-- 11 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 chain/types/percent.go create mode 100644 chain/types/percent_test.go diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 3793f2fc29..10e9c2fce5 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -401,6 +401,10 @@ func init() { FromBlock: pstring("2301220"), Address: []ethtypes.EthAddress{ethaddr}, }) + + percent := types.Percent(123) + addExample(percent) + addExample(&percent) } func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) { diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index bb1567be5e8c8f42cc72492e907c0c0c2cae9b06..251bdf39040379981fc9f8c92f83791195afe4ac 100644 GIT binary patch delta 33326 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 delta 33373 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
%@0dyrvif#idEzq6p`?t z4BX=a)4pL20zs3ZQPZ*J8HQrUbqgKV%q5jb215ecgCYkW(8Y62n<95|cMr}$etn!u zqWl8neDRj{Px;!iW$|?h!412e!8IzP;C!Oa>hfD}sGnf8TPf~7HT*bwyy>h`#H+!P zAK6+z91qK&>vp%mv&Arx>G8?v8f{b+H<0)>@RgsV$#o0dzgE=yh20UN`h=ulbDTH>|z3C06t^ADF%U(^^9m7m_bcEFsdIfly@L z?iJnEBs120IeskcbB{ zOUAg*nBsgRim?v=^LWDfR)C=HCK{lePnFX*_m9&;RnH0c6YH~x-~JG5wm{uyq!Vuo zp$oyo0|7_o(RESD#SAER5!cJZ?H(CU7KS_8l85z$H93J^EKYGDyS);yibSBfLnE8V z*>Y|S>7_zXG4)GY?w?UDg3>f?BlvJp7SojG-q^*=YdE!CvE-hF=Q43=a2?YYR~XK6 z9TMG-UW!~qCay!fzX6S{uTtOtcKiR_i5$vwgAvSuhiTm>zu-X`% zF9&7xuCh?ECaj}6^c$`Nyp{T;P~Qb|6b)10nN^BVbOE}Q!5-fkXu_T6Kk_jlLgWmj zQonI^AdrBRc^ELJgx0r-qoSK2H+yJ7Zz=>2Z|p@AX4O_eXHdwtzYfO8g5uA-mre)KRiy;D3iMIEI7;ML{2JsZRJNkZkGKbHLlu_1x<8Mi{Z#>NpCuNb0?0e@YqcE-3 z-VZhZ)y9rI026z75F$Y$8gLO(NyPaiHPQrhX5y_bt5lsEN(6*-C2}ARU->vZ+7P}nv4kn%p5zuzuQ+Z#1z#~+4?A=bN z(lSXgJ8ZCcn6Up@MoO~hmuEq>l`A zSCl!Rwy^9vI8`=p!FStYtf4e)Db+J5nW0n)`T){TNWD z0#+?I^UP9RI*la(uZdKY#c83EKJgab6lK!FXh&o{om3;KJ|JvRA&=XRXFQ!&=ce&j zC_#^^gFR8%yE_a_(XiY;sD!>o7-~Oba8j0Qg#$15XHZ43C7=u&I<@Bt7%0N}%~WXZhNvXr_25o}*&5U^-Pf2Rt*nuMn>thy#r&p;MDo!#QO zm2ZbWI{B6H2KHD^vNQlcUvt&fy_^F`wYAE`Ple5@-fVL&%>NYc$Gya&H-_7oIV12D z-e@u2pA5vN0IKX*Hr)HZP6zL=-m#2F$Uaf>5i z6h^5V&{Dv$LHhmaI00DTu5G$%j#S==o}tHLN}m%#=;Q=i<#c@C^3WV&e+C7VwQqY8 zXI>i0zDPCm?hLkEoOqqV?425LOG&z#Fg0lEP!Ne!F2Ce|dLY@idY{3w6c@Xw{NgD* zSq^=Nz-g%H8rjx@J!C)S7X2qU>tu=dJ^jrC)G$qfH~yP#75tA}t*CexHdYUOP!m# z|MqzBLh!I8+|Tkv!Q~2q3)t=BSOncC2&PJ0FfyB z5L~S_BlaP1a`mEPyRv_A_xLOmEZAluXS$~1!+q(k#pAv;kCaMHKVLrSFXU>Hc;X z@^0Y%ymx6jFmn1L3sZ-cbE{gcyh--oWpNIHW8g;uU(J}!cn zcM)VGeyO;<95Fdp**b>M$(Iu*y+coA6&NR0;ID;*?aTSUD$$|~O> z+i%zvS(~kz{cKNqHs+8t7r5v|bJxt(InLQHr2K|s^=1I7qzzraazdus7}Xwb-c`Vv z*teBAeYusE0x5#=P08bgsocXeIdzXgvm5-sdkI%4D9xvZ-(aeH%gK^&;)SAN0CKl` zB7PW3VQGHd`tiq)^{<0jCN7Pbz}}csH^@b@9_CmHgslo*qOqAW6{Gq>=BHpt|CpNdHsp%L}${r7Yo`Sh+ 1.00). +type Percent int64 + +func (p Percent) String() string { + return fmt.Sprintf(`%d.%d`, p/100, p%100) +} + +func (p Percent) MarshalJSON() ([]byte, error) { + return []byte(p.String()), nil +} + +func (p *Percent) UnmarshalJSON(b []byte) error { + flt, err := strconv.ParseFloat(string(b)+"e2", 64) + if err != nil { + return xerrors.Errorf("unable to parse ratio %s: %w", string(b), err) + } + if math.Trunc(flt) != flt { + return xerrors.Errorf("ratio may only have two decimals: %s", string(b)) + } + *p = Percent(flt) + return nil +} diff --git a/chain/types/percent_test.go b/chain/types/percent_test.go new file mode 100644 index 0000000000..eb5a8d7c9d --- /dev/null +++ b/chain/types/percent_test.go @@ -0,0 +1,31 @@ +package types + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestPercent(t *testing.T) { + for _, tc := range []struct { + p Percent + s string + }{ + {100, "1.0"}, + {111, "1.11"}, + {12, "0.12"}, + {1012, "10.12"}, + } { + tc := tc + t.Run(fmt.Sprintf("%d <> %s", tc.p, tc.s), func(t *testing.T) { + m, err := tc.p.MarshalJSON() + require.NoError(t, err) + require.Equal(t, tc.s, string(m)) + var p Percent + require.NoError(t, p.UnmarshalJSON([]byte(tc.s))) + require.Equal(t, tc.p, p) + }) + } + +} diff --git a/cli/mpool.go b/cli/mpool.go index e098806cbf..c83fb4b614 100644 --- a/cli/mpool.go +++ b/cli/mpool.go @@ -461,7 +461,12 @@ var MpoolReplaceCmd = &cli.Command{ msg := found.Message if cctx.Bool("auto") { - minRBF := messagepool.ComputeMinRBF(msg.GasPremium) + cfg, err := api.MpoolGetConfig(ctx) + if err != nil { + return xerrors.Errorf("failed to lookup the message pool config: %w", err) + } + + defaultRBF := messagepool.ComputeRBF(msg.GasPremium, cfg.ReplaceByFeeRatio) var mss *lapi.MessageSendSpec if cctx.IsSet("fee-limit") { @@ -482,7 +487,7 @@ var MpoolReplaceCmd = &cli.Command{ return xerrors.Errorf("failed to estimate gas values: %w", err) } - msg.GasPremium = big.Max(retm.GasPremium, minRBF) + msg.GasPremium = big.Max(retm.GasPremium, defaultRBF) msg.GasFeeCap = big.Max(retm.GasFeeCap, msg.GasPremium) mff := func() (abi.TokenAmount, error) { diff --git a/cli/mpool_test.go b/cli/mpool_test.go index 01b49d4b3f..0aa055ba31 100644 --- a/cli/mpool_test.go +++ b/cli/mpool_test.go @@ -15,6 +15,7 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/messagepool" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/mock" "github.com/filecoin-project/lotus/chain/wallet" @@ -298,6 +299,7 @@ func TestReplace(t *testing.T) { mockApi.EXPECT().ChainGetMessage(ctx, sm.Cid()).Return(&sm.Message, nil), mockApi.EXPECT().ChainHead(ctx).Return(nil, nil), mockApi.EXPECT().MpoolPending(ctx, types.EmptyTSK).Return([]*types.SignedMessage{sm}, nil), + mockApi.EXPECT().MpoolGetConfig(ctx).Return(messagepool.DefaultConfig(), nil), // use gomock.any to match the message in expected api calls // since the replace function modifies the message between calls, it would be pointless to try to match the exact argument mockApi.EXPECT().GasEstimateMessageGas(ctx, gomock.Any(), &mss, types.EmptyTSK).Return(&sm.Message, nil), @@ -342,6 +344,7 @@ func TestReplace(t *testing.T) { gomock.InOrder( mockApi.EXPECT().ChainHead(ctx).Return(nil, nil), mockApi.EXPECT().MpoolPending(ctx, types.EmptyTSK).Return([]*types.SignedMessage{sm}, nil), + mockApi.EXPECT().MpoolGetConfig(ctx).Return(messagepool.DefaultConfig(), nil), // use gomock.any to match the message in expected api calls // since the replace function modifies the message between calls, it would be pointless to try to match the exact argument mockApi.EXPECT().GasEstimateMessageGas(ctx, gomock.Any(), &mss, types.EmptyTSK).Return(&sm.Message, nil), @@ -538,7 +541,7 @@ func TestConfig(t *testing.T) { t.Fatal(err) } - mpoolCfg := &types.MpoolConfig{PriorityAddrs: []address.Address{senderAddr}, SizeLimitHigh: 1234567, SizeLimitLow: 6, ReplaceByFeeRatio: 0.25} + mpoolCfg := &types.MpoolConfig{PriorityAddrs: []address.Address{senderAddr}, SizeLimitHigh: 1234567, SizeLimitLow: 6, ReplaceByFeeRatio: types.Percent(25)} gomock.InOrder( mockApi.EXPECT().MpoolGetConfig(ctx).Return(mpoolCfg, nil), ) @@ -566,7 +569,7 @@ func TestConfig(t *testing.T) { t.Fatal(err) } - mpoolCfg := &types.MpoolConfig{PriorityAddrs: []address.Address{senderAddr}, SizeLimitHigh: 234567, SizeLimitLow: 3, ReplaceByFeeRatio: 0.33} + mpoolCfg := &types.MpoolConfig{PriorityAddrs: []address.Address{senderAddr}, SizeLimitHigh: 234567, SizeLimitLow: 3, ReplaceByFeeRatio: types.Percent(33)} gomock.InOrder( mockApi.EXPECT().MpoolSetConfig(ctx, mpoolCfg).Return(nil), ) diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index d254c14e7f..b73244fa8f 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -2879,7 +2879,7 @@ Response: ], "SizeLimitHigh": 123, "SizeLimitLow": 123, - "ReplaceByFeeRatio": 12.3, + "ReplaceByFeeRatio": 1.23, "PruneCooldown": 60000000000, "GasLimitOverestimation": 12.3 } @@ -3167,7 +3167,7 @@ Inputs: ], "SizeLimitHigh": 123, "SizeLimitLow": 123, - "ReplaceByFeeRatio": 12.3, + "ReplaceByFeeRatio": 1.23, "PruneCooldown": 60000000000, "GasLimitOverestimation": 12.3 } diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index 5516acb44a..aedfbfce01 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -3882,7 +3882,7 @@ Response: ], "SizeLimitHigh": 123, "SizeLimitLow": 123, - "ReplaceByFeeRatio": 12.3, + "ReplaceByFeeRatio": 1.23, "PruneCooldown": 60000000000, "GasLimitOverestimation": 12.3 } @@ -4170,7 +4170,7 @@ Inputs: ], "SizeLimitHigh": 123, "SizeLimitLow": 123, - "ReplaceByFeeRatio": 12.3, + "ReplaceByFeeRatio": 1.23, "PruneCooldown": 60000000000, "GasLimitOverestimation": 12.3 }