Merge pull request #4196 from filecoin-project/asr/update-epoch
Set actorsv2 upgrade epoch
This commit is contained in:
commit
14bb4c9a0b
@ -3,6 +3,9 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/policy"
|
"github.com/filecoin-project/lotus/chain/actors/policy"
|
||||||
@ -13,8 +16,10 @@ const BreezeGasTampingDuration = 0
|
|||||||
|
|
||||||
const UpgradeSmokeHeight = -1
|
const UpgradeSmokeHeight = -1
|
||||||
const UpgradeIgnitionHeight = -2
|
const UpgradeIgnitionHeight = -2
|
||||||
const UpgradeLiftoffHeight = -3
|
const UpgradeRefuelHeight = -3
|
||||||
const UpgradeActorsV2Height = 10
|
|
||||||
|
var UpgradeActorsV2Height = abi.ChainEpoch(10)
|
||||||
|
var UpgradeLiftoffHeight = abi.ChainEpoch(-4)
|
||||||
|
|
||||||
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
@ -25,6 +30,11 @@ func init() {
|
|||||||
policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048))
|
policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048))
|
||||||
policy.SetMinVerifiedDealSize(abi.NewStoragePower(256))
|
policy.SetMinVerifiedDealSize(abi.NewStoragePower(256))
|
||||||
|
|
||||||
|
if os.Getenv("LOTUS_DISABLE_V2_ACTOR_MIGRATION") == "1" {
|
||||||
|
UpgradeActorsV2Height = math.MaxInt64
|
||||||
|
UpgradeLiftoffHeight = 11
|
||||||
|
}
|
||||||
|
|
||||||
BuildType |= Build2k
|
BuildType |= Build2k
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,8 +82,9 @@ var (
|
|||||||
|
|
||||||
UpgradeSmokeHeight abi.ChainEpoch = -1
|
UpgradeSmokeHeight abi.ChainEpoch = -1
|
||||||
UpgradeIgnitionHeight abi.ChainEpoch = -2
|
UpgradeIgnitionHeight abi.ChainEpoch = -2
|
||||||
UpgradeLiftoffHeight abi.ChainEpoch = -3
|
UpgradeRefuelHeight abi.ChainEpoch = -3
|
||||||
UpgradeActorsV2Height abi.ChainEpoch = 10
|
UpgradeActorsV2Height abi.ChainEpoch = 10
|
||||||
|
UpgradeLiftoffHeight abi.ChainEpoch = -4
|
||||||
|
|
||||||
DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -25,9 +26,9 @@ const BreezeGasTampingDuration = 120
|
|||||||
const UpgradeSmokeHeight = 51000
|
const UpgradeSmokeHeight = 51000
|
||||||
|
|
||||||
const UpgradeIgnitionHeight = 94000
|
const UpgradeIgnitionHeight = 94000
|
||||||
|
const UpgradeRefuelHeight = 130800
|
||||||
|
|
||||||
// TODO: Actual epoch needs to be filled in
|
var UpgradeActorsV2Height = abi.ChainEpoch(138720)
|
||||||
const UpgradeActorsV2Height = 128888
|
|
||||||
|
|
||||||
// This signals our tentative epoch for mainnet launch. Can make it later, but not earlier.
|
// This signals our tentative epoch for mainnet launch. Can make it later, but not earlier.
|
||||||
// Miners, clients, developers, custodians all need time to prepare.
|
// Miners, clients, developers, custodians all need time to prepare.
|
||||||
@ -45,6 +46,10 @@ func init() {
|
|||||||
SetAddressNetwork(address.Mainnet)
|
SetAddressNetwork(address.Mainnet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if os.Getenv("LOTUS_DISABLE_V2_ACTOR_MIGRATION") == "1" {
|
||||||
|
UpgradeActorsV2Height = math.MaxInt64
|
||||||
|
}
|
||||||
|
|
||||||
Devnet = false
|
Devnet = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
var SystemActorAddr = builtin0.SystemActorAddr
|
var SystemActorAddr = builtin0.SystemActorAddr
|
||||||
var BurntFundsActorAddr = builtin0.BurntFundsActorAddr
|
var BurntFundsActorAddr = builtin0.BurntFundsActorAddr
|
||||||
var ReserveAddress = makeAddress("t090")
|
var ReserveAddress = makeAddress("t090")
|
||||||
|
var RootVerifierAddress = makeAddress("t080")
|
||||||
|
|
||||||
// TODO: Why does actors have 2 different versions of this?
|
// TODO: Why does actors have 2 different versions of this?
|
||||||
type SectorInfo = proof0.SectorInfo
|
type SectorInfo = proof0.SectorInfo
|
||||||
|
@ -6,6 +6,8 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
@ -54,7 +56,7 @@ type UpgradeSchedule []Upgrade
|
|||||||
func DefaultUpgradeSchedule() UpgradeSchedule {
|
func DefaultUpgradeSchedule() UpgradeSchedule {
|
||||||
var us UpgradeSchedule
|
var us UpgradeSchedule
|
||||||
|
|
||||||
for _, u := range []Upgrade{{
|
updates := []Upgrade{{
|
||||||
Height: build.UpgradeBreezeHeight,
|
Height: build.UpgradeBreezeHeight,
|
||||||
Network: network.Version1,
|
Network: network.Version1,
|
||||||
Migration: UpgradeFaucetBurnRecovery,
|
Migration: UpgradeFaucetBurnRecovery,
|
||||||
@ -66,6 +68,10 @@ func DefaultUpgradeSchedule() UpgradeSchedule {
|
|||||||
Height: build.UpgradeIgnitionHeight,
|
Height: build.UpgradeIgnitionHeight,
|
||||||
Network: network.Version3,
|
Network: network.Version3,
|
||||||
Migration: UpgradeIgnition,
|
Migration: UpgradeIgnition,
|
||||||
|
}, {
|
||||||
|
Height: build.UpgradeRefuelHeight,
|
||||||
|
Network: network.Version3,
|
||||||
|
Migration: UpgradeRefuel,
|
||||||
}, {
|
}, {
|
||||||
Height: build.UpgradeActorsV2Height,
|
Height: build.UpgradeActorsV2Height,
|
||||||
Network: network.Version4,
|
Network: network.Version4,
|
||||||
@ -75,7 +81,33 @@ func DefaultUpgradeSchedule() UpgradeSchedule {
|
|||||||
Height: build.UpgradeLiftoffHeight,
|
Height: build.UpgradeLiftoffHeight,
|
||||||
Network: network.Version4,
|
Network: network.Version4,
|
||||||
Migration: UpgradeLiftoff,
|
Migration: UpgradeLiftoff,
|
||||||
}} {
|
}}
|
||||||
|
|
||||||
|
if build.UpgradeActorsV2Height == math.MaxInt64 { // disable actors upgrade
|
||||||
|
updates = []Upgrade{{
|
||||||
|
Height: build.UpgradeBreezeHeight,
|
||||||
|
Network: network.Version1,
|
||||||
|
Migration: UpgradeFaucetBurnRecovery,
|
||||||
|
}, {
|
||||||
|
Height: build.UpgradeSmokeHeight,
|
||||||
|
Network: network.Version2,
|
||||||
|
Migration: nil,
|
||||||
|
}, {
|
||||||
|
Height: build.UpgradeIgnitionHeight,
|
||||||
|
Network: network.Version3,
|
||||||
|
Migration: UpgradeIgnition,
|
||||||
|
}, {
|
||||||
|
Height: build.UpgradeRefuelHeight,
|
||||||
|
Network: network.Version3,
|
||||||
|
Migration: UpgradeRefuel,
|
||||||
|
}, {
|
||||||
|
Height: build.UpgradeLiftoffHeight,
|
||||||
|
Network: network.Version3,
|
||||||
|
Migration: UpgradeLiftoff,
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, u := range updates {
|
||||||
if u.Height < 0 {
|
if u.Height < 0 {
|
||||||
// upgrade disabled
|
// upgrade disabled
|
||||||
continue
|
continue
|
||||||
@ -500,6 +532,36 @@ func UpgradeIgnition(ctx context.Context, sm *StateManager, cb ExecCallback, roo
|
|||||||
return tree.Flush(ctx)
|
return tree.Flush(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpgradeRefuel(ctx context.Context, sm *StateManager, cb ExecCallback, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) {
|
||||||
|
store := sm.cs.Store(ctx)
|
||||||
|
tree, err := sm.StateTree(root)
|
||||||
|
if err != nil {
|
||||||
|
return cid.Undef, xerrors.Errorf("getting state tree: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
addr, err := address.NewFromString("t0122")
|
||||||
|
if err != nil {
|
||||||
|
return cid.Undef, xerrors.Errorf("getting address: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = resetMultisigVesting(ctx, store, tree, addr, 0, 0, big.Zero())
|
||||||
|
if err != nil {
|
||||||
|
return cid.Undef, xerrors.Errorf("tweaking msig vesting: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = resetMultisigVesting(ctx, store, tree, builtin.ReserveAddress, 0, 0, big.Zero())
|
||||||
|
if err != nil {
|
||||||
|
return cid.Undef, xerrors.Errorf("tweaking msig vesting: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = resetMultisigVesting(ctx, store, tree, builtin.RootVerifierAddress, 0, 0, big.Zero())
|
||||||
|
if err != nil {
|
||||||
|
return cid.Undef, xerrors.Errorf("tweaking msig vesting: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return tree.Flush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func UpgradeActorsV2(ctx context.Context, sm *StateManager, cb ExecCallback, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) {
|
func UpgradeActorsV2(ctx context.Context, sm *StateManager, cb ExecCallback, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) {
|
||||||
store := sm.cs.Store(ctx)
|
store := sm.cs.Store(ctx)
|
||||||
|
|
||||||
@ -707,6 +769,7 @@ func makeKeyAddr(splitAddr address.Address, count uint64) (address.Address, erro
|
|||||||
return addr, nil
|
return addr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: After the Liftoff epoch, refactor this to use resetMultisigVesting
|
||||||
func resetGenesisMsigs(ctx context.Context, sm *StateManager, store adt0.Store, tree *state.StateTree, startEpoch abi.ChainEpoch) error {
|
func resetGenesisMsigs(ctx context.Context, sm *StateManager, store adt0.Store, tree *state.StateTree, startEpoch abi.ChainEpoch) error {
|
||||||
gb, err := sm.cs.GetGenesis()
|
gb, err := sm.cs.GetGenesis()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -756,3 +819,34 @@ func resetGenesisMsigs(ctx context.Context, sm *StateManager, store adt0.Store,
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resetMultisigVesting(ctx context.Context, store adt0.Store, tree *state.StateTree, addr address.Address, startEpoch abi.ChainEpoch, duration abi.ChainEpoch, balance abi.TokenAmount) error {
|
||||||
|
act, err := tree.GetActor(addr)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("getting actor: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !builtin.IsMultisigActor(act.Code) {
|
||||||
|
return xerrors.Errorf("actor wasn't msig: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var msigState multisig0.State
|
||||||
|
if err := store.Get(ctx, act.Head, &msigState); err != nil {
|
||||||
|
return xerrors.Errorf("reading multisig state: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
msigState.StartEpoch = startEpoch
|
||||||
|
msigState.UnlockDuration = duration
|
||||||
|
msigState.InitialBalance = balance
|
||||||
|
|
||||||
|
act.Head, err = store.Put(ctx, &msigState)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("writing new multisig state: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tree.SetActor(addr, act); err != nil {
|
||||||
|
return xerrors.Errorf("setting multisig actor: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user