2020-07-27 11:57:01 +00:00
|
|
|
package rfwp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/oni/lotus-soup/testkit"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/go-address"
|
2020-09-16 10:51:23 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/abi"
|
2020-07-27 11:57:01 +00:00
|
|
|
"github.com/filecoin-project/lotus/cli"
|
|
|
|
tstats "github.com/filecoin-project/lotus/tools/stats"
|
|
|
|
"github.com/ipfs/go-cid"
|
|
|
|
)
|
|
|
|
|
|
|
|
func FetchChainState(t *testkit.TestEnvironment, m *testkit.LotusMiner) error {
|
|
|
|
height := 0
|
|
|
|
headlag := 3
|
|
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
api := m.FullApi
|
|
|
|
|
|
|
|
tipsetsCh, err := tstats.GetTips(ctx, m.FullApi, abi.ChainEpoch(height), headlag)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
for tipset := range tipsetsCh {
|
|
|
|
err := func() error {
|
|
|
|
filename := fmt.Sprintf("%s%cchain-state-%d.html", t.TestOutputsPath, os.PathSeparator, tipset.Height())
|
|
|
|
file, err := os.Create(filename)
|
|
|
|
defer file.Close()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
stout, err := api.StateCompute(ctx, tipset.Height(), nil, tipset.Key())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
codeCache := map[address.Address]cid.Cid{}
|
|
|
|
getCode := func(addr address.Address) (cid.Cid, error) {
|
|
|
|
if c, found := codeCache[addr]; found {
|
|
|
|
return c, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
c, err := api.StateGetActor(ctx, addr, tipset.Key())
|
|
|
|
if err != nil {
|
|
|
|
return cid.Cid{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
codeCache[addr] = c.Code
|
|
|
|
return c.Code, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return cli.ComputeStateHTMLTempl(file, tipset, stout, getCode)
|
|
|
|
}()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|