load actor bundle at startup and initialize the manifest CID from the loaded file
This commit is contained in:
parent
c3fb3301ab
commit
f26d19ed7d
@ -12,8 +12,8 @@ import (
|
||||
"github.com/filecoin-project/specs-actors/v8/actors/builtin/manifest"
|
||||
)
|
||||
|
||||
var manifestCids map[Version]cid.Cid = map[Version]cid.Cid{
|
||||
// TODO manifest CIDs for v8 and upwards
|
||||
var ManifestCids map[Version]cid.Cid = map[Version]cid.Cid{
|
||||
// TODO fill in manifest CIDs for v8 and upwards once these are fixed
|
||||
}
|
||||
|
||||
var manifests map[Version]*manifest.Manifest
|
||||
@ -30,7 +30,7 @@ func LoadManifests(ctx context.Context, store cbor.IpldStore) error {
|
||||
manifests = make(map[Version]*manifest.Manifest)
|
||||
actorMeta = make(map[cid.Cid]actorEntry)
|
||||
|
||||
for av, mfCid := range manifestCids {
|
||||
for av, mfCid := range ManifestCids {
|
||||
mf := &manifest.Manifest{}
|
||||
if err := adtStore.Get(ctx, mfCid, mf); err != nil {
|
||||
return xerrors.Errorf("error reading manifest for network version %d (cid: %s): %w", av, mfCid, err)
|
||||
|
@ -36,6 +36,7 @@ import (
|
||||
|
||||
"github.com/filecoin-project/lotus/blockstore"
|
||||
"github.com/filecoin-project/lotus/build"
|
||||
"github.com/filecoin-project/lotus/chain/actors"
|
||||
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||
"github.com/filecoin-project/lotus/chain/actors/builtin/multisig"
|
||||
"github.com/filecoin-project/lotus/chain/state"
|
||||
@ -88,6 +89,11 @@ func legacyPreMigration(f LegacyPreMigrationFunc) stmgr.PreMigrationFunc {
|
||||
func DefaultUpgradeSchedule() stmgr.UpgradeSchedule {
|
||||
var us stmgr.UpgradeSchedule
|
||||
|
||||
v8ManifestCid, ok := actors.ManifestCids[actors.Version8]
|
||||
if !ok {
|
||||
v8ManifestCid = cid.Undef
|
||||
}
|
||||
|
||||
updates := []stmgr.Upgrade{{
|
||||
Height: build.UpgradeBreezeHeight,
|
||||
Network: network.Version1,
|
||||
@ -239,7 +245,7 @@ func DefaultUpgradeSchedule() stmgr.UpgradeSchedule {
|
||||
DontStartWithin: 60,
|
||||
StopWithin: 5,
|
||||
}},
|
||||
Manifest: cid.Undef, // TODO this should be the real manifest CID
|
||||
Manifest: v8ManifestCid,
|
||||
Expensive: true,
|
||||
},
|
||||
}
|
||||
|
@ -71,6 +71,7 @@ var (
|
||||
ConnGaterKey = special{12} // libp2p option
|
||||
DAGStoreKey = special{13} // constructor returns multiple values
|
||||
ResourceManagerKey = special{14} // Libp2p option
|
||||
BuiltinActorsKey = special{15} // builtin actors bundle loading
|
||||
)
|
||||
|
||||
type invoke int
|
||||
|
@ -48,6 +48,13 @@ var ChainNode = Options(
|
||||
// Full node or lite node
|
||||
// TODO: Fix offline mode
|
||||
|
||||
// FVM: builtin actor bundle loading
|
||||
// Note: this has to load before the upgrade schedule, so that we can patch in the
|
||||
// right manifest cid.
|
||||
// This restriction will be lifted once we have the final actors v8 bundle and we know
|
||||
// the manifest cid.
|
||||
Override(BuiltinActorsKey, modules.LoadBultinActors),
|
||||
|
||||
// Consensus settings
|
||||
Override(new(dtypes.DrandSchedule), modules.BuiltinDrandConfig),
|
||||
Override(new(stmgr.UpgradeSchedule), filcns.DefaultUpgradeSchedule()),
|
||||
|
40
node/modules/builtin_actors.go
Normal file
40
node/modules/builtin_actors.go
Normal file
@ -0,0 +1,40 @@
|
||||
package modules
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"go.uber.org/fx"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/filecoin-project/lotus/build"
|
||||
"github.com/filecoin-project/lotus/chain/actors"
|
||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||
"github.com/filecoin-project/lotus/node/modules/helpers"
|
||||
|
||||
cbor "github.com/ipfs/go-ipld-cbor"
|
||||
car "github.com/ipld/go-car"
|
||||
)
|
||||
|
||||
func LoadBultinActors(lc fx.Lifecycle, mctx helpers.MetricsCtx, bs dtypes.UniversalBlockstore) error {
|
||||
ctx := helpers.LifecycleCtx(mctx, lc)
|
||||
|
||||
// TODO eventually we want this to start with bundle/manifest CIDs and fetch them from IPFS if
|
||||
// not already loaded.
|
||||
// For now, we just embed the v8 bundle and adjust the manifest CIDs for the migration/actor
|
||||
// metadata.
|
||||
blobr := bytes.NewReader(build.BuiltinActorsV8Bundle())
|
||||
hdr, err := car.LoadCar(ctx, bs, blobr)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("error loading builtin actors v8 bundle: %w", err)
|
||||
}
|
||||
|
||||
manifestCid := hdr.Roots[0]
|
||||
actors.ManifestCids[actors.Version8] = manifestCid
|
||||
|
||||
cborStore := cbor.NewCborStore(bs)
|
||||
if err := actors.LoadManifests(ctx, cborStore); err != nil {
|
||||
return xerrors.Errorf("error loading actor manifests: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user