Merge branch 'master' into nonsense/split-market-miner-processes
This commit is contained in:
commit
d195a12565
16
.github/CODEOWNERS
vendored
16
.github/CODEOWNERS
vendored
@ -1,16 +0,0 @@
|
|||||||
## filecoin-project/lotus CODEOWNERS
|
|
||||||
## Refer to https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners.
|
|
||||||
##
|
|
||||||
## These users or groups will be automatically assigned as reviewers every time
|
|
||||||
## a PR is submitted that modifies code in the specified locations.
|
|
||||||
##
|
|
||||||
## The Lotus repo configuration requires that at least ONE codeowner approves
|
|
||||||
## the PR before merging.
|
|
||||||
|
|
||||||
### Global owners.
|
|
||||||
* @magik6k @arajasek
|
|
||||||
|
|
||||||
### Conformance testing.
|
|
||||||
conformance/ @ZenGround0
|
|
||||||
extern/test-vectors @ZenGround0
|
|
||||||
cmd/tvx @ZenGround0
|
|
357
CHANGELOG.md
357
CHANGELOG.md
@ -1,10 +1,217 @@
|
|||||||
# Lotus changelog
|
# Lotus changelog
|
||||||
|
|
||||||
# 1.8.0 / 2021-04-27
|
# 1.9.0 / 2021-05-17
|
||||||
|
|
||||||
|
This is an optional Lotus release that introduces various improvements to the sealing, mining, and deal-making processes.
|
||||||
|
|
||||||
|
## Highlights
|
||||||
|
|
||||||
|
- OpenRPC Support (https://github.com/filecoin-project/lotus/pull/5843)
|
||||||
|
- Take latency into account when making interactive deals (https://github.com/filecoin-project/lotus/pull/5876)
|
||||||
|
- Update go-commp-utils for >10x faster client commp calculation (https://github.com/filecoin-project/lotus/pull/5892)
|
||||||
|
- add `lotus client cancel-retrieval` cmd to lotus CLI (https://github.com/filecoin-project/lotus/pull/5871)
|
||||||
|
- add `inspect-deal` command to `lotus client` (https://github.com/filecoin-project/lotus/pull/5833)
|
||||||
|
- Local retrieval support (https://github.com/filecoin-project/lotus/pull/5917)
|
||||||
|
- go-fil-markets v1.1.9 -> v1.2.5
|
||||||
|
- For a detailed changelog see https://github.com/filecoin-project/go-fil-markets/blob/master/CHANGELOG.md
|
||||||
|
- rust-fil-proofs v5.4.1 -> v7.0.1
|
||||||
|
- For a detailed changelog see https://github.com/filecoin-project/rust-fil-proofs/blob/master/CHANGELOG.md
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
- storagefsm: Apply global events even in broken states (https://github.com/filecoin-project/lotus/pull/5962)
|
||||||
|
- Default the AlwaysKeepUnsealedCopy flag to true (https://github.com/filecoin-project/lotus/pull/5743)
|
||||||
|
- splitstore: compact hotstore prior to garbage collection (https://github.com/filecoin-project/lotus/pull/5778)
|
||||||
|
- ipfs-force bootstrapper update (https://github.com/filecoin-project/lotus/pull/5799)
|
||||||
|
- better logging when unsealing fails (https://github.com/filecoin-project/lotus/pull/5851)
|
||||||
|
- perf: add cache for gas permium estimation (https://github.com/filecoin-project/lotus/pull/5709)
|
||||||
|
- backupds: Compact log on restart (https://github.com/filecoin-project/lotus/pull/5875)
|
||||||
|
- backupds: Improve truncated log handling (https://github.com/filecoin-project/lotus/pull/5891)
|
||||||
|
- State CLI improvements (State CLI improvements)
|
||||||
|
- API proxy struct codegen (https://github.com/filecoin-project/lotus/pull/5854)
|
||||||
|
- move DI stuff for paychmgr into modules (https://github.com/filecoin-project/lotus/pull/5791)
|
||||||
|
- Implement Event observer and Settings for 3rd party dep injection (https://github.com/filecoin-project/lotus/pull/5693)
|
||||||
|
- Export developer and network commands for consumption by derivatives of Lotus (https://github.com/filecoin-project/lotus/pull/5864)
|
||||||
|
- mock sealer: Simulate randomness sideeffects (https://github.com/filecoin-project/lotus/pull/5805)
|
||||||
|
- localstorage: Demote reservation stat error to debug (https://github.com/filecoin-project/lotus/pull/5976)
|
||||||
|
- shed command to unpack miner info dumps (https://github.com/filecoin-project/lotus/pull/5800)
|
||||||
|
- Add two utils to Lotus-shed (https://github.com/filecoin-project/lotus/pull/5867)
|
||||||
|
- add shed election estimate command (https://github.com/filecoin-project/lotus/pull/5092)
|
||||||
|
- Add --actor flag in lotus-shed sectors terminate (https://github.com/filecoin-project/lotus/pull/5819)
|
||||||
|
- Move lotus mpool clear to lotus-shed (https://github.com/filecoin-project/lotus/pull/5900)
|
||||||
|
- Centralize everything on ipfs/go-log/v2 (https://github.com/filecoin-project/lotus/pull/5974)
|
||||||
|
- expose NextID from nice market actor interface (https://github.com/filecoin-project/lotus/pull/5850)
|
||||||
|
- add available options for perm on error (https://github.com/filecoin-project/lotus/pull/5814)
|
||||||
|
- API docs clarification: Document StateSearchMsg replaced message behavior (https://github.com/filecoin-project/lotus/pull/5838)
|
||||||
|
- api: Document StateReplay replaced message behavior (https://github.com/filecoin-project/lotus/pull/5840)
|
||||||
|
- add godocs to miner objects (https://github.com/filecoin-project/lotus/pull/2184)
|
||||||
|
- Add description to the client deal CLI command (https://github.com/filecoin-project/lotus/pull/5999)
|
||||||
|
- lint: don't skip builtin (https://github.com/filecoin-project/lotus/pull/5881)
|
||||||
|
- use deal duration from actors (https://github.com/filecoin-project/lotus/pull/5270)
|
||||||
|
- remote calc winningpost proof (https://github.com/filecoin-project/lotus/pull/5884)
|
||||||
|
- packer: other network images (https://github.com/filecoin-project/lotus/pull/5930)
|
||||||
|
- Convert the chainstore lock to RW (https://github.com/filecoin-project/lotus/pull/5971)
|
||||||
|
- Remove CachedBlockstore (https://github.com/filecoin-project/lotus/pull/5972)
|
||||||
|
- remove messagepool CapGasFee duplicate code (https://github.com/filecoin-project/lotus/pull/5992)
|
||||||
|
- Add a mining-heartbeat INFO line at every epoch (https://github.com/filecoin-project/lotus/pull/6183)
|
||||||
|
- chore(ci): Enable build on RC tags (https://github.com/filecoin-project/lotus/pull/6245)
|
||||||
|
- Upgrade nerpa to actor v4 and bump the version to rc4 (https://github.com/filecoin-project/lotus/pull/6249)
|
||||||
|
## Fixes
|
||||||
|
- return buffers after canceling badger operation (https://github.com/filecoin-project/lotus/pull/5796)
|
||||||
|
- avoid holding a lock while calling the View callback (https://github.com/filecoin-project/lotus/pull/5792)
|
||||||
|
- storagefsm: Trigger input processing when below limits (https://github.com/filecoin-project/lotus/pull/5801)
|
||||||
|
- After importing a previously deleted key, be able to delete it again (https://github.com/filecoin-project/lotus/pull/4653)
|
||||||
|
- fix StateManager.Replay on reward actor (https://github.com/filecoin-project/lotus/pull/5804)
|
||||||
|
- make sure atomic 64bit fields are 64bit aligned (https://github.com/filecoin-project/lotus/pull/5794)
|
||||||
|
- Import secp sigs in paych tests (https://github.com/filecoin-project/lotus/pull/5879)
|
||||||
|
- fix ci build-macos (https://github.com/filecoin-project/lotus/pull/5934)
|
||||||
|
- Fix creation of remainder account when it's not a multisig (https://github.com/filecoin-project/lotus/pull/5807)
|
||||||
|
- Fix fallback chainstore (https://github.com/filecoin-project/lotus/pull/6003)
|
||||||
|
- fix 4857: show help for set-addrs (https://github.com/filecoin-project/lotus/pull/5943)
|
||||||
|
- fix health report (https://github.com/filecoin-project/lotus/pull/6011)
|
||||||
|
- fix(ci): Use recent ubuntu LTS release; Update release params ((https://github.com/filecoin-project/lotus/pull/6011))
|
||||||
|
|
||||||
|
# 1.9.0-rc4 / 2021-05-13
|
||||||
|
|
||||||
|
This is an optional Lotus release that introduces various improvements to the sealing, mining, and deal-making processes.
|
||||||
|
|
||||||
|
## Highlights
|
||||||
|
|
||||||
|
- OpenRPC Support (https://github.com/filecoin-project/lotus/pull/5843)
|
||||||
|
- Take latency into account when making interactive deals (https://github.com/filecoin-project/lotus/pull/5876)
|
||||||
|
- Update go-commp-utils for >10x faster client commp calculation (https://github.com/filecoin-project/lotus/pull/5892)
|
||||||
|
- add `lotus client cancel-retrieval` cmd to lotus CLI (https://github.com/filecoin-project/lotus/pull/5871)
|
||||||
|
- add `inspect-deal` command to `lotus client` (https://github.com/filecoin-project/lotus/pull/5833)
|
||||||
|
- Local retrieval support (https://github.com/filecoin-project/lotus/pull/5917)
|
||||||
|
- go-fil-markets v1.1.9 -> v1.2.5
|
||||||
|
- For a detailed changelog see https://github.com/filecoin-project/go-fil-markets/blob/master/CHANGELOG.md
|
||||||
|
- rust-fil-proofs v5.4.1 -> v7.0.1
|
||||||
|
- For a detailed changelog see https://github.com/filecoin-project/rust-fil-proofs/blob/master/CHANGELOG.md
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
- storagefsm: Apply global events even in broken states (https://github.com/filecoin-project/lotus/pull/5962)
|
||||||
|
- Default the AlwaysKeepUnsealedCopy flag to true (https://github.com/filecoin-project/lotus/pull/5743)
|
||||||
|
- splitstore: compact hotstore prior to garbage collection (https://github.com/filecoin-project/lotus/pull/5778)
|
||||||
|
- ipfs-force bootstrapper update (https://github.com/filecoin-project/lotus/pull/5799)
|
||||||
|
- better logging when unsealing fails (https://github.com/filecoin-project/lotus/pull/5851)
|
||||||
|
- perf: add cache for gas permium estimation (https://github.com/filecoin-project/lotus/pull/5709)
|
||||||
|
- backupds: Compact log on restart (https://github.com/filecoin-project/lotus/pull/5875)
|
||||||
|
- backupds: Improve truncated log handling (https://github.com/filecoin-project/lotus/pull/5891)
|
||||||
|
- State CLI improvements (State CLI improvements)
|
||||||
|
- API proxy struct codegen (https://github.com/filecoin-project/lotus/pull/5854)
|
||||||
|
- move DI stuff for paychmgr into modules (https://github.com/filecoin-project/lotus/pull/5791)
|
||||||
|
- Implement Event observer and Settings for 3rd party dep injection (https://github.com/filecoin-project/lotus/pull/5693)
|
||||||
|
- Export developer and network commands for consumption by derivatives of Lotus (https://github.com/filecoin-project/lotus/pull/5864)
|
||||||
|
- mock sealer: Simulate randomness sideeffects (https://github.com/filecoin-project/lotus/pull/5805)
|
||||||
|
- localstorage: Demote reservation stat error to debug (https://github.com/filecoin-project/lotus/pull/5976)
|
||||||
|
- shed command to unpack miner info dumps (https://github.com/filecoin-project/lotus/pull/5800)
|
||||||
|
- Add two utils to Lotus-shed (https://github.com/filecoin-project/lotus/pull/5867)
|
||||||
|
- add shed election estimate command (https://github.com/filecoin-project/lotus/pull/5092)
|
||||||
|
- Add --actor flag in lotus-shed sectors terminate (https://github.com/filecoin-project/lotus/pull/5819)
|
||||||
|
- Move lotus mpool clear to lotus-shed (https://github.com/filecoin-project/lotus/pull/5900)
|
||||||
|
- Centralize everything on ipfs/go-log/v2 (https://github.com/filecoin-project/lotus/pull/5974)
|
||||||
|
- expose NextID from nice market actor interface (https://github.com/filecoin-project/lotus/pull/5850)
|
||||||
|
- add available options for perm on error (https://github.com/filecoin-project/lotus/pull/5814)
|
||||||
|
- API docs clarification: Document StateSearchMsg replaced message behavior (https://github.com/filecoin-project/lotus/pull/5838)
|
||||||
|
- api: Document StateReplay replaced message behavior (https://github.com/filecoin-project/lotus/pull/5840)
|
||||||
|
- add godocs to miner objects (https://github.com/filecoin-project/lotus/pull/2184)
|
||||||
|
- Add description to the client deal CLI command (https://github.com/filecoin-project/lotus/pull/5999)
|
||||||
|
- lint: don't skip builtin (https://github.com/filecoin-project/lotus/pull/5881)
|
||||||
|
- use deal duration from actors (https://github.com/filecoin-project/lotus/pull/5270)
|
||||||
|
- remote calc winningpost proof (https://github.com/filecoin-project/lotus/pull/5884)
|
||||||
|
- packer: other network images (https://github.com/filecoin-project/lotus/pull/5930)
|
||||||
|
- Convert the chainstore lock to RW (https://github.com/filecoin-project/lotus/pull/5971)
|
||||||
|
- Remove CachedBlockstore (https://github.com/filecoin-project/lotus/pull/5972)
|
||||||
|
- remove messagepool CapGasFee duplicate code (https://github.com/filecoin-project/lotus/pull/5992)
|
||||||
|
- Add a mining-heartbeat INFO line at every epoch (https://github.com/filecoin-project/lotus/pull/6183)
|
||||||
|
- chore(ci): Enable build on RC tags (https://github.com/filecoin-project/lotus/pull/6245)
|
||||||
|
- Upgrade nerpa to actor v4 and bump the version to rc4 (https://github.com/filecoin-project/lotus/pull/6249)
|
||||||
|
## Fixes
|
||||||
|
- return buffers after canceling badger operation (https://github.com/filecoin-project/lotus/pull/5796)
|
||||||
|
- avoid holding a lock while calling the View callback (https://github.com/filecoin-project/lotus/pull/5792)
|
||||||
|
- storagefsm: Trigger input processing when below limits (https://github.com/filecoin-project/lotus/pull/5801)
|
||||||
|
- After importing a previously deleted key, be able to delete it again (https://github.com/filecoin-project/lotus/pull/4653)
|
||||||
|
- fix StateManager.Replay on reward actor (https://github.com/filecoin-project/lotus/pull/5804)
|
||||||
|
- make sure atomic 64bit fields are 64bit aligned (https://github.com/filecoin-project/lotus/pull/5794)
|
||||||
|
- Import secp sigs in paych tests (https://github.com/filecoin-project/lotus/pull/5879)
|
||||||
|
- fix ci build-macos (https://github.com/filecoin-project/lotus/pull/5934)
|
||||||
|
- Fix creation of remainder account when it's not a multisig (https://github.com/filecoin-project/lotus/pull/5807)
|
||||||
|
- Fix fallback chainstore (https://github.com/filecoin-project/lotus/pull/6003)
|
||||||
|
- fix 4857: show help for set-addrs (https://github.com/filecoin-project/lotus/pull/5943)
|
||||||
|
- fix health report (https://github.com/filecoin-project/lotus/pull/6011)
|
||||||
|
|
||||||
|
|
||||||
|
# 1.9.0-rc2 / 2021-04-30
|
||||||
|
|
||||||
|
This is an optional Lotus release that introduces various improvements to the sealing, mining, and deal-making processes.
|
||||||
|
|
||||||
|
## Highlights
|
||||||
|
|
||||||
|
- OpenRPC Support (https://github.com/filecoin-project/lotus/pull/5843)
|
||||||
|
- Take latency into account when making interactive deals (https://github.com/filecoin-project/lotus/pull/5876)
|
||||||
|
- Update go-commp-utils for >10x faster client commp calculation (https://github.com/filecoin-project/lotus/pull/5892)
|
||||||
|
- add `lotus client cancel-retrieval` cmd to lotus CLI (https://github.com/filecoin-project/lotus/pull/5871)
|
||||||
|
- add `inspect-deal` command to `lotus client` (https://github.com/filecoin-project/lotus/pull/5833)
|
||||||
|
- Local retrieval support (https://github.com/filecoin-project/lotus/pull/5917)
|
||||||
|
- go-fil-markets v1.1.9 -> v1.2.5
|
||||||
|
- For a detailed changelog see https://github.com/filecoin-project/go-fil-markets/blob/master/CHANGELOG.md
|
||||||
|
- rust-fil-proofs v5.4.1 -> v7
|
||||||
|
- For a detailed changelog see https://github.com/filecoin-project/rust-fil-proofs/blob/master/CHANGELOG.md
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
- storagefsm: Apply global events even in broken states (https://github.com/filecoin-project/lotus/pull/5962)
|
||||||
|
- Default the AlwaysKeepUnsealedCopy flag to true (https://github.com/filecoin-project/lotus/pull/5743)
|
||||||
|
- splitstore: compact hotstore prior to garbage collection (https://github.com/filecoin-project/lotus/pull/5778)
|
||||||
|
- ipfs-force bootstrapper update (https://github.com/filecoin-project/lotus/pull/5799)
|
||||||
|
- better logging when unsealing fails (https://github.com/filecoin-project/lotus/pull/5851)
|
||||||
|
- perf: add cache for gas permium estimation (https://github.com/filecoin-project/lotus/pull/5709)
|
||||||
|
- backupds: Compact log on restart (https://github.com/filecoin-project/lotus/pull/5875)
|
||||||
|
- backupds: Improve truncated log handling (https://github.com/filecoin-project/lotus/pull/5891)
|
||||||
|
- State CLI improvements (State CLI improvements)
|
||||||
|
- API proxy struct codegen (https://github.com/filecoin-project/lotus/pull/5854)
|
||||||
|
- move DI stuff for paychmgr into modules (https://github.com/filecoin-project/lotus/pull/5791)
|
||||||
|
- Implement Event observer and Settings for 3rd party dep injection (https://github.com/filecoin-project/lotus/pull/5693)
|
||||||
|
- Export developer and network commands for consumption by derivatives of Lotus (https://github.com/filecoin-project/lotus/pull/5864)
|
||||||
|
- mock sealer: Simulate randomness sideeffects (https://github.com/filecoin-project/lotus/pull/5805)
|
||||||
|
- localstorage: Demote reservation stat error to debug (https://github.com/filecoin-project/lotus/pull/5976)
|
||||||
|
- shed command to unpack miner info dumps (https://github.com/filecoin-project/lotus/pull/5800)
|
||||||
|
- Add two utils to Lotus-shed (https://github.com/filecoin-project/lotus/pull/5867)
|
||||||
|
- add shed election estimate command (https://github.com/filecoin-project/lotus/pull/5092)
|
||||||
|
- Add --actor flag in lotus-shed sectors terminate (https://github.com/filecoin-project/lotus/pull/5819)
|
||||||
|
- Move lotus mpool clear to lotus-shed (https://github.com/filecoin-project/lotus/pull/5900)
|
||||||
|
- Centralize everything on ipfs/go-log/v2 (https://github.com/filecoin-project/lotus/pull/5974)
|
||||||
|
- expose NextID from nice market actor interface (https://github.com/filecoin-project/lotus/pull/5850)
|
||||||
|
- add available options for perm on error (https://github.com/filecoin-project/lotus/pull/5814)
|
||||||
|
- API docs clarification: Document StateSearchMsg replaced message behavior (https://github.com/filecoin-project/lotus/pull/5838)
|
||||||
|
- api: Document StateReplay replaced message behavior (https://github.com/filecoin-project/lotus/pull/5840)
|
||||||
|
- add godocs to miner objects (https://github.com/filecoin-project/lotus/pull/2184)
|
||||||
|
- Add description to the client deal CLI command (https://github.com/filecoin-project/lotus/pull/5999)
|
||||||
|
- lint: don't skip builtin (https://github.com/filecoin-project/lotus/pull/5881)
|
||||||
|
- use deal duration from actors (https://github.com/filecoin-project/lotus/pull/5270)
|
||||||
|
- remote calc winningpost proof (https://github.com/filecoin-project/lotus/pull/5884)
|
||||||
|
- packer: other network images (https://github.com/filecoin-project/lotus/pull/5930)
|
||||||
|
- Convert the chainstore lock to RW (https://github.com/filecoin-project/lotus/pull/5971)
|
||||||
|
- Remove CachedBlockstore (https://github.com/filecoin-project/lotus/pull/5972)
|
||||||
|
- remove messagepool CapGasFee duplicate code (https://github.com/filecoin-project/lotus/pull/5992)
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
- return buffers after canceling badger operation (https://github.com/filecoin-project/lotus/pull/5796)
|
||||||
|
- avoid holding a lock while calling the View callback (https://github.com/filecoin-project/lotus/pull/5792)
|
||||||
|
- storagefsm: Trigger input processing when below limits (https://github.com/filecoin-project/lotus/pull/5801)
|
||||||
|
- After importing a previously deleted key, be able to delete it again (https://github.com/filecoin-project/lotus/pull/4653)
|
||||||
|
- fix StateManager.Replay on reward actor (https://github.com/filecoin-project/lotus/pull/5804)
|
||||||
|
- make sure atomic 64bit fields are 64bit aligned (https://github.com/filecoin-project/lotus/pull/5794)
|
||||||
|
- Import secp sigs in paych tests (https://github.com/filecoin-project/lotus/pull/5879)
|
||||||
|
- fix ci build-macos (https://github.com/filecoin-project/lotus/pull/5934)
|
||||||
|
- Fix creation of remainder account when it's not a multisig (https://github.com/filecoin-project/lotus/pull/5807)
|
||||||
|
- Fix fallback chainstore (https://github.com/filecoin-project/lotus/pull/6003)
|
||||||
|
- fix 4857: show help for set-addrs (https://github.com/filecoin-project/lotus/pull/5943)
|
||||||
|
- fix health report (https://github.com/filecoin-project/lotus/pull/6011)
|
||||||
|
|
||||||
|
# 1.8.0 / 2021-04-05
|
||||||
|
|
||||||
This is a mandatory release of Lotus that upgrades the network to version 12, which introduces various performance improvements to the cron processing of the power actor. The network will upgrade at height 712320, which is 2021-04-29T06:00:00Z.
|
This is a mandatory release of Lotus that upgrades the network to version 12, which introduces various performance improvements to the cron processing of the power actor. The network will upgrade at height 712320, which is 2021-04-29T06:00:00Z.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- v4 specs-actors integration, nv12 migration (https://github.com/filecoin-project/lotus/pull/6116)
|
- v4 specs-actors integration, nv12 migration (https://github.com/filecoin-project/lotus/pull/6116)
|
||||||
|
|
||||||
@ -20,7 +227,7 @@ This release also expands the `lotus-miner sectors extend` CLI, with a new optio
|
|||||||
|
|
||||||
- The `expiration-cutoff` flag can be passed to skip sectors whose expiration is past a certain point from the current head. It defaults to infinity (no cutoff), but if, say, 28800 was specified, then only sectors expiring in the next 10 days would be extended (2880 epochs in 1 day).
|
- The `expiration-cutoff` flag can be passed to skip sectors whose expiration is past a certain point from the current head. It defaults to infinity (no cutoff), but if, say, 28800 was specified, then only sectors expiring in the next 10 days would be extended (2880 epochs in 1 day).
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Util for miners to extend all v1 sectors (https://github.com/filecoin-project/lotus/pull/5924)
|
- Util for miners to extend all v1 sectors (https://github.com/filecoin-project/lotus/pull/5924)
|
||||||
- Upgrade the butterfly network (https://github.com/filecoin-project/lotus/pull/5929)
|
- Upgrade the butterfly network (https://github.com/filecoin-project/lotus/pull/5929)
|
||||||
@ -31,7 +238,7 @@ This release also expands the `lotus-miner sectors extend` CLI, with a new optio
|
|||||||
|
|
||||||
This is a patch release of Lotus that introduces small fixes to the Storage FSM.
|
This is a patch release of Lotus that introduces small fixes to the Storage FSM.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- storagefsm: Fix double unlock with ready WaitDeals sectors (https://github.com/filecoin-project/lotus/pull/5783)
|
- storagefsm: Fix double unlock with ready WaitDeals sectors (https://github.com/filecoin-project/lotus/pull/5783)
|
||||||
- backupds: Allow larger values in write log (https://github.com/filecoin-project/lotus/pull/5776)
|
- backupds: Allow larger values in write log (https://github.com/filecoin-project/lotus/pull/5776)
|
||||||
@ -47,7 +254,7 @@ This is an hotfix release of Lotus that fixes a critical bug introduced in v1.5.
|
|||||||
|
|
||||||
# 1.5.1 / 2021-03-10
|
# 1.5.1 / 2021-03-10
|
||||||
|
|
||||||
This is an optional release of Lotus that introduces an important fix to the WindowPoSt computation process. The change is to wait for some confidence before drawing beacon randomness for the proof. Without this, invalid proofs might be generated as the result of a null tipset.
|
This is an optional release of Lotus that introduces an important fix to the WindowPoSt computation process. The change is to wait for some confidence before drawing beacon randomness for the proof. Without this, invalid proofs might be generated as the result of a null tipset.
|
||||||
|
|
||||||
## Splitstore
|
## Splitstore
|
||||||
|
|
||||||
@ -140,7 +347,7 @@ FIP-0010 introduces the ability to dispute bad Window PoSts. Node operators are
|
|||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- [#5341](https://github.com/filecoin-project/lotus/pull/5341) Add a `LOTUS_DISABLE_V3_ACTOR_MIGRATION` envvar
|
- [#5341](https://github.com/filecoin-project/lotus/pull/5341) Add a `LOTUS_DISABLE_V3_ACTOR_MIGRATION` envvar
|
||||||
- Setting this envvar to 1 disables the v3 actor migration, should only be used in the event of a failed migration
|
- Setting this envvar to 1 disables the v3 actor migration, should only be used in the event of a failed migration
|
||||||
|
|
||||||
# 1.4.2 / 2021-02-17
|
# 1.4.2 / 2021-02-17
|
||||||
|
|
||||||
@ -148,14 +355,14 @@ This is a large, and highly recommended, optional release with new features and
|
|||||||
|
|
||||||
- [FIP-0007 h/amt-v3](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0007.md) which improves the performance of the Filecoin HAMT and AMT.
|
- [FIP-0007 h/amt-v3](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0007.md) which improves the performance of the Filecoin HAMT and AMT.
|
||||||
- [FIP-0010 off-chain Window PoSt Verification](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0010.md) which reduces the gas consumption of `SubmitWindowedPoSt` messages significantly by optimistically accepting Window PoSt proofs without verification, and allowing them to be disputed later by off-chain verifiers.
|
- [FIP-0010 off-chain Window PoSt Verification](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0010.md) which reduces the gas consumption of `SubmitWindowedPoSt` messages significantly by optimistically accepting Window PoSt proofs without verification, and allowing them to be disputed later by off-chain verifiers.
|
||||||
|
|
||||||
Note that this release does NOT set an upgrade epoch for v3 actors to take effect. That will be done in the upcoming 1.5.0 release.
|
Note that this release does NOT set an upgrade epoch for v3 actors to take effect. That will be done in the upcoming 1.5.0 release.
|
||||||
|
|
||||||
## New Features
|
## New Features
|
||||||
|
|
||||||
- [#5341](https://github.com/filecoin-project/lotus/pull/5341) Added sector termination API and CLI
|
- [#5341](https://github.com/filecoin-project/lotus/pull/5341) Added sector termination API and CLI
|
||||||
- Run `lotus-miner sectors terminate`
|
- Run `lotus-miner sectors terminate`
|
||||||
- [#5342](https://github.com/filecoin-project/lotus/pull/5342) Added CLI for using a multisig wallet as miner's owner address
|
- [#5342](https://github.com/filecoin-project/lotus/pull/5342) Added CLI for using a multisig wallet as miner's owner address
|
||||||
- See how to set it up [here](https://github.com/filecoin-project/lotus/pull/5342#issue-554009129)
|
- See how to set it up [here](https://github.com/filecoin-project/lotus/pull/5342#issue-554009129)
|
||||||
- [#5363](https://github.com/filecoin-project/lotus/pull/5363), [#5418](https://github.com/filecoin-project/lotus/pull/), [#5476](https://github.com/filecoin-project/lotus/pull/5476), [#5459](https://github.com/filecoin-project/lotus/pull/5459) Integrated [spec-actor v3](https://github.com/filecoin-pro5418ject/specs-actors/releases/tag/v3.0.0)
|
- [#5363](https://github.com/filecoin-project/lotus/pull/5363), [#5418](https://github.com/filecoin-project/lotus/pull/), [#5476](https://github.com/filecoin-project/lotus/pull/5476), [#5459](https://github.com/filecoin-project/lotus/pull/5459) Integrated [spec-actor v3](https://github.com/filecoin-pro5418ject/specs-actors/releases/tag/v3.0.0)
|
||||||
- [#5472](https://github.com/filecoin-project/lotus/pull/5472) Generate actor v3 methods for pond
|
- [#5472](https://github.com/filecoin-project/lotus/pull/5472) Generate actor v3 methods for pond
|
||||||
@ -166,7 +373,7 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec
|
|||||||
- [#5411](https://github.com/filecoin-project/lotus/pull/5411) Handle batch `PublishStorageDeals` message in sealing recovery
|
- [#5411](https://github.com/filecoin-project/lotus/pull/5411) Handle batch `PublishStorageDeals` message in sealing recovery
|
||||||
- [#5505](https://github.com/filecoin-project/lotus/pull/5505) Exclude expired deals from batching in `PublishStorageDeals` messages
|
- [#5505](https://github.com/filecoin-project/lotus/pull/5505) Exclude expired deals from batching in `PublishStorageDeals` messages
|
||||||
- Added `PublishMsgPeriod` and `MaxDealsPerPublishMsg` to miner `Dealmaking` [configuration](https://docs.filecoin.io/mine/lotus/miner-configuration/#dealmaking-section). See how they work [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#publishing-several-deals-in-one-message).
|
- Added `PublishMsgPeriod` and `MaxDealsPerPublishMsg` to miner `Dealmaking` [configuration](https://docs.filecoin.io/mine/lotus/miner-configuration/#dealmaking-section). See how they work [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#publishing-several-deals-in-one-message).
|
||||||
- [#5538](https://github.com/filecoin-project/lotus/pull/5538), [#5549](https://github.com/filecoin-project/lotus/pull/5549) Added a command to list pending deals and force publish messages.
|
- [#5538](https://github.com/filecoin-project/lotus/pull/5538), [#5549](https://github.com/filecoin-project/lotus/pull/5549) Added a command to list pending deals and force publish messages.
|
||||||
- Run `lotus-miner market pending-publish`
|
- Run `lotus-miner market pending-publish`
|
||||||
- [#5428](https://github.com/filecoin-project/lotus/pull/5428) Moved waiting for `PublishStorageDeals` messages' receipt from markets to lotus
|
- [#5428](https://github.com/filecoin-project/lotus/pull/5428) Moved waiting for `PublishStorageDeals` messages' receipt from markets to lotus
|
||||||
- [#5510](https://github.com/filecoin-project/lotus/pull/5510) Added `nerpanet` build option
|
- [#5510](https://github.com/filecoin-project/lotus/pull/5510) Added `nerpanet` build option
|
||||||
@ -176,32 +383,32 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec
|
|||||||
- [#5219](https://github.com/filecoin-project/lotus/pull/5219) Added interactive mode for lotus-wallet
|
- [#5219](https://github.com/filecoin-project/lotus/pull/5219) Added interactive mode for lotus-wallet
|
||||||
- [5529](https://github.com/filecoin-project/lotus/pull/5529) Added support for minder nodes in `lotus-shed rpc` util
|
- [5529](https://github.com/filecoin-project/lotus/pull/5529) Added support for minder nodes in `lotus-shed rpc` util
|
||||||
|
|
||||||
## Bug Fixes
|
## Bug Fixes
|
||||||
|
|
||||||
- [#5210](https://github.com/filecoin-project/lotus/pull/5210) Miner should not dial client on restart
|
- [#5210](https://github.com/filecoin-project/lotus/pull/5210) Miner should not dial client on restart
|
||||||
- [#5403](https://github.com/filecoin-project/lotus/pull/5403) When estimating GasLimit only apply prior messages up to the nonce
|
- [#5403](https://github.com/filecoin-project/lotus/pull/5403) When estimating GasLimit only apply prior messages up to the nonce
|
||||||
- [#5410](https://github.com/filecoin-project/lotus/pull/510) Fix the calibnet build option
|
- [#5410](https://github.com/filecoin-project/lotus/pull/510) Fix the calibnet build option
|
||||||
- [#5492](https://github.com/filecoin-project/lotus/pull/5492) Fixed `has` for ipfsbstore for non-existing blocks
|
- [#5492](https://github.com/filecoin-project/lotus/pull/5492) Fixed `has` for ipfsbstore for non-existing blocks
|
||||||
- [#5361](https://github.com/filecoin-project/lotus/pull/5361) Fixed retrieval hangs when using `IpfsOnlineMode=true`
|
- [#5361](https://github.com/filecoin-project/lotus/pull/5361) Fixed retrieval hangs when using `IpfsOnlineMode=true`
|
||||||
- [#5493](https://github.com/filecoin-project/lotus/pull/5493) Fixed retrieval failure when price-per-byte is zero
|
- [#5493](https://github.com/filecoin-project/lotus/pull/5493) Fixed retrieval failure when price-per-byte is zero
|
||||||
- [#5506](https://github.com/filecoin-project/lotus/pull/5506) Fixed contexts in the storage adpater
|
- [#5506](https://github.com/filecoin-project/lotus/pull/5506) Fixed contexts in the storage adpater
|
||||||
- [#5515](https://github.com/filecoin-project/lotus/pull/5515) Properly wire up `StateReadState` on gateway API
|
- [#5515](https://github.com/filecoin-project/lotus/pull/5515) Properly wire up `StateReadState` on gateway API
|
||||||
- [#5582](https://github.com/filecoin-project/lotus/pull/5582) Fixed error logging format strings
|
- [#5582](https://github.com/filecoin-project/lotus/pull/5582) Fixed error logging format strings
|
||||||
- [#5614](https://github.com/filecoin-project/lotus/pull/5614) Fixed websocket reconnecting handling
|
- [#5614](https://github.com/filecoin-project/lotus/pull/5614) Fixed websocket reconnecting handling
|
||||||
|
|
||||||
|
|
||||||
## Improvements
|
## Improvements
|
||||||
|
|
||||||
- [#5389](https://github.com/filecoin-project/lotus/pull/5389) Show verified indicator for `./lotus-miner storage-deals list`
|
- [#5389](https://github.com/filecoin-project/lotus/pull/5389) Show verified indicator for `./lotus-miner storage-deals list`
|
||||||
- [#5229](https://github.com/filecoin-project/lotus/pull/5220) Show power for verified deals in `./lotus-miner setocr list`
|
- [#5229](https://github.com/filecoin-project/lotus/pull/5220) Show power for verified deals in `./lotus-miner setocr list`
|
||||||
- [#5407](https://github.com/filecoin-project/lotus/pull/5407) Added explicit check of the miner address protocol
|
- [#5407](https://github.com/filecoin-project/lotus/pull/5407) Added explicit check of the miner address protocol
|
||||||
- [#5399](https://github.com/filecoin-project/lotus/pull/5399) watchdog: increase heapprof capture threshold to 90%
|
- [#5399](https://github.com/filecoin-project/lotus/pull/5399) watchdog: increase heapprof capture threshold to 90%
|
||||||
- [#5398](https://github.com/filecoin-project/lotus/pull/5398) storageadapter: Look at precommits on-chain since deal publish msg
|
- [#5398](https://github.com/filecoin-project/lotus/pull/5398) storageadapter: Look at precommits on-chain since deal publish msg
|
||||||
- [#5470](https://github.com/filecoin-project/lotus/pull/5470) Added `--no-timing` option for `./lotus state compute-state --html`
|
- [#5470](https://github.com/filecoin-project/lotus/pull/5470) Added `--no-timing` option for `./lotus state compute-state --html`
|
||||||
- [#5417](https://github.com/filecoin-project/lotus/pull/5417) Storage Manager: Always unseal full sectors
|
- [#5417](https://github.com/filecoin-project/lotus/pull/5417) Storage Manager: Always unseal full sectors
|
||||||
- [#5393](https://github.com/filecoin-project/lotus/pull/5393) Switched to [filecoin-ffi bls api ](https://github.com/filecoin-project/filecoin-ffi/pull/159)for bls signatures
|
- [#5393](https://github.com/filecoin-project/lotus/pull/5393) Switched to [filecoin-ffi bls api ](https://github.com/filecoin-project/filecoin-ffi/pull/159)for bls signatures
|
||||||
- [#5380](https://github.com/filecoin-project/lotus/pull/5210) Refactor deals API tests
|
- [#5380](https://github.com/filecoin-project/lotus/pull/5210) Refactor deals API tests
|
||||||
- [#5397](https://github.com/filecoin-project/lotus/pull/5397) Fixed a flake in the sync manager edge case test
|
- [#5397](https://github.com/filecoin-project/lotus/pull/5397) Fixed a flake in the sync manager edge case test
|
||||||
- [#5406](https://github.com/filecoin-project/lotus/pull/5406) Added a test to ensure a correct window post cannot be disputed
|
- [#5406](https://github.com/filecoin-project/lotus/pull/5406) Added a test to ensure a correct window post cannot be disputed
|
||||||
- [#5294](https://github.com/filecoin-project/lotus/pull/5394) Added jobs to build Lotus docker image and push it to AWS ECR
|
- [#5294](https://github.com/filecoin-project/lotus/pull/5394) Added jobs to build Lotus docker image and push it to AWS ECR
|
||||||
- [#5387](https://github.com/filecoin-project/lotus/pull/5387) Added network info(mainnet|calibnet) in version
|
- [#5387](https://github.com/filecoin-project/lotus/pull/5387) Added network info(mainnet|calibnet) in version
|
||||||
@ -210,7 +417,7 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec
|
|||||||
- [#5047](https://github.com/filecoin-project/lotus/pull/5047) Improved the UX for `./lotus-shed bitfield enc`
|
- [#5047](https://github.com/filecoin-project/lotus/pull/5047) Improved the UX for `./lotus-shed bitfield enc`
|
||||||
- [#5282](https://github.com/filecoin-project/lotus/pull/5282) Snake a context through the chian blockstore creation
|
- [#5282](https://github.com/filecoin-project/lotus/pull/5282) Snake a context through the chian blockstore creation
|
||||||
- [#5350](https://github.com/filecoin-project/lotus/pull/5350) Avoid using `mp.cfg` directrly to prevent race condition
|
- [#5350](https://github.com/filecoin-project/lotus/pull/5350) Avoid using `mp.cfg` directrly to prevent race condition
|
||||||
- [#5449](https://github.com/filecoin-project/lotus/pull/5449) Documented the block-header better
|
- [#5449](https://github.com/filecoin-project/lotus/pull/5449) Documented the block-header better
|
||||||
- [#5404](https://github.com/filecoin-project/lotus/pull/5404) Added retrying proofs if an incorrect one is generated
|
- [#5404](https://github.com/filecoin-project/lotus/pull/5404) Added retrying proofs if an incorrect one is generated
|
||||||
- [#4545](https://github.com/filecoin-project/lotus/pull/4545) Made state tipset usage consistent in the API
|
- [#4545](https://github.com/filecoin-project/lotus/pull/4545) Made state tipset usage consistent in the API
|
||||||
- [#5540](https://github.com/filecoin-project/lotus/pull/5540) Removed unnecessary database reads in validation check
|
- [#5540](https://github.com/filecoin-project/lotus/pull/5540) Removed unnecessary database reads in validation check
|
||||||
@ -227,14 +434,14 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec
|
|||||||
- [#5592](https://github.com/filecoin-project/lotus/pull/5592) Verify FFI version before building
|
- [#5592](https://github.com/filecoin-project/lotus/pull/5592) Verify FFI version before building
|
||||||
|
|
||||||
## Dependency Updates
|
## Dependency Updates
|
||||||
- [#5296](https://github.com/filecoin-project/lotus/pull/5396) Upgraded to [raulk/go-watchdog@v1.0.1](https://github.com/raulk/go-watchdog/releases/tag/v1.0.1)
|
- [#5296](https://github.com/filecoin-project/lotus/pull/5396) Upgraded to [raulk/go-watchdog@v1.0.1](https://github.com/raulk/go-watchdog/releases/tag/v1.0.1)
|
||||||
- [#5450](https://github.com/filecoin-project/lotus/pull/5450) Dependency updates
|
- [#5450](https://github.com/filecoin-project/lotus/pull/5450) Dependency updates
|
||||||
- [#5425](https://github.com/filecoin-project/lotus/pull/5425) Fixed stale imports in testplans/lotus-soup
|
- [#5425](https://github.com/filecoin-project/lotus/pull/5425) Fixed stale imports in testplans/lotus-soup
|
||||||
- [#5535](https://github.com/filecoin-project/lotus/pull/5535) Updated to [go-fil-markets@v1.1.7](https://github.com/filecoin-project/go-fil-markets/releases/tag/v1.1.7)
|
- [#5535](https://github.com/filecoin-project/lotus/pull/5535) Updated to [go-fil-markets@v1.1.7](https://github.com/filecoin-project/go-fil-markets/releases/tag/v1.1.7)
|
||||||
- [#5616](https://github.com/filecoin-project/lotus/pull/5600) Updated to [filecoin-ffi@b6e0b35fb49ed0fe](https://github.com/filecoin-project/filecoin-ffi/releases/tag/b6e0b35fb49ed0fe)
|
- [#5616](https://github.com/filecoin-project/lotus/pull/5600) Updated to [filecoin-ffi@b6e0b35fb49ed0fe](https://github.com/filecoin-project/filecoin-ffi/releases/tag/b6e0b35fb49ed0fe)
|
||||||
- [#5599](https://github.com/filecoin-project/lotus/pull/5599) Updated to [go-bitfield@v0.2.4](https://github.com/filecoin-project/go-bitfield/releases/tag/v0.2.4)
|
- [#5599](https://github.com/filecoin-project/lotus/pull/5599) Updated to [go-bitfield@v0.2.4](https://github.com/filecoin-project/go-bitfield/releases/tag/v0.2.4)
|
||||||
- [#5614](https://github.com/filecoin-project/lotus/pull/5614), , [#5621](https://github.com/filecoin-project/lotus/pull/5621) Updated to [go-jsonrpc@v0.1.3](https://github.com/filecoin-project/go-jsonrpc/releases/tag/v0.1.3)
|
- [#5614](https://github.com/filecoin-project/lotus/pull/5614), , [#5621](https://github.com/filecoin-project/lotus/pull/5621) Updated to [go-jsonrpc@v0.1.3](https://github.com/filecoin-project/go-jsonrpc/releases/tag/v0.1.3)
|
||||||
- [#5459](https://github.com/filecoin-project/lotus/pull/5459) Updated to [spec-actors@v3.0.1](https://github.com/filecoin-project/specs-actors/releases/tag/v3.0.1)
|
- [#5459](https://github.com/filecoin-project/lotus/pull/5459) Updated to [spec-actors@v3.0.1](https://github.com/filecoin-project/specs-actors/releases/tag/v3.0.1)
|
||||||
|
|
||||||
|
|
||||||
## Network Version v10 Upgrade
|
## Network Version v10 Upgrade
|
||||||
@ -242,7 +449,7 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec
|
|||||||
- [#5603](https://github.com/filecoin-project/lotus/pull/5603) Set nerpanet's upgrade epochs up to v3 actors
|
- [#5603](https://github.com/filecoin-project/lotus/pull/5603) Set nerpanet's upgrade epochs up to v3 actors
|
||||||
- [#5471](https://github.com/filecoin-project/lotus/pull/5471), [#5456](https://github.com/filecoin-project/lotus/pull/5456) Set calibration net actor v3 migration epochs for testing
|
- [#5471](https://github.com/filecoin-project/lotus/pull/5471), [#5456](https://github.com/filecoin-project/lotus/pull/5456) Set calibration net actor v3 migration epochs for testing
|
||||||
- [#5434](https://github.com/filecoin-project/lotus/pull/5434) Implemented pre-migration framework
|
- [#5434](https://github.com/filecoin-project/lotus/pull/5434) Implemented pre-migration framework
|
||||||
- [#5476](https://github.com/filecoin-project/lotus/pull/5477) Tune migration
|
- [#5476](https://github.com/filecoin-project/lotus/pull/5477) Tune migration
|
||||||
|
|
||||||
# 1.4.1 / 2021-01-20
|
# 1.4.1 / 2021-01-20
|
||||||
|
|
||||||
@ -441,9 +648,9 @@ This is an optional Lotus release that introduces various improvements to the mi
|
|||||||
- Error out deals that are not activated by proposed deal start epoch (https://github.com/filecoin-project/lotus/pull/5061)
|
- Error out deals that are not activated by proposed deal start epoch (https://github.com/filecoin-project/lotus/pull/5061)
|
||||||
|
|
||||||
# 1.2.1 / 2020-11-20
|
# 1.2.1 / 2020-11-20
|
||||||
|
|
||||||
This is a very small release of Lotus that fixes an issue users are experiencing when importing snapshots. There is no need to upgrade unless you experience an issue with creating a new datastore directory in the Lotus repo.
|
This is a very small release of Lotus that fixes an issue users are experiencing when importing snapshots. There is no need to upgrade unless you experience an issue with creating a new datastore directory in the Lotus repo.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- fix blockstore directory not created automatically (https://github.com/filecoin-project/lotus/pull/4922)
|
- fix blockstore directory not created automatically (https://github.com/filecoin-project/lotus/pull/4922)
|
||||||
@ -463,7 +670,7 @@ The changes that break consensus are:
|
|||||||
- Correction of the VM circulating supply calculation (https://github.com/filecoin-project/lotus/pull/4862)
|
- Correction of the VM circulating supply calculation (https://github.com/filecoin-project/lotus/pull/4862)
|
||||||
- Retuning gas costs (https://github.com/filecoin-project/lotus/pull/4830)
|
- Retuning gas costs (https://github.com/filecoin-project/lotus/pull/4830)
|
||||||
- Avoid sending messages to the zero BLS address (https://github.com/filecoin-project/lotus/pull/4888)
|
- Avoid sending messages to the zero BLS address (https://github.com/filecoin-project/lotus/pull/4888)
|
||||||
|
|
||||||
## Other Changes
|
## Other Changes
|
||||||
|
|
||||||
- delayed pubsub subscribe for messages topic (https://github.com/filecoin-project/lotus/pull/3646)
|
- delayed pubsub subscribe for messages topic (https://github.com/filecoin-project/lotus/pull/3646)
|
||||||
@ -620,7 +827,7 @@ This is an optional release of Lotus that upgrades Lotus dependencies, and inclu
|
|||||||
|
|
||||||
This is a patch release of Lotus that builds on the fixes involving worker keys that was introduced in v1.1.1. Miners and node operators should update to this release as soon as possible in order to ensure their blocks are propagated and validated.
|
This is a patch release of Lotus that builds on the fixes involving worker keys that was introduced in v1.1.1. Miners and node operators should update to this release as soon as possible in order to ensure their blocks are propagated and validated.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Handle worker key changes correctly in runtime (https://github.com/filecoin-project/lotus/pull/4579)
|
- Handle worker key changes correctly in runtime (https://github.com/filecoin-project/lotus/pull/4579)
|
||||||
|
|
||||||
@ -863,7 +1070,7 @@ This consensus-breaking release of Lotus upgrades the actors version to v2.0.0.
|
|||||||
- Fix pond (https://github.com/filecoin-project/lotus/pull/4203)
|
- Fix pond (https://github.com/filecoin-project/lotus/pull/4203)
|
||||||
- allow manual setting of noncefix fee cap (https://github.com/filecoin-project/lotus/pull/4205)
|
- allow manual setting of noncefix fee cap (https://github.com/filecoin-project/lotus/pull/4205)
|
||||||
- implement command to get execution traces of any message (https://github.com/filecoin-project/lotus/pull/4200)
|
- implement command to get execution traces of any message (https://github.com/filecoin-project/lotus/pull/4200)
|
||||||
- conformance: minor driver refactors (https://github.com/filecoin-project/lotus/pull/4211)
|
- conformance: minor driver refactors (https://github.com/filecoin-project/lotus/pull/4211)
|
||||||
- lotus-pcr: ignore all other messages (https://github.com/filecoin-project/lotus/pull/4218)
|
- lotus-pcr: ignore all other messages (https://github.com/filecoin-project/lotus/pull/4218)
|
||||||
- lotus-pcr: zero refund (https://github.com/filecoin-project/lotus/pull/4229)
|
- lotus-pcr: zero refund (https://github.com/filecoin-project/lotus/pull/4229)
|
||||||
|
|
||||||
@ -890,7 +1097,7 @@ We are grateful for every contribution!
|
|||||||
|
|
||||||
This optional release of Lotus introduces a new version of markets which switches to CBOR-map encodings, and allows datastore migrations. The release also introduces several improvements to the mining process, a few performance optimizations, and a battery of UX additions and enhancements.
|
This optional release of Lotus introduces a new version of markets which switches to CBOR-map encodings, and allows datastore migrations. The release also introduces several improvements to the mining process, a few performance optimizations, and a battery of UX additions and enhancements.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
#### Dependencies
|
#### Dependencies
|
||||||
|
|
||||||
@ -961,7 +1168,7 @@ This consensus-breaking release of Lotus introduces an upgrade to the network. T
|
|||||||
|
|
||||||
This release also updates go-fil-markets to fix an incompatibility issue between v0.7.2 and earlier versions.
|
This release also updates go-fil-markets to fix an incompatibility issue between v0.7.2 and earlier versions.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
#### Dependencies
|
#### Dependencies
|
||||||
|
|
||||||
@ -1050,7 +1257,7 @@ This optional release of Lotus introduces some critical fixes to the window PoSt
|
|||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
#### Some notable improvements:
|
#### Some notable improvements:
|
||||||
|
|
||||||
- Correctly construct params for `SubmitWindowedPoSt` messages (https://github.com/filecoin-project/lotus/pull/3909)
|
- Correctly construct params for `SubmitWindowedPoSt` messages (https://github.com/filecoin-project/lotus/pull/3909)
|
||||||
- Skip sectors correctly for Window PoSt (https://github.com/filecoin-project/lotus/pull/3839)
|
- Skip sectors correctly for Window PoSt (https://github.com/filecoin-project/lotus/pull/3839)
|
||||||
@ -1086,7 +1293,7 @@ This consensus-breaking release of Lotus is designed to test a network upgrade o
|
|||||||
- Drand upgrade (https://github.com/filecoin-project/lotus/pull/3670)
|
- Drand upgrade (https://github.com/filecoin-project/lotus/pull/3670)
|
||||||
- Multisig API additions (https://github.com/filecoin-project/lotus/pull/3590)
|
- Multisig API additions (https://github.com/filecoin-project/lotus/pull/3590)
|
||||||
|
|
||||||
#### Storage Miner
|
#### Storage Miner
|
||||||
|
|
||||||
- Increase the number of times precommit2 is attempted before moving back to precommit1 (https://github.com/filecoin-project/lotus/pull/3720)
|
- Increase the number of times precommit2 is attempted before moving back to precommit1 (https://github.com/filecoin-project/lotus/pull/3720)
|
||||||
|
|
||||||
@ -1129,7 +1336,7 @@ This release introduces some critical fixes to message selection and gas estimat
|
|||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
#### Messagepool
|
#### Messagepool
|
||||||
|
|
||||||
- Warn when optimal selection fails to pack a block and we fall back to random selection (https://github.com/filecoin-project/lotus/pull/3708)
|
- Warn when optimal selection fails to pack a block and we fall back to random selection (https://github.com/filecoin-project/lotus/pull/3708)
|
||||||
- Add basic command for printing gas performance of messages in the mpool (https://github.com/filecoin-project/lotus/pull/3701)
|
- Add basic command for printing gas performance of messages in the mpool (https://github.com/filecoin-project/lotus/pull/3701)
|
||||||
@ -1199,7 +1406,7 @@ This release also introduces many improvements to Lotus! Among them are a new ve
|
|||||||
- Add additional info about gas premium (https://github.com/filecoin-project/lotus/pull/3578)
|
- Add additional info about gas premium (https://github.com/filecoin-project/lotus/pull/3578)
|
||||||
- Fix GasPremium capping logic (https://github.com/filecoin-project/lotus/pull/3552)
|
- Fix GasPremium capping logic (https://github.com/filecoin-project/lotus/pull/3552)
|
||||||
|
|
||||||
#### Payment channels
|
#### Payment channels
|
||||||
|
|
||||||
- Get available funds by address or by from/to (https://github.com/filecoin-project/lotus/pull/3547)
|
- Get available funds by address or by from/to (https://github.com/filecoin-project/lotus/pull/3547)
|
||||||
- Create `lotus paych status` command (https://github.com/filecoin-project/lotus/pull/3523)
|
- Create `lotus paych status` command (https://github.com/filecoin-project/lotus/pull/3523)
|
||||||
@ -1249,7 +1456,7 @@ This patch includes a crucial fix to the message pool selection logic, strongly
|
|||||||
|
|
||||||
This patch includes a hotfix to the `GasEstimateFeeCap` method, capping the estimated fee to a reasonable level by default.
|
This patch includes a hotfix to the `GasEstimateFeeCap` method, capping the estimated fee to a reasonable level by default.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
- Added target height to sync wait (https://github.com/filecoin-project/lotus/pull/3502)
|
- Added target height to sync wait (https://github.com/filecoin-project/lotus/pull/3502)
|
||||||
- Disable codecov annotations (https://github.com/filecoin-project/lotus/pull/3514)
|
- Disable codecov annotations (https://github.com/filecoin-project/lotus/pull/3514)
|
||||||
@ -1279,7 +1486,7 @@ This patch includes some bugfixes to the sector sealing process, and updates go-
|
|||||||
|
|
||||||
# 0.5.7 / 2020-08-31
|
# 0.5.7 / 2020-08-31
|
||||||
|
|
||||||
This patch release includes some bugfixes and enhancements to the sector lifecycle and message pool logic.
|
This patch release includes some bugfixes and enhancements to the sector lifecycle and message pool logic.
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|
||||||
@ -1299,7 +1506,7 @@ Hotfix release that fixes a panic in the sealing scheduler (https://github.com/f
|
|||||||
# 0.5.5
|
# 0.5.5
|
||||||
|
|
||||||
This patch release introduces a large number of improvements to the sealing process.
|
This patch release introduces a large number of improvements to the sealing process.
|
||||||
It also updates go-fil-markets to
|
It also updates go-fil-markets to
|
||||||
[version 0.5.8](https://github.com/filecoin-project/go-fil-markets/releases/tag/v0.5.8),
|
[version 0.5.8](https://github.com/filecoin-project/go-fil-markets/releases/tag/v0.5.8),
|
||||||
and go-libp2p-pubsub to [v0.3.5](https://github.com/libp2p/go-libp2p-pubsub/releases/tag/v0.3.5).
|
and go-libp2p-pubsub to [v0.3.5](https://github.com/libp2p/go-libp2p-pubsub/releases/tag/v0.3.5).
|
||||||
|
|
||||||
@ -1312,16 +1519,16 @@ and go-libp2p-pubsub to [v0.3.5](https://github.com/libp2p/go-libp2p-pubsub/rele
|
|||||||
|
|
||||||
- The following improvements were introduced in https://github.com/filecoin-project/lotus/pull/3350.
|
- The following improvements were introduced in https://github.com/filecoin-project/lotus/pull/3350.
|
||||||
|
|
||||||
- Allow `lotus-miner sectors remove` to remove a sector in any state.
|
- Allow `lotus-miner sectors remove` to remove a sector in any state.
|
||||||
- Create a separate state in the storage FSM dedicated to submitting the Commit message.
|
- Create a separate state in the storage FSM dedicated to submitting the Commit message.
|
||||||
- Recovery for when the Deal IDs of deals in a sector get changed in a reorg.
|
- Recovery for when the Deal IDs of deals in a sector get changed in a reorg.
|
||||||
- Auto-retry sending Precommit and Commit messages if they run out of gas
|
- Auto-retry sending Precommit and Commit messages if they run out of gas
|
||||||
- Auto-retry sector remove tasks when they fail
|
- Auto-retry sector remove tasks when they fail
|
||||||
- Compact worker windows, and allow their tasks to be executed in any order
|
- Compact worker windows, and allow their tasks to be executed in any order
|
||||||
|
|
||||||
- Don't simply skip PoSt for bad sectors (https://github.com/filecoin-project/lotus/pull/3323)
|
- Don't simply skip PoSt for bad sectors (https://github.com/filecoin-project/lotus/pull/3323)
|
||||||
|
|
||||||
#### Message Pool
|
#### Message Pool
|
||||||
|
|
||||||
- Spam Protection: Track required funds for pending messages (https://github.com/filecoin-project/lotus/pull/3313)
|
- Spam Protection: Track required funds for pending messages (https://github.com/filecoin-project/lotus/pull/3313)
|
||||||
|
|
||||||
@ -1346,7 +1553,7 @@ A patch release, containing a few nice bugfixes and improvements:
|
|||||||
|
|
||||||
# 0.5.3
|
# 0.5.3
|
||||||
|
|
||||||
Yet another hotfix release.
|
Yet another hotfix release.
|
||||||
A lesson for readers, having people who have been awake for 12+ hours review
|
A lesson for readers, having people who have been awake for 12+ hours review
|
||||||
your hotfix PR is not a good idea. Find someone who has enough slept recently
|
your hotfix PR is not a good idea. Find someone who has enough slept recently
|
||||||
enough to give you good code review, otherwise you'll end up quickly bumping
|
enough to give you good code review, otherwise you'll end up quickly bumping
|
||||||
@ -1365,9 +1572,9 @@ This is a hotfix release.
|
|||||||
|
|
||||||
# 0.5.1 / 2020-08-24
|
# 0.5.1 / 2020-08-24
|
||||||
|
|
||||||
The Space Race release!
|
The Space Race release!
|
||||||
This release contains the genesis car file and bootstrap peers for the space
|
This release contains the genesis car file and bootstrap peers for the space
|
||||||
race network.
|
race network.
|
||||||
|
|
||||||
Additionally, we included two small fixes to genesis creation:
|
Additionally, we included two small fixes to genesis creation:
|
||||||
- Randomize ticket value in genesis generation
|
- Randomize ticket value in genesis generation
|
||||||
@ -1385,9 +1592,9 @@ Among the highlights included in this release are:
|
|||||||
|
|
||||||
- Gas changes: We implemented EIP-1559 and introduced real gas values.
|
- Gas changes: We implemented EIP-1559 and introduced real gas values.
|
||||||
- Deal-making: We now support "Committed Capacity" sectors, "fast-retrieval" deals,
|
- Deal-making: We now support "Committed Capacity" sectors, "fast-retrieval" deals,
|
||||||
and the packing of multiple deals into a single sector.
|
and the packing of multiple deals into a single sector.
|
||||||
- Renamed features: We renamed some of the binaries, environment variables, and default
|
- Renamed features: We renamed some of the binaries, environment variables, and default
|
||||||
paths associated with a Lotus node.
|
paths associated with a Lotus node.
|
||||||
|
|
||||||
### Gas changes
|
### Gas changes
|
||||||
|
|
||||||
@ -1395,19 +1602,19 @@ We made some significant changes to the mechanics of gas in this release.
|
|||||||
|
|
||||||
#### Network fee
|
#### Network fee
|
||||||
|
|
||||||
We implemented something similar to
|
We implemented something similar to
|
||||||
[Ethereum's EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).
|
[Ethereum's EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).
|
||||||
The `Message` structure had three changes:
|
The `Message` structure had three changes:
|
||||||
- The `GasPrice` field has been removed
|
- The `GasPrice` field has been removed
|
||||||
- A new `GasFeeCap` field has been added, which controls the maximum cost
|
- A new `GasFeeCap` field has been added, which controls the maximum cost
|
||||||
the sender incurs for the message
|
the sender incurs for the message
|
||||||
- A new `GasPremium` field has been added, which controls the reward a miner
|
- A new `GasPremium` field has been added, which controls the reward a miner
|
||||||
earns for including the message
|
earns for including the message
|
||||||
|
|
||||||
A sender will never be charged more than `GasFeeCap * GasLimit`.
|
A sender will never be charged more than `GasFeeCap * GasLimit`.
|
||||||
A miner will typically earn `GasPremium * GasLimit` as a reward.
|
A miner will typically earn `GasPremium * GasLimit` as a reward.
|
||||||
|
|
||||||
The `Blockheader` structure has one new field, called `ParentBaseFee`.
|
The `Blockheader` structure has one new field, called `ParentBaseFee`.
|
||||||
Informally speaking,the `ParentBaseFee`
|
Informally speaking,the `ParentBaseFee`
|
||||||
is increased when blocks are densely packed with messages, and decreased otherwise.
|
is increased when blocks are densely packed with messages, and decreased otherwise.
|
||||||
|
|
||||||
|
11
Makefile
11
Makefile
@ -303,17 +303,10 @@ clean-services: clean-all-services
|
|||||||
|
|
||||||
buildall: $(BINS)
|
buildall: $(BINS)
|
||||||
|
|
||||||
completions:
|
|
||||||
./scripts/make-completions.sh lotus
|
|
||||||
./scripts/make-completions.sh lotus-miner
|
|
||||||
.PHONY: completions
|
|
||||||
|
|
||||||
install-completions:
|
install-completions:
|
||||||
mkdir -p /usr/share/bash-completion/completions /usr/local/share/zsh/site-functions/
|
mkdir -p /usr/share/bash-completion/completions /usr/local/share/zsh/site-functions/
|
||||||
install -C ./scripts/bash-completion/lotus /usr/share/bash-completion/completions/lotus
|
install -C ./scripts/bash-completion/lotus /usr/share/bash-completion/completions/lotus
|
||||||
install -C ./scripts/bash-completion/lotus-miner /usr/share/bash-completion/completions/lotus-miner
|
|
||||||
install -C ./scripts/zsh-completion/lotus /usr/local/share/zsh/site-functions/_lotus
|
install -C ./scripts/zsh-completion/lotus /usr/local/share/zsh/site-functions/_lotus
|
||||||
install -C ./scripts/zsh-completion/lotus-miner /usr/local/share/zsh/site-functions/_lotus-miner
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(CLEAN) $(BINS)
|
rm -rf $(CLEAN) $(BINS)
|
||||||
@ -375,6 +368,10 @@ gen: actors-gen type-gen method-gen docsgen api-gen
|
|||||||
@echo ">>> IF YOU'VE MODIFIED THE CLI, REMEMBER TO ALSO MAKE docsgen-cli"
|
@echo ">>> IF YOU'VE MODIFIED THE CLI, REMEMBER TO ALSO MAKE docsgen-cli"
|
||||||
.PHONY: gen
|
.PHONY: gen
|
||||||
|
|
||||||
|
snap: lotus lotus-miner lotus-worker
|
||||||
|
snapcraft
|
||||||
|
# snapcraft upload ./lotus_*.snap
|
||||||
|
|
||||||
# separate from gen because it needs binaries
|
# separate from gen because it needs binaries
|
||||||
docsgen-cli: lotus lotus-miner lotus-worker
|
docsgen-cli: lotus lotus-miner lotus-worker
|
||||||
python ./scripts/generate-lotus-cli.py
|
python ./scripts/generate-lotus-cli.py
|
||||||
|
@ -323,6 +323,8 @@ type FullNode interface {
|
|||||||
ClientRemoveImport(ctx context.Context, importID multistore.StoreID) error //perm:admin
|
ClientRemoveImport(ctx context.Context, importID multistore.StoreID) error //perm:admin
|
||||||
// ClientStartDeal proposes a deal with a miner.
|
// ClientStartDeal proposes a deal with a miner.
|
||||||
ClientStartDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error) //perm:admin
|
ClientStartDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error) //perm:admin
|
||||||
|
// ClientStatelessDeal fire-and-forget-proposes an offline deal to a miner without subsequent tracking.
|
||||||
|
ClientStatelessDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error) //perm:write
|
||||||
// ClientGetDealInfo returns the latest information about a given deal.
|
// ClientGetDealInfo returns the latest information about a given deal.
|
||||||
ClientGetDealInfo(context.Context, cid.Cid) (*DealInfo, error) //perm:read
|
ClientGetDealInfo(context.Context, cid.Cid) (*DealInfo, error) //perm:read
|
||||||
// ClientListDeals returns information about the deals made by the local client.
|
// ClientListDeals returns information about the deals made by the local client.
|
||||||
|
@ -771,6 +771,21 @@ func (mr *MockFullNodeMockRecorder) ClientStartDeal(arg0, arg1 interface{}) *gom
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientStartDeal", reflect.TypeOf((*MockFullNode)(nil).ClientStartDeal), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientStartDeal", reflect.TypeOf((*MockFullNode)(nil).ClientStartDeal), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClientStatelessDeal mocks base method
|
||||||
|
func (m *MockFullNode) ClientStatelessDeal(arg0 context.Context, arg1 *api.StartDealParams) (*cid.Cid, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ClientStatelessDeal", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*cid.Cid)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClientStatelessDeal indicates an expected call of ClientStatelessDeal
|
||||||
|
func (mr *MockFullNodeMockRecorder) ClientStatelessDeal(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientStatelessDeal", reflect.TypeOf((*MockFullNode)(nil).ClientStatelessDeal), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// Closing mocks base method
|
// Closing mocks base method
|
||||||
func (m *MockFullNode) Closing(arg0 context.Context) (<-chan struct{}, error) {
|
func (m *MockFullNode) Closing(arg0 context.Context) (<-chan struct{}, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
@ -205,6 +205,8 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
ClientStartDeal func(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) `perm:"admin"`
|
ClientStartDeal func(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) `perm:"admin"`
|
||||||
|
|
||||||
|
ClientStatelessDeal func(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"`
|
CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"`
|
||||||
|
|
||||||
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
@ -1399,6 +1401,14 @@ func (s *FullNodeStub) ClientStartDeal(p0 context.Context, p1 *StartDealParams)
|
|||||||
return nil, xerrors.New("method not supported")
|
return nil, xerrors.New("method not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) ClientStatelessDeal(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) {
|
||||||
|
return s.Internal.ClientStatelessDeal(p0, p1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) ClientStatelessDeal(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) {
|
||||||
|
return nil, xerrors.New("method not supported")
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) CreateBackup(p0 context.Context, p1 string) error {
|
func (s *FullNodeStruct) CreateBackup(p0 context.Context, p1 string) error {
|
||||||
return s.Internal.CreateBackup(p0, p1)
|
return s.Internal.CreateBackup(p0, p1)
|
||||||
}
|
}
|
||||||
|
@ -304,6 +304,8 @@ type FullNode interface {
|
|||||||
ClientRemoveImport(ctx context.Context, importID multistore.StoreID) error //perm:admin
|
ClientRemoveImport(ctx context.Context, importID multistore.StoreID) error //perm:admin
|
||||||
// ClientStartDeal proposes a deal with a miner.
|
// ClientStartDeal proposes a deal with a miner.
|
||||||
ClientStartDeal(ctx context.Context, params *api.StartDealParams) (*cid.Cid, error) //perm:admin
|
ClientStartDeal(ctx context.Context, params *api.StartDealParams) (*cid.Cid, error) //perm:admin
|
||||||
|
// ClientStatelessDeal fire-and-forget-proposes an offline deal to a miner without subsequent tracking.
|
||||||
|
ClientStatelessDeal(ctx context.Context, params *api.StartDealParams) (*cid.Cid, error) //perm:write
|
||||||
// ClientGetDealInfo returns the latest information about a given deal.
|
// ClientGetDealInfo returns the latest information about a given deal.
|
||||||
ClientGetDealInfo(context.Context, cid.Cid) (*api.DealInfo, error) //perm:read
|
ClientGetDealInfo(context.Context, cid.Cid) (*api.DealInfo, error) //perm:read
|
||||||
// ClientListDeals returns information about the deals made by the local client.
|
// ClientListDeals returns information about the deals made by the local client.
|
||||||
|
@ -123,6 +123,8 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
ClientStartDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"admin"`
|
ClientStartDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"admin"`
|
||||||
|
|
||||||
|
ClientStatelessDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"`
|
CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"`
|
||||||
|
|
||||||
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
@ -818,6 +820,14 @@ func (s *FullNodeStub) ClientStartDeal(p0 context.Context, p1 *api.StartDealPara
|
|||||||
return nil, xerrors.New("method not supported")
|
return nil, xerrors.New("method not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) ClientStatelessDeal(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) {
|
||||||
|
return s.Internal.ClientStatelessDeal(p0, p1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) ClientStatelessDeal(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) {
|
||||||
|
return nil, xerrors.New("method not supported")
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) CreateBackup(p0 context.Context, p1 string) error {
|
func (s *FullNodeStruct) CreateBackup(p0 context.Context, p1 string) error {
|
||||||
return s.Internal.CreateBackup(p0, p1)
|
return s.Internal.CreateBackup(p0, p1)
|
||||||
}
|
}
|
||||||
|
@ -771,6 +771,21 @@ func (mr *MockFullNodeMockRecorder) ClientStartDeal(arg0, arg1 interface{}) *gom
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientStartDeal", reflect.TypeOf((*MockFullNode)(nil).ClientStartDeal), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientStartDeal", reflect.TypeOf((*MockFullNode)(nil).ClientStartDeal), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClientStatelessDeal mocks base method
|
||||||
|
func (m *MockFullNode) ClientStatelessDeal(arg0 context.Context, arg1 *api.StartDealParams) (*cid.Cid, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ClientStatelessDeal", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*cid.Cid)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClientStatelessDeal indicates an expected call of ClientStatelessDeal
|
||||||
|
func (mr *MockFullNodeMockRecorder) ClientStatelessDeal(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientStatelessDeal", reflect.TypeOf((*MockFullNode)(nil).ClientStatelessDeal), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// Closing mocks base method
|
// Closing mocks base method
|
||||||
func (m *MockFullNode) Closing(arg0 context.Context) (<-chan struct{}, error) {
|
func (m *MockFullNode) Closing(arg0 context.Context) (<-chan struct{}, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -24,27 +24,27 @@ var UpgradeIgnitionHeight = abi.ChainEpoch(-2)
|
|||||||
var UpgradeRefuelHeight = abi.ChainEpoch(-3)
|
var UpgradeRefuelHeight = abi.ChainEpoch(-3)
|
||||||
var UpgradeTapeHeight = abi.ChainEpoch(-4)
|
var UpgradeTapeHeight = abi.ChainEpoch(-4)
|
||||||
|
|
||||||
var UpgradeActorsV2Height = abi.ChainEpoch(10)
|
var UpgradeActorsV2Height = abi.ChainEpoch(-5)
|
||||||
var UpgradeLiftoffHeight = abi.ChainEpoch(-5)
|
var UpgradeLiftoffHeight = abi.ChainEpoch(-6)
|
||||||
|
|
||||||
var UpgradeKumquatHeight = abi.ChainEpoch(15)
|
var UpgradeKumquatHeight = abi.ChainEpoch(-7)
|
||||||
var UpgradeCalicoHeight = abi.ChainEpoch(20)
|
var UpgradeCalicoHeight = abi.ChainEpoch(-8)
|
||||||
var UpgradePersianHeight = abi.ChainEpoch(25)
|
var UpgradePersianHeight = abi.ChainEpoch(-9)
|
||||||
var UpgradeOrangeHeight = abi.ChainEpoch(27)
|
var UpgradeOrangeHeight = abi.ChainEpoch(-10)
|
||||||
var UpgradeClausHeight = abi.ChainEpoch(30)
|
var UpgradeClausHeight = abi.ChainEpoch(-11)
|
||||||
|
|
||||||
var UpgradeActorsV3Height = abi.ChainEpoch(35)
|
var UpgradeActorsV3Height = abi.ChainEpoch(-12)
|
||||||
|
|
||||||
var UpgradeNorwegianHeight = abi.ChainEpoch(40)
|
var UpgradeNorwegianHeight = abi.ChainEpoch(-13)
|
||||||
|
|
||||||
var UpgradeActorsV4Height = abi.ChainEpoch(45)
|
var UpgradeActorsV4Height = abi.ChainEpoch(-14)
|
||||||
|
|
||||||
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
policy.SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1)
|
policy.SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1, abi.RegisteredSealProof_StackedDrg8MiBV1)
|
||||||
policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048))
|
policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048))
|
||||||
policy.SetMinVerifiedDealSize(abi.NewStoragePower(256))
|
policy.SetMinVerifiedDealSize(abi.NewStoragePower(256))
|
||||||
policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10))
|
policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10))
|
||||||
|
@ -8,12 +8,10 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/policy"
|
|
||||||
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -54,29 +52,19 @@ const UpgradeOrangeHeight = 336458
|
|||||||
const UpgradeClausHeight = 343200
|
const UpgradeClausHeight = 343200
|
||||||
|
|
||||||
// 2021-03-04T00:00:30Z
|
// 2021-03-04T00:00:30Z
|
||||||
var UpgradeActorsV3Height = abi.ChainEpoch(550321)
|
const UpgradeActorsV3Height = 550321
|
||||||
|
|
||||||
// 2021-04-12T22:00:00Z
|
// 2021-04-12T22:00:00Z
|
||||||
const UpgradeNorwegianHeight = 665280
|
const UpgradeNorwegianHeight = 665280
|
||||||
|
|
||||||
// 2021-04-29T06:00:00Z
|
// 2021-04-29T06:00:00Z
|
||||||
var UpgradeActorsV4Height = abi.ChainEpoch(712320)
|
const UpgradeActorsV4Height = 712320
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
policy.SetConsensusMinerMinPower(abi.NewStoragePower(10 << 40))
|
|
||||||
|
|
||||||
if os.Getenv("LOTUS_USE_TEST_ADDRESSES") != "1" {
|
if os.Getenv("LOTUS_USE_TEST_ADDRESSES") != "1" {
|
||||||
SetAddressNetwork(address.Mainnet)
|
SetAddressNetwork(address.Mainnet)
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.Getenv("LOTUS_DISABLE_V3_ACTOR_MIGRATION") == "1" {
|
|
||||||
UpgradeActorsV3Height = math.MaxInt64
|
|
||||||
}
|
|
||||||
|
|
||||||
if os.Getenv("LOTUS_DISABLE_V4_ACTOR_MIGRATION") == "1" {
|
|
||||||
UpgradeActorsV4Height = math.MaxInt64
|
|
||||||
}
|
|
||||||
|
|
||||||
Devnet = false
|
Devnet = false
|
||||||
|
|
||||||
BuildType = BuildMainnet
|
BuildType = BuildMainnet
|
||||||
|
@ -25,7 +25,7 @@ const UnixfsLinksPerLevel = 1024
|
|||||||
// Consensus / Network
|
// Consensus / Network
|
||||||
|
|
||||||
const AllowableClockDriftSecs = uint64(1)
|
const AllowableClockDriftSecs = uint64(1)
|
||||||
const NewestNetworkVersion = network.Version11
|
const NewestNetworkVersion = network.Version12
|
||||||
const ActorUpgradeNetworkVersion = network.Version4
|
const ActorUpgradeNetworkVersion = network.Version4
|
||||||
|
|
||||||
// Epochs
|
// Epochs
|
||||||
|
0
chain/actors/adt/temp
Normal file
0
chain/actors/adt/temp
Normal file
0
chain/actors/aerrors/temp
Normal file
0
chain/actors/aerrors/temp
Normal file
@ -6,33 +6,26 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
|
lotusactors "github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
var latestVersion = 4
|
|
||||||
|
|
||||||
var versions = []int{0, 2, 3, latestVersion}
|
|
||||||
|
|
||||||
var versionImports = map[int]string{
|
|
||||||
0: "/",
|
|
||||||
2: "/v2/",
|
|
||||||
3: "/v3/",
|
|
||||||
latestVersion: "/v4/",
|
|
||||||
}
|
|
||||||
|
|
||||||
var actors = map[string][]int{
|
var actors = map[string][]int{
|
||||||
"account": versions,
|
"account": lotusactors.Versions,
|
||||||
"cron": versions,
|
"cron": lotusactors.Versions,
|
||||||
"init": versions,
|
"init": lotusactors.Versions,
|
||||||
"market": versions,
|
"market": lotusactors.Versions,
|
||||||
"miner": versions,
|
"miner": lotusactors.Versions,
|
||||||
"multisig": versions,
|
"multisig": lotusactors.Versions,
|
||||||
"paych": versions,
|
"paych": lotusactors.Versions,
|
||||||
"power": versions,
|
"power": lotusactors.Versions,
|
||||||
"reward": versions,
|
"system": lotusactors.Versions,
|
||||||
"verifreg": versions,
|
"reward": lotusactors.Versions,
|
||||||
|
"verifreg": lotusactors.Versions,
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -71,14 +64,14 @@ func generateAdapters() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tpl := template.Must(template.New("").Funcs(template.FuncMap{
|
tpl := template.Must(template.New("").Funcs(template.FuncMap{
|
||||||
"import": func(v int) string { return versionImports[v] },
|
"import": func(v int) string { return getVersionImports()[v] },
|
||||||
}).Parse(string(af)))
|
}).Parse(string(af)))
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
|
||||||
err = tpl.Execute(&b, map[string]interface{}{
|
err = tpl.Execute(&b, map[string]interface{}{
|
||||||
"versions": versions,
|
"versions": versions,
|
||||||
"latestVersion": latestVersion,
|
"latestVersion": lotusactors.LatestVersion,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -103,14 +96,14 @@ func generateState(actDir string) error {
|
|||||||
return xerrors.Errorf("loading state adapter template: %w", err)
|
return xerrors.Errorf("loading state adapter template: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, version := range versions {
|
for _, version := range lotusactors.Versions {
|
||||||
tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af)))
|
tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af)))
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
|
||||||
err := tpl.Execute(&b, map[string]interface{}{
|
err := tpl.Execute(&b, map[string]interface{}{
|
||||||
"v": version,
|
"v": version,
|
||||||
"import": versionImports[version],
|
"import": getVersionImports()[version],
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -134,14 +127,14 @@ func generateMessages(actDir string) error {
|
|||||||
return xerrors.Errorf("loading message adapter template: %w", err)
|
return xerrors.Errorf("loading message adapter template: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, version := range versions {
|
for _, version := range lotusactors.Versions {
|
||||||
tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af)))
|
tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af)))
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
|
||||||
err := tpl.Execute(&b, map[string]interface{}{
|
err := tpl.Execute(&b, map[string]interface{}{
|
||||||
"v": version,
|
"v": version,
|
||||||
"import": versionImports[version],
|
"import": getVersionImports()[version],
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -167,13 +160,13 @@ func generatePolicy(policyPath string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tpl := template.Must(template.New("").Funcs(template.FuncMap{
|
tpl := template.Must(template.New("").Funcs(template.FuncMap{
|
||||||
"import": func(v int) string { return versionImports[v] },
|
"import": func(v int) string { return getVersionImports()[v] },
|
||||||
}).Parse(string(pf)))
|
}).Parse(string(pf)))
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
|
||||||
err = tpl.Execute(&b, map[string]interface{}{
|
err = tpl.Execute(&b, map[string]interface{}{
|
||||||
"versions": versions,
|
"versions": lotusactors.Versions,
|
||||||
"latestVersion": latestVersion,
|
"latestVersion": lotusactors.LatestVersion,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -198,13 +191,13 @@ func generateBuiltin(builtinPath string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tpl := template.Must(template.New("").Funcs(template.FuncMap{
|
tpl := template.Must(template.New("").Funcs(template.FuncMap{
|
||||||
"import": func(v int) string { return versionImports[v] },
|
"import": func(v int) string { return getVersionImports()[v] },
|
||||||
}).Parse(string(bf)))
|
}).Parse(string(bf)))
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
|
||||||
err = tpl.Execute(&b, map[string]interface{}{
|
err = tpl.Execute(&b, map[string]interface{}{
|
||||||
"versions": versions,
|
"versions": lotusactors.Versions,
|
||||||
"latestVersion": latestVersion,
|
"latestVersion": lotusactors.LatestVersion,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -216,3 +209,16 @@ func generateBuiltin(builtinPath string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getVersionImports() map[int]string {
|
||||||
|
versionImports := make(map[int]string, lotusactors.LatestVersion)
|
||||||
|
for _, v := range lotusactors.Versions {
|
||||||
|
if v == 0 {
|
||||||
|
versionImports[v] = "/"
|
||||||
|
} else {
|
||||||
|
versionImports[v] = "/v" + strconv.Itoa(v) + "/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return versionImports
|
||||||
|
}
|
||||||
|
0
chain/actors/agen/temp
Normal file
0
chain/actors/agen/temp
Normal file
@ -1,6 +1,7 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -60,8 +61,48 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store, addr)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store, addr)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store, addr)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store, addr)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.AccountActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.AccountActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.AccountActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.AccountActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
PubkeyAddress() (address.Address, error)
|
PubkeyAddress() (address.Address, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -34,8 +35,30 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store, addr)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.AccountActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
PubkeyAddress() (address.Address, error)
|
PubkeyAddress() (address.Address, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,12 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store, addr address.Address) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = account{{.v}}.State{Address:addr}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
account{{.v}}.State
|
account{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -28,3 +34,7 @@ type state{{.v}} struct {
|
|||||||
func (s *state{{.v}}) PubkeyAddress() (address.Address, error) {
|
func (s *state{{.v}}) PubkeyAddress() (address.Address, error) {
|
||||||
return s.Address, nil
|
return s.Address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/account/temp
Normal file
0
chain/actors/builtin/account/temp
Normal file
@ -20,6 +20,12 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store, addr address.Address) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
out.State = account0.State{Address: addr}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
account0.State
|
account0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -28,3 +34,7 @@ type state0 struct {
|
|||||||
func (s *state0) PubkeyAddress() (address.Address, error) {
|
func (s *state0) PubkeyAddress() (address.Address, error) {
|
||||||
return s.Address, nil
|
return s.Address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -20,6 +20,12 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store, addr address.Address) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
out.State = account2.State{Address: addr}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
account2.State
|
account2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -28,3 +34,7 @@ type state2 struct {
|
|||||||
func (s *state2) PubkeyAddress() (address.Address, error) {
|
func (s *state2) PubkeyAddress() (address.Address, error) {
|
||||||
return s.Address, nil
|
return s.Address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -20,6 +20,12 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store, addr address.Address) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
out.State = account3.State{Address: addr}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
account3.State
|
account3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -28,3 +34,7 @@ type state3 struct {
|
|||||||
func (s *state3) PubkeyAddress() (address.Address, error) {
|
func (s *state3) PubkeyAddress() (address.Address, error) {
|
||||||
return s.Address, nil
|
return s.Address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -20,6 +20,12 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store, addr address.Address) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
out.State = account4.State{Address: addr}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
account4.State
|
account4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -28,3 +34,7 @@ type state4 struct {
|
|||||||
func (s *state4) PubkeyAddress() (address.Address, error) {
|
func (s *state4) PubkeyAddress() (address.Address, error) {
|
||||||
return s.Address, nil
|
return s.Address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin"
|
builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin"
|
||||||
smoothing{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/util/smoothing"
|
smoothing{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/util/smoothing"
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/cbor"
|
"github.com/filecoin-project/go-state-types/cbor"
|
||||||
@ -17,7 +17,7 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
|
||||||
miner{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/miner"
|
miner{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/miner"
|
||||||
proof{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/runtime/proof"
|
proof{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/runtime/proof"
|
||||||
)
|
)
|
||||||
|
|
||||||
var SystemActorAddr = builtin{{.latestVersion}}.SystemActorAddr
|
var SystemActorAddr = builtin{{.latestVersion}}.SystemActorAddr
|
||||||
@ -33,12 +33,12 @@ var (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
EpochDurationSeconds = builtin{{.latestVersion}}.EpochDurationSeconds
|
EpochDurationSeconds = builtin{{.latestVersion}}.EpochDurationSeconds
|
||||||
EpochsInDay = builtin{{.latestVersion}}.EpochsInDay
|
EpochsInDay = builtin{{.latestVersion}}.EpochsInDay
|
||||||
SecondsInDay = builtin{{.latestVersion}}.SecondsInDay
|
SecondsInDay = builtin{{.latestVersion}}.SecondsInDay
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MethodSend = builtin{{.latestVersion}}.MethodSend
|
MethodSend = builtin{{.latestVersion}}.MethodSend
|
||||||
MethodConstructor = builtin{{.latestVersion}}.MethodConstructor
|
MethodConstructor = builtin{{.latestVersion}}.MethodConstructor
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -53,13 +53,13 @@ func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight,
|
|||||||
}
|
}
|
||||||
|
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
func FromV{{.}}FilterEstimate(v{{.}} smoothing{{.}}.FilterEstimate) FilterEstimate {
|
func FromV{{.}}FilterEstimate(v{{.}} smoothing{{.}}.FilterEstimate) FilterEstimate {
|
||||||
{{if (eq . 0)}}
|
{{if (eq . 0)}}
|
||||||
return (FilterEstimate)(v{{.}}) //nolint:unconvert
|
return (FilterEstimate)(v{{.}}) //nolint:unconvert
|
||||||
{{else}}
|
{{else}}
|
||||||
return (FilterEstimate)(v{{.}})
|
return (FilterEstimate)(v{{.}})
|
||||||
{{end}}
|
{{end}}
|
||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
type ActorStateLoader func(store adt.Store, root cid.Cid) (cbor.Marshaler, error)
|
type ActorStateLoader func(store adt.Store, root cid.Cid) (cbor.Marshaler, error)
|
||||||
@ -80,58 +80,58 @@ func Load(store adt.Store, act *types.Actor) (cbor.Marshaler, error) {
|
|||||||
|
|
||||||
func ActorNameByCode(c cid.Cid) string {
|
func ActorNameByCode(c cid.Cid) string {
|
||||||
switch {
|
switch {
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
case builtin{{.}}.IsBuiltinActor(c):
|
case builtin{{.}}.IsBuiltinActor(c):
|
||||||
return builtin{{.}}.ActorNameByCode(c)
|
return builtin{{.}}.ActorNameByCode(c)
|
||||||
{{end}}
|
{{end}}
|
||||||
default:
|
default:
|
||||||
return "<unknown>"
|
return "<unknown>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsBuiltinActor(c cid.Cid) bool {
|
func IsBuiltinActor(c cid.Cid) bool {
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
if builtin{{.}}.IsBuiltinActor(c) {
|
if builtin{{.}}.IsBuiltinActor(c) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsAccountActor(c cid.Cid) bool {
|
func IsAccountActor(c cid.Cid) bool {
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
if c == builtin{{.}}.AccountActorCodeID {
|
if c == builtin{{.}}.AccountActorCodeID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsStorageMinerActor(c cid.Cid) bool {
|
func IsStorageMinerActor(c cid.Cid) bool {
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
if c == builtin{{.}}.StorageMinerActorCodeID {
|
if c == builtin{{.}}.StorageMinerActorCodeID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsMultisigActor(c cid.Cid) bool {
|
func IsMultisigActor(c cid.Cid) bool {
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
if c == builtin{{.}}.MultisigActorCodeID {
|
if c == builtin{{.}}.MultisigActorCodeID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsPaymentChannelActor(c cid.Cid) bool {
|
func IsPaymentChannelActor(c cid.Cid) bool {
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
if c == builtin{{.}}.PaymentChannelActorCodeID {
|
if c == builtin{{.}}.PaymentChannelActorCodeID {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeAddress(addr string) address.Address {
|
func makeAddress(addr string) address.Address {
|
||||||
|
@ -1,10 +1,42 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
builtin{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
{{range .versions}}
|
||||||
|
builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin"
|
||||||
|
{{end}}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.CronActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Address = builtin{{.latestVersion}}.CronActorAddr
|
Address = builtin{{.latestVersion}}.CronActorAddr
|
||||||
Methods = builtin{{.latestVersion}}.MethodsCron
|
Methods = builtin{{.latestVersion}}.MethodsCron
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
type State interface {
|
||||||
|
GetState() interface{}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,64 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.CronActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.CronActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.CronActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.CronActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Address = builtin4.CronActorAddr
|
Address = builtin4.CronActorAddr
|
||||||
Methods = builtin4.MethodsCron
|
Methods = builtin4.MethodsCron
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type State interface {
|
||||||
|
GetState() interface{}
|
||||||
|
}
|
||||||
|
35
chain/actors/builtin/cron/state.go.template
Normal file
35
chain/actors/builtin/cron/state.go.template
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
cron{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/cron"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state{{.v}})(nil)
|
||||||
|
|
||||||
|
func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = *cron{{.v}}.ConstructState(cron{{.v}}.BuiltInEntries())
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state{{.v}} struct {
|
||||||
|
cron{{.v}}.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/cron/temp
Normal file
0
chain/actors/builtin/cron/temp
Normal file
35
chain/actors/builtin/cron/v0.go
Normal file
35
chain/actors/builtin/cron/v0.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
cron0 "github.com/filecoin-project/specs-actors/actors/builtin/cron"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state0)(nil)
|
||||||
|
|
||||||
|
func load0(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
out.State = *cron0.ConstructState(cron0.BuiltInEntries())
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state0 struct {
|
||||||
|
cron0.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
35
chain/actors/builtin/cron/v2.go
Normal file
35
chain/actors/builtin/cron/v2.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
cron2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/cron"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state2)(nil)
|
||||||
|
|
||||||
|
func load2(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
out.State = *cron2.ConstructState(cron2.BuiltInEntries())
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state2 struct {
|
||||||
|
cron2.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
35
chain/actors/builtin/cron/v3.go
Normal file
35
chain/actors/builtin/cron/v3.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
cron3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/cron"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state3)(nil)
|
||||||
|
|
||||||
|
func load3(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
out.State = *cron3.ConstructState(cron3.BuiltInEntries())
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state3 struct {
|
||||||
|
cron3.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
35
chain/actors/builtin/cron/v4.go
Normal file
35
chain/actors/builtin/cron/v4.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
cron4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/cron"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state4)(nil)
|
||||||
|
|
||||||
|
func load4(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
out.State = *cron4.ConstructState(cron4.BuiltInEntries())
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state4 struct {
|
||||||
|
cron4.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -39,6 +40,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store, networkName)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.InitActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -56,5 +78,12 @@ type State interface {
|
|||||||
// Sets the network's name. This should only be used on upgrade/fork.
|
// Sets the network's name. This should only be used on upgrade/fork.
|
||||||
SetNetworkName(name string) error
|
SetNetworkName(name string) error
|
||||||
|
|
||||||
addressMap() (adt.Map, error)
|
// Sets the next ID for the init actor. This should only be used for testing.
|
||||||
|
SetNextID(id abi.ActorID) error
|
||||||
|
|
||||||
|
// Sets the address map for the init actor. This should only be used for testing.
|
||||||
|
SetAddressMap(mcid cid.Cid) error
|
||||||
|
|
||||||
|
AddressMap() (adt.Map, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func DiffAddressMap(pre, cur State) (*AddressMapChanges, error) {
|
func DiffAddressMap(pre, cur State) (*AddressMapChanges, error) {
|
||||||
prem, err := pre.addressMap()
|
prem, err := pre.AddressMap()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
curm, err := cur.addressMap()
|
curm, err := cur.AddressMap()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -65,6 +66,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store, networkName)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store, networkName)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store, networkName)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store, networkName)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.InitActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.InitActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.InitActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.InitActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -82,5 +122,12 @@ type State interface {
|
|||||||
// Sets the network's name. This should only be used on upgrade/fork.
|
// Sets the network's name. This should only be used on upgrade/fork.
|
||||||
SetNetworkName(name string) error
|
SetNetworkName(name string) error
|
||||||
|
|
||||||
addressMap() (adt.Map, error)
|
// Sets the next ID for the init actor. This should only be used for testing.
|
||||||
|
SetNextID(id abi.ActorID) error
|
||||||
|
|
||||||
|
// Sets the address map for the init actor. This should only be used for testing.
|
||||||
|
SetAddressMap(mcid cid.Cid) error
|
||||||
|
|
||||||
|
AddressMap() (adt.Map, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,26 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store, networkName string) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
{{if (le .v 2)}}
|
||||||
|
mr, err := adt{{.v}}.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *init{{.v}}.ConstructState(mr, networkName)
|
||||||
|
{{else}}
|
||||||
|
s, err := init{{.v}}.ConstructState(store, networkName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
{{end}}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
init{{.v}}.State
|
init{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -66,6 +86,11 @@ func (s *state{{.v}}) SetNetworkName(name string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) SetNextID(id abi.ActorID) error {
|
||||||
|
s.State.NextID = id
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) {
|
func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) {
|
||||||
m, err := adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
m, err := adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -84,6 +109,15 @@ func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) addressMap() (adt.Map, error) {
|
func (s *state{{.v}}) SetAddressMap(mcid cid.Cid) error {
|
||||||
return adt{{.v}}.AsMap(s.store, s.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
s.State.AddressMap = mcid
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) AddressMap() (adt.Map, error) {
|
||||||
|
return adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/init/temp
Normal file
0
chain/actors/builtin/init/temp
Normal file
@ -25,6 +25,19 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store, networkName string) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
|
||||||
|
mr, err := adt0.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *init0.ConstructState(mr, networkName)
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
init0.State
|
init0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -62,6 +75,11 @@ func (s *state0) SetNetworkName(name string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) SetNextID(id abi.ActorID) error {
|
||||||
|
s.State.NextID = id
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state0) Remove(addrs ...address.Address) (err error) {
|
func (s *state0) Remove(addrs ...address.Address) (err error) {
|
||||||
m, err := adt0.AsMap(s.store, s.State.AddressMap)
|
m, err := adt0.AsMap(s.store, s.State.AddressMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -80,6 +98,15 @@ func (s *state0) Remove(addrs ...address.Address) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state0) addressMap() (adt.Map, error) {
|
func (s *state0) SetAddressMap(mcid cid.Cid) error {
|
||||||
return adt0.AsMap(s.store, s.AddressMap)
|
s.State.AddressMap = mcid
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) AddressMap() (adt.Map, error) {
|
||||||
|
return adt0.AsMap(s.store, s.State.AddressMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,19 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store, networkName string) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
|
||||||
|
mr, err := adt2.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *init2.ConstructState(mr, networkName)
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
init2.State
|
init2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -62,6 +75,11 @@ func (s *state2) SetNetworkName(name string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) SetNextID(id abi.ActorID) error {
|
||||||
|
s.State.NextID = id
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state2) Remove(addrs ...address.Address) (err error) {
|
func (s *state2) Remove(addrs ...address.Address) (err error) {
|
||||||
m, err := adt2.AsMap(s.store, s.State.AddressMap)
|
m, err := adt2.AsMap(s.store, s.State.AddressMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -80,6 +98,15 @@ func (s *state2) Remove(addrs ...address.Address) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state2) addressMap() (adt.Map, error) {
|
func (s *state2) SetAddressMap(mcid cid.Cid) error {
|
||||||
return adt2.AsMap(s.store, s.AddressMap)
|
s.State.AddressMap = mcid
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) AddressMap() (adt.Map, error) {
|
||||||
|
return adt2.AsMap(s.store, s.State.AddressMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,19 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store, networkName string) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
|
||||||
|
s, err := init3.ConstructState(store, networkName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
init3.State
|
init3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -64,6 +77,11 @@ func (s *state3) SetNetworkName(name string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) SetNextID(id abi.ActorID) error {
|
||||||
|
s.State.NextID = id
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state3) Remove(addrs ...address.Address) (err error) {
|
func (s *state3) Remove(addrs ...address.Address) (err error) {
|
||||||
m, err := adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth)
|
m, err := adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -82,6 +100,15 @@ func (s *state3) Remove(addrs ...address.Address) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state3) addressMap() (adt.Map, error) {
|
func (s *state3) SetAddressMap(mcid cid.Cid) error {
|
||||||
return adt3.AsMap(s.store, s.AddressMap, builtin3.DefaultHamtBitwidth)
|
s.State.AddressMap = mcid
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) AddressMap() (adt.Map, error) {
|
||||||
|
return adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,19 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store, networkName string) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
|
||||||
|
s, err := init4.ConstructState(store, networkName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
init4.State
|
init4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -64,6 +77,11 @@ func (s *state4) SetNetworkName(name string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) SetNextID(id abi.ActorID) error {
|
||||||
|
s.State.NextID = id
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state4) Remove(addrs ...address.Address) (err error) {
|
func (s *state4) Remove(addrs ...address.Address) (err error) {
|
||||||
m, err := adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth)
|
m, err := adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -82,6 +100,15 @@ func (s *state4) Remove(addrs ...address.Address) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state4) addressMap() (adt.Map, error) {
|
func (s *state4) SetAddressMap(mcid cid.Cid) error {
|
||||||
return adt4.AsMap(s.store, s.AddressMap, builtin4.DefaultHamtBitwidth)
|
s.State.AddressMap = mcid
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) AddressMap() (adt.Map, error) {
|
||||||
|
return adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import (
|
|||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
)
|
)
|
||||||
@ -42,6 +43,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.StorageMarketActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
BalancesChanged(State) (bool, error)
|
BalancesChanged(State) (bool, error)
|
||||||
@ -56,6 +78,7 @@ type State interface {
|
|||||||
minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch,
|
minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch,
|
||||||
) (weight, verifiedWeight abi.DealWeight, err error)
|
) (weight, verifiedWeight abi.DealWeight, err error)
|
||||||
NextID() (abi.DealID, error)
|
NextID() (abi.DealID, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type BalanceTable interface {
|
type BalanceTable interface {
|
||||||
@ -81,7 +104,6 @@ type DealProposals interface {
|
|||||||
|
|
||||||
type PublishStorageDealsParams = market0.PublishStorageDealsParams
|
type PublishStorageDealsParams = market0.PublishStorageDealsParams
|
||||||
type PublishStorageDealsReturn = market0.PublishStorageDealsReturn
|
type PublishStorageDealsReturn = market0.PublishStorageDealsReturn
|
||||||
type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams
|
|
||||||
type WithdrawBalanceParams = market0.WithdrawBalanceParams
|
type WithdrawBalanceParams = market0.WithdrawBalanceParams
|
||||||
|
|
||||||
type ClientDealProposal = market0.ClientDealProposal
|
type ClientDealProposal = market0.ClientDealProposal
|
||||||
@ -89,71 +111,71 @@ type ClientDealProposal = market0.ClientDealProposal
|
|||||||
type DealState struct {
|
type DealState struct {
|
||||||
SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector
|
SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector
|
||||||
LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated
|
LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated
|
||||||
SlashEpoch abi.ChainEpoch // -1 if deal never slashed
|
SlashEpoch abi.ChainEpoch // -1 if deal never slashed
|
||||||
}
|
}
|
||||||
|
|
||||||
type DealProposal struct {
|
type DealProposal struct {
|
||||||
PieceCID cid.Cid
|
PieceCID cid.Cid
|
||||||
PieceSize abi.PaddedPieceSize
|
PieceSize abi.PaddedPieceSize
|
||||||
VerifiedDeal bool
|
VerifiedDeal bool
|
||||||
Client address.Address
|
Client address.Address
|
||||||
Provider address.Address
|
Provider address.Address
|
||||||
Label string
|
Label string
|
||||||
StartEpoch abi.ChainEpoch
|
StartEpoch abi.ChainEpoch
|
||||||
EndEpoch abi.ChainEpoch
|
EndEpoch abi.ChainEpoch
|
||||||
StoragePricePerEpoch abi.TokenAmount
|
StoragePricePerEpoch abi.TokenAmount
|
||||||
ProviderCollateral abi.TokenAmount
|
ProviderCollateral abi.TokenAmount
|
||||||
ClientCollateral abi.TokenAmount
|
ClientCollateral abi.TokenAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
type DealStateChanges struct {
|
type DealStateChanges struct {
|
||||||
Added []DealIDState
|
Added []DealIDState
|
||||||
Modified []DealStateChange
|
Modified []DealStateChange
|
||||||
Removed []DealIDState
|
Removed []DealIDState
|
||||||
}
|
}
|
||||||
|
|
||||||
type DealIDState struct {
|
type DealIDState struct {
|
||||||
ID abi.DealID
|
ID abi.DealID
|
||||||
Deal DealState
|
Deal DealState
|
||||||
}
|
}
|
||||||
|
|
||||||
// DealStateChange is a change in deal state from -> to
|
// DealStateChange is a change in deal state from -> to
|
||||||
type DealStateChange struct {
|
type DealStateChange struct {
|
||||||
ID abi.DealID
|
ID abi.DealID
|
||||||
From *DealState
|
From *DealState
|
||||||
To *DealState
|
To *DealState
|
||||||
}
|
}
|
||||||
|
|
||||||
type DealProposalChanges struct {
|
type DealProposalChanges struct {
|
||||||
Added []ProposalIDState
|
Added []ProposalIDState
|
||||||
Removed []ProposalIDState
|
Removed []ProposalIDState
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProposalIDState struct {
|
type ProposalIDState struct {
|
||||||
ID abi.DealID
|
ID abi.DealID
|
||||||
Proposal DealProposal
|
Proposal DealProposal
|
||||||
}
|
}
|
||||||
|
|
||||||
func EmptyDealState() *DealState {
|
func EmptyDealState() *DealState {
|
||||||
return &DealState{
|
return &DealState{
|
||||||
SectorStartEpoch: -1,
|
SectorStartEpoch: -1,
|
||||||
SlashEpoch: -1,
|
SlashEpoch: -1,
|
||||||
LastUpdatedEpoch: -1,
|
LastUpdatedEpoch: -1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns the earned fees and pending fees for a given deal
|
// returns the earned fees and pending fees for a given deal
|
||||||
func (deal DealProposal) GetDealFees(height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) {
|
func (deal DealProposal) GetDealFees(height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) {
|
||||||
tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch)))
|
tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch)))
|
||||||
|
|
||||||
ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch)))
|
ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch)))
|
||||||
if ef.LessThan(big.Zero()) {
|
if ef.LessThan(big.Zero()) {
|
||||||
ef = big.Zero()
|
ef = big.Zero()
|
||||||
}
|
}
|
||||||
|
|
||||||
if ef.GreaterThan(tf) {
|
if ef.GreaterThan(tf) {
|
||||||
ef = tf
|
ef = tf
|
||||||
}
|
}
|
||||||
|
|
||||||
return ef, big.Sub(tf, ef)
|
return ef, big.Sub(tf, ef)
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
|
|
||||||
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
@ -68,6 +69,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.StorageMarketActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.StorageMarketActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.StorageMarketActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.StorageMarketActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
BalancesChanged(State) (bool, error)
|
BalancesChanged(State) (bool, error)
|
||||||
@ -82,6 +122,7 @@ type State interface {
|
|||||||
minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch,
|
minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch,
|
||||||
) (weight, verifiedWeight abi.DealWeight, err error)
|
) (weight, verifiedWeight abi.DealWeight, err error)
|
||||||
NextID() (abi.DealID, error)
|
NextID() (abi.DealID, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type BalanceTable interface {
|
type BalanceTable interface {
|
||||||
@ -107,7 +148,6 @@ type DealProposals interface {
|
|||||||
|
|
||||||
type PublishStorageDealsParams = market0.PublishStorageDealsParams
|
type PublishStorageDealsParams = market0.PublishStorageDealsParams
|
||||||
type PublishStorageDealsReturn = market0.PublishStorageDealsReturn
|
type PublishStorageDealsReturn = market0.PublishStorageDealsReturn
|
||||||
type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams
|
|
||||||
type WithdrawBalanceParams = market0.WithdrawBalanceParams
|
type WithdrawBalanceParams = market0.WithdrawBalanceParams
|
||||||
|
|
||||||
type ClientDealProposal = market0.ClientDealProposal
|
type ClientDealProposal = market0.ClientDealProposal
|
||||||
|
@ -26,6 +26,31 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
{{if (le .v 2)}}
|
||||||
|
ea, err := adt{{.v}}.MakeEmptyArray(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
em, err := adt{{.v}}.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *market{{.v}}.ConstructState(ea, em, em)
|
||||||
|
{{else}}
|
||||||
|
s, err := market{{.v}}.ConstructState(store)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
{{end}}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
market{{.v}}.State
|
market{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -207,3 +232,7 @@ func (s *dealProposals{{.v}}) array() adt.Array {
|
|||||||
func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) DealProposal {
|
func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) DealProposal {
|
||||||
return (DealProposal)(v{{.v}})
|
return (DealProposal)(v{{.v}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/market/temp
Normal file
0
chain/actors/builtin/market/temp
Normal file
@ -26,6 +26,24 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
|
||||||
|
ea, err := adt0.MakeEmptyArray(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
em, err := adt0.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *market0.ConstructState(ea, em, em)
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
market0.State
|
market0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -207,3 +225,7 @@ func (s *dealProposals0) array() adt.Array {
|
|||||||
func fromV0DealProposal(v0 market0.DealProposal) DealProposal {
|
func fromV0DealProposal(v0 market0.DealProposal) DealProposal {
|
||||||
return (DealProposal)(v0)
|
return (DealProposal)(v0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -26,6 +26,24 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
|
||||||
|
ea, err := adt2.MakeEmptyArray(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
em, err := adt2.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *market2.ConstructState(ea, em, em)
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
market2.State
|
market2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -207,3 +225,7 @@ func (s *dealProposals2) array() adt.Array {
|
|||||||
func fromV2DealProposal(v2 market2.DealProposal) DealProposal {
|
func fromV2DealProposal(v2 market2.DealProposal) DealProposal {
|
||||||
return (DealProposal)(v2)
|
return (DealProposal)(v2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -26,6 +26,19 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
|
||||||
|
s, err := market3.ConstructState(store)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
market3.State
|
market3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -207,3 +220,7 @@ func (s *dealProposals3) array() adt.Array {
|
|||||||
func fromV3DealProposal(v3 market3.DealProposal) DealProposal {
|
func fromV3DealProposal(v3 market3.DealProposal) DealProposal {
|
||||||
return (DealProposal)(v3)
|
return (DealProposal)(v3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -26,6 +26,19 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
|
||||||
|
s, err := market4.ConstructState(store)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
market4.State
|
market4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -207,3 +220,7 @@ func (s *dealProposals4) array() adt.Array {
|
|||||||
func fromV4DealProposal(v4 market4.DealProposal) DealProposal {
|
func fromV4DealProposal(v4 market4.DealProposal) DealProposal {
|
||||||
return (DealProposal)(v4)
|
return (DealProposal)(v4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -3,6 +3,7 @@ package miner
|
|||||||
import (
|
import (
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
@ -60,6 +61,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.StorageMinerActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -79,6 +101,11 @@ type State interface {
|
|||||||
NumLiveSectors() (uint64, error)
|
NumLiveSectors() (uint64, error)
|
||||||
IsAllocated(abi.SectorNumber) (bool, error)
|
IsAllocated(abi.SectorNumber) (bool, error)
|
||||||
|
|
||||||
|
// Note that ProvingPeriodStart is deprecated and will be renamed / removed in a future version of actors
|
||||||
|
GetProvingPeriodStart() (abi.ChainEpoch, error)
|
||||||
|
// Testing only
|
||||||
|
EraseAllUnproven() error
|
||||||
|
|
||||||
LoadDeadline(idx uint64) (Deadline, error)
|
LoadDeadline(idx uint64) (Deadline, error)
|
||||||
ForEachDeadline(cb func(idx uint64, dl Deadline) error) error
|
ForEachDeadline(cb func(idx uint64, dl Deadline) error) error
|
||||||
NumDeadlines() (uint64, error)
|
NumDeadlines() (uint64, error)
|
||||||
@ -95,6 +122,7 @@ type State interface {
|
|||||||
decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error)
|
decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error)
|
||||||
precommits() (adt.Map, error)
|
precommits() (adt.Map, error)
|
||||||
decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error)
|
decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Deadline interface {
|
type Deadline interface {
|
||||||
@ -115,26 +143,26 @@ type Partition interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SectorOnChainInfo struct {
|
type SectorOnChainInfo struct {
|
||||||
SectorNumber abi.SectorNumber
|
SectorNumber abi.SectorNumber
|
||||||
SealProof abi.RegisteredSealProof
|
SealProof abi.RegisteredSealProof
|
||||||
SealedCID cid.Cid
|
SealedCID cid.Cid
|
||||||
DealIDs []abi.DealID
|
DealIDs []abi.DealID
|
||||||
Activation abi.ChainEpoch
|
Activation abi.ChainEpoch
|
||||||
Expiration abi.ChainEpoch
|
Expiration abi.ChainEpoch
|
||||||
DealWeight abi.DealWeight
|
DealWeight abi.DealWeight
|
||||||
VerifiedDealWeight abi.DealWeight
|
VerifiedDealWeight abi.DealWeight
|
||||||
InitialPledge abi.TokenAmount
|
InitialPledge abi.TokenAmount
|
||||||
ExpectedDayReward abi.TokenAmount
|
ExpectedDayReward abi.TokenAmount
|
||||||
ExpectedStoragePledge abi.TokenAmount
|
ExpectedStoragePledge abi.TokenAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
type SectorPreCommitInfo = miner0.SectorPreCommitInfo
|
type SectorPreCommitInfo = miner0.SectorPreCommitInfo
|
||||||
|
|
||||||
type SectorPreCommitOnChainInfo struct {
|
type SectorPreCommitOnChainInfo struct {
|
||||||
Info SectorPreCommitInfo
|
Info SectorPreCommitInfo
|
||||||
PreCommitDeposit abi.TokenAmount
|
PreCommitDeposit abi.TokenAmount
|
||||||
PreCommitEpoch abi.ChainEpoch
|
PreCommitEpoch abi.ChainEpoch
|
||||||
DealWeight abi.DealWeight
|
DealWeight abi.DealWeight
|
||||||
VerifiedDealWeight abi.DealWeight
|
VerifiedDealWeight abi.DealWeight
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,17 +231,17 @@ func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MinerInfo struct {
|
type MinerInfo struct {
|
||||||
Owner address.Address // Must be an ID-address.
|
Owner address.Address // Must be an ID-address.
|
||||||
Worker address.Address // Must be an ID-address.
|
Worker address.Address // Must be an ID-address.
|
||||||
NewWorker address.Address // Must be an ID-address.
|
NewWorker address.Address // Must be an ID-address.
|
||||||
ControlAddresses []address.Address // Must be an ID-addresses.
|
ControlAddresses []address.Address // Must be an ID-addresses.
|
||||||
WorkerChangeEpoch abi.ChainEpoch
|
WorkerChangeEpoch abi.ChainEpoch
|
||||||
PeerId *peer.ID
|
PeerId *peer.ID
|
||||||
Multiaddrs []abi.Multiaddrs
|
Multiaddrs []abi.Multiaddrs
|
||||||
WindowPoStProofType abi.RegisteredPoStProof
|
WindowPoStProofType abi.RegisteredPoStProof
|
||||||
SectorSize abi.SectorSize
|
SectorSize abi.SectorSize
|
||||||
WindowPoStPartitionSectors uint64
|
WindowPoStPartitionSectors uint64
|
||||||
ConsensusFaultElapsed abi.ChainEpoch
|
ConsensusFaultElapsed abi.ChainEpoch
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mi MinerInfo) IsController(addr address.Address) bool {
|
func (mi MinerInfo) IsController(addr address.Address) bool {
|
||||||
@ -244,25 +272,25 @@ type SectorLocation struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SectorChanges struct {
|
type SectorChanges struct {
|
||||||
Added []SectorOnChainInfo
|
Added []SectorOnChainInfo
|
||||||
Extended []SectorExtensions
|
Extended []SectorExtensions
|
||||||
Removed []SectorOnChainInfo
|
Removed []SectorOnChainInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type SectorExtensions struct {
|
type SectorExtensions struct {
|
||||||
From SectorOnChainInfo
|
From SectorOnChainInfo
|
||||||
To SectorOnChainInfo
|
To SectorOnChainInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type PreCommitChanges struct {
|
type PreCommitChanges struct {
|
||||||
Added []SectorPreCommitOnChainInfo
|
Added []SectorPreCommitOnChainInfo
|
||||||
Removed []SectorPreCommitOnChainInfo
|
Removed []SectorPreCommitOnChainInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type LockedFunds struct {
|
type LockedFunds struct {
|
||||||
VestingFunds abi.TokenAmount
|
VestingFunds abi.TokenAmount
|
||||||
InitialPledgeRequirement abi.TokenAmount
|
InitialPledgeRequirement abi.TokenAmount
|
||||||
PreCommitDeposits abi.TokenAmount
|
PreCommitDeposits abi.TokenAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lf LockedFunds) TotalLockedFunds() abi.TokenAmount {
|
func (lf LockedFunds) TotalLockedFunds() abi.TokenAmount {
|
||||||
|
@ -3,6 +3,7 @@ package miner
|
|||||||
import (
|
import (
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
@ -86,6 +87,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.StorageMinerActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.StorageMinerActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.StorageMinerActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.StorageMinerActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -105,6 +145,11 @@ type State interface {
|
|||||||
NumLiveSectors() (uint64, error)
|
NumLiveSectors() (uint64, error)
|
||||||
IsAllocated(abi.SectorNumber) (bool, error)
|
IsAllocated(abi.SectorNumber) (bool, error)
|
||||||
|
|
||||||
|
// Note that ProvingPeriodStart is deprecated and will be renamed / removed in a future version of actors
|
||||||
|
GetProvingPeriodStart() (abi.ChainEpoch, error)
|
||||||
|
// Testing only
|
||||||
|
EraseAllUnproven() error
|
||||||
|
|
||||||
LoadDeadline(idx uint64) (Deadline, error)
|
LoadDeadline(idx uint64) (Deadline, error)
|
||||||
ForEachDeadline(cb func(idx uint64, dl Deadline) error) error
|
ForEachDeadline(cb func(idx uint64, dl Deadline) error) error
|
||||||
NumDeadlines() (uint64, error)
|
NumDeadlines() (uint64, error)
|
||||||
@ -121,6 +166,7 @@ type State interface {
|
|||||||
decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error)
|
decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error)
|
||||||
precommits() (adt.Map, error)
|
precommits() (adt.Map, error)
|
||||||
decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error)
|
decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Deadline interface {
|
type Deadline interface {
|
||||||
|
@ -35,6 +35,12 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = miner{{.v}}.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
miner{{.v}}.State
|
miner{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -68,9 +74,9 @@ func (s *state{{.v}}) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error)
|
|||||||
|
|
||||||
func (s *state{{.v}}) LockedFunds() (LockedFunds, error) {
|
func (s *state{{.v}}) LockedFunds() (LockedFunds, error) {
|
||||||
return LockedFunds{
|
return LockedFunds{
|
||||||
VestingFunds: s.State.LockedFunds,
|
VestingFunds: s.State.LockedFunds,
|
||||||
InitialPledgeRequirement: s.State.InitialPledge{{if (le .v 1)}}Requirement{{end}},
|
InitialPledgeRequirement: s.State.InitialPledge{{if (le .v 1)}}Requirement{{end}},
|
||||||
PreCommitDeposits: s.State.PreCommitDeposits,
|
PreCommitDeposits: s.State.PreCommitDeposits,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,6 +251,10 @@ func (s *state{{.v}}) IsAllocated(num abi.SectorNumber) (bool, error) {
|
|||||||
return allocatedSectors.IsSet(uint64(num))
|
return allocatedSectors.IsSet(uint64(num))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetProvingPeriodStart() (abi.ChainEpoch, error) {
|
||||||
|
return s.State.ProvingPeriodStart, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) LoadDeadline(idx uint64) (Deadline, error) {
|
func (s *state{{.v}}) LoadDeadline(idx uint64) (Deadline, error) {
|
||||||
dls, err := s.State.LoadDeadlines(s.store)
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -307,19 +317,19 @@ func (s *state{{.v}}) Info() (MinerInfo, error) {
|
|||||||
}
|
}
|
||||||
{{end}}
|
{{end}}
|
||||||
mi := MinerInfo{
|
mi := MinerInfo{
|
||||||
Owner: info.Owner,
|
Owner: info.Owner,
|
||||||
Worker: info.Worker,
|
Worker: info.Worker,
|
||||||
ControlAddresses: info.ControlAddresses,
|
ControlAddresses: info.ControlAddresses,
|
||||||
|
|
||||||
NewWorker: address.Undef,
|
NewWorker: address.Undef,
|
||||||
WorkerChangeEpoch: -1,
|
WorkerChangeEpoch: -1,
|
||||||
|
|
||||||
PeerId: pid,
|
PeerId: pid,
|
||||||
Multiaddrs: info.Multiaddrs,
|
Multiaddrs: info.Multiaddrs,
|
||||||
WindowPoStProofType: {{if (ge .v 3)}}info.WindowPoStProofType{{else}}wpp{{end}},
|
WindowPoStProofType: {{if (ge .v 3)}}info.WindowPoStProofType{{else}}wpp{{end}},
|
||||||
SectorSize: info.SectorSize,
|
SectorSize: info.SectorSize,
|
||||||
WindowPoStPartitionSectors: info.WindowPoStPartitionSectors,
|
WindowPoStPartitionSectors: info.WindowPoStPartitionSectors,
|
||||||
ConsensusFaultElapsed: {{if (ge .v 2)}}info.ConsensusFaultElapsed{{else}}-1{{end}},
|
ConsensusFaultElapsed: {{if (ge .v 2)}}info.ConsensusFaultElapsed{{else}}-1{{end}},
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.PendingWorkerKey != nil {
|
if info.PendingWorkerKey != nil {
|
||||||
@ -366,6 +376,45 @@ func (s *state{{.v}}) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (Secto
|
|||||||
return fromV{{.v}}SectorPreCommitOnChainInfo(sp), nil
|
return fromV{{.v}}SectorPreCommitOnChainInfo(sp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) EraseAllUnproven() error {
|
||||||
|
{{if (ge .v 2)}}
|
||||||
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dls.ForEach(s.store, func(dindx uint64, dl *miner{{.v}}.Deadline) error {
|
||||||
|
ps, err := dl.PartitionsArray(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var part miner{{.v}}.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)
|
||||||
|
})
|
||||||
|
|
||||||
|
return s.State.SaveDeadlines(s.store, dls)
|
||||||
|
{{else}}
|
||||||
|
// field doesn't exist until v2
|
||||||
|
{{end}}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *deadline{{.v}}) LoadPartition(idx uint64) (Partition, error) {
|
func (d *deadline{{.v}}) LoadPartition(idx uint64) (Partition, error) {
|
||||||
p, err := d.Deadline.LoadPartition(d.store, idx)
|
p, err := d.Deadline.LoadPartition(d.store, idx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -428,16 +477,16 @@ func (p *partition{{.v}}) RecoveringSectors() (bitfield.BitField, error) {
|
|||||||
func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorOnChainInfo {
|
func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorOnChainInfo {
|
||||||
{{if (ge .v 2)}}
|
{{if (ge .v 2)}}
|
||||||
return SectorOnChainInfo{
|
return SectorOnChainInfo{
|
||||||
SectorNumber: v{{.v}}.SectorNumber,
|
SectorNumber: v{{.v}}.SectorNumber,
|
||||||
SealProof: v{{.v}}.SealProof,
|
SealProof: v{{.v}}.SealProof,
|
||||||
SealedCID: v{{.v}}.SealedCID,
|
SealedCID: v{{.v}}.SealedCID,
|
||||||
DealIDs: v{{.v}}.DealIDs,
|
DealIDs: v{{.v}}.DealIDs,
|
||||||
Activation: v{{.v}}.Activation,
|
Activation: v{{.v}}.Activation,
|
||||||
Expiration: v{{.v}}.Expiration,
|
Expiration: v{{.v}}.Expiration,
|
||||||
DealWeight: v{{.v}}.DealWeight,
|
DealWeight: v{{.v}}.DealWeight,
|
||||||
VerifiedDealWeight: v{{.v}}.VerifiedDealWeight,
|
VerifiedDealWeight: v{{.v}}.VerifiedDealWeight,
|
||||||
InitialPledge: v{{.v}}.InitialPledge,
|
InitialPledge: v{{.v}}.InitialPledge,
|
||||||
ExpectedDayReward: v{{.v}}.ExpectedDayReward,
|
ExpectedDayReward: v{{.v}}.ExpectedDayReward,
|
||||||
ExpectedStoragePledge: v{{.v}}.ExpectedStoragePledge,
|
ExpectedStoragePledge: v{{.v}}.ExpectedStoragePledge,
|
||||||
}
|
}
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -448,13 +497,17 @@ func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorO
|
|||||||
func fromV{{.v}}SectorPreCommitOnChainInfo(v{{.v}} miner{{.v}}.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo {
|
func fromV{{.v}}SectorPreCommitOnChainInfo(v{{.v}} miner{{.v}}.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo {
|
||||||
{{if (ge .v 2)}}
|
{{if (ge .v 2)}}
|
||||||
return SectorPreCommitOnChainInfo{
|
return SectorPreCommitOnChainInfo{
|
||||||
Info: (SectorPreCommitInfo)(v{{.v}}.Info),
|
Info: (SectorPreCommitInfo)(v{{.v}}.Info),
|
||||||
PreCommitDeposit: v{{.v}}.PreCommitDeposit,
|
PreCommitDeposit: v{{.v}}.PreCommitDeposit,
|
||||||
PreCommitEpoch: v{{.v}}.PreCommitEpoch,
|
PreCommitEpoch: v{{.v}}.PreCommitEpoch,
|
||||||
DealWeight: v{{.v}}.DealWeight,
|
DealWeight: v{{.v}}.DealWeight,
|
||||||
VerifiedDealWeight: v{{.v}}.VerifiedDealWeight,
|
VerifiedDealWeight: v{{.v}}.VerifiedDealWeight,
|
||||||
}
|
}
|
||||||
{{else}}
|
{{else}}
|
||||||
return (SectorPreCommitOnChainInfo)(v0)
|
return (SectorPreCommitOnChainInfo)(v0)
|
||||||
{{end}}
|
{{end}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/miner/temp
Normal file
0
chain/actors/builtin/miner/temp
Normal file
@ -32,6 +32,12 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
out.State = miner0.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
miner0.State
|
miner0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -242,6 +248,10 @@ func (s *state0) IsAllocated(num abi.SectorNumber) (bool, error) {
|
|||||||
return allocatedSectors.IsSet(uint64(num))
|
return allocatedSectors.IsSet(uint64(num))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetProvingPeriodStart() (abi.ChainEpoch, error) {
|
||||||
|
return s.State.ProvingPeriodStart, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state0) LoadDeadline(idx uint64) (Deadline, error) {
|
func (s *state0) LoadDeadline(idx uint64) (Deadline, error) {
|
||||||
dls, err := s.State.LoadDeadlines(s.store)
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -363,6 +373,13 @@ func (s *state0) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreC
|
|||||||
return fromV0SectorPreCommitOnChainInfo(sp), nil
|
return fromV0SectorPreCommitOnChainInfo(sp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) EraseAllUnproven() error {
|
||||||
|
|
||||||
|
// field doesn't exist until v2
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *deadline0) LoadPartition(idx uint64) (Partition, error) {
|
func (d *deadline0) LoadPartition(idx uint64) (Partition, error) {
|
||||||
p, err := d.Deadline.LoadPartition(d.store, idx)
|
p, err := d.Deadline.LoadPartition(d.store, idx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -426,3 +443,7 @@ func fromV0SectorPreCommitOnChainInfo(v0 miner0.SectorPreCommitOnChainInfo) Sect
|
|||||||
return (SectorPreCommitOnChainInfo)(v0)
|
return (SectorPreCommitOnChainInfo)(v0)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -30,6 +30,12 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
out.State = miner2.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
miner2.State
|
miner2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -240,6 +246,10 @@ func (s *state2) IsAllocated(num abi.SectorNumber) (bool, error) {
|
|||||||
return allocatedSectors.IsSet(uint64(num))
|
return allocatedSectors.IsSet(uint64(num))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetProvingPeriodStart() (abi.ChainEpoch, error) {
|
||||||
|
return s.State.ProvingPeriodStart, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state2) LoadDeadline(idx uint64) (Deadline, error) {
|
func (s *state2) LoadDeadline(idx uint64) (Deadline, error) {
|
||||||
dls, err := s.State.LoadDeadlines(s.store)
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -361,6 +371,43 @@ func (s *state2) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreC
|
|||||||
return fromV2SectorPreCommitOnChainInfo(sp), nil
|
return fromV2SectorPreCommitOnChainInfo(sp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) EraseAllUnproven() error {
|
||||||
|
|
||||||
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dls.ForEach(s.store, func(dindx uint64, dl *miner2.Deadline) error {
|
||||||
|
ps, err := dl.PartitionsArray(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var part miner2.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)
|
||||||
|
})
|
||||||
|
|
||||||
|
return s.State.SaveDeadlines(s.store, dls)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *deadline2) LoadPartition(idx uint64) (Partition, error) {
|
func (d *deadline2) LoadPartition(idx uint64) (Partition, error) {
|
||||||
p, err := d.Deadline.LoadPartition(d.store, idx)
|
p, err := d.Deadline.LoadPartition(d.store, idx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -442,3 +489,7 @@ func fromV2SectorPreCommitOnChainInfo(v2 miner2.SectorPreCommitOnChainInfo) Sect
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -32,6 +32,12 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
out.State = miner3.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
miner3.State
|
miner3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -242,6 +248,10 @@ func (s *state3) IsAllocated(num abi.SectorNumber) (bool, error) {
|
|||||||
return allocatedSectors.IsSet(uint64(num))
|
return allocatedSectors.IsSet(uint64(num))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetProvingPeriodStart() (abi.ChainEpoch, error) {
|
||||||
|
return s.State.ProvingPeriodStart, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state3) LoadDeadline(idx uint64) (Deadline, error) {
|
func (s *state3) LoadDeadline(idx uint64) (Deadline, error) {
|
||||||
dls, err := s.State.LoadDeadlines(s.store)
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -358,6 +368,43 @@ func (s *state3) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreC
|
|||||||
return fromV3SectorPreCommitOnChainInfo(sp), nil
|
return fromV3SectorPreCommitOnChainInfo(sp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) EraseAllUnproven() error {
|
||||||
|
|
||||||
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dls.ForEach(s.store, func(dindx uint64, dl *miner3.Deadline) error {
|
||||||
|
ps, err := dl.PartitionsArray(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var part miner3.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)
|
||||||
|
})
|
||||||
|
|
||||||
|
return s.State.SaveDeadlines(s.store, dls)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *deadline3) LoadPartition(idx uint64) (Partition, error) {
|
func (d *deadline3) LoadPartition(idx uint64) (Partition, error) {
|
||||||
p, err := d.Deadline.LoadPartition(d.store, idx)
|
p, err := d.Deadline.LoadPartition(d.store, idx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -443,3 +490,7 @@ func fromV3SectorPreCommitOnChainInfo(v3 miner3.SectorPreCommitOnChainInfo) Sect
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -32,6 +32,12 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
out.State = miner4.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
miner4.State
|
miner4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -242,6 +248,10 @@ func (s *state4) IsAllocated(num abi.SectorNumber) (bool, error) {
|
|||||||
return allocatedSectors.IsSet(uint64(num))
|
return allocatedSectors.IsSet(uint64(num))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetProvingPeriodStart() (abi.ChainEpoch, error) {
|
||||||
|
return s.State.ProvingPeriodStart, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state4) LoadDeadline(idx uint64) (Deadline, error) {
|
func (s *state4) LoadDeadline(idx uint64) (Deadline, error) {
|
||||||
dls, err := s.State.LoadDeadlines(s.store)
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -358,6 +368,43 @@ func (s *state4) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreC
|
|||||||
return fromV4SectorPreCommitOnChainInfo(sp), nil
|
return fromV4SectorPreCommitOnChainInfo(sp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) EraseAllUnproven() error {
|
||||||
|
|
||||||
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dls.ForEach(s.store, func(dindx uint64, dl *miner4.Deadline) error {
|
||||||
|
ps, err := dl.PartitionsArray(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var part miner4.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)
|
||||||
|
})
|
||||||
|
|
||||||
|
return s.State.SaveDeadlines(s.store, dls)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (d *deadline4) LoadPartition(idx uint64) (Partition, error) {
|
func (d *deadline4) LoadPartition(idx uint64) (Partition, error) {
|
||||||
p, err := d.Deadline.LoadPartition(d.store, idx)
|
p, err := d.Deadline.LoadPartition(d.store, idx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -443,3 +490,7 @@ func fromV4SectorPreCommitOnChainInfo(v4 miner4.SectorPreCommitOnChainInfo) Sect
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -40,6 +40,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
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) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store, signers, threshold, startEpoch, unlockDuration, initialBalance)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.MultisigActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -55,6 +76,7 @@ type State interface {
|
|||||||
|
|
||||||
transactions() (adt.Map, error)
|
transactions() (adt.Map, error)
|
||||||
decodeTransaction(val *cbg.Deferred) (Transaction, error)
|
decodeTransaction(val *cbg.Deferred) (Transaction, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Transaction = msig{{.latestVersion}}.Transaction
|
type Transaction = msig{{.latestVersion}}.Transaction
|
||||||
@ -66,7 +88,7 @@ func Message(version actors.Version, from address.Address) MessageBuilder {
|
|||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
case actors.Version{{.}}:
|
case actors.Version{{.}}:
|
||||||
return message{{.}}{{"{"}}{{if (ge . 2)}}message0{from}{{else}}from{{end}}}
|
return message{{.}}{{"{"}}{{if (ge . 2)}}message0{from}{{else}}from{{end}}}
|
||||||
{{end}} default:
|
{{end}} default:
|
||||||
panic(fmt.Sprintf("unsupported actors version: %d", version))
|
panic(fmt.Sprintf("unsupported actors version: %d", version))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,10 +43,10 @@ func (m message{{.v}}) Create(
|
|||||||
{{end}}
|
{{end}}
|
||||||
// Set up constructor parameters for multisig
|
// Set up constructor parameters for multisig
|
||||||
msigParams := &multisig{{.v}}.ConstructorParams{
|
msigParams := &multisig{{.v}}.ConstructorParams{
|
||||||
Signers: signers,
|
Signers: signers,
|
||||||
NumApprovalsThreshold: threshold,
|
NumApprovalsThreshold: threshold,
|
||||||
UnlockDuration: unlockDuration,{{if (ge .v 2)}}
|
UnlockDuration: unlockDuration,{{if (ge .v 2)}}
|
||||||
StartEpoch: unlockStart,{{end}}
|
StartEpoch: unlockStart,{{end}}
|
||||||
}
|
}
|
||||||
|
|
||||||
enc, actErr := actors.SerializeParams(msigParams)
|
enc, actErr := actors.SerializeParams(msigParams)
|
||||||
@ -56,7 +56,7 @@ func (m message{{.v}}) Create(
|
|||||||
|
|
||||||
// new actors are created by invoking 'exec' on the init actor with the constructor params
|
// new actors are created by invoking 'exec' on the init actor with the constructor params
|
||||||
execParams := &init{{.v}}.ExecParams{
|
execParams := &init{{.v}}.ExecParams{
|
||||||
CodeCID: builtin{{.v}}.MultisigActorCodeID,
|
CodeCID: builtin{{.v}}.MultisigActorCodeID,
|
||||||
ConstructorParams: enc,
|
ConstructorParams: enc,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,11 +66,11 @@ func (m message{{.v}}) Create(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: init_.Address,
|
To: init_.Address,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Method: builtin{{.v}}.MethodsInit.Exec,
|
Method: builtin{{.v}}.MethodsInit.Exec,
|
||||||
Params: enc,
|
Params: enc,
|
||||||
Value: initialAmount,
|
Value: initialAmount,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,8 +96,8 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount,
|
|||||||
}
|
}
|
||||||
|
|
||||||
enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{
|
enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{
|
||||||
To: to,
|
To: to,
|
||||||
Value: amt,
|
Value: amt,
|
||||||
Method: method,
|
Method: method,
|
||||||
Params: params,
|
Params: params,
|
||||||
})
|
})
|
||||||
@ -106,9 +106,9 @@ func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: msig,
|
To: msig,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: abi.NewTokenAmount(0),
|
Value: abi.NewTokenAmount(0),
|
||||||
Method: builtin0.MethodsMultisig.Propose,
|
Method: builtin0.MethodsMultisig.Propose,
|
||||||
Params: enc,
|
Params: enc,
|
||||||
}, nil
|
}, nil
|
||||||
@ -121,9 +121,9 @@ func (m message0) Approve(msig address.Address, txID uint64, hashData *ProposalH
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: msig,
|
To: msig,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: types.NewInt(0),
|
Value: types.NewInt(0),
|
||||||
Method: builtin0.MethodsMultisig.Approve,
|
Method: builtin0.MethodsMultisig.Approve,
|
||||||
Params: enc,
|
Params: enc,
|
||||||
}, nil
|
}, nil
|
||||||
@ -136,9 +136,9 @@ func (m message0) Cancel(msig address.Address, txID uint64, hashData *ProposalHa
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: msig,
|
To: msig,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: types.NewInt(0),
|
Value: types.NewInt(0),
|
||||||
Method: builtin0.MethodsMultisig.Cancel,
|
Method: builtin0.MethodsMultisig.Cancel,
|
||||||
Params: enc,
|
Params: enc,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -66,6 +66,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
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) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store, signers, threshold, startEpoch, unlockDuration, initialBalance)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store, signers, threshold, startEpoch, unlockDuration, initialBalance)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store, signers, threshold, startEpoch, unlockDuration, initialBalance)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store, signers, threshold, startEpoch, unlockDuration, initialBalance)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.MultisigActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.MultisigActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.MultisigActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.MultisigActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -81,6 +120,7 @@ type State interface {
|
|||||||
|
|
||||||
transactions() (adt.Map, error)
|
transactions() (adt.Map, error)
|
||||||
decodeTransaction(val *cbg.Deferred) (Transaction, error)
|
decodeTransaction(val *cbg.Deferred) (Transaction, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Transaction = msig4.Transaction
|
type Transaction = msig4.Transaction
|
||||||
|
@ -31,6 +31,32 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = msig{{.v}}.State{}
|
||||||
|
out.State.Signers = signers
|
||||||
|
out.State.NumApprovalsThreshold = threshold
|
||||||
|
out.State.StartEpoch = startEpoch
|
||||||
|
out.State.UnlockDuration = unlockDuration
|
||||||
|
out.State.InitialBalance = initialBalance
|
||||||
|
{{if (le .v 2)}}
|
||||||
|
em, err := adt{{.v}}.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State.PendingTxns = em
|
||||||
|
{{else}}
|
||||||
|
em, err := adt{{.v}}.StoreEmptyMap(store, builtin{{.v}}.DefaultHamtBitwidth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State.PendingTxns = em
|
||||||
|
{{end}}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
msig{{.v}}.State
|
msig{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -95,3 +121,7 @@ func (s *state{{.v}}) decodeTransaction(val *cbg.Deferred) (Transaction, error)
|
|||||||
}
|
}
|
||||||
return tx, nil
|
return tx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/multisig/temp
Normal file
0
chain/actors/builtin/multisig/temp
Normal file
@ -28,6 +28,25 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
out.State = msig0.State{}
|
||||||
|
out.State.Signers = signers
|
||||||
|
out.State.NumApprovalsThreshold = threshold
|
||||||
|
out.State.StartEpoch = startEpoch
|
||||||
|
out.State.UnlockDuration = unlockDuration
|
||||||
|
out.State.InitialBalance = initialBalance
|
||||||
|
|
||||||
|
em, err := adt0.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State.PendingTxns = em
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
msig0.State
|
msig0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -92,3 +111,7 @@ func (s *state0) decodeTransaction(val *cbg.Deferred) (Transaction, error) {
|
|||||||
}
|
}
|
||||||
return tx, nil
|
return tx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -28,6 +28,25 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
out.State = msig2.State{}
|
||||||
|
out.State.Signers = signers
|
||||||
|
out.State.NumApprovalsThreshold = threshold
|
||||||
|
out.State.StartEpoch = startEpoch
|
||||||
|
out.State.UnlockDuration = unlockDuration
|
||||||
|
out.State.InitialBalance = initialBalance
|
||||||
|
|
||||||
|
em, err := adt2.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State.PendingTxns = em
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
msig2.State
|
msig2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -92,3 +111,7 @@ func (s *state2) decodeTransaction(val *cbg.Deferred) (Transaction, error) {
|
|||||||
}
|
}
|
||||||
return tx, nil
|
return tx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -30,6 +30,25 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
out.State = msig3.State{}
|
||||||
|
out.State.Signers = signers
|
||||||
|
out.State.NumApprovalsThreshold = threshold
|
||||||
|
out.State.StartEpoch = startEpoch
|
||||||
|
out.State.UnlockDuration = unlockDuration
|
||||||
|
out.State.InitialBalance = initialBalance
|
||||||
|
|
||||||
|
em, err := adt3.StoreEmptyMap(store, builtin3.DefaultHamtBitwidth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State.PendingTxns = em
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
msig3.State
|
msig3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -94,3 +113,7 @@ func (s *state3) decodeTransaction(val *cbg.Deferred) (Transaction, error) {
|
|||||||
}
|
}
|
||||||
return tx, nil
|
return tx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -30,6 +30,25 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
out.State = msig4.State{}
|
||||||
|
out.State.Signers = signers
|
||||||
|
out.State.NumApprovalsThreshold = threshold
|
||||||
|
out.State.StartEpoch = startEpoch
|
||||||
|
out.State.UnlockDuration = unlockDuration
|
||||||
|
out.State.InitialBalance = initialBalance
|
||||||
|
|
||||||
|
em, err := adt4.StoreEmptyMap(store, builtin4.DefaultHamtBitwidth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State.PendingTxns = em
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
msig4.State
|
msig4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -94,3 +113,7 @@ func (s *state4) decodeTransaction(val *cbg.Deferred) (Transaction, error) {
|
|||||||
}
|
}
|
||||||
return tx, nil
|
return tx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -42,6 +42,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.PaymentChannelActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
// State is an abstract version of payment channel state that works across
|
// State is an abstract version of payment channel state that works across
|
||||||
// versions
|
// versions
|
||||||
type State interface {
|
type State interface {
|
||||||
@ -62,6 +83,8 @@ type State interface {
|
|||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
ForEachLaneState(cb func(idx uint64, dl LaneState) error) error
|
ForEachLaneState(cb func(idx uint64, dl LaneState) error) error
|
||||||
|
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LaneState is an abstract copy of the state of a single lane
|
// LaneState is an abstract copy of the state of a single lane
|
||||||
|
@ -21,7 +21,7 @@ func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount)
|
|||||||
return nil, aerr
|
return nil, aerr
|
||||||
}
|
}
|
||||||
enc, aerr := actors.SerializeParams(&init{{.v}}.ExecParams{
|
enc, aerr := actors.SerializeParams(&init{{.v}}.ExecParams{
|
||||||
CodeCID: builtin{{.v}}.PaymentChannelActorCodeID,
|
CodeCID: builtin{{.v}}.PaymentChannelActorCodeID,
|
||||||
ConstructorParams: params,
|
ConstructorParams: params,
|
||||||
})
|
})
|
||||||
if aerr != nil {
|
if aerr != nil {
|
||||||
@ -29,9 +29,9 @@ func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: init_.Address,
|
To: init_.Address,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: initialAmount,
|
Value: initialAmount,
|
||||||
Method: builtin{{.v}}.MethodsInit.Exec,
|
Method: builtin{{.v}}.MethodsInit.Exec,
|
||||||
Params: enc,
|
Params: enc,
|
||||||
}, nil
|
}, nil
|
||||||
@ -39,7 +39,7 @@ func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount)
|
|||||||
|
|
||||||
func (m message{{.v}}) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) {
|
func (m message{{.v}}) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) {
|
||||||
params, aerr := actors.SerializeParams(&paych{{.v}}.UpdateChannelStateParams{
|
params, aerr := actors.SerializeParams(&paych{{.v}}.UpdateChannelStateParams{
|
||||||
Sv: *sv,
|
Sv: *sv,
|
||||||
Secret: secret,
|
Secret: secret,
|
||||||
})
|
})
|
||||||
if aerr != nil {
|
if aerr != nil {
|
||||||
@ -47,9 +47,9 @@ func (m message{{.v}}) Update(paych address.Address, sv *SignedVoucher, secret [
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: paych,
|
To: paych,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: abi.NewTokenAmount(0),
|
Value: abi.NewTokenAmount(0),
|
||||||
Method: builtin{{.v}}.MethodsPaych.UpdateChannelState,
|
Method: builtin{{.v}}.MethodsPaych.UpdateChannelState,
|
||||||
Params: params,
|
Params: params,
|
||||||
}, nil
|
}, nil
|
||||||
@ -57,18 +57,18 @@ func (m message{{.v}}) Update(paych address.Address, sv *SignedVoucher, secret [
|
|||||||
|
|
||||||
func (m message{{.v}}) Settle(paych address.Address) (*types.Message, error) {
|
func (m message{{.v}}) Settle(paych address.Address) (*types.Message, error) {
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: paych,
|
To: paych,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: abi.NewTokenAmount(0),
|
Value: abi.NewTokenAmount(0),
|
||||||
Method: builtin{{.v}}.MethodsPaych.Settle,
|
Method: builtin{{.v}}.MethodsPaych.Settle,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m message{{.v}}) Collect(paych address.Address) (*types.Message, error) {
|
func (m message{{.v}}) Collect(paych address.Address) (*types.Message, error) {
|
||||||
return &types.Message{
|
return &types.Message{
|
||||||
To: paych,
|
To: paych,
|
||||||
From: m.from,
|
From: m.from,
|
||||||
Value: abi.NewTokenAmount(0),
|
Value: abi.NewTokenAmount(0),
|
||||||
Method: builtin{{.v}}.MethodsPaych.Collect,
|
Method: builtin{{.v}}.MethodsPaych.Collect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,10 @@ type mockState struct {
|
|||||||
lanes map[uint64]paych.LaneState
|
lanes map[uint64]paych.LaneState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ms *mockState) GetState() interface{} {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
type mockLaneState struct {
|
type mockLaneState struct {
|
||||||
redeemed big.Int
|
redeemed big.Int
|
||||||
nonce uint64
|
nonce uint64
|
||||||
|
0
chain/actors/builtin/paych/mock/temp
Normal file
0
chain/actors/builtin/paych/mock/temp
Normal file
@ -68,6 +68,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.PaymentChannelActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.PaymentChannelActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.PaymentChannelActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.PaymentChannelActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
// State is an abstract version of payment channel state that works across
|
// State is an abstract version of payment channel state that works across
|
||||||
// versions
|
// versions
|
||||||
type State interface {
|
type State interface {
|
||||||
@ -88,6 +127,8 @@ type State interface {
|
|||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
ForEachLaneState(cb func(idx uint64, dl LaneState) error) error
|
ForEachLaneState(cb func(idx uint64, dl LaneState) error) error
|
||||||
|
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LaneState is an abstract copy of the state of a single lane
|
// LaneState is an abstract copy of the state of a single lane
|
||||||
|
@ -24,6 +24,12 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = paych{{.v}}.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
paych{{.v}}.State
|
paych{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -74,6 +80,10 @@ func (s *state{{.v}}) LaneCount() (uint64, error) {
|
|||||||
return lsamt.Length(), nil
|
return lsamt.Length(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
func (s *state{{.v}}) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
func (s *state{{.v}}) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
||||||
// Get the lane state from the chain
|
// Get the lane state from the chain
|
||||||
|
0
chain/actors/builtin/paych/temp
Normal file
0
chain/actors/builtin/paych/temp
Normal file
@ -24,6 +24,12 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
out.State = paych0.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
paych0.State
|
paych0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -74,6 +80,10 @@ func (s *state0) LaneCount() (uint64, error) {
|
|||||||
return lsamt.Length(), nil
|
return lsamt.Length(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
func (s *state0) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
func (s *state0) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
||||||
// Get the lane state from the chain
|
// Get the lane state from the chain
|
||||||
|
@ -24,6 +24,12 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
out.State = paych2.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
paych2.State
|
paych2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -74,6 +80,10 @@ func (s *state2) LaneCount() (uint64, error) {
|
|||||||
return lsamt.Length(), nil
|
return lsamt.Length(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
func (s *state2) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
func (s *state2) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
||||||
// Get the lane state from the chain
|
// Get the lane state from the chain
|
||||||
|
@ -24,6 +24,12 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
out.State = paych3.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
paych3.State
|
paych3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -74,6 +80,10 @@ func (s *state3) LaneCount() (uint64, error) {
|
|||||||
return lsamt.Length(), nil
|
return lsamt.Length(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
func (s *state3) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
func (s *state3) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
||||||
// Get the lane state from the chain
|
// Get the lane state from the chain
|
||||||
|
@ -24,6 +24,12 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
out.State = paych4.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
paych4.State
|
paych4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -74,6 +80,10 @@ func (s *state4) LaneCount() (uint64, error) {
|
|||||||
return lsamt.Length(), nil
|
return lsamt.Length(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate lane states
|
// Iterate lane states
|
||||||
func (s *state4) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
func (s *state4) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error {
|
||||||
// Get the lane state from the chain
|
// Get the lane state from the chain
|
||||||
|
@ -3,6 +3,7 @@ package power
|
|||||||
import (
|
import (
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
@ -40,6 +41,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.StoragePowerActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -47,6 +69,7 @@ type State interface {
|
|||||||
TotalPower() (Claim, error)
|
TotalPower() (Claim, error)
|
||||||
TotalCommitted() (Claim, error)
|
TotalCommitted() (Claim, error)
|
||||||
TotalPowerSmoothed() (builtin.FilterEstimate, error)
|
TotalPowerSmoothed() (builtin.FilterEstimate, error)
|
||||||
|
GetState() interface{}
|
||||||
|
|
||||||
// MinerCounts returns the number of miners. Participating is the number
|
// MinerCounts returns the number of miners. Participating is the number
|
||||||
// with power above the minimum miner threshold.
|
// with power above the minimum miner threshold.
|
||||||
@ -57,6 +80,12 @@ type State interface {
|
|||||||
ForEachClaim(func(miner address.Address, claim Claim) error) error
|
ForEachClaim(func(miner address.Address, claim Claim) error) error
|
||||||
ClaimsChanged(State) (bool, error)
|
ClaimsChanged(State) (bool, error)
|
||||||
|
|
||||||
|
// Testing or genesis setup only
|
||||||
|
SetTotalQualityAdjPower(abi.StoragePower) error
|
||||||
|
SetTotalRawBytePower(abi.StoragePower) error
|
||||||
|
SetThisEpochQualityAdjPower(abi.StoragePower) error
|
||||||
|
SetThisEpochRawBytePower(abi.StoragePower) error
|
||||||
|
|
||||||
// Diff helpers. Used by Diff* functions internally.
|
// Diff helpers. Used by Diff* functions internally.
|
||||||
claims() (adt.Map, error)
|
claims() (adt.Map, error)
|
||||||
decodeClaim(*cbg.Deferred) (Claim, error)
|
decodeClaim(*cbg.Deferred) (Claim, error)
|
||||||
@ -72,7 +101,7 @@ type Claim struct {
|
|||||||
|
|
||||||
func AddClaims(a Claim, b Claim) Claim {
|
func AddClaims(a Claim, b Claim) Claim {
|
||||||
return Claim{
|
return Claim{
|
||||||
RawBytePower: big.Add(a.RawBytePower, b.RawBytePower),
|
RawBytePower: big.Add(a.RawBytePower, b.RawBytePower),
|
||||||
QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower),
|
QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package power
|
|||||||
import (
|
import (
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
@ -66,6 +67,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.StoragePowerActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.StoragePowerActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.StoragePowerActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.StoragePowerActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -73,6 +113,7 @@ type State interface {
|
|||||||
TotalPower() (Claim, error)
|
TotalPower() (Claim, error)
|
||||||
TotalCommitted() (Claim, error)
|
TotalCommitted() (Claim, error)
|
||||||
TotalPowerSmoothed() (builtin.FilterEstimate, error)
|
TotalPowerSmoothed() (builtin.FilterEstimate, error)
|
||||||
|
GetState() interface{}
|
||||||
|
|
||||||
// MinerCounts returns the number of miners. Participating is the number
|
// MinerCounts returns the number of miners. Participating is the number
|
||||||
// with power above the minimum miner threshold.
|
// with power above the minimum miner threshold.
|
||||||
@ -83,6 +124,12 @@ type State interface {
|
|||||||
ForEachClaim(func(miner address.Address, claim Claim) error) error
|
ForEachClaim(func(miner address.Address, claim Claim) error) error
|
||||||
ClaimsChanged(State) (bool, error)
|
ClaimsChanged(State) (bool, error)
|
||||||
|
|
||||||
|
// Testing or genesis setup only
|
||||||
|
SetTotalQualityAdjPower(abi.StoragePower) error
|
||||||
|
SetTotalRawBytePower(abi.StoragePower) error
|
||||||
|
SetThisEpochQualityAdjPower(abi.StoragePower) error
|
||||||
|
SetThisEpochRawBytePower(abi.StoragePower) error
|
||||||
|
|
||||||
// Diff helpers. Used by Diff* functions internally.
|
// Diff helpers. Used by Diff* functions internally.
|
||||||
claims() (adt.Map, error)
|
claims() (adt.Map, error)
|
||||||
decodeClaim(*cbg.Deferred) (Claim, error)
|
decodeClaim(*cbg.Deferred) (Claim, error)
|
||||||
|
@ -29,6 +29,32 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
{{if (le .v 2)}}
|
||||||
|
em, err := adt{{.v}}.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
emm, err := adt{{.v}}.MakeEmptyMultimap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *power{{.v}}.ConstructState(em, emm)
|
||||||
|
{{else}}
|
||||||
|
s, err := power{{.v}}.ConstructState(store)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
{{end}}
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
power{{.v}}.State
|
power{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -40,7 +66,7 @@ func (s *state{{.v}}) TotalLocked() (abi.TokenAmount, error) {
|
|||||||
|
|
||||||
func (s *state{{.v}}) TotalPower() (Claim, error) {
|
func (s *state{{.v}}) TotalPower() (Claim, error) {
|
||||||
return Claim{
|
return Claim{
|
||||||
RawBytePower: s.TotalRawBytePower,
|
RawBytePower: s.TotalRawBytePower,
|
||||||
QualityAdjPower: s.TotalQualityAdjPower,
|
QualityAdjPower: s.TotalQualityAdjPower,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -48,7 +74,7 @@ func (s *state{{.v}}) TotalPower() (Claim, error) {
|
|||||||
// Committed power to the network. Includes miners below the minimum threshold.
|
// Committed power to the network. Includes miners below the minimum threshold.
|
||||||
func (s *state{{.v}}) TotalCommitted() (Claim, error) {
|
func (s *state{{.v}}) TotalCommitted() (Claim, error) {
|
||||||
return Claim{
|
return Claim{
|
||||||
RawBytePower: s.TotalBytesCommitted,
|
RawBytePower: s.TotalBytesCommitted,
|
||||||
QualityAdjPower: s.TotalQABytesCommitted,
|
QualityAdjPower: s.TotalQABytesCommitted,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -64,7 +90,7 @@ func (s *state{{.v}}) MinerPower(addr address.Address) (Claim, bool, error) {
|
|||||||
return Claim{}, false, err
|
return Claim{}, false, err
|
||||||
}
|
}
|
||||||
return Claim{
|
return Claim{
|
||||||
RawBytePower: claim.RawBytePower,
|
RawBytePower: claim.RawBytePower,
|
||||||
QualityAdjPower: claim.QualityAdjPower,
|
QualityAdjPower: claim.QualityAdjPower,
|
||||||
}, ok, nil
|
}, ok, nil
|
||||||
}
|
}
|
||||||
@ -116,7 +142,7 @@ func (s *state{{.v}}) ForEachClaim(cb func(miner address.Address, claim Claim) e
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return cb(a, Claim{
|
return cb(a, Claim{
|
||||||
RawBytePower: claim.RawBytePower,
|
RawBytePower: claim.RawBytePower,
|
||||||
QualityAdjPower: claim.QualityAdjPower,
|
QualityAdjPower: claim.QualityAdjPower,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -131,6 +157,30 @@ func (s *state{{.v}}) ClaimsChanged(other State) (bool, error) {
|
|||||||
return !s.State.Claims.Equals(other{{.v}}.State.Claims), nil
|
return !s.State.Claims.Equals(other{{.v}}.State.Claims), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) SetTotalQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) SetTotalRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) SetThisEpochQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) SetThisEpochRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) claims() (adt.Map, error) {
|
func (s *state{{.v}}) claims() (adt.Map, error) {
|
||||||
return adt{{.v}}.AsMap(s.store, s.Claims{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
return adt{{.v}}.AsMap(s.store, s.Claims{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
||||||
}
|
}
|
||||||
@ -145,7 +195,7 @@ func (s *state{{.v}}) decodeClaim(val *cbg.Deferred) (Claim, error) {
|
|||||||
|
|
||||||
func fromV{{.v}}Claim(v{{.v}} power{{.v}}.Claim) Claim {
|
func fromV{{.v}}Claim(v{{.v}} power{{.v}}.Claim) Claim {
|
||||||
return Claim{
|
return Claim{
|
||||||
RawBytePower: v{{.v}}.RawBytePower,
|
RawBytePower: v{{.v}}.RawBytePower,
|
||||||
QualityAdjPower: v{{.v}}.QualityAdjPower,
|
QualityAdjPower: v{{.v}}.QualityAdjPower,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
0
chain/actors/builtin/power/temp
Normal file
0
chain/actors/builtin/power/temp
Normal file
@ -26,6 +26,24 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
|
||||||
|
em, err := adt0.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
emm, err := adt0.MakeEmptyMultimap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *power0.ConstructState(em, emm)
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
power0.State
|
power0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -128,6 +146,30 @@ func (s *state0) ClaimsChanged(other State) (bool, error) {
|
|||||||
return !s.State.Claims.Equals(other0.State.Claims), nil
|
return !s.State.Claims.Equals(other0.State.Claims), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) SetTotalQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) SetTotalRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) SetThisEpochQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) SetThisEpochRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state0) claims() (adt.Map, error) {
|
func (s *state0) claims() (adt.Map, error) {
|
||||||
return adt0.AsMap(s.store, s.Claims)
|
return adt0.AsMap(s.store, s.Claims)
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,24 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
|
||||||
|
em, err := adt2.MakeEmptyMap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
emm, err := adt2.MakeEmptyMultimap(store).Root()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *power2.ConstructState(em, emm)
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
power2.State
|
power2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -128,6 +146,30 @@ func (s *state2) ClaimsChanged(other State) (bool, error) {
|
|||||||
return !s.State.Claims.Equals(other2.State.Claims), nil
|
return !s.State.Claims.Equals(other2.State.Claims), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) SetTotalQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) SetTotalRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) SetThisEpochQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) SetThisEpochRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state2) claims() (adt.Map, error) {
|
func (s *state2) claims() (adt.Map, error) {
|
||||||
return adt2.AsMap(s.store, s.Claims)
|
return adt2.AsMap(s.store, s.Claims)
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,19 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
|
||||||
|
s, err := power3.ConstructState(store)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
power3.State
|
power3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -130,6 +143,30 @@ func (s *state3) ClaimsChanged(other State) (bool, error) {
|
|||||||
return !s.State.Claims.Equals(other3.State.Claims), nil
|
return !s.State.Claims.Equals(other3.State.Claims), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) SetTotalQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) SetTotalRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) SetThisEpochQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) SetThisEpochRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state3) claims() (adt.Map, error) {
|
func (s *state3) claims() (adt.Map, error) {
|
||||||
return adt3.AsMap(s.store, s.Claims, builtin3.DefaultHamtBitwidth)
|
return adt3.AsMap(s.store, s.Claims, builtin3.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,19 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
|
||||||
|
s, err := power4.ConstructState(store)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
power4.State
|
power4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -130,6 +143,30 @@ func (s *state4) ClaimsChanged(other State) (bool, error) {
|
|||||||
return !s.State.Claims.Equals(other4.State.Claims), nil
|
return !s.State.Claims.Equals(other4.State.Claims), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) SetTotalQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) SetTotalRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.TotalRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) SetThisEpochQualityAdjPower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochQualityAdjPower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) SetThisEpochRawBytePower(p abi.StoragePower) error {
|
||||||
|
s.State.ThisEpochRawBytePower = p
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state4) claims() (adt.Map, error) {
|
func (s *state4) claims() (adt.Map, error) {
|
||||||
return adt4.AsMap(s.store, s.Claims, builtin4.DefaultHamtBitwidth)
|
return adt4.AsMap(s.store, s.Claims, builtin4.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward"
|
reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/cbor"
|
"github.com/filecoin-project/go-state-types/cbor"
|
||||||
@ -38,6 +39,27 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store, currRealizedPower)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.RewardActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -55,6 +77,7 @@ type State interface {
|
|||||||
|
|
||||||
InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error)
|
InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error)
|
||||||
PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error)
|
PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AwardBlockRewardParams = reward0.AwardBlockRewardParams
|
type AwardBlockRewardParams = reward0.AwardBlockRewardParams
|
||||||
|
@ -2,6 +2,7 @@ package reward
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward"
|
reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
@ -64,6 +65,45 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
|
|||||||
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store, currRealizedPower)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store, currRealizedPower)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store, currRealizedPower)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store, currRealizedPower)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.RewardActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.RewardActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.RewardActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.RewardActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
@ -81,6 +121,7 @@ type State interface {
|
|||||||
|
|
||||||
InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error)
|
InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error)
|
||||||
PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error)
|
PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error)
|
||||||
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AwardBlockRewardParams = reward0.AwardBlockRewardParams
|
type AwardBlockRewardParams = reward0.AwardBlockRewardParams
|
||||||
|
@ -23,6 +23,12 @@ func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = *reward{{.v}}.ConstructState(currRealizedPower)
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state{{.v}} struct {
|
type state{{.v}} struct {
|
||||||
reward{{.v}}.State
|
reward{{.v}}.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -101,3 +107,7 @@ func (s *state{{.v}}) PreCommitDepositForPower(networkQAPower builtin.FilterEsti
|
|||||||
},
|
},
|
||||||
sectorWeight), nil
|
sectorWeight), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
0
chain/actors/builtin/reward/temp
Normal file
0
chain/actors/builtin/reward/temp
Normal file
@ -23,6 +23,12 @@ func load0(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make0(store adt.Store, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
out := state0{store: store}
|
||||||
|
out.State = *reward0.ConstructState(currRealizedPower)
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state0 struct {
|
type state0 struct {
|
||||||
reward0.State
|
reward0.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -83,3 +89,7 @@ func (s *state0) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate,
|
|||||||
},
|
},
|
||||||
sectorWeight), nil
|
sectorWeight), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -23,6 +23,12 @@ func load2(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make2(store adt.Store, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
out := state2{store: store}
|
||||||
|
out.State = *reward2.ConstructState(currRealizedPower)
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state2 struct {
|
type state2 struct {
|
||||||
reward2.State
|
reward2.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -86,3 +92,7 @@ func (s *state2) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate,
|
|||||||
},
|
},
|
||||||
sectorWeight), nil
|
sectorWeight), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -23,6 +23,12 @@ func load3(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make3(store adt.Store, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
out := state3{store: store}
|
||||||
|
out.State = *reward3.ConstructState(currRealizedPower)
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state3 struct {
|
type state3 struct {
|
||||||
reward3.State
|
reward3.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -86,3 +92,7 @@ func (s *state3) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate,
|
|||||||
},
|
},
|
||||||
sectorWeight), nil
|
sectorWeight), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
@ -23,6 +23,12 @@ func load4(store adt.Store, root cid.Cid) (State, error) {
|
|||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func make4(store adt.Store, currRealizedPower abi.StoragePower) (State, error) {
|
||||||
|
out := state4{store: store}
|
||||||
|
out.State = *reward4.ConstructState(currRealizedPower)
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
type state4 struct {
|
type state4 struct {
|
||||||
reward4.State
|
reward4.State
|
||||||
store adt.Store
|
store adt.Store
|
||||||
@ -86,3 +92,7 @@ func (s *state4) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate,
|
|||||||
},
|
},
|
||||||
sectorWeight), nil
|
sectorWeight), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
41
chain/actors/builtin/system/actor.go.template
Normal file
41
chain/actors/builtin/system/actor.go.template
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package system
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
{{range .versions}}
|
||||||
|
builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin"
|
||||||
|
{{end}}
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Address = builtin{{.latestVersion}}.SystemActorAddr
|
||||||
|
)
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return make{{.}}(store)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actors.Version{{.}}:
|
||||||
|
return builtin{{.}}.SystemActorCodeID, nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
type State interface {
|
||||||
|
GetState() interface{}
|
||||||
|
}
|
35
chain/actors/builtin/system/state.go.template
Normal file
35
chain/actors/builtin/system/state.go.template
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package system
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
|
||||||
|
system{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/system"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state{{.v}})(nil)
|
||||||
|
|
||||||
|
func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
out.State = system{{.v}}.State{}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state{{.v}} struct {
|
||||||
|
system{{.v}}.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
63
chain/actors/builtin/system/system.go
Normal file
63
chain/actors/builtin/system/system.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package system
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Address = builtin4.SystemActorAddr
|
||||||
|
)
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actors.Version) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return make0(store)
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return make2(store)
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return make3(store)
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return make4(store)
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actors.Version0:
|
||||||
|
return builtin0.SystemActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version2:
|
||||||
|
return builtin2.SystemActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version3:
|
||||||
|
return builtin3.SystemActorCodeID, nil
|
||||||
|
|
||||||
|
case actors.Version4:
|
||||||
|
return builtin4.SystemActorCodeID, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
|
}
|
||||||
|
|
||||||
|
type State interface {
|
||||||
|
GetState() interface{}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user