Repository: filecoin-project/lotus
Pull request #13006: feat!: actors bundle v16.0.1 & special handling for calibnet
Author: login: rvagg
Created: 2025-04-04T11:16:25Z | Merged: 2025-04-04T14:27:21Z

Not tested yet.

* Includes [builtin-actors v16.0.1](https://github.com/filecoin-project/builtin-actors/releases/tag/v16.0.1) bundles
* Includes a repack of the v16.0.1 tarball to include some of the v16.0.0 bundles:

```
$ tar tf build/actors/v16.tar.zst 
builtin-actors-butterflynet.car
builtin-actors-butterflynet-v16.0.0.car
builtin-actors-calibrationnet.car
builtin-actors-calibrationnet-v16.0.0.car
builtin-actors-caterpillarnet.car
builtin-actors-devnet.car
builtin-actors-devnet-v16.0.0.car
builtin-actors-mainnet.car
builtin-actors-testing.car
builtin-actors-testing-fake-proofs.car
```

* Adds a `UpgradeTockFixHeight`, set to `-1` in most places, particularly mainnet. It's only intended for calibnet, but can be run on butterflynet and devnet too since the v16.0.0 bundles are there.
* Includes a `upgradeActorsV16Fix` simple-migration which just does the actors code switch where `UpgradeTockFixHeight` is needed.
* Adds a special case to the vanilla v16 upgrade such that if `UpgradeTockFixHeight` is set, we do a v16.0.0 upgrade rather than the v16.0.1 one.

So, if this works as intended, it should be able to roll through the existing calibnet (and current butterflynet if that's still running) history with the right actors and switch when it's supposed to.

Unfortunately it's a little more complicated than previous ones because we're switching out the entire actors bundle. Perhaps we could have got away with just doing the evm actor, but all the CIDs changed because we updated a dependency so for completeness I'd prefer to go the whole hog.


Diff:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d1ba6b3a993..e2f825aafa2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@
 
 # UNRELEASED
 
+- feat!: actors bundle v16.0.1 & special handling for calibnet ([filecoin-project/lotus#13006](https://github.com/filecoin-project/lotus/pull/13006))
+
 # Node and Miner v1.32.1 / 2025-03-28
 
 The Lotus v1.32.1 release is a **MANDATORY patch release**, which will deliver the Filecoin network version 25, codenamed “Teep” 🦵. This release sets the upgrade epoch for the Mainnet to **Epoch 4867320 - 2025-04-10T23:00:00Z**, and correctly sets the F3 activationcontract address to `0xA19080A1Bcb82Bb61bcb9691EC94653Eb5315716`. You can find more details about how the F3 activation on Mainnet will be executed in the [F3 Activation Procedure](https://github.com/filecoin-project/go-f3/issues/920#issuecomment-2761448485).
diff --git a/build/actors/v16.tar.zst b/build/actors/v16.tar.zst
index 029471d9c09..0db49c3ae81 100644
Binary files a/build/actors/v16.tar.zst and b/build/actors/v16.tar.zst differ
diff --git a/build/buildconstants/params_2k.go b/build/buildconstants/params_2k.go
index 7b0614007dd..3e4c3d8099f 100644
--- a/build/buildconstants/params_2k.go
+++ b/build/buildconstants/params_2k.go
@@ -93,6 +93,8 @@ var UpgradeTeepInitialFilReserved = wholeFIL(1_400_000_000) // FIP-0100: 300M ->
 
 var UpgradeTockHeight = abi.ChainEpoch(300)
 
+var UpgradeTockFixHeight = abi.ChainEpoch(-28)
+
 var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
 	0: DrandQuicknet,
 }
diff --git a/build/buildconstants/params_butterfly.go b/build/buildconstants/params_butterfly.go
index 8668f3b802c..b71690922f5 100644
--- a/build/buildconstants/params_butterfly.go
+++ b/build/buildconstants/params_butterfly.go
@@ -79,6 +79,7 @@ var UpgradeTeepInitialFilReserved = wholeFIL(1_600_000_000) // FIP-0100: 300M ->
 
 // ??????
 const UpgradeTockHeight = UpgradeTeepHeight + builtin.EpochsInDay*2
+const UpgradeTockFixHeight = -29
 
 var ConsensusMinerMinPower = abi.NewStoragePower(2 << 30)
 var PreCommitChallengeDelay = abi.ChainEpoch(150)
diff --git a/build/buildconstants/params_calibnet.go b/build/buildconstants/params_calibnet.go
index d6950789aa5..aa5d7504a76 100644
--- a/build/buildconstants/params_calibnet.go
+++ b/build/buildconstants/params_calibnet.go
@@ -111,6 +111,8 @@ const UpgradeTuktukHeight abi.ChainEpoch = 2078794
 var UpgradeTuktukPowerRampDurationEpochs = uint64(builtin.EpochsInDay * 3)
 
 // 2025-03-26T23:00:00Z
+// Calibnet was upgraded at this height but a fix needed to be applied, this was
+// done at UpgradeTockFixHeight.
 const UpgradeTeepHeight abi.ChainEpoch = 2523454
 
 var UpgradeTeepInitialFilReserved = wholeFIL(1_200_000_000) // FIP-0100: 300M -> 1.2B FIL
@@ -119,6 +121,9 @@ var UpgradeTeepInitialFilReserved = wholeFIL(1_200_000_000) // FIP-0100: 300M ->
 // the new daily fee to pre-Teep sectors being extended. This is 90 days on mainnet.
 var UpgradeTockHeight abi.ChainEpoch = UpgradeTeepHeight + builtin.EpochsInDay*7
 
+// 2025-04-07T23:00:00Z
+const UpgradeTockFixHeight abi.ChainEpoch = 2558014
+
 var ConsensusMinerMinPower = abi.NewStoragePower(32 << 30)
 var PreCommitChallengeDelay = abi.ChainEpoch(150)
 
diff --git a/build/buildconstants/params_interop.go b/build/buildconstants/params_interop.go
index 648ee50d2f6..c080ee2e580 100644
--- a/build/buildconstants/params_interop.go
+++ b/build/buildconstants/params_interop.go
@@ -79,6 +79,8 @@ var UpgradeTeepInitialFilReserved = InitialFilReserved // FIP-0100: no change fo
 
 const UpgradeTockHeight abi.ChainEpoch = 100
 
+const UpgradeTockFixHeight abi.ChainEpoch = -29
+
 var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
 	0: DrandQuicknet,
 }
diff --git a/build/buildconstants/params_mainnet.go b/build/buildconstants/params_mainnet.go
index 7ebc5123397..574e65a1c5e 100644
--- a/build/buildconstants/params_mainnet.go
+++ b/build/buildconstants/params_mainnet.go
@@ -127,13 +127,15 @@ var UpgradeTuktukHeight abi.ChainEpoch = 4461240
 // Tuktuk migration. along with a RampStartEpoch matching the upgrade height.
 var UpgradeTuktukPowerRampDurationEpochs = uint64(builtin.EpochsInYear)
 
-// 2025-04-10T23:00:00Z
-var UpgradeTeepHeight = abi.ChainEpoch(4867320)
+var UpgradeTeepHeight = abi.ChainEpoch(9999999999)
 
 // This epoch, 90 days after Teep is the completion of FIP-0100 where actors will start applying
 // the new daily fee to pre-Teep sectors being extended.
 var UpgradeTockHeight = UpgradeTeepHeight + builtin.EpochsInDay*90
 
+// Only applied to calibnet which was already upgraded to Teep&Tock
+var UpgradeTockFixHeight = abi.ChainEpoch(-1)
+
 var UpgradeTeepInitialFilReserved = InitialFilReserved // FIP-0100: no change for mainnet
 
 var ConsensusMinerMinPower = abi.NewStoragePower(10 << 40)
diff --git a/build/buildconstants/params_testground.go b/build/buildconstants/params_testground.go
index a29fd614ee2..ab6f0879d3f 100644
--- a/build/buildconstants/params_testground.go
+++ b/build/buildconstants/params_testground.go
@@ -107,6 +107,7 @@ var (
 	UpgradeTeepHeight                    abi.ChainEpoch = -31
 	UpgradeTeepInitialFilReserved        *big.Int       = wholeFIL(300_000_000)
 	UpgradeTockHeight                    abi.ChainEpoch = -32
+	UpgradeTockFixHeight                 abi.ChainEpoch = -33
 
 	DrandSchedule = map[abi.ChainEpoch]DrandEnum{
 		0:                    DrandMainnet,
diff --git a/build/builtin_actors.go b/build/builtin_actors.go
index 45df1b5a5a3..757ab9f2e3a 100644
--- a/build/builtin_actors.go
+++ b/build/builtin_actors.go
@@ -29,6 +29,15 @@ import (
 //go:embed actors/*.tar.zst
 var embeddedBuiltinActorReleases embed.FS
 
+func BuggyBuiltinActorsMetadataForNetwork(network string, version actorstypes.Version) *BuiltinActorsMetadata {
+	for _, m := range buggyBuiltinActorsMetadata {
+		if m.Network == network && m.Version == version {
+			return m
+		}
+	}
+	return nil
+}
+
 func init() {
 	if BundleOverrides == nil {
 		BundleOverrides = make(map[actorstypes.Version]string)
@@ -44,13 +53,25 @@ func init() {
 		panic(err)
 	}
 
-	// The following code cid existed temporarily on the calibnet testnet, as a "buggy" storage miner actor implementation.
-	// We include them in our builtin bundle, but intentionally omit from metadata.
+	setupBuggyActorsMeta()
+}
+
+func setupBuggyActorsMeta() {
 	if buildconstants.NetworkBundle == "calibrationnet" {
+		// The following code cid existed temporarily on the calibnet testnet, as a "buggy" storage miner actor implementation.
+		// We include them in our builtin bundle, but intentionally omit from metadata.
 		actors.AddActorMeta("storageminer", cid.MustParse("bafk2bzacecnh2ouohmonvebq7uughh4h3ppmg4cjsk74dzxlbbtlcij4xbzxq"), actorstypes.Version12)
 		actors.AddActorMeta("storageminer", cid.MustParse("bafk2bzaced7emkbbnrewv5uvrokxpf5tlm4jslu2jsv77ofw2yqdglg657uie"), actorstypes.Version12)
 		actors.AddActorMeta("verifiedregistry", cid.MustParse("bafk2bzacednskl3bykz5qpo54z2j2p4q44t5of4ktd6vs6ymmg2zebsbxazkm"), actorstypes.Version13)
 	}
+
+	for _, m := range buggyBuiltinActorsMetadata {
+		if m.Network == buildconstants.NetworkBundle {
+			for name, c := range m.Actors {
+				actors.AddActorMeta(name, c, m.Version)
+			}
+		}
+	}
 }
 
 // UseNetworkBundle switches to a different network bundle, by name.
@@ -62,6 +83,7 @@ func UseNetworkBundle(netw string) error {
 		return err
 	}
 	buildconstants.NetworkBundle = netw
+	setupBuggyActorsMeta()
 	return nil
 }
 
@@ -203,6 +225,16 @@ func readEmbeddedBuiltinActorsMetadata(bundle string) ([]*BuiltinActorsMetadata,
 			root == cid.MustParse("bafy2bzacea4firkyvt2zzdwqjrws5pyeluaesh6uaid246tommayr4337xpmi") {
 			continue
 		}
+		// Check our buggy manifests and exclude this one if it's listed there.
+		var isBuggyManifest bool
+		for _, m := range buggyBuiltinActorsMetadata {
+			if root == m.ManifestCid {
+				isBuggyManifest = true
+			}
+		}
+		if isBuggyManifest {
+			continue
+		}
 		bundles = append(bundles, &BuiltinActorsMetadata{
 			Network:     name,
 			Version:     actorstypes.Version(version),
@@ -287,3 +319,129 @@ func GetEmbeddedBuiltinActorsBundle(version actorstypes.Version, networkBundleNa
 		return car, true
 	}
 }
+
+var buggyBuiltinActorsMetadata = []*BuiltinActorsMetadata{
+	{
+		// superseded by v16.0.1, included here for testing
+		Network:      "butterflynet",
+		Version:      16,
+		BundleGitTag: "v16.0.0",
+		ManifestCid:  cid.MustParse("bafy2bzacedn2h6huw7v2elmmdmpv4phdv4wjwgct7kcrrtdgz7jkjdm6uwa6k"),
+		Actors: map[string]cid.Cid{
+			"account":          cid.MustParse("bafk2bzacebtd4bl5htqzhnueqwchxjocw35bjfk4u34h33tkhl7l3ll7jjzp6"),
+			"cron":             cid.MustParse("bafk2bzacebuwt5zc2njcsm2fghlrnz3bfvu7s6hepl6leoql3w7zwxtfz5sx4"),
+			"datacap":          cid.MustParse("bafk2bzacearpj5e5mgj7wbqknzbr67z464mscraxa2r434i4vf2q5pfxli67y"),
+			"eam":              cid.MustParse("bafk2bzaceak462ytr36seexcpydhsxywzm3sz3loechzuuuifvtie72zgggkm"),
+			"ethaccount":       cid.MustParse("bafk2bzacecosm2oq5ymatrxkhfv722fawci6bfe5x2hz4gkzu7ewakc5cqfsi"),
+			"evm":              cid.MustParse("bafk2bzacebqxdknf6fbuqnop7jacz4rtarsji4xp6x4o46sabkdauckekpzvs"),
+			"init":             cid.MustParse("bafk2bzaceanzpajkcik5k4xt7nisqiazme2saivwl5um2que2g7jekr6feygm"),
+			"multisig":         cid.MustParse("bafk2bzaceayq4iq5l324rlxhrluetxr2rhkw653ple52qdqcc3pxnxgqfobky"),
+			"paymentchannel":   cid.MustParse("bafk2bzaceaifoxdlegtehjeow4sve6zuvvd6yqhwpwaim65hexv2gu7dt32ru"),
+			"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
+			"reward":           cid.MustParse("bafk2bzacecj4o5ea74dksbshkqf4yd2e4wipcnn6es5h4ltvdnmod3wrj7pei"),
+			"storagemarket":    cid.MustParse("bafk2bzacedjnmezgiaszypr2pvwrzuzijv6hoegdcz47yq3ym6rcguqw6altm"),
+			"storageminer":     cid.MustParse("bafk2bzacebervdatmrxkhke2z7vsmbw4bdcvimxfrvo75lchiobtuyhvklrq6"),
+			"storagepower":     cid.MustParse("bafk2bzacecq27y2fgtst57klr5g22nn6i25icey7uq6ofhouupmidkcoh34xa"),
+			"system":           cid.MustParse("bafk2bzaceb2l6ttyv3hnjexdzqaoo7nxsec3dtbo5h5yxdzz44ugq2onxofdu"),
+			"verifiedregistry": cid.MustParse("bafk2bzacedhrjtvtmygawmtfukkufpw5ju7wasxnfktxloc77gz3nj6mh45b2"),
+		},
+	},
+	{
+		// superseded by v16.0.1, included here because it was deployed live and needed before the fix upgrade
+		Network:      "calibrationnet",
+		Version:      16,
+		BundleGitTag: "v16.0.0",
+		ManifestCid:  cid.MustParse("bafy2bzacebc7zpsrihpyd2jdcvmegbbk6yhzkifre3hxtoul5wdxxklbwitry"),
+		Actors: map[string]cid.Cid{
+			"account":          cid.MustParse("bafk2bzaced4jhgt6peqc3m2lrclj347kjhwt3wjsdxrbt336m5kxcrkyyfg4o"),
+			"cron":             cid.MustParse("bafk2bzacecuvdunhtjo52tpxt4ge3ue7mpejmv3c3loqf6iafu5e2jlybvy5a"),
+			"datacap":          cid.MustParse("bafk2bzacebs5hd67p3x2ohf357xaebz57o3ffeuexndaptn5g3usgatd32icq"),
+			"eam":              cid.MustParse("bafk2bzacedbazvsncva5hfb72jyipsebzlo6sgjbfnf6m4p4xhagzoekzgy34"),
+			"ethaccount":       cid.MustParse("bafk2bzacedepzmyi2sbw7fgblhzhz75oovy6trbsfnxsbsqdh6te5cchgptiq"),
+			"evm":              cid.MustParse("bafk2bzacedomvviwbdddcfm73uaedqeyuiyswdt3plq3v74uvbo2xvrzyphio"),
+			"init":             cid.MustParse("bafk2bzacednq5wfauimq4shz2xynzshatk54odj45gp6fkw77gy25fpmhu5oc"),
+			"multisig":         cid.MustParse("bafk2bzaceb4bfxfccm5v6qnecp7ayalitk2fvu6ezavcrd7lcb4uohrsaeo32"),
+			"paymentchannel":   cid.MustParse("bafk2bzaceaia5ufr2wyzbasrx6vcfeqjsnaqajmlrnp763cesa7pqvddaubyu"),
+			"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
+			"reward":           cid.MustParse("bafk2bzacecgorusdavjd42ktijbjh4veu2y6isnlfyys2f5jylnc2c6yll3ju"),
+			"storagemarket":    cid.MustParse("bafk2bzacea63rezmai4qwvzlc3hmcjn4eurkcec7cjqoih6vztnkwjvvlx2we"),
+			"storageminer":     cid.MustParse("bafk2bzaceax4mv3wzp7jfjpsp2lklujzpjtskpn6lsn743a6ljpgzo2qjdncq"),
+			"storagepower":     cid.MustParse("bafk2bzaceddedx24uzsyx6yh63aoabx66caaariopsa5gzn2x6yme7dv5s7cg"),
+			"system":           cid.MustParse("bafk2bzacecfol5vcebbl7dqkat7kt65bgqwqvn7fxnakg7qvpokce6ulemo3k"),
+			"verifiedregistry": cid.MustParse("bafk2bzacedqpwyprkgwdbcqahgrzuoul42gd3hvgn54fxyqjgtwmmlquycuok"),
+		},
+	},
+	{
+		// superseded by v16.0.1, included here for testing
+		Network:      "devnet",
+		Version:      16,
+		BundleGitTag: "v16.0.0",
+		ManifestCid:  cid.MustParse("bafy2bzaceafzrqb6adck3o3mbyd33gtp2272f577hidqyo7cszg2ksn5sebh2"),
+		Actors: map[string]cid.Cid{
+			"account":          cid.MustParse("bafk2bzacedqy7umr3bmmkrepi3ostdxrlxaln33wecqllsz5eqgdwzb2oqov2"),
+			"cron":             cid.MustParse("bafk2bzacebrbwcwi3jtplab7jajkccgcqzyvpobypfhomf45ujxpgwehipoia"),
+			"datacap":          cid.MustParse("bafk2bzaceccxwbelrowdo47xfgd7ldj7trvh7qvq5xgnhxdnw2zdlml5ahzvc"),
+			"eam":              cid.MustParse("bafk2bzacebjzmdd7vdjfdrrxzzyu34gz4jzropcyzrc7og4lt2mczipwoz3pc"),
+			"ethaccount":       cid.MustParse("bafk2bzaceb7zgpsi6mwc7asrpxyj7zd6rcsuhraekbonodegxhuli2mwdmuw2"),
+			"evm":              cid.MustParse("bafk2bzacea5shmgqycbwuvazd2fika4erfbbyxomsnircps2nqk2o7oxtkvdy"),
+			"init":             cid.MustParse("bafk2bzacedoyhv5wergunblh2ga65rxbwowhtac4vdz7woovkponmmd55f244"),
+			"multisig":         cid.MustParse("bafk2bzacedyid3docv7i2wx4sciua64ndrbfqbk3werhuruehedhj6gj6hvdg"),
+			"paymentchannel":   cid.MustParse("bafk2bzaceab556e24d4qzptdownttepcrgljrfvheykwf2kwxzomk5gip3qka"),
+			"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
+			"reward":           cid.MustParse("bafk2bzacecusrwhrdsndyokbordb7khms3mjvkohnzxst6a3intb52skg56vw"),
+			"storagemarket":    cid.MustParse("bafk2bzaceciw5btcu55jguj7yfpgd3ecrwlu7hwhdacbug56htiseitbohw6m"),
+			"storageminer":     cid.MustParse("bafk2bzacead3ptx4vq2e7x3q6lm5cpe6lbtp44shxon23xhmahvvfjqbotpny"),
+			"storagepower":     cid.MustParse("bafk2bzacecxjuml3buylyyg6u2k6dy3ek4apqlbwbk4npgosxc2cls7ywosow"),
+			"system":           cid.MustParse("bafk2bzaceaonvsrizf3fvy2tgruqjgymtfvkzejmooui2w2stpi7teibtz4wm"),
+			"verifiedregistry": cid.MustParse("bafk2bzaceb3qajgx4ichpmgnxjeofv3pg3qwagrsgkimoi6sinjnd6mydiy2o"),
+		},
+	},
+	{
+		Network:      "testing",
+		Version:      16,
+		BundleGitTag: "v16.0.0",
+		ManifestCid:  cid.MustParse("bafy2bzacea35za4a3ljlupfn2wxdzwz5py6vbu267s5p4p4uvdoqyhhggbbfq"),
+		Actors: map[string]cid.Cid{
+			"account":          cid.MustParse("bafk2bzacedzuxjcmialu22l24x6z5x2j3lxsxxruxmhvhpkttkvlkrjulkbyq"),
+			"cron":             cid.MustParse("bafk2bzacebgi4wwp2dr4z4wtyziz4mn7ipglpez2ghxzh76sbapz4isvxfbc4"),
+			"datacap":          cid.MustParse("bafk2bzacechuwtorkaqcmfgztggv5khbx36xyqw5emxibh6qd7si4pdg6i22q"),
+			"eam":              cid.MustParse("bafk2bzaceddukui4pbnrfwcu7zv5acvbhgvclblxiwph2utpndb7qqj3oll5o"),
+			"ethaccount":       cid.MustParse("bafk2bzaceafucqy3me7ellhrd5jla2a5wqo652agx4nb6467po643zgvy5d4w"),
+			"evm":              cid.MustParse("bafk2bzacedmaykyptdfzwkbui6ptoueqsoj3wubtexdeumh7i7qsnlfmreetm"),
+			"init":             cid.MustParse("bafk2bzacecauzck4cmqcbjzsz7jyugig5xcqhuj4lrkbykewkg3pineperxg6"),
+			"multisig":         cid.MustParse("bafk2bzaceakkpute3br5t77lkfh4qi7ezzafrpoen7xngf46zjvfuaok3ffqi"),
+			"paymentchannel":   cid.MustParse("bafk2bzacebwedmnkgpxta4y4pc3fjn5dazcjmlveztmv7gh6czi7zkrx6t4do"),
+			"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
+			"reward":           cid.MustParse("bafk2bzaceac3ohau7sxi3xotwsi5bzo75lg74nwdmrxmx5rfnmkp7mo26uxsk"),
+			"storagemarket":    cid.MustParse("bafk2bzacebn5ixsfxu36r2dbtvfp4ineu4dnhsvqm4qcpiph4cc6knqqkthto"),
+			"storageminer":     cid.MustParse("bafk2bzacec3alndcdemx26bl3svrbcxtxpdjnmsfuhrawhx5ldd2dlfzzldq4"),
+			"storagepower":     cid.MustParse("bafk2bzaceb4iqnikgmwuqlzzpb3lfl5k4glt32vgfxebu7h4r6zpzmyaxol7i"),
+			"system":           cid.MustParse("bafk2bzaceajnotcpt6sx2afno7fjppp6wzrh4dgu2meeoptcjkorunvshi2hw"),
+			"verifiedregistry": cid.MustParse("bafk2bzaceazuqbqpozviewg7obtnhlq6tfewjl5vp5wdvkjxdlqbpkvig3zfu"),
+		},
+	},
+	{
+		Network:      "testing-fake-proofs",
+		Version:      16,
+		BundleGitTag: "v16.0.0",
+		ManifestCid:  cid.MustParse("bafy2bzacec4tth5r62ny75wt27tyzgzc4nc3zte6cxainlrxs54g7yvmlezs4"),
+		Actors: map[string]cid.Cid{
+			"account":          cid.MustParse("bafk2bzacedzuxjcmialu22l24x6z5x2j3lxsxxruxmhvhpkttkvlkrjulkbyq"),
+			"cron":             cid.MustParse("bafk2bzacebgi4wwp2dr4z4wtyziz4mn7ipglpez2ghxzh76sbapz4isvxfbc4"),
+			"datacap":          cid.MustParse("bafk2bzacechuwtorkaqcmfgztggv5khbx36xyqw5emxibh6qd7si4pdg6i22q"),
+			"eam":              cid.MustParse("bafk2bzaceddukui4pbnrfwcu7zv5acvbhgvclblxiwph2utpndb7qqj3oll5o"),
+			"ethaccount":       cid.MustParse("bafk2bzaceafucqy3me7ellhrd5jla2a5wqo652agx4nb6467po643zgvy5d4w"),
+			"evm":              cid.MustParse("bafk2bzacedmaykyptdfzwkbui6ptoueqsoj3wubtexdeumh7i7qsnlfmreetm"),
+			"init":             cid.MustParse("bafk2bzacecauzck4cmqcbjzsz7jyugig5xcqhuj4lrkbykewkg3pineperxg6"),
+			"multisig":         cid.MustParse("bafk2bzaceai472rp5ba3xputcmaoqlleasxifzgjcnmthcnqpmgb24no2tdhk"),
+			"paymentchannel":   cid.MustParse("bafk2bzacebwedmnkgpxta4y4pc3fjn5dazcjmlveztmv7gh6czi7zkrx6t4do"),
+			"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
+			"reward":           cid.MustParse("bafk2bzaceac3ohau7sxi3xotwsi5bzo75lg74nwdmrxmx5rfnmkp7mo26uxsk"),
+			"storagemarket":    cid.MustParse("bafk2bzacebn5ixsfxu36r2dbtvfp4ineu4dnhsvqm4qcpiph4cc6knqqkthto"),
+			"storageminer":     cid.MustParse("bafk2bzaceaajmyyjy6tntcxngtc55nero4a4halejajpmeioub6fyznbqni74"),
+			"storagepower":     cid.MustParse("bafk2bzaceb4iqnikgmwuqlzzpb3lfl5k4glt32vgfxebu7h4r6zpzmyaxol7i"),
+			"system":           cid.MustParse("bafk2bzaceajnotcpt6sx2afno7fjppp6wzrh4dgu2meeoptcjkorunvshi2hw"),
+			"verifiedregistry": cid.MustParse("bafk2bzaceazuqbqpozviewg7obtnhlq6tfewjl5vp5wdvkjxdlqbpkvig3zfu"),
+		},
+	},
+}
diff --git a/build/builtin_actors_gen.go b/build/builtin_actors_gen.go
index a00a594b695..69fc3bc4712 100644
--- a/build/builtin_actors_gen.go
+++ b/build/builtin_actors_gen.go
@@ -7,9 +7,8 @@ import (
 )
 
 var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
-	Network: "butterflynet",
-	Version: 8,
-
+	Network:     "butterflynet",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzaceba5qgs4z3imhlxwds5vamahngatvuuglbv5yl3ftfiosj6ud5chs"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebd5zetyjtragjwrv2nqktct6u2pmsi4eifbanovxohx3a7lszjxi"),
@@ -30,9 +29,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebu4joy25gneu2qv3qfm3ktakzalndjrbhekeqrqk3zhotv6nyy2g"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 9,
-
+	Network:     "butterflynet",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzacec35by4erhcdgcsgzp7yb3j57utydlxxfc73m3k5pep67ehvvyv6i"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceajsdln7v4chxqoukiw7lxw6aexg5qdsaex2hgelz2sbu24iblhzg"),
@@ -49,9 +47,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacecjkesz766626ab4svnzpq3jfs26a75vfktlfaku5fjdao2eyiqyq"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 10,
-
+	Network:     "butterflynet",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzaceckjhsggacixv2d377zfdcnuio4hzkveprio3xnhm3gohi3zy3zco"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedkt3uzgugcsdrcsyfvizcpyr5eshltmienbyhjne2t7t3ktkihny"),
@@ -72,9 +69,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceavue3zekq4wmvttck2vgxlcensrsgh5niu5qhna2owejycorftcc"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 11,
-
+	Network:     "butterflynet",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzaceaiy4dsxxus5xp5n5i4tjzkb7sc54mjz7qnk2efhgmsrobjesxnza"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecfdqb7p3jakhaa3cqnzpt7hxmhghrbxvafsylqno3febx55fnidw"),
@@ -95,9 +91,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceb37hxeuoo5rgf6ansrdl2ykm5v5zp6kireubn4orcopr67jbxv6k"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 12,
-
+	Network:     "butterflynet",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzacectxvbk77ntedhztd6sszp2btrtvsmy7lp2ypnrk6yl74zb34t2cq"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebp7anjdtg2sohyt6lromx4xs7nujtwdfcsffnptphaayabx7ysxs"),
@@ -118,9 +113,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedv2irkql7nil3w5v3ohqq3e54w62pxeoppjmaktzokolaaoh5ksu"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 13,
-
+	Network:     "butterflynet",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzacec75zk7ufzwx6tg5avls5fxdjx5asaqmd2bfqdvkqrkzoxgyflosu"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedl533kwbzouqxibejpwp6syfdekvmzy4vmmno6j4iaydbdmv4xek"),
@@ -141,9 +135,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebs5muoq7ft2wgqojhjio7a4vltbyprqkmlr43ojlzbil4nwvj3jg"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 14,
-
+	Network:     "butterflynet",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacecmkqezl3a5klkzz7z4ou4jwqk4zzd3nvz727l4qh44ngsxtxdblu"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceazutruyfvvqxgp5qoneq36uv6yethps2bonil5psy2vivl5j2hks"),
@@ -164,9 +157,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebj3znhdpxqjgvztrv3petqwdkvrefg4j6lrp3n7wfrkdoan4os42"),
 	},
 }, {
-	Network: "butterflynet",
-	Version: 15,
-
+	Network:     "butterflynet",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzacearjal5rsmzloz3ny7aoju2rgw66wgxdrydgg27thcsazbmf5qihq"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceapjxl4kobnxn267u42nh2feouubkxcm62vzrk2nrfkqmtz6rgfw4"),
@@ -189,30 +181,29 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "butterflynet",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzacedn2h6huw7v2elmmdmpv4phdv4wjwgct7kcrrtdgz7jkjdm6uwa6k"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzacebtd4bl5htqzhnueqwchxjocw35bjfk4u34h33tkhl7l3ll7jjzp6"),
-		"cron":             cid.MustParse("bafk2bzacebuwt5zc2njcsm2fghlrnz3bfvu7s6hepl6leoql3w7zwxtfz5sx4"),
-		"datacap":          cid.MustParse("bafk2bzacearpj5e5mgj7wbqknzbr67z464mscraxa2r434i4vf2q5pfxli67y"),
-		"eam":              cid.MustParse("bafk2bzaceak462ytr36seexcpydhsxywzm3sz3loechzuuuifvtie72zgggkm"),
-		"ethaccount":       cid.MustParse("bafk2bzacecosm2oq5ymatrxkhfv722fawci6bfe5x2hz4gkzu7ewakc5cqfsi"),
-		"evm":              cid.MustParse("bafk2bzacebqxdknf6fbuqnop7jacz4rtarsji4xp6x4o46sabkdauckekpzvs"),
-		"init":             cid.MustParse("bafk2bzaceanzpajkcik5k4xt7nisqiazme2saivwl5um2que2g7jekr6feygm"),
-		"multisig":         cid.MustParse("bafk2bzaceayq4iq5l324rlxhrluetxr2rhkw653ple52qdqcc3pxnxgqfobky"),
-		"paymentchannel":   cid.MustParse("bafk2bzaceaifoxdlegtehjeow4sve6zuvvd6yqhwpwaim65hexv2gu7dt32ru"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzaceda5lc7qrwp2hdm6s6erppwuydsfqrhbgld7juixalk342inqimbo"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzacea4fxakv3zww2jb7aaa4v6w7usbcxho7kpc6xpho66ltny72vnzki"),
+		"cron":             cid.MustParse("bafk2bzaceckhx3amza3xyxvw4x7xg7w7itsokvweiylys2mlcvvvi64uhyfhi"),
+		"datacap":          cid.MustParse("bafk2bzacecx6cqocsn6e3ouq4tgumrlbazrnydp7bo2rxrtfgbd7soerqplxs"),
+		"eam":              cid.MustParse("bafk2bzaced54tzjl37qsxbb2cml6l2hlupaplzdrdamq7kxihcikbd4goezg4"),
+		"ethaccount":       cid.MustParse("bafk2bzacedtz6bt2fex7xdm2tmov5kwexoayesguhx5i3ohjyw23sbbwrbokg"),
+		"evm":              cid.MustParse("bafk2bzaced2i4ez5megwfrlxxv7akcf27hu2fezj3ipiy66skvagvzc5jtxlo"),
+		"init":             cid.MustParse("bafk2bzaced6lrgkw4dnxyc72beeyct4tgjup6syt7j2llvlwtkqi3eb5ncyzu"),
+		"multisig":         cid.MustParse("bafk2bzacebwgwsjsglawtmvmb4fmvagmyjfjvky2mkipk3ysqt2cylrut4pna"),
+		"paymentchannel":   cid.MustParse("bafk2bzaceakx75ascqt3cpgcgjjjo3lzj6etlit7rvy5r2rnpg35pn5lxdkho"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzacecj4o5ea74dksbshkqf4yd2e4wipcnn6es5h4ltvdnmod3wrj7pei"),
-		"storagemarket":    cid.MustParse("bafk2bzacedjnmezgiaszypr2pvwrzuzijv6hoegdcz47yq3ym6rcguqw6altm"),
-		"storageminer":     cid.MustParse("bafk2bzacebervdatmrxkhke2z7vsmbw4bdcvimxfrvo75lchiobtuyhvklrq6"),
-		"storagepower":     cid.MustParse("bafk2bzacecq27y2fgtst57klr5g22nn6i25icey7uq6ofhouupmidkcoh34xa"),
-		"system":           cid.MustParse("bafk2bzaceb2l6ttyv3hnjexdzqaoo7nxsec3dtbo5h5yxdzz44ugq2onxofdu"),
-		"verifiedregistry": cid.MustParse("bafk2bzacedhrjtvtmygawmtfukkufpw5ju7wasxnfktxloc77gz3nj6mh45b2"),
+		"reward":           cid.MustParse("bafk2bzaceagyezzhrgwp55i6zpj3qkyprebhdmszn725kdl73z6awpse2ek4m"),
+		"storagemarket":    cid.MustParse("bafk2bzacebrch7gi6wmzgipnx4jiwgpq2ogul6fkgfkqefoujwxsfp7i3wsic"),
+		"storageminer":     cid.MustParse("bafk2bzacebtzpyy56k4ehwgxbil5ryegys4qgbw6dnsnk3y7qf5y7le2hedoe"),
+		"storagepower":     cid.MustParse("bafk2bzacecoi2bu2iipdnkx3pvjbe4d5pbmtcef4lxsdbv7hchgnbbvb6sy6k"),
+		"system":           cid.MustParse("bafk2bzacebxmdwaw5rm2apbfqgl2yt25n4abpxhwoy3xou6j6z7aiozsvm722"),
+		"verifiedregistry": cid.MustParse("bafk2bzaceahaut5mk7ndk3yi3uvsalpqpv7h7cdjl7vhkyxmkcypvq6ynn2mk"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 8,
-
+	Network:     "calibrationnet",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacedrdn6z3z7xz7lx4wll3tlgktirhllzqxb766dxpaqp3ukxsjfsba"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecruossn66xqbeutqx5r4k2kjzgd43frmwd4qkw6haez44ubvvpxo"),
@@ -228,9 +219,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceaihibfu625lbtzdp3tcftscshrmbgghgrc7kzqhxn4455pycpdkm"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 9,
-
+	Network:     "calibrationnet",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzacedbedgynklc4dgpyxippkxmba2mgtw7ecntoneclsvvl4klqwuyyy"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceavfgpiw6whqigmskk74z4blm22nwjfnzxb4unlqz2e4wg3c5ujpw"),
@@ -247,9 +237,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebh7dj6j7yi5vadh7lgqjtq42qi2uq4n6zy2g5vjeathacwn2tscu"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 10,
-
+	Network:     "calibrationnet",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzaced25ta3j6ygs34roprilbtb3f6mxifyfnm7z7ndquaruxzdq3y7lo"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebhfuz3sv7duvk653544xsxhdn4lsmy7ol7k6gdgancyctvmd7lnq"),
@@ -270,9 +259,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacec67wuchq64k7kgrujguukjvdlsl24pgighqdx5vgjhyk6bycrwnc"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 11,
-
+	Network:     "calibrationnet",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzacedhuowetjy2h4cxnijz2l64h4mzpk5m256oywp4evarpono3cjhco"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebor5mnjnsav34cmm5pcd3dy4wubbv4wtcrvba7depy3sct7ie4sy"),
@@ -293,9 +281,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceceoo5jlom2zweh7kpye2vkj33wgqnkjshlsw2neemqkfg5g2rmvg"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 12,
-
+	Network:     "calibrationnet",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzacednzb3pkrfnbfhmoqtb3bc6dgvxszpqklf3qcc7qzcage4ewzxsca"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacechwwxdqvggkdylm37zldjsra2ivkdzwp7fee56bzxbzs544wv6u6"),
@@ -316,9 +303,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceavldupmf7bimeeacs67z5xdfdlfca6p7sn6bev3mt5ggepfqvhqo"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 13,
-
+	Network:     "calibrationnet",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzacect4ktyujrwp6mjlsitnpvuw2pbuppz6w52sfljyo4agjevzm75qs"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceb3j36ri5y5mfklgp5emlvrms6g4733ss2j3l7jismrxq6ng3tcc6"),
@@ -339,9 +325,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebj2zdquagzy2xxn7up574oemg3w7ed3fe4aujkyhgdwj57voesn2"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 14,
-
+	Network:     "calibrationnet",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacebq3hncszqpojglh2dkwekybq4zn6qpc4gceqbx36wndps5qehtau"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaced5ecfm56dvtw26q56j4d32yoccyd7ggxn3qdki2enxpqqav45ths"),
@@ -362,9 +347,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceczw2kp6gjjdcjbso7mewp7guik7gr525pal6dotdja2lrct6ok3c"),
 	},
 }, {
-	Network: "calibrationnet",
-	Version: 15,
-
+	Network:     "calibrationnet",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzaceax5zkysst7vtyup4whdxwzlpnaya3qp34rnoi6gyt4pongps7obw"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecwdkoknhok52hlddoetdkqfwohhv4bx6csu3x6o7aduryv5ufssu"),
@@ -387,30 +371,29 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "calibrationnet",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzacebc7zpsrihpyd2jdcvmegbbk6yhzkifre3hxtoul5wdxxklbwitry"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzaced4jhgt6peqc3m2lrclj347kjhwt3wjsdxrbt336m5kxcrkyyfg4o"),
-		"cron":             cid.MustParse("bafk2bzacecuvdunhtjo52tpxt4ge3ue7mpejmv3c3loqf6iafu5e2jlybvy5a"),
-		"datacap":          cid.MustParse("bafk2bzacebs5hd67p3x2ohf357xaebz57o3ffeuexndaptn5g3usgatd32icq"),
-		"eam":              cid.MustParse("bafk2bzacedbazvsncva5hfb72jyipsebzlo6sgjbfnf6m4p4xhagzoekzgy34"),
-		"ethaccount":       cid.MustParse("bafk2bzacedepzmyi2sbw7fgblhzhz75oovy6trbsfnxsbsqdh6te5cchgptiq"),
-		"evm":              cid.MustParse("bafk2bzacedomvviwbdddcfm73uaedqeyuiyswdt3plq3v74uvbo2xvrzyphio"),
-		"init":             cid.MustParse("bafk2bzacednq5wfauimq4shz2xynzshatk54odj45gp6fkw77gy25fpmhu5oc"),
-		"multisig":         cid.MustParse("bafk2bzaceb4bfxfccm5v6qnecp7ayalitk2fvu6ezavcrd7lcb4uohrsaeo32"),
-		"paymentchannel":   cid.MustParse("bafk2bzaceaia5ufr2wyzbasrx6vcfeqjsnaqajmlrnp763cesa7pqvddaubyu"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzacecqtwq6hjhj2zy5gwjp76a4tpcg2lt7dps5ycenvynk2ijqqyo65e"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzacecvd4xzbqbviaydq5r2h2jdgcn6bh5nklvohgvorznpstmir7l6dw"),
+		"cron":             cid.MustParse("bafk2bzaced6fxiw4g4faqhxxsetzcxlcyyjlwtzqiuwsx5zd2krtadxbiailg"),
+		"datacap":          cid.MustParse("bafk2bzaceabx5td6pj4btk6i7jknz5utzufcmq2n6winpxlvpl42u2fktfi66"),
+		"eam":              cid.MustParse("bafk2bzacebeppkeq2gvro6hln34zd6z37s5vv5naa4x6j6jifkxnfsahxspak"),
+		"ethaccount":       cid.MustParse("bafk2bzaceaxurgmyscg4oevz7nzloxra5je2omeogj5icprnopie3j64qgjii"),
+		"evm":              cid.MustParse("bafk2bzaceaauqz2332lqb6cvprlinm4ot4ge4ugkyadgz7qsrukaeyucichlc"),
+		"init":             cid.MustParse("bafk2bzacedsfrhdsqolmmbw2pmhe6yv57xifdu7ohcybguzhlt7xjeqpbtkak"),
+		"multisig":         cid.MustParse("bafk2bzacedtukutyifkwelun4nq7asowfzmdyrefmycc3xphajdlauti2w7zq"),
+		"paymentchannel":   cid.MustParse("bafk2bzaceaftvzd5t2wkmmsgs2lzndoqpb2fkhpzdafnuhxiw2abzzevdc6me"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzacecgorusdavjd42ktijbjh4veu2y6isnlfyys2f5jylnc2c6yll3ju"),
-		"storagemarket":    cid.MustParse("bafk2bzacea63rezmai4qwvzlc3hmcjn4eurkcec7cjqoih6vztnkwjvvlx2we"),
-		"storageminer":     cid.MustParse("bafk2bzaceax4mv3wzp7jfjpsp2lklujzpjtskpn6lsn743a6ljpgzo2qjdncq"),
-		"storagepower":     cid.MustParse("bafk2bzaceddedx24uzsyx6yh63aoabx66caaariopsa5gzn2x6yme7dv5s7cg"),
-		"system":           cid.MustParse("bafk2bzacecfol5vcebbl7dqkat7kt65bgqwqvn7fxnakg7qvpokce6ulemo3k"),
-		"verifiedregistry": cid.MustParse("bafk2bzacedqpwyprkgwdbcqahgrzuoul42gd3hvgn54fxyqjgtwmmlquycuok"),
+		"reward":           cid.MustParse("bafk2bzaceb27rdgwaxsc3byewbhyy2z5xmlatfgzhmzaynzgdovadoxspzkqm"),
+		"storagemarket":    cid.MustParse("bafk2bzacebsn3npegbog3dytzvx6ewliykjkrzuzzrxphe3dmokbou3d4knt2"),
+		"storageminer":     cid.MustParse("bafk2bzacedihkoywi2of6yyrsduumajikdd2gbipbbe77m4mlxgez6f2nsz26"),
+		"storagepower":     cid.MustParse("bafk2bzacec2qeuhmhowlscnmjfystimyvgmcuj6vfv6arykw3qj53ibcgytbw"),
+		"system":           cid.MustParse("bafk2bzacecm546a5qoxncfggdhnxx6xpzks5gvblgi6w2fntr3sq4kgal62wk"),
+		"verifiedregistry": cid.MustParse("bafk2bzacecz57hshtuixafiv2hwve7gidcbsp5tauc237fencal6vzie5jb6w"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 8,
-
+	Network:     "caterpillarnet",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacebsdvrxmdajiyxq2mxxxppvg2zwvqjzz3pgbsxwh6pvdcjofpmnxw"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedfms6w3ghqtljpgsfuiqa6ztjx7kcuin6myjezj6rypj3zjbqms6"),
@@ -431,9 +414,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebzndvdqtdck2y35smcxezldgh6nm6rbkj3g3fmiknsgg2uah235y"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 9,
-
+	Network:     "caterpillarnet",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzacebsdvrxmdajiyxq2mxxxppvg2zwvqjzz3pgbsxwh6pvdcjofpmnxw"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedfms6w3ghqtljpgsfuiqa6ztjx7kcuin6myjezj6rypj3zjbqms6"),
@@ -454,9 +436,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebzndvdqtdck2y35smcxezldgh6nm6rbkj3g3fmiknsgg2uah235y"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 10,
-
+	Network:     "caterpillarnet",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzaceajftd7jawqnwf4kzkotksrwy6ag7mu2apkvypzrrmxboheuum5oi"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecsbx4tovnr5x2ifcpqbpx33oht74mgtvmaauzrqcq2wnm7prr7ak"),
@@ -477,9 +458,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacecdhw6x7dfrxfysmn6tdbn2ny464omgqppxhjuawxauscidppd7pc"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 11,
-
+	Network:     "caterpillarnet",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzacebexc2jgzwr5ngn6jdnkwdqwwmcapajuypdgvopoe6bnvp4yxm4o2"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceanjiq5m3feytue5m7hhxfkob2ofg2greoct5tr77reuhrjglo66g"),
@@ -500,9 +480,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedaws3or3twy45ltcxucgvqijsje4x675ph6vup2w35smlfneamno"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 12,
-
+	Network:     "caterpillarnet",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzacebxiub6qsy67asvl5cx33x5vjbuqinalmf3xtnbmokxmmklzdkvei"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecereuhejfvodut5357cai4lmhsyr7uenhcxvmw6jpmhe6auuly32"),
@@ -523,9 +502,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacecduww5pirr7dvaijjijw4gf6ygf7vipgxh4scvv6vseo46gueb46"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 13,
-
+	Network:     "caterpillarnet",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzacedu7kk2zngxp7y3lynhtaht6vgadgn5jzkxe5nuowtwzasnogx63w"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecro3uo6ypqhfzwdhnamzcole5qmhrbkx7qny6t2qsrcpqxelt6s2"),
@@ -546,9 +524,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebnkdt42mpf5emypo6iroux3hszfh5yt54v2mmnnura3ketholly4"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 14,
-
+	Network:     "caterpillarnet",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacecr6g2co4zkdvrsbz2z7wh44o6hrl3rpbgnlhe52772hhjs43vxge"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecaoykugysdikvzptp5jc6qzhfxv3tsy7eggoabfk34jc6ozr3nju"),
@@ -569,9 +546,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedxwgmgffeapq4nffplapb5mixkrm2vosmc2i3fxcye5dookiqubu"),
 	},
 }, {
-	Network: "caterpillarnet",
-	Version: 15,
-
+	Network:     "caterpillarnet",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzaceaw24gctg3dx6pzrymhggsp32c7mofjscwnylk4pzsqmilolygwhi"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecmm4ymqjjbonet2yxe7l4jqg3uphcxmiz6vwyza4d4tfiy7hu3j4"),
@@ -594,30 +570,29 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "caterpillarnet",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzacea6y67oqqokphvqdf4rruflrwzxyuquq2fgb34zjnh67nsk53is6k"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzaceb22mvrw4jzf2c4cypor3nbaap2lzkhpim6ny7rhd5pysazcpwet4"),
-		"cron":             cid.MustParse("bafk2bzacedvsp34iu4vwueh5jcmiwfhulnkudzrlprgcxj5tkp75bphfl7xus"),
-		"datacap":          cid.MustParse("bafk2bzacedwsn6imbcvvbt5rc2oh74psehmbjje74otqkfeacx67lzdaog5bu"),
-		"eam":              cid.MustParse("bafk2bzacecurnymlfgfvelucrsp4rty2zgmurc3csfgyl64inyrebi5kh4vcq"),
-		"ethaccount":       cid.MustParse("bafk2bzaceada6lp3x2zuv5gye5jrfirpmw5boruozkuq2nakjzlt36gmbnvm2"),
-		"evm":              cid.MustParse("bafk2bzacebxvd6iso22ij46dthgycgjpo7d6o3rh5ak4wywmpxewnx3hkosz2"),
-		"init":             cid.MustParse("bafk2bzacebvlmojdxhl3t2tu2bypx4o4bsmth4p2vl2kaerjp7relgvqetk3c"),
-		"multisig":         cid.MustParse("bafk2bzacec7scokqkn4lpjwjxy37ip7iwj64bktznl4p3atz42rislxkjax5e"),
-		"paymentchannel":   cid.MustParse("bafk2bzaceclexkwpiklt2fxa4mnqwhzeq2iwju3lqvaf2n7kqjygucvnsjdeq"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzacedrq643mgak6w3nbmz3wvcgjrirdoq7y6l3xgwijgirffgaxf6yqg"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzacedza75txhwk3ztrl2m5uh7efogxbm7pj5rzqkxj2y2r3w5ixorz7i"),
+		"cron":             cid.MustParse("bafk2bzaceddiyznwu7kejp5l7yevyt76gptqquk6dmi7w3y7dd5zrdo2lzcci"),
+		"datacap":          cid.MustParse("bafk2bzacecooyqdimvocqtbgmqrje655orzjlk4qrp45eht54sopocisx4sxe"),
+		"eam":              cid.MustParse("bafk2bzaceaqqtglbvo7zkxhghbe6yeukrcyh2branruehey7nxhyyksaiblxg"),
+		"ethaccount":       cid.MustParse("bafk2bzacedrpqany3j5tvzff4a6xssndoypfodd3ldfn3yq5nbuazafbjegoc"),
+		"evm":              cid.MustParse("bafk2bzacecctqd57nqtjvqyawpfemnp23l4gcwff7afozc3ybpppkgtqqcer2"),
+		"init":             cid.MustParse("bafk2bzacecrruqv2aut3g32u555ufsfp37tmczoz6varsomatc3ylzydosi3m"),
+		"multisig":         cid.MustParse("bafk2bzaceadivjkiocpidioxr2t2omeylbll3thk5obdxbcyej7l2nauziutu"),
+		"paymentchannel":   cid.MustParse("bafk2bzacedbfec2xl6vuusd2klq5b3aljuipkn6hutaxkc4uhaj6zvzb754m6"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzacebdc4f4ryhjlwtijwcy2twpn3kcfznldzjfrqvb7oxmjgiydkkr3q"),
-		"storagemarket":    cid.MustParse("bafk2bzaceavaehtdehujgz7rqy6qzti4znal2znp3dd3upnw5llo3rpyabsc2"),
-		"storageminer":     cid.MustParse("bafk2bzaceblob7ejdvkqotry3udhf4rkouokhxffcmpkrfhkjifehvdjviwaq"),
-		"storagepower":     cid.MustParse("bafk2bzacebgu3ped7tob5el7feur6ukhssmzbtrf3fukpeglncahgrmjhknsk"),
-		"system":           cid.MustParse("bafk2bzaceaignjqeda5wnbc2bjigglioxnyhfbmivel3kplsnd5iskl75jlki"),
-		"verifiedregistry": cid.MustParse("bafk2bzacebss5xbdgldtmlljluvdjvgjrg6cn3ftqoiwnm65gfjd4o4j2dpx6"),
+		"reward":           cid.MustParse("bafk2bzacec4s34n3xym3xejjdlji6e5ejkxmvplpsswfpxklqynfzye432zdq"),
+		"storagemarket":    cid.MustParse("bafk2bzacedgpjd6nibik27iyknog4xootrt3lpd6szdch5hbwltqja6e7dym4"),
+		"storageminer":     cid.MustParse("bafk2bzacedvkr6p7sw57s667jv2vodzbka3whiypuvv34xh2lipe4heooywc6"),
+		"storagepower":     cid.MustParse("bafk2bzaceb6riblkmadrqceh2wx47ecfu3ylcxxad2gb473weqkkcucpvzos6"),
+		"system":           cid.MustParse("bafk2bzacedauxksf7i3eixxff277thsgbqqfmrkmdo3mm7mth5tguxstsxpbc"),
+		"verifiedregistry": cid.MustParse("bafk2bzaceatvxu6ffkq3nvhffmw5avoeixt3yymzyotlz2qkyw4sh5ffw26gg"),
 	},
 }, {
-	Network: "devnet",
-	Version: 8,
-
+	Network:     "devnet",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacedq7tuibavyqxzkq4uybjj7ly22eu42mjkoehwn5d47xfunmtjm4k"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacea4tlgnp7m6tlldpz3termlwxlnyq24nwd4zdzv4r6nsjuaktuuzc"),
@@ -633,9 +608,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceaajgtglewgitshgdi2nzrvq7eihjtyqj5yiamesqun2hujl3xev2"),
 	},
 }, {
-	Network: "devnet",
-	Version: 9,
-
+	Network:     "devnet",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzacedozk3jh2j4nobqotkbofodq4chbrabioxbfrygpldgoxs3zwgggk"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaced5llqnqqhypolyuogz3h2wjomugqkrhyhocvly3aoib4c5xiush6"),
@@ -652,9 +626,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacednorhcy446agy7ecpmfms2u4aoa3mj2eqomffuoerbik5yavrxyi"),
 	},
 }, {
-	Network: "devnet",
-	Version: 10,
-
+	Network:     "devnet",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzacebzz376j5kizfck56366kdz5aut6ktqrvqbi3efa2d4l2o2m653ts"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedkj5dqs5xxamnlug2d5dyjl6askf7wlmvwzhmsrzcvogv7acqfe6"),
@@ -675,9 +648,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaced2mkyqobpgna5jevosym3adv2bvraggigyz2jgn5cxymirxj4x3i"),
 	},
 }, {
-	Network: "devnet",
-	Version: 11,
-
+	Network:     "devnet",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzaceay35go4xbjb45km6o46e5bib3bi46panhovcbedrynzwmm3drr4i"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecf2pprkbdlpm4e2xz3ufunxtgrgyh2ie3stuqiyhibsvdze7kvri"),
@@ -698,9 +670,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebdqi5tr5pjnem5nylg2zbqcugvi7oxi35bhnrfudx4y4ufhlit2k"),
 	},
 }, {
-	Network: "devnet",
-	Version: 12,
-
+	Network:     "devnet",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzaceasjdukhhyjbegpli247vbf5h64f7uvxhhebdihuqsj2mwisdwa6o"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedki4apynvdxxuoigmqkgaktgy2erjftoxqxqaklnelgveyaqknfu"),
@@ -721,9 +692,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacec37mddea65nvh4htsagtryfa3sq6i67utcupslyhzbhjhoy6hopa"),
 	},
 }, {
-	Network: "devnet",
-	Version: 13,
-
+	Network:     "devnet",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzacecn7uxgehrqbcs462ktl2h23u23cmduy2etqj6xrd6tkkja56fna4"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebev3fu5geeehpx577b3kvza4xsmmggmepjj7rlsnr27hpoq27q2i"),
@@ -744,9 +714,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacea2czkb4vt2iiiwdb6e57qfwqse4mk2pcyvwjmdl5ojbnla57oh2u"),
 	},
 }, {
-	Network: "devnet",
-	Version: 14,
-
+	Network:     "devnet",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacebwn7ymtozv5yz3x5hnxl4bds2grlgsk5kncyxjak3hqyhslb534m"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecqyi3xhyrze7hlo73zzyzz5jw5e6eqqyesmnbef4xr7br5amqsm2"),
@@ -767,9 +736,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceapbsihfuk3munfpcoevtxlwuenxeiiv7dp7v3t2yjs26hcpypexi"),
 	},
 }, {
-	Network: "devnet",
-	Version: 15,
-
+	Network:     "devnet",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzacedlusqjwf7chvl2ve2fum5noyqrtjzcrzkhpbzpkg7puiru7dj4ug"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceb7f7gjyz2fkzkbf6jlwttjinny4nci4zdoby7r246xuyc4e2n7me"),
@@ -792,30 +760,29 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "devnet",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzaceafzrqb6adck3o3mbyd33gtp2272f577hidqyo7cszg2ksn5sebh2"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzacedqy7umr3bmmkrepi3ostdxrlxaln33wecqllsz5eqgdwzb2oqov2"),
-		"cron":             cid.MustParse("bafk2bzacebrbwcwi3jtplab7jajkccgcqzyvpobypfhomf45ujxpgwehipoia"),
-		"datacap":          cid.MustParse("bafk2bzaceccxwbelrowdo47xfgd7ldj7trvh7qvq5xgnhxdnw2zdlml5ahzvc"),
-		"eam":              cid.MustParse("bafk2bzacebjzmdd7vdjfdrrxzzyu34gz4jzropcyzrc7og4lt2mczipwoz3pc"),
-		"ethaccount":       cid.MustParse("bafk2bzaceb7zgpsi6mwc7asrpxyj7zd6rcsuhraekbonodegxhuli2mwdmuw2"),
-		"evm":              cid.MustParse("bafk2bzacea5shmgqycbwuvazd2fika4erfbbyxomsnircps2nqk2o7oxtkvdy"),
-		"init":             cid.MustParse("bafk2bzacedoyhv5wergunblh2ga65rxbwowhtac4vdz7woovkponmmd55f244"),
-		"multisig":         cid.MustParse("bafk2bzacedyid3docv7i2wx4sciua64ndrbfqbk3werhuruehedhj6gj6hvdg"),
-		"paymentchannel":   cid.MustParse("bafk2bzaceab556e24d4qzptdownttepcrgljrfvheykwf2kwxzomk5gip3qka"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzaceclp3wfrwdjgh6c3gee5smwj3zmmrhb4fdbc4yfchfaia6rlljx5o"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzacebl27l7f5dt35gfeukr7kzkenhwisdy53r3gmbagbzzfejfa3ci6a"),
+		"cron":             cid.MustParse("bafk2bzacedzo57rpw6debpc7aaenevimqdw44o47l5kjk27xd6qynjx7spyls"),
+		"datacap":          cid.MustParse("bafk2bzaceddnadztnvgblxukwhwygtynyiee26itbpkncoolxpspvryspvii4"),
+		"eam":              cid.MustParse("bafk2bzacecogdrpspcsorwamsrmtpmofocc5si7bcavo4jhtbcgpxq6rl5s5q"),
+		"ethaccount":       cid.MustParse("bafk2bzacebxukyx7vernilg3fcz2h4ale43zj2gijpsa5lon2bcqtme32mss6"),
+		"evm":              cid.MustParse("bafk2bzacecnukm3qvrefmtrxvazdvghclk67o47p4o42fnpzv4l6cm3etfjqc"),
+		"init":             cid.MustParse("bafk2bzaceanl3arbn3vbx7qoxjbxbygm3g5rgibypt4ukxia3lhwniqumwmfm"),
+		"multisig":         cid.MustParse("bafk2bzacedym2qai72hu53yggfx5czuu7cluu3ft4gyparnw7l624on2uoqqo"),
+		"paymentchannel":   cid.MustParse("bafk2bzacedetue6b2ekilnzam7derkslpuhmy45bhsrcj36tuwpuoyi56i734"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzacecusrwhrdsndyokbordb7khms3mjvkohnzxst6a3intb52skg56vw"),
-		"storagemarket":    cid.MustParse("bafk2bzaceciw5btcu55jguj7yfpgd3ecrwlu7hwhdacbug56htiseitbohw6m"),
-		"storageminer":     cid.MustParse("bafk2bzacead3ptx4vq2e7x3q6lm5cpe6lbtp44shxon23xhmahvvfjqbotpny"),
-		"storagepower":     cid.MustParse("bafk2bzacecxjuml3buylyyg6u2k6dy3ek4apqlbwbk4npgosxc2cls7ywosow"),
-		"system":           cid.MustParse("bafk2bzaceaonvsrizf3fvy2tgruqjgymtfvkzejmooui2w2stpi7teibtz4wm"),
-		"verifiedregistry": cid.MustParse("bafk2bzaceb3qajgx4ichpmgnxjeofv3pg3qwagrsgkimoi6sinjnd6mydiy2o"),
+		"reward":           cid.MustParse("bafk2bzacebrtvcnof275odfobuw6k5chzl23p4mac75bg3amnempzauj57i6a"),
+		"storagemarket":    cid.MustParse("bafk2bzaced2fw4smkqrhoshiskvvmdak2vzmkgxijanp24xqumkhyhwioz6bc"),
+		"storageminer":     cid.MustParse("bafk2bzacebmdlcmrseltgqqcw36q4njwp5cjw24kqf5q5cohonhbbrhv3hxbk"),
+		"storagepower":     cid.MustParse("bafk2bzaceattnfxccxgeickyhei4txzi2qj6jaks5h7im4uaqmaoxk2jthlri"),
+		"system":           cid.MustParse("bafk2bzaceapx3vuukaqkj76ck4k6b46ktle452ek2nxeoy5qrtaxdktchrb6k"),
+		"verifiedregistry": cid.MustParse("bafk2bzaceat7zehx2y5joxtufcwbx4ium47fw4mrubdlquzpla4esqfzimkas"),
 	},
 }, {
-	Network: "hyperspace",
-	Version: 8,
-
+	Network:     "hyperspace",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacedvffumcvf72f2btjqvece3kpcdorxq5tq76iwcmqbzvsiu526cqm"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecim7uybic2qprbkjhowg7qkniv4zywj5h5g4u4ss72urco2akzuo"),
@@ -836,9 +803,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacea7rfkjrixaidksnmjehglmavyt56nyeu3sfxu2e3dcpf62oab6tw"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 8,
-
+	Network:     "mainnet",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacebogjbpiemi7npzxchgcjjki3tfxon4ims55obfyfleqntteljsea"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedudbf7fc5va57t3tmo63snmt3en4iaidv4vo3qlyacbxaa6hlx6y"),
@@ -854,9 +820,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceb3zbkjz3auizmoln2unmxep7dyfcmsre64vnqfhdyh7rkqfoxlw4"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 9,
-
+	Network:     "mainnet",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzaceb6j6666h36xnhksu3ww4kxb6e25niayfgkdnifaqi6m6ooc66i6i"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacect2p7urje3pylrrrjy3tngn6yaih4gtzauuatf2jllk3ksgfiw2y"),
@@ -873,9 +838,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacecf3yodlyudzukumehbuabgqljyhjt5ifiv4vetcfohnvsxzynwga"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 10,
-
+	Network:     "mainnet",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzacecsuyf7mmvrhkx2evng5gnz5canlnz2fdlzu2lvcgptiq2pzuovos"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceampw4romta75hyz5p4cqriypmpbgnkxncgxgqn6zptv5lsp2w2bo"),
@@ -896,9 +860,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedfel6edzqpe5oujno7fog4i526go4dtcs6vwrdtbpy2xq6htvcg6"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 11,
-
+	Network:     "mainnet",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzacecnhaiwcrpyjvzl4uv4q3jzoif26okl3m66q3cijp3dfwlcxwztwo"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacealnlr7st6lkwoh6wxpf2hnrlex5sknaopgmkr2tuhg7vmbfy45so"),
@@ -919,9 +882,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedej3dnr62g2je2abmyjg3xqv4otvh6e26du5fcrhvw7zgcaaez3a"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 12,
-
+	Network:     "mainnet",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzaceapkgfggvxyllnmuogtwasmsv5qi2qzhc2aybockd6kag2g5lzaio"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceboftg75mdiba7xbo2i3uvgtca4brhnr3u5ptihonixgpnrvhpxoa"),
@@ -942,9 +904,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedudgflxc75c77c6zkmfyq4u2xuk7k6xw6dfdccarjrvxx453b77q"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 13,
-
+	Network:     "mainnet",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzacecdhvfmtirtojwhw2tyciu4jkbpsbk5g53oe24br27oy62sn4dc4e"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedxnbtlsqdk76fsfmnhyvsblwyfducerwwtp3mqtx2wbrvs5idl52"),
@@ -965,9 +926,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacedkxehp7y7iyukbcje3wbpqcvufisos6exatkanyrbotoecdkrbta"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 14,
-
+	Network:     "mainnet",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacecbueuzsropvqawsri27owo7isa5gp2qtluhrfsto2qg7wpgxnkba"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebr7ik7lng7vysm754mu5x7sakphwm4soqi6zwbox4ukpd6ndwvqy"),
@@ -988,9 +948,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebvyzjzmvmjvpypphqsumpy6rzxuugnehgum7grc6sv3yqxzrshb4"),
 	},
 }, {
-	Network: "mainnet",
-	Version: 15,
-
+	Network:     "mainnet",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzaceakwje2hyinucrhgtsfo44p54iw4g6otbv5ghov65vajhxgntr53u"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacecia5zacqt4gvd4z7275lnkhgraq75shy63cphakphhw6crf4joii"),
@@ -1013,30 +972,29 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "mainnet",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzaceaj3s3rrfbibikplap264uw74qor5yl35mqwokv4lwst4plpwry36"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzacec5ozi2c34ekahcae7ddflen4drqlbvumxdmos4oemwejnd6fng7i"),
-		"cron":             cid.MustParse("bafk2bzacec5zieykqe2qmrlwesc2f7deez2rsiil5acjbv3u2hurmcexvvig6"),
-		"datacap":          cid.MustParse("bafk2bzaceaelkguldxjrbdxv6wmmsniejzwbpt6ur53xyvrtkv6l5dqmm43fk"),
-		"eam":              cid.MustParse("bafk2bzacebpa6slssjr3ph3yuosghid766ydll3istxrru5dk2patbpfzfbxo"),
-		"ethaccount":       cid.MustParse("bafk2bzacedxv3cxhoqlsq32zv3e3cy7xvi5ftg4x2feas3455uqwx5gvmp2di"),
-		"evm":              cid.MustParse("bafk2bzacednixjutzxqqry6tjitf6tm7afjzcn2c7nlw7wlxe2d6rvjjzlv5k"),
-		"init":             cid.MustParse("bafk2bzacebk4pn7s7cl5ljp3pjfyewgzchybh5khgs66fvk4sjk5z7bae5ebi"),
-		"multisig":         cid.MustParse("bafk2bzaceag6xetwcqs6jn6gad3gnxs2mdc625z7tiitzagyzywdctbrfqwq4"),
-		"paymentchannel":   cid.MustParse("bafk2bzacecze447ktzreixnwomr6f7pk4yy37aqqbg2n5gfkrtxttknxj3etc"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzacecnepvsh4lw6pwljobvwm6zwu6mbwveatp7llhpuguvjhjiqz7o46"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzacedef4sqdsfebspu7dqnk7naj27ac4lyho4zmvjrei5qnf2wn6v64u"),
+		"cron":             cid.MustParse("bafk2bzacedjpipmkmlmgcsmvxijivmeo62t7zul7565wy7ubfmwdlwzbl2zsg"),
+		"datacap":          cid.MustParse("bafk2bzaceblfbzlkvtwxucr3wno7tilbri2kyagdlcsu2snntkii26gye2cmo"),
+		"eam":              cid.MustParse("bafk2bzacec3wpa2sr5w6vfh7d2wbzt3cphoglsd6fvem7cq3h52lg357hfovu"),
+		"ethaccount":       cid.MustParse("bafk2bzacealmhbhzgo4kkyy32qlumxirnc75nyfkpd757dbxtgwktqu2zztjy"),
+		"evm":              cid.MustParse("bafk2bzacecrriac4r2pbxkh5wu67sgwgce2qysfl7thmg7smgmwwqjff5kq74"),
+		"init":             cid.MustParse("bafk2bzacecfk7a3ns32wrbyoxvv4jfdoesl7cqpc34rqdsiehxvr4kz6jzc7u"),
+		"multisig":         cid.MustParse("bafk2bzaceastb65il5j3v2q2pfxgk7brmzh6djzisjo3mfybbiplgy3w7iscm"),
+		"paymentchannel":   cid.MustParse("bafk2bzaceanasifggzenhwl5cchnv3rro63mcodpveix6glfkzuwl3qknqn6k"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzacebfth3o6nb6l6cncbh26tz47y35puzotb6qfekdpfzza5jq3xkktq"),
-		"storagemarket":    cid.MustParse("bafk2bzacecak6aoz2hikbboywrzdrocdi4kg7ygpvr24mfbrizl37wvkpoh62"),
-		"storageminer":     cid.MustParse("bafk2bzaceadh3kotsa6sgmb7hhey2k3a7x7r2cdcuoeuccvbxquncahgqv27a"),
-		"storagepower":     cid.MustParse("bafk2bzacedguasiz7jmqgyasjyv7qki4fkedilv6jxwpllshpe67v2juy6562"),
-		"system":           cid.MustParse("bafk2bzacec2peekriytrgir2hywednfqm7knrzqo4iipdn2cumowaelyjroqe"),
-		"verifiedregistry": cid.MustParse("bafk2bzaceaprpkxgqzkgozro36f4nxonwqjouazvi2tjsvzixtgd7uyw3pki6"),
+		"reward":           cid.MustParse("bafk2bzacebm6enbbihclumyi2pfkpdganx3hhjuzdnlow5q3tazsflmgi32hq"),
+		"storagemarket":    cid.MustParse("bafk2bzaceaqmav32yzxh4suviytyeqszvrdsvl7emf6a7vtlfwsebrvwlg7p2"),
+		"storageminer":     cid.MustParse("bafk2bzacectp5rumce4kekelolp6abrtfbbdjwl3ydjvurmfd6nbk3tott4ks"),
+		"storagepower":     cid.MustParse("bafk2bzaced6jncjckyzoswbbrwokiq35avufm2tlkertvoqkh76qkd2ccddls"),
+		"system":           cid.MustParse("bafk2bzaceaar6jzusbxv5ekouldqatgiblyrcldlxuoahyypdaeozm57rmjk6"),
+		"verifiedregistry": cid.MustParse("bafk2bzacedxvui4lmogudblf7ir2rkglsfnjqlrzqv7hzcoa4t3dr2ni2vv26"),
 	},
 }, {
-	Network: "testing",
-	Version: 8,
-
+	Network:     "testing",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacedkjpqx27wgsvfxzuxfvixuxtbpt2y6yo6igcasez6gqiowron776"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebmfbtdj5vruje5auacrhhprcjdd6uclhukb7je7t2f6ozfcgqlu2"),
@@ -1052,9 +1010,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"),
 	},
 }, {
-	Network: "testing",
-	Version: 9,
-
+	Network:     "testing",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzacecnnrmekqw2xvud46g3vo6x26cogh3ydgljqajlxqxzzbuxsjlwjm"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceaiebfiuu76zoywzltelio2zuvsavirka27ur6kspn7scvcl5cuiy"),
@@ -1071,9 +1028,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceatmqip2o3ausbntvdhj7yemu6hb3b5yqv6hm42gylbbmz7geocpm"),
 	},
 }, {
-	Network: "testing",
-	Version: 10,
-
+	Network:     "testing",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzacebsp3bkxwsijenqeimhvhtg52d6o76hn6qhzxveqfq7d5hdd5l2ee"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceazxb6p2xg6caivmie6k2bvutyesngwyvhwv4eemwu7ia4vnqkcuy"),
@@ -1094,9 +1050,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacecdmek2htsgcyoyl35glakyab66cojqo2y335njnm7krleb6yfbps"),
 	},
 }, {
-	Network: "testing",
-	Version: 11,
-
+	Network:     "testing",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzacea2vxre32tg3xhpejrktiuzx4d3pcoe7yyazgscfibmegmchr6n42"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceccerssb3tgel6ukdghlwvs7dxsolj4fpkgn7dh7owzwapqb6ejpw"),
@@ -1117,9 +1072,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebp2r56wxadvfzpfbmqwfi3dlnwpmoc5u4tau2hfftbkuafkhye64"),
 	},
 }, {
-	Network: "testing",
-	Version: 12,
-
+	Network:     "testing",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzaceaaxd6ytavsek5bi5soqo7qamezuqfyfjy42es2clpbzu3pwzcmye"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacea74qqkfvacykmq5emzqblh4f4nmxdkiyixxpzs7kkcfnbfa7cb6m"),
@@ -1140,9 +1094,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceandytrgcnuvizfi47sijbqh6c243vjtzlzumexm6kjv7s7hye45g"),
 	},
 }, {
-	Network: "testing",
-	Version: 13,
-
+	Network:     "testing",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzacedg47dqxmtgzjch6i42kth72esd7w23gujyd6c6oppg3n6auag5ou"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceb3tncntgeqvzzr5fzhvpsc5ntv3tpqrsh4jst4irfyzpkdyigibc"),
@@ -1163,9 +1116,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceadw6mxuyb6ipaq3fhekk7u5osyyiis3c4wbkvysy2ut6qfsua5zs"),
 	},
 }, {
-	Network: "testing",
-	Version: 14,
-
+	Network:     "testing",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacebgc3zha33w7wggshqjeeomjnxfsqdezpt6e5w4tcqnfp42hvhqyy"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedz5ko33xyknznoj5mcwnijhggapvn7hzmec3ix3vlqjg6uuwownm"),
@@ -1186,9 +1138,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacec66mmy7sj6qy5urqplwhbem7wbjrzna7mxh6qbdljdawhu3g5rao"),
 	},
 }, {
-	Network: "testing",
-	Version: 15,
-
+	Network:     "testing",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzacedio6qbcgxduz3y2zksor5dgyt3ieiugnugvsz6k2jdzwvugwahag"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceabav73gljoyhtozycl5dqwomg4vviuy2jimte545yx3vgg3vfnyo"),
@@ -1211,30 +1162,29 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "testing",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzacea35za4a3ljlupfn2wxdzwz5py6vbu267s5p4p4uvdoqyhhggbbfq"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzacedzuxjcmialu22l24x6z5x2j3lxsxxruxmhvhpkttkvlkrjulkbyq"),
-		"cron":             cid.MustParse("bafk2bzacebgi4wwp2dr4z4wtyziz4mn7ipglpez2ghxzh76sbapz4isvxfbc4"),
-		"datacap":          cid.MustParse("bafk2bzacechuwtorkaqcmfgztggv5khbx36xyqw5emxibh6qd7si4pdg6i22q"),
-		"eam":              cid.MustParse("bafk2bzaceddukui4pbnrfwcu7zv5acvbhgvclblxiwph2utpndb7qqj3oll5o"),
-		"ethaccount":       cid.MustParse("bafk2bzaceafucqy3me7ellhrd5jla2a5wqo652agx4nb6467po643zgvy5d4w"),
-		"evm":              cid.MustParse("bafk2bzacedmaykyptdfzwkbui6ptoueqsoj3wubtexdeumh7i7qsnlfmreetm"),
-		"init":             cid.MustParse("bafk2bzacecauzck4cmqcbjzsz7jyugig5xcqhuj4lrkbykewkg3pineperxg6"),
-		"multisig":         cid.MustParse("bafk2bzaceakkpute3br5t77lkfh4qi7ezzafrpoen7xngf46zjvfuaok3ffqi"),
-		"paymentchannel":   cid.MustParse("bafk2bzacebwedmnkgpxta4y4pc3fjn5dazcjmlveztmv7gh6czi7zkrx6t4do"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzaceazq2v3l6w2vhch76v5y5krsif5zf65ctega6bll6yrsxavwoyrf2"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzaceaib7urgwq6pt2f77ursvsgjvad7yb6vlptf3wae5rrh5wovvmxn6"),
+		"cron":             cid.MustParse("bafk2bzacebr6zmuxuy3rxe7733oujafqigltqd5jsi2ze4axzwglkpqah3m4s"),
+		"datacap":          cid.MustParse("bafk2bzaceblwnw5qd3p3o743pdcnkoi47tdgtqxpfbcx4gch2nxnhcblbkpte"),
+		"eam":              cid.MustParse("bafk2bzacebebe5i4jtsnaoa3u2qa3mxqi3cuytldwofbgurhjekikpdgtefbw"),
+		"ethaccount":       cid.MustParse("bafk2bzacecv5ccd5thpjuhfzk3b2564ln3p2nxmz4lubqslksjwq6b2hex2ks"),
+		"evm":              cid.MustParse("bafk2bzacedlt5pkp3yitopmxj54ajxbuurakpxomizjqvfr7ouqeit75jhd6c"),
+		"init":             cid.MustParse("bafk2bzaceauopjjp5ayh6s7uhuwp2xdjl2hv6rdaqq77monisq66kzcwspntg"),
+		"multisig":         cid.MustParse("bafk2bzaced4uaayjgp4pz3ovgnbnv4fdtne23jjzdgupeewk5oxjaqjlnapy4"),
+		"paymentchannel":   cid.MustParse("bafk2bzacecx5nynsmwrv7kfmm6ymns5arubyx2as6i56nrzgwp4jezoacl3gg"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzaceac3ohau7sxi3xotwsi5bzo75lg74nwdmrxmx5rfnmkp7mo26uxsk"),
-		"storagemarket":    cid.MustParse("bafk2bzacebn5ixsfxu36r2dbtvfp4ineu4dnhsvqm4qcpiph4cc6knqqkthto"),
-		"storageminer":     cid.MustParse("bafk2bzacec3alndcdemx26bl3svrbcxtxpdjnmsfuhrawhx5ldd2dlfzzldq4"),
-		"storagepower":     cid.MustParse("bafk2bzaceb4iqnikgmwuqlzzpb3lfl5k4glt32vgfxebu7h4r6zpzmyaxol7i"),
-		"system":           cid.MustParse("bafk2bzaceajnotcpt6sx2afno7fjppp6wzrh4dgu2meeoptcjkorunvshi2hw"),
-		"verifiedregistry": cid.MustParse("bafk2bzaceazuqbqpozviewg7obtnhlq6tfewjl5vp5wdvkjxdlqbpkvig3zfu"),
+		"reward":           cid.MustParse("bafk2bzacec3622qzank3tagb6uogxw7wnoo6qfnmkvey3ubwrbg7febsn2z5c"),
+		"storagemarket":    cid.MustParse("bafk2bzaceb2tc4c744eoi2zzn4xjla63wb7rk2btn44azamxnempk2g3niyci"),
+		"storageminer":     cid.MustParse("bafk2bzaceaqekep6caen5naku3wd5hcid6frupsbazrtz5zzdv2ti6wbss3tc"),
+		"storagepower":     cid.MustParse("bafk2bzacebelnvhileuzmplwxyixjqlb56h6n24hi33odykmogmxsailnj7o4"),
+		"system":           cid.MustParse("bafk2bzacedzgl7z6nuaqgf3mrq2dijcn4kzsb32p5brs4olyntejibxs4qqko"),
+		"verifiedregistry": cid.MustParse("bafk2bzacec2x4ryjqtsqblashbvv7eomx3japq73vnendog6rjjskcwyd4i7e"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 8,
-
+	Network:     "testing-fake-proofs",
+	Version:     8,
 	ManifestCid: cid.MustParse("bafy2bzacecd3lb5v6tzjylnhnrhexslssyaozy6hogzgpkhztoe76exbrgrug"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacebmfbtdj5vruje5auacrhhprcjdd6uclhukb7je7t2f6ozfcgqlu2"),
@@ -1250,9 +1200,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 9,
-
+	Network:     "testing-fake-proofs",
+	Version:     9,
 	ManifestCid: cid.MustParse("bafy2bzacecql2gj2tri4fnbznmldue73qzt6zszvugw4exd64mwb52zrhv7k2"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceaiebfiuu76zoywzltelio2zuvsavirka27ur6kspn7scvcl5cuiy"),
@@ -1269,9 +1218,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceatmqip2o3ausbntvdhj7yemu6hb3b5yqv6hm42gylbbmz7geocpm"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 10,
-
+	Network:     "testing-fake-proofs",
+	Version:     10,
 	ManifestCid: cid.MustParse("bafy2bzacedwap2uuii4luljckrnb4vkur2unb6fyinn7xjie6xlva2wmlygj2"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceazxb6p2xg6caivmie6k2bvutyesngwyvhwv4eemwu7ia4vnqkcuy"),
@@ -1292,9 +1240,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacecdmek2htsgcyoyl35glakyab66cojqo2y335njnm7krleb6yfbps"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 11,
-
+	Network:     "testing-fake-proofs",
+	Version:     11,
 	ManifestCid: cid.MustParse("bafy2bzacecojemqglhzzhjnhgtrcbsgkyv67ziytvtbhwlr4ym4oxqofv7zui"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceccerssb3tgel6ukdghlwvs7dxsolj4fpkgn7dh7owzwapqb6ejpw"),
@@ -1315,9 +1262,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacebp2r56wxadvfzpfbmqwfi3dlnwpmoc5u4tau2hfftbkuafkhye64"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 12,
-
+	Network:     "testing-fake-proofs",
+	Version:     12,
 	ManifestCid: cid.MustParse("bafy2bzacecver4l5d6jiuzubhrtcxjjfdx6jnxbmyp4bselol2atgkhz3e3um"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacea74qqkfvacykmq5emzqblh4f4nmxdkiyixxpzs7kkcfnbfa7cb6m"),
@@ -1338,9 +1284,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceandytrgcnuvizfi47sijbqh6c243vjtzlzumexm6kjv7s7hye45g"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 13,
-
+	Network:     "testing-fake-proofs",
+	Version:     13,
 	ManifestCid: cid.MustParse("bafy2bzaceaf7fz33sp2i5ag5xg5ompn3dwppqlbwfacrwuvzaqdbqrtni7m5q"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceb3tncntgeqvzzr5fzhvpsc5ntv3tpqrsh4jst4irfyzpkdyigibc"),
@@ -1361,9 +1306,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzaceadw6mxuyb6ipaq3fhekk7u5osyyiis3c4wbkvysy2ut6qfsua5zs"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 14,
-
+	Network:     "testing-fake-proofs",
+	Version:     14,
 	ManifestCid: cid.MustParse("bafy2bzacebca2c7r6m47fv5ojbzfgqxw74zxyzphlkxigj75q7vobbe6vm4x4"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzacedz5ko33xyknznoj5mcwnijhggapvn7hzmec3ix3vlqjg6uuwownm"),
@@ -1384,9 +1328,8 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 		"verifiedregistry": cid.MustParse("bafk2bzacec66mmy7sj6qy5urqplwhbem7wbjrzna7mxh6qbdljdawhu3g5rao"),
 	},
 }, {
-	Network: "testing-fake-proofs",
-	Version: 15,
-
+	Network:     "testing-fake-proofs",
+	Version:     15,
 	ManifestCid: cid.MustParse("bafy2bzacea3jtzs4jz75ht3ncdyvabef4spz7w375ja7spp36yy3zwp5ji2wi"),
 	Actors: map[string]cid.Cid{
 		"account":          cid.MustParse("bafk2bzaceabav73gljoyhtozycl5dqwomg4vviuy2jimte545yx3vgg3vfnyo"),
@@ -1409,24 +1352,24 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{{
 }, {
 	Network:      "testing-fake-proofs",
 	Version:      16,
-	BundleGitTag: "v16.0.0",
-	ManifestCid:  cid.MustParse("bafy2bzacec4tth5r62ny75wt27tyzgzc4nc3zte6cxainlrxs54g7yvmlezs4"),
-	Actors: map[string]cid.Cid{
-		"account":          cid.MustParse("bafk2bzacedzuxjcmialu22l24x6z5x2j3lxsxxruxmhvhpkttkvlkrjulkbyq"),
-		"cron":             cid.MustParse("bafk2bzacebgi4wwp2dr4z4wtyziz4mn7ipglpez2ghxzh76sbapz4isvxfbc4"),
-		"datacap":          cid.MustParse("bafk2bzacechuwtorkaqcmfgztggv5khbx36xyqw5emxibh6qd7si4pdg6i22q"),
-		"eam":              cid.MustParse("bafk2bzaceddukui4pbnrfwcu7zv5acvbhgvclblxiwph2utpndb7qqj3oll5o"),
-		"ethaccount":       cid.MustParse("bafk2bzaceafucqy3me7ellhrd5jla2a5wqo652agx4nb6467po643zgvy5d4w"),
-		"evm":              cid.MustParse("bafk2bzacedmaykyptdfzwkbui6ptoueqsoj3wubtexdeumh7i7qsnlfmreetm"),
-		"init":             cid.MustParse("bafk2bzacecauzck4cmqcbjzsz7jyugig5xcqhuj4lrkbykewkg3pineperxg6"),
-		"multisig":         cid.MustParse("bafk2bzaceai472rp5ba3xputcmaoqlleasxifzgjcnmthcnqpmgb24no2tdhk"),
-		"paymentchannel":   cid.MustParse("bafk2bzacebwedmnkgpxta4y4pc3fjn5dazcjmlveztmv7gh6czi7zkrx6t4do"),
+	BundleGitTag: "v16.0.1",
+	ManifestCid:  cid.MustParse("bafy2bzaceaauqnw45yfi6lh53gzxzx47tabzh7zart6eqr3eojp72vtzgs6tg"),
+	Actors: map[string]cid.Cid{
+		"account":          cid.MustParse("bafk2bzaceaib7urgwq6pt2f77ursvsgjvad7yb6vlptf3wae5rrh5wovvmxn6"),
+		"cron":             cid.MustParse("bafk2bzacebr6zmuxuy3rxe7733oujafqigltqd5jsi2ze4axzwglkpqah3m4s"),
+		"datacap":          cid.MustParse("bafk2bzaceblwnw5qd3p3o743pdcnkoi47tdgtqxpfbcx4gch2nxnhcblbkpte"),
+		"eam":              cid.MustParse("bafk2bzacebebe5i4jtsnaoa3u2qa3mxqi3cuytldwofbgurhjekikpdgtefbw"),
+		"ethaccount":       cid.MustParse("bafk2bzacecv5ccd5thpjuhfzk3b2564ln3p2nxmz4lubqslksjwq6b2hex2ks"),
+		"evm":              cid.MustParse("bafk2bzacedlt5pkp3yitopmxj54ajxbuurakpxomizjqvfr7ouqeit75jhd6c"),
+		"init":             cid.MustParse("bafk2bzaceauopjjp5ayh6s7uhuwp2xdjl2hv6rdaqq77monisq66kzcwspntg"),
+		"multisig":         cid.MustParse("bafk2bzaceaslzv237r4fh2n2p5jzno2zcqeuuqesz4bkutppblnltpvaqvjyo"),
+		"paymentchannel":   cid.MustParse("bafk2bzacecx5nynsmwrv7kfmm6ymns5arubyx2as6i56nrzgwp4jezoacl3gg"),
 		"placeholder":      cid.MustParse("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
-		"reward":           cid.MustParse("bafk2bzaceac3ohau7sxi3xotwsi5bzo75lg74nwdmrxmx5rfnmkp7mo26uxsk"),
-		"storagemarket":    cid.MustParse("bafk2bzacebn5ixsfxu36r2dbtvfp4ineu4dnhsvqm4qcpiph4cc6knqqkthto"),
-		"storageminer":     cid.MustParse("bafk2bzaceaajmyyjy6tntcxngtc55nero4a4halejajpmeioub6fyznbqni74"),
-		"storagepower":     cid.MustParse("bafk2bzaceb4iqnikgmwuqlzzpb3lfl5k4glt32vgfxebu7h4r6zpzmyaxol7i"),
-		"system":           cid.MustParse("bafk2bzaceajnotcpt6sx2afno7fjppp6wzrh4dgu2meeoptcjkorunvshi2hw"),
-		"verifiedregistry": cid.MustParse("bafk2bzaceazuqbqpozviewg7obtnhlq6tfewjl5vp5wdvkjxdlqbpkvig3zfu"),
+		"reward":           cid.MustParse("bafk2bzacec3622qzank3tagb6uogxw7wnoo6qfnmkvey3ubwrbg7febsn2z5c"),
+		"storagemarket":    cid.MustParse("bafk2bzaceb2tc4c744eoi2zzn4xjla63wb7rk2btn44azamxnempk2g3niyci"),
+		"storageminer":     cid.MustParse("bafk2bzacebskehig7aknijmw5gf3n6lm7hkawumebv2rmfyhnlo6ldtvul33q"),
+		"storagepower":     cid.MustParse("bafk2bzacebelnvhileuzmplwxyixjqlb56h6n24hi33odykmogmxsailnj7o4"),
+		"system":           cid.MustParse("bafk2bzacedzgl7z6nuaqgf3mrq2dijcn4kzsb32p5brs4olyntejibxs4qqko"),
+		"verifiedregistry": cid.MustParse("bafk2bzacec2x4ryjqtsqblashbvv7eomx3japq73vnendog6rjjskcwyd4i7e"),
 	},
 }}
diff --git a/chain/consensus/filcns/upgrades.go b/chain/consensus/filcns/upgrades.go
index ac0fe1974b8..9971b8f38af 100644
--- a/chain/consensus/filcns/upgrades.go
+++ b/chain/consensus/filcns/upgrades.go
@@ -345,6 +345,10 @@ func DefaultUpgradeSchedule() stmgr.UpgradeSchedule {
 		Height:    buildconstants.UpgradeTockHeight,
 		Network:   network.Version26,
 		Migration: nil,
+	}, {
+		Height:    buildconstants.UpgradeTockFixHeight,
+		Network:   network.Version26,
+		Migration: UpgradeActorsV16Fix,
 	},
 	}
 
@@ -1956,6 +1960,10 @@ var (
 
 	calibnetv13BuggyManifestCID1   = cid.MustParse("bafy2bzacea4firkyvt2zzdwqjrws5pyeluaesh6uaid246tommayr4337xpmi")
 	calibnetv13CorrectManifestCID1 = cid.MustParse("bafy2bzacect4ktyujrwp6mjlsitnpvuw2pbuppz6w52sfljyo4agjevzm75qs")
+
+	// Some v16.0.0 bundles are included in the v16 bundles tarball along with the v16.0.1 bundles.
+	// But the v16.0.0 ones have a -v16.0.0.car suffix instead of just .car.
+	v1600BundleSuffix = "v16.0.0"
 )
 
 func upgradeActorsV12Common(
@@ -2666,7 +2674,7 @@ func UpgradeActorsV15(
 	}
 	newRoot, err := upgradeActorsV15Common(ctx, sm, cache, root, epoch, config)
 	if err != nil {
-		return cid.Undef, xerrors.Errorf("migrating actors vXX state: %w", err)
+		return cid.Undef, xerrors.Errorf("migrating actors v15 state: %w", err)
 	}
 	return newRoot, nil
 }
@@ -2694,14 +2702,14 @@ func upgradeActorsV15Common(
 
 	if stateRoot.Version != types.StateTreeVersion5 {
 		return cid.Undef, xerrors.Errorf(
-			"expected state root version 5 for actors vXX+1 upgrade, got %d",
+			"expected state root version 5 for actors v15 upgrade, got %d",
 			stateRoot.Version,
 		)
 	}
 
 	manifest, ok := actors.GetManifest(actorstypes.Version15)
 	if !ok {
-		return cid.Undef, xerrors.Errorf("no manifest CID for vXX+1 upgrade")
+		return cid.Undef, xerrors.Errorf("no manifest CID for v15 upgrade")
 	}
 
 	// Perform the migration
@@ -2772,8 +2780,15 @@ func PreUpgradeActorsV16(ctx context.Context, sm *stmgr.StateManager, cache stmg
 	return err
 }
 
-func UpgradeActorsV16(ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache, cb stmgr.ExecMonitor,
-	root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) {
+func UpgradeActorsV16(
+	ctx context.Context,
+	sm *stmgr.StateManager,
+	cache stmgr.MigrationCache,
+	cb stmgr.ExecMonitor,
+	root cid.Cid,
+	epoch abi.ChainEpoch,
+	ts *types.TipSet,
+) (cid.Cid, error) {
 	// Use all the CPUs except 2.
 	workerCount := MigrationMaxWorkerCount - 3
 	if workerCount <= 0 {
@@ -2791,23 +2806,69 @@ func UpgradeActorsV16(ctx context.Context, sm *stmgr.StateManager, cache stmgr.M
 		ResultQueueSize:   100,
 		ProgressLogPeriod: logPeriod,
 	}
+
 	newRoot, err := upgradeActorsV16Common(ctx, sm, cache, root, epoch, ts, config)
 	if err != nil {
-		return cid.Undef, xerrors.Errorf("migrating actors vXX state: %w", err)
+		return cid.Undef, xerrors.Errorf("migrating actors v16 state: %w", err)
 	}
 	return newRoot, nil
 }
 
 func upgradeActorsV16Common(
-	ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache,
-	root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet,
+	ctx context.Context,
+	sm *stmgr.StateManager,
+	cache stmgr.MigrationCache,
+	root cid.Cid,
+	epoch abi.ChainEpoch,
+	ts *types.TipSet,
 	config migration.Config,
 ) (cid.Cid, error) {
 	writeStore := blockstore.NewAutobatch(ctx, sm.ChainStore().StateBlockstore(), units.GiB/4)
 	adtStore := store.ActorStore(ctx, writeStore)
-	// ensure that the manifest is loaded in the blockstore
-	if err := bundle.LoadBundles(ctx, writeStore, actorstypes.Version16); err != nil {
-		return cid.Undef, xerrors.Errorf("failed to load manifest bundle: %w", err)
+
+	manifest, ok := actors.GetManifest(actorstypes.Version16)
+	if !ok {
+		return cid.Undef, xerrors.Errorf("no manifest CID for v16 upgrade")
+	}
+
+	if buildconstants.UpgradeTockFixHeight > 0 {
+		// If there is a UpgradeTockFixHeight height set, then we are expected to load v16.0.0 here and
+		// then UpgradeTockFixHeight will take care of setting the actors to v16.0.1. If it's not set
+		// then there's nothing to fix and we'll proceed as normal.
+
+		var initState init12.State
+		if actorsIn, err := state.LoadStateTree(adtStore, root); err != nil {
+			return cid.Undef, xerrors.Errorf("loading state tree: %w", err)
+		} else if initActor, err := actorsIn.GetActor(builtin.InitActorAddr); err != nil {
+			return cid.Undef, xerrors.Errorf("failed to get system actor: %w", err)
+		} else if err := adtStore.Get(ctx, initActor.Head, &initState); err != nil {
+			return cid.Undef, xerrors.Errorf("failed to get system actor state: %w", err)
+		}
+
+		// The v16.0.0 bundle is embedded in the v16 tarball, we just need to load it with the right
+		// name (builtin-actors-<network>-v16.0.0.car).
+		embedded, ok := build.GetEmbeddedBuiltinActorsBundle(actorstypes.Version16, fmt.Sprintf("%s-%s", initState.NetworkName, v1600BundleSuffix))
+		if !ok {
+			return cid.Undef, xerrors.Errorf("didn't find v16.0.0 %s bundle with suffix %s", initState.NetworkName, v1600BundleSuffix)
+		}
+
+		var err error
+		manifest, err = bundle.LoadBundle(ctx, writeStore, bytes.NewReader(embedded))
+		if err != nil {
+			return cid.Undef, xerrors.Errorf("failed to load buggy calibnet bundle: %w", err)
+		}
+
+		// Sanity check that we loaded what we were supposed to
+		if metadata := build.BuggyBuiltinActorsMetadataForNetwork(initState.NetworkName, actorstypes.Version16); metadata == nil {
+			return cid.Undef, xerrors.Errorf("didn't find expected v16.0.0 bundle metadata for %s", initState.NetworkName)
+		} else if manifest != metadata.ManifestCid {
+			return cid.Undef, xerrors.Errorf("didn't load expected v16.0.0 bundle manifest: %s != %s", manifest, metadata.ManifestCid)
+		}
+	} else {
+		// ensure that the manifest is loaded in the blockstore
+		if err := bundle.LoadBundles(ctx, sm.ChainStore().StateBlockstore(), actorstypes.Version16); err != nil {
+			return cid.Undef, xerrors.Errorf("failed to load manifest bundle: %w", err)
+		}
 	}
 
 	// Load the state root.
@@ -2818,21 +2879,16 @@ func upgradeActorsV16Common(
 
 	if stateRoot.Version != types.StateTreeVersion5 {
 		return cid.Undef, xerrors.Errorf(
-			"expected state root version 5 for actors vXX+1 upgrade, got %d",
+			"expected state root version 5 for actors v16 upgrade, got %d",
 			stateRoot.Version,
 		)
 	}
 
-	manifest, ok := actors.GetManifest(actorstypes.Version16)
-	if !ok {
-		return cid.Undef, xerrors.Errorf("no manifest CID for vXX+1 upgrade")
-	}
-
 	// Perform the migration
 	newHamtRoot, err := nv25.MigrateStateTree(ctx, adtStore, manifest, stateRoot.Actors, epoch, config,
 		migrationLogger{}, cache)
 	if err != nil {
-		return cid.Undef, xerrors.Errorf("upgrading to actors vXX+1: %w", err)
+		return cid.Undef, xerrors.Errorf("upgrading to actors v16: %w", err)
 	}
 
 	// Persist the result.
@@ -2857,6 +2913,178 @@ func upgradeActorsV16Common(
 	return newRoot, nil
 }
 
+// UpgradeActorsV16Fix should _not_ be used on mainnet. It performs an upgrade to v16.0.1 on top of
+// the existing v16.0.0 that was already deployed.
+// The actual mainnet upgrade is performed with UpgradeActorsV16 with the v16.0.1 bundle.
+// This upgrade performs an inefficient form of the migration that go-state-types normally performs.
+func UpgradeActorsV16Fix(
+	ctx context.Context,
+	sm *stmgr.StateManager,
+	cache stmgr.MigrationCache,
+	cb stmgr.ExecMonitor,
+	root cid.Cid,
+	epoch abi.ChainEpoch,
+	ts *types.TipSet,
+) (cid.Cid, error) {
+	stateStore := sm.ChainStore().StateBlockstore()
+	adtStore := store.ActorStore(ctx, stateStore)
+
+	// Get the real v16 manifest, which should be for v16.0.1
+	manifestCid, ok := actors.GetManifest(actorstypes.Version16)
+	if !ok {
+		return cid.Undef, xerrors.Errorf("no manifest CID for v16 upgrade")
+	}
+	// ensure that the manifest is loaded in the blockstore, it will load the correct v16.0.1 bundle
+	if err := bundle.LoadBundles(ctx, stateStore, actorstypes.Version16); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to load manifest bundle: %w", err)
+	}
+
+	// Load input state tree
+	actorsIn, err := state.LoadStateTree(adtStore, root)
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("loading state tree: %w", err)
+	}
+
+	// load old manifest data
+	oldSystemActor, err := actorsIn.GetActor(builtin.SystemActorAddr)
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get system actor: %w", err)
+	}
+	// load old manifest data directly from the system actor
+	var oldManifestData manifest.ManifestData
+	var oldSystemState system12.State
+	if err := adtStore.Get(ctx, oldSystemActor.Head, &oldSystemState); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get system actor state: %w", err)
+	} else if err := adtStore.Get(ctx, oldSystemState.BuiltinActors, &oldManifestData); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get old manifest data: %w", err)
+	}
+
+	// load new manifest from the blockstore
+	var newManifest manifest.Manifest
+	if err := adtStore.Get(ctx, manifestCid, &newManifest); err != nil {
+		return cid.Undef, xerrors.Errorf("error reading actor manifest: %w", err)
+	} else if err := newManifest.Load(ctx, adtStore); err != nil {
+		return cid.Undef, xerrors.Errorf("error loading actor manifest: %w", err)
+	}
+
+	// build an actor CID mapping
+	codeMapping := make(map[cid.Cid]cid.Cid, len(oldManifestData.Entries))
+	for _, oldEntry := range oldManifestData.Entries {
+		newCID, ok := newManifest.Get(oldEntry.Name)
+		if !ok {
+			return cid.Undef, xerrors.Errorf("missing manifest entry for %s", oldEntry.Name)
+		}
+		codeMapping[oldEntry.Code] = newCID
+	}
+
+	// Create empty state tree
+	actorsOut, err := state.NewStateTree(adtStore, actorsIn.Version())
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to create new tree: %w", err)
+	}
+
+	// Perform the migration
+	err = actorsIn.ForEach(func(a address.Address, actor *types.Actor) error {
+		newCid, ok := codeMapping[actor.Code]
+		if !ok {
+			return xerrors.Errorf("didn't find mapping for %s", actor.Code)
+		}
+
+		return actorsOut.SetActor(a, &types.ActorV5{
+			Code:             newCid,
+			Head:             actor.Head,
+			Nonce:            actor.Nonce,
+			Balance:          actor.Balance,
+			DelegatedAddress: actor.DelegatedAddress,
+		})
+	})
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to perform migration: %w", err)
+	}
+
+	// Setup the system actor with the new manifest, fetching it from actorsOut where it's already
+	// had its code CID changed, changing the manifest, then writing back to actorsOut
+	newSystemActor, err := actorsOut.GetActor(builtin.SystemActorAddr)
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get system actor: %w", err)
+	}
+	var newSystemState system12.State
+	if err := adtStore.Get(ctx, newSystemActor.Head, &newSystemState); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get system actor state: %w", err)
+	} else if err := adtStore.Get(ctx, newSystemState.BuiltinActors, &oldManifestData); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get old manifest data: %w", err)
+	}
+	newSystemState.BuiltinActors = newManifest.Data
+	newSystemHead, err := adtStore.Put(ctx, &newSystemState)
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to put new system state: %w", err)
+	}
+	newSystemActor.Head = newSystemHead
+	if err = actorsOut.SetActor(builtin.SystemActorAddr, newSystemActor); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to put new system actor: %w", err)
+	}
+
+	// Sanity check that the migration worked by re-iterating over the old tree and checking
+	// against the new tree's actors.
+
+	// initState for networkName
+	var initState init12.State
+	if actorsIn, err := state.LoadStateTree(adtStore, root); err != nil {
+		return cid.Undef, xerrors.Errorf("loading state tree: %w", err)
+	} else if initActor, err := actorsIn.GetActor(builtin.InitActorAddr); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get system actor: %w", err)
+	} else if err := adtStore.Get(ctx, initActor.Head, &initState); err != nil {
+		return cid.Undef, xerrors.Errorf("failed to get system actor state: %w", err)
+	}
+
+	v1600metadata := build.BuggyBuiltinActorsMetadataForNetwork(initState.NetworkName, actorstypes.Version16)
+	if v1600metadata == nil {
+		return cid.Undef, xerrors.Errorf("expected v16.0.0 metadata for network %s", initState.NetworkName)
+	}
+
+	err = actorsIn.ForEach(func(a address.Address, inActor *types.Actor) error {
+		outActor, err := actorsOut.GetActor(a)
+		if err != nil {
+			return xerrors.Errorf("failed to get actor in outTree: %w", err)
+		}
+
+		if inActor.Nonce != outActor.Nonce {
+			return xerrors.Errorf("mismatched nonce for actor %s", a)
+		} else if !inActor.Balance.Equals(outActor.Balance) {
+			return xerrors.Errorf("mismatched balance for actor %s: %d != %d", a, inActor.Balance, outActor.Balance)
+		} else if inActor.DelegatedAddress != outActor.DelegatedAddress && inActor.DelegatedAddress.String() != outActor.DelegatedAddress.String() {
+			return xerrors.Errorf("mismatched address for actor %s: %s != %s", a, inActor.DelegatedAddress, outActor.DelegatedAddress)
+		} else if inActor.Head != outActor.Head && a != builtin.SystemActorAddr {
+			return xerrors.Errorf("mismatched head for actor %s", a)
+		}
+
+		// Check that the actor code has changed to the new expected value; work backward by getting the
+		// actor name from the new code CID.
+		if actorName, version, ok := actors.GetActorMetaByCode(outActor.Code); !ok {
+			return xerrors.Errorf("failed to get actor meta for code %s", outActor.Code)
+		} else if version != actorstypes.Version16 {
+			return xerrors.Errorf("unexpected actor version for %s: %d", actorName, version)
+		} else if oldCode, ok := v1600metadata.Actors[actorName]; !ok {
+			return xerrors.Errorf("missing actor %s in v16.0.0 metadata", actorName)
+		} else if oldCode != inActor.Code {
+			return xerrors.Errorf("unexpected actor code for %s: %s != %s", actorName, oldCode, outActor.Code)
+		}
+
+		return nil
+	})
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to sanity check migration: %w", err)
+	}
+
+	// Persist the result.
+	newRoot, err := actorsOut.Flush(ctx)
+	if err != nil {
+		return cid.Undef, xerrors.Errorf("failed to persist new state root: %w", err)
+	}
+
+	return newRoot, nil
+}
+
 ////////////////////
 
 // Example upgrade function if upgrade requires only code changes
diff --git a/gen/bundle/bundle.go b/gen/bundle/bundle.go
index 6f0ad73dad9..6b8a5b3835d 100644
--- a/gen/bundle/bundle.go
+++ b/gen/bundle/bundle.go
@@ -22,7 +22,9 @@ var EmbeddedBuiltinActorsMetadata = []*BuiltinActorsMetadata{
 {{- range . }} {
 	Network: {{printf "%q" .Network}},
 	Version: {{.Version}},
-	{{if .BundleGitTag}} BundleGitTag: {{printf "%q" .BundleGitTag}}, {{end}}
+	{{- if .BundleGitTag }}
+		BundleGitTag: {{printf "%q" .BundleGitTag}},
+	{{- end }}
 	ManifestCid: cid.MustParse({{printf "%q" .ManifestCid}}),
 	Actors: map[string]cid.Cid {
 	{{- range $name, $cid := .Actors }}
@@ -73,7 +75,12 @@ func main() {
 					m.BundleGitTag = gitTag
 				}
 			} else {
-				m.BundleGitTag = getOldGitTagFromEmbeddedMetadata(m)
+				for _, v := range build.EmbeddedBuiltinActorsMetadata {
+					// if we agree on the manifestCid for the previously embedded metadata, use the previously set tag
+					if m.Version == v.Version && m.Network == v.Network && m.ManifestCid == v.ManifestCid {
+						m.BundleGitTag = v.BundleGitTag
+					}
+				}
 			}
 		}
 	}
@@ -89,14 +96,3 @@ func main() {
 		panic(err)
 	}
 }
-
-func getOldGitTagFromEmbeddedMetadata(m *build.BuiltinActorsMetadata) string {
-	for _, v := range build.EmbeddedBuiltinActorsMetadata {
-		// if we agree on the manifestCid for the previously embedded metadata, use the previously set tag
-		if m.Version == v.Version && m.Network == v.Network && m.ManifestCid == v.ManifestCid {
-			return m.BundleGitTag
-		}
-	}
-
-	return ""
-}
diff --git a/itests/kit/ensemble.go b/itests/kit/ensemble.go
index ac1e2658c7d..d7b5feb58d6 100644
--- a/itests/kit/ensemble.go
+++ b/itests/kit/ensemble.go
@@ -182,7 +182,7 @@ func NewEnsemble(t *testing.T, opts ...EnsembleOpt) *Ensemble {
 	if n.options.mockProofs {
 		require.NoError(t, build.UseNetworkBundle("testing-fake-proofs"))
 	} else {
-		require.NoError(t, build.UseNetworkBundle("testing"))
+		require.NoError(t, build.UseNetworkBundle(n.options.networkName))
 	}
 
 	buildconstants.EquivocationDelaySecs = 0
@@ -1110,7 +1110,7 @@ func (n *Ensemble) generateGenesis() *genesis.Template {
 		NetworkVersion:   n.genesis.version,
 		Accounts:         n.genesis.accounts,
 		Miners:           n.genesis.miners,
-		NetworkName:      "test",
+		NetworkName:      n.options.networkName,
 		Timestamp:        uint64(time.Now().Unix() - int64(n.options.pastOffset.Seconds())),
 		VerifregRootKey:  verifRoot,
 		RemainderAccount: gen.DefaultRemainderAccountActor,
diff --git a/itests/kit/ensemble_opts.go b/itests/kit/ensemble_opts.go
index a2f113f9411..22217273364 100644
--- a/itests/kit/ensemble_opts.go
+++ b/itests/kit/ensemble_opts.go
@@ -23,6 +23,7 @@ type ensembleOpts struct {
 	verifiedRoot genesisAccount
 	accounts     []genesisAccount
 	mockProofs   bool
+	networkName  string
 
 	upgradeSchedule stmgr.UpgradeSchedule
 }
@@ -33,6 +34,7 @@ var DefaultEnsembleOpts = ensembleOpts{
 		Height:  -1,
 		Network: buildconstants.TestNetworkVersion,
 	}},
+	networkName: "testing", // to match the network bundle
 }
 
 // MockProofs activates mock proofs for the entire ensemble.
@@ -62,6 +64,14 @@ func RootVerifier(key *key.Key, balance abi.TokenAmount) EnsembleOpt {
 	}
 }
 
+// NetworkName sets the network name for the ensemble in the genesis template.
+func NetworkName(name string) EnsembleOpt {
+	return func(opts *ensembleOpts) error {
+		opts.networkName = name
+		return nil
+	}
+}
+
 // Account sets up an account at genesis with the specified key and balance.
 func Account(key *key.Key, balance abi.TokenAmount) EnsembleOpt {
 	return func(opts *ensembleOpts) error {
diff --git a/itests/migration_test.go b/itests/migration_test.go
index a909837b85d..a77e9cac4ad 100644
--- a/itests/migration_test.go
+++ b/itests/migration_test.go
@@ -7,6 +7,7 @@ import (
 	"testing"
 	"time"
 
+	"github.com/ipfs/go-cid"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 
@@ -1150,3 +1151,102 @@ func preFip0081StateMinerInitialPledgeForSector(ctx context.Context, t *testing.
 
 	return types.BigDiv(types.BigMul(initialPledge, initialPledgeNum), initialPledgeDen)
 }
+
+func TestMigrationTeepTockFix(t *testing.T) {
+	req := require.New(t)
+
+	kit.QuietMiningLogs()
+
+	var (
+		nv25Epoch    abi.ChainEpoch = 100
+		nv26Epoch    abi.ChainEpoch = nv25Epoch + 100
+		teepFixEpoch abi.ChainEpoch = nv26Epoch + 100
+	)
+	const networkName = "testing-fake-proofs"
+	buildconstants.UpgradeTockFixHeight = teepFixEpoch // needed to be set for migration to run
+
+	// this is normally done in build/init() but we start (on an untagged compile) as "mainnet",
+	// so we need to set it to "testing-fake-proofs" here to make actors.GetActorMetaByCode() return
+	// the right thing for our buggy actor codd CIDs.
+	buggyMetadata := build.BuggyBuiltinActorsMetadataForNetwork(networkName, actorstypes.Version16)
+	for name, c := range buggyMetadata.Actors {
+		t.Logf("adding buggy actor @ v%d for %s: %s", actorstypes.Version16, name, c)
+		actors.AddActorMeta(name, c, actorstypes.Version16)
+	}
+
+	testClient, _, ens := kit.EnsembleMinimal(t,
+		kit.MockProofs(),
+		kit.NetworkName(networkName),
+		kit.UpgradeSchedule(stmgr.Upgrade{
+			Network: network.Version24,
+			Height:  -1,
+		}, stmgr.Upgrade{
+			Height:    nv25Epoch,
+			Network:   network.Version25,
+			Migration: filcns.UpgradeActorsV16,
+			Expensive: true,
+		}, stmgr.Upgrade{
+			Height:    nv26Epoch,
+			Network:   network.Version26,
+			Migration: nil,
+		}, stmgr.Upgrade{
+			Height:    teepFixEpoch,
+			Network:   network.Version26,
+			Migration: filcns.UpgradeActorsV16Fix,
+		},
+		))
+
+	ens.InterconnectAll().BeginMining(2 * time.Millisecond)
+
+	clientApi := testClient.FullNode.(*impl.FullNodeAPI)
+	ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
+	defer cancel()
+
+	bs := blockstore.NewAPIBlockstore(testClient)
+	ctxStore := gstStore.WrapBlockStore(ctx, bs)
+
+	getManifestForVersion := func(av actorstypes.Version) cid.Cid {
+		manifestCid, ok := actors.GetManifest(av)
+		req.True(ok)
+		return manifestCid
+	}
+
+	for upgIdx, upgrade := range []struct {
+		epoch       abi.ChainEpoch
+		av          actorstypes.Version
+		getManifest func(actorstypes.Version) cid.Cid
+	}{
+		{0, actorstypes.Version15, getManifestForVersion},
+		{nv25Epoch, actorstypes.Version16, func(actorstypes.Version) cid.Cid { return buggyMetadata.ManifestCid }},
+		{nv26Epoch, actorstypes.Version16, func(actorstypes.Version) cid.Cid { return buggyMetadata.ManifestCid }},
+		{teepFixEpoch, actorstypes.Version16, getManifestForVersion},
+	} {
+		t.Run(fmt.Sprintf("upgrade-%d-at-%d", upgIdx, upgrade.epoch), func(t *testing.T) {
+			head := testClient.WaitTillChain(ctx, kit.HeightAtLeast(upgrade.epoch+5))
+			t.Logf("Testing at height: %d", head.Height())
+
+			currTs, err := clientApi.ChainHead(ctx)
+			req.NoError(err)
+
+			newStateTree, err := state.LoadStateTree(ctxStore, currTs.Blocks()[0].ParentStateRoot)
+			req.NoError(err)
+			req.Equal(types.StateTreeVersion5, newStateTree.Version())
+
+			systemAct, err := newStateTree.GetActor(builtin.SystemActorAddr)
+			req.NoError(err)
+
+			systemSt, err := system.Load(ctxStore, systemAct)
+			req.NoError(err)
+
+			manifestCid := upgrade.getManifest(upgrade.av)
+
+			manifestData, err := actors.LoadManifest(ctx, manifestCid, ctxStore)
+			req.NoError(err)
+			req.Equal(manifestData.Data, systemSt.GetBuiltinActors())
+
+			systemCode, ok := manifestData.Get(manifest.SystemKey)
+			req.True(ok)
+			req.Equal(systemCode, systemAct.Code)
+		})
+	}
+}
diff --git a/node/bundle/bundle.go b/node/bundle/bundle.go
index 1bdd229e1ec..1105d67d76e 100644
--- a/node/bundle/bundle.go
+++ b/node/bundle/bundle.go
@@ -85,7 +85,6 @@ func LoadBundles(ctx context.Context, bs blockstore.Blockstore, versions ...acto
 		if root != manifestCid {
 			return xerrors.Errorf("expected manifest for actors version %d does not match actual: %s != %s", av, manifestCid, root)
 		}
-
 	}
 
 	return nil


Reviews:
user: login: rvagg
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-04T11:17:24Z
user: login: Kubuxu
body: from reading SGWM but I'm not deep enough in migration code to be 100% confident
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T12:36:43Z
user: login: rjan90
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T12:38:30Z
user: login: rvagg
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-04T13:06:03Z
user: login: rjan90
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T14:26:54Z

Review comments:
diff_hunk: @@ -89,14 +96,3 @@ func main() {
 		panic(err)
 	}
 }
-
-func getOldGitTagFromEmbeddedMetadata(m *build.BuiltinActorsMetadata) string {
-	for _, v := range build.EmbeddedBuiltinActorsMetadata {
-		// if we agree on the manifestCid for the previously embedded metadata, use the previously set tag
-		if m.Version == v.Version && m.Network == v.Network && m.ManifestCid == v.ManifestCid {
-			return m.BundleGitTag
path: gen/bundle/bundle.go
user: login: rvagg
body: This was a bug, should have been `v.BundleGitTag` which is why the `BundleGitTag`s have been progressively disappearing from builtin_actors_gen.go each time we upgrade. I decided to just roll it in to the above code while I was fixing it.
created_at: 2025-04-04T11:17:23Z
author_association: MEMBER
diff_hunk: @@ -119,6 +121,9 @@ var UpgradeTeepInitialFilReserved = wholeFIL(1_200_000_000) // FIP-0100: 300M ->
 // the new daily fee to pre-Teep sectors being extended. This is 90 days on mainnet.
 var UpgradeTockHeight abi.ChainEpoch = UpgradeTeepHeight + builtin.EpochsInDay*7
 
+// 2025-04-07T23:00:00Z
+const UpgradeTockFixHeight abi.ChainEpoch = 2558014
path: build/buildconstants/params_calibnet.go
user: login: rjan90
body: Confirming that the epoch here correct, and that we have [confirmation from the Forest team](https://filecoinproject.slack.com/archives/C05P37R9KQD/p1743750721560579?thread_ts=1743750513.797599&cid=C05P37R9KQD) about the epoch as well.

created_at: 2025-04-04T12:38:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1150,3 +1151,102 @@ func preFip0081StateMinerInitialPledgeForSector(ctx context.Context, t *testing.
 
 	return types.BigDiv(types.BigMul(initialPledge, initialPledgeNum), initialPledgeDen)
 }
+
+func TestMigrationTeepTockFix(t *testing.T) {
+	req := require.New(t)
+
+	kit.QuietMiningLogs()
+
+	var (
+		nv25Epoch    abi.ChainEpoch = 100
+		nv26Epoch    abi.ChainEpoch = nv25Epoch + 100
+		teepFixEpoch abi.ChainEpoch = nv26Epoch + 100
+	)
+	const networkName = "testing-fake-proofs"
+	buildconstants.UpgradeTockFixHeight = teepFixEpoch // needed to be set for migration to run
+
+	// this is normally done in build/init() but we start (on an untagged compile) as "mainnet",
+	// so we need to set it to "testing-fake-proofs" here to make actors.GetActorMetaByCode() return
+	// the right thing for our buggy actor codd CIDs.
+	buggyMetadata := build.BuggyBuiltinActorsMetadataForNetwork(networkName, actorstypes.Version16)
+	for name, c := range buggyMetadata.Actors {
+		t.Logf("adding buggy actor @ v%d for %s: %s", actorstypes.Version16, name, c)
+		actors.AddActorMeta(name, c, actorstypes.Version16)
+	}
+
+	testClient, _, ens := kit.EnsembleMinimal(t,
+		kit.MockProofs(),
+		kit.NetworkName(networkName),
+		kit.UpgradeSchedule(stmgr.Upgrade{
+			Network: network.Version24,
+			Height:  -1,
+		}, stmgr.Upgrade{
+			Height:    nv25Epoch,
+			Network:   network.Version25,
+			Migration: filcns.UpgradeActorsV16,
+			Expensive: true,
+		}, stmgr.Upgrade{
+			Height:    nv26Epoch,
+			Network:   network.Version26,
+			Migration: nil,
+		}, stmgr.Upgrade{
+			Height:    teepFixEpoch,
+			Network:   network.Version26,
+			Migration: filcns.UpgradeActorsV16Fix,
+		},
+		))
+
+	ens.InterconnectAll().BeginMining(2 * time.Millisecond)
+
+	clientApi := testClient.FullNode.(*impl.FullNodeAPI)
+	ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
+	defer cancel()
+
+	bs := blockstore.NewAPIBlockstore(testClient)
+	ctxStore := gstStore.WrapBlockStore(ctx, bs)
+
+	getManifestForVersion := func(av actorstypes.Version) cid.Cid {
+		manifestCid, ok := actors.GetManifest(av)
+		req.True(ok)
+		return manifestCid
+	}
+
+	for upgIdx, upgrade := range []struct {
+		epoch       abi.ChainEpoch
+		av          actorstypes.Version
+		getManifest func(actorstypes.Version) cid.Cid
+	}{
+		{0, actorstypes.Version15, getManifestForVersion},
+		{nv25Epoch, actorstypes.Version16, func(actorstypes.Version) cid.Cid { return buggyMetadata.ManifestCid }},
+		{nv26Epoch, actorstypes.Version16, func(actorstypes.Version) cid.Cid { return buggyMetadata.ManifestCid }},
+		{teepFixEpoch, actorstypes.Version16, getManifestForVersion},
+	} {
+		t.Run(fmt.Sprintf("upgrade-%d-at-%d", upgIdx, upgrade.epoch), func(t *testing.T) {
path: itests/migration_test.go
user: login: rvagg
body: @ZenGround0 if your contract deploy code is straightforward enough it could be inserted here with a `true`/`false` in the test case struct to say whether it should pass or fail (which would be `true`, `false`, `false`, `true`). The most recent simple contract success/fail assertion like that we did is in fevm_test.go in `TestTstore` that tests before and after the nv25 upgrade that `TSTORE` works.
created_at: 2025-04-04T13:06:03Z
author_association: MEMBER
diff_hunk: @@ -1150,3 +1151,102 @@ func preFip0081StateMinerInitialPledgeForSector(ctx context.Context, t *testing.
 
 	return types.BigDiv(types.BigMul(initialPledge, initialPledgeNum), initialPledgeDen)
 }
+
+func TestMigrationTeepTockFix(t *testing.T) {
+	req := require.New(t)
+
+	kit.QuietMiningLogs()
+
+	var (
+		nv25Epoch    abi.ChainEpoch = 100
+		nv26Epoch    abi.ChainEpoch = nv25Epoch + 100
+		teepFixEpoch abi.ChainEpoch = nv26Epoch + 100
+	)
+	const networkName = "testing-fake-proofs"
+	buildconstants.UpgradeTockFixHeight = teepFixEpoch // needed to be set for migration to run
+
+	// this is normally done in build/init() but we start (on an untagged compile) as "mainnet",
+	// so we need to set it to "testing-fake-proofs" here to make actors.GetActorMetaByCode() return
+	// the right thing for our buggy actor codd CIDs.
+	buggyMetadata := build.BuggyBuiltinActorsMetadataForNetwork(networkName, actorstypes.Version16)
+	for name, c := range buggyMetadata.Actors {
+		t.Logf("adding buggy actor @ v%d for %s: %s", actorstypes.Version16, name, c)
+		actors.AddActorMeta(name, c, actorstypes.Version16)
+	}
+
+	testClient, _, ens := kit.EnsembleMinimal(t,
+		kit.MockProofs(),
+		kit.NetworkName(networkName),
+		kit.UpgradeSchedule(stmgr.Upgrade{
+			Network: network.Version24,
+			Height:  -1,
+		}, stmgr.Upgrade{
+			Height:    nv25Epoch,
+			Network:   network.Version25,
+			Migration: filcns.UpgradeActorsV16,
+			Expensive: true,
+		}, stmgr.Upgrade{
+			Height:    nv26Epoch,
+			Network:   network.Version26,
+			Migration: nil,
+		}, stmgr.Upgrade{
+			Height:    teepFixEpoch,
+			Network:   network.Version26,
+			Migration: filcns.UpgradeActorsV16Fix,
+		},
+		))
+
+	ens.InterconnectAll().BeginMining(2 * time.Millisecond)
+
+	clientApi := testClient.FullNode.(*impl.FullNodeAPI)
+	ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
+	defer cancel()
+
+	bs := blockstore.NewAPIBlockstore(testClient)
+	ctxStore := gstStore.WrapBlockStore(ctx, bs)
+
+	getManifestForVersion := func(av actorstypes.Version) cid.Cid {
+		manifestCid, ok := actors.GetManifest(av)
+		req.True(ok)
+		return manifestCid
+	}
+
+	for upgIdx, upgrade := range []struct {
+		epoch       abi.ChainEpoch
+		av          actorstypes.Version
+		getManifest func(actorstypes.Version) cid.Cid
+	}{
+		{0, actorstypes.Version15, getManifestForVersion},
+		{nv25Epoch, actorstypes.Version16, func(actorstypes.Version) cid.Cid { return buggyMetadata.ManifestCid }},
+		{nv26Epoch, actorstypes.Version16, func(actorstypes.Version) cid.Cid { return buggyMetadata.ManifestCid }},
+		{teepFixEpoch, actorstypes.Version16, getManifestForVersion},
+	} {
+		t.Run(fmt.Sprintf("upgrade-%d-at-%d", upgIdx, upgrade.epoch), func(t *testing.T) {
path: itests/migration_test.go
user: login: rjan90
body: Will merge now. Following [up here](https://filecoinproject.slack.com/archives/C08LNJV0J1Z/p1743776714411149?thread_ts=1743772884.385399&cid=C08LNJV0J1Z), that these test cases can be implemented and land once the US team members get online
created_at: 2025-04-04T14:26:54Z
author_association: CONTRIBUTOR

PR comments:
user: login: rjan90
created_at: 2025-04-04T11:24:59Z
body: > (and current butterflynet if that's still running)

The Butterfly network is still running (and is on nv26 as well). So this could be a good test to deploy to reduce risk for the Calibnet upgrade.

```
lotus info
Network: butterflynet
StartTime: 238h17m25s (started at 2025-03-25 13:07:01 +0000 UTC)
Chain: [sync ok] [basefee 100 aFIL] [epoch 46140]
Peers to: [publish messages 2] [publish blocks 2]

lotus state actor-cids
Network Version: 26
Actor Version: 16
Manifest CID: bafy2bzacedn2h6huw7v2elmmdmpv4phdv4wjwgct7kcrrtdgz7jkjdm6uwa6k
```
author_association: CONTRIBUTOR
user: login: rvagg
created_at: 2025-04-04T13:03:37Z
body: Pushed a fix after writing a `TestMigrationTeepTockFix` integration test that walks through 24->25->26->TockFix and tests state at each point. There were a few errors in my migration and the way I was structuring things. I also included the `"testing"` and `"testing-fake-proofs"` v16.0.0 bundles in the v16 tarball because that's what we use in itests (TIL).
author_association: MEMBER
user: login: rvagg
created_at: 2025-04-04T13:11:01Z
body: Tarball contents:

```
$ tar xf build/actors/v16.tar.zst 
$ sha256sum *.car
2547c25af210d1510b1236dd5aa1b80b45e9205ce88f067c33a4459d612060a6  builtin-actors-butterflynet.car
128298dc6ca39db42bdd1902a8ef8b44e22a22af93ffe6cad381d6e95f646b0a  builtin-actors-butterflynet-v16.0.0.car
2b09cac6c7a31181725549a6e9a05ba4ff003edc71e8a5a6491cebb1a6a33280  builtin-actors-calibrationnet.car
e2ce87e54f3d156b3d8982c05766e1876f6b7f500295e87c39f0905afcbc6277  builtin-actors-calibrationnet-v16.0.0.car
fb767f19d17ba35ec0866da45883310dfe9af1c032e0e910b04b1b38e8d7c00c  builtin-actors-caterpillarnet.car
29a03ec0afce8529e38840d84b13136029fc04825c628e3dc517412292a988e5  builtin-actors-devnet.car
d7052f763356c901cfa206607be1e2a8e0dbd229800e909bc007cde9223a64da  builtin-actors-devnet-v16.0.0.car
2ec8efdd12636cb760d0740b02bfe808e23fa1ace04343f9fb01596114147e40  builtin-actors-mainnet.car
0dcf269fac916a760b4b74b91961c65a58e2e3ccc0510b483c4c564c6c0250d4  builtin-actors-testing.car
ee08678385b3dd1826e96e6330c59bc43460fdf7b45dc58f3c04645697d4e91e  builtin-actors-testing-fake-proofs.car
99b3b188ef3963f1db6a456f50a9b3d5b753a09dc38b5e3a2b6948feaf5efb9d  builtin-actors-testing-fake-proofs-v16.0.0.car
cad6771bd62106e2d37fec8f7920895d1c691eec7307fede445bf5234e20a172  builtin-actors-testing-v16.0.0.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-butterflynet.sha256
2547c25af210d1510b1236dd5aa1b80b45e9205ce88f067c33a4459d612060a6  builtin-actors-butterflynet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.0/builtin-actors-butterflynet.sha256
128298dc6ca39db42bdd1902a8ef8b44e22a22af93ffe6cad381d6e95f646b0a  builtin-actors-butterflynet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-calibrationnet.sha256
2b09cac6c7a31181725549a6e9a05ba4ff003edc71e8a5a6491cebb1a6a33280  builtin-actors-calibrationnet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.0/builtin-actors-calibrationnet.sha256
e2ce87e54f3d156b3d8982c05766e1876f6b7f500295e87c39f0905afcbc6277  builtin-actors-calibrationnet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-caterpillarnet.sha256
fb767f19d17ba35ec0866da45883310dfe9af1c032e0e910b04b1b38e8d7c00c  builtin-actors-caterpillarnet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-devnet.sha256
29a03ec0afce8529e38840d84b13136029fc04825c628e3dc517412292a988e5  builtin-actors-devnet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.0/builtin-actors-devnet.sha256
d7052f763356c901cfa206607be1e2a8e0dbd229800e909bc007cde9223a64da  builtin-actors-devnet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-mainnet.sha256
2ec8efdd12636cb760d0740b02bfe808e23fa1ace04343f9fb01596114147e40  builtin-actors-mainnet.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-testing.sha256
0dcf269fac916a760b4b74b91961c65a58e2e3ccc0510b483c4c564c6c0250d4  builtin-actors-testing.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.1/builtin-actors-testing-fake-proofs.sha256
ee08678385b3dd1826e96e6330c59bc43460fdf7b45dc58f3c04645697d4e91e  builtin-actors-testing-fake-proofs.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.0/builtin-actors-testing-fake-proofs.sha256
99b3b188ef3963f1db6a456f50a9b3d5b753a09dc38b5e3a2b6948feaf5efb9d  builtin-actors-testing-fake-proofs.car
$ curl -sL https://github.com/filecoin-project/builtin-actors/releases/download/v16.0.0/builtin-actors-testing.sha256
cad6771bd62106e2d37fec8f7920895d1c691eec7307fede445bf5234e20a172  builtin-actors-testing.car
```
author_association: MEMBER