67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
|
package rfwp
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
|
||
|
"github.com/filecoin-project/oni/lotus-soup/testkit"
|
||
|
|
||
|
"github.com/filecoin-project/go-address"
|
||
|
"github.com/filecoin-project/lotus/cli"
|
||
|
tstats "github.com/filecoin-project/lotus/tools/stats"
|
||
|
"github.com/filecoin-project/specs-actors/actors/abi"
|
||
|
"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
|
||
|
}
|