diff --git a/CHANGELOG.md b/CHANGELOG.md index e387f1f011f..98a7b188c0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,16 +12,18 @@ ## Improvements -# v1.28.0-rc1 / 2024-07-01 +# v1.28.0-rc2 / 2024-07-04 -This is the first release candidate of the upcoming MANDATORY Lotus v1.28.0 release, which will deliver the Filecoin network version 23, codenamed Waffle 🧇. +This is the second release candidate of the upcoming MANDATORY Lotus v1.28.0 release, which will deliver the Filecoin network version 23, codenamed Waffle 🧇. -**This release canidate does NOT set a calibration network upgrade epoch, it will be added in the second release candidate, expected to be released July 4th. This release candidate does NOT set the mainnet upgrade epoch yet, which will be updated in the final release.** +**This release candidate sets the calibration network to upgrade at epoch 1779094, corresponding to 2024-07-11T12:00:00Z.** This release does NOT set the mainnet upgrade epoch yet, in which will be updated in the final release. ☢️ Upgrade Warnings ☢️ If you are running the `v1.26.0` or an earlier version of Lotus, please go through the `Upgrade Warnings` section for the `v1.27.*` releases, before upgrading to this RC. +- This upgrade includes an additional migration to the events database. Node operators running Lotus with events turned on (off by default) may experience some delay in initial start-up of Lotus as a minor database migration takes place. See [filecoin-project/lotus#12080](https://github.com/filecoin-project/lotus/pull/12080) for full details. + ## The Filecoin network version 23 delivers the following FIPs: - [FIP-0065: Ignore built-in market locked balance in circulating supply calculation](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0065.md) @@ -63,7 +65,15 @@ verifiedregistry bafk2bzaceczw2kp6gjjdcjbso7mewp7guik7gr525pal6dotdja2lrct6ok3c ``` ## Migration -The NV23 upgrade migration is expected to be extremely light as only FIP-0085 requires a migration. We don't expect null tipsets after the upgrade epoch or heavy block validation times. We will updated this sections once we have run the final benchmarks. + +All node operators, including storage providers, should be aware that ONE pre-migration is being scheduled 120 epochs before the network upgrade. The migration for the NV23 upgrade is expected to be light with no heavy pre-migrations, here are some expected timings and resource consumption numbers: + +- Pre-Migration is expected to take less then 1 minute +- The migration is expected to take less then 30 seconds on a node with a NVMe-drive and a newer CPU. For nodes running on slower disks/CPU, it is still expected to take less then 1 minute. + +We recommend node operators (who haven't enabled splitstore discard mode) that do not care about historical chain states, to prune the chain blockstore by syncing from a snapshot 1-2 days before the upgrade. + +For certain node operators, such as full archival nodes or systems that need to keep large amounts of state (RPC providers), we recommend skipping the pre-migration and run the non-cached migration (i.e., just running the migration at the network upgrade epoch), and schedule for some additional downtime. Operators of such nodes can read the [How to disable premigration in network upgrade tutorial.](https://lotus.filecoin.io/kb/disable-premigration/) ## Dependencies - github.com/filecoin-project/go-state-types (`v0.14.0-dev` -> `v0.14.0-rc5`) diff --git a/build/openrpc/full.json b/build/openrpc/full.json index 01e60cd730b..c2a69e8ebdc 100644 --- a/build/openrpc/full.json +++ b/build/openrpc/full.json @@ -2,7 +2,7 @@ "openrpc": "1.2.6", "info": { "title": "Lotus RPC API", - "version": "1.28.0-rc1" + "version": "1.28.0-rc2" }, "methods": [ { diff --git a/build/openrpc/gateway.json b/build/openrpc/gateway.json index b0b42c23377..3cfaff6b685 100644 --- a/build/openrpc/gateway.json +++ b/build/openrpc/gateway.json @@ -2,7 +2,7 @@ "openrpc": "1.2.6", "info": { "title": "Lotus RPC API", - "version": "1.28.0-rc1" + "version": "1.28.0-rc2" }, "methods": [ { diff --git a/build/openrpc/miner.json b/build/openrpc/miner.json index bdff446ebee..5becb021f57 100644 --- a/build/openrpc/miner.json +++ b/build/openrpc/miner.json @@ -2,7 +2,7 @@ "openrpc": "1.2.6", "info": { "title": "Lotus RPC API", - "version": "1.28.0-rc1" + "version": "1.28.0-rc2" }, "methods": [ { diff --git a/build/openrpc/worker.json b/build/openrpc/worker.json index 303b6f3708e..bfa3734d8a1 100644 --- a/build/openrpc/worker.json +++ b/build/openrpc/worker.json @@ -2,7 +2,7 @@ "openrpc": "1.2.6", "info": { "title": "Lotus RPC API", - "version": "1.28.0-rc1" + "version": "1.28.0-rc2" }, "methods": [ { diff --git a/build/params_2k.go b/build/params_2k.go index 28ae3269f46..c1c132cdae6 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -83,8 +83,7 @@ const UpgradeWatermelonFix2Height = -101 const UpgradeCalibrationDragonFixHeight = -102 var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ - 0: DrandMainnet, - UpgradePhoenixHeight: DrandQuicknet, + 0: DrandQuicknet, } var SupportedProofTypes = []abi.RegisteredSealProof{ @@ -160,8 +159,7 @@ func init() { UpgradePhoenixHeight = getUpgradeHeight("LOTUS_PHOENIX_HEIGHT", UpgradePhoenixHeight) DrandSchedule = map[abi.ChainEpoch]DrandEnum{ - 0: DrandMainnet, - UpgradePhoenixHeight: DrandQuicknet, + 0: DrandQuicknet, } BuildType |= Build2k @@ -191,5 +189,5 @@ const Eip155ChainId = 31415926 var WhitelistedBlock = cid.Undef -const F3Enabled = true +const f3Enabled = true const F3BootstrapEpoch abi.ChainEpoch = 100 diff --git a/build/params_butterfly.go b/build/params_butterfly.go index af2c5554f78..118c7b10898 100644 --- a/build/params_butterfly.go +++ b/build/params_butterfly.go @@ -16,8 +16,7 @@ import ( ) var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ - 0: DrandMainnet, - UpgradePhoenixHeight: DrandQuicknet, + 0: DrandQuicknet, } const GenesisNetworkVersion = network.Version22 @@ -107,5 +106,5 @@ const Eip155ChainId = 3141592 var WhitelistedBlock = cid.Undef -const F3Enabled = true +const f3Enabled = true const F3BootstrapEpoch abi.ChainEpoch = 200 diff --git a/build/params_calibnet.go b/build/params_calibnet.go index ac174b2621a..b6cb730c7b1 100644 --- a/build/params_calibnet.go +++ b/build/params_calibnet.go @@ -98,8 +98,8 @@ const UpgradePhoenixHeight = UpgradeDragonHeight + 120 // 2024-04-03T11:00:00Z const UpgradeCalibrationDragonFixHeight = 1493854 -// ????? -const UpgradeWaffleHeight = 999999999999999 +// 2024-07-11T12:00:00Z +const UpgradeWaffleHeight = 1779094 var SupportedProofTypes = []abi.RegisteredSealProof{ abi.RegisteredSealProof_StackedDrg32GiBV1, @@ -152,5 +152,5 @@ const Eip155ChainId = 314159 var WhitelistedBlock = cid.Undef -const F3Enabled = false -const F3BootstrapEpoch abi.ChainEpoch = -1 +const f3Enabled = true +const F3BootstrapEpoch abi.ChainEpoch = UpgradeWaffleHeight + 100 diff --git a/build/params_interop.go b/build/params_interop.go index ac0e7771d0b..8742e635eaf 100644 --- a/build/params_interop.go +++ b/build/params_interop.go @@ -69,8 +69,7 @@ const UpgradeWatermelonFix2Height = -2 const UpgradeCalibrationDragonFixHeight = -3 var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ - 0: DrandMainnet, - UpgradePhoenixHeight: DrandQuicknet, + 0: DrandQuicknet, } var SupportedProofTypes = []abi.RegisteredSealProof{ @@ -146,5 +145,5 @@ const Eip155ChainId = 3141592 var WhitelistedBlock = cid.Undef -const F3Enabled = true +const f3Enabled = true const F3BootstrapEpoch abi.ChainEpoch = 1000 diff --git a/build/params_mainnet.go b/build/params_mainnet.go index 1ce58d13d25..5da53b15a9f 100644 --- a/build/params_mainnet.go +++ b/build/params_mainnet.go @@ -169,5 +169,5 @@ const Eip155ChainId = 314 // WhitelistedBlock skips checks on message validity in this block to sidestep the zero-bls signature var WhitelistedBlock = MustParseCid("bafy2bzaceapyg2uyzk7vueh3xccxkuwbz3nxewjyguoxvhx77malc2lzn2ybi") -const F3Enabled = false +const f3Enabled = false const F3BootstrapEpoch abi.ChainEpoch = -1 diff --git a/build/params_shared_funcs.go b/build/params_shared_funcs.go index d117264ab6f..84ffd6f4513 100644 --- a/build/params_shared_funcs.go +++ b/build/params_shared_funcs.go @@ -1,6 +1,8 @@ package build import ( + "os" + "github.com/ipfs/go-cid" "github.com/libp2p/go-libp2p/core/protocol" @@ -49,3 +51,8 @@ func MustParseCid(c string) cid.Cid { return ret } + +func IsF3Enabled() bool { + const F3DisableEnvKey = "LOTUS_DISABLE_F3" + return f3Enabled && len(os.Getenv(F3DisableEnvKey)) == 0 +} diff --git a/build/version.go b/build/version.go index 8d4e5ef6e28..174f9635f57 100644 --- a/build/version.go +++ b/build/version.go @@ -39,7 +39,7 @@ func BuildTypeString() string { } // NodeBuildVersion is the local build version of the Lotus daemon -const NodeBuildVersion string = "1.28.0-rc1" +const NodeBuildVersion string = "1.28.0-rc2" func NodeUserVersion() BuildVersion { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { @@ -50,7 +50,7 @@ func NodeUserVersion() BuildVersion { } // MinerBuildVersion is the local build version of the Lotus miner -const MinerBuildVersion = "1.28.0-rc1" +const MinerBuildVersion = "1.28.0-rc2" func MinerUserVersion() BuildVersion { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 0d03258b3ee..2356908ca8c 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.28.0-rc1 + 1.28.0-rc2 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index c350252e434..345977dc0af 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.28.0-rc1 + 1.28.0-rc2 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 64f94e7a064..5f240488e04 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.28.0-rc1 + 1.28.0-rc2 COMMANDS: daemon Start a lotus daemon process diff --git a/node/builder_chain.go b/node/builder_chain.go index 9817adfbf6a..957adeadbe4 100644 --- a/node/builder_chain.go +++ b/node/builder_chain.go @@ -151,7 +151,7 @@ var ChainNode = Options( Override(HandleIncomingBlocksKey, modules.HandleIncomingBlocks), ), - If(build.F3Enabled, Override(new(*lf3.F3), lf3.New)), + If(build.IsF3Enabled(), Override(new(*lf3.F3), lf3.New)), ) func ConfigFullNode(c interface{}) Option { diff --git a/node/builder_miner.go b/node/builder_miner.go index b770d390c65..9aaf2fc4bc6 100644 --- a/node/builder_miner.go +++ b/node/builder_miner.go @@ -141,7 +141,7 @@ func ConfigStorageMiner(c interface{}) Option { Override(new(config.HarmonyDB), cfg.HarmonyDB), Override(new(harmonydb.ITestID), harmonydb.ITestID("")), Override(new(*ctladdr.AddressSelector), modules.AddressSelector(&cfg.Addresses)), - If(build.F3Enabled, Override(F3Participation, modules.F3Participation)), + If(build.IsF3Enabled(), Override(F3Participation, modules.F3Participation)), ) } diff --git a/node/impl/full/eth.go b/node/impl/full/eth.go index 27d7002e440..c8052f67d6a 100644 --- a/node/impl/full/eth.go +++ b/node/impl/full/eth.go @@ -734,6 +734,7 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, p jsonrpc.RawParams) (eth ) for blocksIncluded < int(params.BlkCount) && ts.Height() > 0 { + basefee = ts.Blocks()[0].ParentBaseFee _, msgs, rcpts, err := executeTipset(ctx, ts, a.Chain, a.StateAPI) if err != nil { return ethtypes.EthFeeHistory{}, xerrors.Errorf("failed to retrieve messages and receipts for height %d: %w", ts.Height(), err) diff --git a/node/modules/lp2p/pubsub.go b/node/modules/lp2p/pubsub.go index 2eb3c4c1866..f77f1146825 100644 --- a/node/modules/lp2p/pubsub.go +++ b/node/modules/lp2p/pubsub.go @@ -381,7 +381,7 @@ func GossipSub(in GossipIn) (service *pubsub.PubSub, err error) { build.IndexerIngestTopic(in.Nn), } - if build.F3Enabled { + if build.IsF3Enabled() { allowTopics = append(allowTopics, gpbft.NetworkName(in.Nn).PubSubTopic()) }