diff --git a/.circleci/config.yml b/.circleci/config.yml index 41468fa2a..300243932 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -924,6 +924,11 @@ workflows: suite: itest-mempool target: "./itests/mempool_test.go" + - test: + name: test-itest-mpool_push_with_uuid + suite: itest-mpool_push_with_uuid + target: "./itests/mpool_push_with_uuid_test.go" + - test: name: test-itest-multisig suite: itest-multisig diff --git a/CHANGELOG.md b/CHANGELOG.md index 235763772..0ce30c688 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,108 @@ # Lotus changelog +# v1.17.1 / 2022-09-06 + +This is an optional release of Lotus. This release introduces the [Splitstore v2 - beta](https://github.com/filecoin-project/lotus/blob/master/blockstore/splitstore/README.md)(beta). Splitstore aims to reduce the node performance impact that's caused by the Filecoin's very large, and continuously growing datastore. Splitstore v2 introduces the coldstore auto prune/GC feature & some improvements for the hotstore. We welcome all lotus users to join the early testers and try the new Splitstore out, you can leave any feedback or report issues in [this discussion](https://github.com/filecoin-project/lotus/discussions/9179) or create an issue. As always, multiple small bug fixes, new features & improvements are also included in this release. + + +## New features + +- feat:chain:splitstore auto prune ([filecoin-project/lotus#9123](https://github.com/filecoin-project/lotus/pull/9123)) + - Trigger SplitStore chain prune on head events. [Link to the documentation](https://lotus.filecoin.io/lotus/manage/chain-management/#cold-store-garbage-collection) +- feat:chain:splitstore chain prune ([filecoin-project/lotus#9056](https://github.com/filecoin-project/lotus/pull/9056)) + - Adds `chain prune` command to trigger manual garbage collection. [Link to the documentation](https://lotus.filecoin.io/lotus/manage/chain-management/#cold-store-garbage-collection) +- feat: storage: Path type filters ([filecoin-project/lotus#9013](https://github.com/filecoin-project/lotus/pull/9013)) + - Adds new fields to `sectorstore.json` to allow file type filtering. [Link to the documentation](https://lotus.filecoin.io/storage-providers/operate/custom-storage-layout/#filter-sector-types-1) +- feat: sealing: storage redeclare/detach ([filecoin-project/lotus#9032](https://github.com/filecoin-project/lotus/pull/9032)) + - Adds new Lotus commands to detach and redeclare storage paths. [Link to the documentation](https://lotus.filecoin.io/storage-providers/operate/custom-storage-layout/#detach-storage-paths) +- feat: worker: Add stop cmd for lotus worker ([filecoin-project/lotus#9101](https://github.com/filecoin-project/lotus/pull/9101)) + - Adds new `lotus-worker stop` command. [Link to the documentation](https://lotus.filecoin.io/storage-providers/seal-workers/seal-workers/#stop-the-worker) +- feat: market: Add lotus-shed cmd to get total active deal storage ([filecoin-project/lotus#9113](https://github.com/filecoin-project/lotus/pull/9113)) + - `get-deals-total-storage` - View the total storage available in all active market deals +- feat: wdpost: Envvar for limiting recovering sectors ([filecoin-project/lotus#9106](https://github.com/filecoin-project/lotus/pull/9106)) + - Adds new envvar to limit the number of sectors declared in the recover message + + +## Improvements + +- feat: sealing: Allow overriding worker hostname ([filecoin-project/lotus#9116](https://github.com/filecoin-project/lotus/pull/9116)) +- feat: build: run fiximports on make actors-gen ([filecoin-project/lotus#9114](https://github.com/filecoin-project/lotus/pull/9114)) +- feat: FVM: always enable tracing for user-triggered executions ([filecoin-project/lotus#9036](https://github.com/filecoin-project/lotus/pull/9036)) +- feat: miner cli: proving deadline command enchantments ([filecoin-project/lotus#9109](https://github.com/filecoin-project/lotus/pull/9109)) +- FVM: Use MaxInt64 for Implicit Message gas limits ([filecoin-project/lotus#9037](https://github.com/filecoin-project/lotus/pull/9037)) +- lotus shed addr decode +- push lotus-gateway to docker hub ([filecoin-project/lotus#8969](https://github.com/filecoin-project/lotus/pull/8969)) +- Review Response +- test: net: net and conngater tests ([filecoin-project/lotus#8084](https://github.com/filecoin-project/lotus/pull/8084)) +- Update FFI ([filecoin-project/lotus#9139](https://github.com/filecoin-project/lotus/pull/9139)) + +## Bug Fixes + +- backport: 9153: detach storage on worker shutdown ([filecoin-project/lotus#9127](https://github.com/filecoin-project/lotus/pull/9165)) +- fix makegen +- fix: build: use GOCC when building lotus-fountain ([filecoin-project/lotus#9127](https://github.com/filecoin-project/lotus/pull/9127)) +- fix: ci: Forgot a .sh on the end of a the new publish script ([filecoin-project/lotus#9088](https://github.com/filecoin-project/lotus/pull/9088)) +- fix: cli: ./lotus-miner actor control list, if the owner is not account ([filecoin-project/lotus#9072](https://github.com/filecoin-project/lotus/pull/9072)) +- fix: deps: update FFI to fix a slow memory leak ([filecoin-project/lotus#9042](https://github.com/filecoin-project/lotus/pull/9042)) +- fix: FVM: record message applied metrics ([filecoin-project/lotus#9052](https://github.com/filecoin-project/lotus/pull/9052)) +- fix: gas: estimate gas with a zero base-fee ([filecoin-project/lotus#8991](https://github.com/filecoin-project/lotus/pull/8991)) +- fix: post: restrict recoveries per deadline ([filecoin-project/lotus#9111](https://github.com/filecoin-project/lotus/pull/9111)) +- fix: sealing: Workaround for sealing bug ([filecoin-project/lotus#9043](https://github.com/filecoin-project/lotus/pull/9043)) +- fix: storage: don't panic in getCommitCutoff when precommit is not found ([filecoin-project/lotus#9141](https://github.com/filecoin-project/lotus/pull/9141)) +- fix: test: deflake TestQuotePriceForUnsealedRetrieval ([filecoin-project/lotus#9084](https://github.com/filecoin-project/lotus/pull/9084)) + +## Dependency Updates + +- github.com/multiformats/go-multibase (v0.0.3 -> v0.1.1) + +## Others + +- chore: ci: Update xcode version for macos builds ([filecoin-project/lotus#9164)](https://github.com/filecoin-project/lotus/pull/9164)) +- Merge branch 'docs/ysrotciv-desc' +- Merge branch 'feat/f8-worker-env' +- Merge branch 'LexLuthr-feat/minerWithdrawBalanceAPI' +- Merge branch 'LexLuthr-feat/SchedRemoveRequest' +- base256emoji ([filecoin-project/lotus#9038)](https://github.com/filecoin-project/lotus/pull/9038)) +- chore: interop: update interop assets ([filecoin-project/lotus#9093)](https://github.com/filecoin-project/lotus/pull/9093)) +- chore: merge: releases (v1.17.0) to master ([filecoin-project/lotus#9146)](https://github.com/filecoin-project/lotus/pull/9146)) +- chore: sealer: Fixup typos ([filecoin-project/lotus#9040)](https://github.com/filecoin-project/lotus/pull/9040)) +- chore:docs:remove readme reference to deprecated specs-actors ([filecoin-project/lotus#8984)](https://github.com/filecoin-project/lotus/pull/8984)) +- ci : Change default shell options for snapcraft publish ([filecoin-project/lotus#9122)](https://github.com/filecoin-project/lotus/pull/9122)) +- ci: More tweaks to snapcraft release process ([filecoin-project/lotus#9090)](https://github.com/filecoin-project/lotus/pull/9090)) +- ci: Publish to both lotus and lotus-filecoin for snap ([filecoin-project/lotus#9119)](https://github.com/filecoin-project/lotus/pull/9119)) +- ci: Run snap builds for lotus and lotus-filecoin in parallel ([filecoin-project/lotus#9133)](https://github.com/filecoin-project/lotus/pull/9133)) +- ci: Switches goreleaser notes back to default (keep-existing) ([filecoin-project/lotus#9120)](https://github.com/filecoin-project/lotus/pull/9120)) +- ci: update snapcraft and release flow logic ([filecoin-project/lotus#8994)](https://github.com/filecoin-project/lotus/pull/8994)) +- ci: Use goreleaser to build macos universal binaries (including M1 macs) ([filecoin-project/lotus#9096)](https://github.com/filecoin-project/lotus/pull/9096)) +- ci:testing:remove codecov ([filecoin-project/lotus#9062)](https://github.com/filecoin-project/lotus/pull/9062)) + + +Contributors + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| Łukasz Magiera | 34 | +2329/-317 | 163 | +| ZenGround0 | 2 | +1527/-89 | 38 | +| Ian Davis | 14 | +751/-232 | 30 | +| LexLuthr | 17 | +480/-225 | 63 | +| TheMenko | 4 | +323/-61 | 5 | +| Aayush | 10 | +285/-92 | 30 | +| beck | 3 | +143/-93 | 3 | +| Steven Allen | 4 | +95/-75 | 9 | +| zenground0 | 5 | +44/-116 | 9 | +| Shrenuj Bansal | 7 | +136/-7 | 16 | +| Patrick Deuse | 3 | +76/-57 | 3 | +| Jennifer Wang | 3 | +6/-52 | 11 | +| zl | 2 | +20/-16 | 2 | +| Aayush Rajasekaran | 2 | +6/-6 | 2 | +| Clint Armstrong | 1 | +7/-3 | 1 | +| Cory Schwartz | 2 | +9/-0 | 2 | +| Jorropo | 1 | +3/-2 | 2 | +| Geoff Stuart | 1 | +5/-0 | 1 | +| Frank Y | 1 | +2/-2 | 2 | +| Aloxaf | 1 | +2/-2 | 1 | + + # v1.17.0 / 2022-08-02 This is an optional release of Lotus. This feature release introduces a lot of new sealing and scheduler improvements, and many other functionalities and bug fixes. diff --git a/api/api_full.go b/api/api_full.go index 0c9fbd34c..ce463f82f 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -19,8 +19,8 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin/v8/market" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/builtin/v8/paych" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" abinetwork "github.com/filecoin-project/go-state-types/network" diff --git a/api/api_gateway.go b/api/api_gateway.go index 7d84e807c..b95299493 100644 --- a/api/api_gateway.go +++ b/api/api_gateway.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" apitypes "github.com/filecoin-project/lotus/api/types" diff --git a/api/api_storage.go b/api/api_storage.go index 4d05419d6..1caf459d6 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -18,7 +18,7 @@ import ( "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/builtin/v8/market" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" abinetwork "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/chain/actors/builtin" diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 0544395b7..f5b023207 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -27,8 +27,8 @@ import ( auth "github.com/filecoin-project/go-jsonrpc/auth" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" crypto "github.com/filecoin-project/go-state-types/crypto" dline "github.com/filecoin-project/go-state-types/dline" network "github.com/filecoin-project/go-state-types/network" diff --git a/api/proxy_gen.go b/api/proxy_gen.go index a63f5ee52..ff1e560c4 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -25,8 +25,8 @@ import ( "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/builtin/v8/paych" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" abinetwork "github.com/filecoin-project/go-state-types/network" diff --git a/api/v0api/full.go b/api/v0api/full.go index cca358ada..3600663b4 100644 --- a/api/v0api/full.go +++ b/api/v0api/full.go @@ -14,8 +14,8 @@ import ( "github.com/filecoin-project/go-fil-markets/retrievalmarket" "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/builtin/v8/paych" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" abinetwork "github.com/filecoin-project/go-state-types/network" diff --git a/api/v0api/gateway.go b/api/v0api/gateway.go index ab374b59c..bd55917c7 100644 --- a/api/v0api/gateway.go +++ b/api/v0api/gateway.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" abinetwork "github.com/filecoin-project/go-state-types/network" diff --git a/api/v0api/proxy_gen.go b/api/v0api/proxy_gen.go index b568fe156..57cf730ba 100644 --- a/api/v0api/proxy_gen.go +++ b/api/v0api/proxy_gen.go @@ -16,8 +16,8 @@ import ( "github.com/filecoin-project/go-fil-markets/retrievalmarket" "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/builtin/v8/paych" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" abinetwork "github.com/filecoin-project/go-state-types/network" diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 7dc9c0d63..8df8a89f7 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -26,8 +26,8 @@ import ( auth "github.com/filecoin-project/go-jsonrpc/auth" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" paych "github.com/filecoin-project/go-state-types/builtin/v8/paych" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" crypto "github.com/filecoin-project/go-state-types/crypto" dline "github.com/filecoin-project/go-state-types/dline" network "github.com/filecoin-project/go-state-types/network" diff --git a/api/v0api/v1_wrapper.go b/api/v0api/v1_wrapper.go index d2b58ccb8..f58b0420f 100644 --- a/api/v0api/v1_wrapper.go +++ b/api/v0api/v1_wrapper.go @@ -12,7 +12,7 @@ import ( "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/lotus/api" diff --git a/build/actors/v9.tar.zst b/build/actors/v9.tar.zst new file mode 100644 index 000000000..db85bc587 Binary files /dev/null and b/build/actors/v9.tar.zst differ diff --git a/build/builtin_actors.go b/build/builtin_actors.go index ba61fc70e..4d283919e 100644 --- a/build/builtin_actors.go +++ b/build/builtin_actors.go @@ -18,6 +18,8 @@ import ( "github.com/ipld/go-car" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" @@ -28,14 +30,14 @@ var embeddedBuiltinActorReleases embed.FS func init() { if BundleOverrides == nil { - BundleOverrides = make(map[actors.Version]string) + BundleOverrides = make(map[actorstypes.Version]string) } for _, av := range actors.Versions { path := os.Getenv(fmt.Sprintf("LOTUS_BUILTIN_ACTORS_V%d_BUNDLE", av)) if path == "" { continue } - BundleOverrides[actors.Version(av)] = path + BundleOverrides[actorstypes.Version(av)] = path } if err := loadManifests(NetworkBundle); err != nil { panic(err) @@ -55,7 +57,7 @@ func UseNetworkBundle(netw string) error { } func loadManifests(netw string) error { - overridden := make(map[actors.Version]struct{}) + overridden := make(map[actorstypes.Version]struct{}) var newMetadata []*BuiltinActorsMetadata // First, prefer overrides. for av, path := range BundleOverrides { @@ -94,7 +96,7 @@ func loadManifests(netw string) error { type BuiltinActorsMetadata struct { Network string - Version actors.Version + Version actorstypes.Version ManifestCid cid.Cid Actors map[string]cid.Cid } @@ -182,7 +184,7 @@ func readEmbeddedBuiltinActorsMetadata(bundle string) ([]*BuiltinActorsMetadata, } bundles = append(bundles, &BuiltinActorsMetadata{ Network: name, - Version: actors.Version(version), + Version: actorstypes.Version(version), ManifestCid: root, Actors: actorCids, }) @@ -229,7 +231,7 @@ func readBundleManifest(r io.Reader) (cid.Cid, map[string]cid.Cid, error) { } // GetEmbeddedBuiltinActorsBundle returns the builtin-actors bundle for the given actors version. -func GetEmbeddedBuiltinActorsBundle(version actors.Version) ([]byte, bool) { +func GetEmbeddedBuiltinActorsBundle(version actorstypes.Version) ([]byte, bool) { fi, err := embeddedBuiltinActorReleases.Open(fmt.Sprintf("actors/v%d.tar.zst", version)) if err != nil { return nil, false diff --git a/build/builtin_actors_gen.go b/build/builtin_actors_gen.go index f8d25aa3c..f3f5ecfc2 100644 --- a/build/builtin_actors_gen.go +++ b/build/builtin_actors_gen.go @@ -23,6 +23,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzacec6xctjxybp7r3kkhase56o6jsaiua7ure5ttu2xfuojt4jhlsoa6"), "verifiedregistry": MustParseCid("bafk2bzacec2hcqlqcfacylfcrhhliwkisvh4y3adwt47xkf2gdvodwu6ccepc"), }, +}, { + Network: "butterflynet", + Version: 9, + ManifestCid: MustParseCid("bafy2bzacebor5miojgkvov7gtiirg7hqxgm54x3hxytbho3qloqryg2r67qaq"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzacecd7kgfzbyu4sylskgf7wjqabo43y3d7xqgvz7r67pzr3ovn3sj7y"), + "cron": MustParseCid("bafk2bzacea6dc2a6skmp7saa43dcofp7zvtklvya75bai2k4k6qnkpcfzklug"), + "init": MustParseCid("bafk2bzacean5v7lbsspxmdkcwhac44sk332uwyfteibtxyhgoeabwbzbh736c"), + "multisig": MustParseCid("bafk2bzacea43lypvbof5kwnk2flzrwdrqqvzypom5xyheeuaab6dmuiafngae"), + "paymentchannel": MustParseCid("bafk2bzacecsdimcgztl4tfodnqc35jojoy4mzaqqidubialqmqaa3zpv4h3rw"), + "reward": MustParseCid("bafk2bzacedy3utj67mewe7rpieaex3sf7qxfkgiwtlgg4wlqyl74la65njbn2"), + "storagemarket": MustParseCid("bafk2bzacec4xpazf3l2p5qkknjsku2sd3skqevk7gxryumbelwhfbs7mgjnpa"), + "storageminer": MustParseCid("bafk2bzaceb5scwcdcou56vyhxq3c7vcefjau44v2h6nvsus45wqopt3hadzae"), + "storagepower": MustParseCid("bafk2bzacebxl4ssugntkckifkq6sydczcas463bmonwi2m5hddurzzcukdzyg"), + "system": MustParseCid("bafk2bzacedtw2ebtl3uccbqfcm6jd7teinlpktcglopuaxa6ev334jhs46hso"), + "verifiedregistry": MustParseCid("bafk2bzaceds62ys6rpbtjjsemohalxnkr3jtqhflifabn3xlhpi45mvi757po"), + }, }, { Network: "calibrationnet", Version: 8, @@ -40,6 +57,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzaceaqrkllksxv2jsfgjvmuewx5vbzrammw5mdscod6gkdr3ijih2q64"), "verifiedregistry": MustParseCid("bafk2bzaceaihibfu625lbtzdp3tcftscshrmbgghgrc7kzqhxn4455pycpdkm"), }, +}, { + Network: "calibrationnet", + Version: 9, + ManifestCid: MustParseCid("bafy2bzacectdlm3f5m252s6ken3ncnndvwj4a7hqyev2m7iba4lubkt72r2rm"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzaceag3pkyy5youg2i4qyrhqms2jobycddkhd4eebtlkeqj4wu4sw7ji"), + "cron": MustParseCid("bafk2bzaceaii7ryi4sjqqrrwyqaxulzqgiigkjqfa3f3ghhisleaqrinyal4o"), + "init": MustParseCid("bafk2bzacebpi37hcleu7cpqgs5zdg4zsw7qpydt5w25jny2dyyscsyidquvcw"), + "multisig": MustParseCid("bafk2bzacebt522zme5n3q25mecukjvomfyyzduxormgnprl73mdb5ekda2ywy"), + "paymentchannel": MustParseCid("bafk2bzacebdxmtmloxfyhxkoj4p4ze5gojqohvqjmdmv2t54xyrgfnjs52p26"), + "reward": MustParseCid("bafk2bzacebt7vup2pdxie67goc5ourij32z4ofejlrbv7styzm47ytvmmxx5a"), + "storagemarket": MustParseCid("bafk2bzacebeohybortft5jiihfvfly5oiygvf2hulnuif7vivklind32hbr3c"), + "storageminer": MustParseCid("bafk2bzaceallhekg5fhibexjurqcwrx6uzacbyq5eofic6jbdiu3vhepq6xsw"), + "storagepower": MustParseCid("bafk2bzaceassqqdljvblivbcrkv62a36gxjwf7dmkgez6ezq2oydx3dv2b3z2"), + "system": MustParseCid("bafk2bzacebxsecqifqvqxavnmsuwigmnc5rcuxoezspmykeqinkbgrkfukmgs"), + "verifiedregistry": MustParseCid("bafk2bzacedrmxfk5qifi7ujcb7mm73mwoy5e7nbndxhbqauuyol6cunf6popm"), + }, }, { Network: "caterpillarnet", Version: 8, @@ -57,6 +91,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzacebu47th3xerlngqavlipb6cfu2utljkxxzgadc3totogto2tmx2jc"), "verifiedregistry": MustParseCid("bafk2bzaceci3niq3rmbcmepgn27zvlgci6d5t4dvthx3pbmmx3wcu5elova6i"), }, +}, { + Network: "caterpillarnet", + Version: 9, + ManifestCid: MustParseCid("bafy2bzaceaknnblpmv3qqeqlgdycpps2vkgbgkflugbqz47k6zwrqte54hqy2"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzaceckajm6tcdpvfsrvagduv6cuefuo3modkpfupum6ibspulgvporrw"), + "cron": MustParseCid("bafk2bzacea74zhlldpihms2ohp3wvefojifvudbblmeju3izwrpcpxemp43fo"), + "init": MustParseCid("bafk2bzacea5nqh4l76vm4ys6vgrqyt77tquk66il3w5ho3zxugka22fipdkdw"), + "multisig": MustParseCid("bafk2bzacea3ftmx2roav4psh63r5n2sol6x3kwpmfwe473pexhj6lg7pruu2k"), + "paymentchannel": MustParseCid("bafk2bzacea2gqhnycejjfuinywoz4j7pmsvxn3i2y5epdx5vqpo23phx6jeac"), + "reward": MustParseCid("bafk2bzaceamdxogvus7zawqtju3vesmj6ffpf3ta6dlwvvstyfbf23sow2tes"), + "storagemarket": MustParseCid("bafk2bzacecvh6qhfe3ityehpibxmmw43l7recwtru3l4n3yrdj5bmnv4efnrc"), + "storageminer": MustParseCid("bafk2bzaced6ya5wlvplkvnvmhuc2uh5zq7oft6pyyoouwouuoreuk6grn6vsw"), + "storagepower": MustParseCid("bafk2bzacedbfoblr65vbqwx37cym6v3zhbgrau46vma4c2lbh6toz6q5dyrtc"), + "system": MustParseCid("bafk2bzaced7z2lu5hp4qpsesbmubq3chrad3sl6kgveldafksh4w252ijjaw2"), + "verifiedregistry": MustParseCid("bafk2bzacec6fdlcvlnaiktdptogae3bgofhzo24lhn4hs6rsa2zbnknfpsct6"), + }, }, { Network: "devnet", Version: 8, @@ -74,6 +125,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzacecf7eta2stfd3cnuxzervd33imbvlaqq6b5tsho7pxmhifrybreru"), "verifiedregistry": MustParseCid("bafk2bzaceaajgtglewgitshgdi2nzrvq7eihjtyqj5yiamesqun2hujl3xev2"), }, +}, { + Network: "devnet", + Version: 9, + ManifestCid: MustParseCid("bafy2bzacecogd7hb3dap7d4abyikdgt6b2zs46s4qyilsgxk4rsienbvvstp4"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzacecrgqcwn2j6c44tnfx32om4upg56b7gdwslfgeuyfsm6iwkiuhm2w"), + "cron": MustParseCid("bafk2bzaceblepwha5i5cpac37arpcxjcebm5k7p4e5ed7bwcq7ie6fryxgno4"), + "init": MustParseCid("bafk2bzacebjr3xwsdzfie47rtffibt3irr7a5qqstt7fsbwnolzz3z6oy5frw"), + "multisig": MustParseCid("bafk2bzacec66uf5u7o7q3u3pufrtufya6ntwrreysrwwlzqdjbtj36ajuamz4"), + "paymentchannel": MustParseCid("bafk2bzacebouukxeahifxfoymmvibngg6abftd7luiq5x2c7zxulvqyerwoeg"), + "reward": MustParseCid("bafk2bzacecj4pry2xb6w4kd4xxvs3dqd2endfynnwrkf66zakmt376tafy6ym"), + "storagemarket": MustParseCid("bafk2bzacecmij6fgaasgu7zm354fltmvhwmepzwadhl4euxhb64yg4pgfkxgw"), + "storageminer": MustParseCid("bafk2bzaceb5qyhchlvqvcq5cvrc5tuyjrrz6qkgbbxx4vr4wxhtoa4bfp56bg"), + "storagepower": MustParseCid("bafk2bzaced377v52henedhmudi2isuxe73mp2lrv2zyyxfp4r4uppz3sy2ipw"), + "system": MustParseCid("bafk2bzacebb3gdmg2fqexijivo7dkxj6g6gu7ou2jsw6opszr5gfmwt4fvorw"), + "verifiedregistry": MustParseCid("bafk2bzacec5xfb3a56mlclymhvs2br3qzx7sagqda4dvl4xz3fgiymkkbz5tk"), + }, }, { Network: "mainnet", Version: 8, @@ -91,6 +159,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzacedwq5uppsw7vp55zpj7jdieizirmldceehu6wvombw3ixq2tcq57w"), "verifiedregistry": MustParseCid("bafk2bzaceb3zbkjz3auizmoln2unmxep7dyfcmsre64vnqfhdyh7rkqfoxlw4"), }, +}, { + Network: "mainnet", + Version: 9, + ManifestCid: MustParseCid("bafy2bzaceb7nrn4icde3yt7s2kpllliodblq2i3iuslh3l6swgjqyusual72u"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzacedchhykcbvptlrnts62xa2h7fewsyvb4imktudll7tbogkwj4ccpy"), + "cron": MustParseCid("bafk2bzaced2e2ivtglevf5tnqay6eqdl3m5ilx4az766ojbhmy2kbxmkogbni"), + "init": MustParseCid("bafk2bzaceapzqn6e3cfpf4ntln4dkyrqe5egygmjczefduy7fuabxh2npqq6o"), + "multisig": MustParseCid("bafk2bzacebxihi4x4lzelmmdtxiz5gub3cjgthrgxuj5mxl2ihxaz6qhp5qbu"), + "paymentchannel": MustParseCid("bafk2bzacecv34ahs6k552won2vj4r62gur5i7inqnycg7y4dg27ktlq76stlk"), + "reward": MustParseCid("bafk2bzacea4er76nlnzz3muuvdxs4dbygejztezanpafi42idj57n75sumu7o"), + "storagemarket": MustParseCid("bafk2bzacedd3pjxcwgxfli4a5udw3ebbo4gom43epizbldvto7ovduqk6udj6"), + "storageminer": MustParseCid("bafk2bzacebtuopxp2464fxulzfyr4iw7bj4pelfxlatudaf6q5qtahokeo3lo"), + "storagepower": MustParseCid("bafk2bzacec3dmcwtizgy6qhxg6fgb4ykc2pamxxh2n5oyeqvebjf3ikzd2sui"), + "system": MustParseCid("bafk2bzacecrm36gf2gusruvhfc6ukf36qflsr5pdbquvfyysprdyudsatoufm"), + "verifiedregistry": MustParseCid("bafk2bzaceah3mwu6tb4jmffohpoz6nyoxpgno2hmxz455rycw4o2hrat3yg3u"), + }, }, { Network: "testing", Version: 8, @@ -108,6 +193,23 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzaced6kjkbv7lrb2qwq5we2hqaxc6ztch5p52g27qtjy45zdemsk4b7m"), "verifiedregistry": MustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"), }, +}, { + Network: "testing", + Version: 9, + ManifestCid: MustParseCid("bafy2bzaceas5fka4rtyvnqwvvwdi2qqhbnu7hnyz37chhpflh4rdbwnoupols"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzacecsmbmd42fsg33wd3u5vxyp4n4a4mac423fduauishjhiyv2bqz7w"), + "cron": MustParseCid("bafk2bzacedajlwnkefucjxzasudkfojrz3bnhnnirebvacxrtly5y2kfb7qiu"), + "init": MustParseCid("bafk2bzaceat7cvf7s2vnmqoldzafkpjygi6wv3sfnclenfbahk4htsgu4aqsa"), + "multisig": MustParseCid("bafk2bzacebh7pwb7eoyigwgjs2r32ebtxwbwgxqd4cvou4katq4axmhd7lxsq"), + "paymentchannel": MustParseCid("bafk2bzaceb6nbmyo2girdpnwywby7yzelx7g6s4snbq3kb3mmd2pp33qefkww"), + "reward": MustParseCid("bafk2bzacedttgmuddtlrp2ie4i2vzuueury455knof5muqtqlslscxrk7ucl6"), + "storagemarket": MustParseCid("bafk2bzacebjtz7fg5n2sm4wg464fyg5vcvux5hqrsdwki675hsquhh3rpe5rg"), + "storageminer": MustParseCid("bafk2bzacea2c2genvtsktr3f6yjlny57gwqyt5dbqrfws56wn5ssyl2tevjjg"), + "storagepower": MustParseCid("bafk2bzaceasmr5xc3c7jgihqcb5pdv557kfor72wlmzmh4syvedknelebhsve"), + "system": MustParseCid("bafk2bzaceabj3whuno364pjqn7sphwquiqpl2w5le6aa6quwytgyxshvelcwq"), + "verifiedregistry": MustParseCid("bafk2bzaceamn6gzihkytyqym4dqs7wqmo2fz6kpge4tphumvutsp2ys4bwaha"), + }, }, { Network: "testing-fake-proofs", Version: 8, @@ -125,4 +227,21 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet "system": MustParseCid("bafk2bzaced6kjkbv7lrb2qwq5we2hqaxc6ztch5p52g27qtjy45zdemsk4b7m"), "verifiedregistry": MustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"), }, +}, { + Network: "testing-fake-proofs", + Version: 9, + ManifestCid: MustParseCid("bafy2bzacebr7bo4shotwq4cct3ablt6hlcozg4h2e52av2q3md5di7sibrqj2"), + Actors: map[string]cid.Cid{ + "account": MustParseCid("bafk2bzacecsmbmd42fsg33wd3u5vxyp4n4a4mac423fduauishjhiyv2bqz7w"), + "cron": MustParseCid("bafk2bzacedajlwnkefucjxzasudkfojrz3bnhnnirebvacxrtly5y2kfb7qiu"), + "init": MustParseCid("bafk2bzaceat7cvf7s2vnmqoldzafkpjygi6wv3sfnclenfbahk4htsgu4aqsa"), + "multisig": MustParseCid("bafk2bzacebh7pwb7eoyigwgjs2r32ebtxwbwgxqd4cvou4katq4axmhd7lxsq"), + "paymentchannel": MustParseCid("bafk2bzaceb6nbmyo2girdpnwywby7yzelx7g6s4snbq3kb3mmd2pp33qefkww"), + "reward": MustParseCid("bafk2bzacedttgmuddtlrp2ie4i2vzuueury455knof5muqtqlslscxrk7ucl6"), + "storagemarket": MustParseCid("bafk2bzacebjtz7fg5n2sm4wg464fyg5vcvux5hqrsdwki675hsquhh3rpe5rg"), + "storageminer": MustParseCid("bafk2bzacedaxvye4reegpy2fecjuzwt4nly2myhplnvkzhssquo2jjw7vfmuy"), + "storagepower": MustParseCid("bafk2bzaceaoteuuvld3bzy3t3kzjp5iabgkvxjc5cxq2ziwankpxqqixkqqjw"), + "system": MustParseCid("bafk2bzaceabj3whuno364pjqn7sphwquiqpl2w5le6aa6quwytgyxshvelcwq"), + "verifiedregistry": MustParseCid("bafk2bzaceamn6gzihkytyqym4dqs7wqmo2fz6kpge4tphumvutsp2ys4bwaha"), + }, }} diff --git a/build/builtin_actors_test.go b/build/builtin_actors_test.go index 7a5c0936d..489f0ad7d 100644 --- a/build/builtin_actors_test.go +++ b/build/builtin_actors_test.go @@ -5,6 +5,8 @@ import ( "github.com/stretchr/testify/require" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors" ) @@ -19,16 +21,16 @@ func TestEmbeddedMetadata(t *testing.T) { // Test that we're registering the manifest correctly. func TestRegistration(t *testing.T) { - manifestCid, found := actors.GetManifest(actors.Version8) + manifestCid, found := actors.GetManifest(actorstypes.Version8) require.True(t, found) require.True(t, manifestCid.Defined()) for _, key := range actors.GetBuiltinActorsKeys() { - actorCid, found := actors.GetActorCodeID(actors.Version8, key) + actorCid, found := actors.GetActorCodeID(actorstypes.Version8, key) require.True(t, found) name, version, found := actors.GetActorMetaByCode(actorCid) require.True(t, found) - require.Equal(t, actors.Version8, version) + require.Equal(t, actorstypes.Version8, version) require.Equal(t, key, name) } } diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 639e7c1c5..2216429e1 100644 Binary files a/build/openrpc/full.json.gz and b/build/openrpc/full.json.gz differ diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index 1f4e500da..dded0c357 100644 Binary files a/build/openrpc/gateway.json.gz and b/build/openrpc/gateway.json.gz differ diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 71815de9b..161d92407 100644 Binary files a/build/openrpc/miner.json.gz and b/build/openrpc/miner.json.gz differ diff --git a/build/params_2k.go b/build/params_2k.go index 476d4fba1..aaab3f835 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -10,9 +10,9 @@ import ( "github.com/ipfs/go-cid" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" ) @@ -20,7 +20,7 @@ const BootstrappersFile = "" const GenesisFile = "" var NetworkBundle = "devnet" -var BundleOverrides map[actors.Version]string +var BundleOverrides map[actorstypes.Version]string const GenesisNetworkVersion = network.Version16 @@ -56,6 +56,8 @@ var UpgradeOhSnapHeight = abi.ChainEpoch(-18) var UpgradeSkyrHeight = abi.ChainEpoch(-19) +var UpgradeV17Height = abi.ChainEpoch(99999999999999) + var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, } @@ -107,6 +109,7 @@ func init() { UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight) UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight) UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight) + UpgradeV17Height = getUpgradeHeight("LOTUS_V17_HEIGHT", UpgradeV17Height) BuildType |= Build2k diff --git a/build/params_butterfly.go b/build/params_butterfly.go index f43c30778..59318a1c3 100644 --- a/build/params_butterfly.go +++ b/build/params_butterfly.go @@ -8,10 +8,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" ) @@ -19,10 +19,10 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, } -const GenesisNetworkVersion = network.Version15 +const GenesisNetworkVersion = network.Version16 var NetworkBundle = "butterflynet" -var BundleOverrides map[actors.Version]string +var BundleOverrides map[actorstypes.Version]string const BootstrappersFile = "butterflynet.pi" const GenesisFile = "butterflynet.car" @@ -47,10 +47,9 @@ const UpgradeNorwegianHeight = -14 const UpgradeTurboHeight = -15 const UpgradeHyperdriveHeight = -16 const UpgradeChocolateHeight = -17 - const UpgradeOhSnapHeight = -18 - -const UpgradeSkyrHeight = abi.ChainEpoch(50) +const UpgradeSkyrHeight = -19 +const UpgradeV17Height = abi.ChainEpoch(99999999999999) var SupportedProofTypes = []abi.RegisteredSealProof{ abi.RegisteredSealProof_StackedDrg512MiBV1, diff --git a/build/params_calibnet.go b/build/params_calibnet.go index 9ecfc048d..eeb707fca 100644 --- a/build/params_calibnet.go +++ b/build/params_calibnet.go @@ -8,10 +8,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" ) @@ -22,7 +22,7 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ const GenesisNetworkVersion = network.Version0 var NetworkBundle = "calibrationnet" -var BundleOverrides map[actors.Version]string +var BundleOverrides map[actorstypes.Version]string const BootstrappersFile = "calibnet.pi" const GenesisFile = "calibnet.car" @@ -66,6 +66,8 @@ const UpgradeOhSnapHeight = 682006 // 2022-06-16T17:30:00Z const UpgradeSkyrHeight = 1044660 +var UpgradeV17Height = abi.ChainEpoch(99999999999999) + var SupportedProofTypes = []abi.RegisteredSealProof{ abi.RegisteredSealProof_StackedDrg32GiBV1, abi.RegisteredSealProof_StackedDrg64GiBV1, diff --git a/build/params_interop.go b/build/params_interop.go index f3af7aed4..2e089dcd6 100644 --- a/build/params_interop.go +++ b/build/params_interop.go @@ -11,20 +11,20 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" ) var NetworkBundle = "caterpillarnet" -var BundleOverrides map[actors.Version]string +var BundleOverrides map[actorstypes.Version]string const BootstrappersFile = "interopnet.pi" const GenesisFile = "interopnet.car" -const GenesisNetworkVersion = network.Version15 +const GenesisNetworkVersion = network.Version16 var UpgradeBreezeHeight = abi.ChainEpoch(-1) @@ -34,26 +34,22 @@ var UpgradeSmokeHeight = abi.ChainEpoch(-1) var UpgradeIgnitionHeight = abi.ChainEpoch(-2) var UpgradeRefuelHeight = abi.ChainEpoch(-3) var UpgradeTapeHeight = abi.ChainEpoch(-4) - var UpgradeAssemblyHeight = abi.ChainEpoch(-5) var UpgradeLiftoffHeight = abi.ChainEpoch(-6) - var UpgradeKumquatHeight = abi.ChainEpoch(-7) var UpgradeCalicoHeight = abi.ChainEpoch(-9) var UpgradePersianHeight = abi.ChainEpoch(-10) var UpgradeOrangeHeight = abi.ChainEpoch(-11) var UpgradeClausHeight = abi.ChainEpoch(-12) - var UpgradeTrustHeight = abi.ChainEpoch(-13) - var UpgradeNorwegianHeight = abi.ChainEpoch(-14) - var UpgradeTurboHeight = abi.ChainEpoch(-15) - var UpgradeHyperdriveHeight = abi.ChainEpoch(-16) var UpgradeChocolateHeight = abi.ChainEpoch(-17) var UpgradeOhSnapHeight = abi.ChainEpoch(-18) -var UpgradeSkyrHeight = abi.ChainEpoch(100) +var UpgradeSkyrHeight = abi.ChainEpoch(-19) + +const UpgradeV17Height = abi.ChainEpoch(99999999999999) var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, @@ -107,6 +103,7 @@ func init() { UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight) UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight) UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight) + UpgradeV17Height = getUpgradeHeight("LOTUS_V17_HEIGHT", UpgradeV17Height) BuildType |= BuildInteropnet SetAddressNetwork(address.Testnet) diff --git a/build/params_mainnet.go b/build/params_mainnet.go index 7a532c174..a681d4c59 100644 --- a/build/params_mainnet.go +++ b/build/params_mainnet.go @@ -9,10 +9,9 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" - - "github.com/filecoin-project/lotus/chain/actors" ) var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ @@ -23,7 +22,7 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ var NetworkBundle = "mainnet" // NOTE: DO NOT change this unless you REALLY know what you're doing. This is consensus critical. -var BundleOverrides map[actors.Version]string +var BundleOverrides map[actorstypes.Version]string const GenesisNetworkVersion = network.Version0 @@ -77,7 +76,9 @@ const UpgradeChocolateHeight = 1231620 const UpgradeOhSnapHeight = 1594680 // 2022-07-06T14:00:00Z -var UpgradeSkyrHeight = abi.ChainEpoch(1960320) +const UpgradeSkyrHeight = 1960320 + +var UpgradeV17Height = abi.ChainEpoch(99999999999999) var SupportedProofTypes = []abi.RegisteredSealProof{ abi.RegisteredSealProof_StackedDrg32GiBV1, @@ -92,8 +93,8 @@ func init() { SetAddressNetwork(address.Mainnet) } - if os.Getenv("LOTUS_DISABLE_SKYR") == "1" { - UpgradeSkyrHeight = math.MaxInt64 + if os.Getenv("LOTUS_DISABLE_V17") == "1" { + UpgradeV17Height = math.MaxInt64 } Devnet = false diff --git a/build/params_shared_vals.go b/build/params_shared_vals.go index 6f59189a6..a77feb9d8 100644 --- a/build/params_shared_vals.go +++ b/build/params_shared_vals.go @@ -33,7 +33,7 @@ const NewestNetworkVersion = network.Version{{.latestNetworkVersion}} /* inline-gen start */ -const NewestNetworkVersion = network.Version16 +const NewestNetworkVersion = network.Version17 /* inline-gen end */ diff --git a/build/params_testground.go b/build/params_testground.go index 9d708781d..bcbc32b94 100644 --- a/build/params_testground.go +++ b/build/params_testground.go @@ -13,10 +13,10 @@ import ( "github.com/ipfs/go-cid" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" ) @@ -107,6 +107,7 @@ var ( UpgradeChocolateHeight abi.ChainEpoch = -16 UpgradeOhSnapHeight abi.ChainEpoch = -17 UpgradeSkyrHeight abi.ChainEpoch = -18 + UpgradeV17Height abi.ChainEpoch = -19 DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, @@ -114,10 +115,10 @@ var ( GenesisNetworkVersion = network.Version0 NetworkBundle = "devnet" - BundleOverrides map[actors.Version]string + BundleOverrides map[actorstypes.Version]string - NewestNetworkVersion = network.Version15 - ActorUpgradeNetworkVersion = network.Version15 + NewestNetworkVersion = network.Version16 + ActorUpgradeNetworkVersion = network.Version16 Devnet = true ZeroAddress = MustParseAddress("f3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a") diff --git a/chain/actors/actor_cids.go b/chain/actors/actor_cids.go index 9612983dc..598d3d8f7 100644 --- a/chain/actors/actor_cids.go +++ b/chain/actors/actor_cids.go @@ -4,6 +4,7 @@ import ( "github.com/ipfs/go-cid" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" @@ -14,10 +15,10 @@ import ( ) // GetActorCodeID looks up a builtin actor's code CID by actor version and canonical actor name. -func GetActorCodeID(av Version, name string) (cid.Cid, bool) { +func GetActorCodeID(av actorstypes.Version, name string) (cid.Cid, bool) { // Actors V8 and above - if av >= Version8 { + if av >= actorstypes.Version8 { if cids, ok := GetActorCodeIDsFromManifest(av); ok { c, ok := cids[name] return c, ok @@ -30,275 +31,275 @@ func GetActorCodeID(av Version, name string) (cid.Cid, bool) { case AccountKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.AccountActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.AccountActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.AccountActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.AccountActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.AccountActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.AccountActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.AccountActorCodeID, true } case CronKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.CronActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.CronActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.CronActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.CronActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.CronActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.CronActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.CronActorCodeID, true } case InitKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.InitActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.InitActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.InitActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.InitActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.InitActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.InitActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.InitActorCodeID, true } case MarketKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.StorageMarketActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.StorageMarketActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.StorageMarketActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.StorageMarketActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.StorageMarketActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.StorageMarketActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.StorageMarketActorCodeID, true } case MinerKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.StorageMinerActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.StorageMinerActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.StorageMinerActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.StorageMinerActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.StorageMinerActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.StorageMinerActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.StorageMinerActorCodeID, true } case MultisigKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.MultisigActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.MultisigActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.MultisigActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.MultisigActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.MultisigActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.MultisigActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.MultisigActorCodeID, true } case PaychKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.PaymentChannelActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.PaymentChannelActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.PaymentChannelActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.PaymentChannelActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.PaymentChannelActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.PaymentChannelActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.PaymentChannelActorCodeID, true } case PowerKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.StoragePowerActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.StoragePowerActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.StoragePowerActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.StoragePowerActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.StoragePowerActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.StoragePowerActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.StoragePowerActorCodeID, true } case RewardKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.RewardActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.RewardActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.RewardActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.RewardActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.RewardActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.RewardActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.RewardActorCodeID, true } case SystemKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.SystemActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.SystemActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.SystemActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.SystemActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.SystemActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.SystemActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.SystemActorCodeID, true } case VerifregKey: switch av { - case Version0: + case actorstypes.Version0: return builtin0.VerifiedRegistryActorCodeID, true - case Version2: + case actorstypes.Version2: return builtin2.VerifiedRegistryActorCodeID, true - case Version3: + case actorstypes.Version3: return builtin3.VerifiedRegistryActorCodeID, true - case Version4: + case actorstypes.Version4: return builtin4.VerifiedRegistryActorCodeID, true - case Version5: + case actorstypes.Version5: return builtin5.VerifiedRegistryActorCodeID, true - case Version6: + case actorstypes.Version6: return builtin6.VerifiedRegistryActorCodeID, true - case Version7: + case actorstypes.Version7: return builtin7.VerifiedRegistryActorCodeID, true } } @@ -307,7 +308,7 @@ func GetActorCodeID(av Version, name string) (cid.Cid, bool) { } // GetActorCodeIDs looks up all builtin actor's code CIDs by actor version. -func GetActorCodeIDs(av Version) (map[string]cid.Cid, error) { +func GetActorCodeIDs(av actorstypes.Version) (map[string]cid.Cid, error) { cids, ok := GetActorCodeIDsFromManifest(av) if ok { return cids, nil diff --git a/chain/actors/agen/main.go b/chain/actors/agen/main.go index ba88c54d1..6797a5ba5 100644 --- a/chain/actors/agen/main.go +++ b/chain/actors/agen/main.go @@ -44,6 +44,11 @@ func main() { fmt.Println(err) return } + + if err := generateRegistry("chain/actors/builtin/registry.go"); err != nil { + fmt.Println(err) + return + } } func generateAdapters() error { @@ -108,8 +113,9 @@ func generateState(actDir string) error { var b bytes.Buffer err := tpl.Execute(&b, map[string]interface{}{ - "v": version, - "import": getVersionImports()[version], + "v": version, + "import": getVersionImports()[version], + "latestVersion": lotusactors.LatestVersion, }) if err != nil { return err @@ -139,8 +145,9 @@ func generateMessages(actDir string) error { var b bytes.Buffer err := tpl.Execute(&b, map[string]interface{}{ - "v": version, - "import": getVersionImports()[version], + "v": version, + "import": getVersionImports()[version], + "latestVersion": lotusactors.LatestVersion, }) if err != nil { return err @@ -216,6 +223,36 @@ func generateBuiltin(builtinPath string) error { return nil } +func generateRegistry(registryPath string) error { + + bf, err := ioutil.ReadFile(registryPath + ".template") + if err != nil { + if os.IsNotExist(err) { + return nil // skip + } + + return xerrors.Errorf("loading registry template file: %w", err) + } + + tpl := template.Must(template.New("").Funcs(template.FuncMap{ + "import": func(v int) string { return getVersionImports()[v] }, + }).Parse(string(bf))) + var b bytes.Buffer + + err = tpl.Execute(&b, map[string]interface{}{ + "versions": lotusactors.Versions, + }) + if err != nil { + return err + } + + if err := ioutil.WriteFile(registryPath, b.Bytes(), 0666); err != nil { + return err + } + + return nil +} + func getVersionImports() map[int]string { versionImports := make(map[int]string, lotusactors.LatestVersion) for _, v := range lotusactors.Versions { diff --git a/chain/actors/builtin/account/account.go b/chain/actors/builtin/account/account.go index f233f173c..f8c65a9b9 100644 --- a/chain/actors/builtin/account/account.go +++ b/chain/actors/builtin/account/account.go @@ -4,7 +4,8 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/go-address" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -19,7 +20,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -var Methods = builtin8.MethodsAccount +var Methods = builtin9.MethodsAccount func Load(store adt.Store, act *types.Actor) (State, error) { if name, av, ok := actors.GetActorMetaByCode(act.Code); ok { @@ -29,9 +30,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -63,33 +67,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, addr) - case actors.Version2: + case actorstypes.Version2: return make2(store, addr) - case actors.Version3: + case actorstypes.Version3: return make3(store, addr) - case actors.Version4: + case actorstypes.Version4: return make4(store, addr) - case actors.Version5: + case actorstypes.Version5: return make5(store, addr) - case actors.Version6: + case actorstypes.Version6: return make6(store, addr) - case actors.Version7: + case actorstypes.Version7: return make7(store, addr) - case actors.Version8: + case actorstypes.Version8: return make8(store, addr) + case actorstypes.Version9: + return make9(store, addr) + } return nil, xerrors.Errorf("unknown actor version %d", av) } diff --git a/chain/actors/builtin/account/actor.go.template b/chain/actors/builtin/account/actor.go.template index 7aff20d42..07b4cc94b 100644 --- a/chain/actors/builtin/account/actor.go.template +++ b/chain/actors/builtin/account/actor.go.template @@ -1,6 +1,7 @@ package account import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/lotus/chain/actors" "golang.org/x/xerrors" @@ -9,13 +10,13 @@ import ( "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/types" + {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var Methods = builtin{{.latestVersion}}.MethodsAccount @@ -29,7 +30,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -48,10 +49,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, addr) {{end}} } diff --git a/chain/actors/builtin/account/v9.go b/chain/actors/builtin/account/v9.go new file mode 100644 index 000000000..7e172b33c --- /dev/null +++ b/chain/actors/builtin/account/v9.go @@ -0,0 +1,40 @@ +package account + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + account9 "github.com/filecoin-project/go-state-types/builtin/v9/account" + + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, addr address.Address) (State, error) { + out := state9{store: store} + out.State = account9.State{Address: addr} + return &out, nil +} + +type state9 struct { + account9.State + store adt.Store +} + +func (s *state9) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/builtin.go b/chain/actors/builtin/builtin.go index fb95a28d6..82e80365a 100644 --- a/chain/actors/builtin/builtin.go +++ b/chain/actors/builtin/builtin.go @@ -8,8 +8,8 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/builtin" - miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" smoothingtypes "github.com/filecoin-project/go-state-types/builtin/v8/util/smoothing" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/proof" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -18,7 +18,6 @@ import ( builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" - builtin8 "github.com/filecoin-project/specs-actors/v8/actors/builtin" "github.com/filecoin-project/lotus/chain/actors" ) @@ -53,7 +52,7 @@ type PoStProof = proof.PoStProof type FilterEstimate = smoothingtypes.FilterEstimate func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { - return miner8.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) + return minertypes.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) } func ActorNameByCode(c cid.Cid) string { @@ -84,9 +83,6 @@ func ActorNameByCode(c cid.Cid) string { case builtin7.IsBuiltinActor(c): return builtin7.ActorNameByCode(c) - case builtin8.IsBuiltinActor(c): - return builtin8.ActorNameByCode(c) - default: return "" } diff --git a/chain/actors/builtin/builtin.go.template b/chain/actors/builtin/builtin.go.template index d536eff36..825f6cc07 100644 --- a/chain/actors/builtin/builtin.go.template +++ b/chain/actors/builtin/builtin.go.template @@ -7,7 +7,9 @@ import ( "github.com/ipfs/go-cid" {{range .versions}} + {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" + {{end}} {{end}} "github.com/filecoin-project/go-state-types/abi" @@ -16,7 +18,7 @@ import ( "github.com/filecoin-project/lotus/chain/actors" - miner{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" smoothingtypes "github.com/filecoin-project/go-state-types/builtin/v8/util/smoothing" ) @@ -50,7 +52,7 @@ type PoStProof = proof.PoStProof type FilterEstimate = smoothingtypes.FilterEstimate func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { - return miner{{.latestVersion}}.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) + return minertypes.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) } func ActorNameByCode(c cid.Cid) string { @@ -60,8 +62,10 @@ func ActorNameByCode(c cid.Cid) string { switch { {{range .versions}} + {{if (le . 7)}} case builtin{{.}}.IsBuiltinActor(c): return builtin{{.}}.ActorNameByCode(c) + {{end}} {{end}} default: return "" diff --git a/chain/actors/builtin/cron/actor.go.template b/chain/actors/builtin/cron/actor.go.template index fb70f314a..67c781fb2 100644 --- a/chain/actors/builtin/cron/actor.go.template +++ b/chain/actors/builtin/cron/actor.go.template @@ -1,6 +1,7 @@ package cron import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" "golang.org/x/xerrors" @@ -9,10 +10,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -24,7 +24,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -43,10 +43,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store) {{end}} } diff --git a/chain/actors/builtin/cron/cron.go b/chain/actors/builtin/cron/cron.go index 00264e3b4..29f795476 100644 --- a/chain/actors/builtin/cron/cron.go +++ b/chain/actors/builtin/cron/cron.go @@ -3,7 +3,8 @@ package cron import ( "golang.org/x/xerrors" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" @@ -25,9 +26,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -59,40 +63,43 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store) + case actorstypes.Version9: + return make9(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } var ( - Address = builtin8.CronActorAddr - Methods = builtin8.MethodsCron + Address = builtin9.CronActorAddr + Methods = builtin9.MethodsCron ) type State interface { diff --git a/chain/actors/builtin/cron/v9.go b/chain/actors/builtin/cron/v9.go new file mode 100644 index 000000000..312a33b68 --- /dev/null +++ b/chain/actors/builtin/cron/v9.go @@ -0,0 +1,35 @@ +package cron + +import ( + "github.com/ipfs/go-cid" + + cron9 "github.com/filecoin-project/go-state-types/builtin/v9/cron" + + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + out.State = *cron9.ConstructState(cron9.BuiltInEntries()) + return &out, nil +} + +type state9 struct { + cron9.State + store adt.Store +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/init/actor.go.template b/chain/actors/builtin/init/actor.go.template index e27c66fbb..43bb70c4c 100644 --- a/chain/actors/builtin/init/actor.go.template +++ b/chain/actors/builtin/init/actor.go.template @@ -1,6 +1,7 @@ package init import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/lotus/chain/actors" "golang.org/x/xerrors" @@ -15,10 +16,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var ( @@ -35,7 +35,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -54,10 +54,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, networkName string) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, networkName) {{end}} } diff --git a/chain/actors/builtin/init/init.go b/chain/actors/builtin/init/init.go index c7e0f7b82..8a5550697 100644 --- a/chain/actors/builtin/init/init.go +++ b/chain/actors/builtin/init/init.go @@ -6,7 +6,8 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -23,8 +24,8 @@ import ( ) var ( - Address = builtin8.InitActorAddr - Methods = builtin8.MethodsInit + Address = builtin9.InitActorAddr + Methods = builtin9.MethodsInit ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -35,9 +36,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -69,33 +73,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, networkName string) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, networkName) - case actors.Version2: + case actorstypes.Version2: return make2(store, networkName) - case actors.Version3: + case actorstypes.Version3: return make3(store, networkName) - case actors.Version4: + case actorstypes.Version4: return make4(store, networkName) - case actors.Version5: + case actorstypes.Version5: return make5(store, networkName) - case actors.Version6: + case actorstypes.Version6: return make6(store, networkName) - case actors.Version7: + case actorstypes.Version7: return make7(store, networkName) - case actors.Version8: + case actorstypes.Version8: return make8(store, networkName) + case actorstypes.Version9: + return make9(store, networkName) + } return nil, xerrors.Errorf("unknown actor version %d", av) } diff --git a/chain/actors/builtin/init/v9.go b/chain/actors/builtin/init/v9.go new file mode 100644 index 000000000..6153b4f73 --- /dev/null +++ b/chain/actors/builtin/init/v9.go @@ -0,0 +1,113 @@ +package init + +import ( + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/node/modules/dtypes" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, networkName string) (State, error) { + out := state9{store: store} + + s, err := init9.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + init9.State + store adt.Store +} + +func (s *state9) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state9) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state9) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state9) NetworkName() (dtypes.NetworkName, error) { + return dtypes.NetworkName(s.State.NetworkName), nil +} + +func (s *state9) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state9) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state9) Remove(addrs ...address.Address) (err error) { + m, err := adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state9) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state9) AddressMap() (adt.Map, error) { + return adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/market/actor.go.template b/chain/actors/builtin/market/actor.go.template index 66298a18a..0b34fbf75 100644 --- a/chain/actors/builtin/market/actor.go.template +++ b/chain/actors/builtin/market/actor.go.template @@ -1,7 +1,8 @@ package market import ( - "unicode/utf8" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "unicode/utf8" "github.com/filecoin-project/go-state-types/network" "golang.org/x/xerrors" @@ -12,23 +13,23 @@ import ( "github.com/filecoin-project/go-state-types/cbor" cbg "github.com/whyrusleeping/cbor-gen" - market{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin{{import .latestVersion}}market" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtintypes "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/types" ) var ( - Address = builtin{{.latestVersion}}.StorageMarketActorAddr - Methods = builtin{{.latestVersion}}.MethodsMarket + Address = builtintypes.StorageMarketActorAddr + Methods = builtintypes.MethodsMarket ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -40,7 +41,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -59,10 +60,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store) {{end}} } @@ -100,11 +101,11 @@ type DealStates interface { } type DealProposals interface { - ForEach(cb func(id abi.DealID, dp market{{.latestVersion}}.DealProposal) error) error - Get(id abi.DealID) (*market{{.latestVersion}}.DealProposal, bool, error) + ForEach(cb func(id abi.DealID, dp markettypes.DealProposal) error) error + Get(id abi.DealID) (*markettypes.DealProposal, bool, error) array() adt.Array - decode(*cbg.Deferred) (*market{{.latestVersion}}.DealProposal, error) + decode(*cbg.Deferred) (*markettypes.DealProposal, error) } @@ -115,23 +116,24 @@ type PublishStorageDealsReturn interface { } func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, err } switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return decodePublishStorageDealsReturn{{.}}(b) {{end}} } return nil, xerrors.Errorf("unknown actor version %d", av) } -type DealProposal = market{{.latestVersion}}.DealProposal +type DealProposal = markettypes.DealProposal +type DealLabel = markettypes.DealLabel -type DealState = market{{.latestVersion}}.DealState +type DealState = markettypes.DealState type DealStateChanges struct { Added []DealIDState @@ -158,7 +160,7 @@ type DealProposalChanges struct { type ProposalIDState struct { ID abi.DealID - Proposal market{{.latestVersion}}.DealProposal + Proposal markettypes.DealProposal } func EmptyDealState() *DealState { @@ -170,7 +172,7 @@ func EmptyDealState() *DealState { } // returns the earned fees and pending fees for a given deal -func GetDealFees(deal market{{.latestVersion}}.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { +func GetDealFees(deal markettypes.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) @@ -185,14 +187,14 @@ func GetDealFees(deal market{{.latestVersion}}.DealProposal, height abi.ChainEpo return ef, big.Sub(tf, ef) } -func IsDealActive(state market{{.latestVersion}}.DealState) bool { +func IsDealActive(state markettypes.DealState) bool { return state.SectorStartEpoch > -1 && state.SlashEpoch == -1 } -func labelFromGoString(s string) (market{{.latestVersion}}.DealLabel, error) { +func labelFromGoString(s string) (markettypes.DealLabel, error) { if utf8.ValidString(s) { - return market{{.latestVersion}}.NewLabelFromString(s) + return markettypes.NewLabelFromString(s) } else { - return market{{.latestVersion}}.NewLabelFromBytes([]byte(s)) + return markettypes.NewLabelFromBytes([]byte(s)) } } diff --git a/chain/actors/builtin/market/market.go b/chain/actors/builtin/market/market.go index 8c0e4e91a..f87c3838e 100644 --- a/chain/actors/builtin/market/market.go +++ b/chain/actors/builtin/market/market.go @@ -8,9 +8,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - builtin8 "github.com/filecoin-project/go-state-types/builtin" - market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" + builtintypes "github.com/filecoin-project/go-state-types/builtin" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/network" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -27,8 +28,8 @@ import ( ) var ( - Address = builtin8.StorageMarketActorAddr - Methods = builtin8.MethodsMarket + Address = builtintypes.StorageMarketActorAddr + Methods = builtintypes.MethodsMarket ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -39,9 +40,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -73,33 +77,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store) + case actorstypes.Version9: + return make9(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -135,11 +142,11 @@ type DealStates interface { } type DealProposals interface { - ForEach(cb func(id abi.DealID, dp market8.DealProposal) error) error - Get(id abi.DealID) (*market8.DealProposal, bool, error) + ForEach(cb func(id abi.DealID, dp markettypes.DealProposal) error) error + Get(id abi.DealID) (*markettypes.DealProposal, bool, error) array() adt.Array - decode(*cbg.Deferred) (*market8.DealProposal, error) + decode(*cbg.Deferred) (*markettypes.DealProposal, error) } type PublishStorageDealsReturn interface { @@ -149,44 +156,48 @@ type PublishStorageDealsReturn interface { } func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, err } switch av { - case actors.Version0: + case actorstypes.Version0: return decodePublishStorageDealsReturn0(b) - case actors.Version2: + case actorstypes.Version2: return decodePublishStorageDealsReturn2(b) - case actors.Version3: + case actorstypes.Version3: return decodePublishStorageDealsReturn3(b) - case actors.Version4: + case actorstypes.Version4: return decodePublishStorageDealsReturn4(b) - case actors.Version5: + case actorstypes.Version5: return decodePublishStorageDealsReturn5(b) - case actors.Version6: + case actorstypes.Version6: return decodePublishStorageDealsReturn6(b) - case actors.Version7: + case actorstypes.Version7: return decodePublishStorageDealsReturn7(b) - case actors.Version8: + case actorstypes.Version8: return decodePublishStorageDealsReturn8(b) + case actorstypes.Version9: + return decodePublishStorageDealsReturn9(b) + } return nil, xerrors.Errorf("unknown actor version %d", av) } -type DealProposal = market8.DealProposal +type DealProposal = markettypes.DealProposal +type DealLabel = markettypes.DealLabel -type DealState = market8.DealState +type DealState = markettypes.DealState type DealStateChanges struct { Added []DealIDState @@ -213,7 +224,7 @@ type DealProposalChanges struct { type ProposalIDState struct { ID abi.DealID - Proposal market8.DealProposal + Proposal markettypes.DealProposal } func EmptyDealState() *DealState { @@ -225,7 +236,7 @@ func EmptyDealState() *DealState { } // returns the earned fees and pending fees for a given deal -func GetDealFees(deal market8.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { +func GetDealFees(deal markettypes.DealProposal, height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) @@ -240,14 +251,14 @@ func GetDealFees(deal market8.DealProposal, height abi.ChainEpoch) (abi.TokenAmo return ef, big.Sub(tf, ef) } -func IsDealActive(state market8.DealState) bool { +func IsDealActive(state markettypes.DealState) bool { return state.SectorStartEpoch > -1 && state.SlashEpoch == -1 } -func labelFromGoString(s string) (market8.DealLabel, error) { +func labelFromGoString(s string) (markettypes.DealLabel, error) { if utf8.ValidString(s) { - return market8.NewLabelFromString(s) + return markettypes.NewLabelFromString(s) } else { - return market8.NewLabelFromBytes([]byte(s)) + return markettypes.NewLabelFromBytes([]byte(s)) } } diff --git a/chain/actors/builtin/market/state.go.template b/chain/actors/builtin/market/state.go.template index 1ed2fc4fc..844f92f02 100644 --- a/chain/actors/builtin/market/state.go.template +++ b/chain/actors/builtin/market/state.go.template @@ -22,7 +22,8 @@ import ( adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" {{else}} market{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}market" - adt{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" + adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt" {{end}} ) @@ -258,12 +259,12 @@ func (s *dealProposals{{.v}}) array() adt.Array { func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) (DealProposal, error) { {{if (le .v 7)}} label, err := labelFromGoString(v{{.v}}.Label) - if err != nil { - return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) - } {{else}} - label := v{{.v}}.Label + label, err := fromV{{.v}}Label(v{{.v}}.Label) {{end}} + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } return DealProposal{ PieceCID: v{{.v}}.PieceCID, @@ -283,6 +284,25 @@ func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) (DealProposal, e }, nil } +{{if (ge .v 8)}} + func fromV{{.v}}Label(v{{.v}} market{{.v}}.DealLabel) (DealLabel, error) { + if v{{.v}}.IsString() { + str, err := v{{.v}}.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v{{.v}}.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) + } +{{end}} + + func (s *state{{.v}}) GetState() interface{} { return &s.State diff --git a/chain/actors/builtin/market/v0.go b/chain/actors/builtin/market/v0.go index 38e92f12d..5fb94a700 100644 --- a/chain/actors/builtin/market/v0.go +++ b/chain/actors/builtin/market/v0.go @@ -241,6 +241,7 @@ func (s *dealProposals0) array() adt.Array { func fromV0DealProposal(v0 market0.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v0.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v2.go b/chain/actors/builtin/market/v2.go index 5a399e68c..2228e80e9 100644 --- a/chain/actors/builtin/market/v2.go +++ b/chain/actors/builtin/market/v2.go @@ -241,6 +241,7 @@ func (s *dealProposals2) array() adt.Array { func fromV2DealProposal(v2 market2.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v2.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v3.go b/chain/actors/builtin/market/v3.go index a953429fc..b48aa90b4 100644 --- a/chain/actors/builtin/market/v3.go +++ b/chain/actors/builtin/market/v3.go @@ -236,6 +236,7 @@ func (s *dealProposals3) array() adt.Array { func fromV3DealProposal(v3 market3.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v3.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v4.go b/chain/actors/builtin/market/v4.go index 8e6b3cd34..7c8a650ea 100644 --- a/chain/actors/builtin/market/v4.go +++ b/chain/actors/builtin/market/v4.go @@ -236,6 +236,7 @@ func (s *dealProposals4) array() adt.Array { func fromV4DealProposal(v4 market4.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v4.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v5.go b/chain/actors/builtin/market/v5.go index 5cf904e04..18c2f0188 100644 --- a/chain/actors/builtin/market/v5.go +++ b/chain/actors/builtin/market/v5.go @@ -236,6 +236,7 @@ func (s *dealProposals5) array() adt.Array { func fromV5DealProposal(v5 market5.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v5.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v6.go b/chain/actors/builtin/market/v6.go index 03862ac09..717858de4 100644 --- a/chain/actors/builtin/market/v6.go +++ b/chain/actors/builtin/market/v6.go @@ -238,6 +238,7 @@ func (s *dealProposals6) array() adt.Array { func fromV6DealProposal(v6 market6.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v6.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v7.go b/chain/actors/builtin/market/v7.go index 2c2664110..785466e0d 100644 --- a/chain/actors/builtin/market/v7.go +++ b/chain/actors/builtin/market/v7.go @@ -238,6 +238,7 @@ func (s *dealProposals7) array() adt.Array { func fromV7DealProposal(v7 market7.DealProposal) (DealProposal, error) { label, err := labelFromGoString(v7.Label) + if err != nil { return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) } diff --git a/chain/actors/builtin/market/v8.go b/chain/actors/builtin/market/v8.go index 8afbf39de..c56612c37 100644 --- a/chain/actors/builtin/market/v8.go +++ b/chain/actors/builtin/market/v8.go @@ -12,6 +12,7 @@ import ( rlepluslazy "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" adt8 "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" "github.com/filecoin-project/lotus/chain/actors/adt" @@ -237,7 +238,11 @@ func (s *dealProposals8) array() adt.Array { func fromV8DealProposal(v8 market8.DealProposal) (DealProposal, error) { - label := v8.Label + label, err := fromV8Label(v8.Label) + + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } return DealProposal{ PieceCID: v8.PieceCID, @@ -257,6 +262,22 @@ func fromV8DealProposal(v8 market8.DealProposal) (DealProposal, error) { }, nil } +func fromV8Label(v8 market8.DealLabel) (DealLabel, error) { + if v8.IsString() { + str, err := v8.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v8.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) +} + func (s *state8) GetState() interface{} { return &s.State } diff --git a/chain/actors/builtin/market/v9.go b/chain/actors/builtin/market/v9.go new file mode 100644 index 000000000..39db2ee12 --- /dev/null +++ b/chain/actors/builtin/market/v9.go @@ -0,0 +1,325 @@ +package market + +import ( + "bytes" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rlepluslazy "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" + market9 "github.com/filecoin-project/go-state-types/builtin/v9/market" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/chain/types" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + + s, err := market9.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + market9.State + store adt.Store +} + +func (s *state9) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state9) BalancesChanged(otherState State) (bool, error) { + otherState9, ok := otherState.(*state9) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState9.State.EscrowTable) || !s.State.LockedTable.Equals(otherState9.State.LockedTable), nil +} + +func (s *state9) StatesChanged(otherState State) (bool, error) { + otherState9, ok := otherState.(*state9) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState9.State.States), nil +} + +func (s *state9) States() (DealStates, error) { + stateArray, err := adt9.AsArray(s.store, s.State.States, market9.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates9{stateArray}, nil +} + +func (s *state9) ProposalsChanged(otherState State) (bool, error) { + otherState9, ok := otherState.(*state9) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState9.State.Proposals), nil +} + +func (s *state9) Proposals() (DealProposals, error) { + proposalArray, err := adt9.AsArray(s.store, s.State.Proposals, market9.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals9{proposalArray}, nil +} + +func (s *state9) EscrowTable() (BalanceTable, error) { + bt, err := adt9.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable9{bt}, nil +} + +func (s *state9) LockedTable() (BalanceTable, error) { + bt, err := adt9.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable9{bt}, nil +} + +func (s *state9) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market9.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state9) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable9 struct { + *adt9.BalanceTable +} + +func (bt *balanceTable9) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt9.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates9 struct { + adt.Array +} + +func (s *dealStates9) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal9 market9.DealState + found, err := s.Array.Get(uint64(dealID), &deal9) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV9DealState(deal9) + return &deal, true, nil +} + +func (s *dealStates9) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds9 market9.DealState + return s.Array.ForEach(&ds9, func(idx int64) error { + return cb(abi.DealID(idx), fromV9DealState(ds9)) + }) +} + +func (s *dealStates9) decode(val *cbg.Deferred) (*DealState, error) { + var ds9 market9.DealState + if err := ds9.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV9DealState(ds9) + return &ds, nil +} + +func (s *dealStates9) array() adt.Array { + return s.Array +} + +func fromV9DealState(v9 market9.DealState) DealState { + return (DealState)(v9) +} + +type dealProposals9 struct { + adt.Array +} + +func (s *dealProposals9) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal9 market9.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal9) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + + proposal, err := fromV9DealProposal(proposal9) + if err != nil { + return nil, true, xerrors.Errorf("decoding proposal: %w", err) + } + + return &proposal, true, nil +} + +func (s *dealProposals9) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp9 market9.DealProposal + return s.Array.ForEach(&dp9, func(idx int64) error { + dp, err := fromV9DealProposal(dp9) + if err != nil { + return xerrors.Errorf("decoding proposal: %w", err) + } + + return cb(abi.DealID(idx), dp) + }) +} + +func (s *dealProposals9) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp9 market9.DealProposal + if err := dp9.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + + dp, err := fromV9DealProposal(dp9) + if err != nil { + return nil, err + } + + return &dp, nil +} + +func (s *dealProposals9) array() adt.Array { + return s.Array +} + +func fromV9DealProposal(v9 market9.DealProposal) (DealProposal, error) { + + label, err := fromV9Label(v9.Label) + + if err != nil { + return DealProposal{}, xerrors.Errorf("error setting deal label: %w", err) + } + + return DealProposal{ + PieceCID: v9.PieceCID, + PieceSize: v9.PieceSize, + VerifiedDeal: v9.VerifiedDeal, + Client: v9.Client, + Provider: v9.Provider, + + Label: label, + + StartEpoch: v9.StartEpoch, + EndEpoch: v9.EndEpoch, + StoragePricePerEpoch: v9.StoragePricePerEpoch, + + ProviderCollateral: v9.ProviderCollateral, + ClientCollateral: v9.ClientCollateral, + }, nil +} + +func fromV9Label(v9 market9.DealLabel) (DealLabel, error) { + if v9.IsString() { + str, err := v9.ToString() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert string label to string: %w", err) + } + return markettypes.NewLabelFromString(str) + } + + bs, err := v9.ToBytes() + if err != nil { + return markettypes.EmptyDealLabel, xerrors.Errorf("failed to convert bytes label to bytes: %w", err) + } + return markettypes.NewLabelFromBytes(bs) +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn9)(nil) + +func decodePublishStorageDealsReturn9(b []byte) (PublishStorageDealsReturn, error) { + var retval market9.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn9{retval}, nil +} + +type publishStorageDealsReturn9 struct { + market9.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn9) IsDealValid(index uint64) (bool, int, error) { + + set, err := r.ValidDeals.IsSet(index) + if err != nil || !set { + return false, -1, err + } + maskBf, err := bitfield.NewFromIter(&rlepluslazy.RunSliceIterator{ + Runs: []rlepluslazy.Run{rlepluslazy.Run{Val: true, Len: index}}}) + if err != nil { + return false, -1, err + } + before, err := bitfield.IntersectBitField(maskBf, r.ValidDeals) + if err != nil { + return false, -1, err + } + outIdx, err := before.Count() + if err != nil { + return false, -1, err + } + return set, int(outIdx), nil + +} + +func (r *publishStorageDealsReturn9) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/chain/actors/builtin/miner/actor.go.template b/chain/actors/builtin/miner/actor.go.template index 731af6255..751ab698f 100644 --- a/chain/actors/builtin/miner/actor.go.template +++ b/chain/actors/builtin/miner/actor.go.template @@ -1,6 +1,7 @@ package miner import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/chain/actors" @@ -33,7 +34,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -201,6 +202,7 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi type MinerInfo = miner{{.latestVersion}}.MinerInfo type WorkerKeyChange = miner{{.latestVersion}}.WorkerKeyChange +type SectorPreCommitOnChainInfo = miner{{.latestVersion}}.SectorPreCommitOnChainInfo type WindowPostVerifyInfo = proof.WindowPoStVerifyInfo type SectorExpiration struct { diff --git a/chain/actors/builtin/miner/miner.go b/chain/actors/builtin/miner/miner.go index 820be35a4..c3db4cb0e 100644 --- a/chain/actors/builtin/miner/miner.go +++ b/chain/actors/builtin/miner/miner.go @@ -6,8 +6,9 @@ import ( "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" @@ -33,9 +34,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -94,6 +98,9 @@ func MakeState(store adt.Store, av actors.Version) (State, error) { case actors.Version8: return make8(store) + case actors.Version9: + return make9(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -112,8 +119,8 @@ type State interface { GetSector(abi.SectorNumber) (*SectorOnChainInfo, error) FindSector(abi.SectorNumber) (*SectorLocation, error) GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error) - GetPrecommittedSector(abi.SectorNumber) (*miner8.SectorPreCommitOnChainInfo, error) - ForEachPrecommittedSector(func(miner8.SectorPreCommitOnChainInfo) error) error + GetPrecommittedSector(abi.SectorNumber) (*miner9.SectorPreCommitOnChainInfo, error) + ForEachPrecommittedSector(func(miner9.SectorPreCommitOnChainInfo) error) error LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error) NumLiveSectors() (uint64, error) IsAllocated(abi.SectorNumber) (bool, error) @@ -142,7 +149,7 @@ type State interface { sectors() (adt.Array, error) decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error) precommits() (adt.Map, error) - decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (miner8.SectorPreCommitOnChainInfo, error) + decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (miner9.SectorPreCommitOnChainInfo, error) GetState() interface{} } @@ -180,7 +187,7 @@ type Partition interface { UnprovenSectors() (bitfield.BitField, error) } -type SectorOnChainInfo = miner8.SectorOnChainInfo +type SectorOnChainInfo = miner9.SectorOnChainInfo func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredSealProof, error) { // We added support for the new proofs in network version 7, and removed support for the old @@ -235,8 +242,9 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi } } -type MinerInfo = miner8.MinerInfo -type WorkerKeyChange = miner8.WorkerKeyChange +type MinerInfo = miner9.MinerInfo +type WorkerKeyChange = miner9.WorkerKeyChange +type SectorPreCommitOnChainInfo = miner9.SectorPreCommitOnChainInfo type WindowPostVerifyInfo = proof.WindowPoStVerifyInfo type SectorExpiration struct { @@ -264,8 +272,8 @@ type SectorExtensions struct { } type PreCommitChanges struct { - Added []miner8.SectorPreCommitOnChainInfo - Removed []miner8.SectorPreCommitOnChainInfo + Added []miner9.SectorPreCommitOnChainInfo + Removed []miner9.SectorPreCommitOnChainInfo } type LockedFunds struct { diff --git a/chain/actors/builtin/miner/state.go.template b/chain/actors/builtin/miner/state.go.template index 53c4b446a..e24188fa0 100644 --- a/chain/actors/builtin/miner/state.go.template +++ b/chain/actors/builtin/miner/state.go.template @@ -15,7 +15,7 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/lotus/chain/actors/adt" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v{{.latestVersion}}/miner" {{if (le .v 7)}} {{if (ge .v 3)}} @@ -581,11 +581,17 @@ func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorO func fromV{{.v}}SectorPreCommitOnChainInfo(v{{.v}} miner{{.v}}.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v{{.v}}.Info), + Info: minertypes.SectorPreCommitInfo{ + SealProof: v{{.v}}.Info.SealProof, + SectorNumber: v{{.v}}.Info.SectorNumber, + SealedCID: v{{.v}}.Info.SealedCID, + SealRandEpoch: v{{.v}}.Info.SealRandEpoch, + DealIDs: v{{.v}}.Info.DealIDs, + Expiration: v{{.v}}.Info.Expiration, + UnsealedCid: nil, + }, PreCommitDeposit: v{{.v}}.PreCommitDeposit, PreCommitEpoch: v{{.v}}.PreCommitEpoch, - DealWeight: v{{.v}}.DealWeight, - VerifiedDealWeight: v{{.v}}.VerifiedDealWeight, } } diff --git a/chain/actors/builtin/miner/v0.go b/chain/actors/builtin/miner/v0.go index daa0a6bfd..e815806bd 100644 --- a/chain/actors/builtin/miner/v0.go +++ b/chain/actors/builtin/miner/v0.go @@ -12,7 +12,7 @@ import ( rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -511,11 +511,17 @@ func fromV0SectorOnChainInfo(v0 miner0.SectorOnChainInfo) SectorOnChainInfo { func fromV0SectorPreCommitOnChainInfo(v0 miner0.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v0.Info), - PreCommitDeposit: v0.PreCommitDeposit, - PreCommitEpoch: v0.PreCommitEpoch, - DealWeight: v0.DealWeight, - VerifiedDealWeight: v0.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v0.Info.SealProof, + SectorNumber: v0.Info.SectorNumber, + SealedCID: v0.Info.SealedCID, + SealRandEpoch: v0.Info.SealRandEpoch, + DealIDs: v0.Info.DealIDs, + Expiration: v0.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v0.PreCommitDeposit, + PreCommitEpoch: v0.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v2.go b/chain/actors/builtin/miner/v2.go index 7741b5426..3501e81f1 100644 --- a/chain/actors/builtin/miner/v2.go +++ b/chain/actors/builtin/miner/v2.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" @@ -542,11 +542,17 @@ func fromV2SectorOnChainInfo(v2 miner2.SectorOnChainInfo) SectorOnChainInfo { func fromV2SectorPreCommitOnChainInfo(v2 miner2.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v2.Info), - PreCommitDeposit: v2.PreCommitDeposit, - PreCommitEpoch: v2.PreCommitEpoch, - DealWeight: v2.DealWeight, - VerifiedDealWeight: v2.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v2.Info.SealProof, + SectorNumber: v2.Info.SectorNumber, + SealedCID: v2.Info.SealedCID, + SealRandEpoch: v2.Info.SealRandEpoch, + DealIDs: v2.Info.DealIDs, + Expiration: v2.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v2.PreCommitDeposit, + PreCommitEpoch: v2.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v3.go b/chain/actors/builtin/miner/v3.go index 8cb1c4004..5d2d3ef61 100644 --- a/chain/actors/builtin/miner/v3.go +++ b/chain/actors/builtin/miner/v3.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" @@ -542,11 +542,17 @@ func fromV3SectorOnChainInfo(v3 miner3.SectorOnChainInfo) SectorOnChainInfo { func fromV3SectorPreCommitOnChainInfo(v3 miner3.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v3.Info), - PreCommitDeposit: v3.PreCommitDeposit, - PreCommitEpoch: v3.PreCommitEpoch, - DealWeight: v3.DealWeight, - VerifiedDealWeight: v3.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v3.Info.SealProof, + SectorNumber: v3.Info.SectorNumber, + SealedCID: v3.Info.SealedCID, + SealRandEpoch: v3.Info.SealRandEpoch, + DealIDs: v3.Info.DealIDs, + Expiration: v3.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v3.PreCommitDeposit, + PreCommitEpoch: v3.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v4.go b/chain/actors/builtin/miner/v4.go index dc8b7a1d1..db36c3875 100644 --- a/chain/actors/builtin/miner/v4.go +++ b/chain/actors/builtin/miner/v4.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" @@ -542,11 +542,17 @@ func fromV4SectorOnChainInfo(v4 miner4.SectorOnChainInfo) SectorOnChainInfo { func fromV4SectorPreCommitOnChainInfo(v4 miner4.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v4.Info), - PreCommitDeposit: v4.PreCommitDeposit, - PreCommitEpoch: v4.PreCommitEpoch, - DealWeight: v4.DealWeight, - VerifiedDealWeight: v4.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v4.Info.SealProof, + SectorNumber: v4.Info.SectorNumber, + SealedCID: v4.Info.SealedCID, + SealRandEpoch: v4.Info.SealRandEpoch, + DealIDs: v4.Info.DealIDs, + Expiration: v4.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v4.PreCommitDeposit, + PreCommitEpoch: v4.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v5.go b/chain/actors/builtin/miner/v5.go index f5ec6087b..8ff6432d2 100644 --- a/chain/actors/builtin/miner/v5.go +++ b/chain/actors/builtin/miner/v5.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" @@ -542,11 +542,17 @@ func fromV5SectorOnChainInfo(v5 miner5.SectorOnChainInfo) SectorOnChainInfo { func fromV5SectorPreCommitOnChainInfo(v5 miner5.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v5.Info), - PreCommitDeposit: v5.PreCommitDeposit, - PreCommitEpoch: v5.PreCommitEpoch, - DealWeight: v5.DealWeight, - VerifiedDealWeight: v5.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v5.Info.SealProof, + SectorNumber: v5.Info.SectorNumber, + SealedCID: v5.Info.SealedCID, + SealRandEpoch: v5.Info.SealRandEpoch, + DealIDs: v5.Info.DealIDs, + Expiration: v5.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v5.PreCommitDeposit, + PreCommitEpoch: v5.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v6.go b/chain/actors/builtin/miner/v6.go index 78445b2ba..f11d4d062 100644 --- a/chain/actors/builtin/miner/v6.go +++ b/chain/actors/builtin/miner/v6.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" @@ -542,11 +542,17 @@ func fromV6SectorOnChainInfo(v6 miner6.SectorOnChainInfo) SectorOnChainInfo { func fromV6SectorPreCommitOnChainInfo(v6 miner6.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v6.Info), - PreCommitDeposit: v6.PreCommitDeposit, - PreCommitEpoch: v6.PreCommitEpoch, - DealWeight: v6.DealWeight, - VerifiedDealWeight: v6.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v6.Info.SealProof, + SectorNumber: v6.Info.SectorNumber, + SealedCID: v6.Info.SealedCID, + SealRandEpoch: v6.Info.SealRandEpoch, + DealIDs: v6.Info.DealIDs, + Expiration: v6.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v6.PreCommitDeposit, + PreCommitEpoch: v6.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v7.go b/chain/actors/builtin/miner/v7.go index c91fceb7b..f7893cef3 100644 --- a/chain/actors/builtin/miner/v7.go +++ b/chain/actors/builtin/miner/v7.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-bitfield" rle "github.com/filecoin-project/go-bitfield/rle" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" @@ -543,11 +543,17 @@ func fromV7SectorOnChainInfo(v7 miner7.SectorOnChainInfo) SectorOnChainInfo { func fromV7SectorPreCommitOnChainInfo(v7 miner7.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v7.Info), - PreCommitDeposit: v7.PreCommitDeposit, - PreCommitEpoch: v7.PreCommitEpoch, - DealWeight: v7.DealWeight, - VerifiedDealWeight: v7.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v7.Info.SealProof, + SectorNumber: v7.Info.SectorNumber, + SealedCID: v7.Info.SealedCID, + SealRandEpoch: v7.Info.SealRandEpoch, + DealIDs: v7.Info.DealIDs, + Expiration: v7.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v7.PreCommitDeposit, + PreCommitEpoch: v7.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v8.go b/chain/actors/builtin/miner/v8.go index 817a073a2..0d53cc664 100644 --- a/chain/actors/builtin/miner/v8.go +++ b/chain/actors/builtin/miner/v8.go @@ -13,8 +13,8 @@ import ( "github.com/filecoin-project/go-state-types/abi" builtin8 "github.com/filecoin-project/go-state-types/builtin" miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" adt8 "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/lotus/chain/actors/adt" @@ -543,11 +543,17 @@ func fromV8SectorOnChainInfo(v8 miner8.SectorOnChainInfo) SectorOnChainInfo { func fromV8SectorPreCommitOnChainInfo(v8 miner8.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { return minertypes.SectorPreCommitOnChainInfo{ - Info: (minertypes.SectorPreCommitInfo)(v8.Info), - PreCommitDeposit: v8.PreCommitDeposit, - PreCommitEpoch: v8.PreCommitEpoch, - DealWeight: v8.DealWeight, - VerifiedDealWeight: v8.VerifiedDealWeight, + Info: minertypes.SectorPreCommitInfo{ + SealProof: v8.Info.SealProof, + SectorNumber: v8.Info.SectorNumber, + SealedCID: v8.Info.SealedCID, + SealRandEpoch: v8.Info.SealRandEpoch, + DealIDs: v8.Info.DealIDs, + Expiration: v8.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v8.PreCommitDeposit, + PreCommitEpoch: v8.PreCommitEpoch, } } diff --git a/chain/actors/builtin/miner/v9.go b/chain/actors/builtin/miner/v9.go new file mode 100644 index 000000000..fe1f626f5 --- /dev/null +++ b/chain/actors/builtin/miner/v9.go @@ -0,0 +1,562 @@ +package miner + +import ( + "bytes" + "errors" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + "github.com/filecoin-project/go-state-types/dline" + + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + out.State = miner9.State{} + return &out, nil +} + +type state9 struct { + miner9.State + store adt.Store +} + +type deadline9 struct { + miner9.Deadline + store adt.Store +} + +type partition9 struct { + miner9.Partition + store adt.Store +} + +func (s *state9) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state9) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state9) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state9) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state9) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state9) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state9) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV9SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state9) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state9) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner9.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state9) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner9.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner9.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner9.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner9.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner9.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state9) GetPrecommittedSector(num abi.SectorNumber) (*minertypes.SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV9SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state9) ForEachPrecommittedSector(cb func(minertypes.SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt9.AsMap(s.store, s.State.PreCommittedSectors, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner9.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV9SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state9) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner9.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info9 miner9.SectorOnChainInfo + if err := sectors.ForEach(&info9, func(_ int64) error { + info := fromV9SectorOnChainInfo(info9) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos9, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos9)) + for i, info9 := range infos9 { + info := fromV9SectorOnChainInfo(*info9) + infos[i] = &info + } + return infos, nil +} + +func (s *state9) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state9) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state9) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state9) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state9) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state9) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline9{*dl, s.store}, nil +} + +func (s *state9) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner9.Deadline) error { + return cb(i, &deadline9{*dl, s.store}) + }) +} + +func (s *state9) NumDeadlines() (uint64, error) { + return miner9.WPoStPeriodDeadlines, nil +} + +func (s *state9) DeadlinesChanged(other State) (bool, error) { + other9, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other9.Deadlines), nil +} + +func (s *state9) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state9) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + PendingWorkerKey: (*WorkerKeyChange)(info.PendingWorkerKey), + + PeerId: info.PeerId, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + return mi, nil +} + +func (s *state9) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state9) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state9) sectors() (adt.Array, error) { + return adt9.AsArray(s.store, s.Sectors, miner9.SectorsAmtBitwidth) +} + +func (s *state9) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner9.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV9SectorOnChainInfo(si), nil +} + +func (s *state9) precommits() (adt.Map, error) { + return adt9.AsMap(s.store, s.PreCommittedSectors, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (minertypes.SectorPreCommitOnChainInfo, error) { + var sp miner9.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return minertypes.SectorPreCommitOnChainInfo{}, err + } + + return fromV9SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state9) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner9.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner9.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline9) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition9{*p, d.store}, nil +} + +func (d *deadline9) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner9.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition9{part, d.store}) + }) +} + +func (d *deadline9) PartitionsChanged(other Deadline) (bool, error) { + other9, ok := other.(*deadline9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other9.Deadline.Partitions), nil +} + +func (d *deadline9) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline9) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition9) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition9) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition9) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition9) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV9SectorOnChainInfo(v9 miner9.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v9.SectorNumber, + SealProof: v9.SealProof, + SealedCID: v9.SealedCID, + DealIDs: v9.DealIDs, + Activation: v9.Activation, + Expiration: v9.Expiration, + DealWeight: v9.DealWeight, + VerifiedDealWeight: v9.VerifiedDealWeight, + InitialPledge: v9.InitialPledge, + ExpectedDayReward: v9.ExpectedDayReward, + ExpectedStoragePledge: v9.ExpectedStoragePledge, + + SectorKeyCID: v9.SectorKeyCID, + } + return info +} + +func fromV9SectorPreCommitOnChainInfo(v9 miner9.SectorPreCommitOnChainInfo) minertypes.SectorPreCommitOnChainInfo { + return minertypes.SectorPreCommitOnChainInfo{ + Info: minertypes.SectorPreCommitInfo{ + SealProof: v9.Info.SealProof, + SectorNumber: v9.Info.SectorNumber, + SealedCID: v9.Info.SealedCID, + SealRandEpoch: v9.Info.SealRandEpoch, + DealIDs: v9.Info.DealIDs, + Expiration: v9.Info.Expiration, + UnsealedCid: nil, + }, + PreCommitDeposit: v9.PreCommitDeposit, + PreCommitEpoch: v9.PreCommitEpoch, + } +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/multisig/actor.go.template b/chain/actors/builtin/multisig/actor.go.template index bd6d4d77a..a02a986aa 100644 --- a/chain/actors/builtin/multisig/actor.go.template +++ b/chain/actors/builtin/multisig/actor.go.template @@ -1,6 +1,7 @@ package multisig import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "fmt" "github.com/minio/blake2b-simd" @@ -15,11 +16,11 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtintypes "github.com/filecoin-project/go-state-types/builtin" + "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/types" @@ -34,7 +35,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -53,10 +54,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, signers, threshold, startEpoch, unlockDuration, initialBalance) {{end}} } @@ -83,12 +84,12 @@ type State interface { type Transaction = msig{{.latestVersion}}.Transaction -var Methods = builtin{{.latestVersion}}.MethodsMultisig +var Methods = builtintypes.MethodsMultisig -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return message{{.}}{{"{"}}{{if (ge . 2)}}message0{from}{{else}}from{{end}}} {{end}} default: panic(fmt.Sprintf("unsupported actors version: %d", version)) diff --git a/chain/actors/builtin/multisig/message.go.template b/chain/actors/builtin/multisig/message.go.template index 5542f4eec..1e1559968 100644 --- a/chain/actors/builtin/multisig/message.go.template +++ b/chain/actors/builtin/multisig/message.go.template @@ -11,12 +11,12 @@ import ( init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" multisig{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/multisig" {{else}} - builtin{{.v}} "github.com/filecoin-project/go-state-types/builtin" - multisig{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/multisig" - init{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/init" + actorstypes "github.com/filecoin-project/go-state-types/actors" + multisig{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}multisig" + init{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin/v{{.latestVersion}}/init" {{end}} - + builtintypes "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/lotus/chain/actors" init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" "github.com/filecoin-project/lotus/chain/types" @@ -68,13 +68,13 @@ func (m message{{.v}}) Create( ConstructorParams: enc, } {{else}} - code, ok := actors.GetActorCodeID(actors.Version{{.v}}, actors.MultisigKey) + code, ok := actors.GetActorCodeID(actorstypes.Version{{.v}}, actors.MultisigKey) if !ok { return nil, xerrors.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init8.ExecParams{ + execParams := &init{{.latestVersion}}.ExecParams{ CodeCID: code, ConstructorParams: enc, } @@ -88,7 +88,7 @@ func (m message{{.v}}) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin{{.v}}.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message0.go b/chain/actors/builtin/multisig/message0.go index ac538d5b0..7dbdf444c 100644 --- a/chain/actors/builtin/multisig/message0.go +++ b/chain/actors/builtin/multisig/message0.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" multisig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" @@ -66,7 +67,7 @@ func (m message0) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin0.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message2.go b/chain/actors/builtin/multisig/message2.go index 6667479b1..91ad17b84 100644 --- a/chain/actors/builtin/multisig/message2.go +++ b/chain/actors/builtin/multisig/message2.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" @@ -63,7 +64,7 @@ func (m message2) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin2.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message3.go b/chain/actors/builtin/multisig/message3.go index b2e5880ba..4124e00c8 100644 --- a/chain/actors/builtin/multisig/message3.go +++ b/chain/actors/builtin/multisig/message3.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" multisig3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/multisig" @@ -63,7 +64,7 @@ func (m message3) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin3.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message4.go b/chain/actors/builtin/multisig/message4.go index c62ae3da5..33449df75 100644 --- a/chain/actors/builtin/multisig/message4.go +++ b/chain/actors/builtin/multisig/message4.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" multisig4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/multisig" @@ -63,7 +64,7 @@ func (m message4) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin4.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message5.go b/chain/actors/builtin/multisig/message5.go index d1ae532ea..46c35dabc 100644 --- a/chain/actors/builtin/multisig/message5.go +++ b/chain/actors/builtin/multisig/message5.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" multisig5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/multisig" @@ -63,7 +64,7 @@ func (m message5) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin5.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message6.go b/chain/actors/builtin/multisig/message6.go index 896ea7212..f528cfbb5 100644 --- a/chain/actors/builtin/multisig/message6.go +++ b/chain/actors/builtin/multisig/message6.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" multisig6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/multisig" @@ -63,7 +64,7 @@ func (m message6) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin6.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message7.go b/chain/actors/builtin/multisig/message7.go index b05952279..6e62dad13 100644 --- a/chain/actors/builtin/multisig/message7.go +++ b/chain/actors/builtin/multisig/message7.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + builtintypes "github.com/filecoin-project/go-state-types/builtin" builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" multisig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" @@ -63,7 +64,7 @@ func (m message7) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin7.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message8.go b/chain/actors/builtin/multisig/message8.go index 23bee19d0..f627a695f 100644 --- a/chain/actors/builtin/multisig/message8.go +++ b/chain/actors/builtin/multisig/message8.go @@ -5,9 +5,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtin8 "github.com/filecoin-project/go-state-types/builtin" - init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtintypes "github.com/filecoin-project/go-state-types/builtin" multisig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" "github.com/filecoin-project/lotus/chain/actors" init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" @@ -49,13 +50,13 @@ func (m message8) Create( return nil, actErr } - code, ok := actors.GetActorCodeID(actors.Version8, actors.MultisigKey) + code, ok := actors.GetActorCodeID(actorstypes.Version8, actors.MultisigKey) if !ok { return nil, xerrors.Errorf("failed to get multisig code ID") } // new actors are created by invoking 'exec' on the init actor with the constructor params - execParams := &init8.ExecParams{ + execParams := &init9.ExecParams{ CodeCID: code, ConstructorParams: enc, } @@ -68,7 +69,7 @@ func (m message8) Create( return &types.Message{ To: init_.Address, From: m.from, - Method: builtin8.MethodsInit.Exec, + Method: builtintypes.MethodsInit.Exec, Params: enc, Value: initialAmount, }, nil diff --git a/chain/actors/builtin/multisig/message9.go b/chain/actors/builtin/multisig/message9.go new file mode 100644 index 000000000..62f6ff558 --- /dev/null +++ b/chain/actors/builtin/multisig/message9.go @@ -0,0 +1,76 @@ +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtintypes "github.com/filecoin-project/go-state-types/builtin" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + multisig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" + + "github.com/filecoin-project/lotus/chain/actors" + init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" + "github.com/filecoin-project/lotus/chain/types" +) + +type message9 struct{ message0 } + +func (m message9) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig9.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + code, ok := actors.GetActorCodeID(actorstypes.Version9, actors.MultisigKey) + if !ok { + return nil, xerrors.Errorf("failed to get multisig code ID") + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init9.ExecParams{ + CodeCID: code, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtintypes.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/chain/actors/builtin/multisig/multisig.go b/chain/actors/builtin/multisig/multisig.go index 1b2fa7948..6c0d449df 100644 --- a/chain/actors/builtin/multisig/multisig.go +++ b/chain/actors/builtin/multisig/multisig.go @@ -9,8 +9,9 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtin8 "github.com/filecoin-project/go-state-types/builtin" - msig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtintypes "github.com/filecoin-project/go-state-types/builtin" + msig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" "github.com/filecoin-project/go-state-types/cbor" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -33,9 +34,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -67,33 +71,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version2: + case actorstypes.Version2: return make2(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version3: + case actorstypes.Version3: return make3(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version4: + case actorstypes.Version4: return make4(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version5: + case actorstypes.Version5: return make5(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version6: + case actorstypes.Version6: return make6(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version7: + case actorstypes.Version7: return make7(store, signers, threshold, startEpoch, unlockDuration, initialBalance) - case actors.Version8: + case actorstypes.Version8: return make8(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + case actorstypes.Version9: + return make9(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -116,36 +123,39 @@ type State interface { GetState() interface{} } -type Transaction = msig8.Transaction +type Transaction = msig9.Transaction -var Methods = builtin8.MethodsMultisig +var Methods = builtintypes.MethodsMultisig -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { - case actors.Version0: + case actorstypes.Version0: return message0{from} - case actors.Version2: + case actorstypes.Version2: return message2{message0{from}} - case actors.Version3: + case actorstypes.Version3: return message3{message0{from}} - case actors.Version4: + case actorstypes.Version4: return message4{message0{from}} - case actors.Version5: + case actorstypes.Version5: return message5{message0{from}} - case actors.Version6: + case actorstypes.Version6: return message6{message0{from}} - case actors.Version7: + case actorstypes.Version7: return message7{message0{from}} - case actors.Version8: + case actorstypes.Version8: return message8{message0{from}} + + case actorstypes.Version9: + return message9{message0{from}} default: panic(fmt.Sprintf("unsupported actors version: %d", version)) } @@ -169,13 +179,13 @@ type MessageBuilder interface { } // this type is the same between v0 and v2 -type ProposalHashData = msig8.ProposalHashData -type ProposeReturn = msig8.ProposeReturn -type ProposeParams = msig8.ProposeParams -type ApproveReturn = msig8.ApproveReturn +type ProposalHashData = msig9.ProposalHashData +type ProposeReturn = msig9.ProposeReturn +type ProposeParams = msig9.ProposeParams +type ApproveReturn = msig9.ApproveReturn func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { - params := msig8.TxnIDParams{ID: msig8.TxnID(id)} + params := msig9.TxnIDParams{ID: msig9.TxnID(id)} if data != nil { if data.Requester.Protocol() != address.ID { return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) diff --git a/chain/actors/builtin/multisig/v9.go b/chain/actors/builtin/multisig/v9.go new file mode 100644 index 000000000..ef9a48f28 --- /dev/null +++ b/chain/actors/builtin/multisig/v9.go @@ -0,0 +1,117 @@ +package multisig + +import ( + "bytes" + "encoding/binary" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + msig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state9{store: store} + out.State = msig9.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt9.StoreEmptyMap(store, builtin9.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state9 struct { + msig9.State + store adt.Store +} + +func (s *state9) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state9) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state9) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state9) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state9) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state9) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state9) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt9.AsMap(s.store, s.State.PendingTxns, builtin9.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig9.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state9) PendingTxnChanged(other State) (bool, error) { + other9, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other9.PendingTxns), nil +} + +func (s *state9) transactions() (adt.Map, error) { + return adt9.AsMap(s.store, s.PendingTxns, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig9.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return Transaction(tx), nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/paych/actor.go.template b/chain/actors/builtin/paych/actor.go.template index a815c880e..1308d4ea4 100644 --- a/chain/actors/builtin/paych/actor.go.template +++ b/chain/actors/builtin/paych/actor.go.template @@ -1,6 +1,7 @@ package paych import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "encoding/base64" "fmt" @@ -35,7 +36,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -99,10 +100,10 @@ func DecodeSignedVoucher(s string) (*paychtypes.SignedVoucher, error) { return &sv, nil } -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return message{{.}}{from} {{end}} default: diff --git a/chain/actors/builtin/paych/message.go.template b/chain/actors/builtin/paych/message.go.template index 9e92bf748..79aed1692 100644 --- a/chain/actors/builtin/paych/message.go.template +++ b/chain/actors/builtin/paych/message.go.template @@ -14,9 +14,10 @@ import ( init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" paych{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/paych" {{else}} + actorstypes "github.com/filecoin-project/go-state-types/actors" builtin{{.v}} "github.com/filecoin-project/go-state-types/builtin" - paych{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/paych" - init{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/init" + paych{{.v}} "github.com/filecoin-project/go-state-types/builtin/v{{.v}}/paych" + init{{.v}} "github.com/filecoin-project/go-state-types/builtin/v{{.v}}/init" {{end}} @@ -31,7 +32,7 @@ func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount) {{if (le .v 7)}} actorCodeID := builtin{{.v}}.PaymentChannelActorCodeID {{else}} - actorCodeID, ok := actors.GetActorCodeID(actors.Version{{.v}}, "paymentchannel") + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version{{.v}}, "paymentchannel") if !ok { return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", {{.v}}) } @@ -62,8 +63,10 @@ func (m message{{.v}}) Update(paych address.Address, sv *paychtypes.SignedVouche params, aerr := actors.SerializeParams(&paych{{.v}}.UpdateChannelStateParams{ {{if (le .v 6)}} Sv: toV0SignedVoucher(*sv), - {{else}} + {{else if (le .v 8)}} Sv: *sv, + {{else}} + Sv: toV{{.v}}SignedVoucher(*sv), {{end}} Secret: secret, }) @@ -80,6 +83,32 @@ func (m message{{.v}}) Update(paych address.Address, sv *paychtypes.SignedVouche }, nil } +{{if (ge .v 9)}} + func toV{{.v}}SignedVoucher(sv paychtypes.SignedVoucher) paych{{.v}}.SignedVoucher { + merges := make([]paych{{.v}}.Merge, len(sv.Merges)) + for i := range sv.Merges { + merges[i] = paych{{.v}}.Merge{ + Lane: sv.Merges[i].Lane, + Nonce: sv.Merges[i].Nonce, + } + } + + return paych{{.v}}.SignedVoucher{ + ChannelAddr: sv.ChannelAddr, + TimeLockMin: sv.TimeLockMin, + TimeLockMax: sv.TimeLockMax, + SecretHash: sv.SecretHash, + Extra: (*paych{{.v}}.ModVerifyParams)(sv.Extra), + Lane: sv.Lane, + Nonce: sv.Nonce, + Amount: sv.Amount, + MinSettleHeight: sv.MinSettleHeight, + Merges: merges, + Signature: sv.Signature, + } + } +{{end}} + func (m message{{.v}}) Settle(paych address.Address) (*types.Message, error) { return &types.Message{ To: paych, diff --git a/chain/actors/builtin/paych/message8.go b/chain/actors/builtin/paych/message8.go index 3fb743bc9..a72c5fbb3 100644 --- a/chain/actors/builtin/paych/message8.go +++ b/chain/actors/builtin/paych/message8.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" builtin8 "github.com/filecoin-project/go-state-types/builtin" init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" paych8 "github.com/filecoin-project/go-state-types/builtin/v8/paych" @@ -19,7 +20,7 @@ type message8 struct{ from address.Address } func (m message8) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { - actorCodeID, ok := actors.GetActorCodeID(actors.Version8, "paymentchannel") + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version8, "paymentchannel") if !ok { return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 8) } diff --git a/chain/actors/builtin/paych/message9.go b/chain/actors/builtin/paych/message9.go new file mode 100644 index 000000000..350c760ea --- /dev/null +++ b/chain/actors/builtin/paych/message9.go @@ -0,0 +1,109 @@ +package paych + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + paychtypes "github.com/filecoin-project/go-state-types/builtin/v8/paych" + init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + + "github.com/filecoin-project/lotus/chain/actors" + init_ "github.com/filecoin-project/lotus/chain/actors/builtin/init" + "github.com/filecoin-project/lotus/chain/types" +) + +type message9 struct{ from address.Address } + +func (m message9) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + + actorCodeID, ok := actors.GetActorCodeID(actorstypes.Version9, "paymentchannel") + if !ok { + return nil, xerrors.Errorf("error getting actor paymentchannel code id for actor version %d", 9) + } + + params, aerr := actors.SerializeParams(&paych9.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init9.ExecParams{ + CodeCID: actorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin9.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message9) Update(paych address.Address, sv *paychtypes.SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych9.UpdateChannelStateParams{ + + Sv: toV9SignedVoucher(*sv), + + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin9.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func toV9SignedVoucher(sv paychtypes.SignedVoucher) paych9.SignedVoucher { + merges := make([]paych9.Merge, len(sv.Merges)) + for i := range sv.Merges { + merges[i] = paych9.Merge{ + Lane: sv.Merges[i].Lane, + Nonce: sv.Merges[i].Nonce, + } + } + + return paych9.SignedVoucher{ + ChannelAddr: sv.ChannelAddr, + TimeLockMin: sv.TimeLockMin, + TimeLockMax: sv.TimeLockMax, + SecretHash: sv.SecretHash, + Extra: (*paych9.ModVerifyParams)(sv.Extra), + Lane: sv.Lane, + Nonce: sv.Nonce, + Amount: sv.Amount, + MinSettleHeight: sv.MinSettleHeight, + Merges: merges, + Signature: sv.Signature, + } +} + +func (m message9) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin9.MethodsPaych.Settle, + }, nil +} + +func (m message9) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin9.MethodsPaych.Collect, + }, nil +} diff --git a/chain/actors/builtin/paych/paych.go b/chain/actors/builtin/paych/paych.go index 20d9d2552..e0a13fd21 100644 --- a/chain/actors/builtin/paych/paych.go +++ b/chain/actors/builtin/paych/paych.go @@ -9,6 +9,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" paychtypes "github.com/filecoin-project/go-state-types/builtin/v8/paych" "github.com/filecoin-project/go-state-types/cbor" @@ -35,9 +36,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -114,33 +118,36 @@ func DecodeSignedVoucher(s string) (*paychtypes.SignedVoucher, error) { return &sv, nil } -func Message(version actors.Version, from address.Address) MessageBuilder { +func Message(version actorstypes.Version, from address.Address) MessageBuilder { switch version { - case actors.Version0: + case actorstypes.Version0: return message0{from} - case actors.Version2: + case actorstypes.Version2: return message2{from} - case actors.Version3: + case actorstypes.Version3: return message3{from} - case actors.Version4: + case actorstypes.Version4: return message4{from} - case actors.Version5: + case actorstypes.Version5: return message5{from} - case actors.Version6: + case actorstypes.Version6: return message6{from} - case actors.Version7: + case actorstypes.Version7: return message7{from} - case actors.Version8: + case actorstypes.Version8: return message8{from} + case actorstypes.Version9: + return message9{from} + default: panic(fmt.Sprintf("unsupported actors version: %d", version)) } diff --git a/chain/actors/builtin/paych/v9.go b/chain/actors/builtin/paych/v9.go new file mode 100644 index 000000000..443fe74ea --- /dev/null +++ b/chain/actors/builtin/paych/v9.go @@ -0,0 +1,113 @@ +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + out.State = paych9.State{} + return &out, nil +} + +type state9 struct { + paych9.State + store adt.Store + lsAmt *adt9.Array +} + +// Channel owner, who has funded the actor +func (s *state9) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state9) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state9) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state9) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state9) getOrLoadLsAmt() (*adt9.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt9.AsArray(s.store, s.State.LaneStates, paych9.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state9) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state9) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych9.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState9{ls}) + }) +} + +type laneState9 struct { + paych9.LaneState +} + +func (ls *laneState9) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState9) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/chain/actors/builtin/power/actor.go.template b/chain/actors/builtin/power/actor.go.template index af9190357..93fe70370 100644 --- a/chain/actors/builtin/power/actor.go.template +++ b/chain/actors/builtin/power/actor.go.template @@ -1,6 +1,7 @@ package power import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/lotus/chain/actors" @@ -17,10 +18,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var ( @@ -37,7 +37,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -56,10 +56,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store) {{end}} } diff --git a/chain/actors/builtin/power/power.go b/chain/actors/builtin/power/power.go index 2f1cfa22f..dc008f1f1 100644 --- a/chain/actors/builtin/power/power.go +++ b/chain/actors/builtin/power/power.go @@ -6,8 +6,9 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -24,8 +25,8 @@ import ( ) var ( - Address = builtin8.StoragePowerActorAddr - Methods = builtin8.MethodsPower + Address = builtin9.StoragePowerActorAddr + Methods = builtin9.MethodsPower ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -36,9 +37,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -70,33 +74,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store) + case actorstypes.Version9: + return make9(store) + } return nil, xerrors.Errorf("unknown actor version %d", av) } diff --git a/chain/actors/builtin/power/state.go.template b/chain/actors/builtin/power/state.go.template index b53ba68c8..08362d2db 100644 --- a/chain/actors/builtin/power/state.go.template +++ b/chain/actors/builtin/power/state.go.template @@ -20,7 +20,7 @@ import ( {{else}} builtin{{.v}} "github.com/filecoin-project/go-state-types/builtin" power{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}power" - adt{{.v}} "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" + adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt" {{end}} ) diff --git a/chain/actors/builtin/power/v9.go b/chain/actors/builtin/power/v9.go new file mode 100644 index 000000000..7614b7c2e --- /dev/null +++ b/chain/actors/builtin/power/v9.go @@ -0,0 +1,186 @@ +package power + +import ( + "bytes" + + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + power9 "github.com/filecoin-project/go-state-types/builtin/v9/power" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/chain/actors/builtin" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store) (State, error) { + out := state9{store: store} + + s, err := power9.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + power9.State + store adt.Store +} + +func (s *state9) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state9) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state9) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state9) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power9.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state9) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state9) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state9) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state9) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state9) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power9.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state9) ClaimsChanged(other State) (bool, error) { + other9, ok := other.(*state9) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other9.State.Claims), nil +} + +func (s *state9) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state9) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state9) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state9) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +func (s *state9) claims() (adt.Map, error) { + return adt9.AsMap(s.store, s.Claims, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power9.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV9Claim(ci), nil +} + +func fromV9Claim(v9 power9.Claim) Claim { + return Claim{ + RawBytePower: v9.RawBytePower, + QualityAdjPower: v9.QualityAdjPower, + } +} diff --git a/chain/actors/builtin/registry.go b/chain/actors/builtin/registry.go new file mode 100644 index 000000000..a51ef6245 --- /dev/null +++ b/chain/actors/builtin/registry.go @@ -0,0 +1,217 @@ +package builtin + +import ( + "github.com/ipfs/go-cid" + + actorstypes "github.com/filecoin-project/go-state-types/actors" + account8 "github.com/filecoin-project/go-state-types/builtin/v8/account" + cron8 "github.com/filecoin-project/go-state-types/builtin/v8/cron" + _init8 "github.com/filecoin-project/go-state-types/builtin/v8/init" + market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" + miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" + multisig8 "github.com/filecoin-project/go-state-types/builtin/v8/multisig" + paych8 "github.com/filecoin-project/go-state-types/builtin/v8/paych" + power8 "github.com/filecoin-project/go-state-types/builtin/v8/power" + reward8 "github.com/filecoin-project/go-state-types/builtin/v8/reward" + system8 "github.com/filecoin-project/go-state-types/builtin/v8/system" + verifreg8 "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" + account9 "github.com/filecoin-project/go-state-types/builtin/v9/account" + cron9 "github.com/filecoin-project/go-state-types/builtin/v9/cron" + _init9 "github.com/filecoin-project/go-state-types/builtin/v9/init" + market9 "github.com/filecoin-project/go-state-types/builtin/v9/market" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + multisig9 "github.com/filecoin-project/go-state-types/builtin/v9/multisig" + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + power9 "github.com/filecoin-project/go-state-types/builtin/v9/power" + reward9 "github.com/filecoin-project/go-state-types/builtin/v9/reward" + system9 "github.com/filecoin-project/go-state-types/builtin/v9/system" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + "github.com/filecoin-project/go-state-types/cbor" + rtt "github.com/filecoin-project/go-state-types/rt" + + "github.com/filecoin-project/lotus/chain/actors" +) + +var _ rtt.VMActor = (*RegistryEntry)(nil) + +type RegistryEntry struct { + state cbor.Er + code cid.Cid + methods []interface{} +} + +func (r RegistryEntry) State() cbor.Er { + return r.state +} + +func (r RegistryEntry) Exports() []interface{} { + return r.methods +} + +func (r RegistryEntry) Code() cid.Cid { + return r.code +} + +func MakeRegistry(av actorstypes.Version) []rtt.VMActor { + if av < actorstypes.Version8 { + panic("expected version v8 and up only, use specs-actors for v0-7") + } + registry := make([]rtt.VMActor, 0) + + codeIDs, err := actors.GetActorCodeIDs(av) + if err != nil { + panic(err) + } + + switch av { + + case actorstypes.Version8: + for key, codeID := range codeIDs { + switch key { + case actors.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account8.Methods, + state: new(account8.State), + }) + case actors.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron8.Methods, + state: new(cron8.State), + }) + case actors.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init8.Methods, + state: new(_init8.State), + }) + case actors.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market8.Methods, + state: new(market8.State), + }) + case actors.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner8.Methods, + state: new(miner8.State), + }) + case actors.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig8.Methods, + state: new(multisig8.State), + }) + case actors.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych8.Methods, + state: new(paych8.State), + }) + case actors.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power8.Methods, + state: new(power8.State), + }) + case actors.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward8.Methods, + state: new(reward8.State), + }) + case actors.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system8.Methods, + state: new(system8.State), + }) + case actors.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg8.Methods, + state: new(verifreg8.State), + }) + } + } + + case actorstypes.Version9: + for key, codeID := range codeIDs { + switch key { + case actors.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account9.Methods, + state: new(account9.State), + }) + case actors.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron9.Methods, + state: new(cron9.State), + }) + case actors.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init9.Methods, + state: new(_init9.State), + }) + case actors.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market9.Methods, + state: new(market9.State), + }) + case actors.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner9.Methods, + state: new(miner9.State), + }) + case actors.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig9.Methods, + state: new(multisig9.State), + }) + case actors.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych9.Methods, + state: new(paych9.State), + }) + case actors.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power9.Methods, + state: new(power9.State), + }) + case actors.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward9.Methods, + state: new(reward9.State), + }) + case actors.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system9.Methods, + state: new(system9.State), + }) + case actors.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg9.Methods, + state: new(verifreg9.State), + }) + } + } + + default: + panic("expected version v8 and up only, use specs-actors for v0-7") + } + + return registry +} diff --git a/chain/actors/builtin/registry.go.template b/chain/actors/builtin/registry.go.template new file mode 100644 index 000000000..ec6d5b633 --- /dev/null +++ b/chain/actors/builtin/registry.go.template @@ -0,0 +1,139 @@ +package builtin + +import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/ipfs/go-cid" + {{range .versions}} + {{if (ge . 8)}} + account{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/account" + cron{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/cron" + _init{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/init" + multisig{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/multisig" + miner{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/miner" + market{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/market" + reward{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/reward" + paych{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/paych" + power{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/power" + system{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/system" + verifreg{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/verifreg" + {{end}} + {{end}} + "github.com/filecoin-project/go-state-types/cbor" + rtt "github.com/filecoin-project/go-state-types/rt" + "github.com/filecoin-project/lotus/chain/actors" +) + +var _ rtt.VMActor = (*RegistryEntry)(nil) + +type RegistryEntry struct { + state cbor.Er + code cid.Cid + methods []interface{} +} + +func (r RegistryEntry) State() cbor.Er { + return r.state +} + +func (r RegistryEntry) Exports() []interface{} { + return r.methods +} + +func (r RegistryEntry) Code() cid.Cid { + return r.code +} + +func MakeRegistry(av actorstypes.Version) []rtt.VMActor { + if av < actorstypes.Version8 { + panic("expected version v8 and up only, use specs-actors for v0-7") + } + registry := make([]rtt.VMActor, 0) + + codeIDs, err := actors.GetActorCodeIDs(av) + if err != nil { + panic(err) + } + + switch av { + {{range .versions}} + {{if (ge . 8)}} + case actorstypes.Version{{.}}: + for key, codeID := range codeIDs { + switch key { + case actors.AccountKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: account{{.}}.Methods, + state: new(account{{.}}.State), + }) + case actors.CronKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: cron{{.}}.Methods, + state: new(cron{{.}}.State), + }) + case actors.InitKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: _init{{.}}.Methods, + state: new(_init{{.}}.State), + }) + case actors.MarketKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: market{{.}}.Methods, + state: new(market{{.}}.State), + }) + case actors.MinerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: miner{{.}}.Methods, + state: new(miner{{.}}.State), + }) + case actors.MultisigKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: multisig{{.}}.Methods, + state: new(multisig{{.}}.State), + }) + case actors.PaychKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: paych{{.}}.Methods, + state: new(paych{{.}}.State), + }) + case actors.PowerKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: power{{.}}.Methods, + state: new(power{{.}}.State), + }) + case actors.RewardKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: reward{{.}}.Methods, + state: new(reward{{.}}.State), + }) + case actors.SystemKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: system{{.}}.Methods, + state: new(system{{.}}.State), + }) + case actors.VerifregKey: + registry = append(registry, RegistryEntry{ + code: codeID, + methods: verifreg{{.}}.Methods, + state: new(verifreg{{.}}.State), + }) + } + } + {{end}} + {{end}} + + default: + panic("expected version v8 and up only, use specs-actors for v0-7") + } + + return registry +} diff --git a/chain/actors/builtin/reward/actor.go.template b/chain/actors/builtin/reward/actor.go.template index 3e0e859a3..165f9efdf 100644 --- a/chain/actors/builtin/reward/actor.go.template +++ b/chain/actors/builtin/reward/actor.go.template @@ -1,6 +1,7 @@ package reward import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/abi" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" "github.com/filecoin-project/lotus/chain/actors" @@ -10,10 +11,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/actors/builtin" @@ -34,7 +34,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -53,10 +53,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.StoragePower) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, currRealizedPower) {{end}} } diff --git a/chain/actors/builtin/reward/reward.go b/chain/actors/builtin/reward/reward.go index 943386f6a..6902b258e 100644 --- a/chain/actors/builtin/reward/reward.go +++ b/chain/actors/builtin/reward/reward.go @@ -4,7 +4,8 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" @@ -22,8 +23,8 @@ import ( ) var ( - Address = builtin8.RewardActorAddr - Methods = builtin8.MethodsReward + Address = builtin9.RewardActorAddr + Methods = builtin9.MethodsReward ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -34,9 +35,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -68,33 +72,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, currRealizedPower abi.StoragePower) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, currRealizedPower) - case actors.Version2: + case actorstypes.Version2: return make2(store, currRealizedPower) - case actors.Version3: + case actorstypes.Version3: return make3(store, currRealizedPower) - case actors.Version4: + case actorstypes.Version4: return make4(store, currRealizedPower) - case actors.Version5: + case actorstypes.Version5: return make5(store, currRealizedPower) - case actors.Version6: + case actorstypes.Version6: return make6(store, currRealizedPower) - case actors.Version7: + case actorstypes.Version7: return make7(store, currRealizedPower) - case actors.Version8: + case actorstypes.Version8: return make8(store, currRealizedPower) + case actorstypes.Version9: + return make9(store, currRealizedPower) + } return nil, xerrors.Errorf("unknown actor version %d", av) } diff --git a/chain/actors/builtin/reward/v9.go b/chain/actors/builtin/reward/v9.go new file mode 100644 index 000000000..04da532d2 --- /dev/null +++ b/chain/actors/builtin/reward/v9.go @@ -0,0 +1,98 @@ +package reward + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/abi" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + reward9 "github.com/filecoin-project/go-state-types/builtin/v9/reward" + smoothing9 "github.com/filecoin-project/go-state-types/builtin/v9/util/smoothing" + + "github.com/filecoin-project/lotus/chain/actors/adt" + "github.com/filecoin-project/lotus/chain/actors/builtin" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state9{store: store} + out.State = *reward9.ConstructState(currRealizedPower) + return &out, nil +} + +type state9 struct { + reward9.State + store adt.Store +} + +func (s *state9) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state9) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state9) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state9) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state9) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state9) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state9) CumsumBaseline() (reward9.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state9) CumsumRealized() (reward9.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state9) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner9.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing9.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state9) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner9.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing9.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/system/actor.go.template b/chain/actors/builtin/system/actor.go.template index c5e1af3e4..0ef41e775 100644 --- a/chain/actors/builtin/system/actor.go.template +++ b/chain/actors/builtin/system/actor.go.template @@ -1,6 +1,7 @@ package system import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/types" @@ -11,10 +12,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" ) var ( @@ -30,7 +30,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -49,10 +49,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, builtinActors cid.Cid) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store{{if (ge . 8)}}, builtinActors{{end}}) {{end}} } @@ -62,4 +62,5 @@ func MakeState(store adt.Store, av actors.Version, builtinActors cid.Cid) (State type State interface { GetState() interface{} GetBuiltinActors() cid.Cid + SetBuiltinActors(cid.Cid) error } diff --git a/chain/actors/builtin/system/state.go.template b/chain/actors/builtin/system/state.go.template index 21b057ad5..f8d9addf7 100644 --- a/chain/actors/builtin/system/state.go.template +++ b/chain/actors/builtin/system/state.go.template @@ -7,6 +7,7 @@ import ( {{if (le .v 7)}} system{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/system" + "golang.org/x/xerrors" {{else}} system{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}system" {{end}} @@ -46,4 +47,13 @@ func (s *state{{.v}}) GetBuiltinActors() cid.Cid { {{else}} return s.State.BuiltinActors {{end}} +} + +func (s *state{{.v}}) SetBuiltinActors(c cid.Cid) error { +{{if (le .v 7)}} + return xerrors.New("cannot set manifest cid before v8") +{{else}} + s.State.BuiltinActors = c + return nil +{{end}} } \ No newline at end of file diff --git a/chain/actors/builtin/system/system.go b/chain/actors/builtin/system/system.go index 24cf47d55..4c99d90eb 100644 --- a/chain/actors/builtin/system/system.go +++ b/chain/actors/builtin/system/system.go @@ -4,7 +4,8 @@ import ( "github.com/ipfs/go-cid" "golang.org/x/xerrors" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" @@ -19,7 +20,7 @@ import ( ) var ( - Address = builtin8.SystemActorAddr + Address = builtin9.SystemActorAddr ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -30,9 +31,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -64,33 +68,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, builtinActors cid.Cid) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, builtinActors cid.Cid) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store) - case actors.Version2: + case actorstypes.Version2: return make2(store) - case actors.Version3: + case actorstypes.Version3: return make3(store) - case actors.Version4: + case actorstypes.Version4: return make4(store) - case actors.Version5: + case actorstypes.Version5: return make5(store) - case actors.Version6: + case actorstypes.Version6: return make6(store) - case actors.Version7: + case actorstypes.Version7: return make7(store) - case actors.Version8: + case actorstypes.Version8: return make8(store, builtinActors) + case actorstypes.Version9: + return make9(store, builtinActors) + } return nil, xerrors.Errorf("unknown actor version %d", av) } @@ -98,4 +105,5 @@ func MakeState(store adt.Store, av actors.Version, builtinActors cid.Cid) (State type State interface { GetState() interface{} GetBuiltinActors() cid.Cid + SetBuiltinActors(cid.Cid) error } diff --git a/chain/actors/builtin/system/v0.go b/chain/actors/builtin/system/v0.go index efa0741ce..78e578896 100644 --- a/chain/actors/builtin/system/v0.go +++ b/chain/actors/builtin/system/v0.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system0 "github.com/filecoin-project/specs-actors/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state0) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state0) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v2.go b/chain/actors/builtin/system/v2.go index e4fefd08d..21dfa5c78 100644 --- a/chain/actors/builtin/system/v2.go +++ b/chain/actors/builtin/system/v2.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state2) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state2) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v3.go b/chain/actors/builtin/system/v3.go index d2b59c8a8..ccf8aa2c3 100644 --- a/chain/actors/builtin/system/v3.go +++ b/chain/actors/builtin/system/v3.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state3) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state3) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v4.go b/chain/actors/builtin/system/v4.go index 9528c1779..bcb120be2 100644 --- a/chain/actors/builtin/system/v4.go +++ b/chain/actors/builtin/system/v4.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state4) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state4) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v5.go b/chain/actors/builtin/system/v5.go index adc1d4553..182883398 100644 --- a/chain/actors/builtin/system/v5.go +++ b/chain/actors/builtin/system/v5.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state5) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state5) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v6.go b/chain/actors/builtin/system/v6.go index 0cebadce0..9860ce373 100644 --- a/chain/actors/builtin/system/v6.go +++ b/chain/actors/builtin/system/v6.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state6) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state6) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v7.go b/chain/actors/builtin/system/v7.go index 0009773da..5984b0b4d 100644 --- a/chain/actors/builtin/system/v7.go +++ b/chain/actors/builtin/system/v7.go @@ -2,6 +2,7 @@ package system import ( "github.com/ipfs/go-cid" + "golang.org/x/xerrors" system7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/system" @@ -39,3 +40,9 @@ func (s *state7) GetBuiltinActors() cid.Cid { return cid.Undef } + +func (s *state7) SetBuiltinActors(c cid.Cid) error { + + return xerrors.New("cannot set manifest cid before v8") + +} diff --git a/chain/actors/builtin/system/v8.go b/chain/actors/builtin/system/v8.go index 48f150fb9..574df9c44 100644 --- a/chain/actors/builtin/system/v8.go +++ b/chain/actors/builtin/system/v8.go @@ -41,3 +41,10 @@ func (s *state8) GetBuiltinActors() cid.Cid { return s.State.BuiltinActors } + +func (s *state8) SetBuiltinActors(c cid.Cid) error { + + s.State.BuiltinActors = c + return nil + +} diff --git a/chain/actors/builtin/system/v9.go b/chain/actors/builtin/system/v9.go new file mode 100644 index 000000000..40555a921 --- /dev/null +++ b/chain/actors/builtin/system/v9.go @@ -0,0 +1,50 @@ +package system + +import ( + "github.com/ipfs/go-cid" + + system9 "github.com/filecoin-project/go-state-types/builtin/v9/system" + + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, builtinActors cid.Cid) (State, error) { + out := state9{store: store} + out.State = system9.State{ + BuiltinActors: builtinActors, + } + return &out, nil +} + +type state9 struct { + system9.State + store adt.Store +} + +func (s *state9) GetState() interface{} { + return &s.State +} + +func (s *state9) GetBuiltinActors() cid.Cid { + + return s.State.BuiltinActors + +} + +func (s *state9) SetBuiltinActors(c cid.Cid) error { + + s.State.BuiltinActors = c + return nil + +} diff --git a/chain/actors/builtin/verifreg/actor.go.template b/chain/actors/builtin/verifreg/actor.go.template index 3df256004..3501dd528 100644 --- a/chain/actors/builtin/verifreg/actor.go.template +++ b/chain/actors/builtin/verifreg/actor.go.template @@ -1,6 +1,7 @@ package verifreg import ( + actorstypes "github.com/filecoin-project/go-state-types/actors" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" @@ -10,10 +11,9 @@ import ( {{range .versions}} {{if (le . 7)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" - {{else}} - builtin{{.}} "github.com/filecoin-project/go-state-types/builtin" {{end}} {{end}} + builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/actors" @@ -34,7 +34,7 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { {{range .versions}} {{if (ge . 8)}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return load{{.}}(store, act.Head) {{end}} {{end}} @@ -53,10 +53,10 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.Address) (State, error) { switch av { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return make{{.}}(store, rootKeyAddress) {{end}} } diff --git a/chain/actors/builtin/verifreg/v9.go b/chain/actors/builtin/verifreg/v9.go new file mode 100644 index 000000000..ca96eda05 --- /dev/null +++ b/chain/actors/builtin/verifreg/v9.go @@ -0,0 +1,83 @@ +package verifreg + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + builtin9 "github.com/filecoin-project/go-state-types/builtin" + adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + + "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/adt" +) + +var _ State = (*state9)(nil) + +func load9(store adt.Store, root cid.Cid) (State, error) { + out := state9{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make9(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state9{store: store} + + s, err := verifreg9.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state9 struct { + verifreg9.State + store adt.Store +} + +func (s *state9) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state9) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version9, s.verifiedClients, addr) +} + +func (s *state9) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version9, s.verifiers, addr) +} + +func (s *state9) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) { + return getRemoveDataCapProposalID(s.store, actors.Version9, s.removeDataCapProposalIDs, verifier, client) +} + +func (s *state9) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version9, s.verifiers, cb) +} + +func (s *state9) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version9, s.verifiedClients, cb) +} + +func (s *state9) verifiedClients() (adt.Map, error) { + return adt9.AsMap(s.store, s.VerifiedClients, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) verifiers() (adt.Map, error) { + return adt9.AsMap(s.store, s.Verifiers, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) removeDataCapProposalIDs() (adt.Map, error) { + return adt9.AsMap(s.store, s.RemoveDataCapProposalIDs, builtin9.DefaultHamtBitwidth) +} + +func (s *state9) GetState() interface{} { + return &s.State +} diff --git a/chain/actors/builtin/verifreg/verifreg.go b/chain/actors/builtin/verifreg/verifreg.go index 0e35af648..fa5f53ec7 100644 --- a/chain/actors/builtin/verifreg/verifreg.go +++ b/chain/actors/builtin/verifreg/verifreg.go @@ -5,7 +5,8 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - builtin8 "github.com/filecoin-project/go-state-types/builtin" + actorstypes "github.com/filecoin-project/go-state-types/actors" + builtin9 "github.com/filecoin-project/go-state-types/builtin" "github.com/filecoin-project/go-state-types/cbor" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" @@ -21,8 +22,8 @@ import ( ) var ( - Address = builtin8.VerifiedRegistryActorAddr - Methods = builtin8.MethodsVerifiedRegistry + Address = builtin9.VerifiedRegistryActorAddr + Methods = builtin9.MethodsVerifiedRegistry ) func Load(store adt.Store, act *types.Actor) (State, error) { @@ -33,9 +34,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) { switch av { - case actors.Version8: + case actorstypes.Version8: return load8(store, act.Head) + case actorstypes.Version9: + return load9(store, act.Head) + } } @@ -67,33 +71,36 @@ func Load(store adt.Store, act *types.Actor) (State, error) { return nil, xerrors.Errorf("unknown actor code %s", act.Code) } -func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { +func MakeState(store adt.Store, av actorstypes.Version, rootKeyAddress address.Address) (State, error) { switch av { - case actors.Version0: + case actorstypes.Version0: return make0(store, rootKeyAddress) - case actors.Version2: + case actorstypes.Version2: return make2(store, rootKeyAddress) - case actors.Version3: + case actorstypes.Version3: return make3(store, rootKeyAddress) - case actors.Version4: + case actorstypes.Version4: return make4(store, rootKeyAddress) - case actors.Version5: + case actorstypes.Version5: return make5(store, rootKeyAddress) - case actors.Version6: + case actorstypes.Version6: return make6(store, rootKeyAddress) - case actors.Version7: + case actorstypes.Version7: return make7(store, rootKeyAddress) - case actors.Version8: + case actorstypes.Version8: return make8(store, rootKeyAddress) + case actorstypes.Version9: + return make9(store, rootKeyAddress) + } return nil, xerrors.Errorf("unknown actor version %d", av) } diff --git a/chain/actors/manifest.go b/chain/actors/manifest.go index 52ed3e77d..cb118e1f3 100644 --- a/chain/actors/manifest.go +++ b/chain/actors/manifest.go @@ -9,13 +9,14 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/lotus/chain/actors/adt" ) -var manifestCids map[Version]cid.Cid = make(map[Version]cid.Cid) -var manifests map[Version]map[string]cid.Cid = make(map[Version]map[string]cid.Cid) +var manifestCids map[actorstypes.Version]cid.Cid = make(map[actorstypes.Version]cid.Cid) +var manifests map[actorstypes.Version]map[string]cid.Cid = make(map[actorstypes.Version]map[string]cid.Cid) var actorMeta map[cid.Cid]actorEntry = make(map[cid.Cid]actorEntry) const ( @@ -54,7 +55,7 @@ var ( type actorEntry struct { name string - version Version + version actorstypes.Version } // ClearManifest clears all known manifests. This is usually used in tests that need to switch networks. @@ -62,13 +63,13 @@ func ClearManifests() { manifestMx.Lock() defer manifestMx.Unlock() - manifestCids = make(map[Version]cid.Cid) - manifests = make(map[Version]map[string]cid.Cid) + manifestCids = make(map[actorstypes.Version]cid.Cid) + manifests = make(map[actorstypes.Version]map[string]cid.Cid) actorMeta = make(map[cid.Cid]actorEntry) } // RegisterManifest registers an actors manifest with lotus. -func RegisterManifest(av Version, manifestCid cid.Cid, entries map[string]cid.Cid) { +func RegisterManifest(av actorstypes.Version, manifestCid cid.Cid, entries map[string]cid.Cid) { manifestMx.Lock() defer manifestMx.Unlock() @@ -81,7 +82,7 @@ func RegisterManifest(av Version, manifestCid cid.Cid, entries map[string]cid.Ci } // GetManifest gets a loaded manifest. -func GetManifest(av Version) (cid.Cid, bool) { +func GetManifest(av actorstypes.Version) (cid.Cid, bool) { manifestMx.RLock() defer manifestMx.RUnlock() @@ -114,7 +115,7 @@ func ReadManifest(ctx context.Context, store cbor.IpldStore, mfCid cid.Cid) (map } // GetActorCodeIDsFromManifest looks up all builtin actor's code CIDs by actor version for versions that have a manifest. -func GetActorCodeIDsFromManifest(av Version) (map[string]cid.Cid, bool) { +func GetActorCodeIDsFromManifest(av actorstypes.Version) (map[string]cid.Cid, bool) { manifestMx.RLock() defer manifestMx.RUnlock() @@ -137,7 +138,7 @@ func LoadManifest(ctx context.Context, mfCid cid.Cid, adtStore adt.Store) (*mani return &mf, nil } -func GetActorMetaByCode(c cid.Cid) (string, Version, bool) { +func GetActorMetaByCode(c cid.Cid) (string, actorstypes.Version, bool) { manifestMx.RLock() defer manifestMx.RUnlock() diff --git a/chain/actors/policy/policy.go b/chain/actors/policy/policy.go index 746b19287..eaeb326c7 100644 --- a/chain/actors/policy/policy.go +++ b/chain/actors/policy/policy.go @@ -1,17 +1,20 @@ package policy import ( - "sort" - "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" builtin8 "github.com/filecoin-project/go-state-types/builtin" + builtin9 "github.com/filecoin-project/go-state-types/builtin" market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" miner8 "github.com/filecoin-project/go-state-types/builtin/v8/miner" - paych8 "github.com/filecoin-project/go-state-types/builtin/v8/paych" verifreg8 "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" + market9 "github.com/filecoin-project/go-state-types/builtin/v9/market" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + paych9 "github.com/filecoin-project/go-state-types/builtin/v9/paych" + verifreg9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" "github.com/filecoin-project/go-state-types/network" market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" @@ -41,15 +44,13 @@ import ( market7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/market" miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg" - - "github.com/filecoin-project/lotus/chain/actors" ) const ( - ChainFinality = miner8.ChainFinality + ChainFinality = miner9.ChainFinality SealRandomnessLookback = ChainFinality - PaychSettleDelay = paych8.SettleDelay - MaxPreCommitRandomnessLookback = builtin8.EpochsInDay + SealRandomnessLookback + PaychSettleDelay = paych9.SettleDelay + MaxPreCommitRandomnessLookback = builtin9.EpochsInDay + SealRandomnessLookback ) // SetSupportedProofTypes sets supported proof types, across all actor versions. @@ -76,8 +77,6 @@ func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { miner7.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) - miner8.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) - AddSupportedProofTypes(types...) } @@ -134,15 +133,6 @@ func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { miner7.WindowPoStProofTypes[wpp] = struct{}{} - miner8.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} - wpp, err = t.RegisteredWindowPoStProof() - if err != nil { - // Fine to panic, this is a test-only method - panic(err) - } - - miner8.WindowPoStProofTypes[wpp] = struct{}{} - } } @@ -167,11 +157,13 @@ func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { miner8.PreCommitChallengeDelay = delay + miner9.PreCommitChallengeDelay = delay + } // TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. func GetPreCommitChallengeDelay() abi.ChainEpoch { - return miner8.PreCommitChallengeDelay + return miner9.PreCommitChallengeDelay } // SetConsensusMinerMinPower sets the minimum power of an individual miner must @@ -209,6 +201,10 @@ func SetConsensusMinerMinPower(p abi.StoragePower) { policy.ConsensusMinerMinPower = p } + for _, policy := range builtin9.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + } // SetMinVerifiedDealSize sets the minimum size of a verified deal. This should @@ -231,43 +227,49 @@ func SetMinVerifiedDealSize(size abi.StoragePower) { verifreg8.MinVerifiedDealSize = size + verifreg9.MinVerifiedDealSize = size + } -func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { +func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { switch ver { - case actors.Version0: + case actorstypes.Version0: return miner0.MaxSealDuration[t], nil - case actors.Version2: + case actorstypes.Version2: return miner2.MaxProveCommitDuration[t], nil - case actors.Version3: + case actorstypes.Version3: return miner3.MaxProveCommitDuration[t], nil - case actors.Version4: + case actorstypes.Version4: return miner4.MaxProveCommitDuration[t], nil - case actors.Version5: + case actorstypes.Version5: return miner5.MaxProveCommitDuration[t], nil - case actors.Version6: + case actorstypes.Version6: return miner6.MaxProveCommitDuration[t], nil - case actors.Version7: + case actorstypes.Version7: return miner7.MaxProveCommitDuration[t], nil - case actors.Version8: + case actorstypes.Version8: return miner8.MaxProveCommitDuration[t], nil + case actorstypes.Version9: + + return miner9.MaxProveCommitDuration[t], nil + default: return 0, xerrors.Errorf("unsupported actors version") } @@ -313,6 +315,11 @@ func SetProviderCollateralSupplyTarget(num, denom big.Int) { Denominator: denom, } + market9.ProviderCollateralSupplyTarget = builtin9.BigFrac{ + Numerator: num, + Denominator: denom, + } + } func DealProviderCollateralBounds( @@ -320,59 +327,64 @@ func DealProviderCollateralBounds( rawBytePower, qaPower, baselinePower abi.StoragePower, circulatingFil abi.TokenAmount, nwVer network.Version, ) (min, max abi.TokenAmount, err error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), big.Zero(), err } switch v { - case actors.Version0: + case actorstypes.Version0: min, max := market0.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) return min, max, nil - case actors.Version2: + case actorstypes.Version2: min, max := market2.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version3: + case actorstypes.Version3: min, max := market3.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version4: + case actorstypes.Version4: min, max := market4.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version5: + case actorstypes.Version5: min, max := market5.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version6: + case actorstypes.Version6: min, max := market6.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version7: + case actorstypes.Version7: min, max := market7.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil - case actors.Version8: + case actorstypes.Version8: min, max := market8.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) return min, max, nil + case actorstypes.Version9: + + min, max := market9.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + default: return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") } } func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { - return market8.DealDurationBounds(pieceSize) + return market9.DealDurationBounds(pieceSize) } // Sets the challenge window and scales the proving period to match (such that @@ -427,6 +439,13 @@ func SetWPoStChallengeWindow(period abi.ChainEpoch) { // scale it if we're scaling the challenge period. miner8.WPoStDisputeWindow = period * 30 + miner9.WPoStChallengeWindow = period + miner9.WPoStProvingPeriod = period * abi.ChainEpoch(miner9.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner9.WPoStDisputeWindow = period * 30 + } func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { @@ -439,15 +458,15 @@ func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { } func GetMaxSectorExpirationExtension() abi.ChainEpoch { - return miner8.MaxSectorExpirationExtension + return miner9.MaxSectorExpirationExtension } func GetMinSectorExpiration() abi.ChainEpoch { - return miner8.MinSectorExpiration + return miner9.MinSectorExpiration } func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { - sectorsPerPart, err := builtin8.PoStProofWindowPoStPartitionSectors(p) + sectorsPerPart, err := builtin9.PoStProofWindowPoStPartitionSectors(p) if err != nil { return 0, err } @@ -458,25 +477,6 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e return int(uint64(maxSectors) / sectorsPerPart), nil } -func GetDefaultSectorSize() abi.SectorSize { - // supported sector sizes are the same across versions. - szs := make([]abi.SectorSize, 0, len(miner8.PreCommitSealProofTypesV8)) - for spt := range miner8.PreCommitSealProofTypesV8 { - ss, err := spt.SectorSize() - if err != nil { - panic(err) - } - - szs = append(szs, ss) - } - - sort.Slice(szs, func(i, j int) bool { - return szs[i] < szs[j] - }) - - return szs[0] -} - func GetDefaultAggregationProof() abi.RegisteredAggregationProof { return abi.RegisteredAggregationProof_SnarkPackV1 } @@ -486,173 +486,188 @@ func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime } - return builtin8.SealProofPoliciesV11[proof].SectorMaxLifetime + return builtin9.SealProofPoliciesV11[proof].SectorMaxLifetime } func GetAddressedSectorsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { - case actors.Version0: + case actorstypes.Version0: return miner0.AddressedSectorsMax, nil - case actors.Version2: + case actorstypes.Version2: return miner2.AddressedSectorsMax, nil - case actors.Version3: + case actorstypes.Version3: return miner3.AddressedSectorsMax, nil - case actors.Version4: + case actorstypes.Version4: return miner4.AddressedSectorsMax, nil - case actors.Version5: + case actorstypes.Version5: return miner5.AddressedSectorsMax, nil - case actors.Version6: + case actorstypes.Version6: return miner6.AddressedSectorsMax, nil - case actors.Version7: + case actorstypes.Version7: return miner7.AddressedSectorsMax, nil - case actors.Version8: + case actorstypes.Version8: return miner8.AddressedSectorsMax, nil + case actorstypes.Version9: + return miner9.AddressedSectorsMax, nil + default: return 0, xerrors.Errorf("unsupported network version") } } func GetDeclarationsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { - case actors.Version0: + case actorstypes.Version0: // TODO: Should we instead error here since the concept doesn't exist yet? return miner0.AddressedPartitionsMax, nil - case actors.Version2: + case actorstypes.Version2: return miner2.DeclarationsMax, nil - case actors.Version3: + case actorstypes.Version3: return miner3.DeclarationsMax, nil - case actors.Version4: + case actorstypes.Version4: return miner4.DeclarationsMax, nil - case actors.Version5: + case actorstypes.Version5: return miner5.DeclarationsMax, nil - case actors.Version6: + case actorstypes.Version6: return miner6.DeclarationsMax, nil - case actors.Version7: + case actorstypes.Version7: return miner7.DeclarationsMax, nil - case actors.Version8: + case actorstypes.Version8: return miner8.DeclarationsMax, nil + case actorstypes.Version9: + + return miner9.DeclarationsMax, nil + default: return 0, xerrors.Errorf("unsupported network version") } } func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { - case actors.Version0: + case actorstypes.Version0: return big.Zero(), nil - case actors.Version2: + case actorstypes.Version2: return big.Zero(), nil - case actors.Version3: + case actorstypes.Version3: return big.Zero(), nil - case actors.Version4: + case actorstypes.Version4: return big.Zero(), nil - case actors.Version5: + case actorstypes.Version5: return miner5.AggregateNetworkFee(aggregateSize, baseFee), nil - case actors.Version6: + case actorstypes.Version6: return miner6.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version7: + case actorstypes.Version7: return miner7.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version8: + case actorstypes.Version8: return miner8.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + case actorstypes.Version9: + + return miner9.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + default: return big.Zero(), xerrors.Errorf("unsupported network version") } } func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { - case actors.Version0: + case actorstypes.Version0: return big.Zero(), nil - case actors.Version2: + case actorstypes.Version2: return big.Zero(), nil - case actors.Version3: + case actorstypes.Version3: return big.Zero(), nil - case actors.Version4: + case actorstypes.Version4: return big.Zero(), nil - case actors.Version5: + case actorstypes.Version5: return big.Zero(), nil - case actors.Version6: + case actorstypes.Version6: return miner6.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version7: + case actorstypes.Version7: return miner7.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil - case actors.Version8: + case actorstypes.Version8: return miner8.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + case actorstypes.Version9: + + return miner9.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + default: return big.Zero(), xerrors.Errorf("unsupported network version") } diff --git a/chain/actors/policy/policy.go.template b/chain/actors/policy/policy.go.template index 090e91165..f5178500a 100644 --- a/chain/actors/policy/policy.go.template +++ b/chain/actors/policy/policy.go.template @@ -1,14 +1,13 @@ package policy import ( - "sort" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/network" - "github.com/filecoin-project/lotus/chain/actors" {{range .versions}} {{if (ge . 8)}} @@ -50,7 +49,7 @@ func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { miner{{.}}.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) miner{{.}}.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) - {{else}} + {{else if (le . 7)}} miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) {{end}} {{end}} @@ -84,7 +83,7 @@ func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { } miner{{.}}.WindowPoStProofTypes[wpp] = struct{}{} - {{else}} + {{else if (le . 7)}} miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} wpp, err = t.RegisteredWindowPoStProof() if err != nil { @@ -139,10 +138,10 @@ func SetMinVerifiedDealSize(size abi.StoragePower) { {{end}} } -func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { +func GetMaxProveCommitDuration(ver actorstypes.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { switch ver { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (eq . 0)}} return miner{{.}}.MaxSealDuration[t], nil {{else}} @@ -173,13 +172,13 @@ func DealProviderCollateralBounds( rawBytePower, qaPower, baselinePower abi.StoragePower, circulatingFil abi.TokenAmount, nwVer network.Version, ) (min, max abi.TokenAmount, err error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), big.Zero(), err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (eq . 0)}} min, max := market{{.}}.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) return min, max, nil @@ -240,25 +239,6 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e return int(uint64(maxSectors) / sectorsPerPart), nil } -func GetDefaultSectorSize() abi.SectorSize { - // supported sector sizes are the same across versions. - szs := make([]abi.SectorSize, 0, len(miner{{.latestVersion}}.PreCommitSealProofTypesV8)) - for spt := range miner{{.latestVersion}}.PreCommitSealProofTypesV8 { - ss, err := spt.SectorSize() - if err != nil { - panic(err) - } - - szs = append(szs, ss) - } - - sort.Slice(szs, func(i, j int) bool { - return szs[i] < szs[j] - }) - - return szs[0] -} - func GetDefaultAggregationProof() abi.RegisteredAggregationProof { return abi.RegisteredAggregationProof_SnarkPackV1 } @@ -272,13 +252,13 @@ func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) } func GetAddressedSectorsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: return miner{{.}}.AddressedSectorsMax, nil {{end}} default: @@ -287,13 +267,13 @@ func GetAddressedSectorsMax(nwVer network.Version) (int, error) { } func GetDeclarationsMax(nwVer network.Version) (int, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return 0, err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (eq . 0)}} // TODO: Should we instead error here since the concept doesn't exist yet? return miner{{.}}.AddressedPartitionsMax, nil @@ -307,13 +287,13 @@ func GetDeclarationsMax(nwVer network.Version) (int, error) { } func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (ge . 6)}} return miner{{.}}.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil {{else if (eq . 5)}} @@ -328,13 +308,13 @@ func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, ba } func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { - v, err := actors.VersionForNetwork(nwVer) + v, err := actorstypes.VersionForNetwork(nwVer) if err != nil { return big.Zero(), err } switch v { {{range .versions}} - case actors.Version{{.}}: + case actorstypes.Version{{.}}: {{if (ge . 6)}} return miner{{.}}.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil {{else}} diff --git a/chain/actors/version.go b/chain/actors/version.go index 1a17a6972..b9f4c2034 100644 --- a/chain/actors/version.go +++ b/chain/actors/version.go @@ -1,11 +1,5 @@ package actors -import ( - "fmt" - - "github.com/filecoin-project/go-state-types/network" -) - type Version int /* inline-gen template @@ -20,9 +14,9 @@ const ({{range .actorVersions}} /* inline-gen start */ -var LatestVersion = 8 +var LatestVersion = 9 -var Versions = []int{0, 2, 3, 4, 5, 6, 7, 8} +var Versions = []int{0, 2, 3, 4, 5, 6, 7, 8, 9} const ( Version0 Version = 0 @@ -33,30 +27,7 @@ const ( Version6 Version = 6 Version7 Version = 7 Version8 Version = 8 + Version9 Version = 9 ) /* inline-gen end */ - -// Converts a network version into an actors adt version. -func VersionForNetwork(version network.Version) (Version, error) { - switch version { - case network.Version0, network.Version1, network.Version2, network.Version3: - return Version0, nil - case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8, network.Version9: - return Version2, nil - case network.Version10, network.Version11: - return Version3, nil - case network.Version12: - return Version4, nil - case network.Version13: - return Version5, nil - case network.Version14: - return Version6, nil - case network.Version15: - return Version7, nil - case network.Version16: - return Version8, nil - default: - return -1, fmt.Errorf("unsupported network version %d", version) - } -} diff --git a/chain/consensus/filcns/compute_state.go b/chain/consensus/filcns/compute_state.go index e735f362e..9837e265f 100644 --- a/chain/consensus/filcns/compute_state.go +++ b/chain/consensus/filcns/compute_state.go @@ -4,20 +4,6 @@ import ( "context" "sync/atomic" - /* inline-gen template - {{range .actorVersions}} - exported{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/exported"{{end}} - /* inline-gen start */ - exported0 "github.com/filecoin-project/specs-actors/actors/builtin/exported" - exported2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/exported" - exported3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/exported" - exported4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/exported" - exported5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/exported" - exported6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/exported" - exported7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/exported" - exported8 "github.com/filecoin-project/specs-actors/v8/actors/builtin/exported" - - /* inline-gen end */ "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" "go.opencensus.io/stats" @@ -25,8 +11,16 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" + exported0 "github.com/filecoin-project/specs-actors/actors/builtin/exported" blockadt "github.com/filecoin-project/specs-actors/actors/util/adt" + exported2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/exported" + exported3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/exported" + exported4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/exported" + exported5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/exported" + exported6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/exported" + exported7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/exported" "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/build" @@ -45,23 +39,15 @@ import ( func NewActorRegistry() *vm.ActorRegistry { inv := vm.NewActorRegistry() - /* inline-gen template - {{range .actorVersions}} - inv.Register(actors.Version{{.}}, vm.ActorsVersionPredicate(actors.Version{{.}}), exported{{.}}.BuiltinActors()...){{end}} - - - /* inline-gen start */ - - inv.Register(actors.Version0, vm.ActorsVersionPredicate(actors.Version0), exported0.BuiltinActors()...) - inv.Register(actors.Version2, vm.ActorsVersionPredicate(actors.Version2), exported2.BuiltinActors()...) - inv.Register(actors.Version3, vm.ActorsVersionPredicate(actors.Version3), exported3.BuiltinActors()...) - inv.Register(actors.Version4, vm.ActorsVersionPredicate(actors.Version4), exported4.BuiltinActors()...) - inv.Register(actors.Version5, vm.ActorsVersionPredicate(actors.Version5), exported5.BuiltinActors()...) - inv.Register(actors.Version6, vm.ActorsVersionPredicate(actors.Version6), exported6.BuiltinActors()...) - inv.Register(actors.Version7, vm.ActorsVersionPredicate(actors.Version7), exported7.BuiltinActors()...) - inv.Register(actors.Version8, vm.ActorsVersionPredicate(actors.Version8), exported8.BuiltinActors()...) - - /* inline-gen end */ + inv.Register(actorstypes.Version0, vm.ActorsVersionPredicate(actorstypes.Version0), exported0.BuiltinActors()...) + inv.Register(actorstypes.Version2, vm.ActorsVersionPredicate(actorstypes.Version2), exported2.BuiltinActors()...) + inv.Register(actorstypes.Version3, vm.ActorsVersionPredicate(actorstypes.Version3), exported3.BuiltinActors()...) + inv.Register(actorstypes.Version4, vm.ActorsVersionPredicate(actorstypes.Version4), exported4.BuiltinActors()...) + inv.Register(actorstypes.Version5, vm.ActorsVersionPredicate(actorstypes.Version5), exported5.BuiltinActors()...) + inv.Register(actorstypes.Version6, vm.ActorsVersionPredicate(actorstypes.Version6), exported6.BuiltinActors()...) + inv.Register(actorstypes.Version7, vm.ActorsVersionPredicate(actorstypes.Version7), exported7.BuiltinActors()...) + inv.Register(actorstypes.Version8, vm.ActorsVersionPredicate(actorstypes.Version8), builtin.MakeRegistry(actorstypes.Version8)...) + inv.Register(actorstypes.Version9, vm.ActorsVersionPredicate(actorstypes.Version9), builtin.MakeRegistry(actorstypes.Version9)...) return inv } diff --git a/chain/consensus/filcns/upgrades.go b/chain/consensus/filcns/upgrades.go index d5e6b45fd..10dc9a126 100644 --- a/chain/consensus/filcns/upgrades.go +++ b/chain/consensus/filcns/upgrades.go @@ -14,7 +14,9 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" + nv17 "github.com/filecoin-project/go-state-types/builtin/v9/migration" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/go-state-types/rt" @@ -189,6 +191,17 @@ func DefaultUpgradeSchedule() stmgr.UpgradeSchedule { StopWithin: 5, }}, Expensive: true, + }, { + Height: build.UpgradeV17Height, + Network: network.Version17, + Migration: UpgradeActorsV9, + PreMigrations: []stmgr.PreMigration{{ + PreMigration: PreUpgradeActorsV9, + StartWithin: 180, + DontStartWithin: 60, + StopWithin: 5, + }}, + Expensive: true, }, } @@ -1377,7 +1390,7 @@ func upgradeActorsV8Common( store := store.ActorStore(ctx, buf) // ensure that the manifest is loaded in the blockstore - if err := bundle.LoadBundles(ctx, buf, actors.Version8); err != nil { + if err := bundle.LoadBundles(ctx, buf, actorstypes.Version8); err != nil { return cid.Undef, xerrors.Errorf("failed to load manifest bundle: %w", err) } @@ -1394,7 +1407,7 @@ func upgradeActorsV8Common( ) } - manifest, ok := actors.GetManifest(actors.Version8) + manifest, ok := actors.GetManifest(actorstypes.Version8) if !ok { return cid.Undef, xerrors.Errorf("no manifest CID for v8 upgrade") } @@ -1429,6 +1442,115 @@ func upgradeActorsV8Common( return newRoot, nil } +func UpgradeActorsV9(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 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + config := nv17.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + + newRoot, err := upgradeActorsV9Common(ctx, sm, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v8 state: %w", err) + } + + fmt.Print(fvmLiftoffBanner) + + return newRoot, nil +} + +func PreUpgradeActorsV9(ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache, root cid.Cid, + epoch abi.ChainEpoch, ts *types.TipSet) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + + lbts, lbRoot, err := stmgr.GetLookbackTipSetForRound(ctx, sm, ts, epoch) + if err != nil { + return xerrors.Errorf("error getting lookback ts for premigration: %w", err) + } + + config := nv17.Config{MaxWorkers: uint(workerCount), + ProgressLogPeriod: time.Minute * 5} + + _, err = upgradeActorsV9Common(ctx, sm, cache, lbRoot, epoch, lbts, config) + return err +} + +func upgradeActorsV9Common( + ctx context.Context, sm *stmgr.StateManager, cache stmgr.MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet, + config nv17.Config, +) (cid.Cid, error) { + buf := blockstore.NewTieredBstore(sm.ChainStore().StateBlockstore(), blockstore.NewMemorySync()) + store := store.ActorStore(ctx, buf) + + // ensure that the manifest is loaded in the blockstore + if err := bundle.LoadBundles(ctx, buf, actorstypes.Version9); err != nil { + return cid.Undef, xerrors.Errorf("failed to load manifest bundle: %w", err) + } + + // Load the state root. + var stateRoot types.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %w", err) + } + + if stateRoot.Version != types.StateTreeVersion4 { + return cid.Undef, xerrors.Errorf( + "expected state root version 4 for actors v9 upgrade, got %d", + stateRoot.Version, + ) + } + + manifest, ok := actors.GetManifest(actorstypes.Version9) + if !ok { + return cid.Undef, xerrors.Errorf("no manifest CID for v9 upgrade") + } + + // Perform the migration + newHamtRoot, err := nv17.MigrateStateTree(ctx, store, manifest, stateRoot.Actors, epoch, config, + migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v9: %w", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &types.StateRoot{ + Version: types.StateTreeVersion4, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %w", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := vm.Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %w", err) + } + } + + return newRoot, nil +} + // Example upgrade function if upgrade requires only code changes //func UpgradeActorsV9(ctx context.Context, sm *stmgr.StateManager, _ stmgr.MigrationCache, _ stmgr.ExecMonitor, root cid.Cid, _ abi.ChainEpoch, _ *types.TipSet) (cid.Cid, error) { // buf := blockstore.NewTieredBstore(sm.ChainStore().StateBlockstore(), blockstore.NewMemorySync()) @@ -1453,7 +1575,7 @@ func upgradeActorsV8Common( // return LiteMigration(ctx, bstore, newActorsManifestCid, root, av, types.StateTreeVersion4, newStateTreeVersion) //} -func LiteMigration(ctx context.Context, bstore blockstore.Blockstore, newActorsManifestCid cid.Cid, root cid.Cid, av actors.Version, oldStateTreeVersion types.StateTreeVersion, newStateTreeVersion types.StateTreeVersion) (cid.Cid, error) { +func LiteMigration(ctx context.Context, bstore blockstore.Blockstore, newActorsManifestCid cid.Cid, root cid.Cid, av actorstypes.Version, oldStateTreeVersion types.StateTreeVersion, newStateTreeVersion types.StateTreeVersion) (cid.Cid, error) { buf := blockstore.NewTieredBstore(bstore, blockstore.NewMemorySync()) store := store.ActorStore(ctx, buf) adtStore := gstStore.WrapStore(ctx, store) diff --git a/chain/gen/genesis/f00_system.go b/chain/gen/genesis/f00_system.go index 1cd50f5e1..93849bcc9 100644 --- a/chain/gen/genesis/f00_system.go +++ b/chain/gen/genesis/f00_system.go @@ -7,8 +7,8 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - systemtypes "github.com/filecoin-project/go-state-types/builtin/v8/system" "github.com/filecoin-project/go-state-types/manifest" bstore "github.com/filecoin-project/lotus/blockstore" @@ -18,7 +18,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) // TODO pass in built-in actors cid for V8 and later @@ -27,7 +27,7 @@ func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actors.Versi return nil, err } - if av >= actors.Version8 { + if av >= actorstypes.Version8 { mfCid, ok := actors.GetManifest(av) if !ok { return nil, xerrors.Errorf("missing manifest for actors version %d", av) @@ -38,8 +38,9 @@ func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actors.Versi return nil, xerrors.Errorf("loading manifest for actors version %d: %w", av, err) } - st8 := st.GetState().(*systemtypes.State) - st8.BuiltinActors = mf.Data + if err := st.SetBuiltinActors(mf.Data); err != nil { + return nil, xerrors.Errorf("failed to set manifest data: %w", err) + } } statecid, err := cst.Put(ctx, st.GetState()) diff --git a/chain/gen/genesis/f01_init.go b/chain/gen/genesis/f01_init.go index ddb448de9..26062cf27 100644 --- a/chain/gen/genesis/f01_init.go +++ b/chain/gen/genesis/f01_init.go @@ -11,6 +11,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -21,7 +22,7 @@ import ( "github.com/filecoin-project/lotus/genesis" ) -func SetupInitActor(ctx context.Context, bs bstore.Blockstore, netname string, initialActors []genesis.Actor, rootVerifier genesis.Actor, remainder genesis.Actor, av actors.Version) (int64, *types.Actor, map[address.Address]address.Address, error) { +func SetupInitActor(ctx context.Context, bs bstore.Blockstore, netname string, initialActors []genesis.Actor, rootVerifier genesis.Actor, remainder genesis.Actor, av actorstypes.Version) (int64, *types.Actor, map[address.Address]address.Address, error) { if len(initialActors) > MaxAccounts { return 0, nil, nil, xerrors.New("too many initial actors") } diff --git a/chain/gen/genesis/f02_reward.go b/chain/gen/genesis/f02_reward.go index 0d0c1db0f..4a5ac9fa1 100644 --- a/chain/gen/genesis/f02_reward.go +++ b/chain/gen/genesis/f02_reward.go @@ -6,6 +6,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" bstore "github.com/filecoin-project/lotus/blockstore" @@ -16,7 +17,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -func SetupRewardActor(ctx context.Context, bs bstore.Blockstore, qaPower big.Int, av actors.Version) (*types.Actor, error) { +func SetupRewardActor(ctx context.Context, bs bstore.Blockstore, qaPower big.Int, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) rst, err := reward.MakeState(adt.WrapStore(ctx, cst), av, qaPower) if err != nil { diff --git a/chain/gen/genesis/f03_cron.go b/chain/gen/genesis/f03_cron.go index c9fe7c118..16396c437 100644 --- a/chain/gen/genesis/f03_cron.go +++ b/chain/gen/genesis/f03_cron.go @@ -6,6 +6,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" bstore "github.com/filecoin-project/lotus/blockstore" @@ -15,7 +16,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -func SetupCronActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupCronActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) st, err := cron.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) if err != nil { diff --git a/chain/gen/genesis/f04_power.go b/chain/gen/genesis/f04_power.go index 20232c9b2..f05b0c746 100644 --- a/chain/gen/genesis/f04_power.go +++ b/chain/gen/genesis/f04_power.go @@ -6,6 +6,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -15,7 +16,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -func SetupStoragePowerActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupStoragePowerActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) pst, err := power.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) diff --git a/chain/gen/genesis/f05_market.go b/chain/gen/genesis/f05_market.go index 9109e2784..28a258c40 100644 --- a/chain/gen/genesis/f05_market.go +++ b/chain/gen/genesis/f05_market.go @@ -6,6 +6,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" bstore "github.com/filecoin-project/lotus/blockstore" @@ -15,7 +16,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -func SetupStorageMarketActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupStorageMarketActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) mst, err := market.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) if err != nil { diff --git a/chain/gen/genesis/f06_vreg.go b/chain/gen/genesis/f06_vreg.go index 381a115d4..1b3582d4d 100644 --- a/chain/gen/genesis/f06_vreg.go +++ b/chain/gen/genesis/f06_vreg.go @@ -7,6 +7,7 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/go-address" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/specs-actors/actors/util/adt" @@ -28,7 +29,7 @@ func init() { RootVerifierID = idk } -func SetupVerifiedRegistryActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { +func SetupVerifiedRegistryActor(ctx context.Context, bs bstore.Blockstore, av actorstypes.Version) (*types.Actor, error) { cst := cbor.NewCborStore(bs) vst, err := verifreg.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av, RootVerifierID) if err != nil { diff --git a/chain/gen/genesis/genesis.go b/chain/gen/genesis/genesis.go index 4eaed56aa..34f12db6d 100644 --- a/chain/gen/genesis/genesis.go +++ b/chain/gen/genesis/genesis.go @@ -14,6 +14,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" @@ -137,7 +138,7 @@ func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template ge return nil, nil, xerrors.Errorf("making new state tree: %w", err) } - av, err := actors.VersionForNetwork(template.NetworkVersion) + av, err := actorstypes.VersionForNetwork(template.NetworkVersion) if err != nil { return nil, nil, xerrors.Errorf("getting network version: %w", err) } @@ -356,7 +357,7 @@ func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template ge return state, keyIDs, nil } -func MakeAccountActor(ctx context.Context, cst cbor.IpldStore, av actors.Version, addr address.Address, bal types.BigInt) (*types.Actor, error) { +func MakeAccountActor(ctx context.Context, cst cbor.IpldStore, av actorstypes.Version, addr address.Address, bal types.BigInt) (*types.Actor, error) { ast, err := account.MakeState(adt.WrapStore(ctx, cst), av, addr) if err != nil { return nil, err @@ -381,7 +382,7 @@ func MakeAccountActor(ctx context.Context, cst cbor.IpldStore, av actors.Version return act, nil } -func CreateAccountActor(ctx context.Context, cst cbor.IpldStore, state *state.StateTree, info genesis.Actor, keyIDs map[address.Address]address.Address, av actors.Version) error { +func CreateAccountActor(ctx context.Context, cst cbor.IpldStore, state *state.StateTree, info genesis.Actor, keyIDs map[address.Address]address.Address, av actorstypes.Version) error { var ainfo genesis.AccountMeta if err := json.Unmarshal(info.Meta, &ainfo); err != nil { return xerrors.Errorf("unmarshaling account meta: %w", err) @@ -404,7 +405,7 @@ func CreateAccountActor(ctx context.Context, cst cbor.IpldStore, state *state.St return nil } -func CreateMultisigAccount(ctx context.Context, cst cbor.IpldStore, state *state.StateTree, ida address.Address, info genesis.Actor, keyIDs map[address.Address]address.Address, av actors.Version) error { +func CreateMultisigAccount(ctx context.Context, cst cbor.IpldStore, state *state.StateTree, ida address.Address, info genesis.Actor, keyIDs map[address.Address]address.Address, av actorstypes.Version) error { if info.Type != genesis.TMultisig { return fmt.Errorf("can only call CreateMultisigAccount with multisig Actor info") } diff --git a/chain/gen/genesis/miners.go b/chain/gen/genesis/miners.go index a4f43e7fa..385e89c00 100644 --- a/chain/gen/genesis/miners.go +++ b/chain/gen/genesis/miners.go @@ -14,27 +14,25 @@ import ( "github.com/filecoin-project/go-address" cborutil "github.com/filecoin-project/go-cbor-util" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" builtintypes "github.com/filecoin-project/go-state-types/builtin" markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + miner9 "github.com/filecoin-project/go-state-types/builtin/v9/miner" + smoothing9 "github.com/filecoin-project/go-state-types/builtin/v9/util/smoothing" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" - market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" - smoothing0 "github.com/filecoin-project/specs-actors/actors/util/smoothing" - market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" reward2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/reward" - market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" power4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/power" reward4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/reward" builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" runtime7 "github.com/filecoin-project/specs-actors/v7/actors/runtime" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/market" @@ -81,7 +79,7 @@ func mkFakedSigSyscalls(base vm.SyscallBuilder) vm.SyscallBuilder { func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.SyscallBuilder, sroot cid.Cid, miners []genesis.Miner, nv network.Version) (cid.Cid, error) { cst := cbor.NewCborStore(cs.StateBlockstore()) - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return cid.Undef, xerrors.Errorf("failed to get network version: %w", err) } @@ -120,10 +118,12 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal presealExp abi.ChainEpoch - dealIDs []abi.DealID + dealIDs []abi.DealID + sectorWeight []abi.StoragePower }, len(miners)) maxPeriods := policy.GetMaxSectorExpirationExtension() / minertypes.WPoStProvingPeriod + rawPow, qaPow := big.NewInt(0), big.NewInt(0) for i, m := range miners { // Create miner through power actor i := i @@ -197,7 +197,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal } } - // Publish preseal deals + // Publish preseal deals, and calculate the QAPower { publish := func(params *markettypes.PublishStorageDealsParams) error { @@ -227,6 +227,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal params := &markettypes.PublishStorageDealsParams{} for _, preseal := range m.Sectors { + fmt.Println("presealing ", preseal.SectorID) preseal.Deal.VerifiedDeal = true preseal.Deal.EndEpoch = minerInfos[i].presealExp p := markettypes.ClientDealProposal{ @@ -234,7 +235,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal ClientSignature: crypto.Signature{Type: crypto.SigTypeBLS}, } - if av >= actors.Version8 { + if av >= actorstypes.Version8 { buf, err := cborutil.Dump(&preseal.Deal) if err != nil { return cid.Undef, fmt.Errorf("failed to marshal proposal: %w", err) @@ -257,6 +258,11 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal params = &markettypes.PublishStorageDealsParams{} } + + rawPow = big.Add(rawPow, big.NewInt(int64(m.SectorSize))) + sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, big.Zero(), markettypes.DealWeight(&preseal.Deal)) + minerInfos[i].sectorWeight = append(minerInfos[i].sectorWeight, sectorWeight) + qaPow = big.Add(qaPow, sectorWeight) } if len(params.Deals) > 0 { @@ -267,24 +273,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal } } - // adjust total network power for equal pledge per sector - rawPow, qaPow := big.NewInt(0), big.NewInt(0) { - for i, m := range miners { - for pi := range m.Sectors { - rawPow = types.BigAdd(rawPow, types.NewInt(uint64(m.SectorSize))) - - dweight, vdweight, err := dealWeight(ctx, genesisVm, minerInfos[i].maddr, []abi.DealID{minerInfos[i].dealIDs[pi]}, 0, minerInfos[i].presealExp, av) - if err != nil { - return cid.Undef, xerrors.Errorf("getting deal weight: %w", err) - } - - sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight, vdweight) - - qaPow = types.BigAdd(qaPow, sectorWeight) - } - } - nh, err := genesisVm.Flush(ctx) if err != nil { return cid.Undef, xerrors.Errorf("flushing vm: %w", err) @@ -369,12 +358,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally! } - dweight, vdweight, err := dealWeight(ctx, genesisVm, minerInfos[i].maddr, params.DealIDs, 0, minerInfos[i].presealExp, av) - if err != nil { - return cid.Undef, xerrors.Errorf("getting deal weight: %w", err) - } - - sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight, vdweight) + sectorWeight := minerInfos[i].sectorWeight[pi] // we've added fake power for this sector above, remove it now @@ -442,14 +426,13 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal return cid.Undef, xerrors.Errorf("getting current total power: %w", err) } - pcd := miner0.PreCommitDepositForPower((*smoothing0.FilterEstimate)(&rewardSmoothed), tpow.QualityAdjPowerSmoothed, sectorWeight) + pcd := miner9.PreCommitDepositForPower(smoothing9.FilterEstimate(rewardSmoothed), smoothing9.FilterEstimate(*tpow.QualityAdjPowerSmoothed), miner9.QAPowerMax(m.SectorSize)) - pledge := miner0.InitialPledgeForPower( + pledge := miner9.InitialPledgeForPower( sectorWeight, baselinePower, - tpow.PledgeCollateral, - (*smoothing0.FilterEstimate)(&rewardSmoothed), - tpow.QualityAdjPowerSmoothed, + smoothing9.FilterEstimate(rewardSmoothed), + smoothing9.FilterEstimate(*tpow.QualityAdjPowerSmoothed), big.Zero(), ) @@ -464,7 +447,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal // Commit one-by-one, otherwise pledge math tends to explode var paramBytes []byte - if av >= actors.Version6 { + if av >= actorstypes.Version6 { // TODO: fixup confirmParams := &builtin6.ConfirmSectorProofsParams{ Sectors: []abi.SectorNumber{preseal.SectorID}, @@ -484,7 +467,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sys vm.Syscal return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err) } - if av >= actors.Version2 { + if av >= actorstypes.Version2 { // post v0, we need to explicitly Claim this power since ConfirmSectorProofsValid doesn't do it anymore claimParams := &power4.UpdateClaimedPowerParams{ RawByteDelta: types.NewInt(uint64(m.SectorSize)), @@ -617,67 +600,7 @@ func currentTotalPower(ctx context.Context, vm vm.Interface, maddr address.Addre return &pwr, nil } -func dealWeight(ctx context.Context, vm vm.Interface, maddr address.Address, dealIDs []abi.DealID, sectorStart, sectorExpiry abi.ChainEpoch, av actors.Version) (abi.DealWeight, abi.DealWeight, error) { - // TODO: This hack should move to market actor wrapper - if av <= actors.Version2 { - params := &market0.VerifyDealsForActivationParams{ - DealIDs: dealIDs, - SectorStart: sectorStart, - SectorExpiry: sectorExpiry, - } - - ret, err := doExecValue(ctx, vm, - market.Address, - maddr, - abi.NewTokenAmount(0), - builtin0.MethodsMarket.VerifyDealsForActivation, - mustEnc(params), - ) - if err != nil { - return big.Zero(), big.Zero(), err - } - var weight, verifiedWeight abi.DealWeight - if av < actors.Version2 { - var dealWeights market0.VerifyDealsForActivationReturn - err = dealWeights.UnmarshalCBOR(bytes.NewReader(ret)) - weight = dealWeights.DealWeight - verifiedWeight = dealWeights.VerifiedDealWeight - } else { - var dealWeights market2.VerifyDealsForActivationReturn - err = dealWeights.UnmarshalCBOR(bytes.NewReader(ret)) - weight = dealWeights.DealWeight - verifiedWeight = dealWeights.VerifiedDealWeight - } - if err != nil { - return big.Zero(), big.Zero(), err - } - - return weight, verifiedWeight, nil - } - params := &market4.VerifyDealsForActivationParams{Sectors: []market4.SectorDeals{{ - SectorExpiry: sectorExpiry, - DealIDs: dealIDs, - }}} - - var dealWeights market4.VerifyDealsForActivationReturn - ret, err := doExecValue(ctx, vm, - market.Address, - maddr, - abi.NewTokenAmount(0), - market.Methods.VerifyDealsForActivation, - mustEnc(params), - ) - if err != nil { - return big.Zero(), big.Zero(), err - } - if err := dealWeights.UnmarshalCBOR(bytes.NewReader(ret)); err != nil { - return big.Zero(), big.Zero(), err - } - - return dealWeights.Sectors[0].DealWeight, dealWeights.Sectors[0].VerifiedDealWeight, nil -} - -func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address.Address, av actors.Version) (abi.StoragePower, builtin.FilterEstimate, error) { +func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address.Address, av actorstypes.Version) (abi.StoragePower, builtin.FilterEstimate, error) { rwret, err := doExecValue(ctx, vm, reward.Address, maddr, big.Zero(), reward.Methods.ThisEpochReward, nil) if err != nil { return big.Zero(), builtin.FilterEstimate{}, err @@ -685,7 +608,7 @@ func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address // TODO: This hack should move to reward actor wrapper switch av { - case actors.Version0: + case actorstypes.Version0: var epochReward reward0.ThisEpochRewardReturn if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil { @@ -693,7 +616,7 @@ func currentEpochBlockReward(ctx context.Context, vm vm.Interface, maddr address } return epochReward.ThisEpochBaselinePower, builtin.FilterEstimate(*epochReward.ThisEpochRewardSmoothed), nil - case actors.Version2: + case actorstypes.Version2: var epochReward reward2.ThisEpochRewardReturn if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil { diff --git a/chain/state/statetree.go b/chain/state/statetree.go index 970ac3c72..ff921a04d 100644 --- a/chain/state/statetree.go +++ b/chain/state/statetree.go @@ -158,7 +158,7 @@ func VersionForNetwork(ver network.Version) (types.StateTreeVersion, error) { /* inline-gen start */ - case network.Version13, network.Version14, network.Version15, network.Version16: + case network.Version13, network.Version14, network.Version15, network.Version16, network.Version17: /* inline-gen end */ return types.StateTreeVersion4, nil diff --git a/chain/stmgr/actors.go b/chain/stmgr/actors.go index 3ef5a3af9..fa51306a6 100644 --- a/chain/stmgr/actors.go +++ b/chain/stmgr/actors.go @@ -12,7 +12,6 @@ import ( "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - miner_types "github.com/filecoin-project/go-state-types/builtin/v8/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" @@ -89,7 +88,7 @@ func GetPowerRaw(ctx context.Context, sm *StateManager, st cid.Cid, maddr addres return mpow, tpow, minpow, nil } -func PreCommitInfo(ctx context.Context, sm *StateManager, maddr address.Address, sid abi.SectorNumber, ts *types.TipSet) (*miner_types.SectorPreCommitOnChainInfo, error) { +func PreCommitInfo(ctx context.Context, sm *StateManager, maddr address.Address, sid abi.SectorNumber, ts *types.TipSet) (*miner.SectorPreCommitOnChainInfo, error) { act, err := sm.LoadActor(ctx, maddr, ts) if err != nil { return nil, xerrors.Errorf("(get sset) failed to load miner actor: %w", err) diff --git a/chain/stmgr/forks_test.go b/chain/stmgr/forks_test.go index 7eb63566c..d46d0befe 100644 --- a/chain/stmgr/forks_test.go +++ b/chain/stmgr/forks_test.go @@ -17,6 +17,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/network" builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" @@ -167,7 +168,7 @@ func TestForkHeightTriggers(t *testing.T) { } inv := filcns.NewActorRegistry() - inv.Register(actors.Version0, nil, testActor{}) + inv.Register(actorstypes.Version0, nil, testActor{}) sm.SetVMConstructor(func(ctx context.Context, vmopt *vm.VMOpts) (vm.Interface, error) { nvm, err := vm.NewLegacyVM(ctx, vmopt) @@ -284,7 +285,7 @@ func testForkRefuseCall(t *testing.T, nullsBefore, nullsAfter int) { } inv := filcns.NewActorRegistry() - inv.Register(actors.Version0, nil, testActor{}) + inv.Register(actorstypes.Version0, nil, testActor{}) sm.SetVMConstructor(func(ctx context.Context, vmopt *vm.VMOpts) (vm.Interface, error) { nvm, err := vm.NewLegacyVM(ctx, vmopt) @@ -505,7 +506,7 @@ func TestForkPreMigration(t *testing.T) { }() inv := filcns.NewActorRegistry() - inv.Register(actors.Version0, nil, testActor{}) + inv.Register(actorstypes.Version0, nil, testActor{}) sm.SetVMConstructor(func(ctx context.Context, vmopt *vm.VMOpts) (vm.Interface, error) { nvm, err := vm.NewLegacyVM(ctx, vmopt) diff --git a/chain/stmgr/utils.go b/chain/stmgr/utils.go index 9e7a08ba7..03ade3bd2 100644 --- a/chain/stmgr/utils.go +++ b/chain/stmgr/utils.go @@ -30,13 +30,15 @@ import ( func GetReturnType(ctx context.Context, sm *StateManager, to address.Address, method abi.MethodNum, ts *types.TipSet) (cbg.CBORUnmarshaler, error) { act, err := sm.LoadActor(ctx, to, ts) if err != nil { - return nil, xerrors.Errorf("(get sset) failed to load miner actor: %w", err) + return nil, xerrors.Errorf("(get sset) failed to load actor: %w", err) } m, found := sm.tsExec.NewActorRegistry().Methods[act.Code][method] if !found { return nil, fmt.Errorf("unknown method %d for actor %s", method, act.Code) } + + fmt.Println("found ", m.Ret, " and ", m.Params, " for ", m.Num) return reflect.New(m.Ret.Elem()).Interface().(cbg.CBORUnmarshaler), nil } diff --git a/chain/sync_test.go b/chain/sync_test.go index b1be0b590..18520a07f 100644 --- a/chain/sync_test.go +++ b/chain/sync_test.go @@ -147,6 +147,10 @@ func prepSyncTestWithV5Height(t testing.TB, h int, v5height abi.ChainEpoch) *syn Network: network.Version16, Height: v5height + 20, Migration: filcns.UpgradeActorsV8, + }, { + Network: network.Version17, + Height: v5height + 25, + Migration: filcns.UpgradeActorsV9, }} g, err := gen.NewGeneratorWithUpgradeSchedule(sched) diff --git a/chain/vm/cbor_gen.go b/chain/vm/cbor_gen.go index 64b623f63..c2bb4fa79 100644 --- a/chain/vm/cbor_gen.go +++ b/chain/vm/cbor_gen.go @@ -20,7 +20,7 @@ var _ = cid.Undef var _ = math.E var _ = sort.Sort -var lengthBufFvmExecutionTrace = []byte{132} +var lengthBufFvmExecutionTrace = []byte{133} func (t *FvmExecutionTrace) MarshalCBOR(w io.Writer) error { if t == nil { @@ -56,6 +56,20 @@ func (t *FvmExecutionTrace) MarshalCBOR(w io.Writer) error { return err } + // t.GasCharges ([]vm.FvmGasCharge) (slice) + if len(t.GasCharges) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.GasCharges was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.GasCharges))); err != nil { + return err + } + for _, v := range t.GasCharges { + if err := v.MarshalCBOR(cw); err != nil { + return err + } + } + // t.Subcalls ([]vm.FvmExecutionTrace) (slice) if len(t.Subcalls) > cbg.MaxLength { return xerrors.Errorf("Slice value in field t.Subcalls was too long") @@ -91,7 +105,7 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return fmt.Errorf("cbor input should be of type array") } - if extra != 4 { + if extra != 5 { return fmt.Errorf("cbor input had wrong number of fields") } @@ -143,6 +157,35 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { t.Error = string(sval) } + // t.GasCharges ([]vm.FvmGasCharge) (slice) + + maj, extra, err = cr.ReadHeader() + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.GasCharges: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.GasCharges = make([]FvmGasCharge, extra) + } + + for i := 0; i < int(extra); i++ { + + var v FvmGasCharge + if err := v.UnmarshalCBOR(cr); err != nil { + return err + } + + t.GasCharges[i] = v + } + // t.Subcalls ([]vm.FvmExecutionTrace) (slice) maj, extra, err = cr.ReadHeader() @@ -174,3 +217,175 @@ func (t *FvmExecutionTrace) UnmarshalCBOR(r io.Reader) (err error) { return nil } + +var lengthBufFvmGasCharge = []byte{132} + +func (t *FvmGasCharge) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + + cw := cbg.NewCborWriter(w) + + if _, err := cw.Write(lengthBufFvmGasCharge); err != nil { + return err + } + + // t.Name (string) (string) + if len(t.Name) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.Name was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Name))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Name)); err != nil { + return err + } + + // t.TotalGas (int64) (int64) + if t.TotalGas >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.TotalGas)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.TotalGas-1)); err != nil { + return err + } + } + + // t.ComputeGas (int64) (int64) + if t.ComputeGas >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.ComputeGas)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.ComputeGas-1)); err != nil { + return err + } + } + + // t.StorageGas (int64) (int64) + if t.StorageGas >= 0 { + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.StorageGas)); err != nil { + return err + } + } else { + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.StorageGas-1)); err != nil { + return err + } + } + return nil +} + +func (t *FvmGasCharge) UnmarshalCBOR(r io.Reader) (err error) { + *t = FvmGasCharge{} + + cr := cbg.NewCborReader(r) + + maj, extra, err := cr.ReadHeader() + if err != nil { + return err + } + defer func() { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + }() + + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Name (string) (string) + + { + sval, err := cbg.ReadString(cr) + if err != nil { + return err + } + + t.Name = string(sval) + } + // t.TotalGas (int64) (int64) + { + maj, extra, err := cr.ReadHeader() + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.TotalGas = int64(extraI) + } + // t.ComputeGas (int64) (int64) + { + maj, extra, err := cr.ReadHeader() + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.ComputeGas = int64(extraI) + } + // t.StorageGas (int64) (int64) + { + maj, extra, err := cr.ReadHeader() + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.StorageGas = int64(extraI) + } + return nil +} diff --git a/chain/vm/fvm.go b/chain/vm/fvm.go index 7ae6bf203..10e6724ed 100644 --- a/chain/vm/fvm.go +++ b/chain/vm/fvm.go @@ -21,6 +21,7 @@ import ( ffi_cgo "github.com/filecoin-project/filecoin-ffi/cgo" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/lotus/blockstore" @@ -48,13 +49,20 @@ type FvmExtern struct { base cid.Cid } +type FvmGasCharge struct { + Name string + TotalGas int64 + ComputeGas int64 + StorageGas int64 +} + // This may eventually become identical to ExecutionTrace, but we can make incremental progress towards that type FvmExecutionTrace struct { - Msg *types.Message - MsgRct *types.MessageReceipt - Error string - - Subcalls []FvmExecutionTrace + Msg *types.Message + MsgRct *types.MessageReceipt + Error string + GasCharges []FvmGasCharge `cborgen:"maxlen=1000000000"` + Subcalls []FvmExecutionTrace `cborgen:"maxlen=1000000000"` } func (t *FvmExecutionTrace) ToExecutionTrace() types.ExecutionTrace { @@ -69,6 +77,18 @@ func (t *FvmExecutionTrace) ToExecutionTrace() types.ExecutionTrace { Subcalls: nil, // Should be nil when there are no subcalls for backwards compatibility } + if len(t.GasCharges) > 0 { + ret.GasCharges = make([]*types.GasTrace, len(t.GasCharges)) + for i, v := range t.GasCharges { + ret.GasCharges[i] = &types.GasTrace{ + Name: v.Name, + TotalGas: v.TotalGas, + ComputeGas: v.ComputeGas, + StorageGas: v.StorageGas, + } + } + } + if len(t.Subcalls) > 0 { ret.Subcalls = make([]types.ExecutionTrace, len(t.Subcalls)) @@ -295,7 +315,7 @@ func NewFVM(ctx context.Context, opts *VMOpts) (*FVM, error) { } if os.Getenv("LOTUS_USE_FVM_CUSTOM_BUNDLE") == "1" { - av, err := actors.VersionForNetwork(opts.NetworkVersion) + av, err := actorstypes.VersionForNetwork(opts.NetworkVersion) if err != nil { return nil, xerrors.Errorf("mapping network version to actors version: %w", err) } @@ -311,7 +331,7 @@ func NewFVM(ctx context.Context, opts *VMOpts) (*FVM, error) { fvm, err := ffi.CreateFVM(fvmOpts) if err != nil { - return nil, err + return nil, xerrors.Errorf("failed to create FVM: %w", err) } return &FVM{ @@ -367,7 +387,7 @@ func NewDebugFVM(ctx context.Context, opts *VMOpts) (*FVM, error) { // create actor redirect mapping actorRedirect := make(map[cid.Cid]cid.Cid) for _, key := range actors.GetBuiltinActorsKeys() { - from, ok := actors.GetActorCodeID(actors.Version8, key) + from, ok := actors.GetActorCodeID(actorstypes.Version8, key) if !ok { log.Warnf("actor missing in the from manifest %s", key) continue @@ -393,13 +413,13 @@ func NewDebugFVM(ctx context.Context, opts *VMOpts) (*FVM, error) { return nil } - av, err := actors.VersionForNetwork(opts.NetworkVersion) + av, err := actorstypes.VersionForNetwork(opts.NetworkVersion) if err != nil { return nil, xerrors.Errorf("error determining actors version for network version %d: %w", opts.NetworkVersion, err) } switch av { - case actors.Version8: + case actorstypes.Version8: if debugBundleV8path != "" { if err := createMapping(debugBundleV8path); err != nil { log.Errorf("failed to create v8 debug mapping") diff --git a/chain/vm/invoker.go b/chain/vm/invoker.go index ad04639e5..8d9caad3e 100644 --- a/chain/vm/invoker.go +++ b/chain/vm/invoker.go @@ -5,14 +5,14 @@ import ( "encoding/hex" "fmt" "reflect" - "runtime" - "strings" + "strconv" "github.com/ipfs/go-cid" cbg "github.com/whyrusleeping/cbor-gen" "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" rtt "github.com/filecoin-project/go-state-types/rt" @@ -25,7 +25,7 @@ import ( ) type MethodMeta struct { - Name string + Num string Params reflect.Type Ret reflect.Type @@ -40,9 +40,9 @@ type ActorRegistry struct { // An ActorPredicate returns an error if the given actor is not valid for the given runtime environment (e.g., chain height, version, etc.). type ActorPredicate func(vmr.Runtime, rtt.VMActor) error -func ActorsVersionPredicate(ver actors.Version) ActorPredicate { +func ActorsVersionPredicate(ver actorstypes.Version) ActorPredicate { return func(rt vmr.Runtime, v rtt.VMActor) error { - aver, err := actors.VersionForNetwork(rt.NetworkVersion()) + aver, err := actorstypes.VersionForNetwork(rt.NetworkVersion()) if err != nil { return xerrors.Errorf("unsupported network version: %w", err) } @@ -86,7 +86,7 @@ func (ar *ActorRegistry) Invoke(codeCid cid.Cid, rt vmr.Runtime, method abi.Meth } -func (ar *ActorRegistry) Register(av actors.Version, pred ActorPredicate, vmactors ...rtt.VMActor) { +func (ar *ActorRegistry) Register(av actorstypes.Version, pred ActorPredicate, vmactors ...rtt.VMActor) { if pred == nil { pred = func(vmr.Runtime, rtt.VMActor) error { return nil } } @@ -108,7 +108,7 @@ func (ar *ActorRegistry) Register(av actors.Version, pred ActorPredicate, vmacto // necessary to make stuff work var realCode cid.Cid - if av >= actors.Version8 { + if av >= actorstypes.Version8 { name := actors.CanonicalName(builtin.ActorNameByCode(ac)) var ok bool @@ -124,7 +124,7 @@ func (ar *ActorRegistry) Register(av actors.Version, pred ActorPredicate, vmacto // Explicitly add send, it's special. methods[builtin.MethodSend] = MethodMeta{ - Name: "Send", + Num: "0", Params: reflect.TypeOf(new(abi.EmptyValue)), Ret: reflect.TypeOf(new(abi.EmptyValue)), } @@ -139,24 +139,8 @@ func (ar *ActorRegistry) Register(av actors.Version, pred ActorPredicate, vmacto ev := reflect.ValueOf(export) et := ev.Type() - // Extract the method names using reflection. These - // method names always match the field names in the - // `builtin.Method*` structs (tested in the specs-actors - // tests). - fnName := runtime.FuncForPC(ev.Pointer()).Name() - fnName = strings.TrimSuffix(fnName[strings.LastIndexByte(fnName, '.')+1:], "-fm") - - switch abi.MethodNum(number) { - case builtin.MethodSend: - panic("method 0 is reserved for Send") - case builtin.MethodConstructor: - if fnName != "Constructor" { - panic("method 1 is reserved for Constructor") - } - } - methods[abi.MethodNum(number)] = MethodMeta{ - Name: fnName, + Num: strconv.Itoa(number), Params: et.In(1), Ret: et.Out(0), } diff --git a/chain/vm/mkactor.go b/chain/vm/mkactor.go index 7e27ee811..3a0ee6699 100644 --- a/chain/vm/mkactor.go +++ b/chain/vm/mkactor.go @@ -7,6 +7,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "github.com/filecoin-project/go-address" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" @@ -53,7 +54,7 @@ func TryCreateAccountActor(rt *Runtime, addr address.Address) (*types.Actor, add return nil, address.Undef, aerrors.Escalate(err, "registering actor address") } - av, err := actors.VersionForNetwork(rt.NetworkVersion()) + av, err := actorstypes.VersionForNetwork(rt.NetworkVersion()) if err != nil { return nil, address.Undef, aerrors.Escalate(err, "unsupported network version") } @@ -85,7 +86,7 @@ func TryCreateAccountActor(rt *Runtime, addr address.Address) (*types.Actor, add return act, addrID, nil } -func makeAccountActor(ver actors.Version, addr address.Address) (*types.Actor, aerrors.ActorError) { +func makeAccountActor(ver actorstypes.Version, addr address.Address) (*types.Actor, aerrors.ActorError) { switch addr.Protocol() { case address.BLS, address.SECP256K1: return newAccountActor(ver), nil @@ -98,23 +99,23 @@ func makeAccountActor(ver actors.Version, addr address.Address) (*types.Actor, a } } -func newAccountActor(ver actors.Version) *types.Actor { +func newAccountActor(ver actorstypes.Version) *types.Actor { // TODO: ActorsUpgrade use a global actor registry? var code cid.Cid switch ver { - case actors.Version0: + case actorstypes.Version0: code = builtin0.AccountActorCodeID - case actors.Version2: + case actorstypes.Version2: code = builtin2.AccountActorCodeID - case actors.Version3: + case actorstypes.Version3: code = builtin3.AccountActorCodeID - case actors.Version4: + case actorstypes.Version4: code = builtin4.AccountActorCodeID - case actors.Version5: + case actorstypes.Version5: code = builtin5.AccountActorCodeID - case actors.Version6: + case actorstypes.Version6: code = builtin6.AccountActorCodeID - case actors.Version7: + case actorstypes.Version7: code = builtin7.AccountActorCodeID default: panic("unsupported actors version") diff --git a/chain/vm/runtime.go b/chain/vm/runtime.go index ce9349a1d..05f8de2f0 100644 --- a/chain/vm/runtime.go +++ b/chain/vm/runtime.go @@ -16,6 +16,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/exitcode" @@ -373,7 +374,7 @@ func (rt *Runtime) ValidateImmediateCallerType(ts ...cid.Cid) { // this really only for genesis in tests; nv16 will be running on FVM anyway. if nv := rt.NetworkVersion(); nv >= network.Version16 { - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { panic(aerrors.Fatalf("failed to get actors version for network version %d", nv)) } diff --git a/cli/chain.go b/cli/chain.go index 48fbb849d..39f1608f5 100644 --- a/cli/chain.go +++ b/cli/chain.go @@ -494,8 +494,8 @@ var ChainInspectUsage = &cli.Command{ mm := filcns.NewActorRegistry().Methods[code][m.Message.Method] // TODO: use remote map - byMethod[mm.Name] += m.Message.GasLimit - byMethodC[mm.Name]++ + byMethod[mm.Num] += m.Message.GasLimit + byMethodC[mm.Num]++ } type keyGasPair struct { diff --git a/cli/chain_test.go b/cli/chain_test.go index 9fd46724e..80af1a6e7 100644 --- a/cli/chain_test.go +++ b/cli/chain_test.go @@ -327,7 +327,8 @@ func TestInspectUsage(t *testing.T) { // check for gas by sender assert.Contains(t, out, "By Sender") // check for gas by method - assert.Contains(t, out, "By Method:\nSend") + methodStr := fmt.Sprintf("By Method:\n%d", builtin.MethodSend) + assert.Contains(t, out, methodStr) }) } diff --git a/cli/filplus.go b/cli/filplus.go index 5374a9f40..66de32d0c 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -13,7 +13,9 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - verifregtypes "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" + verifregtypes8 "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" + verifregtypes9 "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" + "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/blockstore" @@ -94,7 +96,7 @@ var filplusVerifyClientCmd = &cli.Command{ } // TODO: This should be abstracted over actor versions - params, err := actors.SerializeParams(&verifregtypes.AddVerifiedClientParams{Address: target, Allowance: allowance}) + params, err := actors.SerializeParams(&verifregtypes9.AddVerifiedClientParams{Address: target, Allowance: allowance}) if err != nil { return err } @@ -359,15 +361,30 @@ var filplusSignRemoveDataCapProposal = &cli.Command{ } } - params := verifregtypes.RemoveDataCapProposal{ - RemovalProposalID: id, - DataCapAmount: allowanceToRemove, - VerifiedClient: clientIdAddr, + nv, err := api.StateNetworkVersion(ctx, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("failed to get network version: %w", err) } paramBuf := new(bytes.Buffer) - paramBuf.WriteString(verifregtypes.SignatureDomainSeparation_RemoveDataCap) - err = params.MarshalCBOR(paramBuf) + paramBuf.WriteString(verifregtypes9.SignatureDomainSeparation_RemoveDataCap) + if nv <= network.Version16 { + params := verifregtypes8.RemoveDataCapProposal{ + RemovalProposalID: id, + DataCapAmount: allowanceToRemove, + VerifiedClient: clientIdAddr, + } + + err = params.MarshalCBOR(paramBuf) + } else { + params := verifregtypes9.RemoveDataCapProposal{ + RemovalProposalID: verifregtypes9.RmDcProposalID{ProposalID: id}, + DataCapAmount: allowanceToRemove, + VerifiedClient: clientIdAddr, + } + + err = params.MarshalCBOR(paramBuf) + } if err != nil { return xerrors.Errorf("failed to marshall paramBuf: %w", err) } diff --git a/cli/multisig.go b/cli/multisig.go index f4b67e14d..67c833397 100644 --- a/cli/multisig.go +++ b/cli/multisig.go @@ -341,7 +341,7 @@ var msigInspectCmd = &cli.Command{ paramStr = string(b) } - fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), method.Name, tx.Method, paramStr) + fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), method.Num, tx.Method, paramStr) } } if err := w.Flush(); err != nil { diff --git a/cli/state.go b/cli/state.go index f18beb0fb..bea7ed0df 100644 --- a/cli/state.go +++ b/cli/state.go @@ -29,6 +29,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" @@ -1231,7 +1232,7 @@ var compStateMsg = `
Gas Trace - + {{define "virt" -}} {{- if . -}} +({{.}}) @@ -1243,7 +1244,7 @@ var compStateMsg = ` {{- end}} {{range .GasCharges}} - + {{template "gasC" .}}
NameTotal/Compute/StorageTime TakenLocation
NumTotal/Compute/StorageTime TakenLocation
{{.Name}}{{if .Extra}}:{{.Extra}}{{end}}
{{.Num}}{{if .Extra}}:{{.Extra}}{{end}}{{if PrintTiming}}{{.TimeTaken}}{{end}} @@ -1368,7 +1369,7 @@ func codeStr(c cid.Cid) string { } func getMethod(code cid.Cid, method abi.MethodNum) string { - return filcns.NewActorRegistry().Methods[code][method].Name // todo: use remote + return filcns.NewActorRegistry().Methods[code][method].Num // todo: use remote } func toFil(f types.BigInt) types.FIL { @@ -1904,7 +1905,7 @@ var StateSysActorCIDsCmd = &cli.Command{ fmt.Printf("Network Version: %d\n", nv) - actorVersion, err := actors.VersionForNetwork(nv) + actorVersion, err := actorstypes.VersionForNetwork(nv) if err != nil { return err } diff --git a/cmd/lotus-miner/init.go b/cmd/lotus-miner/init.go index 055df69ef..dd245f038 100644 --- a/cmd/lotus-miner/init.go +++ b/cmd/lotus-miner/init.go @@ -42,7 +42,6 @@ import ( "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/builtin/power" - "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/gen/slashfilter" "github.com/filecoin-project/lotus/chain/types" lcli "github.com/filecoin-project/lotus/cli" @@ -91,7 +90,7 @@ var initCmd = &cli.Command{ &cli.StringFlag{ Name: "sector-size", Usage: "specify sector size to use", - Value: units.BytesSize(float64(policy.GetDefaultSectorSize())), + Value: units.BytesSize(float64(abi.SectorSize(2048))), }, &cli.StringSliceFlag{ Name: "pre-sealed-sectors", diff --git a/cmd/lotus-miner/precommits-info.go b/cmd/lotus-miner/precommits-info.go index 034378cff..0ce757537 100644 --- a/cmd/lotus-miner/precommits-info.go +++ b/cmd/lotus-miner/precommits-info.go @@ -7,7 +7,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "github.com/urfave/cli/v2" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/specs-actors/v7/actors/util/adt" "github.com/filecoin-project/lotus/blockstore" diff --git a/cmd/lotus-miner/sectors.go b/cmd/lotus-miner/sectors.go index 84c2d8e95..45a1256aa 100644 --- a/cmd/lotus-miner/sectors.go +++ b/cmd/lotus-miner/sectors.go @@ -21,7 +21,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/api" diff --git a/cmd/lotus-pcr/main.go b/cmd/lotus-pcr/main.go index 474ed55f7..f491d9a33 100644 --- a/cmd/lotus-pcr/main.go +++ b/cmd/lotus-pcr/main.go @@ -27,7 +27,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" diff --git a/cmd/lotus-shed/msg.go b/cmd/lotus-shed/msg.go index bd8bd64f0..49412948c 100644 --- a/cmd/lotus-shed/msg.go +++ b/cmd/lotus-shed/msg.go @@ -141,7 +141,7 @@ func printMessage(cctx *cli.Context, msg *types.Message) error { return nil } - fmt.Println("Method:", filcns.NewActorRegistry().Methods[toact.Code][msg.Method].Name) // todo use remote + fmt.Println("Method:", filcns.NewActorRegistry().Methods[toact.Code][msg.Method].Num) // todo use remote p, err := lcli.JsonParams(toact.Code, msg.Method, msg.Params) if err != nil { return err diff --git a/cmd/lotus-sim/info.go b/cmd/lotus-sim/info.go index 864adb3bc..b92fa4b2f 100644 --- a/cmd/lotus-sim/info.go +++ b/cmd/lotus-sim/info.go @@ -66,7 +66,7 @@ func printInfo(ctx context.Context, sim *simulation.Simulation, out io.Writer) e startTime := time.Unix(int64(start.MinTimestamp()), 0) duration := headTime.Sub(startTime) - fmt.Fprintf(tw, "Name:\t%s\n", sim.Name()) + fmt.Fprintf(tw, "Num:\t%s\n", sim.Name()) fmt.Fprintf(tw, "Head:\t%s\n", head) fmt.Fprintf(tw, "Start Epoch:\t%d\n", firstEpoch) fmt.Fprintf(tw, "End Epoch:\t%d\n", headEpoch) diff --git a/cmd/lotus-sim/simulation/blockbuilder/blockbuilder.go b/cmd/lotus-sim/simulation/blockbuilder/blockbuilder.go index 5e84688ec..d9a32481c 100644 --- a/cmd/lotus-sim/simulation/blockbuilder/blockbuilder.go +++ b/cmd/lotus-sim/simulation/blockbuilder/blockbuilder.go @@ -9,10 +9,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/account" @@ -273,8 +273,8 @@ func (bb *BlockBuilder) StateManager() *stmgr.StateManager { } // ActorsVersion returns the actors version for the target block. -func (bb *BlockBuilder) ActorsVersion() (actors.Version, error) { - return actors.VersionForNetwork(bb.NetworkVersion()) +func (bb *BlockBuilder) ActorsVersion() (actorstypes.Version, error) { + return actorstypes.VersionForNetwork(bb.NetworkVersion()) } func (bb *BlockBuilder) L() *zap.SugaredLogger { diff --git a/cmd/lotus-sim/simulation/node.go b/cmd/lotus-sim/simulation/node.go index b0317c66b..f115ffe19 100644 --- a/cmd/lotus-sim/simulation/node.go +++ b/cmd/lotus-sim/simulation/node.go @@ -115,7 +115,7 @@ func (nd *Node) LoadSim(ctx context.Context, name string) (*Simulation, error) { // Create creates a new simulation. // // - This will fail if a simulation already exists with the given name. -// - Name must not contain a '/'. +// - Num must not contain a '/'. func (nd *Node) CreateSim(ctx context.Context, name string, head *types.TipSet) (*Simulation, error) { if strings.Contains(name, "/") { return nil, xerrors.Errorf("simulation name %q cannot contain a '/'", name) diff --git a/cmd/lotus-sim/simulation/stages/commit_queue.go b/cmd/lotus-sim/simulation/stages/commit_queue.go index ec12c2776..60cbfa4ba 100644 --- a/cmd/lotus-sim/simulation/stages/commit_queue.go +++ b/cmd/lotus-sim/simulation/stages/commit_queue.go @@ -5,7 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/lotus/chain/actors/policy" ) diff --git a/cmd/lotus-sim/simulation/stages/commit_queue_test.go b/cmd/lotus-sim/simulation/stages/commit_queue_test.go index df0de9757..0b9a2ebdb 100644 --- a/cmd/lotus-sim/simulation/stages/commit_queue_test.go +++ b/cmd/lotus-sim/simulation/stages/commit_queue_test.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/lotus/chain/actors/policy" ) diff --git a/cmd/lotus-sim/simulation/stages/interface.go b/cmd/lotus-sim/simulation/stages/interface.go index d58321d87..fffdbec6b 100644 --- a/cmd/lotus-sim/simulation/stages/interface.go +++ b/cmd/lotus-sim/simulation/stages/interface.go @@ -5,7 +5,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/cmd/lotus-sim/simulation/blockbuilder" diff --git a/cmd/lotus-sim/simulation/stages/precommit_stage.go b/cmd/lotus-sim/simulation/stages/precommit_stage.go index fc61ff08b..8f82d8988 100644 --- a/cmd/lotus-sim/simulation/stages/precommit_stage.go +++ b/cmd/lotus-sim/simulation/stages/precommit_stage.go @@ -11,7 +11,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/network" miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" @@ -177,9 +177,9 @@ func (stage *PreCommitStage) packMiner( } expiration := epoch + policy.GetMaxSectorExpirationExtension() - infos := make([]minertypes.SectorPreCommitInfo, len(sectorNos)) + infos := make([]minertypes.PreCommitSectorParams, len(sectorNos)) for i, sno := range sectorNos { - infos[i] = minertypes.SectorPreCommitInfo{ + infos[i] = minertypes.PreCommitSectorParams{ SealProof: sealType, SectorNumber: sno, SealedCID: mock.MockCommR(minerAddr, sno), @@ -228,7 +228,7 @@ func (stage *PreCommitStage) packMiner( } for _, info := range batch { - if err := stage.committer.EnqueueProveCommit(minerAddr, epoch, info); err != nil { + if err := stage.committer.EnqueueProveCommit(minerAddr, epoch, toSectorPreCommitInfo(info)); err != nil { return added, false, err } added++ @@ -253,7 +253,7 @@ func (stage *PreCommitStage) packMiner( return added, false, err } - if err := stage.committer.EnqueueProveCommit(minerAddr, epoch, info); err != nil { + if err := stage.committer.EnqueueProveCommit(minerAddr, epoch, toSectorPreCommitInfo(info)); err != nil { return added, false, err } added++ @@ -346,3 +346,15 @@ func (stage *PreCommitStage) load(ctx context.Context, bb *blockbuilder.BlockBui stage.initialized = true return nil } + +func toSectorPreCommitInfo(param minertypes.PreCommitSectorParams) minertypes.SectorPreCommitInfo { + return minertypes.SectorPreCommitInfo{ + SealProof: param.SealProof, + SectorNumber: param.SectorNumber, + SealedCID: param.SealedCID, + SealRandEpoch: param.SealRandEpoch, + DealIDs: param.DealIDs, + Expiration: param.Expiration, + UnsealedCid: nil, + } +} diff --git a/cmd/lotus-sim/simulation/stages/provecommit_stage.go b/cmd/lotus-sim/simulation/stages/provecommit_stage.go index efa14e4e8..d15ea60f0 100644 --- a/cmd/lotus-sim/simulation/stages/provecommit_stage.go +++ b/cmd/lotus-sim/simulation/stages/provecommit_stage.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/builtin" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" diff --git a/cmd/lotus-wallet/interactive.go b/cmd/lotus-wallet/interactive.go index 40c3f8922..9770961c0 100644 --- a/cmd/lotus-wallet/interactive.go +++ b/cmd/lotus-wallet/interactive.go @@ -103,7 +103,7 @@ func (c *InteractiveWallet) WalletSign(ctx context.Context, k address.Address, m return xerrors.Errorf("looking up dest actor: %w", err) } - fmt.Println("Method:", filcns.NewActorRegistry().Methods[toact.Code][cmsg.Method].Name) + fmt.Println("Method:", filcns.NewActorRegistry().Methods[toact.Code][cmsg.Method].Num) p, err := lcli.JsonParams(toact.Code, cmsg.Method, cmsg.Params) if err != nil { return err @@ -125,7 +125,7 @@ func (c *InteractiveWallet) WalletSign(ctx context.Context, k address.Address, m return xerrors.Errorf("looking up msig dest actor: %w", err) } - fmt.Println("\tMultiSig Proposal Method:", filcns.NewActorRegistry().Methods[toact.Code][mp.Method].Name) // todo use remote + fmt.Println("\tMultiSig Proposal Method:", filcns.NewActorRegistry().Methods[toact.Code][mp.Method].Num) // todo use remote p, err := lcli.JsonParams(toact.Code, mp.Method, mp.Params) if err != nil { return err diff --git a/cmd/tvx/extract_many.go b/cmd/tvx/extract_many.go index bc5ad2a30..07bbc8df4 100644 --- a/cmd/tvx/extract_many.go +++ b/cmd/tvx/extract_many.go @@ -164,7 +164,7 @@ func runExtractMany(c *cli.Context) error { } else if methodnum >= len(m) { return fmt.Errorf("unrecognized method number for actor %s: %d", actorcode, methodnum) } else { - methodname = m[abi.MethodNum(methodnum)].Name + methodname = m[abi.MethodNum(methodnum)].Num } // exitcode string representations are of kind ErrType(0); strip out diff --git a/conformance/driver.go b/conformance/driver.go index 0bb51800e..2329fe336 100644 --- a/conformance/driver.go +++ b/conformance/driver.go @@ -11,13 +11,13 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/test-vectors/schema" "github.com/filecoin-project/lotus/blockstore" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/consensus/filcns" "github.com/filecoin-project/lotus/chain/state" "github.com/filecoin-project/lotus/chain/stmgr" @@ -249,7 +249,7 @@ func (d *Driver) ExecuteMessage(bs blockstore.Blockstore, params ExecuteMessageP // register the chaos actor if required by the vector. if chaosOn, ok := d.selector["chaos_actor"]; ok && chaosOn == "true" { - av, _ := actors.VersionForNetwork(params.NetworkVersion) + av, _ := actorstypes.VersionForNetwork(params.NetworkVersion) invoker.Register(av, nil, chaos.Actor{}) } diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index e5147340d..9873d16ef 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -442,7 +442,7 @@ Inputs: ], "Bw==", 10101, - 16 + 17 ] ``` diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 75459001a..bd77fd482 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -4653,7 +4653,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -4668,7 +4668,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -5836,10 +5836,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -5961,10 +5958,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -6182,7 +6176,7 @@ Inputs: ] ``` -Response: `16` +Response: `17` ### StateReadState StateReadState returns the indicated actor's state. @@ -6640,15 +6634,10 @@ Response: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, "PreCommitDeposit": "0", - "PreCommitEpoch": 10101, - "DealWeight": "0", - "VerifiedDealWeight": "0" + "PreCommitEpoch": 10101 } ``` diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index e89ba6b0c..86a042581 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -5109,7 +5109,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -5124,7 +5124,7 @@ Perms: read Inputs: ```json [ - 16 + 17 ] ``` @@ -6377,10 +6377,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -6502,10 +6499,7 @@ Inputs: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, [ { @@ -6723,7 +6717,7 @@ Inputs: ] ``` -Response: `16` +Response: `17` ### StateReadState StateReadState returns the indicated actor's state. @@ -7143,15 +7137,10 @@ Response: 5432 ], "Expiration": 10101, - "ReplaceCapacity": true, - "ReplaceSectorDeadline": 42, - "ReplaceSectorPartition": 42, - "ReplaceSectorNumber": 9 + "UnsealedCid": null }, "PreCommitDeposit": "0", - "PreCommitEpoch": 10101, - "DealWeight": "0", - "VerifiedDealWeight": "0" + "PreCommitEpoch": 10101 } ``` diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index ec266311b..940d2b7f6 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -71,7 +71,7 @@ OPTIONS: --create-worker-key create separate worker key (default: false) --worker value, -w value worker key to use (overrides --create-worker-key) --owner value, -o value owner key to use - --sector-size value specify sector size to use (default: "32GiB") + --sector-size value specify sector size to use (default: "2KiB") --pre-sealed-sectors value specify set of presealed sectors for starting as a genesis miner (accepts multiple inputs) --pre-sealed-metadata value specify the metadata file for the presealed sectors --nosync don't check full-node sync status (default: false) diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 15178d8e0..0a064be76 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -2029,7 +2029,7 @@ USAGE: lotus state actor-cids [command options] [arguments...] OPTIONS: - --network-version value specify network version (default: 16) + --network-version value specify network version (default: 17) ``` diff --git a/gen/api/proxygen.go b/gen/api/proxygen.go index df39132ff..f756c0d0c 100644 --- a/gen/api/proxygen.go +++ b/gen/api/proxygen.go @@ -140,14 +140,14 @@ func generate(path, pkg, outpkg, outfile string) error { ast.Walk(v, ap) type methodInfo struct { - Name string + Num string node ast.Node Tags map[string][]string NamedParams, ParamNames, Results, DefRes string } type strinfo struct { - Name string + Num string Methods map[string]*methodInfo Include []string } @@ -182,7 +182,7 @@ func generate(path, pkg, outpkg, outfile string) error { for ifname, methods := range v.Methods { if _, ok := m.Infos[ifname]; !ok { m.Infos[ifname] = &strinfo{ - Name: ifname, + Num: ifname, Methods: map[string]*methodInfo{}, Include: v.Include[ifname], } @@ -239,7 +239,7 @@ func generate(path, pkg, outpkg, outfile string) error { } info.Methods[mname] = &methodInfo{ - Name: mname, + Num: mname, node: node.node, Tags: map[string][]string{}, NamedParams: strings.Join(params, ", "), @@ -298,18 +298,18 @@ import ( var ErrNotSupported = xerrors.New("method not supported") {{range .Infos}} -type {{.Name}}Struct struct { +type {{.Num}}Struct struct { {{range .Include}} {{.}}Struct {{end}} Internal struct { {{range .Methods}} - {{.Name}} func({{.NamedParams}}) ({{.Results}}) `+"`"+`{{range .Tags}}{{index . 0}}:"{{index . 1}}"{{end}}`+"`"+` + {{.Num}} func({{.NamedParams}}) ({{.Results}}) `+"`"+`{{range .Tags}}{{index . 0}}:"{{index . 1}}"{{end}}`+"`"+` {{end}} } } -type {{.Name}}Stub struct { +type {{.Num}}Stub struct { {{range .Include}} {{.}}Stub {{end}} @@ -317,22 +317,22 @@ type {{.Name}}Stub struct { {{end}} {{range .Infos}} -{{$name := .Name}} +{{$name := .Num}} {{range .Methods}} -func (s *{{$name}}Struct) {{.Name}}({{.NamedParams}}) ({{.Results}}) { - if s.Internal.{{.Name}} == nil { +func (s *{{$name}}Struct) {{.Num}}({{.NamedParams}}) ({{.Results}}) { + if s.Internal.{{.Num}} == nil { return {{.DefRes}}ErrNotSupported } - return s.Internal.{{.Name}}({{.ParamNames}}) + return s.Internal.{{.Num}}({{.ParamNames}}) } -func (s *{{$name}}Stub) {{.Name}}({{.NamedParams}}) ({{.Results}}) { +func (s *{{$name}}Stub) {{.Num}}({{.NamedParams}}) ({{.Results}}) { return {{.DefRes}}ErrNotSupported } {{end}} {{end}} -{{range .Infos}}var _ {{.Name}} = new({{.Name}}Struct) +{{range .Infos}}var _ {{.Num}} = new({{.Num}}Struct) {{end}} `) diff --git a/gen/inlinegen-data.json b/gen/inlinegen-data.json index 8b8081ac4..e767f990a 100644 --- a/gen/inlinegen-data.json +++ b/gen/inlinegen-data.json @@ -1,7 +1,7 @@ { - "actorVersions": [0, 2, 3, 4, 5, 6, 7, 8], - "latestActorsVersion": 8, + "actorVersions": [0, 2, 3, 4, 5, 6, 7, 8, 9], + "latestActorsVersion": 9, - "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - "latestNetworkVersion": 16 + "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], + "latestNetworkVersion": 17 } diff --git a/gen/main.go b/gen/main.go index fcb1d6dfa..e5fc2ed5f 100644 --- a/gen/main.go +++ b/gen/main.go @@ -41,6 +41,7 @@ func main() { err = gen.WriteTupleEncodersToFile("./chain/vm/cbor_gen.go", "vm", vm.FvmExecutionTrace{}, + vm.FvmGasCharge{}, ) if err != nil { fmt.Println(err) diff --git a/go.mod b/go.mod index b811975ad..6b1168a87 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( github.com/filecoin-project/go-legs v0.4.4 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 - github.com/filecoin-project/go-state-types v0.1.11 + github.com/filecoin-project/go-state-types v0.1.12-alpha github.com/filecoin-project/go-statemachine v1.0.2 github.com/filecoin-project/go-statestore v0.2.0 github.com/filecoin-project/go-storedcounter v0.1.0 @@ -72,7 +72,7 @@ require ( github.com/icza/backscanner v0.0.0-20210726202459-ac2ffc679f94 github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab github.com/ipfs/bbloom v0.0.4 - github.com/ipfs/go-bitswap v0.8.0 + github.com/ipfs/go-bitswap v0.10.2 github.com/ipfs/go-block-format v0.0.3 github.com/ipfs/go-blockservice v0.4.0 github.com/ipfs/go-cid v0.2.0 @@ -113,11 +113,11 @@ require ( github.com/libp2p/go-libp2p v0.22.0 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.4.0 - github.com/libp2p/go-libp2p-kad-dht v0.17.0 - github.com/libp2p/go-libp2p-peerstore v0.7.1 + github.com/libp2p/go-libp2p-kad-dht v0.18.0 + github.com/libp2p/go-libp2p-peerstore v0.8.0 github.com/libp2p/go-libp2p-pubsub v0.8.0 github.com/libp2p/go-libp2p-raft v0.1.8 - github.com/libp2p/go-libp2p-record v0.1.3 + github.com/libp2p/go-libp2p-record v0.2.0 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.16 @@ -192,6 +192,7 @@ require ( github.com/filecoin-project/go-amt-ipld/v2 v2.1.0 // indirect github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 // indirect github.com/filecoin-project/go-amt-ipld/v4 v4.0.0 // indirect + github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837 // indirect github.com/filecoin-project/go-ds-versioning v0.1.1 // indirect github.com/filecoin-project/go-hamt-ipld v0.1.5 // indirect github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 // indirect @@ -234,7 +235,7 @@ require ( github.com/ipfs/go-ipfs-posinfo v0.0.1 // indirect github.com/ipfs/go-ipfs-pq v0.0.2 // indirect github.com/ipfs/go-ipld-legacy v0.1.1 // indirect - github.com/ipfs/go-ipns v0.1.3-0.20220819140646-0d8e99ba180a // indirect + github.com/ipfs/go-ipns v0.2.0 // indirect github.com/ipfs/go-log v1.0.5 // indirect github.com/ipfs/go-path v0.3.0 // indirect github.com/ipfs/go-peertaskqueue v0.7.1 // indirect @@ -254,15 +255,12 @@ require ( github.com/klauspost/cpuid/v2 v2.1.0 // indirect github.com/koron/go-ssdp v0.0.3 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect - github.com/libp2p/go-eventbus v0.3.0 // indirect github.com/libp2p/go-flow-metrics v0.1.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect github.com/libp2p/go-libp2p-connmgr v0.4.0 // indirect github.com/libp2p/go-libp2p-core v0.20.0 // indirect github.com/libp2p/go-libp2p-gostream v0.4.0 // indirect - github.com/libp2p/go-libp2p-kbucket v0.4.7 // indirect - github.com/libp2p/go-libp2p-loggables v0.1.0 // indirect - github.com/libp2p/go-libp2p-netutil v0.2.0 // indirect + github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect github.com/libp2p/go-libp2p-noise v0.5.0 // indirect github.com/libp2p/go-libp2p-tls v0.5.0 // indirect github.com/libp2p/go-msgio v0.2.0 // indirect diff --git a/go.sum b/go.sum index c19c9570c..9e345f62f 100644 --- a/go.sum +++ b/go.sum @@ -312,6 +312,8 @@ github.com/filecoin-project/go-cbor-util v0.0.1 h1:E1LYZYTtjfAQwCReho0VXvbu8t3CY github.com/filecoin-project/go-cbor-util v0.0.1/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= github.com/filecoin-project/go-commp-utils v0.1.3 h1:rTxbkNXZU7FLgdkBk8RsQIEOuPONHykEoX3xGk41Fkw= github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9ANQrY3fDFoXdqyX04J+dWpK30= +github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837 h1:4cITW0pwgvqLs86Q9bWQa34+jBfR1V687bDkmv2DgnA= +github.com/filecoin-project/go-commp-utils/nonffi v0.0.0-20220905160352-62059082a837/go.mod h1:e2YBjSblNVoBckkbv3PPqsq71q98oFkFqL7s1etViGo= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= @@ -348,8 +350,9 @@ github.com/filecoin-project/go-state-types v0.0.0-20201102161440-c8033295a1fc/go github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= github.com/filecoin-project/go-state-types v0.1.6/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= github.com/filecoin-project/go-state-types v0.1.8/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= -github.com/filecoin-project/go-state-types v0.1.11 h1:QzKUILRGa9gjJKPCiFlvCfcDGK2IqtJ6CpRQULvZZpA= -github.com/filecoin-project/go-state-types v0.1.11/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= +github.com/filecoin-project/go-state-types v0.1.10/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q= +github.com/filecoin-project/go-state-types v0.1.12-alpha h1:6BbnnrFqCOkiogZd6CTe7Bf1nRKrJDE6CP/I/dqM4C8= +github.com/filecoin-project/go-state-types v0.1.12-alpha/go.mod h1:n/kujdC9JphvYTrmaD1+vJpvDPy/DwzckoMzP0nBKWI= github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= github.com/filecoin-project/go-statemachine v1.0.2 h1:421SSWBk8GIoCoWYYTE/d+qCWccgmRH0uXotXRDjUbc= github.com/filecoin-project/go-statemachine v1.0.2/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54= @@ -666,8 +669,8 @@ github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSA github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs= github.com/ipfs/go-bitswap v0.5.1/go.mod h1:P+ckC87ri1xFLvk74NlXdP0Kj9RmWAh4+H78sC6Qopo= github.com/ipfs/go-bitswap v0.6.0/go.mod h1:Hj3ZXdOC5wBJvENtdqsixmzzRukqd8EHLxZLZc3mzRA= -github.com/ipfs/go-bitswap v0.8.0 h1:UEV7kogQu2iGggkE9GhLykDrRCUpsNnpu2NODww/srw= -github.com/ipfs/go-bitswap v0.8.0/go.mod h1:/h8sBij8UVEaNWl8ABzpLRA5Y1cttdNUnpeGo2AA/LQ= +github.com/ipfs/go-bitswap v0.10.2 h1:B81RIwkTnIvSYT1ZCzxjYTeF0Ek88xa9r1AMpTfk+9Q= +github.com/ipfs/go-bitswap v0.10.2/go.mod h1:+fZEvycxviZ7c+5KlKwTzLm0M28g2ukCPqiuLfJk4KA= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= @@ -795,8 +798,8 @@ github.com/ipfs/go-ipld-format v0.4.0/go.mod h1:co/SdBE8h99968X0hViiw1MNlh6fvxxn github.com/ipfs/go-ipld-legacy v0.1.0/go.mod h1:86f5P/srAmh9GcIcWQR9lfFLZPrIyyXQeVlOWeeWEuI= github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2cdcc= github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg= -github.com/ipfs/go-ipns v0.1.3-0.20220819140646-0d8e99ba180a h1:5UPw4plVUYhbZjY9ZWSLVEWUyYWQIM3WYumZQfBlPXI= -github.com/ipfs/go-ipns v0.1.3-0.20220819140646-0d8e99ba180a/go.mod h1:VHLj6/KLxdj+a5BTwpKRoHhtw+TP+hcb0ZUpQSqW4fI= +github.com/ipfs/go-ipns v0.2.0 h1:BgmNtQhqOw5XEZ8RAfWEpK4DhqaYiuP6h71MhIp7xXU= +github.com/ipfs/go-ipns v0.2.0/go.mod h1:3cLT2rbvgPZGkHJoPO1YMJeh6LtkxopCkKFcio/wE24= github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= github.com/ipfs/go-log v1.0.0/go.mod h1:JO7RzlMK6rA+CIxFMLOuB6Wf5b81GDiKElL7UPSIKjA= github.com/ipfs/go-log v1.0.1/go.mod h1:HuWlQttfN6FWNHRhlY5yMk/lW7evQC0HHGOxEwMRR8I= @@ -985,8 +988,6 @@ github.com/libp2p/go-conn-security-multistream v0.2.1/go.mod h1:cR1d8gA0Hr59Fj6N github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-eventbus v0.3.0 h1:FCHfSpM469NSXipOoX3npAP7bJHSAmUIxj1qe8AtT5k= -github.com/libp2p/go-eventbus v0.3.0/go.mod h1:d+p2Q4lgRHTBLwOXdzX0hOl8D4hiHHNgcoy1MuomBHU= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= @@ -1006,7 +1007,6 @@ github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76f github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= -github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI= @@ -1089,12 +1089,11 @@ github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k= -github.com/libp2p/go-libp2p-kad-dht v0.17.0 h1:HWEjqjNVDuf8yuccuswGy1vYGzB0v4Z+yQ4DMDMSIqk= -github.com/libp2p/go-libp2p-kad-dht v0.17.0/go.mod h1:zeE26Xo+PY7sS2AgkBQQcBnJEazMT26KGZLUFttl+rk= -github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70= -github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= +github.com/libp2p/go-libp2p-kad-dht v0.18.0 h1:akqO3gPMwixR7qFSFq70ezRun97g5hrA/lBW9jrjUYM= +github.com/libp2p/go-libp2p-kad-dht v0.18.0/go.mod h1:Gb92MYIPm3K2pJLGn8wl0m8wiKDvHrYpg+rOd0GzzPA= +github.com/libp2p/go-libp2p-kbucket v0.5.0 h1:g/7tVm8ACHDxH29BGrpsQlnNeu+6OF1A9bno/4/U1oA= +github.com/libp2p/go-libp2p-kbucket v0.5.0/go.mod h1:zGzGCpQd78b5BNTDGHNDLaTt9aDK/A02xeZp9QeFC4U= github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg= -github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I= @@ -1112,8 +1111,6 @@ github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8 github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q= github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= -github.com/libp2p/go-libp2p-netutil v0.2.0 h1:DecSQ5nRnE5RfOmlNx+qubPL+rX8NSC6vyPRCiJXzg4= -github.com/libp2p/go-libp2p-netutil v0.2.0/go.mod h1:5ny0YEgWwWLxPwRJn5gGYr5bh9msiDI1CStSesvqYRM= github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= github.com/libp2p/go-libp2p-noise v0.2.0/go.mod h1:IEbYhBBzGyvdLBoxxULL/SGbJARhUeqlO8lVSREYu2Q= github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= @@ -1133,8 +1130,8 @@ github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuD github.com/libp2p/go-libp2p-peerstore v0.2.7/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= -github.com/libp2p/go-libp2p-peerstore v0.7.1 h1:7FpALlqR+3+oOBXdzm3AVt0vjMYLW1b7jM03E4iEHlw= -github.com/libp2p/go-libp2p-peerstore v0.7.1/go.mod h1:cdUWTHro83vpg6unCpGUr8qJoX3e93Vy8o97u5ppIM0= +github.com/libp2p/go-libp2p-peerstore v0.8.0 h1:bzTG693TA1Ju/zKmUCQzDLSqiJnyRFVwPpuloZ/OZtI= +github.com/libp2p/go-libp2p-peerstore v0.8.0/go.mod h1:9geHWmNA3YDlQBjL/uPEJD6vpDK12aDNlUNHJ6kio/s= github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= @@ -1150,8 +1147,8 @@ github.com/libp2p/go-libp2p-raft v0.1.8/go.mod h1:+YDisn3uszb7vxshLgKoDdRGs79WSb github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= -github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= -github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= +github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0= +github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw= @@ -1182,7 +1179,6 @@ github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotl github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.6.1-0.20211213091545-6aa944478bd3/go.mod h1:KB5rnDAM6eNBajC8qYV6hUvBaqIH0w0plTDA5yV9QlA= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= diff --git a/itests/deadlines_test.go b/itests/deadlines_test.go index a2b0bde88..a00c33b68 100644 --- a/itests/deadlines_test.go +++ b/itests/deadlines_test.go @@ -64,7 +64,7 @@ func TestDeadlineToggling(t *testing.T) { //stm: @CHAIN_INCOMING_HANDLE_INCOMING_BLOCKS_001, @CHAIN_INCOMING_VALIDATE_BLOCK_PUBSUB_001, @CHAIN_INCOMING_VALIDATE_MESSAGE_PUBSUB_001 //stm: @MINER_SECTOR_LIST_001 - kit.Expensive(t) + //kit.Expensive(t) kit.QuietMiningLogs() diff --git a/itests/kit/ensemble_opts_nv.go b/itests/kit/ensemble_opts_nv.go index b51b82bd5..64bed559b 100644 --- a/itests/kit/ensemble_opts_nv.go +++ b/itests/kit/ensemble_opts_nv.go @@ -49,12 +49,12 @@ func LatestActorsAt(upgradeHeight abi.ChainEpoch) EnsembleOpt { }) /* inline-gen start */ return UpgradeSchedule(stmgr.Upgrade{ - Network: network.Version15, + Network: network.Version16, Height: -1, }, stmgr.Upgrade{ - Network: network.Version16, + Network: network.Version17, Height: upgradeHeight, - Migration: filcns.UpgradeActorsV8, + Migration: filcns.UpgradeActorsV9, }) /* inline-gen end */ } diff --git a/itests/lite_migration_test.go b/itests/lite_migration_test.go index 972f2df70..704380da3 100644 --- a/itests/lite_migration_test.go +++ b/itests/lite_migration_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/require" "github.com/filecoin-project/go-address" + actorstypes "github.com/filecoin-project/go-state-types/actors" system8 "github.com/filecoin-project/go-state-types/builtin/v8/system" "github.com/filecoin-project/go-state-types/manifest" "github.com/filecoin-project/go-state-types/network" @@ -18,7 +19,6 @@ import ( "github.com/filecoin-project/specs-actors/v8/actors/util/adt" "github.com/filecoin-project/lotus/blockstore" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/builtin/system" "github.com/filecoin-project/lotus/chain/consensus/filcns" "github.com/filecoin-project/lotus/chain/state" @@ -59,7 +59,7 @@ func TestLiteMigration(t *testing.T) { // populate the entries field of the manifest require.NoError(t, newManifest.Load(ctx, ctxStore), "error loading new manifest") - newStateRoot, err := filcns.LiteMigration(ctx, bs, newManifestCid, stateRoot, actors.Version8, types.StateTreeVersion4, types.StateTreeVersion4) + newStateRoot, err := filcns.LiteMigration(ctx, bs, newManifestCid, stateRoot, actorstypes.Version8, types.StateTreeVersion4, types.StateTreeVersion4) require.NoError(t, err) newStateTree, err := state.LoadStateTree(ctxStore, newStateRoot) diff --git a/itests/mpool_push_with_uuid_test.go b/itests/mpool_push_with_uuid_test.go index 8852b9528..6b94dbad1 100644 --- a/itests/mpool_push_with_uuid_test.go +++ b/itests/mpool_push_with_uuid_test.go @@ -2,18 +2,19 @@ package itests import ( "context" - "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/lotus/node/config" "testing" "time" "github.com/stretchr/testify/require" + "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/itests/kit" + "github.com/filecoin-project/lotus/node/config" ) func TestMpoolPushWithoutUuidWithMaxFee(t *testing.T) { diff --git a/itests/multisig/suite.go b/itests/multisig/suite.go index 39edfdc4e..9a81d0bf9 100644 --- a/itests/multisig/suite.go +++ b/itests/multisig/suite.go @@ -79,8 +79,6 @@ func RunMultisigTests(t *testing.T, client *kit.TestFullNode) { require.Regexp(t, regexp.MustCompile("Balance: 0.000000000000001 FIL"), out) // Expect 1 transaction require.Regexp(t, regexp.MustCompile(`Transactions:\s*1`), out) - // Expect transaction to be "AddSigner" - require.Regexp(t, regexp.MustCompile(`AddSigner`), out) // Approve adding the new address // msig add-approve --from= 0 false diff --git a/itests/raft_messagesigner_test.go b/itests/raft_messagesigner_test.go index dfc365982..22168ae95 100644 --- a/itests/raft_messagesigner_test.go +++ b/itests/raft_messagesigner_test.go @@ -4,7 +4,6 @@ import ( "context" "crypto/rand" "fmt" - "github.com/filecoin-project/lotus/node/config" "reflect" "testing" "time" @@ -24,6 +23,7 @@ import ( "github.com/filecoin-project/lotus/itests/kit" consensus "github.com/filecoin-project/lotus/lib/consensus/raft" "github.com/filecoin-project/lotus/node" + "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules" ) diff --git a/itests/verifreg_test.go b/itests/verifreg_test.go index 9132cf28b..9b1c71162 100644 --- a/itests/verifreg_test.go +++ b/itests/verifreg_test.go @@ -14,7 +14,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - verifregst "github.com/filecoin-project/go-state-types/builtin/v8/verifreg" + verifregst "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" "github.com/filecoin-project/go-state-types/network" lapi "github.com/filecoin-project/lotus/api" @@ -290,7 +290,7 @@ func TestRemoveDataCap(t *testing.T) { removeProposal := verifregst.RemoveDataCapProposal{ VerifiedClient: verifiedClientID, DataCapAmount: removeDatacap, - RemovalProposalID: proposalID, + RemovalProposalID: verifregst.RmDcProposalID{ProposalID: proposalID}, } buf := bytes.Buffer{} diff --git a/lib/consensus/raft/config.go b/lib/consensus/raft/config.go index eb2788e12..8b0070403 100644 --- a/lib/consensus/raft/config.go +++ b/lib/consensus/raft/config.go @@ -1,10 +1,12 @@ package consensus import ( - "github.com/filecoin-project/lotus/node/config" + "time" + hraft "github.com/hashicorp/raft" "golang.org/x/xerrors" - "time" + + "github.com/filecoin-project/lotus/node/config" ) // ConfigKey is the default configuration key for holding this component's diff --git a/lib/consensus/raft/consensus.go b/lib/consensus/raft/consensus.go index 60f0734ec..47b42e141 100644 --- a/lib/consensus/raft/consensus.go +++ b/lib/consensus/raft/consensus.go @@ -6,7 +6,6 @@ import ( "context" "errors" "fmt" - "github.com/filecoin-project/lotus/node/config" "sort" "time" @@ -15,6 +14,7 @@ import ( addr "github.com/filecoin-project/go-address" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/node/config" //ds "github.com/ipfs/go-datastore" logging "github.com/ipfs/go-log/v2" diff --git a/lib/consensus/raft/raft.go b/lib/consensus/raft/raft.go index a9c3e1bcc..149aaabdc 100644 --- a/lib/consensus/raft/raft.go +++ b/lib/consensus/raft/raft.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "github.com/filecoin-project/lotus/node/config" "io" "os" "time" @@ -13,6 +12,8 @@ import ( p2praft "github.com/libp2p/go-libp2p-raft" host "github.com/libp2p/go-libp2p/core/host" peer "github.com/libp2p/go-libp2p/core/peer" + + "github.com/filecoin-project/lotus/node/config" ) // ErrWaitingForSelf is returned when we are waiting for ourselves to depart diff --git a/lotuspond/front/src/chain/methodgen.go b/lotuspond/front/src/chain/methodgen.go index da174bfaa..5fd6cde93 100644 --- a/lotuspond/front/src/chain/methodgen.go +++ b/lotuspond/front/src/chain/methodgen.go @@ -54,7 +54,7 @@ func main() { if !ok { continue } - out[name] = append(out[name], m.Name) + out[name] = append(out[name], m.Num) remaining-- } } diff --git a/lotuspond/front/src/chain/methods.json b/lotuspond/front/src/chain/methods.json index 938105528..d0127944e 100644 --- a/lotuspond/front/src/chain/methods.json +++ b/lotuspond/front/src/chain/methods.json @@ -1,842 +1,955 @@ { "fil/1/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/1/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/1/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/1/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/1/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/1/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/1/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/1/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "AddLockedFund", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20" ], "fil/1/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "OnEpochTickEnd", - "UpdatePledgeTotal", - "OnConsensusFault", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/1/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/1/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes" + "0", + "1", + "2", + "3", + "4", + "5", + "6" ], "fil/2/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/2/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/2/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/2/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/2/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/2/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/2/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/2/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23" ], "fil/2/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "OnEpochTickEnd", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/2/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/2/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes" + "0", + "1", + "2", + "3", + "4", + "5", + "6" ], "fil/3/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/3/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/3/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/3/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/3/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/3/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/3/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/3/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress", - "DisputeWindowedPoSt" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" ], "fil/3/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "OnEpochTickEnd", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/3/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/3/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes" + "0", + "1", + "2", + "3", + "4", + "5", + "6" ], "fil/4/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/4/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/4/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/4/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/4/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/4/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/4/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/4/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress", - "DisputeWindowedPoSt" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" ], "fil/4/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "OnEpochTickEnd", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/4/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/4/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes" + "0", + "1", + "2", + "3", + "4", + "5", + "6" ], "fil/5/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/5/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/5/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/5/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/5/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/5/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/5/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/5/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress", - "DisputeWindowedPoSt", - "PreCommitSectorBatch", - "ProveCommitAggregate" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26" ], "fil/5/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "OnEpochTickEnd", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/5/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/5/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes" + "0", + "1", + "2", + "3", + "4", + "5", + "6" ], "fil/6/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/6/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/6/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/6/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/6/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/6/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/6/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/6/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress", - "DisputeWindowedPoSt", - "PreCommitSectorBatch", - "ProveCommitAggregate" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26" ], "fil/6/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "OnEpochTickEnd", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/6/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/6/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes" + "0", + "1", + "2", + "3", + "4", + "5", + "6" ], "fil/7/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/7/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/7/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/7/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/7/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/7/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/7/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/7/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress", - "DisputeWindowedPoSt", - "PreCommitSectorBatch", - "ProveCommitAggregate", - "ProveReplicaUpdates" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27" ], "fil/7/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "CronTick", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/7/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/7/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes", - "RemoveVerifiedClientDataCap" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" ], "fil/8/account": [ - "Send", - "Constructor", - "PubkeyAddress" + "0", + "1", + "2" ], "fil/8/cron": [ - "Send", - "Constructor", - "EpochTick" + "0", + "1", + "2" ], "fil/8/init": [ - "Send", - "Constructor", - "Exec" + "0", + "1", + "2" ], "fil/8/multisig": [ - "Send", - "Constructor", - "Propose", - "Approve", - "Cancel", - "AddSigner", - "RemoveSigner", - "SwapSigner", - "ChangeNumApprovalsThreshold", - "LockBalance" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/8/paymentchannel": [ - "Send", - "Constructor", - "UpdateChannelState", - "Settle", - "Collect" + "0", + "1", + "2", + "3", + "4" ], "fil/8/reward": [ - "Send", - "Constructor", - "AwardBlockReward", - "ThisEpochReward", - "UpdateNetworkKPI" + "0", + "1", + "2", + "3", + "4" ], "fil/8/storagemarket": [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "PublishStorageDeals", - "VerifyDealsForActivation", - "ActivateDeals", - "OnMinerSectorsTerminate", - "ComputeDataCommitment", - "CronTick" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" ], "fil/8/storageminer": [ - "Send", - "Constructor", - "ControlAddresses", - "ChangeWorkerAddress", - "ChangePeerID", - "SubmitWindowedPoSt", - "PreCommitSector", - "ProveCommitSector", - "ExtendSectorExpiration", - "TerminateSectors", - "DeclareFaults", - "DeclareFaultsRecovered", - "OnDeferredCronEvent", - "CheckSectorProven", - "ApplyRewards", - "ReportConsensusFault", - "WithdrawBalance", - "ConfirmSectorProofsValid", - "ChangeMultiaddrs", - "CompactPartitions", - "CompactSectorNumbers", - "ConfirmUpdateWorkerKey", - "RepayDebt", - "ChangeOwnerAddress", - "DisputeWindowedPoSt", - "PreCommitSectorBatch", - "ProveCommitAggregate", - "ProveReplicaUpdates" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27" ], "fil/8/storagepower": [ - "Send", - "Constructor", - "CreateMiner", - "UpdateClaimedPower", - "EnrollCronEvent", - "CronTick", - "UpdatePledgeTotal", - "SubmitPoRepForBulkVerify", - "CurrentTotalPower" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" ], "fil/8/system": [ - "Send", - "Constructor" + "0", + "1" ], "fil/8/verifiedregistry": [ - "Send", - "Constructor", - "AddVerifier", - "RemoveVerifier", - "AddVerifiedClient", - "UseBytes", - "RestoreBytes", - "RemoveVerifiedClientDataCap" + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ], + "fil/9/account": [ + "0", + "1", + "2", + "3" + ], + "fil/9/cron": [ + "0", + "1", + "2" + ], + "fil/9/init": [ + "0", + "1", + "2" + ], + "fil/9/multisig": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "fil/9/paymentchannel": [ + "0", + "1", + "2", + "3", + "4" + ], + "fil/9/reward": [ + "0", + "1", + "2", + "3", + "4" + ], + "fil/9/storagemarket": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "fil/9/storageminer": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31" + ], + "fil/9/storagepower": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "8", + "9" + ], + "fil/9/system": [ + "0", + "1" + ], + "fil/9/verifiedregistry": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" ] } \ No newline at end of file diff --git a/markets/storageadapter/ondealsectorcommitted_test.go b/markets/storageadapter/ondealsectorcommitted_test.go index 624cf84ae..2ed1d2f39 100644 --- a/markets/storageadapter/ondealsectorcommitted_test.go +++ b/markets/storageadapter/ondealsectorcommitted_test.go @@ -19,7 +19,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/builtin" markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/cbor" tutils "github.com/filecoin-project/specs-actors/v2/support/testing" @@ -96,7 +96,7 @@ func TestOnDealSectorPreCommitted(t *testing.T) { }, matchStates: []matchState{ { - msg: makeMessage(t, provider, builtin.MethodsMiner.PreCommitSector, &minertypes.SectorPreCommitInfo{ + msg: makeMessage(t, provider, builtin.MethodsMiner.PreCommitSector, &minertypes.PreCommitSectorParams{ SectorNumber: sectorNumber, SealedCID: sealedCid, DealIDs: []abi.DealID{dealID}, @@ -114,7 +114,7 @@ func TestOnDealSectorPreCommitted(t *testing.T) { }, matchStates: []matchState{ { - msg: makeMessage(t, provider, builtin.MethodsMiner.PreCommitSector, &minertypes.SectorPreCommitInfo{ + msg: makeMessage(t, provider, builtin.MethodsMiner.PreCommitSector, &minertypes.PreCommitSectorParams{ SectorNumber: sectorNumber, SealedCID: sealedCid, DealIDs: []abi.DealID{dealID}, @@ -172,7 +172,7 @@ func TestOnDealSectorPreCommitted(t *testing.T) { currentDealInfoErr2: errors.New("something went wrong"), matchStates: []matchState{ { - msg: makeMessage(t, provider, builtin.MethodsMiner.PreCommitSector, &minertypes.SectorPreCommitInfo{ + msg: makeMessage(t, provider, builtin.MethodsMiner.PreCommitSector, &minertypes.PreCommitSectorParams{ SectorNumber: sectorNumber, SealedCID: sealedCid, DealIDs: []abi.DealID{dealID}, diff --git a/node/bundle/bundle.go b/node/bundle/bundle.go index cb97838f5..abdb34e69 100644 --- a/node/bundle/bundle.go +++ b/node/bundle/bundle.go @@ -10,6 +10,8 @@ import ( "github.com/ipld/go-car" "golang.org/x/xerrors" + actorstypes "github.com/filecoin-project/go-state-types/actors" + "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors" @@ -39,10 +41,10 @@ func LoadBundle(ctx context.Context, bs blockstore.Blockstore, r io.Reader) (cid // LoadBundles loads the bundles for the specified actor versions into the passed blockstore, if and // only if the bundle's manifest is not already present in the blockstore. -func LoadBundles(ctx context.Context, bs blockstore.Blockstore, versions ...actors.Version) error { +func LoadBundles(ctx context.Context, bs blockstore.Blockstore, versions ...actorstypes.Version) error { for _, av := range versions { // No bundles before version 8. - if av < actors.Version8 { + if av < actorstypes.Version8 { continue } diff --git a/node/config/cfgdocgen/gen.go b/node/config/cfgdocgen/gen.go index 513350152..d14b1aecf 100644 --- a/node/config/cfgdocgen/gen.go +++ b/node/config/cfgdocgen/gen.go @@ -94,7 +94,7 @@ func run() error { package config type DocField struct { - Name string + Num string Type string Comment string } @@ -109,7 +109,7 @@ var Doc = map[string][]DocField{ for _, f := range typ { fmt.Println("\t\t{") - fmt.Printf("\t\t\tName: \"%s\",\n", f.Name) + fmt.Printf("\t\t\tNum: \"%s\",\n", f.Name) fmt.Printf("\t\t\tType: \"%s\",\n\n", f.Type) fmt.Printf("\t\t\tComment: `%s`,\n", f.Comment) fmt.Println("\t\t},") diff --git a/node/config/def.go b/node/config/def.go index 63c5c6a3b..4306be577 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -2,14 +2,14 @@ package config import ( "encoding" - hraft "github.com/hashicorp/raft" - "github.com/libp2p/go-libp2p/core/peer" "io/ioutil" "os" "strconv" "time" + hraft "github.com/hashicorp/raft" "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p/core/peer" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" diff --git a/node/config/doc_gen.go b/node/config/doc_gen.go index 5d6eab33f..532f25bc1 100644 --- a/node/config/doc_gen.go +++ b/node/config/doc_gen.go @@ -3,7 +3,7 @@ package config type DocField struct { - Name string + Num string Type string Comment string } @@ -11,19 +11,19 @@ type DocField struct { var Doc = map[string][]DocField{ "API": []DocField{ { - Name: "ListenAddress", + Num: "ListenAddress", Type: "string", Comment: `Binding address for the Lotus API`, }, { - Name: "RemoteListenAddress", + Num: "RemoteListenAddress", Type: "string", Comment: ``, }, { - Name: "Timeout", + Num: "Timeout", Type: "Duration", Comment: ``, @@ -31,7 +31,7 @@ var Doc = map[string][]DocField{ }, "Backup": []DocField{ { - Name: "DisableMetadataLog", + Num: "DisableMetadataLog", Type: "bool", Comment: `When set to true disables metadata log (.lotus/kvlog). This can save disk @@ -43,13 +43,13 @@ your node if metadata log is disabled`, }, "BatchFeeConfig": []DocField{ { - Name: "Base", + Num: "Base", Type: "types.FIL", Comment: ``, }, { - Name: "PerSector", + Num: "PerSector", Type: "types.FIL", Comment: ``, @@ -57,13 +57,13 @@ your node if metadata log is disabled`, }, "Chainstore": []DocField{ { - Name: "EnableSplitstore", + Num: "EnableSplitstore", Type: "bool", Comment: ``, }, { - Name: "Splitstore", + Num: "Splitstore", Type: "Splitstore", Comment: ``, @@ -71,45 +71,45 @@ your node if metadata log is disabled`, }, "Client": []DocField{ { - Name: "UseIpfs", + Num: "UseIpfs", Type: "bool", Comment: ``, }, { - Name: "IpfsOnlineMode", + Num: "IpfsOnlineMode", Type: "bool", Comment: ``, }, { - Name: "IpfsMAddr", + Num: "IpfsMAddr", Type: "string", Comment: ``, }, { - Name: "IpfsUseForRetrieval", + Num: "IpfsUseForRetrieval", Type: "bool", Comment: ``, }, { - Name: "SimultaneousTransfersForStorage", + Num: "SimultaneousTransfersForStorage", Type: "uint64", Comment: `The maximum number of simultaneous data transfers between the client and storage providers for storage deals`, }, { - Name: "SimultaneousTransfersForRetrieval", + Num: "SimultaneousTransfersForRetrieval", Type: "uint64", Comment: `The maximum number of simultaneous data transfers between the client and storage providers for retrieval deals`, }, { - Name: "OffChainRetrieval", + Num: "OffChainRetrieval", Type: "bool", Comment: `Require that retrievals perform no on-chain operations. Paid retrievals @@ -119,21 +119,19 @@ of automatically performing on-chain operations.`, }, "ClusterRaftConfig": []DocField{ { - Name: "HostShutdown", + Num: "HostShutdown", Type: "bool", - Comment: `config.Saver - -will shutdown libp2p host on shutdown. Useful for testing`, + Comment: `will shutdown libp2p host on shutdown. Useful for testing`, }, { - Name: "DataFolder", + Num: "DataFolder", Type: "string", Comment: `A folder to store Raft's data.`, }, { - Name: "InitPeerset", + Num: "InitPeerset", Type: "[]peer.ID", Comment: `InitPeerset provides the list of initial cluster peers for new Raft @@ -141,53 +139,53 @@ peers (with no prior state). It is ignored when Raft was already initialized or when starting in staging mode.`, }, { - Name: "WaitForLeaderTimeout", + Num: "WaitForLeaderTimeout", Type: "time.Duration", Comment: `LeaderTimeout specifies how long to wait for a leader before failing an operation.`, }, { - Name: "NetworkTimeout", + Num: "NetworkTimeout", Type: "time.Duration", Comment: `NetworkTimeout specifies how long before a Raft network operation is timed out`, }, { - Name: "CommitRetries", + Num: "CommitRetries", Type: "int", Comment: `CommitRetries specifies how many times we retry a failed commit until we give up.`, }, { - Name: "CommitRetryDelay", + Num: "CommitRetryDelay", Type: "time.Duration", Comment: `How long to wait between retries`, }, { - Name: "BackupsRotate", + Num: "BackupsRotate", Type: "int", Comment: `BackupsRotate specifies the maximum number of Raft's DataFolder copies that we keep as backups (renaming) after cleanup.`, }, { - Name: "DatastoreNamespace", + Num: "DatastoreNamespace", Type: "string", Comment: `Namespace to use when writing keys to the datastore`, }, { - Name: "RaftConfig", + Num: "RaftConfig", Type: "*hraft.Config", Comment: `A Hashicorp Raft's configuration object.`, }, { - Name: "Tracing", + Num: "Tracing", Type: "bool", Comment: `Tracing enables propagation of contexts across binary boundaries.`, @@ -195,31 +193,31 @@ copies that we keep as backups (renaming) after cleanup.`, }, "Common": []DocField{ { - Name: "API", + Num: "API", Type: "API", Comment: ``, }, { - Name: "Backup", + Num: "Backup", Type: "Backup", Comment: ``, }, { - Name: "Logging", + Num: "Logging", Type: "Logging", Comment: ``, }, { - Name: "Libp2p", + Num: "Libp2p", Type: "Libp2p", Comment: ``, }, { - Name: "Pubsub", + Num: "Pubsub", Type: "Pubsub", Comment: ``, @@ -227,7 +225,7 @@ copies that we keep as backups (renaming) after cleanup.`, }, "DAGStoreConfig": []DocField{ { - Name: "RootDir", + Num: "RootDir", Type: "string", Comment: `Path to the dagstore root directory. This directory contains three @@ -242,7 +240,7 @@ Default value: /dagstore (split deployment) or /dagstore (monolith deployment)`, }, { - Name: "MaxConcurrentIndex", + Num: "MaxConcurrentIndex", Type: "int", Comment: `The maximum amount of indexing jobs that can run simultaneously. @@ -250,7 +248,7 @@ Default value: /dagstore (split deployment) or Default value: 5.`, }, { - Name: "MaxConcurrentReadyFetches", + Num: "MaxConcurrentReadyFetches", Type: "int", Comment: `The maximum amount of unsealed deals that can be fetched simultaneously @@ -258,7 +256,7 @@ from the storage subsystem. 0 means unlimited. Default value: 0 (unlimited).`, }, { - Name: "MaxConcurrentUnseals", + Num: "MaxConcurrentUnseals", Type: "int", Comment: `The maximum amount of unseals that can be processed simultaneously @@ -266,7 +264,7 @@ from the storage subsystem. 0 means unlimited. Default value: 0 (unlimited).`, }, { - Name: "MaxConcurrencyStorageCalls", + Num: "MaxConcurrencyStorageCalls", Type: "int", Comment: `The maximum number of simultaneous inflight API calls to the storage @@ -274,7 +272,7 @@ subsystem. Default value: 100.`, }, { - Name: "GCInterval", + Num: "GCInterval", Type: "Duration", Comment: `The time between calls to periodic dagstore GC, in time.Duration string @@ -284,49 +282,49 @@ Default value: 1 minute.`, }, "DealmakingConfig": []DocField{ { - Name: "ConsiderOnlineStorageDeals", + Num: "ConsiderOnlineStorageDeals", Type: "bool", Comment: `When enabled, the miner can accept online deals`, }, { - Name: "ConsiderOfflineStorageDeals", + Num: "ConsiderOfflineStorageDeals", Type: "bool", Comment: `When enabled, the miner can accept offline deals`, }, { - Name: "ConsiderOnlineRetrievalDeals", + Num: "ConsiderOnlineRetrievalDeals", Type: "bool", Comment: `When enabled, the miner can accept retrieval deals`, }, { - Name: "ConsiderOfflineRetrievalDeals", + Num: "ConsiderOfflineRetrievalDeals", Type: "bool", Comment: `When enabled, the miner can accept offline retrieval deals`, }, { - Name: "ConsiderVerifiedStorageDeals", + Num: "ConsiderVerifiedStorageDeals", Type: "bool", Comment: `When enabled, the miner can accept verified deals`, }, { - Name: "ConsiderUnverifiedStorageDeals", + Num: "ConsiderUnverifiedStorageDeals", Type: "bool", Comment: `When enabled, the miner can accept unverified deals`, }, { - Name: "PieceCidBlocklist", + Num: "PieceCidBlocklist", Type: "[]cid.Cid", Comment: `A list of Data CIDs to reject when making deals`, }, { - Name: "ExpectedSealDuration", + Num: "ExpectedSealDuration", Type: "Duration", Comment: `Maximum expected amount of time getting the deal into a sealed sector will take @@ -334,47 +332,47 @@ This includes the time the deal will need to get transferred and published before being assigned to a sector`, }, { - Name: "MaxDealStartDelay", + Num: "MaxDealStartDelay", Type: "Duration", Comment: `Maximum amount of time proposed deal StartEpoch can be in future`, }, { - Name: "PublishMsgPeriod", + Num: "PublishMsgPeriod", Type: "Duration", Comment: `When a deal is ready to publish, the amount of time to wait for more deals to be ready to publish before publishing them all as a batch`, }, { - Name: "MaxDealsPerPublishMsg", + Num: "MaxDealsPerPublishMsg", Type: "uint64", Comment: `The maximum number of deals to include in a single PublishStorageDeals message`, }, { - Name: "MaxProviderCollateralMultiplier", + Num: "MaxProviderCollateralMultiplier", Type: "uint64", Comment: `The maximum collateral that the provider will put up against a deal, as a multiplier of the minimum collateral bound`, }, { - Name: "MaxStagingDealsBytes", + Num: "MaxStagingDealsBytes", Type: "int64", Comment: `The maximum allowed disk usage size in bytes of staging deals not yet passed to the sealing node by the markets service. 0 is unlimited.`, }, { - Name: "SimultaneousTransfersForStorage", + Num: "SimultaneousTransfersForStorage", Type: "uint64", Comment: `The maximum number of parallel online data transfers for storage deals`, }, { - Name: "SimultaneousTransfersForStoragePerClient", + Num: "SimultaneousTransfersForStoragePerClient", Type: "uint64", Comment: `The maximum number of simultaneous data transfers from any single client @@ -385,33 +383,33 @@ across all storage clients is bound by SimultaneousTransfersForStorage regardless of this number.`, }, { - Name: "SimultaneousTransfersForRetrieval", + Num: "SimultaneousTransfersForRetrieval", Type: "uint64", Comment: `The maximum number of parallel online data transfers for retrieval deals`, }, { - Name: "StartEpochSealingBuffer", + Num: "StartEpochSealingBuffer", Type: "uint64", Comment: `Minimum start epoch buffer to give time for sealing of sector with deal.`, }, { - Name: "Filter", + Num: "Filter", Type: "string", Comment: `A command used for fine-grained evaluation of storage deals see https://docs.filecoin.io/mine/lotus/miner-configuration/#using-filters-for-fine-grained-storage-and-retrieval-deal-acceptance for more details`, }, { - Name: "RetrievalFilter", + Num: "RetrievalFilter", Type: "string", Comment: `A command used for fine-grained evaluation of retrieval deals see https://docs.filecoin.io/mine/lotus/miner-configuration/#using-filters-for-fine-grained-storage-and-retrieval-deal-acceptance for more details`, }, { - Name: "RetrievalPricing", + Num: "RetrievalPricing", Type: "*RetrievalPricing", Comment: ``, @@ -419,7 +417,7 @@ see https://docs.filecoin.io/mine/lotus/miner-configuration/#using-filters-for-f }, "FeeConfig": []DocField{ { - Name: "DefaultMaxFee", + Num: "DefaultMaxFee", Type: "types.FIL", Comment: ``, @@ -427,31 +425,31 @@ see https://docs.filecoin.io/mine/lotus/miner-configuration/#using-filters-for-f }, "FullNode": []DocField{ { - Name: "Client", + Num: "Client", Type: "Client", Comment: ``, }, { - Name: "Wallet", + Num: "Wallet", Type: "Wallet", Comment: ``, }, { - Name: "Fees", + Num: "Fees", Type: "FeeConfig", Comment: ``, }, { - Name: "Chainstore", + Num: "Chainstore", Type: "Chainstore", Comment: ``, }, { - Name: "Raft", + Num: "Raft", Type: "ClusterRaftConfig", Comment: ``, @@ -459,14 +457,14 @@ see https://docs.filecoin.io/mine/lotus/miner-configuration/#using-filters-for-f }, "IndexProviderConfig": []DocField{ { - Name: "Enable", + Num: "Enable", Type: "bool", Comment: `Enable set whether to enable indexing announcement to the network and expose endpoints that allow indexer nodes to process announcements. Enabled by default.`, }, { - Name: "EntriesCacheCapacity", + Num: "EntriesCacheCapacity", Type: "int", Comment: `EntriesCacheCapacity sets the maximum capacity to use for caching the indexing advertisement @@ -477,7 +475,7 @@ with the default EntriesCacheCapacity, and EntriesChunkSize means the cache size 256MiB when full.`, }, { - Name: "EntriesChunkSize", + Num: "EntriesChunkSize", Type: "int", Comment: `EntriesChunkSize sets the maximum number of multihashes to include in a single entries chunk. @@ -485,7 +483,7 @@ Defaults to 16384 if not specified. Note that chunks are chained together for in advertisements that include more multihashes than the configured EntriesChunkSize.`, }, { - Name: "TopicName", + Num: "TopicName", Type: "string", Comment: `TopicName sets the topic name on which the changes to the advertised content are announced. @@ -494,7 +492,7 @@ in following format: '/indexer/ingest/' Defaults to empty, which implies the topic name is inferred from network name.`, }, { - Name: "PurgeCacheOnStart", + Num: "PurgeCacheOnStart", Type: "bool", Comment: `PurgeCacheOnStart sets whether to clear any cached entries chunks when the provider engine @@ -504,14 +502,14 @@ datastore if any is present.`, }, "Libp2p": []DocField{ { - Name: "ListenAddresses", + Num: "ListenAddresses", Type: "[]string", Comment: `Binding address for the libp2p host - 0 means random port. Format: multiaddress; see https://multiformats.io/multiaddr/`, }, { - Name: "AnnounceAddresses", + Num: "AnnounceAddresses", Type: "[]string", Comment: `Addresses to explicitally announce to other peers. If not specified, @@ -519,26 +517,26 @@ all interface addresses are announced Format: multiaddress`, }, { - Name: "NoAnnounceAddresses", + Num: "NoAnnounceAddresses", Type: "[]string", Comment: `Addresses to not announce Format: multiaddress`, }, { - Name: "BootstrapPeers", + Num: "BootstrapPeers", Type: "[]string", Comment: ``, }, { - Name: "ProtectedPeers", + Num: "ProtectedPeers", Type: "[]string", Comment: ``, }, { - Name: "DisableNatPortMap", + Num: "DisableNatPortMap", Type: "bool", Comment: `When not disabled (default), lotus asks NAT devices (e.g., routers), to @@ -547,14 +545,14 @@ When this works (i.e., when your router supports NAT port forwarding), it makes the local lotus node accessible from the public internet`, }, { - Name: "ConnMgrLow", + Num: "ConnMgrLow", Type: "uint", Comment: `ConnMgrLow is the number of connections that the basic connection manager will trim down to.`, }, { - Name: "ConnMgrHigh", + Num: "ConnMgrHigh", Type: "uint", Comment: `ConnMgrHigh is the number of connections that, when exceeded, will trigger @@ -562,7 +560,7 @@ a connection GC operation. Note: protected/recently formed connections don't count towards this limit.`, }, { - Name: "ConnMgrGrace", + Num: "ConnMgrGrace", Type: "Duration", Comment: `ConnMgrGrace is a time duration that new connections are immune from being @@ -571,7 +569,7 @@ closed by the connection manager.`, }, "Logging": []DocField{ { - Name: "SubsystemLevels", + Num: "SubsystemLevels", Type: "map[string]string", Comment: `SubsystemLevels specify per-subsystem log levels`, @@ -579,38 +577,38 @@ closed by the connection manager.`, }, "MinerAddressConfig": []DocField{ { - Name: "PreCommitControl", + Num: "PreCommitControl", Type: "[]string", Comment: `Addresses to send PreCommit messages from`, }, { - Name: "CommitControl", + Num: "CommitControl", Type: "[]string", Comment: `Addresses to send Commit messages from`, }, { - Name: "TerminateControl", + Num: "TerminateControl", Type: "[]string", Comment: ``, }, { - Name: "DealPublishControl", + Num: "DealPublishControl", Type: "[]string", Comment: ``, }, { - Name: "DisableOwnerFallback", + Num: "DisableOwnerFallback", Type: "bool", Comment: `DisableOwnerFallback disables usage of the owner address for messages sent automatically`, }, { - Name: "DisableWorkerFallback", + Num: "DisableWorkerFallback", Type: "bool", Comment: `DisableWorkerFallback disables usage of the worker address for messages @@ -621,49 +619,49 @@ over the worker address if this flag is set.`, }, "MinerFeeConfig": []DocField{ { - Name: "MaxPreCommitGasFee", + Num: "MaxPreCommitGasFee", Type: "types.FIL", Comment: ``, }, { - Name: "MaxCommitGasFee", + Num: "MaxCommitGasFee", Type: "types.FIL", Comment: ``, }, { - Name: "MaxPreCommitBatchGasFee", + Num: "MaxPreCommitBatchGasFee", Type: "BatchFeeConfig", Comment: `maxBatchFee = maxBase + maxPerSector * nSectors`, }, { - Name: "MaxCommitBatchGasFee", + Num: "MaxCommitBatchGasFee", Type: "BatchFeeConfig", Comment: ``, }, { - Name: "MaxTerminateGasFee", + Num: "MaxTerminateGasFee", Type: "types.FIL", Comment: ``, }, { - Name: "MaxWindowPoStGasFee", + Num: "MaxWindowPoStGasFee", Type: "types.FIL", Comment: `WindowPoSt is a high-value operation, so the default fee should be high.`, }, { - Name: "MaxPublishDealsFee", + Num: "MaxPublishDealsFee", Type: "types.FIL", Comment: ``, }, { - Name: "MaxMarketBalanceAddFee", + Num: "MaxMarketBalanceAddFee", Type: "types.FIL", Comment: ``, @@ -671,37 +669,37 @@ over the worker address if this flag is set.`, }, "MinerSubsystemConfig": []DocField{ { - Name: "EnableMining", + Num: "EnableMining", Type: "bool", Comment: ``, }, { - Name: "EnableSealing", + Num: "EnableSealing", Type: "bool", Comment: ``, }, { - Name: "EnableSectorStorage", + Num: "EnableSectorStorage", Type: "bool", Comment: ``, }, { - Name: "EnableMarkets", + Num: "EnableMarkets", Type: "bool", Comment: ``, }, { - Name: "SealerApiInfo", + Num: "SealerApiInfo", Type: "string", Comment: ``, }, { - Name: "SectorIndexApiInfo", + Num: "SectorIndexApiInfo", Type: "string", Comment: ``, @@ -709,7 +707,7 @@ over the worker address if this flag is set.`, }, "ProvingConfig": []DocField{ { - Name: "ParallelCheckLimit", + Num: "ParallelCheckLimit", Type: "int", Comment: `Maximum number of sector checks to run in parallel. (0 = unlimited) @@ -722,7 +720,7 @@ After changing this option, confirm that the new value works in your setup by in 'lotus-miner proving compute window-post 0'`, }, { - Name: "DisableBuiltinWindowPoSt", + Num: "DisableBuiltinWindowPoSt", Type: "bool", Comment: `Disable Window PoSt computation on the lotus-miner process even if no window PoSt workers are present. @@ -734,7 +732,7 @@ After changing this option, confirm that the new value works in your setup by in 'lotus-miner proving compute window-post 0'`, }, { - Name: "DisableBuiltinWinningPoSt", + Num: "DisableBuiltinWinningPoSt", Type: "bool", Comment: `Disable Winning PoSt computation on the lotus-miner process even if no winning PoSt workers are present. @@ -743,7 +741,7 @@ WARNING: If no WinningPoSt workers are connected, Winning PoSt WILL FAIL resulti Before enabling this option, make sure your PoSt workers work correctly.`, }, { - Name: "DisableWDPoStPreChecks", + Num: "DisableWDPoStPreChecks", Type: "bool", Comment: `Disable WindowPoSt provable sector readability checks. @@ -772,7 +770,7 @@ After changing this option, confirm that the new value works in your setup by in 'lotus-miner proving compute window-post 0'`, }, { - Name: "MaxPartitionsPerPoStMessage", + Num: "MaxPartitionsPerPoStMessage", Type: "int", Comment: `Maximum number of partitions to prove in a single SubmitWindowPoSt messace. 0 = network limit (10 in nv16) @@ -790,7 +788,7 @@ to prove each deadline, resulting in more total gas use (but each message will h Setting this value above the network limit has no effect`, }, { - Name: "MaxPartitionsPerRecoveryMessage", + Num: "MaxPartitionsPerRecoveryMessage", Type: "int", Comment: `In some cases when submitting DeclareFaultsRecovered messages, @@ -802,13 +800,13 @@ resulting in more total gas use (but each message will have lower gas limit)`, }, "Pubsub": []DocField{ { - Name: "Bootstrapper", + Num: "Bootstrapper", Type: "bool", Comment: `Run the node in bootstrap-node mode`, }, { - Name: "DirectPeers", + Num: "DirectPeers", Type: "[]string", Comment: `DirectPeers specifies peers with direct peering agreements. These peers are @@ -819,13 +817,13 @@ symmetrically configured at both ends. Type: Array of multiaddress peerinfo strings, must include peerid (/p2p/12D3K...`, }, { - Name: "IPColocationWhitelist", + Num: "IPColocationWhitelist", Type: "[]string", Comment: ``, }, { - Name: "RemoteTracer", + Num: "RemoteTracer", Type: "string", Comment: ``, @@ -833,19 +831,19 @@ Type: Array of multiaddress peerinfo strings, must include peerid (/p2p/12D3K... }, "RetrievalPricing": []DocField{ { - Name: "Strategy", + Num: "Strategy", Type: "string", Comment: ``, }, { - Name: "Default", + Num: "Default", Type: "*RetrievalPricingDefault", Comment: ``, }, { - Name: "External", + Num: "External", Type: "*RetrievalPricingExternal", Comment: ``, @@ -853,7 +851,7 @@ Type: Array of multiaddress peerinfo strings, must include peerid (/p2p/12D3K... }, "RetrievalPricingDefault": []DocField{ { - Name: "VerifiedDealsFreeTransfer", + Num: "VerifiedDealsFreeTransfer", Type: "bool", Comment: `VerifiedDealsFreeTransfer configures zero fees for data transfer for a retrieval deal @@ -864,7 +862,7 @@ default value is true`, }, "RetrievalPricingExternal": []DocField{ { - Name: "Path", + Num: "Path", Type: "string", Comment: `Path of the external script that will be run to price a retrieval deal. @@ -873,68 +871,68 @@ This parameter is ONLY applicable if the retrieval pricing policy strategy has b }, "SealerConfig": []DocField{ { - Name: "ParallelFetchLimit", + Num: "ParallelFetchLimit", Type: "int", Comment: ``, }, { - Name: "AllowAddPiece", + Num: "AllowAddPiece", Type: "bool", Comment: `Local worker config`, }, { - Name: "AllowPreCommit1", + Num: "AllowPreCommit1", Type: "bool", Comment: ``, }, { - Name: "AllowPreCommit2", + Num: "AllowPreCommit2", Type: "bool", Comment: ``, }, { - Name: "AllowCommit", + Num: "AllowCommit", Type: "bool", Comment: ``, }, { - Name: "AllowUnseal", + Num: "AllowUnseal", Type: "bool", Comment: ``, }, { - Name: "AllowReplicaUpdate", + Num: "AllowReplicaUpdate", Type: "bool", Comment: ``, }, { - Name: "AllowProveReplicaUpdate2", + Num: "AllowProveReplicaUpdate2", Type: "bool", Comment: ``, }, { - Name: "AllowRegenSectorKey", + Num: "AllowRegenSectorKey", Type: "bool", Comment: ``, }, { - Name: "LocalWorkerName", + Num: "LocalWorkerName", Type: "string", Comment: `LocalWorkerName specifies a custom name for the builtin worker. If set to an empty string (default) os hostname will be used`, }, { - Name: "Assigner", + Num: "Assigner", Type: "string", Comment: `Assigner specifies the worker assigner to use when scheduling tasks. @@ -942,7 +940,7 @@ If set to an empty string (default) os hostname will be used`, "spread" - assign tasks to as many distinct workers as possible.`, }, { - Name: "DisallowRemoteFinalize", + Num: "DisallowRemoteFinalize", Type: "bool", Comment: `DisallowRemoteFinalize when set to true will force all Finalize tasks to @@ -958,7 +956,7 @@ If you see stuck Finalize tasks after enabling this setting, check 'lotus-miner sealing sched-diag' and 'lotus-miner storage find [sector num]'`, }, { - Name: "ResourceFiltering", + Num: "ResourceFiltering", Type: "sealer.ResourceFilteringStrategy", Comment: `ResourceFiltering instructs the system which resource filtering strategy @@ -968,7 +966,7 @@ to "hardware".`, }, "SealingConfig": []DocField{ { - Name: "MaxWaitDealsSectors", + Num: "MaxWaitDealsSectors", Type: "uint64", Comment: `Upper bound on how many sectors can be waiting for more deals to be packed in it before it begins sealing at any given time. @@ -978,19 +976,19 @@ Note that setting this number too high in relation to deal ingestion rate may re 0 = no limit`, }, { - Name: "MaxSealingSectors", + Num: "MaxSealingSectors", Type: "uint64", Comment: `Upper bound on how many sectors can be sealing+upgrading at the same time when creating new CC sectors (0 = unlimited)`, }, { - Name: "MaxSealingSectorsForDeals", + Num: "MaxSealingSectorsForDeals", Type: "uint64", Comment: `Upper bound on how many sectors can be sealing+upgrading at the same time when creating new sectors with deals (0 = unlimited)`, }, { - Name: "PreferNewSectorsForDeals", + Num: "PreferNewSectorsForDeals", Type: "bool", Comment: `Prefer creating new sectors even if there are sectors Available for upgrading. @@ -999,13 +997,13 @@ possible to use fast sector upgrades to handle high volumes of storage deals, wh flow when the volume of storage deals is lower.`, }, { - Name: "MaxUpgradingSectors", + Num: "MaxUpgradingSectors", Type: "uint64", Comment: `Upper bound on how many sectors can be sealing+upgrading at the same time when upgrading CC sectors with deals (0 = MaxSealingSectorsForDeals)`, }, { - Name: "CommittedCapacitySectorLifetime", + Num: "CommittedCapacitySectorLifetime", Type: "Duration", Comment: `CommittedCapacitySectorLifetime is the duration a Committed Capacity (CC) sector will @@ -1013,27 +1011,27 @@ live before it must be extended or converted into sector containing deals before terminated. Value must be between 180-540 days inclusive`, }, { - Name: "WaitDealsDelay", + Num: "WaitDealsDelay", Type: "Duration", Comment: `Period of time that a newly created sector will wait for more deals to be packed in to before it starts to seal. Sectors which are fully filled will start sealing immediately`, }, { - Name: "AlwaysKeepUnsealedCopy", + Num: "AlwaysKeepUnsealedCopy", Type: "bool", Comment: `Whether to keep unsealed copies of deal data regardless of whether the client requested that. This lets the miner avoid the relatively high cost of unsealing the data later, at the cost of more storage space`, }, { - Name: "FinalizeEarly", + Num: "FinalizeEarly", Type: "bool", Comment: `Run sector finalization before submitting sector proof to the chain`, }, { - Name: "MakeNewSectorForDeals", + Num: "MakeNewSectorForDeals", Type: "bool", Comment: `Whether new sectors are created to pack incoming deals @@ -1041,111 +1039,111 @@ When this is set to false no new sectors will be created for sealing incoming de This is useful for forcing all deals to be assigned as snap deals to sectors marked for upgrade`, }, { - Name: "MakeCCSectorsAvailable", + Num: "MakeCCSectorsAvailable", Type: "bool", Comment: `After sealing CC sectors, make them available for upgrading with deals`, }, { - Name: "CollateralFromMinerBalance", + Num: "CollateralFromMinerBalance", Type: "bool", Comment: `Whether to use available miner balance for sector collateral instead of sending it with each message`, }, { - Name: "AvailableBalanceBuffer", + Num: "AvailableBalanceBuffer", Type: "types.FIL", Comment: `Minimum available balance to keep in the miner actor before sending it with messages`, }, { - Name: "DisableCollateralFallback", + Num: "DisableCollateralFallback", Type: "bool", Comment: `Don't send collateral with messages even if there is no available balance in the miner actor`, }, { - Name: "BatchPreCommits", + Num: "BatchPreCommits", Type: "bool", Comment: `enable / disable precommit batching (takes effect after nv13)`, }, { - Name: "MaxPreCommitBatch", + Num: "MaxPreCommitBatch", Type: "int", Comment: `maximum precommit batch size - batches will be sent immediately above this size`, }, { - Name: "PreCommitBatchWait", + Num: "PreCommitBatchWait", Type: "Duration", Comment: `how long to wait before submitting a batch after crossing the minimum batch size`, }, { - Name: "PreCommitBatchSlack", + Num: "PreCommitBatchSlack", Type: "Duration", Comment: `time buffer for forceful batch submission before sectors/deal in batch would start expiring`, }, { - Name: "AggregateCommits", + Num: "AggregateCommits", Type: "bool", Comment: `enable / disable commit aggregation (takes effect after nv13)`, }, { - Name: "MinCommitBatch", + Num: "MinCommitBatch", Type: "int", Comment: `minimum batched commit size - batches above this size will eventually be sent on a timeout`, }, { - Name: "MaxCommitBatch", + Num: "MaxCommitBatch", Type: "int", Comment: `maximum batched commit size - batches will be sent immediately above this size`, }, { - Name: "CommitBatchWait", + Num: "CommitBatchWait", Type: "Duration", Comment: `how long to wait before submitting a batch after crossing the minimum batch size`, }, { - Name: "CommitBatchSlack", + Num: "CommitBatchSlack", Type: "Duration", Comment: `time buffer for forceful batch submission before sectors/deals in batch would start expiring`, }, { - Name: "BatchPreCommitAboveBaseFee", + Num: "BatchPreCommitAboveBaseFee", Type: "types.FIL", Comment: `network BaseFee below which to stop doing precommit batching, instead sending precommit messages to the chain individually`, }, { - Name: "AggregateAboveBaseFee", + Num: "AggregateAboveBaseFee", Type: "types.FIL", Comment: `network BaseFee below which to stop doing commit aggregation, instead submitting proofs to the chain individually`, }, { - Name: "TerminateBatchMax", + Num: "TerminateBatchMax", Type: "uint64", Comment: ``, }, { - Name: "TerminateBatchMin", + Num: "TerminateBatchMin", Type: "uint64", Comment: ``, }, { - Name: "TerminateBatchWait", + Num: "TerminateBatchWait", Type: "Duration", Comment: ``, @@ -1153,35 +1151,35 @@ submitting proofs to the chain individually`, }, "Splitstore": []DocField{ { - Name: "ColdStoreType", + Num: "ColdStoreType", Type: "string", Comment: `ColdStoreType specifies the type of the coldstore. It can be "universal" (default) or "discard" for discarding cold blocks.`, }, { - Name: "HotStoreType", + Num: "HotStoreType", Type: "string", Comment: `HotStoreType specifies the type of the hotstore. Only currently supported value is "badger".`, }, { - Name: "MarkSetType", + Num: "MarkSetType", Type: "string", Comment: `MarkSetType specifies the type of the markset. It can be "map" for in memory marking or "badger" (default) for on-disk marking.`, }, { - Name: "HotStoreMessageRetention", + Num: "HotStoreMessageRetention", Type: "uint64", Comment: `HotStoreMessageRetention specifies the retention policy for messages, in finalities beyond the compaction boundary; default is 0.`, }, { - Name: "HotStoreFullGCFrequency", + Num: "HotStoreFullGCFrequency", Type: "uint64", Comment: `HotStoreFullGCFrequency specifies how often to perform a full (moving) GC on the hotstore. @@ -1189,7 +1187,7 @@ A value of 0 disables, while a value 1 will do full GC in every compaction. Default is 20 (about once a week).`, }, { - Name: "EnableColdStoreAutoPrune", + Num: "EnableColdStoreAutoPrune", Type: "bool", Comment: `EnableColdStoreAutoPrune turns on compaction of the cold store i.e. pruning @@ -1197,7 +1195,7 @@ where hotstore compaction occurs every finality epochs pruning happens every 3 f Default is false`, }, { - Name: "ColdStoreFullGCFrequency", + Num: "ColdStoreFullGCFrequency", Type: "uint64", Comment: `ColdStoreFullGCFrequency specifies how often to performa a full (moving) GC on the coldstore. @@ -1206,7 +1204,7 @@ full GC in every prune. Default is 7 (about once every a week)`, }, { - Name: "ColdStoreRetention", + Num: "ColdStoreRetention", Type: "int64", Comment: `ColdStoreRetention specifies the retention policy for data reachable from the chain, in @@ -1215,55 +1213,55 @@ finalities beyond the compaction boundary, default is 0, -1 retains everything`, }, "StorageMiner": []DocField{ { - Name: "Subsystems", + Num: "Subsystems", Type: "MinerSubsystemConfig", Comment: ``, }, { - Name: "Dealmaking", + Num: "Dealmaking", Type: "DealmakingConfig", Comment: ``, }, { - Name: "IndexProvider", + Num: "IndexProvider", Type: "IndexProviderConfig", Comment: ``, }, { - Name: "Proving", + Num: "Proving", Type: "ProvingConfig", Comment: ``, }, { - Name: "Sealing", + Num: "Sealing", Type: "SealingConfig", Comment: ``, }, { - Name: "Storage", + Num: "Storage", Type: "SealerConfig", Comment: ``, }, { - Name: "Fees", + Num: "Fees", Type: "MinerFeeConfig", Comment: ``, }, { - Name: "Addresses", + Num: "Addresses", Type: "MinerAddressConfig", Comment: ``, }, { - Name: "DAGStore", + Num: "DAGStore", Type: "DAGStoreConfig", Comment: ``, @@ -1271,19 +1269,19 @@ finalities beyond the compaction boundary, default is 0, -1 retains everything`, }, "Wallet": []DocField{ { - Name: "RemoteBackend", + Num: "RemoteBackend", Type: "string", Comment: ``, }, { - Name: "EnableLedger", + Num: "EnableLedger", Type: "bool", Comment: ``, }, { - Name: "DisableLocal", + Num: "DisableLocal", Type: "bool", Comment: ``, diff --git a/node/config/doc_util.go b/node/config/doc_util.go index b88333238..4da94948f 100644 --- a/node/config/doc_util.go +++ b/node/config/doc_util.go @@ -16,7 +16,7 @@ func findDoc(root interface{}, section, name string) *DocField { return findDocSect("Common", section, name) } -func findDocSect(root, section, name string) *DocField { +func findDocSect(root, section, num string) *DocField { path := strings.Split(section, ".") docSection := Doc[root] @@ -26,7 +26,7 @@ func findDocSect(root, section, name string) *DocField { } for _, field := range docSection { - if field.Name == e { + if field.Num == e { docSection = Doc[field.Type] break } @@ -35,7 +35,7 @@ func findDocSect(root, section, name string) *DocField { } for _, df := range docSection { - if df.Name == name { + if df.Num == num { return &df } } diff --git a/node/config/types.go b/node/config/types.go index 735f26c1a..a5ee6b78e 100644 --- a/node/config/types.go +++ b/node/config/types.go @@ -1,10 +1,11 @@ package config import ( + "time" + hraft "github.com/hashicorp/raft" "github.com/ipfs/go-cid" "github.com/libp2p/go-libp2p/core/peer" - "time" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/storage/sealer" diff --git a/node/impl/full/mpool.go b/node/impl/full/mpool.go index 71c047fc3..e28c4daed 100644 --- a/node/impl/full/mpool.go +++ b/node/impl/full/mpool.go @@ -3,6 +3,7 @@ package full import ( "context" "encoding/json" + "github.com/ipfs/go-cid" consensus "github.com/libp2p/go-libp2p-consensus" "github.com/libp2p/go-libp2p/core/peer" diff --git a/node/impl/full/multisig.go b/node/impl/full/multisig.go index 8438f7419..886d66d5e 100644 --- a/node/impl/full/multisig.go +++ b/node/impl/full/multisig.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" @@ -29,7 +30,7 @@ func (a *MsigAPI) messageBuilder(ctx context.Context, from address.Address) (mul if err != nil { return nil, err } - av, err := actors.VersionForNetwork(nver) + av, err := actorstypes.VersionForNetwork(nver) if err != nil { return nil, err } diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 08800ba10..1c062d6d6 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -16,8 +16,9 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/cbor" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" @@ -1185,16 +1186,20 @@ func (a *StateAPI) StateMinerPreCommitDepositForPower(ctx context.Context, maddr store := a.Chain.ActorStore(ctx) var sectorWeight abi.StoragePower - if act, err := state.GetActor(market.Address); err != nil { - return types.EmptyInt, xerrors.Errorf("loading market actor %s: %w", maddr, err) - } else if s, err := market.Load(store, act); err != nil { - return types.EmptyInt, xerrors.Errorf("loading market actor state %s: %w", maddr, err) - } else if w, vw, err := s.VerifyDealsForActivation(maddr, pci.DealIDs, ts.Height(), pci.Expiration); err != nil { - return types.EmptyInt, xerrors.Errorf("verifying deals for activation: %w", err) + if a.StateManager.GetNetworkVersion(ctx, ts.Height()) <= network.Version16 { + if act, err := state.GetActor(market.Address); err != nil { + return types.EmptyInt, xerrors.Errorf("loading market actor %s: %w", maddr, err) + } else if s, err := market.Load(store, act); err != nil { + return types.EmptyInt, xerrors.Errorf("loading market actor state %s: %w", maddr, err) + } else if w, vw, err := s.VerifyDealsForActivation(maddr, pci.DealIDs, ts.Height(), pci.Expiration); err != nil { + return types.EmptyInt, xerrors.Errorf("verifying deals for activation: %w", err) + } else { + // NB: not exactly accurate, but should always lead us to *over* estimate, not under + duration := pci.Expiration - ts.Height() + sectorWeight = builtin.QAPowerForWeight(ssize, duration, w, vw) + } } else { - // NB: not exactly accurate, but should always lead us to *over* estimate, not under - duration := pci.Expiration - ts.Height() - sectorWeight = builtin.QAPowerForWeight(ssize, duration, w, vw) + sectorWeight = minertypes.QAPowerMax(ssize) } var powerSmoothed builtin.FilterEstimate @@ -1536,7 +1541,7 @@ func (m *StateModule) StateNetworkVersion(ctx context.Context, tsk types.TipSetK } func (a *StateAPI) StateActorCodeCIDs(ctx context.Context, nv network.Version) (map[string]cid.Cid, error) { - actorVersion, err := actors.VersionForNetwork(nv) + actorVersion, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, xerrors.Errorf("invalid network version %d: %w", nv, err) } @@ -1550,7 +1555,7 @@ func (a *StateAPI) StateActorCodeCIDs(ctx context.Context, nv network.Version) ( } func (a *StateAPI) StateActorManifestCID(ctx context.Context, nv network.Version) (cid.Cid, error) { - actorVersion, err := actors.VersionForNetwork(nv) + actorVersion, err := actorstypes.VersionForNetwork(nv) if err != nil { return cid.Undef, xerrors.Errorf("invalid network version") } diff --git a/node/impl/storminer.go b/node/impl/storminer.go index f054f627e..326bcbf00 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -35,7 +35,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" builtintypes "github.com/filecoin-project/go-state-types/builtin" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/api" diff --git a/paychmgr/paych.go b/paychmgr/paych.go index 45703a6c8..c683aaadd 100644 --- a/paychmgr/paych.go +++ b/paychmgr/paych.go @@ -9,11 +9,11 @@ import ( "github.com/filecoin-project/go-address" cborutil "github.com/filecoin-project/go-cbor-util" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin/v8/paych" "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/chain/actors" lpaych "github.com/filecoin-project/lotus/chain/actors/builtin/paych" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/lib/sigs" @@ -89,7 +89,7 @@ func (ca *channelAccessor) messageBuilder(ctx context.Context, from address.Addr return nil, err } - av, err := actors.VersionForNetwork(nwVersion) + av, err := actorstypes.VersionForNetwork(nwVersion) if err != nil { return nil, err } diff --git a/storage/pipeline/cbor_gen.go b/storage/pipeline/cbor_gen.go index 2fb8c445c..fe7fa2d53 100644 --- a/storage/pipeline/cbor_gen.go +++ b/storage/pipeline/cbor_gen.go @@ -13,7 +13,7 @@ import ( xerrors "golang.org/x/xerrors" abi "github.com/filecoin-project/go-state-types/abi" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" api "github.com/filecoin-project/lotus/api" ) diff --git a/storage/pipeline/commit_batch.go b/storage/pipeline/commit_batch.go index 2011ad92e..b5651c5fb 100644 --- a/storage/pipeline/commit_batch.go +++ b/storage/pipeline/commit_batch.go @@ -13,15 +13,15 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/go-state-types/proof" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/config" @@ -583,7 +583,7 @@ func (b *CommitBatcher) getCommitCutoff(si SectorInfo) (time.Time, error) { if pci == nil { return time.Now(), xerrors.Errorf("precommit info not found") } - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { log.Errorf("unsupported network vrsion: %s", err) return time.Now(), err diff --git a/storage/pipeline/commit_batch_test.go b/storage/pipeline/commit_batch_test.go index cece591d3..a8948edcf 100644 --- a/storage/pipeline/commit_batch_test.go +++ b/storage/pipeline/commit_batch_test.go @@ -16,7 +16,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" prooftypes "github.com/filecoin-project/go-state-types/proof" diff --git a/storage/pipeline/fsm_events.go b/storage/pipeline/fsm_events.go index eb1087151..8ddd529a6 100644 --- a/storage/pipeline/fsm_events.go +++ b/storage/pipeline/fsm_events.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/storage/sealer/storiface" diff --git a/storage/pipeline/mocks/api.go b/storage/pipeline/mocks/api.go index 4e0813194..b6b6c7022 100644 --- a/storage/pipeline/mocks/api.go +++ b/storage/pipeline/mocks/api.go @@ -15,7 +15,7 @@ import ( bitfield "github.com/filecoin-project/go-bitfield" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" crypto "github.com/filecoin-project/go-state-types/crypto" dline "github.com/filecoin-project/go-state-types/dline" network "github.com/filecoin-project/go-state-types/network" diff --git a/storage/pipeline/mocks/mock_commit_batcher.go b/storage/pipeline/mocks/mock_commit_batcher.go index d61fde912..c4e7e3eef 100644 --- a/storage/pipeline/mocks/mock_commit_batcher.go +++ b/storage/pipeline/mocks/mock_commit_batcher.go @@ -13,7 +13,7 @@ import ( address "github.com/filecoin-project/go-address" abi "github.com/filecoin-project/go-state-types/abi" big "github.com/filecoin-project/go-state-types/big" - miner "github.com/filecoin-project/go-state-types/builtin/v8/miner" + miner "github.com/filecoin-project/go-state-types/builtin/v9/miner" network "github.com/filecoin-project/go-state-types/network" api "github.com/filecoin-project/lotus/api" diff --git a/storage/pipeline/precommit_batch.go b/storage/pipeline/precommit_batch.go index d0de68daa..6ee6aed93 100644 --- a/storage/pipeline/precommit_batch.go +++ b/storage/pipeline/precommit_batch.go @@ -14,7 +14,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/network" "github.com/filecoin-project/lotus/api" @@ -280,14 +280,15 @@ func (b *PreCommitBatcher) processIndividually(cfg sealiface.Config) ([]sealifac return res, nil } -func (b *PreCommitBatcher) processSingle(cfg sealiface.Config, mi api.MinerInfo, avail *abi.TokenAmount, params *preCommitEntry) (cid.Cid, error) { +func (b *PreCommitBatcher) processSingle(cfg sealiface.Config, mi api.MinerInfo, avail *abi.TokenAmount, entry *preCommitEntry) (cid.Cid, error) { + msgParams := infoToPreCommitSectorParams(entry.pci) enc := new(bytes.Buffer) - if err := params.pci.MarshalCBOR(enc); err != nil { + if err := msgParams.MarshalCBOR(enc); err != nil { return cid.Undef, xerrors.Errorf("marshaling precommit params: %w", err) } - deposit := params.deposit + deposit := entry.deposit if cfg.CollateralFromMinerBalance { c := big.Sub(deposit, *avail) *avail = big.Sub(*avail, deposit) @@ -328,7 +329,7 @@ func (b *PreCommitBatcher) processBatch(cfg sealiface.Config, tsk types.TipSetKe } res.Sectors = append(res.Sectors, p.pci.SectorNumber) - params.Sectors = append(params.Sectors, *p.pci) + params.Sectors = append(params.Sectors, *infoToPreCommitSectorParams(p.pci)) deposit = big.Add(deposit, p.deposit) } diff --git a/storage/pipeline/precommit_batch_test.go b/storage/pipeline/precommit_batch_test.go index 735474f07..1779128bd 100644 --- a/storage/pipeline/precommit_batch_test.go +++ b/storage/pipeline/precommit_batch_test.go @@ -15,7 +15,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/network" miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" diff --git a/storage/pipeline/sealing.go b/storage/pipeline/sealing.go index 8a1540d34..153a4cc32 100644 --- a/storage/pipeline/sealing.go +++ b/storage/pipeline/sealing.go @@ -15,7 +15,7 @@ import ( "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" diff --git a/storage/pipeline/states_failed.go b/storage/pipeline/states_failed.go index c57bef61b..38f030333 100644 --- a/storage/pipeline/states_failed.go +++ b/storage/pipeline/states_failed.go @@ -10,7 +10,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-commp-utils/zerocomm" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-statemachine" diff --git a/storage/pipeline/states_replica_update.go b/storage/pipeline/states_replica_update.go index 3392b92e7..ae90d2535 100644 --- a/storage/pipeline/states_replica_update.go +++ b/storage/pipeline/states_replica_update.go @@ -10,7 +10,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-statemachine" diff --git a/storage/pipeline/states_sealing.go b/storage/pipeline/states_sealing.go index 5ec8f077f..c31c36335 100644 --- a/storage/pipeline/states_sealing.go +++ b/storage/pipeline/states_sealing.go @@ -9,9 +9,10 @@ import ( "github.com/filecoin-project/go-commp-utils/zerocomm" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/exitcode" "github.com/filecoin-project/go-state-types/network" @@ -20,7 +21,6 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/storage/pipeline/lib/nullreader" @@ -153,7 +153,7 @@ func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.Se return nil, 0, allocated, xerrors.Errorf("getTicket: StateNetworkVersion: api error, not proceeding: %+v", err) } - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, 0, allocated, xerrors.Errorf("getTicket: actor version for network error, not proceeding: %w", err) } @@ -240,7 +240,7 @@ func (m *Sealing) handlePreCommit1(ctx statemachine.Context, sector SectorInfo) return nil } - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { log.Errorf("handlePreCommit1: VersionForNetwork error, not proceeding: %w", err) return nil @@ -283,7 +283,7 @@ func (m *Sealing) handlePreCommit2(ctx statemachine.Context, sector SectorInfo) }) } -func (m *Sealing) preCommitParams(ctx statemachine.Context, sector SectorInfo) (*miner.SectorPreCommitInfo, big.Int, types.TipSetKey, error) { +func (m *Sealing) preCommitInfo(ctx statemachine.Context, sector SectorInfo) (*miner.SectorPreCommitInfo, big.Int, types.TipSetKey, error) { ts, err := m.Api.ChainHead(ctx.Context()) if err != nil { log.Errorf("handlePreCommitting: api error, not proceeding: %+v", err) @@ -327,7 +327,7 @@ func (m *Sealing) preCommitParams(ctx statemachine.Context, sector SectorInfo) ( return nil, big.Zero(), types.EmptyTSK, ctx.Send(SectorSealPreCommit1Failed{xerrors.Errorf("failed to get network version: %w", err)}) } - av, err := actors.VersionForNetwork(nv) + av, err := actorstypes.VersionForNetwork(nv) if err != nil { return nil, big.Zero(), types.EmptyTSK, ctx.Send(SectorSealPreCommit1Failed{xerrors.Errorf("failed to get actors version: %w", err)}) } @@ -381,14 +381,16 @@ func (m *Sealing) handlePreCommitting(ctx statemachine.Context, sector SectorInf } } - params, pcd, tsk, err := m.preCommitParams(ctx, sector) + info, pcd, tsk, err := m.preCommitInfo(ctx, sector) if err != nil { - return ctx.Send(SectorChainPreCommitFailed{xerrors.Errorf("preCommitParams: %w", err)}) + return ctx.Send(SectorChainPreCommitFailed{xerrors.Errorf("preCommitInfo: %w", err)}) } - if params == nil { - return nil // event was sent in preCommitParams + if info == nil { + return nil // event was sent in preCommitInfo } + params := infoToPreCommitSectorParams(info) + deposit, err := collateralSendAmount(ctx.Context(), m.Api, m.maddr, cfg, pcd) if err != nil { return err @@ -418,7 +420,7 @@ func (m *Sealing) handlePreCommitting(ctx statemachine.Context, sector SectorInf return ctx.Send(SectorChainPreCommitFailed{xerrors.Errorf("pushing message to mpool: %w", err)}) } - return ctx.Send(SectorPreCommitted{Message: mcid, PreCommitDeposit: pcd, PreCommitInfo: *params}) + return ctx.Send(SectorPreCommitted{Message: mcid, PreCommitDeposit: pcd, PreCommitInfo: *info}) } func (m *Sealing) handleSubmitPreCommitBatch(ctx statemachine.Context, sector SectorInfo) error { @@ -426,12 +428,12 @@ func (m *Sealing) handleSubmitPreCommitBatch(ctx statemachine.Context, sector Se return ctx.Send(SectorSealPreCommit1Failed{xerrors.Errorf("sector had nil commR or commD")}) } - params, deposit, _, err := m.preCommitParams(ctx, sector) + params, deposit, _, err := m.preCommitInfo(ctx, sector) if err != nil { - return ctx.Send(SectorChainPreCommitFailed{xerrors.Errorf("preCommitParams: %w", err)}) + return ctx.Send(SectorChainPreCommitFailed{xerrors.Errorf("preCommitInfo: %w", err)}) } if params == nil { - return nil // event was sent in preCommitParams + return nil // event was sent in preCommitInfo } res, err := m.precommiter.AddPreCommit(ctx.Context(), sector, deposit, params) diff --git a/storage/pipeline/types.go b/storage/pipeline/types.go index 5889588bd..0419aabc2 100644 --- a/storage/pipeline/types.go +++ b/storage/pipeline/types.go @@ -7,7 +7,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/types" diff --git a/storage/pipeline/utils.go b/storage/pipeline/utils.go index 69a8f914c..3f8d534cb 100644 --- a/storage/pipeline/utils.go +++ b/storage/pipeline/utils.go @@ -10,6 +10,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/types" @@ -111,3 +112,14 @@ func sendMsg(ctx context.Context, sa interface { return smsg.Cid(), nil } + +func infoToPreCommitSectorParams(info *miner.SectorPreCommitInfo) *miner.PreCommitSectorParams { + return &miner.PreCommitSectorParams{ + SealProof: info.SealProof, + SectorNumber: info.SectorNumber, + SealedCID: info.SealedCID, + SealRandEpoch: info.SealRandEpoch, + DealIDs: info.DealIDs, + Expiration: info.Expiration, + } +} diff --git a/storage/wdpost/wdpost_changehandler.go b/storage/wdpost/wdpost_changehandler.go index 5778aaf9d..266b8b042 100644 --- a/storage/wdpost/wdpost_changehandler.go +++ b/storage/wdpost/wdpost_changehandler.go @@ -6,7 +6,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/lotus/chain/types" diff --git a/storage/wdpost/wdpost_changehandler_test.go b/storage/wdpost/wdpost_changehandler_test.go index 3e7ca3f49..dac6c4558 100644 --- a/storage/wdpost/wdpost_changehandler_test.go +++ b/storage/wdpost/wdpost_changehandler_test.go @@ -13,7 +13,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" tutils "github.com/filecoin-project/specs-actors/support/testing" diff --git a/storage/wdpost/wdpost_journal.go b/storage/wdpost/wdpost_journal.go index b4c790eb0..406628f68 100644 --- a/storage/wdpost/wdpost_journal.go +++ b/storage/wdpost/wdpost_journal.go @@ -4,7 +4,7 @@ import ( "github.com/ipfs/go-cid" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" ) diff --git a/storage/wdpost/wdpost_run.go b/storage/wdpost/wdpost_run.go index 0501923b0..3640eafe5 100644 --- a/storage/wdpost/wdpost_run.go +++ b/storage/wdpost/wdpost_run.go @@ -14,7 +14,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" diff --git a/storage/wdpost/wdpost_run_faults.go b/storage/wdpost/wdpost_run_faults.go index 9e9854a7c..2474ce77b 100644 --- a/storage/wdpost/wdpost_run_faults.go +++ b/storage/wdpost/wdpost_run_faults.go @@ -14,7 +14,7 @@ import ( "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/lotus/api" diff --git a/storage/wdpost/wdpost_run_test.go b/storage/wdpost/wdpost_run_test.go index 466fd6905..cb110cc0d 100644 --- a/storage/wdpost/wdpost_run_test.go +++ b/storage/wdpost/wdpost_run_test.go @@ -13,9 +13,10 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" + actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin" - minertypes "github.com/filecoin-project/go-state-types/builtin/v8/miner" + minertypes "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" @@ -500,7 +501,7 @@ func (m *mockStorageMinerAPI) StateMinerProvingDeadline(ctx context.Context, add } func (m *mockStorageMinerAPI) StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) { - code, ok := actors.GetActorCodeID(actors.Version7, actors.MinerKey) + code, ok := actors.GetActorCodeID(actorstypes.Version7, actors.MinerKey) if !ok { return nil, xerrors.Errorf("failed to get miner actor code ID for actors version %d", actors.Version7) } diff --git a/storage/wdpost/wdpost_sched.go b/storage/wdpost/wdpost_sched.go index 66722e283..21dfecb60 100644 --- a/storage/wdpost/wdpost_sched.go +++ b/storage/wdpost/wdpost_sched.go @@ -12,7 +12,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/builtin/v8/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/miner" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network"