* refactor: make GetEmbeddedBuiltinActorsBundle take network bundle name
* update calibnet actor bundle to v12.0.0-rc.2, but include v12.0.0-rc.1 as calibrationnet-buggy.car
* wip: calibnet unbork migration
* calibnet: add buggy miner actor CID to actorMeta
* fix incorrect buggy calibnet manifest
* make UpgradeWatermelonFixHeight a build param
* calibnet patch: check whether network is calibration from init actor state
* add sanity checks to the v12 calibnet patch upgrade
* address review
* refactor: make GetEmbeddedBuiltinActorsBundle take network bundle name
* update calibnet actor bundle to v12.0.0-rc.2, but include v12.0.0-rc.1 as calibrationnet-buggy.car
* wip: calibnet unbork migration
* calibnet: add buggy miner actor CID to actorMeta
* fix incorrect buggy calibnet manifest
* make UpgradeWatermelonFixHeight a build param
* calibnet patch: check whether network is calibration from init actor state
* add sanity checks to the v12 calibnet patch upgrade
* address review
Introduce nv21 skeleton for local testing:
- Use local go-state-types with actor_version_checklist changes: https://github.com/filecoin-project/go-state-types/blob/master/actors_version_checklist.md
- Imports mock v12-actors bundle
- Define upgrade heights
- Generate adapters
- Add upgrade schedule and migration
- Add actorstype to the NewActorRegistry in /chain/consensus/computestate.go
- Add upgrade field to api/types.go/ForkUpgradeParams
- Add upgrade to node/impl/full/state.go
- Add network version to chain/state/statetree.go
- make jen
- make docsgen-cli
This will reject blocks in pubsub validation if they're either:
1. Too far into the future (5 blocks beyond the expected head).
2. Too far into the past (before finality with respect to our current
head).
Specifically:
1. We were previously rejecting future blocks in the sync logic, but not
in pubsub itself.
2. We never used to check if a block was too _old_.
Motivation: Blocks that are too new/too old can cause us to perform
quite a bit of unnecessary work.
Technically, the block validator caught this panic. But it's pointless
because we have a _real_ mechanism to return the validation reason,
which we should have been using.
In general, panicing like this is a very bad idea because it's
non-obvious and, in this case, completely undocumented.
This is now "FVM" native. Changes include:
1. Don't treat "trace" messages like off-chain messages. E.g., don't
include CIDs, versions, etc.
2. Include IPLD codecs where applicable.
3. Remove fields that aren't filled by the FVM (timing, some errors,
code locations, etc.).
- Event keys are now t1, t2, t3, t4 for topics; and d for data.
- ref-fvm no longer stores events in the blockstore for us. It just
returns events to the client, who is now responsible for handling
them as it wishes / according to its configuration.
- Add a flag to VMOpts to have the events AMT be written in the blockstore.
- Add a flag to the ChainStore to advertise to the rest of the system
if the ChainStore is storing events.
- Enable that flag if the EthRPC is enabled (can also add an explicit
configuration flag if wanted).
* feat: add support for generating tipset CIDs
(cherry-picked from feat/nv18-fevm)
* feat: fvm: add support for looking up past tipset CIDs
We do this by adding yet another "getter" to the VM that resolves an
epoch into a TipSetKey.
Co-authored-by: Kevin Li <ychiaoli18@users.noreply.github.com>