Merge pull request #3552 from filecoin-project/fix/fee-cap-premium
Fix GasPremium capping logic
This commit is contained in:
commit
d8a790a13c
@ -6,8 +6,8 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer"
|
||||||
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/specs-actors/actors/abi"
|
"github.com/filecoin-project/specs-actors/actors/abi"
|
||||||
"github.com/filecoin-project/specs-actors/actors/abi/big"
|
|
||||||
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
|
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
@ -96,7 +96,8 @@ type MessageSendSpec struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var DefaultMessageSendSpec = MessageSendSpec{
|
var DefaultMessageSendSpec = MessageSendSpec{
|
||||||
MaxFee: big.Zero(),
|
// MaxFee of 0.1FIL
|
||||||
|
MaxFee: abi.NewTokenAmount(int64(build.FilecoinPrecision) / 10),
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ms *MessageSendSpec) Get() MessageSendSpec {
|
func (ms *MessageSendSpec) Get() MessageSendSpec {
|
||||||
|
@ -127,7 +127,7 @@ func TestPaymentChannelStatus(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
// creator: paych get <creator> <receiver> <amount>
|
// creator: paych get <creator> <receiver> <amount>
|
||||||
cmd = []string{creatorAddr.String(), receiverAddr.String(), fmt.Sprintf("%d", channelAmt)}
|
cmd = []string{creatorAddr.String(), receiverAddr.String(), fmt.Sprintf("%d", channelAmt)}
|
||||||
create <- creatorCLI.runCmd(paychGetCmd, cmd)
|
create <- creatorCLI.runCmd(paychAddFundsCmd, cmd)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Wait for the output to stop being "Channel does not exist"
|
// Wait for the output to stop being "Channel does not exist"
|
||||||
@ -347,7 +347,7 @@ func TestPaymentChannelVoucherCreateShortfall(t *testing.T) {
|
|||||||
// creator: paych get <creator> <receiver> <amount>
|
// creator: paych get <creator> <receiver> <amount>
|
||||||
channelAmt := 100
|
channelAmt := 100
|
||||||
cmd := []string{creatorAddr.String(), receiverAddr.String(), fmt.Sprintf("%d", channelAmt)}
|
cmd := []string{creatorAddr.String(), receiverAddr.String(), fmt.Sprintf("%d", channelAmt)}
|
||||||
chstr := creatorCLI.runCmd(paychGetCmd, cmd)
|
chstr := creatorCLI.runCmd(paychAddFundsCmd, cmd)
|
||||||
|
|
||||||
chAddr, err := address.NewFromString(chstr)
|
chAddr, err := address.NewFromString(chstr)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -217,16 +217,11 @@ func capGasFee(msg *types.Message, maxFee abi.TokenAmount) {
|
|||||||
|
|
||||||
gl := types.NewInt(uint64(msg.GasLimit))
|
gl := types.NewInt(uint64(msg.GasLimit))
|
||||||
totalFee := types.BigMul(msg.GasFeeCap, gl)
|
totalFee := types.BigMul(msg.GasFeeCap, gl)
|
||||||
minerFee := types.BigMul(msg.GasPremium, gl)
|
|
||||||
|
|
||||||
if totalFee.LessThanEqual(maxFee) {
|
if totalFee.LessThanEqual(maxFee) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// scale chain/miner fee down proportionally to fit in our budget
|
|
||||||
// TODO: there are probably smarter things we can do here to optimize
|
|
||||||
// message inclusion latency
|
|
||||||
|
|
||||||
msg.GasFeeCap = big.Div(maxFee, gl)
|
msg.GasFeeCap = big.Div(maxFee, gl)
|
||||||
msg.GasPremium = big.Div(big.Div(big.Mul(minerFee, maxFee), totalFee), gl)
|
msg.GasPremium = big.Min(msg.GasFeeCap, msg.GasPremium) // cap premium at FeeCap
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user