2020-07-22 17:14:45 +00:00
package main
import (
"fmt"
2020-07-27 17:59:30 +00:00
"github.com/filecoin-project/lotus/build"
2020-07-30 17:32:10 +00:00
"github.com/filecoin-project/lotus/chain/types"
2020-07-22 17:14:45 +00:00
lcli "github.com/filecoin-project/lotus/cli"
"github.com/filecoin-project/lotus/miner"
"github.com/urfave/cli/v2"
)
var mpoolCmd = & cli . Command {
Name : "mpool" ,
Usage : "Tools for diagnosing mempool issues" ,
Flags : [ ] cli . Flag { } ,
Subcommands : [ ] * cli . Command {
minerSelectMsgsCmd ,
} ,
}
var minerSelectMsgsCmd = & cli . Command {
Name : "miner-select-msgs" ,
Action : func ( cctx * cli . Context ) error {
api , closer , err := lcli . GetFullNodeAPI ( cctx )
if err != nil {
return err
}
defer closer ( )
ctx := lcli . ReqContext ( cctx )
head , err := api . ChainHead ( ctx )
if err != nil {
return err
}
msgs , err := api . MpoolPending ( ctx , head . Key ( ) )
if err != nil {
return err
}
filtered , err := miner . SelectMessages ( ctx , api . StateGetActor , head , msgs )
if err != nil {
return err
}
2020-07-27 17:59:30 +00:00
var totalGas int64
2020-07-30 17:32:10 +00:00
for i , f := range filtered {
from := f . Message . From . String ( )
if len ( from ) > 8 {
from = "..." + from [ len ( from ) - 8 : ]
}
to := f . Message . To . String ( )
if len ( to ) > 8 {
to = "..." + to [ len ( to ) - 8 : ]
}
fmt . Printf ( "%d: %s -> %s, method %d, gasPrice %s, gasLimit %d, val %s\n" , i , from , to , f . Message . Method , f . Message . GasPrice , f . Message . GasLimit , types . FIL ( f . Message . Value ) )
2020-07-27 17:59:30 +00:00
totalGas += f . Message . GasLimit
}
2020-07-22 17:14:45 +00:00
fmt . Println ( "mempool input messages: " , len ( msgs ) )
fmt . Println ( "filtered messages: " , len ( filtered ) )
2020-07-27 17:59:30 +00:00
fmt . Printf ( "total gas limit of selected messages: %d / %d (%0.2f%%)\n" , totalGas , build . BlockGasLimit , 100 * float64 ( totalGas ) / float64 ( build . BlockGasLimit ) )
2020-07-22 17:14:45 +00:00
return nil
} ,
}