diff --git a/chain/actors/builtin/init/init.go b/chain/actors/builtin/init/init.go index d1a41b158..5777bb890 100644 --- a/chain/actors/builtin/init/init.go +++ b/chain/actors/builtin/init/init.go @@ -51,4 +51,7 @@ type State interface { // It should not be used in production code, as init actor entries are // immutable. Remove(addrs ...address.Address) error + + // Sets the network's name. This should only be used on upgrade/fork. + SetNetworkName(name string) error } diff --git a/chain/actors/builtin/init/v0.go b/chain/actors/builtin/init/v0.go index de0d6c9e1..ceb87f970 100644 --- a/chain/actors/builtin/init/v0.go +++ b/chain/actors/builtin/init/v0.go @@ -57,6 +57,11 @@ func (s *state0) NetworkName() (dtypes.NetworkName, error) { return dtypes.NetworkName(s.State.NetworkName), nil } +func (s *state0) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + func (s *state0) Remove(addrs ...address.Address) (err error) { m, err := adt0.AsMap(s.store, s.State.AddressMap) if err != nil { diff --git a/chain/actors/builtin/init/v2.go b/chain/actors/builtin/init/v2.go index 38b3099fd..5aa0ddc18 100644 --- a/chain/actors/builtin/init/v2.go +++ b/chain/actors/builtin/init/v2.go @@ -57,6 +57,11 @@ func (s *state2) NetworkName() (dtypes.NetworkName, error) { return dtypes.NetworkName(s.State.NetworkName), nil } +func (s *state2) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + func (s *state2) Remove(addrs ...address.Address) (err error) { m, err := adt2.AsMap(s.store, s.State.AddressMap) if err != nil { diff --git a/chain/stmgr/forks.go b/chain/stmgr/forks.go index c49d75370..813557c04 100644 --- a/chain/stmgr/forks.go +++ b/chain/stmgr/forks.go @@ -14,7 +14,6 @@ import ( "golang.org/x/xerrors" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" - init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" multisig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" @@ -25,6 +24,8 @@ import ( "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" + init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" "github.com/filecoin-project/lotus/chain/actors/builtin/multisig" "github.com/filecoin-project/lotus/chain/state" "github.com/filecoin-project/lotus/chain/types" @@ -468,20 +469,20 @@ func UpgradeLiftoff(ctx context.Context, sm *StateManager, cb ExecCallback, root return tree.Flush(ctx) } -func setNetworkName(ctx context.Context, store adt0.Store, tree *state.StateTree, name string) error { +func setNetworkName(ctx context.Context, store adt.Store, tree *state.StateTree, name string) error { ia, err := tree.GetActor(builtin0.InitActorAddr) if err != nil { return xerrors.Errorf("getting init actor: %w", err) } - var initState init0.State - if err := store.Get(ctx, ia.Head, &initState); err != nil { + initState, err := init_.Load(store, ia) + if err != nil { return xerrors.Errorf("reading init state: %w", err) } - initState.NetworkName = name + initState.SetNetworkName(name) - ia.Head, err = store.Put(ctx, &initState) + ia.Head, err = store.Put(ctx, initState) if err != nil { return xerrors.Errorf("writing new init state: %w", err) }