Compare commits

...
3590 Commits
Author SHA1 Message Date
Aayush Rajasekaran 4121063ca4 Merge pull request #3905 from filecoin-project/asr/changelog
Lotus version 0.7.1
2020-09-17 21:32:04 -04:00
Aayush Rajasekaran aa081dbc6d Lotus version 0.7.1 2020-09-17 21:31:47 -04:00
Łukasz Magiera 984eee8cd6 Merge pull request #3909 from filecoin-project/fix/post-no-skip
wdpost: Only add proven partitions to message params
2020-09-18 03:14:05 +02:00
Łukasz Magiera 26bbd9fb9d wdpost: append is hard 2020-09-18 03:00:31 +02:00
Łukasz Magiera 57c1eac37a gofmt 2020-09-18 02:40:01 +02:00
Łukasz Magiera 8419dda84b wdpost: Only add proven partitions to message params 2020-09-18 02:39:08 +02:00
Łukasz Magiera dcc5643473 shed: Even more bitfield utils 2020-09-18 02:38:30 +02:00
Aayush Rajasekaran 1a101e53a6 Merge pull request #3906 from filecoin-project/feat/upgrade-markets-v0.6.1
Upgrade markets v0.6.1
2020-09-17 15:45:53 -04:00
hannahhoward a894c1e8e6 feat(markets): upgrade markets v0.6.1 2020-09-17 12:30:26 -07:00
Łukasz Magiera b85b50afbc shed: bitfield intersect command 2020-09-17 20:37:35 +02:00
Łukasz Magiera 97064f1d15 Merge pull request #3886 from filecoin-project/feat/retrieval-set-get-ask
Add get-ask, set-ask retrieval commands
2020-09-17 10:32:41 +02:00
Ingar Shu f56602c588 Specify retrieval price in FIL/GiB 2020-09-16 14:30:04 -07:00
Łukasz Magiera c66ebc50c1 Merge pull request #3875 from filecoin-project/feat/break-on-stop-sleep
break out of mining loop when stop is called during niceSleep
2020-09-16 23:11:04 +02:00
Ingar Shu 2aef7f7c07 Clarify help text units 2020-09-16 13:56:46 -07:00
Ingar Shu 665d23cb8e Add set-ask, get-ask retrieval CLI 2020-09-16 13:56:46 -07:00
Łukasz Magiera 3b00c6838a Merge remote-tracking branch 'origin/master' into feat/break-on-stop-sleep 2020-09-16 22:56:21 +02:00
Łukasz Magiera a6b7791d32 lint 2020-09-16 22:56:04 +02:00
Łukasz Magiera 34d31d8124 Merge pull request #3856 from filecoin-project/compile-lotus-soup-testplan
add filecoin-project oni as submodule and compile lotus-soup
2020-09-16 22:54:34 +02:00
Łukasz Magiera 6656e5a6c8 circle: test-lotus-soup -> build-lotus-soup 2020-09-16 22:47:06 +02:00
Łukasz Magiera 487765548e Merge remote-tracking branch 'origin/master' into compile-lotus-soup-testplan 2020-09-16 22:42:54 +02:00
Łukasz Magiera ecd115c002 Merge pull request #3862 from filecoin-project/compile-with-build-flag-testground
make sure lotus compiles with +testground build flag
2020-09-16 22:41:24 +02:00
Raúl Kripalani 5a8ee0dd2a Merge pull request #3861 from filecoin-project/feat/chaos-inspect-runtime 2020-09-16 15:50:08 +01:00
Raúl Kripalani 4fbb322fa2 Merge branch 'master' into feat/chaos-inspect-runtime 2020-09-16 15:37:28 +01:00
Anton Evangelatov 56f223bfc3 add go mod edit for blst deps 2020-09-16 15:19:17 +02:00
Anton Evangelatov 0ff5a71114 update oni to master 2020-09-16 15:13:28 +02:00
Anton Evangelatov b0677ab38e replace lotus and filecoin-ffi deps 2020-09-16 15:12:41 +02:00
Anton Evangelatov f4f80b25d1 add test-lotus-soup to workflows 2020-09-16 15:12:41 +02:00
Anton Evangelatov 3f67c4524e add filecoin-project oni as submodule and compile lotus-soup 2020-09-16 15:12:41 +02:00
Anton Evangelatov b4115021c5 make sure lotus compiles with +testground build flag 2020-09-16 13:43:28 +02:00
Łukasz Magiera b78ffd18c6 Merge pull request #3883 from filcloud/Update-ignore
add lotus-pcr to ignore
2020-09-16 13:39:01 +02:00
Łukasz Magiera c9a8f3b8a0 Merge pull request #3874 from filecoin-project/asr/deal-duration
Make interactive deal CLI reject deals shorter than minimum duration
2020-09-16 13:08:47 +02:00
Frank d870c74a5e add lotus-pcr to ignore 2020-09-16 19:08:47 +08:00
Łukasz Magiera 3d61a37fcf Merge pull request #3880 from filecoin-project/fix/gas-outputs-regression
fix a regression caused by #3800 (GasOutputs zero values)
2020-09-16 12:24:22 +02:00
Łukasz Magiera 0c41522ebf Merge pull request #3873 from filecoin-project/unify-wdpost-log
Use `window post` for window PoSt related log messages.
2020-09-16 12:00:45 +02:00
Raúl Kripalani 362fc180ec fix a regression caused by #3800. 2020-09-16 10:54:26 +01:00
Łukasz Magiera 2db7b8c998 Merge pull request #3872 from zgfzgf/master
Replace fx.Extract with fx.Populate
2020-09-16 11:50:59 +02:00
Aayush Rajasekaran e04331b07c Merge pull request #3682 from filecoin-project/asr/chainstore-state-tree
Sever chainstore's dependence on the state tree
2020-09-16 00:39:26 -04:00
Travis Person 808051d34e break out of mining loop when stop is called during niceSleep 2020-09-16 02:06:40 +00:00
Aayush Rajasekaran e2cf0c4d4c Make interactive deal CLI reject deals shorter than minimum duration 2020-09-15 21:24:30 -04:00
jennijuju 5c69249ba3 Use window post for window PoSt related log messages. 2020-09-15 21:22:29 -04:00
zgfzgf fa9be9a627 Replace fx.Extract with fx.Populate 2020-09-16 09:14:56 +08:00
Aayush Rajasekaran 937ff4e9ae Add a sync test around blocks with bad nonce messages 2020-09-15 20:55:11 -04:00
Aayush Rajasekaran 952f2c2f1e Sever chainstore's dependence on the state tree 2020-09-15 20:41:34 -04:00
Alan Shaw ed4caac9bf fix: remove network version and total fil 2020-09-15 22:24:09 +01:00
Jakub Sztandera 0c1c19c6ef Merge pull request #3867 from filecoin-project/feat/lotus-bench-repo-dir
allow specification of repo directory in lotus-bench
2020-09-15 23:21:04 +02:00
whyrusleeping 24756ac056 allow specification of repo directory in lotus-bench 2020-09-15 11:55:54 -07:00
Łukasz Magiera d4a7732d0a Merge pull request #3800 from filecoin-project/asr/gascost
Add an API to get detailed gas costs for a message
2020-09-15 19:13:20 +02:00
Alan Shaw ae326ce65d feat: add inspect runtime method to chaos actor 2020-09-15 15:43:37 +01:00
Łukasz Magiera 531b7bf92d Merge pull request #3848 from filecoin-project/feat/state-sector-cli
cli: state sector command
2020-09-15 15:30:04 +02:00
Łukasz Magiera 84fa22110f fix lint 2020-09-15 12:09:43 +02:00
Łukasz Magiera e22aa74865 Merge pull request #3780 from filecoin-project/feat/lotus-gateway
implement initial lotus-gateway program
2020-09-15 12:07:59 +02:00
Łukasz Magiera 285fc69f6a gateway: address review 2020-09-15 11:50:08 +02:00
Łukasz Magiera 72216fe917 Merge pull request #3647 from filecoin-project/fix/enable-strict-basefee-check
re-enable baseFee lower bound check
2020-09-15 11:38:28 +02:00
Łukasz Magiera 692027f625 Merge pull request #3819 from zgfzgf/zgfzgf
optimize Settings.nodeType
2020-09-15 10:42:23 +02:00
Łukasz Magiera 801e01bca0 Merge pull request #3778 from filecoin-project/feat/less-restrictive-read-piece-lock
Allow retrievals while sealing
2020-09-15 10:34:00 +02:00
Łukasz Magiera 6665a9ca69 Merge pull request #3845 from filecoin-project/sync-manager
syncer: make SyncManager an interface.
2020-09-15 10:28:48 +02:00
Łukasz Magiera 1c02a417db Merge pull request #3850 from filecoin-project/asr/msig-avail
Fix MsigGetAvailableBalance
2020-09-15 10:22:27 +02:00
Łukasz Magiera 9ec26e776d Merge pull request #3851 from filecoin-project/fix/paych-status-commands
Fix payment channel status commands
2020-09-15 10:21:16 +02:00
Łukasz Magiera cf82483420 Merge pull request #3689 from filecoin-project/feat/batch-window-PoST
storage: split window PoST submission into multiple messages
2020-09-15 10:17:22 +02:00
Dirk McCormick db998e9c0f fix: storage - move rand generation after proofs 2020-09-15 09:52:55 +02:00
Dirk McCormick f0f15f899c feat: split window PoST messages into batches 2020-09-15 09:43:18 +02:00
hannahhoward 7dc091052a feat(manager): less restrictive storage lock
Use initial less restrictive storage lock when trying to read unsealed data before acquiring more
restrictive lock needed for unsealing
2020-09-14 18:48:14 -07:00
hannahhoward 17e44af542 docs(api): fix api docs 2020-09-14 18:44:45 -07:00
hannahhoward ac8ef29d35 fix(paych): add paych status from to cmd
add missing from to status to list
2020-09-14 18:42:10 -07:00
hannahhoward 48e47ddc23 fix(paych): fix paych status command line 2020-09-14 18:42:10 -07:00
Aayush Rajasekaran 6acd3d6028 Fix MsigGetAvailableBalance 2020-09-14 21:12:32 -04:00
Łukasz Magiera 7fd5c81674 cli: state sector command 2020-09-15 01:36:49 +02:00
Steven Allen f9ea3935ff Merge pull request #3846 from filecoin-project/steb/specs-actors-0.9.10
Update specs-actors to 0.9.10
2020-09-14 14:45:04 -07:00
Steven Allen 9804310cc8 Update specs-actors to 0.9.10
Moves the Keyer type (and helpers) into go-state-types.
2020-09-14 14:32:57 -07:00
Aayush Rajasekaran 07e574db44 Merge pull request #3844 from filecoin-project/steb/specs-actors-0.9.9
Update to specs-actors 0.9.9
2020-09-14 17:19:03 -04:00
Raúl Kripalani dd841f32db syncer: make SyncManager an interface. 2020-09-14 21:58:59 +01:00
Łukasz Magiera 665f93bbb7 Merge pull request #3839 from filecoin-project/fix/skipped-skipping
wdpost: Skip sectors correctly
2020-09-14 21:56:43 +02:00
Steven Allen 32eeb96ce7 Update to specs-actors 0.9.9
This patch changes the runtime interfaces, to make it possible to abstract over them.
2020-09-14 12:47:39 -07:00
vyzo 172bfacae0 compute baseFee for check even in null rounds 2020-09-14 22:20:26 +03:00
vyzo 0a5494dd79 use the factor in getBaseFeeLowerBound 2020-09-14 22:13:37 +03:00
vyzo 044202b37f use conservative base fee lower bound factor for strict checks 2020-09-14 22:13:37 +03:00
vyzo d68ec37942 reenable baseFee lower bound check 2020-09-14 22:13:37 +03:00
Aayush Rajasekaran 0edcae9e04 Fixup new command 2020-09-14 14:40:38 -04:00
Aayush Rajasekaran d1850ea27d Add an API to get detailed gas costs for a message 2020-09-14 14:40:13 -04:00
Aayush Rajasekaran 60a031a713 Lower devnet block time 2020-09-14 14:40:13 -04:00
Łukasz Magiera 8a05fe86d6 wdpost: Skip sectors correctly 2020-09-14 20:33:54 +02:00
Mike Greenberg 8a21198f56 Merge pull request #3765 from ggq89/master
optimize definition of state_heights
2020-09-14 14:19:31 -04:00
Whyrusleeping b212368a70 Merge pull request #2455 from filecoin-project/inmem-journal
make journal pluggable; record deals, sealing, wdpost, mempool events
2020-09-14 11:17:21 -07:00
Raúl Kripalani 954ff32503 fix transitive api dependency on ffi. 2020-09-14 19:01:35 +01:00
Raúl Kripalani 7c13fa95d1 Merge branch 'master' into inmem-journal 2020-09-14 17:01:36 +01:00
Raúl Kripalani 09e9d6d778 deal journal events: wire into markets subscriptions. 2020-09-14 16:20:01 +01:00
Raúl Kripalani 86607452d7 circleci: make lint expend all cores. (#3831)
* circleci: make lint expend all cores.

* i hate yaml.

* now i hate it even more.
2020-09-14 14:18:53 +02:00
Raúl Kripalani 05aa5f2d38 allow customizing disabled journal events + tests. 2020-09-14 13:01:03 +01:00
Raúl Kripalani 6d29d75724 Merge branch 'master' into inmem-journal 2020-09-14 12:17:45 +01:00
Łukasz Magiera 3a34856dfe Merge pull request #3822 from filcloud/issue-2495-make-nested-dir
make nested dir
2020-09-14 13:06:14 +02:00
Aarsh Shah 973738d30f Merge pull request #3767 from filecoin-project/fix/addpiece-retry
Retry Add Piece.
2020-09-14 15:44:48 +05:30
Albert·Gou 747b34c2c8 Update sync.go 2020-09-14 18:00:17 +08:00
Frank dcae513487 make nested dir 2020-09-14 16:49:35 +08:00
Łukasz Magiera 18c025f10e Merge pull request #3777 from filecoin-project/feat/plan-20-blocks
Increase the FeeCap estimation to 20 blocks in a future
2020-09-14 10:20:17 +02:00
Albert·Gou e45a7749b0 Update sync.go 2020-09-14 16:20:01 +08:00
Albert·Gou b7ea145f38 Merge remote-tracking branch 'upstream/master' into master 2020-09-14 16:17:10 +08:00
Aarsh Shah 6c61ff0e9e log error 2020-09-14 12:04:50 +05:30
zgfzgf 45a5eaf913 optimize Settings.nodeType 2020-09-14 11:00:08 +08:00
whyrusleeping 3401cb349b add mpool push and chainHead 2020-09-11 23:07:20 -07:00
whyrusleeping 8b9a3ea6c3 implement initial lotus-gateway program 2020-09-11 20:01:37 -07:00
Jakub Sztandera d5aef296ea Increase the FeeCap estimation to 20 blocks in a future
FeeCap will be set to 10x the current running rate

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-11 21:59:51 +02:00
Łukasz Magiera aa83a4c1f5 Merge pull request #3772 from filecoin-project/fix/prune-protect-local
don't prune locally published messages
2020-09-11 21:46:21 +02:00
Łukasz Magiera b83463ca76 Merge pull request #3774 from filecoin-project/fix/paych-status-missing
add paych status command to list
2020-09-11 21:45:25 +02:00
Łukasz Magiera c1ca24e8bc Merge pull request #3775 from filecoin-project/fix/markets-message-cid-update
Fix for PublishDeals message cid changing due to gas
2020-09-11 21:44:56 +02:00
vyzo b78fe0b898 fix deadlock 2020-09-11 21:40:25 +03:00
vyzo bf1036c78f rename priority variable to protected 2020-09-11 21:12:11 +03:00
Ingar Shu 2e3ff9e401 Update market client/provider adapters to WaitForMessage API 2020-09-11 11:00:42 -07:00
Aarsh Shah eabdf74946 changes as per review 2020-09-11 23:15:57 +05:30
vyzo cf9820137c don't prune locally published messages 2020-09-11 20:32:52 +03:00
Raúl Kripalani c017d0fbaf Merge pull request #3768 from filecoin-project/fix/chaos-tests
fix: chaos tests
2020-09-11 15:45:02 +01:00
Alan Shaw 16f7d5801b fix: chaos tests 2020-09-11 15:25:59 +01:00
Aarsh Shah 62b2963781 retry add piece 2020-09-11 16:58:09 +05:30
Raúl Kripalani cd9858420f Merge pull request #3736 from filecoin-project/test/chaos-tests 2020-09-11 12:18:27 +01:00
Łukasz Magiera 4410da98be Merge pull request #3766 from filecoin-project/fix/mpool-prune
refactor getBaseFeeLowerBound, use it to prune less aggressively
2020-09-11 11:40:26 +02:00
Łukasz Magiera b89aa02d77 Merge pull request #3710 from filecoin-project/feat/window-post-faulty-sectors
windowed post generation now returns faulty sectors
2020-09-11 11:15:32 +02:00
vyzo 3dfb3e641b refactor getBaseFeeLowerBound, use it to prune less aggressively 2020-09-11 12:15:03 +03:00
Łukasz Magiera a3f228d05a Merge pull request #3739 from filecoin-project/upd/badger
Upgrade badger
2020-09-11 11:14:39 +02:00
Łukasz Magiera eaf9ebc2ca Merge pull request #3752 from filecoin-project/fix/mpool-replace-auto
Fix mpool replace --auto
2020-09-11 11:12:35 +02:00
Łukasz Magiera 55e4183825 Merge pull request #3754 from filecoin-project/feat/shed-export
Add faster and slimmer option to chain export via lotus-shed
2020-09-11 11:10:41 +02:00
Łukasz Magiera aeb3437a9f lint, docsgen 2020-09-11 10:55:10 +02:00
Albert·Gou 6e7de3c8d9 optimize definition of state_heights
In the same parentstateroot, the one with the smallest height should be selected
2020-09-11 16:52:48 +08:00
Łukasz Magiera d0175392c0 Merge remote-tracking branch 'origin/master' into feat/window-post-faulty-sectors 2020-09-11 10:47:39 +02:00
Łukasz Magiera c4b3970c70 mod tidy 2020-09-11 10:41:24 +02:00
whyrusleeping 72eb17d314 wire skip old messages option through the api 2020-09-10 17:40:47 -07:00
whyrusleeping 0efe5ee7d5 include some other changes 2020-09-10 17:32:30 -07:00
whyrusleeping 0e3dd3cb3b Add faster and slimmer option to chain export via lotus-shed 2020-09-10 17:28:25 -07:00
hannahhoward 56b237e7b8 fix(paych): add status command to list
Add paych status cmd to list of payment channel sub commands
2020-09-10 16:00:23 -07:00
Jakub Sztandera 2865a0367b Fix mpool replace --auto
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-11 00:59:57 +02:00
Aayush Rajasekaran 232cc320bd Merge pull request #3747 from filecoin-project/ntwk-0.7.0
Ntwk 0.7.0
2020-09-10 18:07:06 -04:00
Aayush Rajasekaran e7edc46daf Lotus version 0.7.0 2020-09-10 17:56:54 -04:00
Jakub Sztandera 6813ab4e65 Add additional metrics
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera fd714cbceb Remove PackingEfficiency consideration from base fee in an upgrade
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
whyrusleeping db6bd890d9 condition randomness changes on fork height
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Steven Allen 7a46c5ff31 [WIP] Fix ticket randomness
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Aayush Rajasekaran 98a9042c07 Use newest network version in genesiss setup stuff 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran 4170e18dea fix testground build 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran 230ef2484d fix tests 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran beba92aed4 Improve network versioning logic 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran cbb693e99e Update docs 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran 774e068436 Update to specs-actors v0.9.8 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran 86ba21029d Update to go state types 001afaca718c 2020-09-10 17:41:55 -04:00
Aayush Rajasekaran 316ac61875 Update to go state types 3ca0d2890090 2020-09-10 17:41:55 -04:00
Jakub Sztandera d5d264d13b Add fork point
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera c71e1adc93 Integrate multiple drand networks with pubsub
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera 564d0ae974 Upgrade drand
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera 9a48ec194e Add DrandSchedule to testground params
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera bb0a7f91cc Fix drand non-test
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera 73e54352cd Fix off by one
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera 64fa6fd9e5 Draw the rest of the owl
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera 2d3f92aeed Introduce beacon Schedule
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 17:41:55 -04:00
Jakub Sztandera df5750a21c go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 23:15:56 +02:00
Łukasz Magiera e996a5246b Merge remote-tracking branch 'origin/master' into feat/window-post-faulty-sectors 2020-09-10 22:18:17 +02:00
Łukasz Magiera bbac86f745 gofmt, mod tidy 2020-09-10 22:07:20 +02:00
Łukasz Magiera 22556fb24c Add fil-blst submodule 2020-09-10 22:04:08 +02:00
Łukasz Magiera 2374cb1bc5 Update ffi 2020-09-10 21:44:01 +02:00
Łukasz Magiera c7b0241a48 ffiwrapper: Test skipping corrupted sectors in PoSt 2020-09-10 21:19:26 +02:00
Jakub Sztandera dc85a276cd Upgrade badger
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-10 19:17:48 +02:00
Łukasz Magiera 9e9856bb45 Merge pull request #3590 from filecoin-project/asr/multisig
Multisig API additions
2020-09-10 17:04:48 +02:00
Łukasz Magiera 890e6280df Merge pull request #3669 from filecoin-project/feat/independent-version-numbers
build: Separate API versions per node type
2020-09-10 17:00:32 +02:00
Alan Shaw c94ff3430c refactor: use nil value 2020-09-10 14:51:30 +01:00
Łukasz Magiera da7e4b3a09 Merge pull request #3735 from filecoin-project/deps/update-pubsub
update go-libp2p-pubsub@master
2020-09-10 15:35:28 +02:00
Alan Shaw a214069586 chore: appease linter 2020-09-10 14:30:52 +01:00
Alan Shaw d4b185be5e test: add chaos actor tests 2020-09-10 14:23:39 +01:00
Raúl Kripalani 747a7de168 Merge pull request #3733 from filecoin-project/feat/chaos-abort-2 2020-09-10 14:20:34 +01:00
vyzo bfa47b3663 update go-libp2p-pubsub@master 2020-09-10 16:11:23 +03:00
Alan Shaw 0e7f14159a refactor: another rename 2020-09-10 12:06:00 +01:00
Alan Shaw b755ce9528 refactor: renames 2020-09-10 12:03:13 +01:00
Alan Shaw f3cae55bd4 feat: chaos abort 2020-09-10 11:31:34 +01:00
Łukasz Magiera f64bd55bc6 Merge pull request #3720 from filecoin-project/fix/increase-precommit2-retry-counter
Increase the number of times precommit2 is attempted before moving back to precommit1
2020-09-10 11:52:01 +02:00
Łukasz Magiera 4c8bb846ea Merge pull request #3724 from filecoin-project/fix/relax-strictness-push
relax mpool add strictness checks for local pushes
2020-09-10 11:51:02 +02:00
Łukasz Magiera bd14fb90fc Merge pull request #3729 from filecoin-project/fix/statediff-ci
ci: fix statediff build; make optional.
2020-09-10 11:49:04 +02:00
Raúl Kripalani 9e5bce90f4 ci: fix statediff build; make optional. 2020-09-10 10:41:18 +01:00
vyzo 72c7d4c886 relax mpool add strictness checks for local pushes
So that a node can have more than 1k pending messages for its own local addresses.
2020-09-10 09:55:50 +03:00
lanzafame 558b637b07 Increase the number of times precommit2 is attempted before moving back to precommit1 2020-09-10 13:52:21 +10:00
Whyrusleeping 767341b279 Merge pull request #3437 from filecoin-project/feat/mpool-stats-cmd
add a simple command to watch messages sitting in the mempool
2020-09-09 18:29:42 -07:00
Łukasz Magiera 5e7737f55d wdpost: Handle skipped sectors correctly 2020-09-10 02:59:37 +02:00
whyrusleeping c73916b4e7 fix the linter 2020-09-09 17:37:49 -07:00
whyrusleeping 0361ca1c39 add some bits about windowed post 2020-09-09 17:18:55 -07:00
Aayush Rajasekaran cd4cd22928 Merge pull request #3717 from filecoin-project/asr/checkpoint-msg
Fix IsAncestorOf
2020-09-09 19:49:47 -04:00
Aayush Rajasekaran e1a0cf6ca5 Add a checkpoint test 2020-09-09 19:21:48 -04:00
Łukasz Magiera 73bb9d5afb Merge pull request #3715 from filecoin-project/fix/chainwatch/partition-diff
fix(chainwatch): compare prev miner with cur miner
2020-09-10 01:19:58 +02:00
Aayush Rajasekaran 183df4c135 Fix IsAncestorOf 2020-09-09 19:09:55 -04:00
frrist f2b238f50a fix(chainwatch): compare prev miner with cur miner
- bug was comparing cur miner with cur miner
2020-09-09 15:30:30 -07:00
whyrusleeping 09194aa613 print better error when losing connection 2020-09-09 15:19:54 -07:00
whyrusleeping e58327d4ed rename LE tag to quantile 2020-09-09 15:19:54 -07:00
whyrusleeping 8414aa6e4b more metrics! 2020-09-09 15:19:54 -07:00
whyrusleeping 7d1d690eb7 lets get some metrics 2020-09-09 15:19:54 -07:00
whyrusleeping 47ad7ccb5f some more stats 2020-09-09 15:19:54 -07:00
whyrusleeping 679c4183e7 add a simple command to watch messages sitting in the mempool 2020-09-09 15:19:53 -07:00
Aayush Rajasekaran 8807c75c51 Fix warn message 2020-09-09 18:17:05 -04:00
Łukasz Magiera be9d8f7ce3 Merge pull request #3712 from filecoin-project/asr/devnet
Fix devnets
2020-09-09 23:15:36 +02:00
Aayush Rajasekaran a7a43a1124 Fix devnets 2020-09-09 17:10:35 -04:00
whyrusleeping 7a6ceebb34 windowed post generation now returns faulty sectors 2020-09-09 14:00:15 -07:00
Aayush Rajasekaran 8b2862a1b8 Merge pull request #3706 from filecoin-project/asr/changelog
Lotus version 0.6.2
2020-09-09 16:45:10 -04:00
Aayush Rajasekaran 1d4b5c201e Lotus version 0.6.2 2020-09-09 16:44:37 -04:00
Łukasz Magiera f983145897 Merge pull request #3708 from filecoin-project/feat/warn-random-selection
warn when optimal selection fails to pack a block and we fall back to random selection
2020-09-09 22:42:04 +02:00
vyzo d369f542c5 warn when optimal selection fails to pack a block and we fall back to random selection 2020-09-09 23:17:09 +03:00
Łukasz Magiera 6c8a44b056 Merge pull request #3701 from filecoin-project/feat/gas-perf-cmd
add basic command for printing gas performance of messages in the mpool
2020-09-09 21:39:40 +02:00
Jakub Sztandera ef18f93609 Merge pull request #3698 from filecoin-project/fix/mpool-packing-failure
fix mpool optimal selection packing failure
2020-09-09 21:38:26 +02:00
Łukasz Magiera 540afb1573 Merge pull request #3704 from filecoin-project/misc/kubuxu-codeowners
Add Kubuxu to CODEOWNERS
2020-09-09 21:38:04 +02:00
Jakub Sztandera 2d7a924275 Add Kubuxu to CODEOWNERS
3 pairs of eyes are better than two and getting directly notified on PR is what I want (but GH notifications have no repo+PR filter).
2020-09-09 21:32:03 +02:00
Aayush Rajasekaran 702799290f Merge pull request #3680 from filecoin-project/asr/checkpoint
Allow nodes to mark tipsets as checkpointed
2020-09-09 15:22:07 -04:00
vyzo f7d3d371f7 print reward and actual gas performancec 2020-09-09 22:11:51 +03:00
Łukasz Magiera 311d20eeb2 Merge pull request #3702 from filecoin-project/steb/remove-hard-coded-late-fee
Remove hard-coded late-fee in window PoSt
2020-09-09 20:50:57 +02:00
Steven Allen afa913f2ed Remove hard-coded late-fee in window PoSt
This is no longer necessary, and doesn't really serve any purpose.
2020-09-09 11:34:55 -07:00
Aayush Rajasekaran f0554676dd Explicitly check tipsetkeys when considering checkpoint 2020-09-09 14:34:05 -04:00
Aayush Rajasekaran 3337b9a98f Update docs 2020-09-09 14:34:05 -04:00
Aayush Rajasekaran 22fdb9594d Add CLI to checkpoint tipsets 2020-09-09 14:34:05 -04:00
Aayush Rajasekaran 93a0052219 Add a SyncUnmarkBad CLI 2020-09-09 14:34:05 -04:00
Aayush Rajasekaran 5c852e26c2 Add a SyncUnmarkBad API 2020-09-09 14:34:05 -04:00
Aayush Rajasekaran 7d2118cd97 Fix a typo that's totally related to this PR 2020-09-09 14:34:05 -04:00
Aayush Rajasekaran 5e3c178b9e Add a sync test for checkpointed tipsets 2020-09-09 14:34:04 -04:00
Aayush Rajasekaran 35aa78dad9 Allow marking a certain tipset as checkpointed 2020-09-09 14:34:00 -04:00
whyrusleeping 7747f5a3fa add basic command for printing gas performance of messages in the mempool 2020-09-09 11:23:48 -07:00
Łukasz Magiera a2f1e76fea Merge pull request #3688 from filecoin-project/fix/test-vectors-import-cycle
resolve lotus, test-vectors, statediff dependency cycle
2020-09-09 19:53:54 +02:00
vyzo cf515bc5ca add selection test with real world messages dumped from a live node mpool 2020-09-09 20:46:26 +03:00
vyzo 97cbfa11b7 fix nasty bug in optimal selection
the sort has to account for negative gasPerf and be stable; go figure.
2020-09-09 20:45:24 +03:00
Łukasz Magiera f2b76d8b3b Merge remote-tracking branch 'origin/master' into fix/test-vectors-import-cycle 2020-09-09 19:41:24 +02:00
Whyrusleeping e2a6d02570 Merge pull request #3664 from filecoin-project/add-sleep-when-drand-errors
add niceSleep 1 second when drand errors
2020-09-09 10:37:43 -07:00
Łukasz Magiera 1d78ffc04d Merge pull request #3676 from filecoin-project/feat/mpool-replace-auto
add an auto flag to mpool replace
2020-09-09 19:31:43 +02:00
Łukasz Magiera 42b9d42a8f Merge pull request #3624 from filecoin-project/blocksync-refactor
blocksync: introduce interfaces; rename to ChainExchange (abbrev. chainxchg)
2020-09-09 19:29:20 +02:00
Łukasz Magiera 7dbbe84086 Merge pull request #3690 from filecoin-project/docs/cli-paych-status
paych: add docs on how to use paych status
2020-09-09 19:25:32 +02:00
whyrusleeping e9b85f5acb ensure replaced message can properly RBF 2020-09-09 10:23:41 -07:00
Łukasz Magiera cb3b0ab2bb Merge remote-tracking branch 'origin/master' into blocksync-refactor 2020-09-09 19:19:05 +02:00
Łukasz Magiera de772bf1f9 Merge pull request #3696 from filecoin-project/bugfix/pubsish
typo fix in error message
2020-09-09 18:45:20 +02:00
Łukasz Magiera 91a9bae308 Merge pull request #3691 from filecoin-project/codeowners
initial CODEOWNERS.
2020-09-09 18:43:28 +02:00
Mosh fe7c152c97 typo fix in error message 2020-09-09 12:24:33 -04:00
Raúl Kripalani 333c7ce1c9 initial CODEOWNERS. 2020-09-09 14:40:30 +01:00
Dirk McCormick ef2303bc5d docs: add docs on how to use paych status 2020-09-09 15:37:34 +02:00
Raúl Kripalani 6d2b4ab775 fix lint. 2020-09-09 14:28:56 +01:00
Raúl Kripalani b3dedfedc0 ci: remove unnecessary go get. 2020-09-09 14:20:11 +01:00
Raúl Kripalani 2a3743ff84 invoke the statediff command properly. 2020-09-09 14:08:54 +01:00
Raúl Kripalani a5afd83c7b Merge branch 'master' into fix/test-vectors-import-cycle 2020-09-09 13:04:41 +01:00
Raúl Kripalani e8d1bab914 make the runner call statediff as a binary. 2020-09-09 13:03:43 +01:00
Łukasz Magiera de654de911 Merge pull request #3687 from filecoin-project/misc/v0.6.2-rc1
Bump version to 0.6.2-rc1
2020-09-09 13:08:51 +02:00
Łukasz Magiera 37c0f75499 Bump version to 0.6.2-rc1 2020-09-09 13:07:15 +02:00
Łukasz Magiera 5c5c1c80cf Merge pull request #3686 from filecoin-project/fix/gas-premium-median
gas: Fix median calc
2020-09-09 12:22:10 +02:00
Łukasz Magiera e91ee9f62a Fix lint 2020-09-09 12:18:02 +02:00
Łukasz Magiera 213b4eace8 Merge pull request #3685 from filecoin-project/fix/mpool-selection-full-blocks
adjust optimal selection to always try to fill blocks
2020-09-09 12:15:38 +02:00
Łukasz Magiera f695c0c164 gas: Add tests to median premium math 2020-09-09 12:14:46 +02:00
vyzo 194b6eb9d8 fix issue with gasLimit check for trimming (> instead of >=) 2020-09-09 12:58:51 +03:00
Łukasz Magiera 2aba16e2c9 gas: Fix median calc 2020-09-09 11:41:02 +02:00
vyzo 0b09082450 adjust optimal selection to always try to fill blocks 2020-09-09 12:37:03 +03:00
Łukasz Magiera 29aa972f18 Merge pull request #3546 from filecoin-project/feat/netconnect-miner-addr
net cli: Support miner addresses in net connect
2020-09-09 08:55:51 +02:00
Aayush Rajasekaran 06b814b627 Merge pull request #3673 from filecoin-project/fix/long-syncs-over-upgrade
pass tipset through upgrade logic
2020-09-08 22:28:42 -04:00
whyrusleeping 8c0994e290 add an auto flag to mpool replace 2020-09-08 15:47:40 -07:00
Łukasz Magiera b1d251e950 Merge pull request #3667 from filecoin-project/fix/new-ts
Add peer to peer manager before fetching the tipset
2020-09-08 22:54:51 +02:00
Raúl Kripalani 63cdbef219 temp fix test-vectors import cycle. 2020-09-08 21:50:25 +01:00
whyrusleeping 8a8f0ab3ec pass tipset through upgrade logic 2020-09-08 13:45:44 -07:00
Łukasz Magiera 1ef0359731 Merge pull request #3668 from filecoin-project/feat/sync-fetching-messages-state
Add StageFetchingMessages to sync status
2020-09-08 21:15:05 +02:00
Łukasz Magiera 38863d3025 build: Separate API versions per node type 2020-09-08 21:14:53 +02:00
Jakub Sztandera 44f4372ca3 Add StageFetchingMessages to sync status
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 20:42:20 +02:00
Jakub Sztandera 46d3769a44 Add peer to peer manager before fetching the tipset
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 20:13:16 +02:00
Łukasz Magiera 65b7d71bdf Merge pull request #3663 from filecoin-project/fix/minor-mpool-bug
fix very minor bug in repub baseFeeLowerBound
2020-09-08 19:49:51 +02:00
Anton Evangelatov 1d67e38f78 add niceSleep 1 second when drand errors 2020-09-08 18:35:10 +02:00
Łukasz Magiera 3697a1af4d Merge pull request #3655 from filecoin-project/fix/stgmgr-undef-unsealed
storage manager: bail out with an error if unsealed cid is undefined (redux)
2020-09-08 18:03:24 +02:00
vyzo 26ff596983 fix very minor bug in repub baseFeeLowerBound
messages will not be accepted if the GasFeeCap is less than minimumBaseFee, but it doesn't hurt
to be correct.
2020-09-08 19:02:05 +03:00
Raúl Kripalani b33db9c1ab Merge branch 'master' into blocksync-refactor 2020-09-08 14:22:43 +01:00
Łukasz Magiera 867469e9b3 Merge pull request #3648 from filecoin-project/fix/dont-use-latency
Don't use latency as initital estimate for blocksync
2020-09-08 14:56:23 +02:00
Łukasz Magiera a4fc5c6975 Merge pull request #3650 from filecoin-project/fix/chain-nearsync-check
fix isChainNearSync check in block validator
2020-09-08 14:52:36 +02:00
Łukasz Magiera e87ccbfa22 Merge pull request #3657 from filecoin-project/fix/stg-sealer-read-piece
storage: return true from Sealer.ReadPiece() on success
2020-09-08 14:44:30 +02:00
Dirk McCormick 17c15a74a2 fix: return true from Sealer.ReadPiece() on success 2020-09-08 13:50:56 +02:00
Dirk McCormick 8bbdf2e7cb fix: storage manager - bail out on undefined unsealed cid 2020-09-08 12:54:01 +02:00
Jakub Sztandera b66058e417 Add 0 guard
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 12:19:37 +02:00
Jakub Sztandera 4fce0181ab Ignore the linter
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 12:18:48 +02:00
Jakub Sztandera ba9678bd61 Use for to iterate over channel
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 12:11:30 +02:00
Jakub Sztandera 74e577610a Forward peers from hello to blocksync
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 10:18:51 +02:00
vyzo 37ec1a978e nicer check using Time objects 2020-09-08 10:47:41 +03:00
vyzo 27fa9969f3 fix isChainNearSync check in block validator 2020-09-08 10:26:27 +03:00
Łukasz Magiera 4045ffea3c Merge pull request #3649 from filecoin-project/asr/changelog
Lotus version 0.6.1
2020-09-08 09:14:14 +02:00
Aayush Rajasekaran e9e067eebf Lotus version 0.6.1 2020-09-08 03:10:27 -04:00
Jakub Sztandera 93176c91f4 Track time in relation to request size
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 09:06:31 +02:00
Łukasz Magiera 7ee5973400 Merge pull request #3645 from filecoin-project/asr/test-vectors-update
Update test-vectors
2020-09-08 09:05:40 +02:00
Jakub Sztandera 043e62ab63 Don't use latency as initital estimate for blocksync
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-08 08:59:05 +02:00
Aayush Rajasekaran f91f665f3f Update test-vectors 2020-09-08 01:24:30 -04:00
Aayush Rajasekaran f985f42e93 Merge pull request #3643 from filecoin-project/revert-3602-feat/delayed-pubsub-join
Revert "only subscribe to pubsub topics once we are synced"
2020-09-08 00:43:03 -04:00
Aayush Rajasekaran c77f5f6252 Revert "only subscribe to pubsub topics once we are synced" 2020-09-08 00:32:26 -04:00
Aayush Rajasekaran 60cae87bfa Merge pull request #3635 from filecoin-project/ntwk-0.6.0
Network Upgrade: 0.6.0
2020-09-07 19:29:35 -04:00
Aayush Rajasekaran eda33f7d11 Merge pull request #3634 from filecoin-project/fix/proper-epoch-breeze
use defined constant for fork height
2020-09-07 19:20:05 -04:00
whyrusleeping d1cf445327 use defined constant for fork height 2020-09-07 16:18:22 -07:00
Aayush Rajasekaran 8e3dd11f81 Merge pull request #3633 from filecoin-project/asr/changelog
Lotus version v.0.6.0
2020-09-07 19:16:47 -04:00
Aayush Rajasekaran 80a4beace6 Lotus version v.0.6.0 2020-09-07 19:14:17 -04:00
Aayush Rajasekaran 6dc821186e Merge pull request #3632 from filecoin-project/feat/faucet-fixins
Implement faucet funds reallocation logic
2020-09-07 19:13:39 -04:00
whyrusleeping 26ec0716b9 fix lint errors 2020-09-07 16:12:44 -07:00
whyrusleeping 97af576f6a Implement faucet funds reallocation logic
use all committed sectors instead of power

give all miners who had at least a sector on friday a base amount

include genesis miner in redistribution

drop back to 1,000,000
2020-09-07 16:06:13 -07:00
Aayush Rajasekaran 0e986df7e5 Merge pull request #3627 from filecoin-project/asr/specs-update-0.9.7
Update to specs 0.9.7 and markets 0.6.0
2020-09-07 18:00:56 -04:00
Aayush Rajasekaran 45011c0fad Use latest version if no upgrade height is specified 2020-09-07 17:43:14 -04:00
Jakub Sztandera ca919dddd6 Merge pull request #3628 from filecoin-project/fix/fork-treshold
Upgrade to correct fork treshold
2020-09-07 23:17:24 +02:00
Aayush Rajasekaran 6eea5dd109 Update to specs 0.9.7 and markets 0.6.0 2020-09-07 17:11:32 -04:00
Jakub Sztandera 46ee2eeded Upgrade to correct fork treshold
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 23:07:33 +02:00
Łukasz Magiera 3741186656 Merge pull request #3625 from filecoin-project/fix/temporary-allow-negative-chains
temporarily allow negative chains
2020-09-07 23:06:15 +02:00
Jakub Sztandera 704db225d1 Update the fork point
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:45:06 +02:00
Jakub Sztandera ce0e9594df Update to go-state-types
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:44:12 +02:00
Jakub Sztandera 835b7eb6f7 Make allowNegativeChains a function
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:44:12 +02:00
vyzo 172ff846fd decouple negative chain selection from base fee lower bound validation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:44:12 +02:00
vyzo 97fddc45d9 temporarily allow negative perfoming chains
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:44:09 +02:00
Jakub Sztandera 8a018ce3ba Merge pull request #3623 from filecoin-project/feat/base-fee-tamping
introduce logic to perform base fee tamping around the upgrade time
2020-09-07 22:43:34 +02:00
Jakub Sztandera baaec9db87 Fix testground build
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:31:39 +02:00
whyrusleeping 5d5c964d06 set correct upgrade height
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:31:39 +02:00
whyrusleeping 502d3fb335 set values for test networks
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:31:39 +02:00
whyrusleeping 5654322f54 introduce logic to perform base fee tamping around the upgrade time
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-07 22:31:36 +02:00
Łukasz Magiera bea31fdcb0 Merge pull request #3603 from filecoin-project/asr/specs-for-0.6.0
Update to specs actors v0.9.6
2020-09-07 21:54:36 +02:00
Aayush Rajasekaran 529002c2b7 Update to markets master 2020-09-07 15:48:42 -04:00
Aayush Rajasekaran 4367d74102 Update statediff and test-vectors 2020-09-07 15:48:42 -04:00
hannahhoward 04e34b8ca7 docs(apidocs): run docsgen 2020-09-07 15:48:42 -04:00
hannahhoward 5ad8e23eae feat(markets): use new api 2020-09-07 15:48:42 -04:00
hannahhoward 2db4b57013 feat(markets): upgrade markets 0.6.0 2020-09-07 15:48:42 -04:00
Aayush Rajasekaran d678fe4bfa Fix tests 2020-09-07 15:48:42 -04:00
Aayush Rajasekaran be7fb9d3df Use custom markets 2020-09-07 15:48:42 -04:00
Aayush Rajasekaran 39755a294a Update to specs v0.9.6 2020-09-07 15:48:41 -04:00
anorth a8dcea1422 Remove use of exitcode.SysErrInvalidParameters 2020-09-07 15:48:41 -04:00
Łukasz Magiera 2080458f0d Merge pull request #3518 from filecoin-project/feat/pubsub-red
integrate pubsub Random Early Drop
2020-09-07 21:42:14 +02:00
Jakub Sztandera 3398426293 Merge pull request #3592 from filecoin-project/feat/improved-publish-logic
Improve publish/republish logic
2020-09-07 21:32:52 +02:00
Raúl Kripalani 878ffafb51 rename other Chain{Exchange=>Bitswap}; fix ChainBlock{s=>S}ervice(). 2020-09-07 20:20:23 +01:00
vyzo 2233751668 use the baseFeeLowerBound for computing repub message chains 2020-09-07 21:53:30 +03:00
Łukasz Magiera b86831356b Merge pull request #3622 from filecoin-project/revert-3615-fix/stormgr-undef-unsealed
Revert "storage manager: bail out with an error if unsealed cid is undefined"
2020-09-07 20:50:04 +02:00
Raúl Kripalani 453e826a0f rename p2p protocol to /fil/chain/xchg/0.0.1 (backwards-compatible); rename more. 2020-09-07 19:45:34 +01:00
Raúl Kripalani 55b1456d45 blocksync: introduce interfaces; rename to chainexchange. 2020-09-07 19:31:43 +01:00
Łukasz Magiera 47c59afea0 Revert "storage manager: bail out with an error if unsealed cid is undefined" 2020-09-07 20:12:29 +02:00
vyzo 41222792ed add docstring for verifyMsgBeforeAdd 2020-09-07 20:26:51 +03:00
vyzo 5659faf7f0 don't immediately publish messages that cannot be included in the next 20 blocks 2020-09-07 20:20:49 +03:00
vyzo 2e75d9c80a be explicit about republish interval, check against timecache duration 2020-09-07 20:20:49 +03:00
vyzo 0fcf8838cc improve republish logic to only republish messages that can be included in the next 20 blocks 2020-09-07 20:20:49 +03:00
Łukasz Magiera 758aae8556 Merge pull request #3586 from filecoin-project/feat/expected-height-metric
metrics: add expected height metric
2020-09-07 19:09:06 +02:00
Łukasz Magiera ffbbd968c2 Merge pull request #3602 from filecoin-project/feat/delayed-pubsub-join
only subscribe to pubsub topics once we are synced
2020-09-07 19:08:21 +02:00
vyzo 0d0dd250ee use faster decay for bootstrappers 2020-09-07 19:54:38 +03:00
vyzo e3aaedbc33 fix tests 2020-09-07 19:46:58 +03:00
vyzo 81e674ad36 subscribe early in bootstrappers and get rid of ugly test flag 2020-09-07 19:46:35 +03:00
Łukasz Magiera f6f5405a2c Fix lint 2020-09-07 18:21:45 +02:00
Łukasz Magiera 551ff6a6fb Merge pull request #3608 from filecoin-project/fix/second-argument-error-message
fix: second argument error message
2020-09-07 18:06:22 +02:00
Łukasz Magiera d3e5092b43 Merge pull request #3611 from filecoin-project/fix/tscache-nil-best
chain events: if cache best() is nil, return chain head
2020-09-07 18:05:34 +02:00
Łukasz Magiera 3fe8cdece3 Merge pull request #3615 from filecoin-project/fix/stormgr-undef-unsealed
storage manager: bail out with an error if unsealed cid is undefined
2020-09-07 18:02:44 +02:00
Łukasz Magiera 69f203a718 Merge pull request #3606 from filecoin-project/rm-chain-validation
decommission chain-validation.
2020-09-07 18:00:08 +02:00
Dirk McCormick a97f978cad fix: storage manager - dont fail on successful read piece 2020-09-07 16:14:19 +02:00
Dirk McCormick 07a4553e6e fix: storage manager - bail out with an error if unsealed cid is undefined 2020-09-07 16:04:12 +02:00
vyzo e33798ff90 rename variable for better semantics 2020-09-07 15:58:05 +03:00
vyzo d9faff19a5 fix tests 2020-09-07 15:55:53 +03:00
vyzo 4f0ab4f226 remove notifee after subscribing 2020-09-07 15:55:53 +03:00
vyzo 05740e0f64 silence linter for unnecessary conversion 2020-09-07 15:55:53 +03:00
vyzo 666dc65b8e only subscribed to pubsub topics once we are synced 2020-09-07 15:55:53 +03:00
Dirk McCormick 76a1b3286b fix: if cache best is nil, return chain head 2020-09-07 14:43:06 +02:00
Alan Shaw 9d9d2a2a98 fix: second argument error message
Second argument should be a pointer, not runtime.
2020-09-07 12:29:40 +01:00
vyzo 219c8b927d go mod tidy 2020-09-07 13:46:23 +03:00
vyzo c616958557 specify topic delivery weights, with priority for blocks 2020-09-07 13:40:48 +03:00
vyzo 453ab95e54 enable pubsub RED 2020-09-07 13:40:48 +03:00
vyzo 7fdab46729 update go-libp2p-pubsub@master 2020-09-07 13:40:42 +03:00
Raúl Kripalani 798061506e decommission chain validation. 2020-09-07 11:34:36 +01:00
Aayush Rajasekaran 0ad0d4ea11 Merge pull request #3579 from filecoin-project/fix/mpool-basefee-check
add defensive check for minimum GasFeeCap for inclusion within the next 20 blocks
2020-09-07 03:03:35 -04:00
Travis Person f7b52d16f5 metrics: add expected height metric 2020-09-07 02:57:12 +00:00
vyzo e24a29b146 fix tests that touch the mpool; mock block must have a ParentBaseFee 2020-09-06 11:55:43 +03:00
vyzo ffb2640736 use faster lookup for base fee 2020-09-06 11:55:43 +03:00
vyzo f9492691a6 don't check baseFee lower bound for local messages 2020-09-06 11:55:43 +03:00
vyzo 1c0e6d76f0 add defensive check for minimum GasFeeCap for inclusion within the next 20 blocks 2020-09-06 11:55:43 +03:00
Aayush Rajasekaran 88c04ce959 Update docs 2020-09-06 03:51:06 -04:00
Aayush Rajasekaran 5ead23a8d4 Msig: Add CLI commands to propose, approve, or cancel adding signers 2020-09-06 03:46:07 -04:00
Aayush Rajasekaran d0ccb54aba Msig: Add RPC endpoints to propose, approve, or cancel adding signers 2020-09-06 01:52:30 -04:00
Aayush Rajasekaran aaad01105e Msig: Introduce an API & CLI to calculate amount that vests between 2 tipsets 2020-09-05 23:42:31 -04:00
Łukasz Magiera 6bdd433570 Merge pull request #3538 from filecoin-project/steb/safe-exports
Robustify state manager against holes in actor method numbers
2020-09-05 21:58:03 +02:00
Łukasz Magiera c767e5ebed Merge pull request #3547 from filecoin-project/feat/paych-status-addr
paych: get available funds by address or by from/to
2020-09-05 21:55:08 +02:00
Łukasz Magiera 4718efab9b docsgen 2020-09-05 21:51:30 +02:00
Łukasz Magiera 145493388a Merge pull request #3553 from filecoin-project/fix/panic-in-expired-slashed
Fix panic in OnDealExpiredSlashed
2020-09-05 21:49:54 +02:00
Łukasz Magiera 16bd0d134e Merge pull request #3556 from filecoin-project/fix/pubsub-reduce-gossipfactor
adjust gossipsub gossip factor
2020-09-05 21:49:32 +02:00
Łukasz Magiera f58cbc2594 Merge pull request #3557 from filecoin-project/fix/mpool-repub-negative
republish messages even if the chains have negative performance
2020-09-05 21:48:39 +02:00
Łukasz Magiera 1e190e462a Merge pull request #3562 from filecoin-project/fix/mpool-log-spam
reduce mpool add failure log spam
2020-09-05 21:47:29 +02:00
Łukasz Magiera 70da2b7b4d Merge pull request #3568 from filecoin-project/feat/lotus-shed-math
lotus-shed: add math command
2020-09-05 21:47:06 +02:00
Łukasz Magiera 2297c58ab6 Merge pull request #3578 from filecoin-project/misc/debug-info-premium
Add additional info about gas premium
2020-09-05 21:45:57 +02:00
Łukasz Magiera 5e97e29f95 Merge pull request #3580 from filecoin-project/fix/mpool-selection-bug
fix selection bug; priority messages were not included if other chains were negative
2020-09-05 21:44:03 +02:00
vyzo 5037282b98 add test for priority selection with negative chains 2020-09-05 22:15:18 +03:00
vyzo 0b3685e529 fix selection bug; priority messages were not included if other's chains were negative 2020-09-05 21:30:02 +03:00
Jakub Sztandera 2adb80729b Add additional info about gas premium
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-05 15:17:55 +02:00
Łukasz Magiera c074c8d0ca Merge pull request #3570 from filecoin-project/feat/lotus-pcr-current-tipset
lotus-pcr: use current tipset during refund
2020-09-05 05:29:59 +02:00
Łukasz Magiera 2b62573b65 Merge pull request #3571 from shepf/master
Batch replacement,update lotus-storage-miner to lotus-miner.
2020-09-05 05:29:28 +02:00
shepf 16fd12024e Batch replacement,update lotus-storage-miner to lotus-miner. 2020-09-05 10:40:53 +08:00
Travis Person bf3466f3cb lotus-pcr: use current tipset during refund
Using the tipset which is being processed might lead to incorrect gas
estimations or balance checking for the wallet.
2020-09-05 02:38:24 +00:00
Travis Person eebd2efcbf lotus-shed: add math command 2020-09-05 00:50:56 +00:00
Jakub Sztandera c573310c77 Merge pull request #3565 from filecoin-project/feat/lotus-pcr-aggregate-tipsets
lotus-pcr: add tipset aggregation
2020-09-05 00:43:27 +02:00
Travis Person d6691fe9d8 lotus-pcr: add tipset aggregation 2020-09-04 22:28:13 +00:00
vyzo 275f071b12 reduce mpool add failure log spam 2020-09-05 00:28:13 +03:00
Raúl Kripalani 35a8f7ebca Merge branch 'master' into inmem-journal 2020-09-04 21:02:28 +01:00
vyzo ad8d550d73 remove unused ts argument from Trim, replace it with allowNegative specifier 2020-09-04 22:32:30 +03:00
Steven Allen fceeaf42ca Robustify state manager against holes in actor method numbers
Also, don't simply assume that the field order matches the method numbers in
`builtin.Method*` structs.
2020-09-04 12:26:55 -07:00
Steven Allen 30fdff17b5 Skip nil exports
The actors may skip previously used but no longer defined method numbers.
2020-09-04 12:26:55 -07:00
vyzo 6d53862142 republish messages even if the chains have negative performance 2020-09-04 22:16:10 +03:00
vyzo 1c27a0c1cf adjust gossipsub gossip factor 2020-09-04 22:04:48 +03:00
hannahhoward 5ef753bfa8 fix(markets): check for nil tipset
check for nil tipset when check func is called to avoid panic
2020-09-04 10:04:50 -07:00
Łukasz Magiera 52ce80f2b4 Merge pull request #3551 from filecoin-project/fix/paych-cli-tests
paych: fix broken paych tests
2020-09-04 18:32:26 +02:00
Jakub Sztandera d8a790a13c Merge pull request #3552 from filecoin-project/fix/fee-cap-premium
Fix GasPremium capping logic
2020-09-04 18:29:33 +02:00
Jakub Sztandera 20801263ec Fix paych tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-04 18:13:09 +02:00
Jakub Sztandera 4cf52ea025 Add 0.1FIL cap too DefaultMessageSendSpec
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-04 15:52:50 +02:00
Dirk McCormick de132d39ec fix: broken paych tests 2020-09-04 15:48:13 +02:00
Jakub Sztandera 114c0ea85c Fix GasPremium capping logic
Cap it just to FeeCap, there is no reason to cap it proportionally

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-04 15:42:12 +02:00
Dirk McCormick 51ef39592f feat: paych - get available funds by address or by from/to 2020-09-04 13:44:09 +02:00
Łukasz Magiera eb3ca82fa0 net cli: Support miner addresses in net connect 2020-09-04 13:37:42 +02:00
Raúl Kripalani 0a4c473a7c fix dangling import. 2020-09-04 12:14:27 +01:00
Raúl Kripalani 1ec534d607 Merge branch 'master' into inmem-journal 2020-09-04 10:55:40 +01:00
Raúl Kripalani 905168e72e fix lint errors. 2020-09-04 10:54:56 +01:00
Łukasz Magiera a081dc7674 Merge pull request #3520 from filecoin-project/feat/paych-cli-add-funds
paych: rename CLI command from "paych get" to "paych add-funds"
2020-09-04 04:21:54 +02:00
Łukasz Magiera 924fd82d7f Merge pull request #3523 from filecoin-project/feat/paych-cli-status
paych: Create `lotus paych status` command
2020-09-04 04:20:45 +02:00
Łukasz Magiera 2177fd59ef Merge pull request #3521 from filecoin-project/conformance/tipset-actor-address
conformance: various changes
2020-09-04 04:18:41 +02:00
Łukasz Magiera d81feb05d1 Merge pull request #3527 from filecoin-project/feat/watch-option-miner-storage-deals-list
Add watch option to storage-deals list
2020-09-04 04:13:01 +02:00
Łukasz Magiera 0a620514b7 Merge pull request #3526 from filecoin-project/fix/chainwatch/no-panic-during-processing
Stop SyncIncomingBlocks from leaking into chainwatch processing; No panics during processing
2020-09-04 03:55:59 +02:00
Łukasz Magiera e52232d85f Merge pull request #3535 from filecoin-project/steb/robust-method-lookup
[cli/state] Robust actor lookup
2020-09-04 03:52:43 +02:00
Łukasz Magiera 4cdd81ec86 Merge pull request #3534 from filecoin-project/feat/netpeers-agent-version
Add agent flag to net peers
2020-09-04 02:50:04 +02:00
Steven Allen 6e711ed739 [cli/state] Robust actor name lookup 2020-09-03 17:22:18 -07:00
Steven Allen 8778787091 [cli/state] Robust actor lookup
This probably isn't critical, but I noticed it, so I fixed it.
2020-09-03 17:19:05 -07:00
Łukasz Magiera ce8bcf7932 Add agent flag to net peers 2020-09-04 02:00:53 +02:00
Mike Greenberg abaef98fd8 fix(chainwatch): Stop SyncIncomingBlocks from leaking into processing
The SQL query was anchoring data from the `blocks` table, which includes
all blocks seen from SyncIncomingBlocks which isn't always available in
the chainstate via the API. In order to prevent these blocks from
leaking into normal processing (which errors anyway), the join was
changed to allow `blocks_synced` to anchor the set as we originally
intended.
2020-09-03 19:15:25 -04:00
Mike Greenberg ddc5e57d4d fix(chainwatch): Error instead of panic during processing 2020-09-03 19:15:19 -04:00
Raúl Kripalani d46f684bb8 fix test following merge. 2020-09-04 00:05:44 +01:00
Raúl Kripalani c723554d2e upgrade test-vectors deps. 2020-09-03 23:44:21 +01:00
Whyrusleeping 021f4a881c Merge pull request #3448 from filecoin-project/feat/paych-get-avail-funds
paych: Add PaychAvailableFunds API method
2020-09-03 15:26:25 -07:00
Alan Shaw ada5e6ae68 refactor: remove puppet actor from conformance tests
The puppet actor has been subsumed into the chaos actor and test-vector tests no longer use it.
2020-09-03 23:19:53 +01:00
Raúl Kripalani 8e7a8d8c97 conformance: tipset-class driver: allow actor msgs, dummy-sign secp msgs. 2020-09-03 22:54:19 +01:00
Łukasz Magiera 9151f8b492 Merge pull request #3533 from filecoin-project/feat/fast-export
Make chain export ~1000x times faster
2020-09-03 22:47:20 +02:00
Łukasz Magiera 86cb865fdd Make chain export ~1000x times faster 2020-09-03 21:56:35 +02:00
Aayush Rajasekaran 38cb2601d7 Merge pull request #3531 from filecoin-project/asr/changelog
Lotus version 0.5.10
2020-09-03 15:03:00 -04:00
Aayush Rajasekaran 94173c273a Lotus version 0.9.10 2020-09-03 14:57:58 -04:00
Łukasz Magiera 01449e486c Merge pull request #3528 from filecoin-project/fix/sele-gas-reward
Fix calculation of GasReward in messagepool
2020-09-03 20:41:28 +02:00
Jakub Sztandera 8111b227c4 Appease the linter
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-03 20:19:01 +02:00
Jakub Sztandera 8bb471bccd Add getGasPerf test
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-03 20:19:01 +02:00
Jakub Sztandera 5074b526d0 Fix calculation of GasReward in messagepool
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-03 19:36:03 +02:00
Ingar Shu 1608cd2d53 Add watch option to "lotus-miner storage-deals list" 2020-09-03 10:14:30 -07:00
Łukasz Magiera a123ef6fce Merge pull request #3525 from filecoin-project/asr/changelog
Lotus version v0.5.9
2020-09-03 19:11:43 +02:00
Aayush Rajasekaran 23ec780a13 Lotus version v0.5.9 2020-09-03 12:48:20 -04:00
Aayush Rajasekaran 5569f96885 Merge pull request #3450 from filecoin-project/feat/mpool-nonce-gaps
track expected nonce in mpool, ignore messages with large nonce gaps
2020-09-03 12:27:32 -04:00
Dirk McCormick 930be3d0e5 feat: paych CLI - lotus paych status <from> <to> 2020-09-03 18:11:11 +02:00
Raúl Kripalani 97ff90f8fa fix imports. 2020-09-03 15:51:26 +01:00
Dirk McCormick f84b1d0de9 feat: paych - rename CLI command from "paych get" to "paych add-funds" 2020-09-03 15:45:53 +02:00
Dirk McCormick 8423325a6e refactor: paych - use channel accessor from/to instead of passing them around as params 2020-09-03 15:31:49 +02:00
Łukasz Magiera 97273655dc Merge pull request #3502 from filecoin-project/area/ux-3388-sync-wait-target-height
Added target height to sync wait
2020-09-03 14:49:30 +02:00
Łukasz Magiera 10acc04ba5 Merge pull request #3497 from filecoin-project/feat/bandwidth-tracking
add apis and command to inspect bandwidth usage
2020-09-03 14:37:54 +02:00
vyzo d20b6adfd2 refuse to add duplicates in the mpool 2020-09-03 15:28:44 +03:00
vyzo a4c650316a fix test 2020-09-03 15:28:44 +03:00
vyzo 28f57667f0 cap MaxNonceGap to 4, add delay between batch messages during republish 2020-09-03 15:28:44 +03:00
vyzo f53d2e3a46 cap MaxNonceGap to 16 2020-09-03 15:28:44 +03:00
vyzo 7b76aa2078 warn when adding a nonce-gapped message to the mpool 2020-09-03 15:28:44 +03:00
vyzo d76a3b87c5 ignore messages with large nonce gaps 2020-09-03 15:28:44 +03:00
vyzo da6d384300 fix tests 2020-09-03 15:28:44 +03:00
vyzo 4c489d18a2 track expected nonce in mpool, refuse messages with large gaps 2020-09-03 15:28:44 +03:00
Łukasz Magiera 9785f14df8 Merge pull request #3516 from filecoin-project/feat/cap-fee
Cap fees to reasonable level by default
2020-09-03 14:10:58 +02:00
Jakub Sztandera d35b273dbf Cap fees to reasonable level by default
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-03 13:49:50 +02:00
Jakub Sztandera 13c828f112 Merge pull request #3514 from filecoin-project/ci/disable-codecov-annotations
Disable codecov annotations
2020-09-03 13:47:33 +02:00
Łukasz Magiera ea6ee8e899 Disable codecov annotations 2020-09-03 13:39:16 +02:00
Dirk McCormick 1d3a21f6c8 docs: paych - correct comments on store fields 2020-09-03 08:22:40 +02:00
Dirk McCormick 3daa0b5e63 fix: paych - clarify behaviour of current available funds for non-existent channel 2020-09-03 08:20:08 +02:00
Aayush Rajasekaran 5426ef0b46 Merge pull request #3501 from filecoin-project/asr/changelog
Lotus version 0.5.8
2020-09-02 20:41:22 -04:00
jennijuju 860a6a231d 3388: Added target height to sync wait 2020-09-02 19:48:24 -04:00
whyrusleeping da7fc8dbb3 further appeasement 2020-09-02 16:42:55 -07:00
Aayush Rajasekaran f03f4775fc Lotus version 0.5.8 2020-09-02 19:42:19 -04:00
whyrusleeping 0e39d62c9d Appease the CI overlords 2020-09-02 16:31:41 -07:00
whyrusleeping d196e4a8df docs, mod tidy 2020-09-02 15:45:57 -07:00
whyrusleeping a59dadccc9 add apis and command to inspect bandwidth usage 2020-09-02 15:25:53 -07:00
Łukasz Magiera 05db79ee35 Merge pull request #3496 from filecoin-project/feat/update-markets-0.5.9
Upgrade markets to v0.5.9
2020-09-02 23:47:18 +02:00
Łukasz Magiera d552803f56 Merge pull request #3494 from filecoin-project/feat/faster-blocksync-serving
load fewer messages from disk when serving blocksync requests
2020-09-02 22:43:12 +02:00
hannahhoward d2a10413a1 feat(markets): upgrade to v0.5.9 2020-09-02 13:19:39 -07:00
Lucas MolasandŁukasz Magiera ca8f5861fe Update chain/blocksync/server.go
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-09-02 17:07:39 -03:00
Łukasz Magiera 7536744dcf Merge pull request #3495 from filecoin-project/revert-3464-feat/blst-adx
Revert "adx blst"
2020-09-02 21:16:05 +02:00
Łukasz Magiera 8ba0385b3a Revert "adx blst" 2020-09-02 21:05:38 +02:00
Raúl Kripalani 4554c4bda9 fix lotus-bench stale import. 2020-09-02 19:54:13 +01:00
Raúl Kripalani 3206f92063 Merge branch 'master' into inmem-journal 2020-09-02 19:50:52 +01:00
Raúl Kripalani fd04a19544 go mod tidy. 2020-09-02 19:46:57 +01:00
Raúl Kripalani f046af337a split wdpost event into finer-grained ones. 2020-09-02 19:45:25 +01:00
whyrusleeping 9a5542100a load fewer messages from disk when serving blocksync requests 2020-09-02 11:43:05 -07:00
Raúl Kripalani ac152abc75 shuffle code to journal wdpost events. 2020-09-02 19:15:25 +01:00
Raúl Kripalani 0b6a182a44 move InitJournalKey to the top; add godcs on invoke order. 2020-09-02 19:15:07 +01:00
Łukasz Magiera b774563ec3 Merge pull request #3492 from filecoin-project/fix/readpiece-panic
ffiwrapper: Fix ReadPiece panic
2020-09-02 18:59:22 +02:00
Łukasz Magiera ca7aa69597 ffiwrapper: More correct error check on openPartialFile 2020-09-02 18:45:07 +02:00
Łukasz Magiera 5aeabe39b5 Merge pull request #3456 from filecoin-project/misc/account-for-premium
Account for GasPremium in GasEstimateFeeCap
2020-09-02 18:20:32 +02:00
Łukasz Magiera 5f79ff340d Merge pull request #3489 from filecoin-project/fix/sched-deadlocks
sealing sched: Fix deadlock between worker.wndLk / workersLk
2020-09-02 18:03:18 +02:00
Łukasz Magiera 5a2b439773 sched: Fix tests 2020-09-02 17:37:19 +02:00
Łukasz Magiera cfbbcd420f Merge pull request #3463 from filecoin-project/feat/chain-state-export
allow exporting a number of recent chain state trees
2020-09-02 17:21:14 +02:00
Jakub Sztandera 59f765f7be Rename to import-snapshot, require more than finality for state export
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-02 17:15:36 +02:00
Łukasz Magiera 528e39fcb3 docsgen, fix snapshot flag name 2020-09-02 17:15:10 +02:00
whyrusleeping 2b16e69e90 allow snapshot importing 2020-09-02 17:15:10 +02:00
whyrusleeping 09ebd1a557 allow exporting a number of recent chain state trees 2020-09-02 17:15:10 +02:00
Łukasz Magiera edc2a28f1d Merge pull request #3485 from filecoin-project/tipset-vector
tipset-class test vector driver (take 2)
2020-09-02 17:08:26 +02:00
Łukasz Magiera 7fe8580da5 sealing sched: Fix deadlock between worker.wndLk / workersLk 2020-09-02 17:06:48 +02:00
Raúl Kripalani 7cc9c83ab8 upgrade test-vectors. 2020-09-02 14:12:27 +01:00
Raúl Kripalani 0962292f92 conformance: add driver for tipset-class vectors. 2020-09-02 14:09:12 +01:00
Łukasz Magiera b7f2487c4f Merge pull request #3457 from filecoin-project/fix/disable-badger-gc
Disable GC on chain badger datastore
2020-09-02 15:02:52 +02:00
Łukasz Magiera db86647e3a Merge pull request #3458 from austinabell/rand/rmheight
Remove height from chain rand
2020-09-02 14:59:29 +02:00
Łukasz Magiera 7415627d95 Merge pull request #3483 from filecoin-project/revert-3449-tipset-vector
Revert "conformance: add driver for tipset-class vectors."
2020-09-02 14:51:11 +02:00
Łukasz Magiera fa6bae988e Revert "conformance: add driver for tipset-class vectors." 2020-09-02 14:49:55 +02:00
Dirk McCormick 2c98bf0cc7 feat: PaychAvailableFunds API method 2020-09-02 14:31:32 +02:00
Łukasz Magiera 351313523c Merge pull request #3470 from filecoin-project/feat/toggle-message-processing
lotus-pcr: add toggle for message processing
2020-09-02 14:26:40 +02:00
Łukasz Magiera 80ecbeddbb Merge pull request #3464 from filecoin-project/feat/blst-adx
adx blst
2020-09-02 14:25:00 +02:00
Łukasz Magiera 8222f803d5 Merge pull request #3476 from filecoin-project/asr/advance-block
Check error in advance-block
2020-09-02 13:46:34 +02:00
Łukasz Magiera d5b33671c2 Merge pull request #3481 from filecoin-project/misc/consensus-label
Add Impact Consensus label
2020-09-02 13:43:23 +02:00
Łukasz Magiera e86749dfe2 Merge pull request #3449 from filecoin-project/tipset-vector
conformance: add driver for tipset-class vectors.
2020-09-02 13:42:42 +02:00
Raúl Kripalani ec5903ca19 fix lint error. 2020-09-02 12:28:55 +01:00
Jakub Sztandera b5dcb5964a Add Impact Consensus label 2020-09-02 13:07:56 +02:00
Aayush Rajasekaran 8417f516e5 Check error in advance-block 2020-09-02 02:41:12 -04:00
Travis Person 9532441ed4 lotus-pcr: add toggle for message processing 2020-09-02 03:50:16 +00:00
Travis Person 630dfb9b55 adx blst 2020-09-02 01:04:56 +00:00
Łukasz Magiera f31dc791e4 Merge pull request #3455 from filecoin-project/deps/update-pubsub
update go-libp2p-pubsub@master
2020-09-01 22:13:25 +02:00
austinabell ba881eb4cf Remove height from chain rand 2020-09-01 15:48:16 -04:00
Raúl Kripalani ad5793e446 update test-vectors commit. 2020-09-01 20:01:41 +01:00
Jakub Sztandera 997d49b63f Disable GC on chain badger datastore
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-01 20:39:58 +02:00
Jakub Sztandera 72fb6afae2 Account for GasPremium in GasEstimateFeeCap
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-09-01 20:35:29 +02:00
vyzo f9df806f15 update go-libp2p-pubsub@master 2020-09-01 20:46:12 +03:00
Raúl Kripalani 01737ef1cc upgrade test-vectors deps. 2020-09-01 17:00:18 +01:00
Raúl Kripalani 3321f36b51 update test-vectors commit. 2020-09-01 16:35:26 +01:00
Raúl Kripalani 64bdd620ac conformance: add driver for tipset-class vectors. 2020-09-01 15:35:19 +01:00
Star.LI 82f5984de1 fix crash - segment fault when partialFile.Allocated() is invoked.
When openPartialFile is invoked, more errors than "existed error" are
returned. If only existing error is checked, the allocated field of
partialFile may be nil.

Signed-off-by: Star.LI <star@trapdoortech.com>
2020-09-01 11:41:26 +02:00
Łukasz Magiera b8bbbf3ea3 Merge pull request #3436 from mitchwagner/patch-2
fix: referenced filename
2020-09-01 11:09:26 +02:00
Łukasz Magiera 247b5205fb Merge pull request #3442 from filecoin-project/fix/chainwatch/logging-sync-blocks
Some more Chainwatch improvements
2020-09-01 10:57:55 +02:00
Mike Greenberg 2b83089da8 fix(chainwatch): Add important documentation 2020-08-31 22:55:11 -04:00
Mike Greenberg 7290431cb0 fix(chainwatch): Restore IncomingBlockSync listening 2020-08-31 22:46:28 -04:00
Mike Greenberg 95a75daf9f fix(chainwatch): Remove useless logging 2020-08-31 22:32:34 -04:00
Mike Greenberg 80ed6b8c25 fix(chainwatch): Process chain waitout waiting for update via ChainNotify 2020-08-31 22:31:25 -04:00
Aayush Rajasekaran 49d64f7f7e Merge pull request #3438 from filecoin-project/asr/changelog
Lotus version 0.5.7
2020-08-31 20:04:19 -04:00
Aayush Rajasekaran f09f38085e Lotus version 0.5.7 2020-08-31 20:03:38 -04:00
Aayush Rajasekaran 04a9822573 Merge pull request #3428 from filecoin-project/fix/estim-gas-price-one-msg
Fix GasEstimateGasPremium when there is only one message on chain
2020-08-31 20:01:02 -04:00
Mitch Wagner 5848877734 fix: referenced filename 2020-08-31 19:29:43 -04:00
Aayush Rajasekaran 93814cc85a Merge pull request #3392 from filecoin-project/fix/mpool-priority-selection
Tweak priority selection to not select negative perfoming chains
2020-08-31 19:22:12 -04:00
Aayush Rajasekaran 4f30311971 Merge pull request #3430 from filecoin-project/misc/bitswap-close-ctx
Don't use context to close bitswap
2020-08-31 19:21:06 -04:00
Aayush Rajasekaran cfe5134375 Use Sign() to check zero-equality 2020-08-31 18:53:14 -04:00
Łukasz Magiera 219d3c9f18 Merge pull request #3425 from filecoin-project/feat/better-worker-selection
Improve worker selection a bit
2020-08-31 23:11:25 +02:00
Łukasz Magiera 9110776a01 Merge pull request #3424 from filecoin-project/fix/move-unsealed
storage: Correcty move unsealed sectors in FinalizeSector
2020-08-31 23:09:36 +02:00
Jakub Sztandera 625c6951bb Don't use context to close bitswap
Use just the Close

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-31 19:24:04 +02:00
Jakub Sztandera 56235aee90 Fix GasEstimateGasPremium when there is only one message on chain
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-31 18:12:06 +02:00
Łukasz Magiera e14c80360d sealing sched: Factor worker queues into utilization calc 2020-08-31 13:41:34 +02:00
Łukasz Magiera 98d51d3d80 storage: Correcty move unsealed sectors in FinalizeSector 2020-08-31 12:45:57 +02:00
Łukasz Magiera 4f45c623a5 Merge pull request #3401 from filecoin-project/asr/unsealed-infos
Rebuild unsealed infos on miner restart
2020-08-31 10:35:33 +02:00
Łukasz Magiera c96613a499 Merge pull request #3405 from filecoin-project/feat/worker-storage-cli
worker: Cli to attach storage paths
2020-08-31 10:09:20 +02:00
Łukasz Magiera e1e01524e7 Merge pull request #3421 from IPFSMain-Official/master
remove the unnecessary err check
2020-08-31 10:08:36 +02:00
刘林欣 0926f95979 remove the unnecessary err check 2020-08-31 15:11:45 +08:00
David Dias a4decaa188 docs: add label for markets 2020-08-31 08:04:37 +01:00
Aayush Rajasekaran 27f7d3a658 Rebuild unsealed infos on miner restart 2020-08-30 18:01:07 -04:00
Łukasz Magiera 0e6ff668eb worker: Cli to attach storage paths 2020-08-30 20:33:02 +02:00
vyzo fba3ed7b4d update documentation about priority addresses 2020-08-29 15:56:31 +03:00
vyzo 648130eec5 don't include negative performing chains in priority message selection 2020-08-29 15:55:19 +03:00
Aayush Rajasekaran 606a58bc6b Lotus version 0.5.6 2020-08-29 00:56:24 -04:00
Aayush Rajasekaran 09a645e455 Merge pull request #3387 from filecoin-project/asr/import-fix
Fix chain import
2020-08-29 00:55:54 -04:00
Łukasz Magiera d972a47c84 Bump version to 0.5.6 2020-08-29 06:48:28 +02:00
Łukasz Magiera 494c774303 Merge pull request #3389 from filecoin-project/fix/sched-compact-panic
sched: Fix panic in workerCompactWindows
2020-08-29 06:47:12 +02:00
Łukasz Magiera 28ac2fce61 sched: Fix panic in workerCompactWindows 2020-08-29 06:41:19 +02:00
Aayush Rajasekaran 5095e6f07b Fix chain import 2020-08-28 22:15:43 -04:00
Łukasz Magiera 9a3b2abbab Merge pull request #3383 from filecoin-project/asr/changelog
Lotus version 0.5.5
2020-08-29 03:52:00 +02:00
Aayush Rajasekaran 4e5b11b1d5 Lotus version 0.5.5 2020-08-28 21:49:56 -04:00
Łukasz Magiera 7eb2710e67 Merge pull request #3384 from filecoin-project/feat/markets-update-0.5.8
Update to markets v0.5.8
2020-08-29 03:46:38 +02:00
hannahhoward 0a36db06ed feat(markets): update to markets v0.5.8 2020-08-28 18:03:27 -07:00
Łukasz Magiera e86f90fe8d Merge pull request #3380 from filecoin-project/fix/chainwatch/perf
perf(chainwatch): parallelize miner processing
2020-08-29 02:51:46 +02:00
Łukasz Magiera 953effcc43 Merge pull request #3350 from filecoin-project/fix/some-fsm-issues
Fix some fsm issues
2020-08-29 02:16:59 +02:00
Łukasz Magiera a62e44c4e5 Fix lint 2020-08-29 02:13:38 +02:00
Łukasz Magiera 84a632787c Merge pull request #3313 from filecoin-project/feat/mpool-balance-tracking
Message Pool Rudimentary Spam Protection Measures
2020-08-28 22:35:30 +02:00
Łukasz Magiera 16f0daab90 Merge pull request #3379 from filecoin-project/feat/add-list-deals-watch-option
Add watch option to list-deals
2020-08-28 22:33:48 +02:00
Łukasz Magiera 3149390b3b Merge pull request #3381 from filecoin-project/fix/dynamic-chain-sync-window
dynamic chain sync window
2020-08-28 22:31:21 +02:00
frrist 0185090cbb perf(chainwatch): parallelize miner processing 2020-08-28 13:26:11 -07:00
vyzo 806f7dd15f windowSize should not exceed blocksync.MaxRequestLength 2020-08-28 23:18:06 +03:00
Łukasz Magiera 013ebc617e docsgen 2020-08-28 22:17:35 +02:00
vyzo 63a60cdd75 be more conservative in increasing the window size, check that we actually had more messages 2020-08-28 23:09:48 +03:00
Łukasz Magiera 4bcc71c68f Merge pull request #3197 from filecoin-project/fix/paych-spendable-submit-voucher
paych: fix issue where `voucher spendable` fails for submitted vouchers
2020-08-28 22:05:04 +02:00
Łukasz Magiera 7f1374e058 docsgen 2020-08-28 22:03:09 +02:00
vyzo 3935fd77ac remember syncer windowSize 2020-08-28 22:52:40 +03:00
Łukasz Magiera 9d0c8ae3dd sectorstorage: update sched tests for new logic 2020-08-28 21:38:21 +02:00
vyzo 4e7fd5b6d7 sync: increase window size when successful fetching messages 2020-08-28 22:03:06 +03:00
Ingar Shu a4ded8c2b9 Add watch option to list-deals 2020-08-28 10:40:27 -07:00
Łukasz Magiera 4a75e1e4b4 sectorstorage: Don't require tasks within a window to run in order 2020-08-28 19:38:55 +02:00
Łukasz Magiera 11b11e416b sectorstorage: Compact assigned windows 2020-08-28 18:26:38 +02:00
vyzo 1f660c9e04 sync: half window size and retry when fetching messages fails 2020-08-28 18:45:20 +03:00
Łukasz Magiera 20ffce5c0d Merge remote-tracking branch 'origin/master' into fix/some-fsm-issues 2020-08-28 16:47:25 +02:00
Łukasz Magiera a7ef61279c Merge pull request #3374 from IPFSMain-Official/fix-packing-sector
ignore resend SectorStartPacking event. and fix StartPacking's unsealedInfoMap lock
2020-08-28 16:37:16 +02:00
Łukasz Magiera 5ee85dc263 sectorstorage: Fix tests 2020-08-28 16:33:41 +02:00
刘林欣 93dc33687a ignore resend SectorStartPacking event, and unsealedInfoMap lock 2020-08-28 19:04:23 +08:00
Łukasz Magiera 932ab61c2d Merge pull request #3275 from filecoin-project/fix/chainwatch/sync
fix(chainwatch): use height to determine unsynced blocks and fix deadlock in sector deal table
2020-08-28 12:16:00 +02:00
Łukasz Magiera 1d9b1f4aab Merge pull request #3311 from filecoin-project/daviddias-patch-1
docs: removed non used packages from the list
2020-08-28 12:08:20 +02:00
Łukasz Magiera 7aed16ce4c Merge pull request #3372 from filecoin-project/fix/distinguish-local-msg-errors
distinguish local message validation failures from remote
2020-08-28 12:07:52 +02:00
Łukasz Magiera 9f4506bda5 metrics: gofmt 2020-08-28 11:51:51 +02:00
Łukasz Magiera fa6f9f4ae0 Merge pull request #3367 from filecoin-project/feat/chainwatch/add-power-reward-metrics
feat(chainwatch): Add more complete power and reward metrics
2020-08-28 11:49:22 +02:00
Łukasz Magiera 78ff5e270c Merge pull request #3369 from filecoin-project/asr/advance-block
Use beacon entries in advance-block
2020-08-28 11:46:34 +02:00
Łukasz Magiera 6d1682a27e storagefsm: wire up RecoverDealIDs fully 2020-08-28 11:44:15 +02:00
lanzafame 64768f093d rename local recordFailure func 2020-08-28 17:15:11 +10:00
lanzafame a24db6c584 refactor block validate recordFailure func 2020-08-28 17:11:59 +10:00
lanzafame 050a0ec5e4 further reduce code duplication 2020-08-28 17:01:45 +10:00
lanzafame 0254e4b365 reduce code duplication 2020-08-28 16:53:59 +10:00
lanzafame 3ebe4ebb3d Add views for pubsub metrics 2020-08-28 16:25:50 +10:00
lanzafame 094baf8aa9 distinguish local message validation failures from remote 2020-08-28 16:11:24 +10:00
Mike Greenberg ff5ac51c54 fix(chainwatch): Upsert on chain_economics
This table may get multiple updates depending on how many blocks get
added into a tipset. Each new block affects the tipset state, but the
parent state root will remain the same. This allows the very latest
value to be applied.
2020-08-27 23:21:20 -04:00
Mike Greenberg 9e130af9e7 feat(chainwatch): Add more complete power and reward metrics 2020-08-27 23:00:12 -04:00
Aayush Rajasekaran bed7158212 Use beacon entries in advance-block 2020-08-27 21:38:51 -04:00
Łukasz Magiera 398cbd7f2c deps: Update markets 2020-08-28 01:09:45 +02:00
Łukasz Magiera 5aa90b0478 Merge pull request #3337 from filecoin-project/feat/chainwatch/lotus-tokens
polish(chainwatch): accept lotus api and token
2020-08-28 00:27:27 +02:00
Łukasz Magiera 86c936759b Merge pull request #3357 from filecoin-project/fix/block-validator-power
ignore, don't reject block if we can't determine power
2020-08-28 00:24:53 +02:00
Łukasz Magiera 22bdc43023 Merge pull request #3359 from austinabell/runner/returnval
Add in return value check in test-vector runner
2020-08-28 00:19:32 +02:00
Łukasz Magiera ec2bc0baf6 Merge pull request #3363 from filecoin-project/fix/pubsub-params-tweaking
tweak some pubsub parameters
2020-08-28 00:18:26 +02:00
Łukasz Magiera 5b860261a0 Merge pull request #3366 from austinabell/vm/rmusm
Remove unsigned message pointer from Runtime
2020-08-28 00:14:26 +02:00
Łukasz Magiera 010e32d778 Merge pull request #3360 from filecoin-project/fix/dont-fail-drand-dns
Don't fail if could not resolve drand dnsaddr
2020-08-28 00:13:07 +02:00
Łukasz Magiera 1097d29213 sealing sched: Call trySched less when there are many tasks 2020-08-28 00:03:42 +02:00
Łukasz Magiera a6492b1ed6 storagefsm: Auto-retry failed remove 2020-08-27 23:59:01 +02:00
Łukasz Magiera 59d2034cbb sealing sched: Wait a bit for tasks to come in on restart 2020-08-27 23:58:37 +02:00
austinabell 39ef3a701b Remove unsigned message pointer from Runtime 2020-08-27 17:34:45 -04:00
Łukasz Magiera 7fdffc0340 sealing sched: Give more priority to tasks (re)moving data 2020-08-27 23:29:39 +02:00
Łukasz Magiera f2bd680cc5 gofmt 2020-08-27 23:14:46 +02:00
Łukasz Magiera 59f554b658 sealing sched: Show waiting tasks assigned to workers in sealing jobs cli 2020-08-27 23:14:33 +02:00
frrist 0ad38fe38f lint 2020-08-27 14:09:03 -07:00
frrist 5c4db23da4 polish(chainwatch): accept lotus api and token 2020-08-27 14:05:39 -07:00
vyzo 708a8b6543 flag to allow add to skip limit check
essential for correctness in the revert case
2020-08-28 00:04:21 +03:00
Łukasz Magiera d8e58e67c6 storagefsm: Treat PackingFailed sectors as expired 2020-08-27 22:41:35 +02:00
Łukasz Magiera 6c7874c883 Merge remote-tracking branch 'origin/master' into fix/some-fsm-issues 2020-08-27 21:37:08 +02:00
Łukasz Magiera 15204a9b90 storagefsm: fix tests 2020-08-27 21:34:45 +02:00
Łukasz Magiera 489d5239a5 storagefsm: Attempt to auto-recover from reorged DealIDs 2020-08-27 21:11:11 +02:00
frrist f934ebd429 fix(chainwatch): sync based on height 2020-08-27 11:47:53 -07:00
frrist fccdd70524 polish(chainwatch): relax scheduler refresh 2020-08-27 11:47:53 -07:00
frrist 5e40dda3bc fix(chainwatch): fix deadlock in sector deals 2020-08-27 11:47:53 -07:00
frrist fb8340acb2 polish(chainwatch): clean up logging 2020-08-27 11:47:53 -07:00
vyzo 20fbd66c90 tweak some pubsub parameters
- increase Bootstapp prune backoff to 5min from the default 1min
- reduce opportunistic graft threshold to 3.5 to account for low peer scores
2020-08-27 21:12:38 +03:00
Jakub Sztandera b27ee8241a Add TODO note
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-27 19:05:37 +02:00
Łukasz Magiera 7806a9885a storagefsm: Record publish deals message CID 2020-08-27 17:50:50 +02:00
Jakub Sztandera 6e4889d340 Don't fail if could not resolved drand dnsaddr
Resolves https://github.com/filecoin-project/lotus/issues/3335

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-27 17:50:16 +02:00
austinabell 679a8e0c24 Add in return value check in test-vector runner 2020-08-27 11:42:01 -04:00
vyzo 6c3d8ec1de ignore, don't reject block if we can't determine power 2020-08-27 16:53:53 +03:00
Łukasz Magiera 29078aaae9 storagefsm: Retry sending messages on out-of-gas errors 2020-08-27 14:02:00 +02:00
Łukasz Magiera 8a45148070 docsgen 2020-08-27 13:53:04 +02:00
Łukasz Magiera df635579c4 storagefsm: Handle sectors with expired deals better 2020-08-27 13:51:38 +02:00
Łukasz Magiera 788c7dbf48 storagefsm: Separate satte for submitting commit message 2020-08-27 12:57:28 +02:00
Łukasz Magiera 99ecef89b8 gofmt 2020-08-27 12:41:24 +02:00
Łukasz Magiera 51ca460f18 miner: Fix sorting of some sector states in miner-info 2020-08-27 12:41:12 +02:00
Łukasz Magiera e236173417 miner: Print (pre)commit message cids in sector status 2020-08-27 12:40:19 +02:00
Łukasz Magiera 15191ff80f storagefsm: Allow removing sectors in all states 2020-08-27 12:39:20 +02:00
Łukasz Magiera efd2129187 Merge pull request #3330 from filecoin-project/feat/slightly-better-log-info
print block 'age' when validating blocks during sync
2020-08-27 11:13:49 +02:00
Łukasz Magiera 73da4b9eed Merge pull request #3336 from filecoin-project/feat/even-less-flaky-tests
Wait until blocks show up full nodes 'head' before claiming block has been mined
2020-08-27 11:07:14 +02:00
whyrusleeping 36ff37ba47 Wait until blocks show up full nodes 'head' before claiming block has been mined 2020-08-26 17:51:16 -07:00
whyrusleeping a33784c434 print block 'age' when validating blocks during sync 2020-08-26 14:48:53 -07:00
Whyrusleeping deb013cecb Merge pull request #3081 from filecoin-project/conformance-tests
driver, runner and CI for interoperable test-vector based testing.
2020-08-26 14:06:39 -07:00
Whyrusleeping cb411637cc Merge pull request #3328 from filecoin-project/fix/log-level-miner
use node type agnostic api getter in log commands
2020-08-26 14:02:29 -07:00
Will be89466367 add back junit report in conformance ci (#3327) 2020-08-26 21:55:06 +01:00
whyrusleeping 111c7cf688 use node type agnostic api getter in log commands 2020-08-26 13:51:32 -07:00
Raúl Kripalani 75e0387be2 fix ffiwrapper import. 2020-08-26 21:49:55 +01:00
Łukasz Magiera c4e32fac1f Merge pull request #3324 from filecoin-project/fix/retrieval-closing-panic
Resolve retrieval close event panic
2020-08-26 22:15:21 +02:00
vyzo 038e83b647 log error if we trip over too many pending messages for actor 2020-08-26 22:55:39 +03:00
vyzo 82ef0529d8 named error for too many pending messages 2020-08-26 22:48:03 +03:00
vyzo 6abfbbddd5 fix tests 2020-08-26 22:44:47 +03:00
vyzo ad889a7240 rate limit messages per actor by enforcing maximum pending message limit 2020-08-26 22:40:10 +03:00
Łukasz Magiera e22ae9f826 Merge pull request #3323 from filecoin-project/steb/fix-post
Fix PoSt with bad sectors
2020-08-26 21:22:21 +02:00
vyzo d3e95d6b77 cast min base fee to uint64 2020-08-26 21:37:32 +03:00
vyzo 8db262c941 check gas fee cap for minimum value 2020-08-26 21:23:28 +03:00
vyzo 793eda986b comment out Value inclusion for required funds tracking
we are not sure whether we want it yet.
2020-08-26 21:10:46 +03:00
hannahhoward 1cd49cec39 fix(client): insure cancelled context avoids lock 2020-08-26 10:59:07 -07:00
hannahhoward 10c1399474 fix(retrieval): resolve retrieval close event panic
Refactor ClientRetrieve command to remove the possibility of a send on close channel race condition
2020-08-26 10:48:23 -07:00
Raúl Kripalani 4709e231b8 drop aurora as dep; upgrade test-vectors. 2020-08-26 18:35:41 +01:00
Steven Allen f8a14184c7 Fix lint issue 2020-08-26 10:05:03 -07:00
Steven Allen 0155a31d1f Fix PoSt with bad sectors
"skipped" sectors must be replaced with a substitute "good" sector, or the
entire partition must be skipped. They should not just be omitted.

This patch also fixes the test to verify the _entire_ proof instead of just
verifying that the proof includes the correct sectors.
2020-08-26 09:56:51 -07:00
vyzo 8848c549a0 move msg serialization outside of lock, consistently use curTs 2020-08-26 19:42:56 +03:00
vyzo 4919a005d3 always verify message min gas 2020-08-26 19:37:27 +03:00
Raúl Kripalani dabe14889d actually apply all messages. 2020-08-26 16:48:47 +01:00
Raúl Kripalani cb8e105a94 reduce diff noise. 2020-08-26 16:44:06 +01:00
Raúl Kripalani efdfd3ee3e Merge branch 'master' into inmem-journal 2020-08-26 16:38:23 +01:00
Raúl Kripalani 4e1ef09751 make journal a global var. 2020-08-26 16:09:37 +01:00
Alan Shaw 6d1e711b2a feat: bleeding edge conformance (#3317) 2020-08-26 16:03:44 +01:00
Raúl Kripalani e19087722f Merge branch 'master' into conformance-tests 2020-08-26 15:13:46 +01:00
Raúl Kripalani d3ac243cea Merge remote-tracking branch 'origin/master' into conformance-tests 2020-08-26 15:12:02 +01:00
Łukasz Magiera 348dadf7ae Merge pull request #3305 from filecoin-project/feat/update-pubsub
update go-libp2p-pubsub
2020-08-26 16:09:48 +02:00
Raúl Kripalani cba5ae81ed call out to filecoin-project/statediff upon state mismatches. 2020-08-26 15:09:33 +01:00
Łukasz Magiera 6d328c0a71 Merge pull request #3298 from filecoin-project/fix/flaky-mining-tests
improve flakiness of a few tests
2020-08-26 16:07:52 +02:00
vyzo 7a7066896e better code for getRequiredFunds 2020-08-26 15:37:42 +03:00
vyzo a2c0c10d2a correctly account for message replacement in required funds tracking 2020-08-26 15:27:09 +03:00
vyzo c473d3c682 rename ErrValidationFailure to ErrSoftValidationFailure
to make it clear to readers that this failure is soft; we might be out of sync.
2020-08-26 15:16:04 +03:00
vyzo bedbdcaf13 give some score weight to the messages topic 2020-08-26 15:14:15 +03:00
vyzo 87e6c0973a include message Value only in soft validation failures 2020-08-26 15:13:50 +03:00
vyzo 78876947a4 ErrBroadcastAnyway is now ErrValidationFailure 2020-08-26 15:03:13 +03:00
vyzo b59f58435c fix tests 2020-08-26 14:58:32 +03:00
vyzo 4adb83eaae check aggregate pending message required funds against balance 2020-08-26 14:58:26 +03:00
vyzo 4ac9828b0c track required funds in message set 2020-08-26 14:38:26 +03:00
vyzo 77f6e0d4f8 refactor balance check, apply it in PushWithNonce 2020-08-26 14:23:34 +03:00
vyzo 835dbfe001 check message before adding in PushWithNonce 2020-08-26 14:13:46 +03:00
David Dias f5eb3fd086 docs: removed non used packages from the list 2020-08-26 12:10:11 +01:00
vyzo da9630c561 remove duplicate check
gas limit is checked against block gas limit in ValidForBlockInclusion
2020-08-26 14:02:34 +03:00
Alan Shaw a89faa72ea feat(conformance): skip incorrect tests (#3310)
Fixes https://github.com/filecoin-project/test-vectors/issues/72
2020-08-26 11:45:34 +01:00
vyzo e042ce21f6 gomod: update go-libp2p-pubsub@v0.3.5 2020-08-26 08:36:58 +03:00
Whyrusleeping d4fef1b5f8 Merge pull request #3301 from filecoin-project/feat/release-0.5.4
Lotus release v0.5.4
2020-08-25 17:55:15 -07:00
whyrusleeping d5c4b66ec7 Lotus release v0.5.4 2020-08-25 17:31:40 -07:00
Whyrusleeping 0009f7c8dc Merge pull request #3300 from filecoin-project/fix/set-peer-id
fix parsing of peerID in input to set-peer-id
2020-08-25 17:26:05 -07:00
Whyrusleeping cd2e794d3f Merge pull request #3299 from filecoin-project/steb/update-deps
update deps for bug fixes
2020-08-25 17:18:02 -07:00
whyrusleeping 9bb862d025 fix parsing of peerID in input to set-peer-id 2020-08-25 17:10:06 -07:00
whyrusleeping 91bb559bdf address another spot with the more certain mining fix 2020-08-25 17:06:45 -07:00
Steven Allen 7fb4851eb9 update deps for bug fixes
* updates bitswap to include _many_ perf enhancements and bug fixes.
* updates go-fs-lock because the version here is pretty old.
* updates go-libp2p
* updates bbloom _just_ in case, because the version we were depending on had bugs (looks like we're not actually using it).
2020-08-25 17:06:07 -07:00
Whyrusleeping 6c2fa9086e Merge pull request #3238 from filecoin-project/fix/jsonrpc-ctx
refactor(ctx): for go-jsonrpc/pull/26
2020-08-25 15:33:38 -07:00
frrist 0d61e0d717 refactor(ctx): update to latest go-jsonrpc 2020-08-25 15:20:41 -07:00
whyrusleeping d0585ca7bb improve flakiness of a few tests 2020-08-25 15:07:10 -07:00
Whyrusleeping 14cda27e9f Merge pull request #3294 from filecoin-project/feat/sync-tweaking
Add some tracing and the ability to tweak message fetch window size
2020-08-25 13:25:22 -07:00
Whyrusleeping cf177bfea5 Merge pull request #3296 from filecoin-project/steb/fix-lints-again
Fix more lint warnings.
2020-08-25 13:24:34 -07:00
Steven Allen f84bbd4520 Fix more lint warnings.
This way we can keep CI green.
2020-08-25 12:56:30 -07:00
Whyrusleeping 2bf8fb8c84 Merge pull request #3295 from filecoin-project/fix/use-safe-ellipsis-for-cli-output
Use a safe string ellipsis/truncation function for client CLI output
2020-08-25 12:50:27 -07:00
whyrusleeping a553db4b82 Add some tracing and the ability to tweak message fetch window size 2020-08-25 12:39:17 -07:00
Ingar Shu 121be5c6e8 Add and use a safe ellipsis function for truncating strings 2020-08-25 12:03:08 -07:00
Łukasz Magiera e23e3db5b5 Merge pull request #3278 from filecoin-project/remove-mkminer
lotus-fountain: remove make miner workflow
2020-08-25 18:02:48 +02:00
Łukasz Magiera babaab20ea Merge pull request #3283 from filecoin-project/feat/moar-mpool-tests
More message pool tests and a couple of bug fixes
2020-08-25 17:59:49 +02:00
Łukasz Magiera 9d67c16ab9 Merge pull request #3284 from filecoin-project/misc/stats-gas-limit
Add gas_limit_uniq_total to stats
2020-08-25 17:49:59 +02:00
Jakub Sztandera 9908031b0b Add gas_limit_uniq_total to stats
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 16:59:27 +02:00
vyzo 6b3282150b appease linter 2020-08-25 14:03:49 +03:00
vyzo 58cfac9f67 add test for message republish 2020-08-25 13:57:02 +03:00
Dirk McCormick 340d11be38 fix: check voucher spendable should take into account submitted vouchers 2020-08-25 12:51:29 +02:00
vyzo 62b15ecc12 remove bug line 2020-08-25 13:41:20 +03:00
vyzo 6b9d392d0e add another priority selection test 2020-08-25 13:36:03 +03:00
vyzo 9c68123ede add test for Updates, fix behaviour for closed mpool 2020-08-25 13:29:09 +03:00
vyzo 7049b6478c add test for Clear 2020-08-25 13:24:11 +03:00
vyzo 0e6d34c0c9 add test for loadLocal 2020-08-25 13:16:55 +03:00
vyzo a01fa11a26 exercise debug code, fix deadlock 2020-08-25 13:03:50 +03:00
vyzo 4c71182c6b Merge pull request #3280 from filecoin-project/fix/mpool-init-crash
initialize mpool ts _before_ loading local messages
2020-08-25 09:04:11 +03:00
vyzo 7e81081899 initialize mpool ts _before_ loading local messages 2020-08-25 08:49:15 +03:00
Travis Person fb033a3719 lotus-fountain: remove make miner workflow 2020-08-25 05:10:12 +00:00
Whyrusleeping a085b3b5f3 Merge pull request #3277 from filecoin-project/feat/release-0.5.2
0.5.2 release of lotus
2020-08-24 20:31:35 -07:00
whyrusleeping ec4146642d 0.5.2 release of lotus 2020-08-24 20:25:06 -07:00
Whyrusleeping 09bcc7aa52 Merge pull request #3276 from filecoin-project/fix/mpool-select-head-change
more correctly handle discrepancies between mempools head and chainhead
2020-08-24 20:21:03 -07:00
Jakub Sztandera 8cc8a277a1 Remove Println
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 04:37:35 +02:00
whyrusleeping a5c56dde10 add test to verify actor state fix works properly 2020-08-24 19:35:54 -07:00
Jakub Sztandera 7f427b8001 Fix harness weirdness
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 04:12:33 +02:00
Jakub Sztandera 33b12782e4 Take into account messages in current tispet by executing it
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 04:02:06 +02:00
Jakub Sztandera b2ff231c48 Fix error fmt string
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 03:14:52 +02:00
Jakub Sztandera d921791c55 Add comment
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 03:13:43 +02:00
whyrusleeping 05d65c3f88 slightly better than panicking 2020-08-24 17:40:12 -07:00
whyrusleeping cf3298cd04 more correctly handle discrepancies between mempools head and the mining base 2020-08-24 17:21:03 -07:00
Łukasz Magiera d789ca9299 Merge pull request #3274 from filecoin-project/fix/check-message-valid
Check ValidForBlockInclusion in mpool
2020-08-25 01:08:02 +02:00
Jakub Sztandera aacfcba400 Check ValidForBlockInclusion in mpool
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-25 01:01:16 +02:00
Łukasz Magiera 56d419e906 Merge pull request #3273 from filecoin-project/feat/v0.5.2
build: Bump versions to 0.5.2
2020-08-24 23:55:07 +02:00
Łukasz Magiera e4e0f472f9 build: Bump versions to 0.5.2 2020-08-24 23:48:57 +02:00
Łukasz Magiera 2eadc7010a Merge pull request #3272 from filecoin-project/update/quic
Update quic
2020-08-24 23:36:22 +02:00
Łukasz Magiera 55cbb3480c Merge branch 'master' of github.com:clinta/lotus into update/quic 2020-08-24 23:27:01 +02:00
Łukasz Magiera fda038cd89 Merge pull request #3168 from filecoin-project/fix/paych-chk-vchr
Payment channel check voucher should get inbound channel from state
2020-08-24 23:04:34 +02:00
Łukasz Magiera 2f6f978cd5 Merge pull request #3111 from filecoin-project/fix/paych-addvchr-chk
paych: check To address is owned by wallet for inbound channels
2020-08-24 23:02:10 +02:00
Łukasz Magiera ae19b8ebfd Merge pull request #3146 from filecoin-project/feat/paych-cli-voucher-tests
paych: modify `lotus paych voucher best-spendable` to output _all_ best vouchers
2020-08-24 22:59:20 +02:00
Łukasz Magiera 519d68ff6b Merge pull request #3213 from filecoin-project/feat/genesis-verify-cmd
add lotus-shed command to verify some stuff about the genesis car
2020-08-24 22:52:12 +02:00
whyrusleeping 90337995ff print out genesis cid 2020-08-24 22:48:48 +02:00
whyrusleeping aa2cad1a66 small usability tweak, fix lint 2020-08-24 22:48:47 +02:00
whyrusleeping 4f6dc0748d print out genesis block accounts 2020-08-24 22:48:11 +02:00
whyrusleeping 6b8191121c add lotus-shed command to verify some stuff about the genesis car 2020-08-24 22:48:11 +02:00
Łukasz Magiera 9bc48a8867 Merge pull request #3198 from filecoin-project/fix/retrieval-streaming-cleanup
Retrieval CLI fixes
2020-08-24 22:47:09 +02:00
Łukasz Magiera ecc3ff4a5c Merge pull request #3254 from filecoin-project/fix/chainwatch/independent-processor-subtasks
fix(chainwatch): Make processor failures independent of each other
2020-08-24 22:45:02 +02:00
Łukasz Magiera 71a2dc06d7 Merge pull request #3259 from GFZRZK/master
Bugfix: fix some typo and correct recoveries datasource
2020-08-24 22:44:36 +02:00
Łukasz Magiera f7d9603c0c Merge pull request #3268 from filecoin-project/fix/less-slow-trysched
sectorstorage: Make trySched less very slow
2020-08-24 22:40:11 +02:00
Łukasz Magiera 256a26d12a Merge pull request #3271 from filecoin-project/testnet-spacerace-genesis
Testnet spacerace genesis
2020-08-24 22:34:57 +02:00
Travis Person 3736d1ce45 Testnet spacerace genesis 2020-08-24 19:51:48 +00:00
Whyrusleeping 672269e9d6 Merge pull request #3269 from filecoin-project/feat/randomize-chain-ticket
randomize ticket in genesis creation
2020-08-24 11:59:04 -07:00
Whyrusleeping f200ac6287 Merge pull request #3252 from filecoin-project/fix/burnt-funds-state
fix setup of burnt funds actor state
2020-08-24 11:43:34 -07:00
whyrusleeping 1447a66515 randomize ticket in genesis creation 2020-08-24 11:33:49 -07:00
Łukasz Magiera d9796cd25c sectorstorage: Make trySched less very slow 2020-08-24 19:16:16 +02:00
Łukasz Magiera ee79855536 Merge pull request #3262 from filecoin-project/feat/apidocgen
Wire up API doc generator
2020-08-24 18:24:07 +02:00
Łukasz Magiera 33ada25ba8 docs: Add api-methods to library.json 2020-08-24 18:18:32 +02:00
Łukasz Magiera da90caedf0 docs: rename file 2020-08-24 18:13:52 +02:00
Łukasz Magiera 6a7cb669ac Merge pull request #3250 from filecoin-project/fix/miner-info-avail
miner info: Fix avail calc, print aggregate deal info
2020-08-24 18:10:07 +02:00
Łukasz Magiera 8ae74f67df Merge pull request #3266 from filecoin-project/fix/tracer-dnsaddr
Emergency fix: use DNS addr for tracer
2020-08-24 17:08:06 +02:00
vyzo fc34b86470 use DNS addr for tracer 2020-08-24 18:01:52 +03:00
Łukasz Magiera b87c89ad16 mod tidy, fix lint 2020-08-24 12:51:55 +02:00
Łukasz Magiera 4e74e66903 ci: Fix cbor check 2020-08-24 12:28:22 +02:00
Łukasz Magiera ce8b369419 docs: Generate API docs 2020-08-24 12:25:49 +02:00
Łukasz Magiera b5f4a91002 Check docsgen in CI 2020-08-24 12:24:31 +02:00
Łukasz Magiera db4896577c docgen: Add missing examples 2020-08-24 12:11:18 +02:00
WC 119f6ff2e6 Bugfix: fix some typo and correct recoveries datasource
Bugfix: fix some typo and correct recoveries data source
2020-08-24 14:56:44 +08:00
Mike Greenberg 80f8f71a96 fix(lint): Cleanup unneeded error returns; go mod tidy 2020-08-23 16:51:12 -04:00
Mike Greenberg 7e0ba4aa32 fix(chainwatch): Reduce default max-batch to 50 2020-08-23 13:01:10 -04:00
Mike Greenberg da8dbc8ffe fix(chainwatch): Make processor failures independent of each other 2020-08-23 01:59:15 -04:00
whyrusleeping 27e3f8ee29 fix setup of burnt funds actor state 2020-08-22 18:53:44 -07:00
Łukasz Magiera 4311c96a44 Merge pull request #3225 from filecoin-project/fix/sched-missing-worker
check that worker referenced by task is actually still there.
2020-08-22 22:16:32 +02:00
Łukasz Magiera a236957538 Merge pull request #3232 from filecoin-project/asr/marked-for-upgrade
Indicate whether a sector has been marked for upgrade
2020-08-22 21:48:45 +02:00
Łukasz Magiera 0806fd651a Merge pull request #3183 from filecoin-project/steb/lint-all
Lint everything
2020-08-22 21:47:41 +02:00
Łukasz Magiera bf579a86a0 Merge pull request #3182 from filecoin-project/anorth/versionuint
Change Message.Version to be a uint64
2020-08-22 21:29:49 +02:00
Łukasz Magiera 12af420d7e mod tidy 2020-08-22 19:16:45 +02:00
Łukasz Magiera 88016c17e4 miner info: Fix avail calc, print aggregate deal info 2020-08-22 19:15:08 +02:00
Łukasz Magiera 0df6e1e2c7 Merge pull request #3220 from shaodan/fix-import
Fix import storage-fsm
2020-08-22 10:38:36 +02:00
Łukasz Magiera 399a483708 Merge pull request #3209 from filecoin-project/fix/cli-log-doc
fix golog cli docs
2020-08-22 10:37:26 +02:00
Łukasz Magiera 8b923c123a Merge pull request #3233 from filecoin-project/asr/docs
Update faucet info
2020-08-22 10:34:16 +02:00
Whyrusleeping b378f8d310 Merge pull request #3235 from filecoin-project/momack2-patch-1
fix changelog date & formatting
2020-08-21 14:38:59 -07:00
MollyM 25875b4cd8 change hierarchy 2020-08-21 14:35:12 -07:00
MollyM 04bd91b2f3 fix date 2020-08-21 14:32:56 -07:00
Aayush Rajasekaran 9e2f56b0b7 Merge pull request #3226 from filecoin-project/fix/mpool-state-inconsistencies
Address potential mpool state inconsistencies
2020-08-21 17:17:57 -04:00
Whyrusleeping 5c315b4503 Merge pull request #3212 from filecoin-project/feat/space-race-params
space race parameters
2020-08-21 14:16:50 -07:00
vyzo 817358f1bb better semantics for mpool clear local argument
local messages should be kept unless the parameter is true
2020-08-21 23:48:35 +03:00
vyzo 3debf005a8 add --really-do-it flag to mpool clear command 2020-08-21 23:32:41 +03:00
vyzo 087955e927 add localonly option to MpoolClear 2020-08-21 23:32:41 +03:00
vyzo e33d398c33 remove pending local messages from the datastore when clearing the mpool 2020-08-21 23:32:41 +03:00
vyzo 9fc674feb4 update mpool documentation 2020-08-21 23:32:41 +03:00
vyzo 0c875774ce add mpool clear cli command 2020-08-21 23:32:41 +03:00
vyzo 3027283756 add MpoolClear api 2020-08-21 23:32:41 +03:00
vyzo 161cb32078 recover from errors in head change 2020-08-21 23:32:41 +03:00
Whyrusleeping 84bbf7f420 Merge pull request #3227 from filecoin-project/feat/drand-incentinet
Feat/drand incentinet
2020-08-21 13:06:03 -07:00
Aayush Rajasekaran dad3e96719 Update create miner info 2020-08-21 15:55:01 -04:00
Aayush Rajasekaran 984e52acbc Indicate whether a sector has been marked for upgrade 2020-08-21 15:53:39 -04:00
Aayush Rajasekaran d022dba14a Merge pull request #3210 from filecoin-project/asr/docs
Update changelog for 0.5.0
2020-08-21 15:44:46 -04:00
Aayush Rajasekaran bf98ebe33e Merge pull request #3223 from filecoin-project/fix/nil-commd-commr
If sectorInfo doesnt have CommD or CommR set during commit, don't crash
2020-08-21 15:18:11 -04:00
Aayush Rajasekaran 7d704bf86b Merge pull request #3230 from filecoin-project/feat/update-markets-0.5.7
Update to markets v0.5.7
2020-08-21 15:10:40 -04:00
Aayush Rajasekaran aabb90293d Merge pull request #3214 from filecoin-project/fix/genesis-remainder
Actually set genesis remainder account balance
2020-08-21 15:07:14 -04:00
Aayush Rajasekaran 6b8beabad0 Merge pull request #3211 from filecoin-project/testnet-peers
Testnet peers
2020-08-21 15:04:46 -04:00
hannahhoward 438fa637df feat(markets): update to markets v0.5.7 2020-08-21 11:49:16 -07:00
Travis Person 30b28b7f7b Update drand to incentinet 2020-08-21 17:46:43 +00:00
Hector Sanjuan 4b80bc93b0 build/drand.go: add settings for incentinet. 2020-08-21 17:45:55 +00:00
whyrusleeping 54862be3ff check that worker referenced by task is actually still there. 2020-08-21 10:33:36 -07:00
whyrusleeping 2e78f2c267 If sectorInfo doesnt have CommD or CommR set during commit, don't crash 2020-08-21 09:31:28 -07:00
Will a03931daab archive more relevant coverage for conformance tests (#3176) 2020-08-21 16:41:35 +01:00
vyzo 8df9c483f3 Merge pull request #3218 from filecoin-project/fix/update-pubsub
update go-libp2p-pubsub@master
2020-08-21 18:15:22 +03:00
Raúl Kripalani 6ed1c9e905 register the puppet actor conditionally. 2020-08-21 11:51:50 +01:00
Dan Shao f21ce3e8ee Fix import storage-fsm -> extern/storage-sealing 2020-08-21 16:52:33 +08:00
vyzo 7c1e0d2132 update go-libp2p-pubsub@master 2020-08-21 10:53:30 +03:00
Steven Allen 5733c71c50 Lint everything
We were ignoring quite a few error cases, and had one case where we weren't
actually updating state where we wanted to. Unfortunately, if the linter doesn't
pass, nobody has any reason to actually check lint failures in CI.

There are three remaining XXXs marked in the code for lint.
2020-08-20 20:46:36 -07:00
whyrusleeping 4bf7619d32 Actually set genesis remainder account balance 2020-08-20 18:59:16 -07:00
Whyrusleeping 659babc6b3 Merge pull request #3215 from filecoin-project/fix/fd-limit-test
fix fd limit test
2020-08-20 18:58:54 -07:00
whyrusleeping 38a2f82f78 fix fd limit test 2020-08-20 18:43:43 -07:00
whyrusleeping 7456cdeb42 space race parameters 2020-08-20 17:21:33 -07:00
Travis Person 0eac90b596 Testnet peers 2020-08-21 00:11:30 +00:00
lanzafame 7f895f03f5 fix golog cli docs 2020-08-21 10:02:43 +10:00
Aayush Rajasekaran 393ac5a7c7 Update changelog 2020-08-20 19:52:47 -04:00
Jakub Sztandera d08458a03c s/From/To
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-21 00:16:48 +02:00
vyzo d1718369a1 Merge pull request #3205 from filecoin-project/fix/update-pubsub
update pubsub and bump behaviour penalty threshold to 6
2020-08-20 23:37:17 +03:00
Łukasz Magiera 57af7e8d1e Merge pull request #3206 from filecoin-project/docs/env-var
add a doc on environment variables that can be used to tweak lotus
2020-08-20 22:29:19 +02:00
Whyrusleeping af3fe206d6 Merge pull request #3122 from filecoin-project/feat/cmd-improvements
sorted deal listings
2020-08-20 13:29:01 -07:00
vyzo 29f6d50c49 Merge pull request #3207 from filecoin-project/fix/more-pubsub-metrics
pubsub metrics for RPCs
2020-08-20 23:28:17 +03:00
vyzo 896edfe072 pubsub metrics for RPCs 2020-08-20 23:14:32 +03:00
whyrusleeping 2010bf55b7 add a doc on environment variables that can be used to tweak lotus 2020-08-20 12:52:50 -07:00
vyzo ccd000cc16 update go-libp2p-pubsub@master 2020-08-20 22:52:40 +03:00
vyzo de05120e69 increase behaviour penalty threshold to 6 2020-08-20 22:32:41 +03:00
Jakub Sztandera 0ada762971 Compensate for DestoryActor in gas limit estimation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-20 21:14:12 +02:00
Aayush Rajasekaran d8a669c85a Merge pull request #3200 from filecoin-project/asr/docs
Update links
2020-08-20 15:00:38 -04:00
Clint Armstrong db240359f7 upgrade libp2p-quic-transport to v0.8.0 for go 1.15 compatibility 2020-08-20 14:27:31 -04:00
vyzo 87f1b7564c Merge pull request #3196 from filecoin-project/fix/pubsub-behavioural-penalty-threshold
Address issues with pubsub behavioural penalties
2020-08-20 20:19:54 +03:00
Aayush Rajasekaran 807504fa16 Update faucet link 2020-08-20 13:13:20 -04:00
Aayush Rajasekaran 93e566d7e0 Change docs.lotu.sh links to lotu.sh 2020-08-20 12:45:41 -04:00
Ingar Shu c02c69a8d6 Check deal id when emitting events
Make sure to unsubscribe from retrieval events
2020-08-20 09:16:18 -07:00
vyzo 6193f4e062 pubsub: increase gossip history length to 10 heartbeats 2020-08-20 18:09:17 +03:00
Łukasz Magiera 364e3229b9 Merge pull request #3178 from filecoin-project/feat/miner-init-from-flag
add a from flag for miner init
2020-08-20 17:09:03 +02:00
vyzo 98d6d25c74 pubsub: set behaviour penalty threshold, increase IWANT follow up time to 5s 2020-08-20 18:08:02 +03:00
vyzo 67bf952c5a gomod: update go-libp2p-pubsub@master 2020-08-20 18:06:06 +03:00
Łukasz Magiera 0acc461cb1 Merge pull request #3185 from filecoin-project/fix/chainwatch/fix-nil-smoothing-estimate
fix(chainwatch): Handle RewardState.EpochSmoothingEstimate == nil
2020-08-20 11:20:58 +02:00
Łukasz Magiera cd82f79d35 Merge pull request #3191 from filecoin-project/feat/miner-data-transfers
Add data transfer list command to miner
2020-08-20 11:18:56 +02:00
Łukasz Magiera e035e29595 Merge pull request #3189 from filecoin-project/fix/pcr-impursement
lotus-pcr: fix refund math
2020-08-20 11:00:29 +02:00
Łukasz Magiera b89e94ee86 Merge pull request #3190 from filecoin-project/feat/noise-first
NOISE first
2020-08-20 10:57:53 +02:00
Łukasz Magiera fc41b72bb6 Merge pull request #3181 from filecoin-project/asr/cc-upgrade-fix
Do not try to replace CC sectors with a deal-less sector
2020-08-20 10:56:57 +02:00
hannahhoward 0086f76a90 feat(lotus-miner): add data transfer list cmd
add equivalent command to list data transfers on miner side, extract common functionality for reuse
2020-08-20 01:35:48 -07:00
vyzo 92faf5c5f9 don't prefer TLS over NOISE 2020-08-20 11:33:19 +03:00
Travis Person 3eeec8d438 lotus-pcr: fix refund math 2020-08-20 08:28:53 +00:00
Mike Greenberg bf10de82df fix(chainwatch): Handle RewardState.EpochSmoothingEstimate == nil 2020-08-20 01:55:17 -04:00
anorth 4ce71bce2d Change Message.Version to be a uint64 2020-08-20 14:37:21 +10:00
Aayush Rajasekaran e9c526b218 Do not try to replace CC sectors with a deal-less sector 2020-08-19 22:41:23 -04:00
whyrusleeping 2675ffb128 add a from flag for miner init 2020-08-19 17:34:58 -07:00
Łukasz Magiera 885f357c59 Merge pull request #3175 from filecoin-project/feat/control-addersses-control
Wire up miner control addresses, use for PoSt
2020-08-20 02:24:33 +02:00
Łukasz Magiera de41f63fa4 miner info: Also print locked pledge 2020-08-20 02:03:42 +02:00
Łukasz Magiera a4807b18bc gofmt, api docstring 2020-08-20 01:26:13 +02:00
Łukasz Magiera b42625d824 docs: Explain setting miner control addresses 2020-08-20 01:18:03 +02:00
Łukasz Magiera 71cf358ee3 Fix windowpost test 2020-08-20 01:18:01 +02:00
Łukasz Magiera 5ea61abfe1 Wire up miner control addresses, use for post 2020-08-20 01:17:03 +02:00
Dirk McCormick 4a3c273072 fix: paych - check wallet for key for channel To address 2020-08-19 18:56:51 -04:00
Łukasz Magiera 0292c979ab Merge pull request #3043 from filecoin-project/feat/paych-cli-tests
Payment Channel CLI tests
2020-08-20 00:23:00 +02:00
Łukasz Magiera a78258efdf Merge pull request #3157 from filecoin-project/docs/paych
Payment channel lotu.sh docs
2020-08-20 00:13:49 +02:00
Łukasz Magiera bee6c0e26e Merge remote-tracking branch 'origin/master' into feat/paych-cli-tests 2020-08-20 00:12:47 +02:00
Łukasz Magiera 6e492e41d1 Merge pull request #3165 from filecoin-project/fix/validator-ignore-nonce-errors
ignore, don't reject messages with nonce that is too low
2020-08-20 00:00:20 +02:00
Łukasz Magiera f943ea7d5d Merge pull request #3170 from filecoin-project/frrist/chainwatch-SectorOnChainInfo-ext
refactor(cw): add new values to sector_info table and smoothing estimate
2020-08-19 23:58:22 +02:00
Łukasz Magiera ed098390cb Merge pull request #3172 from filecoin-project/feat/lotus-shed-jwt
lotus-shed: add simple jwt creation support
2020-08-19 23:32:01 +02:00
Łukasz Magiera 3ed3e4f5d7 Merge pull request #3162 from filecoin-project/feat/data-transfer-status
Find out what's up with data transfers!
2020-08-19 23:30:44 +02:00
Whyrusleeping 6117afe0be Merge pull request #3174 from filecoin-project/keyko-io-fix/genesis-multisig
Keyko io fix/genesis multisig
2020-08-19 13:56:36 -07:00
whyrusleeping f5dcd4a25f set missing miner ID field 2020-08-19 13:42:34 -07:00
frrist 05f1a23c94 feat(chainwatch): power actor smoothing estimate 2020-08-19 13:34:58 -07:00
whyrusleeping 621d675938 fixup tests 2020-08-19 13:32:53 -07:00
whyrusleeping 4f25c1c60e minor improvements to multisig cli commands 2020-08-19 13:10:07 -07:00
frrist fecaeda382 feat(chainwatch): reward actor smoothing estimate 2020-08-19 13:05:07 -07:00
frrist 3df85ca784 refactor(chainwatch): add new values to sector_info table 2020-08-19 13:05:07 -07:00
whyrusleeping 2ab202a03d fixup ID allocation and a few other things 2020-08-19 12:54:33 -07:00
Travis Person f1632376e7 lotus-shed: add simple jwt creation support 2020-08-19 19:21:36 +00:00
whyrusleeping 073efeeacb Merge branch 'fix/genesis-multisig' of git://github.com/keyko-io/lotus into keyko-io-fix/genesis-multisig 2020-08-19 10:51:15 -07:00
Raúl Kripalani e38f4219c5 update test-vectors commit. 2020-08-19 18:19:03 +01:00
Raúl Kripalani 30b6f38704 update test-vectors commit. 2020-08-19 18:14:19 +01:00
Raúl Kripalani 04e4bab313 register chaos actor only if selector says to do so. 2020-08-19 18:10:56 +01:00
vyzo 19253dbbb1 Merge pull request #3169 from filecoin-project/fix/drand-delivery-cap
fix drand topic first message delivery cap
2020-08-19 20:02:08 +03:00
Raúl Kripalani dddf7951ef update test-vectors commit. 2020-08-19 17:33:30 +01:00
vyzo 6c5a91735a fix drand topic first message delivery cap 2020-08-19 18:45:31 +03:00
Raúl Kripalani b13681df32 update test-vectors commit. 2020-08-19 14:40:55 +01:00
Raúl Kripalani a21234cd54 deploy the chaos actor. 2020-08-19 14:31:34 +01:00
Dirk McCormick d317835535 fix: paych check voucher should get inbound channel from state 2020-08-19 09:17:08 -04:00
Dirk McCormick 20cb9425cc docs: paych edits 2020-08-19 08:43:06 -04:00
Raúl Kripalani 4f4cebadc7 Merge branch 'master' into conformance-tests 2020-08-19 13:33:15 +01:00
Sami Mäkelä 74f35c88ad checking verifreg handling 2020-08-19 15:27:50 +03:00
vyzo c7a6e32c96 ignore, don't reject messages with nonce that is too low
we seem to have a problem with this leading to many rejected messages and negative scores for
potentially innocent peers.
2020-08-19 13:20:16 +03:00
Sami Mäkelä 99e71badbf check that accounts aren't overwritten 2020-08-19 13:03:59 +03:00
Sami Mäkelä e894f360a5 merge 2020-08-19 12:26:19 +03:00
Sami Mäkelä 63ad6bc325 need to merge 2020-08-19 12:25:38 +03:00
hannahhoward 4fc5f9fe9f feat(cli): data transfer watch option
make watching data transfer CLI updates only an option
2020-08-18 18:23:51 -07:00
hannahhoward 66ac7c195c feat(cli): add updates to data transfer
Add an API to get data transfer updates and add modify the CLI to be an
ongoing monitoring plan
2020-08-18 17:36:29 -07:00
Łukasz Magiera 80e6e56a82 Merge pull request #2145 from filecoin-project/next
Next Testnet Staging
2020-08-19 02:14:30 +02:00
Łukasz Magiera 0471b10de5 Merge remote-tracking branch 'origin/master' into next 2020-08-19 02:03:14 +02:00
Łukasz Magiera 2dfc15c67d docs: Expand sealing issue template 2020-08-19 01:57:57 +02:00
David Dias d0f6804283 docs: add badgers 2020-08-19 01:57:25 +02:00
hannahhoward ef7f7375e7 fix(cli): cleanup data-transfers
cleanup output for data transfers.
2020-08-18 16:45:20 -07:00
Łukasz Magiera 7f6c86daae Merge pull request #3024 from filecoin-project/docs/expand-sealing-template
docs: Expand sealing issue template
2020-08-19 01:45:01 +02:00
Łukasz Magiera d2d72c76e0 docs: Expand sealing issue template 2020-08-19 01:40:28 +02:00
Łukasz Magiera ec4603e55d Merge pull request #3160 from filecoin-project/asr/cc-upgrade-fixes
cc upgrade fixes
2020-08-19 01:29:05 +02:00
hannahhoward f511cc188a feat(cli): data transfer command
add command to monitor data transfers
2020-08-18 16:26:21 -07:00
Aayush Rajasekaran 7de7e65dbc Calculate depositMinimum for upgrading as replaced sector's Initialpledge 2020-08-18 19:22:43 -04:00
Aayush Rajasekaran 98f00b510f re-mark replaced sectors as for upgrade if precommit fails 2020-08-18 18:53:56 -04:00
Łukasz Magiera e47e51275a Merge pull request #3138 from filecoin-project/feat/remainder
place the remainder of unallocated funds in a 'remainder' account
2020-08-18 23:52:19 +02:00
whyrusleeping 916bebadef setup proper template defaults 2020-08-18 14:34:35 -07:00
whyrusleeping abca69b476 configurable remainder account 2020-08-18 14:30:49 -07:00
Łukasz Magiera 71aa3a59d9 Merge pull request #3047 from filecoin-project/asr/burn-genesis
Do not include the burnt funds actor as a genesis account actor
2020-08-18 23:10:32 +02:00
Łukasz Magiera 19be380b53 Merge pull request #3152 from filecoin-project/fix/chainwatch/rpc-peer-id-bug
fix(api): Filter malformed peer ID before RPC marshaling
2020-08-18 23:07:55 +02:00
Łukasz Magiera 574a22de6c genesis: Set remainder account balance correctly 2020-08-18 22:52:25 +02:00
Mike Greenberg 8675ca561d fix(api): Filter malformed peer ID before RPC marshaling 2020-08-18 16:29:21 -04:00
Dirk McCormick 2b15831672 docs: payment channels 2020-08-18 16:07:04 -04:00
Łukasz Magiera 1dd554ad71 Merge pull request #3155 from filecoin-project/misc/selection-misc
Use conditional probability for miners
2020-08-18 21:56:41 +02:00
Łukasz Magiera 3fd4921ea3 Merge pull request #3147 from filecoin-project/feat/fsm-seal-limits
fsm: Config for limiting max sealing sectors
2020-08-18 21:54:41 +02:00
Łukasz Magiera a03192a39b Separate concurrent sealing sector limit for deals 2020-08-18 21:48:18 +02:00
vyzo 6d9707c784 fix OptimalSelection3 test 2020-08-18 22:24:07 +03:00
Łukasz Magiera d23cd2e507 Merge pull request #3136 from filecoin-project/asr/genesis-hardcode
Create a testnet version of setupGenesisActors
2020-08-18 21:21:04 +02:00
Łukasz Magiera 25448798b0 Merge pull request #3154 from filecoin-project/chore/add_missing_error_arg
Missing error argument
2020-08-18 21:19:20 +02:00
Łukasz Magiera d1cb60bdee Merge pull request #3118 from filecoin-project/feat/improve-pcr
lotus-pcr: refund provecommit sectors
2020-08-18 21:18:45 +02:00
Jakub Sztandera e0b72ba049 Reduce number of runs to 1
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 21:10:04 +02:00
Jakub Sztandera 4d01cbfb62 Increase precision of output
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 21:10:04 +02:00
Jakub Sztandera 8d4427a8bc add best ticket reward to tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 21:10:04 +02:00
Jakub Sztandera 8bca545cab Add test for winnerProba
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 21:10:04 +02:00
Jakub Sztandera 9c98cf8bc1 Fix blockProbabilities
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 21:10:04 +02:00
Jakub Sztandera 8acd926636 Use conditional probability for noWinners, fix tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 21:10:04 +02:00
Jakub Sztandera 12f7ead55e Merge pull request #3144 from filecoin-project/feat/dedup-for-basefee
Basefee change depends on unique messages not all messages
2020-08-18 21:08:29 +02:00
Peter Rabbitson 02d21c2833 Missing error argument 2020-08-18 21:08:20 +02:00
Łukasz Magiera b23cac19ab Merge pull request #3151 from filecoin-project/asr/specs-update
Update to specs-actors v0.9.3
2020-08-18 20:56:51 +02:00
Aayush Rajasekaran 446a4f6272 Update to specs-actors v0.9.3 2020-08-18 14:24:46 -04:00
whyrusleeping 42730bcf1c handle potential overallocation 2020-08-18 10:56:54 -07:00
Aayush Rajasekaran 214eeccb18 Create a testnet version of setupGenesisActors 2020-08-18 13:56:47 -04:00
Łukasz Magiera 2570712a29 Merge pull request #3135 from filecoin-project/feat/genesis-block-linkage
proper genesis block history
2020-08-18 19:28:55 +02:00
Łukasz Magiera 6a7d72c030 fsm: fail early on too-many-sealing-sectors in pledge 2020-08-18 19:26:17 +02:00
Łukasz Magiera e7d65be90a gofmt 2020-08-18 18:27:28 +02:00
Łukasz Magiera baf91f08a1 Unbreak tests 2020-08-18 18:27:18 +02:00
Łukasz Magiera 255bd6881a Merge pull request #3142 from filecoin-project/asr/client-retrieve
Create eventless version of ClientRetrieve
2020-08-18 18:15:16 +02:00
Łukasz Magiera 886d9cd5eb fsm: handle already-precommitted CommitFailed sectors correctly 2020-08-18 18:02:25 +02:00
Jakub Sztandera c9fdd4bee2 Fix testgrounds build
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 17:40:53 +02:00
Dirk McCormick d1592b01c3 feat: paych cli voucher tests 2020-08-18 11:33:04 -04:00
Dirk McCormick 043b63d8d8 feat: payment channel CLI tests 2020-08-18 11:26:08 -04:00
Łukasz Magiera 6a49bd6d8e fsm: Config for limiting max sealing sectors 2020-08-18 16:54:05 +02:00
Łukasz Magiera 65ffde9e4b fsm: Config for max WaitDeals sectors 2020-08-18 16:20:31 +02:00
Jakub Sztandera c841f26256 Basefee change depends on unique messages not all messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-18 15:28:50 +02:00
Łukasz Magiera 4cd56b3b99 impl: wait in ClientRetrieve 2020-08-18 15:27:56 +02:00
Łukasz Magiera 2d73b04f7d Merge pull request #3137 from filecoin-project/fix/chainwatch/calibration-improvements-2
More Chainwatch Improvements
2020-08-18 15:10:42 +02:00
Łukasz Magiera 36d87eb8e9 more checks around genesis CID 2020-08-18 15:04:31 +02:00
Łukasz Magiera 1ba5dd4c72 Merge pull request #3139 from filecoin-project/fix/mpool-push-deadlock
fix deadlock in mpool.Push
2020-08-18 14:09:00 +02:00
Łukasz Magiera b4d9b6efaf Merge pull request #3140 from filecoin-project/asr/restart-timer
restart WaitDeals timers if miner restarts
2020-08-18 13:54:55 +02:00
Sami Mäkelä 4ae02ef1b9 looks like it's working 2020-08-18 13:58:32 +03:00
Sami Mäkelä 88fbc044b3 adding actors for genesis msig addresses 2020-08-18 13:58:29 +03:00
Aayush Rajasekaran 8942c02f28 Add a reminder comment 2020-08-18 06:01:48 -04:00
Aayush Rajasekaran add56c8b81 Create eventless version of ClientRetrieve 2020-08-18 05:49:56 -04:00
Aayush Rajasekaran 37ff876bc6 restart WaitDeals timers if miner restarts 2020-08-18 05:07:14 -04:00
vyzo 4287f76ed4 fix deadlock in mpool.Push 2020-08-18 10:19:46 +03:00
whyrusleeping 64e18131c1 place the remainder of unallocated funds in a 'remainder' account 2020-08-17 23:38:58 -07:00
Mike Greenberg fabf26cc21 fix(chainwatch): Actually capture human actor names 2020-08-18 00:22:01 -04:00
Mike Greenberg 94e4f8d116 fix(chainwatch): Ignore blocks missing from local blockstore during processing 2020-08-18 00:22:01 -04:00
Mike Greenberg 6734287789 fix(chainwatch): Change tmp table names to not collide 2020-08-18 00:22:01 -04:00
whyrusleeping 13e5b72cdb proper genesis block history
Commit hash originally stamped into the ethereum blockchain:
https://etherscan.io/tx/0xe8f51c9eefb682cd866f059462577b6dd3d2685ff4b6437f6c940ff4f4aaf067
2020-08-17 21:13:43 -07:00
Aayush Rajasekaran 8cae101c04 Merge pull request #3134 from filecoin-project/fix/active-detection-timeout
Remove timeouts on deal committed checks
2020-08-17 22:53:17 -04:00
hannahhoward d1743555d4 fix(markets): remove timeouts on deal committed checks 2020-08-17 19:07:13 -07:00
Łukasz Magiera b463749594 Merge pull request #3131 from filecoin-project/asr/no-peerid
strip peerid when setting on-chain addrs
2020-08-18 03:21:42 +02:00
Aayush Rajasekaran 4ef5a58b36 strip peerid when setting on-chain addrs 2020-08-17 21:18:26 -04:00
Łukasz Magiera 1bd90d0701 Merge pull request #3130 from filecoin-project/fix/reachability-cli
cli: Fix net reachability
2020-08-18 03:14:11 +02:00
Łukasz Magiera 127d6d0576 cli: Fix net reachability 2020-08-18 03:12:50 +02:00
Łukasz Magiera 9db478fd2e Bump version 2020-08-18 02:58:54 +02:00
Łukasz Magiera 1cf2d1aad5 Merge pull request #3127 from filecoin-project/asr/set-peerid
Add a CLI method to set peerid
2020-08-18 02:58:17 +02:00
Aayush Rajasekaran 01b5118a08 Add a CLI method to set peerid 2020-08-17 20:53:02 -04:00
Łukasz Magiera 5c71d25872 Merge pull request #3126 from filecoin-project/feat/lotus-keygen
add lotus keygen utility
2020-08-18 02:46:12 +02:00
whyrusleeping ef8b9eae93 add lotus keygen utility 2020-08-17 17:29:26 -07:00
Łukasz Magiera dfa2ac6807 Merge pull request #3123 from filecoin-project/fix/retrieval-nil-serializing
Fix/retrieval nil serializing
2020-08-18 02:20:12 +02:00
whyrusleeping f05cff478f sorted deal listings 2020-08-17 14:48:49 -07:00
Ingar Shu cb71386ed9 Don't send finishing event if there is no error 2020-08-17 14:39:08 -07:00
Ingar Shu 7fbbf23e5a Initialize FundsSpent to zero in RetrievalEvent 2020-08-17 14:39:08 -07:00
Ingar Shu 5ace7479ad Don't try to output nil channel values 2020-08-17 14:39:08 -07:00
Travis Person 5040623a12 lotus-pcr: refund provecommit sectors 2020-08-17 21:29:59 +00:00
vyzo ff7f0a9dcd Merge pull request #3090 from filecoin-project/fix/pubsub-validation-clown-shoes
Fix clown shoes in pubsub validation
2020-08-17 23:31:45 +03:00
vyzo ca552cf83b deduplicate some block validation logic 2020-08-17 21:03:08 +03:00
Łukasz Magiera 2e78ed685f Merge pull request #3113 from filecoin-project/fix/chainwatch/calibration-improvements
Chainwatch Improvements
2020-08-17 19:06:05 +02:00
Łukasz Magiera 01df17f1e7 Merge pull request #3103 from filecoin-project/fix/fsm-recover-bork-snark
fsm: Recover from errors from VerifySeal in checkCommit
2020-08-17 19:00:16 +02:00
Łukasz Magiera f87ede501c Merge pull request #3101 from filecoin-project/fix/fsm-no-pci-panic
fsm: Fix panic on missing precommit info
2020-08-17 18:53:28 +02:00
Łukasz Magiera bb79af7721 fsm: Recover from errors from VerifySeal in checkCommit 2020-08-17 18:53:09 +02:00
Łukasz Magiera a66e202f02 fsm: Fix panic on missing precommit info 2020-08-17 18:45:38 +02:00
Łukasz Magiera 29db7047a3 Merge pull request #3112 from filecoin-project/fix/sched-hang
Fix sealing sched hands on unclean worker disconnect
2020-08-17 18:43:25 +02:00
Łukasz Magiera 6ef7a30b19 Merge pull request #3089 from filecoin-project/integrate/storage-fsm
integrate extern/{storage-fsm,sector-storage} into lotus source tree
2020-08-17 18:37:54 +02:00
Raúl Kripalani 1f016262cd readd int64 cast + nolint directive. 2020-08-17 17:26:07 +01:00
Mike Greenberg 80fef50b90 feat(chainwatch): Include detailed economic data per epoch 2020-08-17 12:22:34 -04:00
Łukasz Magiera 704578c9c2 Merge pull request #3108 from austinabell/msload
Remove unnecessary miner state load for checking slashed
2020-08-17 18:11:09 +02:00
Łukasz Magiera cfc1a54ee5 Merge pull request #3110 from filecoin-project/badgers
docs: add badgers
2020-08-17 17:57:28 +02:00
Łukasz Magiera f31473c4cf Update jsonrpc to fix sealing sched hangs 2020-08-17 17:36:21 +02:00
Łukasz Magiera 09dbd12638 Merge pull request #3107 from yaohcn/feat/addpiece-configurable
make addpiece configurable
2020-08-17 17:35:09 +02:00
Mike Greenberg b37a39588e feat(chainwatch): Add full version to help/startup log via build param 2020-08-17 11:31:59 -04:00
Mike Greenberg 0b498d25f6 fix(chainwatch): Actor code are human readable 2020-08-17 11:18:35 -04:00
Dirk McCormick b25215e31b fix: paych add voucher - for inbound voucher check channel To address is owned by wallet 2020-08-17 11:13:13 -04:00
David Dias f5b0c30633 docs: add badgers 2020-08-17 15:21:27 +01:00
Raúl Kripalani 862bafc63a fix lint errors. 2020-08-17 14:39:33 +01:00
austinabell c3c6fda9d5 Remove unnecessary miner state load for checking slashed 2020-08-17 09:32:47 -04:00
Raúl Kripalani efdc428d5d keep storage-fsm (renamed to storage-sealing) and sector-storage in extern. 2020-08-17 14:26:18 +01:00
Łukasz Magiera 7595b1d8d4 cli: pprof goroutines command 2020-08-17 11:49:11 +02:00
yaohcn 39bcfab37c make addpiece configurable 2020-08-17 17:39:50 +08:00
Łukasz Magiera ae40555558 Merge pull request #3104 from filecoin-project/feat/pubsub-metrics
collect pubsub metrics through the tracer
2020-08-17 10:39:46 +02:00
Łukasz Magiera 9c30b17b5a Merge pull request #3105 from yaohcn/fix/restart-flag
add missing restart flag
2020-08-17 10:37:24 +02:00
yaohcn aded4b4199 add missing restart flag 2020-08-17 16:04:50 +08:00
Łukasz Magiera eb616bff7f Merge pull request #3100 from filecoin-project/feat/mpool-improve-repub
trigger early republish from head changes
2020-08-17 09:46:46 +02:00
vyzo 8cf9595d35 collect pubsub metrics through the tracer 2020-08-17 10:46:20 +03:00
Łukasz Magiera 5c23ec73cb Merge pull request #3102 from filecoin-project/fix/mpool-docs
Some small improvements in mpool docs
2020-08-17 09:44:00 +02:00
vyzo 8d7994cd82 fix confusing wording 2020-08-17 10:12:54 +03:00
vyzo fb77a758ff note defaults in mpool configuration docs 2020-08-17 10:10:25 +03:00
vyzo 3b6e2bdb7b trigger early republish from head changes 2020-08-17 10:03:39 +03:00
Łukasz Magiera 1898b82dc4 Merge pull request #3086 from filecoin-project/feat/mpool-doc-config-cmd
Mpool documentation and config cli command
2020-08-17 08:47:40 +02:00
Łukasz Magiera 290011166f Merge pull request #3083 from filecoin-project/asr/docs
Show how to set env vars
2020-08-17 08:40:14 +02:00
Łukasz Magiera c5c819afca Merge pull request #3098 from filecoin-project/feat/config-cmd
Add config command that prints the default config file for a storage …
2020-08-17 08:36:51 +02:00
Łukasz Magiera c2687f9064 Merge pull request #3084 from shaodan/next
Fix typo
2020-08-17 08:34:28 +02:00
Łukasz Magiera 548e94d3fc Merge pull request #3079 from filecoin-project/fix/chainwatch-slow-read
fix a small issue in chain watch
2020-08-17 08:23:38 +02:00
vyzo ae88a99c84 add some lightweight validation of local messages 2020-08-17 09:04:22 +03:00
lanzafame 0d3aaabd2c Add config command that prints the default config file for a storage miner 2020-08-17 13:51:04 +10:00
Raúl Kripalani f1c452754f separate conformance suite on CI. 2020-08-16 22:50:00 +01:00
Raúl Kripalani b9d67296ef small adjustments to runner. 2020-08-16 22:15:12 +01:00
Raúl Kripalani 483e82e14b point test-vectors to master. 2020-08-16 22:05:43 +01:00
vyzo 884d4ad9df fix clown shoes pubsub validation: we always accept our own self-published messages 2020-08-16 20:46:19 +03:00
Raúl Kripalani 4f6d01d2ea fix path in failing test. 2020-08-16 12:28:39 +01:00
Raúl Kripalani 2b511d2f57 fix lint errors. 2020-08-16 11:44:22 +01:00
Raúl Kripalani 1eed341951 fix test compilation error. 2020-08-16 11:14:24 +01:00
Raúl Kripalani 3c17cd655e integrate extern/sector-storage into lotus proper. 2020-08-16 11:09:58 +01:00
Raúl Kripalani fb0ccc9260 integrate extern/storage-fsm into lotus proper. 2020-08-16 10:42:13 +01:00
vyzo aa679a7359 add message pool documentation 2020-08-16 10:57:17 +03:00
vyzo 054fc4a614 add client command for mpool config 2020-08-16 09:57:53 +03:00
Dan Shao 10b5e3e576 fix typo 2020-08-16 10:20:32 +08:00
Aayush Rajasekaran e3c241e613 Show how to set env vars 2020-08-15 21:48:42 -04:00
Raúl Kripalani a0c0d9c98a small fixes. 2020-08-16 00:37:16 +01:00
Raúl Kripalani 322b33197c introduce interoperable vector-based conformance testing.
This commit introduces a new package `conformance` containing:

 1. the test driver to exercise Lotus against interoperable
    test vectors, and
 2. the test runner, which integrates go test with the test vector
    corpus hosted at https://github.com/filecoin-project/conformance-vectors.

The corpus is mounted via a git submodule.

Right now, only message-class test vectors are supported. In the
next week, this support will be extended to tipset-class, chain-class,
and block sequence-class vectors.
2020-08-16 00:15:52 +01:00
vyzo 7f27c80a6a move sleep into the select
as it is it simply slows down the writer if there are many messages
2020-08-15 21:20:02 +03:00
Łukasz Magiera 9a23ede4fd Merge pull request #3075 from filecoin-project/fix/inter-filffi
Update filecoin-ffi to fix Intel build
2020-08-15 13:57:27 +02:00
Łukasz Magiera 9328dc27f3 Update filecoin-ffi to fix Intel build 2020-08-15 13:19:10 +02:00
Whyrusleeping 98643b90f8 Merge pull request #3068 from filecoin-project/feat/fundmgr-fix
Temporary fix for fund manager add issues
2020-08-14 21:10:08 -07:00
hannahhoward aa419155f6 feat(fundmgr): temp fix for funding issues 2020-08-14 19:37:20 -07:00
Łukasz Magiera b75ba5ea46 Merge pull request #3066 from filecoin-project/feat/cmd-improvements
add a market balance command, and a verbose mode for storage-deals list
2020-08-15 01:51:18 +02:00
whyrusleeping 8dfcf2b7d3 make things print nicerly 2020-08-14 16:46:11 -07:00
whyrusleeping 8774a7b2dd add a market balance command, and a verbose mode for storage-deals list 2020-08-14 16:45:40 -07:00
Łukasz Magiera 9012fea2f6 Merge pull request #3067 from filecoin-project/fix/addpiece-with-data
Fix AddPiece with data and multiple workers
2020-08-15 01:42:33 +02:00
Łukasz Magiera a52e406c0d Fix AddPiece with data and multiple workers 2020-08-15 01:36:29 +02:00
Łukasz Magiera 45476a208e Merge pull request #3053 from filecoin-project/feat/worker-addpiece2
Support AddPiece on workers
2020-08-14 23:50:17 +02:00
Łukasz Magiera 4ca5fef0de rpcenc: fix bug 2020-08-14 23:49:08 +02:00
Łukasz Magiera 42bb91c2e6 gofmt 2020-08-14 23:40:41 +02:00
Łukasz Magiera 1ecec49885 build: Bump versions 2020-08-14 23:40:11 +02:00
Łukasz Magiera 7fa2f20e8c Merge pull request #3064 from filecoin-project/asr/circ-supply-api
Include more info in StateCirculatingSupply
2020-08-14 23:31:28 +02:00
Łukasz Magiera d9ad6fb8c8 worker: Make disconnects less bad 2020-08-14 23:24:41 +02:00
Łukasz Magiera aa611e49fd rpcenc: Add timeout for readers 2020-08-14 23:12:55 +02:00
Aayush Rajasekaran 0359a458e4 Include more info in StateCirculatingSupply 2020-08-14 16:53:30 -04:00
Łukasz Magiera 0377d6952b Merge remote-tracking branch 'origin/next' into feat/worker-addpiece2 2020-08-14 21:17:30 +02:00
Łukasz Magiera ec242c1ba7 Update jsonrpc with stacktraces on panic 2020-08-14 21:16:42 +02:00
Łukasz Magiera 4a0171d26a Merge pull request #3058 from filecoin-project/feat/update-markets-0.5.6
Update markets 0.5.6
2020-08-14 21:13:00 +02:00
Łukasz Magiera 8955690d76 Merge pull request #3062 from filecoin-project/fix/post-conf-wait
wdpost: Wait for the correct confidence
2020-08-14 21:10:24 +02:00
Łukasz Magiera 25cb3a15e7 wdpost: Wait for the correct confidence 2020-08-14 21:03:20 +02:00
hannahhoward 6b5525b8d2 feat(markets): update markets 0.5.6
update markets to 0.5.6, removing use of validators that moved inside markets
2020-08-14 11:14:03 -07:00
Łukasz Magiera 0c75dd3865 Support AddPiece on workers 2020-08-14 16:06:53 +02:00
Łukasz Magiera 4d204d2c25 Merge pull request #3022 from filecoin-project/feat/fix-rename-miner-withdraw
miner: fix/rename miner actor withdraw
2020-08-14 13:51:58 +02:00
Łukasz Magiera 75eaa1bf5b Merge remote-tracking branch 'origin/next' into feat/fix-rename-miner-withdraw 2020-08-14 13:40:12 +02:00
vyzo b44d188912 Merge pull request #3040 from filecoin-project/misc/use-zipf-selection-test
Add competitve selection test with Zipf premium distribution
2020-08-14 10:25:29 +03:00
vyzo a5d2ec0df8 appease linter 2020-08-14 10:12:55 +03:00
vyzo b844f70a3c make competitve selection test parameteric on distribution function, add test for Zipf distribution 2020-08-14 10:09:25 +03:00
Aayush Rajasekaran 5fe85c07b1 Merge pull request #3046 from filecoin-project/asr/collateral
Move estimation correction into markets adapters
2020-08-13 22:27:43 -04:00
Aayush Rajasekaran 5ca410ae99 extract overestimation factor into a constant 2020-08-13 22:21:20 -04:00
Aayush Rajasekaran 2d90bcff3c jeromy is a bad software engineer 2020-08-13 22:14:45 -04:00
Aayush Rajasekaran c2a24b7b4c Update markets 2020-08-13 22:13:31 -04:00
Aayush Rajasekaran b49276ef47 Double provider collateral estimates in the client atadpter 2020-08-13 21:54:39 -04:00
whyrusleeping eb2879ca22 allow client to specify provider collateral 2020-08-13 21:47:36 -04:00
Aayush Rajasekaran 5702ea236c Do not include the burnt funds actor as a genesis account actor 2020-08-13 20:19:47 -04:00
Łukasz Magiera b3f27c0075 Merge pull request #3044 from filecoin-project/frrist/fix-error-actor-not-found
fix: chainwatch actor not found handling
2020-08-13 23:23:52 +02:00
frrist 50d4c2e0ac fix: error checking for actor not found 2020-08-13 14:10:05 -07:00
Łukasz Magiera 6c1ecb4d16 Merge pull request #3039 from filecoin-project/frrist/fix-id-map-table-v2
fix: chainwatch id_address_map
2020-08-13 20:49:22 +02:00
Jakub Sztandera f27a122787 Use Zipf distribution for messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 20:22:56 +02:00
frrist 55f88b46cf fix: best attempt at fixing the id_address_map 2020-08-13 11:14:58 -07:00
Jakub Sztandera 15a81707b4 Merge pull request #3036 from filecoin-project/feat/noise-gas-premium
Add noise to GasPremium calculation to help out message selection
2020-08-13 19:33:41 +02:00
Jakub Sztandera a6d79b26e4 Add comments
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 19:27:31 +02:00
Whyrusleeping 2db1001a07 Merge pull request #3033 from filecoin-project/fix/paych-alloc-lane
Fix bug with paych allocate lane
2020-08-13 10:24:12 -07:00
Jakub Sztandera d94119dada Merge pull request #3037 from filecoin-project/feat/mpool-selection-fixes
Some optimal selection fixes
2020-08-13 19:15:35 +02:00
vyzo 9aa8791920 make selection2 test less touchy 2020-08-13 20:02:08 +03:00
Jakub Sztandera ff7e441c82 Add noise to GasPremium calculation to help out message selection
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 18:57:06 +02:00
vyzo 2eff03fa1f small fixes in optimal selection
1. Remove noop updates from the previous dependencies
2. Update subsequent dependencies, which was the intention
2020-08-13 19:49:07 +03:00
Łukasz Magiera 5c0d86373e Merge pull request #3034 from filecoin-project/feat/stat-gas-limit-total
Add total gas used and limit to stats
2020-08-13 17:42:04 +02:00
Jakub Sztandera 8a8017c536 Merge pull request #3020 from filecoin-project/feat/lower-default-comm-maxfee
config: Set lower default max commit maxfee
2020-08-13 17:32:06 +02:00
Jakub Sztandera 3198d2d1e5 Add total gas used
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 16:55:12 +02:00
Jakub Sztandera dd619e85ff Add total gas limit to stats
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 16:48:29 +02:00
Dirk McCormick 536b2ad9d7 fix: paych - bug with allocating lane 2020-08-13 10:14:11 -04:00
Łukasz Magiera 7fc15b70ec Merge pull request #3025 from filecoin-project/feat/retdeals-in-allinfo
miner: Add retrieval deal list to miner allinfo
2020-08-13 15:58:12 +02:00
Jakub Sztandera 428e315d2a Merge pull request #3023 from filecoin-project/feat/mpool-optimimal-selection-redux
Further improvements for optimal message selection
2020-08-13 15:46:51 +02:00
Jakub Sztandera 91b5ec1aba Merge pull request #3032 from filecoin-project/feat/mpool-fix-capmaxfee
mpool: Fix capGasFee math again
2020-08-13 14:47:46 +02:00
Łukasz Magiera a883b1b9a9 Merge pull request #3031 from filecoin-project/feat/cleanup-pledgecoll-api
api: Remove unused StatePledgeCollateral
2020-08-13 14:16:48 +02:00
Łukasz Magiera 47582c0bb3 mpool: Fix capGasFee math again 2020-08-13 14:16:29 +02:00
Jakub Sztandera 0daed04c07 Don't run the test 50 times
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:11 +02:00
vyzo 09f5a64ce0 use gasPerf for negative performance check
it's the same in actually because effPerf<0 iff gasPerf<0, but we should be consistent

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:11 +02:00
vyzo f3eec33bec make OptimalSelection3 test pass
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:11 +02:00
vyzo 1aa8b6cab2 make OptimalSelection2 test pass
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:11 +02:00
vyzo 0f5598e59b compute average boost in tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:11 +02:00
vyzo 5e8ae7498a only adjust next chains if they have positve perf
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:11 +02:00
vyzo 7bbf1c7db2 don't mix negative performing chains with their parent, add some comments
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:10 +02:00
Jakub Sztandera f35555964d Better "optimal selection
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:10 +02:00
vyzo d25f386bb5 mixin the previous chain's effective performance to capture effect of dependencies
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-13 14:08:10 +02:00
Łukasz Magiera a366522c8d Fix lotus-fountain build 2020-08-13 14:04:45 +02:00
Łukasz Magiera 9a39bb4e78 api: Remove unused StatePledgeCollateral 2020-08-13 14:03:59 +02:00
Łukasz Magiera ccfb33c294 Merge pull request #3028 from filecoin-project/feat/fix-sched-deadlock
sealing sched: Fix deadlock in worker watcher
2020-08-13 13:46:07 +02:00
Łukasz Magiera 0cb58311c3 Merge pull request #3029 from filecoin-project/feat/net-reachability
cli: net reachability command
2020-08-13 13:45:19 +02:00
Łukasz Magiera 3b23ab952b gofmt 2020-08-13 13:44:43 +02:00
Łukasz Magiera 069c39fc12 Add reachability info to miner info all 2020-08-13 13:44:03 +02:00
Łukasz Magiera 3f2a62b5e2 cli: net reachability command 2020-08-13 13:18:14 +02:00
Łukasz Magiera 632fd36205 sealing sched: Fix deadlock in worker watcher 2020-08-13 12:17:24 +02:00
Łukasz Magiera f212ca60c8 Merge pull request #3027 from yaohcn/change-lock
change to RLock
2020-08-13 11:39:13 +02:00
yaohcn 1555984785 change to RLock 2020-08-13 17:31:18 +08:00
Łukasz Magiera 066bac0607 miner: Add retrieval deal list to miner allinfo 2020-08-13 10:51:13 +02:00
Łukasz Magiera 02650c7f25 miner: drop rewardsCmd from miner cmd list 2020-08-13 10:25:21 +02:00
Łukasz Magiera 936d861df5 gofmt 2020-08-13 10:20:41 +02:00
Łukasz Magiera f0d32f2c01 miner: fix/rename miner actor withdraw 2020-08-13 10:20:09 +02:00
Łukasz Magiera 7e36188519 Merge pull request #3013 from filecoin-project/frrist/fix-id-map-table
fix: id_address_map conflicts
2020-08-13 09:55:48 +02:00
Łukasz Magiera 97489f8bf9 config: Set lower default max commit maxfee 2020-08-13 09:40:19 +02:00
Whyrusleeping 5ac8424f93 Merge pull request #3014 from filecoin-project/feat/update-markets-v0.5.5
Update markets v0.5.5
2020-08-12 19:25:24 -07:00
hannahhoward c9a4bfba1a feat(markets): update markets v0.5.5 2020-08-12 19:02:20 -07:00
Whyrusleeping bd31e8d37e Merge pull request #2991 from filecoin-project/refactor/paych-lane-amt
paych: use spec-actors paych with AMT for lane states
2020-08-12 17:51:17 -07:00
Steven Allen cac3d07abb Fix payment channel for actor changes
Also, allocate the next available lane, instead of max+1. That way, we fill
holes.

Finally, check some error cases.
2020-08-12 17:29:00 -07:00
Dirk McCormick 335d165db6 refactor: use spec-actors paych with AMT for lane states 2020-08-12 17:06:18 -07:00
frrist 69a472c4ea bug: fix id_address_map table conflicts on reorg 2020-08-12 16:54:45 -07:00
frrist ce21557d64 bug: fix bug in predicate and add tests 2020-08-12 16:52:08 -07:00
Łukasz Magiera 0a2c2e9a07 Merge pull request #3012 from filecoin-project/feat/balance-checking
add function to check entire state tree balance
2020-08-13 01:29:38 +02:00
whyrusleeping b3a31d8823 add function to check entire state tree balance 2020-08-12 15:45:46 -07:00
Łukasz Magiera 4308d37c84 Merge pull request #3011 from filecoin-project/fix/nil-tipset-storageprovider
Add nil check in tipset change handler
2020-08-13 00:04:17 +02:00
Whyrusleeping cc54efd88b Merge pull request #2678 from filecoin-project/asr/genesis-expected
Check repo's genesis against baked-in genesis
2020-08-12 15:02:59 -07:00
Aayush Rajasekaran cae98ac0ab Update local-dev-net.md 2020-08-12 17:38:27 -04:00
Łukasz Magiera e7e068ebb5 Merge pull request #3008 from filecoin-project/fix/lints
Fix lint errors an broken tests
2020-08-12 23:28:01 +02:00
Ingar Shu 43e1b57c3f add nil check in tipset change handler 2020-08-12 14:27:39 -07:00
Łukasz Magiera 5561d66082 Merge pull request #3002 from keyko-io/feat/verified-price
Showing verified price in asks
2020-08-12 23:26:53 +02:00
Aayush Rajasekaran d614135ebb Check repo's genesis against baked-in genesis 2020-08-12 17:22:16 -04:00
Steven Allen 3ef3f570fb Fix lint errors an broken tests 2020-08-12 23:16:44 +02:00
Aayush Rajasekaran c73d597d87 Merge pull request #2961 from filecoin-project/asr/genesis-premined
Revise TotalCircSupply
2020-08-12 17:12:54 -04:00
Łukasz Magiera e83fa0dd04 Merge pull request #3009 from filecoin-project/feat/offline_commp_calculation
Stop requiring miner address / sector size for `lotus client commP`
2020-08-12 22:51:34 +02:00
Łukasz Magiera 73ad453748 Merge pull request #3010 from filecoin-project/fix/paych-sentinel-type
Use regular cid as paych sentinel type
2020-08-12 22:49:56 +02:00
Łukasz Magiera 8408a56e55 Merge pull request #3005 from filecoin-project/feat/max-msg-fee-config
Miner fee config
2020-08-12 22:37:15 +02:00
Dirk McCormick e689c305d2 fix: revert to using cid for paych wait sentinel 2020-08-12 16:29:44 -04:00
Łukasz Magiera 12f7e2d9bf Use a struct for send metadata in MpoolPushMessage 2020-08-12 22:17:29 +02:00
Aayush Rajasekaran 5b280057b8 Move genesis locked funds into filVested 2020-08-12 16:16:35 -04:00
Peter Rabbitson fd49ef8de6 Stop requiring miner address / sector size for lotus client commP
At present, and at least for the medium term (even with the transition to NSE)
the structure of a piece (and thus commP) will remain identical for every size
of sector.

The offline deal flow would benefit greatly if the `lotus client commP`
interface is able to calculate commP without having access to a fully synced
sync, or without even being online.

This is particularly important for filecoin-discover, as we want to allow
miners to spot-check their purchased HDDs, way before they need to accept
the mainnet deal proposals.

See comment/links in node/impl/client/client.go for details on code flow
2020-08-12 22:03:00 +02:00
Łukasz Magiera fd4d2067a9 mpool: Fix capGasFee math 2020-08-12 22:01:31 +02:00
Łukasz Magiera e1a1b325bc Merge remote-tracking branch 'origin/next' into feat/max-msg-fee-config 2020-08-12 21:55:03 +02:00
Łukasz Magiera 43586ed9a1 Merge pull request #3000 from filecoin-project/feat/mpool-add-semaphore
Add semaphore in push and friends to reduce lock contention
2020-08-12 21:53:59 +02:00
Łukasz Magiera ba28169356 Merge remote-tracking branch 'origin/master' into next 2020-08-12 21:33:06 +02:00
Aayush Rajasekaran b6b5a79833 Get FilMined from the reward actor's state, not balance 2020-08-12 15:32:11 -04:00
Aayush Rajasekaran 165bcc1e38 Extract stmgr's genesis infos into a new struct 2020-08-12 15:32:11 -04:00
Aayush Rajasekaran 48ab706691 Subtract out genesis pledge and market funds when calculating circ supply 2020-08-12 15:32:11 -04:00
Aayush Rajasekaran fe2da35a45 Move GetCircSupply out of the vm, and into stmgr 2020-08-12 15:32:07 -04:00
Aayush Rajasekaran 5933e64de1 Include premined actors in vested funds calculation 2020-08-12 15:19:48 -04:00
Łukasz Magiera bfa0ae16b0 Merge pull request #2965 from filecoin-project/steb/update-actors
Update specs-actors & cbor-gen
2020-08-12 21:18:05 +02:00
Łukasz Magiera fd41a16f84 Merge pull request #3007 from filecoin-project/fix/rbf-gaspremoim
Validate message pool config, validate GasPremium < GasFeeCap
2020-08-12 20:40:08 +02:00
Łukasz Magiera 491e24c90a Merge pull request #2994 from filecoin-project/ingar/retrieval-logging
Generate more useful output during client retrieval
2020-08-12 20:36:14 +02:00
Jakub Sztandera f7c222e42e Validate message pool config, validate GasPremium < GasFeeCap
don't use configured RBF for mpool

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-12 20:31:34 +02:00
Łukasz Magiera 2a699e1de9 Merge pull request #3006 from filecoin-project/fix/disable-secio
RIP secio
2020-08-12 20:17:19 +02:00
vyzo e17732b365 remove secio support, replace with noise 2020-08-12 21:15:16 +03:00
vyzo e50ea377ef gomod: add go-libp2p-noise, remove go-libp2p-secio 2020-08-12 21:14:52 +03:00
Jakub Sztandera c68b023d3f Merge pull request #2939 from filecoin-project/feat/mpool-repub
Update messagepool republish logic
2020-08-12 20:08:28 +02:00
Łukasz Magiera 6fe743f3a9 Fix tests 2020-08-12 20:03:07 +02:00
Łukasz Magiera 03c1776b43 types: Add text (un)marshaler on FIL 2020-08-12 19:58:39 +02:00
Łukasz Magiera 78eaac6534 config: Test deafult toml roundtrip 2020-08-12 19:55:43 +02:00
Ingar Shu 8f56814ffb Change formatting, stringify errors before returning over JSONRPC 2020-08-12 10:54:15 -07:00
Łukasz Magiera 6f890a3edd Miner fee config 2020-08-12 19:47:09 +02:00
Steven Allen 6f031993ba Use the deadline open as the wpost commit epoch 2020-08-12 10:33:18 -07:00
Steven Allen 41f1c74ae2 Set a minimum sector lifetime 2020-08-12 10:33:18 -07:00
Steven Allen e18904bff5 [WIP] fix post submission 2020-08-12 10:33:18 -07:00
Steven Allen 5c715021c1 update chain-validation 2020-08-12 10:33:07 -07:00
vyzo 43b30a80c1 retry PushWithNonce if it fails with ErrTryAgain 2020-08-12 20:32:41 +03:00
Whyrusleeping ed72aa1307 implement randomness distinction 2020-08-12 10:32:39 -07:00
Steven Allen 9248e5a572 Update specs-actors, cbor-gen, and go-address 2020-08-12 10:32:39 -07:00
Steven Allen 9135a5d048 Pass bitfields by-value
This ensures we can't end up decoding nil bitfields from clients when not
expecting them.

Part of https://github.com/filecoin-project/specs-actors/issues/895. Please see
this issue for details and leave any comments there.
2020-08-12 10:32:39 -07:00
vyzo f2ac17845b relinquish the lock while signing in PushWithNonce 2020-08-12 20:26:58 +03:00
Łukasz Magiera d0147aa50f Add maxFee param to MpoolPushMessage 2020-08-12 19:06:16 +02:00
Łukasz Magiera 9d20a5c97b Merge pull request #3003 from filecoin-project/fix/charset-html
Set charset to UTF-8 in compute state output
2020-08-12 16:50:45 +02:00
Sami Mäkelä 5791765526 these were mixed up 2020-08-12 17:48:36 +03:00
Sami Mäkelä b179eaea21 updating this 2020-08-12 17:46:53 +03:00
Sami Mäkelä b252715f53 bad merge 2020-08-12 17:40:29 +03:00
Jakub Sztandera f2e89e6b16 Set charset to UTF-8 in compute state output
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-12 16:38:32 +02:00
Sami Mäkelä 8367e79279 now working 2020-08-12 17:36:07 +03:00
Sami Mäkelä 5169785c91 merge 2020-08-12 14:15:03 +03:00
Sami Mäkelä ac6e716ebd merge 2020-08-12 14:12:33 +03:00
Łukasz Magiera e2c6cc6c6d Merge pull request #2958 from filecoin-project/asr/sync-test
MessagesForTipset should filter out bad nonce messages
2020-08-12 13:05:57 +02:00
vyzo 7be18df6ea add semaphore in push and friends to reduce lock contention 2020-08-12 10:38:40 +03:00
vyzo 472e502218 fix republishing chain selection to account for edge case of inordinately long chains 2020-08-12 09:41:02 +03:00
vyzo 7b16fe3792 hold ts lock longer 2020-08-12 09:18:04 +03:00
vyzo 47f81f1ad6 increase repub message limit to 30 2020-08-12 09:13:57 +03:00
vyzo cf34fe5cc3 extend the republish interval to something more reasonable
pubsub timecache duration + 5 blocks + propagation delay
2020-08-12 09:13:57 +03:00
vyzo 7396212c89 slightly increase the replublish interval to include the propagation delay as well 2020-08-12 09:13:57 +03:00
vyzo e876617c82 new message republishing logic 2020-08-12 09:13:57 +03:00
vyzo 42951d05a5 refactor messagepool provider out of the main messagepool implementation 2020-08-12 09:13:57 +03:00
Aayush Rajasekaran 45cac72f7a Merge pull request #2996 from filecoin-project/asr/msg-nil
Add checks to ValidForBlockInclusion
2020-08-11 20:04:20 -04:00
Aayush Rajasekaran 922d568e12 Add checks to ValidForBlockInclusion 2020-08-11 19:51:12 -04:00
Łukasz Magiera a5e0a05932 Merge pull request #2995 from filecoin-project/feat/v28-proofs
v28 Proofs
2020-08-12 01:10:06 +02:00
Whyrusleeping 8c516df87b Merge pull request #2992 from filecoin-project/feat/configurable-chain-store-caches
add env vars to configure chain store cache sizes
2020-08-11 16:01:38 -07:00
Łukasz Magiera f537c48f93 v28 Proofs 2020-08-12 00:33:30 +02:00
Jakub Sztandera 4b93c5d194 Merge pull request #2993 from filecoin-project/fix/gasperf-div-0
Small fixes to mpool Trim
2020-08-12 00:31:35 +02:00
whyrusleeping 1fc768fb32 add env vars to configure chain store cache sizes 2020-08-11 15:07:17 -07:00
Jakub Sztandera 2efb18f677 Small fixes to mpool Trim
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 23:55:06 +02:00
Jakub Sztandera d6f9383528 Merge pull request #2979 from filecoin-project/feat/mpool-optimal-seletion
nearly optimal message pool seletion
2020-08-11 23:45:43 +02:00
Ingar Shu 02b0c8dd94 Watch context for completion also 2020-08-11 14:43:55 -07:00
Jakub Sztandera f018e870dc Address review
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 23:35:06 +02:00
Ingar Shu 53e06f358a client retrieval logging 2020-08-11 13:04:00 -07:00
vyzo 9032163c5a turn probability eyeballing into an actual test 2020-08-11 20:47:50 +03:00
Jakub Sztandera a45febc065 Fix MpoolLocker
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 19:32:31 +02:00
Łukasz Magiera 75f5afc0da Merge pull request #2985 from filecoin-project/refactor/paych-mgr-api
Refactor paych mgr apis for easier mocking
2020-08-11 19:23:52 +02:00
vyzo a467deede6 fix typos in comment 2020-08-11 20:20:59 +03:00
Łukasz Magiera 763074bb2d Merge pull request #2986 from filecoin-project/refactor/paych-wait-sentinel
Paych manager: use special type for wait sentinel
2020-08-11 19:17:32 +02:00
Dirk McCormick f857ee159e refactor: unify manager interfaces for easier mocks 2020-08-11 13:15:39 -04:00
vyzo 2aaf14b558 mute timing logs if they are under 1ms 2020-08-11 20:00:51 +03:00
Łukasz Magiera 01af855450 Merge pull request #2983 from nikkolasg/feat/cachedrand
Use cache of verified drand values
2020-08-11 18:34:14 +02:00
vyzo d3baf2b9eb fix edge case in chain creation 2020-08-11 19:32:28 +03:00
Łukasz Magiera 51cf4a5749 Merge pull request #2962 from filecoin-project/refactor/rip-paych-pubsub
Paych refactor: replace custom pubsub impl with lib
2020-08-11 18:32:05 +02:00
Łukasz Magiera 0409c5a482 Merge pull request #2944 from filecoin-project/feat/stmgr-wait-ignore-gas
stmgr: Allow replacing gas values in WaitMsg
2020-08-11 17:51:28 +02:00
Raúl Kripalani cc859d3948 journal: wdpost: record proofs_processed even if no eligible partitions. 2020-08-11 16:49:18 +01:00
Jakub Sztandera 56e3f7da7d Fix getGasReward and Trim
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 17:18:46 +02:00
Dirk McCormick a881e58cd6 refactor: use special type for paych wait sentinel 2020-08-11 10:45:45 -04:00
Jakub Sztandera 4da3aedacb Work on competitve test a bit
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
vyzo 0091f3a9ce add competitive selection test
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
vyzo 268d435ce0 add some optimal selection tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
Jakub Sztandera b309e80e41 Wire in Ticket Quality to MpoolSelect
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
Jakub Sztandera 2057433f48 Add needed files
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
Jakub Sztandera d3c8f295c2 Use real blockProbabilities function
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
vyzo 080614098d fix edge case of effective performance for chains that dont fit in any partition
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:27 +02:00
vyzo 8eff3a25f9 use BlockGasLimit instead of residual for partitioning
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:26 +02:00
vyzo 28fe602a9b pass a ticket quality to mpool.SelectMessages -- temporary
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:26 +02:00
vyzo ca803d99fe nearly optimal message selection for a given ticket quality
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-11 16:14:20 +02:00
Raúl Kripalani 200b0f72cc mpool/repub: only record in journal if actually repubbing. 2020-08-11 15:06:13 +01:00
Raúl Kripalani 8f19fff1ec fix tests. 2020-08-11 14:47:02 +01:00
Raúl Kripalani b534ab9d3c panic recovery in MaybeRecordEvent; handle nil current tipsets in wdpost. 2020-08-11 14:28:00 +01:00
Raúl Kripalani 2ea5abdfb5 wire journal into miner. 2020-08-11 13:48:32 +01:00
Raúl Kripalani d53c6f2599 storage-fsm: emit sealing state transition notifications. 2020-08-11 13:23:40 +01:00
Raúl Kripalani 5e2c28d7e9 add comment. 2020-08-11 13:10:22 +01:00
nikkolasg 37fe0dbed2 correct return argument 2020-08-11 13:00:23 +01:00
nikkolasg 7a7cce2538 use cache from drand 2020-08-11 12:58:27 +01:00
Raúl Kripalani bca516b028 Merge remote-tracking branch 'origin/next' into inmem-journal 2020-08-11 12:42:39 +01:00
Raúl Kripalani 92598237c3 Merge branch 'next' into inmem-journal 2020-08-11 12:41:11 +01:00
Łukasz Magiera 657b390193 Bump version 2020-08-11 12:11:59 +02:00
Łukasz Magiera fe83334ed9 Merge pull request #2978 from filecoin-project/fix/buildall
Fix buildall / Bump API version
2020-08-11 12:08:18 +02:00
Łukasz Magiera 55355c4165 Bump API version 2020-08-11 10:22:58 +02:00
Łukasz Magiera 878b8c7678 Fix buildall 2020-08-11 10:22:49 +02:00
Łukasz Magiera f25611d768 Merge pull request #2974 from filecoin-project/asr/spelling
fix spelling
2020-08-11 10:17:26 +02:00
Łukasz Magiera 90b5e47fa5 Merge pull request #2976 from yaohcn/space-check
add space check in StorageFindSector
2020-08-11 10:06:33 +02:00
yaohcn 6b0f607f4b add space check in StorageFindSector 2020-08-11 15:27:03 +08:00
Aayush Rajasekaran 5e54219be9 fix spelling 2020-08-11 01:10:12 -04:00
Łukasz Magiera 957d83f069 Merge pull request #2955 from filecoin-project/refactor/paych-collect
Refactor: move paych collect inside manager
2020-08-11 01:42:10 +02:00
Łukasz Magiera c8a5e31d65 Merge pull request #2966 from filecoin-project/feat/slightly-nicer-chain-list
more informative chain list
2020-08-11 01:40:28 +02:00
whyrusleeping 347ed154b8 more informative chain list 2020-08-10 16:22:02 -07:00
Dirk McCormick 51444c7f18 refactor: replace custom paych pubsub with existing impl 2020-08-10 17:53:10 -04:00
Łukasz Magiera 6d85d379ba Merge remote-tracking branch 'origin/master' into next 2020-08-10 23:09:00 +02:00
Łukasz Magiera a86caaa11d Merge pull request #2947 from filecoin-project/feat/paych-merge-pending-add-funds
Payment channels manager: merge queued add funds
2020-08-10 22:32:21 +02:00
Aayush Rajasekaran 532c32a741 Add new BlockMsgsForTipset() 2020-08-10 15:55:44 -04:00
vyzo 45db0abb59 Merge pull request #2957 from filecoin-project/gomod/update-pubsub
update go-libp2p-pubsub@v0.3.4
2020-08-10 22:13:22 +03:00
vyzo 110ccfc88f gomod: update go-libp2p-pubsub@v0.3.4 2020-08-10 22:08:29 +03:00
Aayush Rajasekaran c72f853e09 Add a test around duplicate nonces 2020-08-10 14:28:02 -04:00
Dirk McCormick a6100b7e46 refactor: move collect inside paych manager 2020-08-10 13:21:25 -04:00
Łukasz Magiera fb0afbf3b0 Merge pull request #2949 from filecoin-project/feat/import-storage-repos
Import storage repos into lotus
2020-08-10 18:30:34 +02:00
Łukasz Magiera 624731cb80 More gomod fixing 2020-08-10 18:03:54 +02:00
Łukasz Magiera 641eb3e2cf Merge storage-fsm subtree 2020-08-10 17:40:27 +02:00
Łukasz Magiera 85d8133f4a Fix gomods 2020-08-10 17:31:14 +02:00
Dirk McCormick 0edf65855a feat: paychmgr - merge queued add funds 2020-08-10 11:26:13 -04:00
Łukasz Magiera 0eaf44eb31 Merge sector-storage subtree 2020-08-10 17:25:46 +02:00
Raúl Kripalani 5074ce5a38 move in-mem journal to Project Oni. 2020-08-10 15:02:15 +01:00
Łukasz Magiera bc381fc053 stmgr: Allow changing gas values in WaitMsg 2020-08-10 14:55:52 +02:00
Łukasz Magiera 0d1174cb81 Merge pull request #2924 from filecoin-project/feat/mpool-cfg-overesitm
Add GasLimitOverestimation to mpool config
2020-08-10 11:33:05 +02:00
Jakub Sztandera 3710f33e14 Don't reject messages that don't pass RBF, ignore them
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 03:17:40 +02:00
Jakub Sztandera 5ea9df1824 Use 25% overesitm
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 02:22:37 +02:00
Jakub Sztandera a826877ee3 Reduce overesitm to 10%, remove pledgeSectors test rate limit
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 00:37:24 +02:00
Jakub Sztandera ea92f5f1ff Handle error
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 00:30:00 +02:00
Jakub Sztandera 46fd9d5e80 Quiet down pending messages, fix GasLimit estimation, reduce fee cap
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 00:29:59 +02:00
Jakub Sztandera b41a0ea197 Print number of prioris
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 00:29:59 +02:00
Jakub Sztandera ed2778f785 Make MpoolPushMessage message wait for the first message to be done
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-09 00:29:59 +02:00
vyzo bcb33d75d0 Merge pull request #2918 from filecoin-project/feat/mpool-tests
Some more mpool tests
2020-08-08 22:03:07 +03:00
Jakub Sztandera ae1ae58dd7 Add bash function for accessing API
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-08 17:10:09 +02:00
Jakub Sztandera 5f157affdd Add GasLimitOverestimation to mpool config
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-08 17:09:47 +02:00
Jakub Sztandera 44551124e2 Merge pull request #2923 from filecoin-project/feat/mpool-more-timings
also log chain creation timings
2020-08-08 16:13:15 +02:00
vyzo 9bc5d9489d also log chain creation timings 2020-08-08 17:07:37 +03:00
vyzo d04d947cb7 Merge pull request #2922 from filecoin-project/feat/mpool-timings
Add timings to various components of message selection
2020-08-08 17:01:13 +03:00
vyzo b469277046 use structured logging for timings 2020-08-08 16:59:08 +03:00
vyzo 809e7d5390 add timings to various components of message selection 2020-08-08 16:51:30 +03:00
vyzo 4cdb5f7b81 add unit test for priority message selection 2020-08-08 11:22:47 +03:00
vyzo 2d9f2c7e72 add unit test for message skipping in chain creation 2020-08-08 11:16:50 +03:00
Łukasz Magiera 40ac52a862 Merge pull request #2910 from filecoin-project/feat/chainwatch/capture-circulating-fil
feat(chainwatch): capture circulating fil per tipset metric
2020-08-08 01:51:07 +02:00
Mike Greenberg b2b7f14432 feat(chainwatch): capture circulating fil per tipset metric 2020-08-07 19:39:52 -04:00
Łukasz Magiera e65db33d77 Merge pull request #2909 from filecoin-project/fix/mpool-bug
fix mpool bugs
2020-08-08 01:32:28 +02:00
vyzo 4c8c8f48f1 skip messages with nonce before the current nonce in chain creation 2020-08-08 02:16:56 +03:00
Łukasz Magiera 702d95503b Merge pull request #2908 from filecoin-project/fix/gasfee-est
Fix/gasfee est
2020-08-08 00:50:38 +02:00
vyzo 01b8a6de94 remove bug line 2020-08-08 01:45:34 +03:00
Łukasz Magiera a193feec06 gofmt 2020-08-08 00:42:08 +02:00
Jakub Sztandera b7fe5d438f Merge pull request #2906 from filecoin-project/feat/miner-block-journal
add a journal entry when miners mine a block
2020-08-08 00:41:57 +02:00
Łukasz Magiera af15273f71 gas: Corruntly do float math 2020-08-08 00:41:57 +02:00
Jakub Sztandera aef3a4d21d Merge pull request #2907 from filecoin-project/misc/sync-times
Simplify sync logic around tipset expansions, ff and forking
2020-08-08 00:23:50 +02:00
Jakub Sztandera 239b5f547a Add chain.basefee
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 23:53:11 +02:00
whyrusleeping d1d4ca65b2 add block timestamp to journal 2020-08-07 14:20:51 -07:00
Jakub Sztandera bf774fc29b Simplify sync logic around tipset expansions, ff and forking
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 23:02:13 +02:00
whyrusleeping e6c70c19d0 add a journal entry when miners mine a block 2020-08-07 13:51:41 -07:00
Whyrusleeping 383e28e6e7 Merge pull request #2902 from filecoin-project/asr/error-fix
Fix error message
2020-08-07 13:38:07 -07:00
Łukasz Magiera 5e7adf5b3f Merge pull request #2905 from filecoin-project/feat/circ-supply-cmd
add command to view circulating supply
2020-08-07 22:12:23 +02:00
whyrusleeping fbe206f843 add command to view circulating supply 2020-08-07 12:57:03 -07:00
Łukasz Magiera f7273bc4ee Merge pull request #2904 from filecoin-project/fix/lotus-pcr-bigint
lotus-pcr: initialize bigint; send refund to worker
2020-08-07 21:54:59 +02:00
Travis Person cdc6086308 lotus-pcr: initialize bigint; send refund to worker 2020-08-07 19:25:53 +00:00
Mike Greenberg eaf0861f20 Merge pull request #2901 from filecoin-project/feat/chainwatch/message-size
feat(chainwatch): track message size in bytes
2020-08-07 14:38:49 -04:00
Aayush Rajasekaran 88f677e891 Fix error message 2020-08-07 14:36:24 -04:00
Mike Greenberg 4ed968b79c feat(chainwatch): track message size in bytes 2020-08-07 14:25:35 -04:00
Łukasz Magiera 660929519c Merge pull request #2900 from filecoin-project/fix/feecap-bigspender
Don't spend eveything on message fees
2020-08-07 20:19:45 +02:00
Jakub Sztandera f809e478f4 Don't spend eveything on message fees
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 20:09:50 +02:00
刘林欣 4bf932a4d7 show deal list when StateMarketStorageDeal not found deal 2020-08-07 19:43:38 +02:00
Łukasz Magiera 9898b4504f Merge pull request #2889 from filecoin-project/feat/lotus-pcr
add lotus-pcr command tool
2020-08-07 19:39:31 +02:00
Łukasz Magiera 7a18578706 Merge pull request #2897 from filecoin-project/fix/paych-on-complete
Remove unneeded onComplete call in paych queue
2020-08-07 19:33:25 +02:00
Łukasz Magiera 54a6d58c2e Merge pull request #2896 from filecoin-project/feat/mpool-config-priority
message pool config and priority addresses
2020-08-07 19:32:27 +02:00
vyzo 7e16e3e220 satisfy linter 2020-08-07 20:20:22 +03:00
Travis Person f5f11af73f lotus-pcr: ignore all actors except miners 2020-08-07 17:20:18 +00:00
vyzo f6e8f02fd2 add persistence for mpool config 2020-08-07 20:10:09 +03:00
Łukasz Magiera f1140e5c89 Merge pull request #2898 from filecoin-project/inc/min-gas-premium
Update MinGasPremium for estimation to 10e3, improve estimation
2020-08-07 19:03:36 +02:00
Travis Person 2f9cef38a1 add lotus-pcr command tool
Lotus PCR will attempt to reimbursement the initial pledge collateral
of the PreCommitSector miner actor method for all miners on the network.
2020-08-07 16:56:30 +00:00
Dirk McCormick d3aa5e638d refactor: remove unused method 2020-08-07 12:53:40 -04:00
Dirk McCormick e488996fd0 fix: remove unused onComplete callback 2020-08-07 12:53:40 -04:00
vyzo 1b56b88132 add cooldown to message pruning 2020-08-07 19:51:49 +03:00
vyzo c735d0da0e fix test compilation issue 2020-08-07 19:51:49 +03:00
vyzo b40346e1ea never prune priority actor messages 2020-08-07 19:51:49 +03:00
vyzo 56c2894c80 add priority actor message selection 2020-08-07 19:51:49 +03:00
vyzo c4251912dd mpool config api 2020-08-07 19:51:49 +03:00
vyzo 42e1338ffe mpool config 2020-08-07 19:51:49 +03:00
Jakub Sztandera 1063908dd3 Update MinGasPremium for estimation to 10e3, improve estimation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 18:48:05 +02:00
Łukasz Magiera 70f93da5dd Merge pull request #2899 from filecoin-project/feat/cw-block-basefee
chainwatch: Record parent_base_fee in blocks
2020-08-07 18:46:29 +02:00
Łukasz Magiera a939c30256 chainwatch: Record parent_base_fee in blocks 2020-08-07 18:38:19 +02:00
Łukasz Magiera e0b86782e9 Merge pull request #2895 from filecoin-project/feat/fix-tests
Fix
2020-08-07 18:37:40 +02:00
Łukasz Magiera c62859e38b Unrevert #2832 with fixed code 2020-08-07 18:09:53 +02:00
Łukasz Magiera 3bac504fc3 Use drand mainnet 2020-08-07 18:09:01 +02:00
Łukasz Magiera 09b4971698 Less aggresive 2k devnet block time 2020-08-07 17:51:35 +02:00
Łukasz Magiera c8cf8f3ee1 Revert #2832 fully 2020-08-07 17:51:03 +02:00
Łukasz Magiera 9b28be14cd Betting logs 2020-08-07 17:36:15 +02:00
Jakub Sztandera 8aa8c15fb8 Merge pull request #2390 from filecoin-project/annoying-logs
rationalise annoying logs
2020-08-07 16:12:54 +02:00
Łukasz Magiera 3fe8b1e732 Better slashfilter logging 2020-08-07 16:08:01 +02:00
Łukasz Magiera cad59b045b More pond-related fixes 2020-08-07 16:07:48 +02:00
Anton Evangelatov 9fa42680fe rationalise annoying logs. 2020-08-07 15:53:55 +02:00
Łukasz Magiera 73342e1fcf pond: Fix network setup 2020-08-07 15:19:12 +02:00
Łukasz Magiera 051be61452 gofmt 2020-08-07 15:04:10 +02:00
Łukasz Magiera 1101d4b66a Fix testground build 2020-08-07 15:04:00 +02:00
Łukasz Magiera b216785071 sync: Revert #2858 2020-08-07 14:46:46 +02:00
Łukasz Magiera d31d6e61d8 miner: Don't wait for beacon entries 2020-08-07 14:43:55 +02:00
Łukasz Magiera 60545e6722 mempool: Allow 0 gasPerf chains 2020-08-07 14:43:32 +02:00
Łukasz Magiera 5a50d293b9 Merge pull request #2891 from filecoin-project/feat/mpool-negative-chain-pruning
some small improvements in the handling of non-performing chains
2020-08-07 10:14:09 +02:00
Łukasz Magiera d9f3233d5f Merge pull request #2890 from filecoin-project/test/mpool-selection-trimming
add regression test for selection trimming
2020-08-07 10:10:26 +02:00
Łukasz Magiera 5a5401dce3 Merge pull request #2885 from filecoin-project/asr/cli
Fix send CLI
2020-08-07 10:01:24 +02:00
vyzo b31b322e77 also check for 0 in early gasPerf check 2020-08-07 10:55:43 +03:00
vyzo 26f025bc96 some small improvements in the handling of non-performing chains
1. We break the message accumulation the first time we see a chain with gasPerf <= 0
   as it is not profitable to include them in the block
2. When trimming, we remove also trim negative performing messages to make the trimmed
   chain profitable.
2020-08-07 10:33:00 +03:00
vyzo e977649f29 add regression test for selection trimming 2020-08-07 10:10:54 +03:00
Aayush Rajasekaran c748dea537 Fix send CLI 2020-08-07 02:37:08 -04:00
Łukasz Magiera ec098d4833 Merge pull request #2883 from filecoin-project/update/next-master
Merge latest master into next
2020-08-07 05:12:33 +02:00
Łukasz Magiera 823d8a64e1 Merge remote-tracking branch 'origin/master' into update/next-master 2020-08-07 05:09:26 +02:00
Łukasz Magiera b7695f9408 Merge pull request #2874 from filecoin-project/feat/dyn-base-fee
Introduce dynamic network fee
2020-08-07 04:49:36 +02:00
Aayush Rajasekaran bab7b8029b update chain-val again 2020-08-06 22:34:30 -04:00
Łukasz Magiera 617046fc0e params: Bump block message limit 2020-08-07 04:16:05 +02:00
Łukasz Magiera 0612c2eab9 Merge remote-tracking branch 'origin/next' into feat/dyn-base-fee 2020-08-07 04:15:42 +02:00
Jakub Sztandera 884d03f7f1 address feedback
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 04:09:01 +02:00
Łukasz Magiera 20e49e975f Merge pull request #2832 from filecoin-project/fix/mining-waits-beacon
recheck best known tipset after waiting for random beacon entry
2020-08-07 04:07:25 +02:00
Jakub Sztandera 467172f437 Accually add tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 04:01:58 +02:00
Jakub Sztandera 122ec8c9be Add CalculateBaseFee tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 03:34:50 +02:00
Jakub Sztandera 05c527b681 Hold tipset lock while selecting messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 02:48:53 +02:00
whyrusleeping de86167a7b dont double close channels 2020-08-06 17:26:28 -07:00
Jakub Sztandera 927f355001 Remove MpoolEstimateGasPrice
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 02:19:21 +02:00
whyrusleeping 41bc8f14a2 fix tests 2020-08-06 17:05:35 -07:00
Jakub Sztandera aa17d2bdf3 Add tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 01:57:21 +02:00
Aayush Rajasekaran 754d6cfea3 Update chain-val 2020-08-06 19:47:23 -04:00
Jakub Sztandera f55ed9ea09 Update serialization vectors
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 01:21:01 +02:00
Łukasz Magiera 52c993043c Merge pull request #2882 from filecoin-project/fix/selmsgs-hang
mpool: Fix SelectMessages hanging
2020-08-07 01:20:37 +02:00
Łukasz Magiera 402b4b6c70 mpool: Fix SelectMessages hanging 2020-08-07 01:01:45 +02:00
Jakub Sztandera f45970a0d5 Fix FeeCap estimation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 00:54:58 +02:00
Jakub Sztandera 2b2b632cd6 Make mpool select only profitable messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 00:40:25 +02:00
Mike Greenberg 79b701d347 fix(chainwatch): gas columns are snake_cased; fix SQL bugs 2020-08-06 18:28:54 -04:00
Jakub Sztandera e1de0e3408 Estimate FeeCap 20 blocks in the future
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-07 00:10:55 +02:00
Łukasz Magiera 07bf155295 Merge remote-tracking branch 'origin/next' into feat/dyn-base-fee 2020-08-06 23:41:54 +02:00
Łukasz Magiera 6ecd831cae Fix TestPaymentChannels 2020-08-06 23:40:55 +02:00
Jakub Sztandera cb47f877a5 Add todo
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 23:35:38 +02:00
Łukasz Magiera 738296e8e9 Merge pull request #2880 from filecoin-project/misc/gas-update
Update gas numbers
2020-08-06 23:35:04 +02:00
Łukasz Magiera 5ef7328fe3 Rerun cbor-gen 2020-08-06 23:27:23 +02:00
Jakub Sztandera 5f826a2147 Update gas numbers
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 23:27:09 +02:00
Jakub Sztandera 94a38cd97d Fix mpool test
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 23:14:09 +02:00
Jakub Sztandera ab08858b45 Delete GasPrice from this world
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 23:08:42 +02:00
whyrusleeping 32a5c52105 add missing file 2020-08-06 16:54:16 -04:00
whyrusleeping 57d57e54a1 fix api inclusion 2020-08-06 16:54:16 -04:00
whyrusleeping 5dbbf50f62 recheck best known tipset after waiting for random beacon entry to become available 2020-08-06 16:54:16 -04:00
Łukasz Magiera f8a6e4dce7 Merge pull request #2878 from filecoin-project/feat/better-localnet-docs
Feat/better localnet docs
2020-08-06 22:52:59 +02:00
Łukasz Magiera 4a831f3dd2 Merge pull request #2877 from filecoin-project/fix/unsealbug
Fix unseal bug, reproduce in test
2020-08-06 22:51:43 +02:00
Whyrusleeping 2212c10f3a Merge pull request #2858 from filecoin-project/asr/sync-fix
Fix collectHeaders when incoming is partially built on latest tipset
2020-08-06 13:46:44 -07:00
whyrusleeping 3042183825 allow wallet import to set default address 2020-08-06 13:34:11 -07:00
Jakub Sztandera 4004c657b9 Fix chain types tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 22:23:54 +02:00
hannahhoward 78aa615b4d fix(markets): fix unsealing bug
when commD hasn't been set, just pass cid.Undef
2020-08-06 13:22:45 -07:00
hannahhoward 75771d10d4 fix(markets): replicate unsealing bug 2020-08-06 13:17:16 -07:00
Łukasz Magiera 4f509d9b67 Merge pull request #2813 from filecoin-project/feat/unseal-on-workers
workers: Enable unseal support
2020-08-06 22:03:43 +02:00
Łukasz Magiera aa4bd66f11 Merge pull request #2873 from filecoin-project/fix/paych-cli-get
Fix CLI cmd: paych get
2020-08-06 21:50:15 +02:00
Jakub Sztandera c29dd72174 add check for feecap and premium to vm.checkMessage
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:45:03 +02:00
Łukasz Magiera 245fe6e3df Merge pull request #2871 from filecoin-project/fix/bail-on-store-err
Bail out if there's an error writing state to store
2020-08-06 21:43:13 +02:00
Jakub Sztandera 562a3f482e Fix GasEstimateGasLimit
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:28:47 +02:00
Jakub Sztandera d6765847df Fix some messagepool tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:25:30 +02:00
Jakub Sztandera 6562b7a4bc Fix some tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:14:55 +02:00
Jakub Sztandera b384ac6943 Compute correct base burns, miner tip and so on
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:14:38 +02:00
Jakub Sztandera 722d6e8ffb Introduce base fee
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:14:38 +02:00
Jakub Sztandera a625943fc3 Fix Weight issue
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-06 21:14:38 +02:00
Dirk McCormick 2de0c9cb1a fix: make 'lotus paych get' block until funds available 2020-08-06 14:54:17 -04:00
whyrusleeping 035fcad3d4 use car extension for genesis file 2020-08-06 11:26:43 -07:00
Łukasz Magiera e54a87f91b Merge pull request #2838 from filecoin-project/feat/message-pool-selection
New message pool selection logic
2020-08-06 20:19:35 +02:00
Dirk McCormick 42e1906d9c fix: paychmgr - bail out if there's an error writing to store 2020-08-06 14:01:38 -04:00
Łukasz Magiera 85f4bc7717 Merge pull request #2869 from filecoin-project/fix/paych-sleepy-tests
Fix paych sleepy tests
2020-08-06 19:57:09 +02:00
vyzo 2166e9a0ff account for message Value in balance calculation 2020-08-06 20:54:27 +03:00
Łukasz Magiera e2d5451ffb Merge pull request #2715 from filecoin-project/schomatis/blocksync/review
Rewrite internal logic of block sync client
2020-08-06 19:46:58 +02:00
Dirk McCormick 0a3e51a74c refactor: remove sleeps from paych tests 2020-08-06 13:39:13 -04:00
Łukasz Magiera 98420754a9 Merge pull request #2864 from filecoin-project/fix/next-buildall
Fix buildall
2020-08-06 19:33:00 +02:00
Łukasz Magiera 621bc3a251 Merge pull request #2866 from filecoin-project/fix/sha512-sum-release-bundle
release: write full sha512sum output to file
2020-08-06 19:21:06 +02:00
vyzo 7598a9d2fe remove deprecation notice from MpoolPending 2020-08-06 20:15:26 +03:00
vyzo e87d8f9543 add basic selection tests 2020-08-06 20:15:15 +03:00
Łukasz Magiera d2fc7c8688 Merge pull request #2640 from filecoin-project/fix/store-locking
Fixes locking issues when creating channel / adding funds
2020-08-06 18:52:03 +02:00
Dirk McCormick 1ef9113ff0 fix: track payment channel by ID instead of from/to 2020-08-06 12:07:13 -04:00
Dirk McCormick 63bb09553a fix: race in paych manager test 2020-08-06 12:07:13 -04:00
Dirk McCormick 28985c8bcf fix: tighten up testing and add a couple of missing locks 2020-08-06 12:07:13 -04:00
hannahhoward b048fcd7c1 feat(markets): update for new paych logic
Update adapter to use wait methods provided by paych adapter
2020-08-06 12:07:13 -04:00
Dirk McCormick 45d9ddc79f fix: paych manager dependency injection 2020-08-06 12:04:10 -04:00
Dirk McCormick aea1b0e293 fix: lint fixes 2020-08-06 12:04:10 -04:00
Dirk McCormick c897cc0cc9 docs: fix comments 2020-08-06 12:04:10 -04:00
Dirk McCormick 6d70d912a1 fix: payment channel integration test 2020-08-06 12:04:10 -04:00
Dirk McCormick 4abc7416f6 fix: make DeleteActor(beneficiary) transfer funds to beneficiary (instead of burning funds) 2020-08-06 12:04:10 -04:00
Dirk McCormick fdfccf0466 WIP: fix payment channel locking 2020-08-06 12:04:10 -04:00
Travis Person 429f119dbb release: write full sha512sum output to file
With the full output written to the file, users can verify the tar.gz
integrity with `sha512sum -c <release>.tar.gz.sha512`.
2020-08-06 16:03:16 +00:00
Lucas Molas 7216363d2e log success fixme 2020-08-06 12:40:01 -03:00
Lucas Molas 2c43138043 record global time in client 2020-08-06 12:38:31 -03:00
vyzo 1e80e3ae65 create maximal chains
Merge chains when gasPerf is non-descreasing (instead of increasing) to create maximal chains.
This also obviates the need for stable sort, as the chains are guaranteed to be in decreasing
order for the same actor.
2020-08-06 18:37:28 +03:00
Łukasz Magiera bf9116c65a Merge pull request #2856 from cerasusland/unbind-post-waitgroup
submit wdpost proof without waitting for recovery and fault messages …
2020-08-06 17:19:08 +02:00
Łukasz Magiera 79e25ac300 Fix buildall 2020-08-06 17:17:01 +02:00
Łukasz Magiera 6c502c4c9c Merge pull request #2861 from Factor8Solutions/issue-2782-1
Issue 2782 - iteration 1 - should be fixed
2020-08-06 17:11:49 +02:00
Łukasz Magiera c6acfa624e Merge pull request #2834 from filecoin-project/feat/fund-manager-fix
Improve Fund Manager
2020-08-06 16:45:05 +02:00
vyzo 7a8c74fee8 use stable sort for chain sorting
the default non-stable sort may reorder chains with the same gasPerf, which might change the order
of messages per nonce; facepalm.
2020-08-06 17:40:22 +03:00
vyzo 16a1f9b682 message chain creation tests 2020-08-06 17:08:02 +03:00
vyzo 61d027db2a use supplied tipset when looking up actor state 2020-08-06 17:07:37 +03:00
Łukasz Magiera 711b626a8b Merge pull request #2852 from filecoin-project/jeff
Jeff
2020-08-06 13:01:14 +02:00
Your Name bd15650724 fixed typos 2020-08-06 17:56:37 +08:00
Your Name 004a6d8868 add more documentation 2020-08-06 17:41:00 +08:00
vyzo 30ec4e7524 import cosmetics 2020-08-06 11:17:11 +03:00
vyzo 6f660f7915 repair references to defunct miner.SelectMessages 2020-08-06 10:46:48 +03:00
Aayush Rajasekaran 6e8d51af02 Fix collectHeaders when incoming is partially built on latest tipset 2020-08-06 02:24:29 -04:00
刘勇 35e519179a submit wdpost proof without waitting for recovery and fault messages appear on chain 2020-08-06 14:01:58 +08:00
hannahhoward 9babf34a0c fix(fundmgr): switch to id addresses
in order to observe the balance table correctly, convert to tracking funds by id address
2020-08-05 18:33:11 -07:00
Łukasz Magiera 73b8868046 gofmt 2020-08-06 03:32:59 +02:00
Łukasz Magiera e372e7dc63 Merge pull request #2850 from filecoin-project/deps/actors-v0.8.7-ish
Update specs-actors
2020-08-06 03:28:31 +02:00
Łukasz Magiera f8b8ecc0c3 Consensus filter 2020-08-06 03:16:39 +02:00
Travis PersonandTravis Person ca53bf9097 lotus-worker: change address flag to listen (#2848)
* lotus-worker: change address flag to listen

Clarify the flag on the worker process to be the local address and port
the worker will listen on, and not the address of the miner.

* fixup! lotus-worker: change address flag to listen

Co-authored-by: Travis Person <travisperson@users.noreply.github.com>
2020-08-06 02:54:00 +02:00
Łukasz Magiera e90b52eb8d Merge pull request #2835 from filecoin-project/fix/sealing-fixes
Update FSM with sealing fixes
2020-08-06 02:47:22 +02:00
Łukasz Magiera be1e7d33d5 Merge pull request #39 from filecoin-project/next
Next Staging Branch
2020-08-06 01:21:00 +02:00
Łukasz Magiera 967d887503 Merge pull request #63 from filecoin-project/fix/bugfixes
Fix a bunch sealing issues
2020-08-06 01:19:25 +02:00
Łukasz Magiera e01df1c602 Merge pull request #2851 from filecoin-project/feat/update-markets-0.5.4
Update markets to resolve dialing errors
2020-08-06 01:05:30 +02:00
Lucas Molas ac25502308 go fmt 2020-08-05 19:47:27 -03:00
hannahhoward 80ef0b020e fix(markets): update to tagged version 2020-08-05 15:45:54 -07:00
Lucas Molas 8e044be7c2 protocol: req: use TipSetKey comment 2020-08-05 19:45:10 -03:00
Lucas Molas 65512193cc clear deadline in server 2020-08-05 19:40:00 -03:00
hannahhoward a89c290f62 feat(markets): update to 0.5.4 2020-08-05 15:35:59 -07:00
Łukasz Magiera df38fe4bf6 Update specs-actors 2020-08-06 00:29:07 +02:00
Łukasz Magiera 6b8f27264b Merge pull request #2849 from filecoin-project/asr/ask-address
Set miner addresses when querying ask
2020-08-05 23:52:12 +02:00
Łukasz Magiera be1231fef4 Merge pull request #60 from filecoin-project/next
Next Staging Branch
2020-08-05 23:39:09 +02:00
Łukasz Magiera ca4e4fa964 Merge pull request #2814 from filecoin-project/feat/secstor-fetch-reserve
Update sector-storage with fetch storage reservation
2020-08-05 23:37:30 +02:00
Łukasz Magiera b7dca7fb4e Merge pull request #90 from filecoin-project/feat/fetch-reserve-space
remote: Fetch storage reservation
2020-08-05 23:37:00 +02:00
Łukasz Magiera e60af00ec4 Merge pull request #2764 from filecoin-project/feat/burn-above-estimate
Burn sclaing amount dependon on how much overestimation there was
2020-08-05 23:20:42 +02:00
Łukasz Magiera 8ce8801789 Use chain-val master 2020-08-05 23:04:12 +02:00
Aayush Rajasekaran 26804c0557 Set miner addresses when querying ask 2020-08-05 16:54:45 -04:00
vyzo 1511644541 remove deprecated miner selection logic; it lives in the message pool now 2020-08-05 23:18:37 +03:00
vyzo 96b3295307 introduce and use MpoolSelect API 2020-08-05 23:17:14 +03:00
vyzo a08d780bef enhance SelectMessages method to take a target message 2020-08-05 23:16:09 +03:00
Łukasz Magiera 77e4adb556 gofmt 2020-08-05 22:11:53 +02:00
vyzo 5f599dcaf5 remove duplicate time log 2020-08-05 21:48:29 +03:00
Łukasz Magiera 0073f10b62 Merge pull request #2821 from filecoin-project/feat/miner-allinfo
miner: Command to dump all miner info
2020-08-05 20:33:27 +02:00
Łukasz Magiera 2b7732bc2f Update sector-storage with fetch storage reservation 2020-08-05 20:32:28 +02:00
Łukasz Magiera deec7a2658 Merge remote-tracking branch 'origin/next' into feat/fetch-reserve-space 2020-08-05 19:39:33 +02:00
Łukasz Magiera 7c3197d9b0 Merge pull request #91 from yaohcn/fix-2806
fix 2806
2020-08-05 19:38:49 +02:00
Łukasz Magiera 8458f04a6b Merge pull request #2833 from filecoin-project/feat/list-retrieval-deals
Add CLI to list retrieval deals
2020-08-05 17:36:06 +02:00
vyzo 829c7953d5 fix dereference bug 2020-08-05 18:28:04 +03:00
Ingar Shu 80546d0451 Add "retrieval-deals list" miner CLI 2020-08-05 17:27:15 +02:00
Ingar Shu 9e07b310d1 WIP 2020-08-05 17:27:08 +02:00
Your Name 323e07df46 fixed systemd inconsistencies 2020-08-05 23:26:40 +08:00
Łukasz Magiera 182b638f03 Merge pull request #2784 from filecoin-project/fix/blk-ts
Tighten up timestamp check
2020-08-05 17:19:51 +02:00
yaohcn de3d3b48f7 fix 2806 2020-08-05 20:36:49 +08:00
vyzo a8b0db91e8 implement pruning using the chain selection logic 2020-08-05 13:28:14 +03:00
vyzo b4be1472c0 use RequiredFunds in chain inclusion balance sanity check 2020-08-05 13:08:07 +03:00
vyzo 06a13681ae satisfy stupid linter 2020-08-05 10:43:49 +03:00
vyzo 50e1650344 fix Trim bug 2020-08-05 10:31:42 +03:00
vyzo 23003c4d55 fix Before bug 2020-08-05 10:28:12 +03:00
vyzo 9b6d822b3e avoid repeatedly reallocating a big for block gas limit, more conservative failed gas estimation 2020-08-05 10:22:40 +03:00
vyzo 9f7deff512 better handling of gas guess errors
don't swallow them, the failed gas guess is too high.
2020-08-05 10:19:32 +03:00
vyzo 6e1bfaffd7 make it compile! 2020-08-05 09:46:48 +03:00
Łukasz Magiera 9681ac3fb9 Update FSM with sealing fixes 2020-08-05 03:35:40 +02:00
Łukasz Magiera 9d9ea4e633 Fix a bunch sealing issues 2020-08-05 03:30:58 +02:00
hannahhoward b2a114a808 test(fundmgr): add FundMgr test 2020-08-04 18:16:25 -07:00
hannahhoward b4d1b628be feat(fundmgr): add monitoring to FundMgr 2020-08-04 17:29:52 -07:00
hannahhoward f4720ddb2c feat(state): add predicate for deal id watching 2020-08-04 17:28:05 -07:00
Jakub Sztandera 86a522ef22 go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-05 02:17:13 +02:00
Jakub Sztandera d9ba8d3671 Change to scaling overestimation burn algorithm
Change the treshold to 1.1

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-05 02:12:11 +02:00
Jakub Sztandera 3058f280d9 Fix bad error message
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-05 02:10:25 +02:00
Aayush Rajasekaran 9eea11662c Update chain-val to support burn gaslimit changes
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-05 02:10:25 +02:00
Jakub Sztandera 5405a5adc3 Sepearate ComputeGasOutputs into sepearate function, add tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-05 02:10:25 +02:00
Jakub Sztandera 5ff12a5d2d Burn remainder of GasLimit over 1.3*gasUsed
GasToBurn = max(0, GasLimit - GasUsed + (3*GasUsed)/10)

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-05 02:10:25 +02:00
Łukasz Magiera b8526edd5e Merge pull request #46 from chunqizhi/wenchu
Add case: Removed in fsm.go to avoid "unexpected sector update state: Removed"
2020-08-05 00:16:12 +02:00
vyzo b4ff9ba220 better minGas sanity check 2020-08-04 23:18:51 +03:00
vyzo 89d42b5958 message chain construction 2020-08-04 23:18:51 +03:00
vyzo e323fa7a8c message chain trimming 2020-08-04 23:18:51 +03:00
vyzo c7eec94d95 message selection preliminaries 2020-08-04 23:18:51 +03:00
vyzo 7d7496e10b Merge pull request #2823 from filecoin-project/update-libp2p
update go-libp2p
2020-08-04 23:17:54 +03:00
vyzo 14535cc400 gomod: update go-libp2p 2020-08-04 23:04:53 +03:00
Łukasz Magiera a7acc81490 miner: Command to dump all miner info 2020-08-04 20:57:48 +02:00
Aayush Rajasekaran 593a7b623c Merge pull request #2820 from filecoin-project/feat/update-markets-0.5.3
Update to go-fil-markets v0.5.3
2020-08-04 14:34:18 -04:00
Łukasz Magiera 6546db7648 Merge pull request #2816 from hoffmabc/brian.fixMisspelling
Fix misspelling in HelloMessage
2020-08-04 20:32:00 +02:00
hannahhoward 761a999ebc feat(deps): update to go-fil-markets v0.5.3 2020-08-04 11:13:03 -07:00
Lucas Molas 7982ab52a7 check connection between fetched segments during sync 2020-08-04 15:06:30 -03:00
Łukasz Magiera b264cd6c4a Merge pull request #2817 from filecoin-project/feat/improve-client-listdeals
client cli: Improve list-deals output
2020-08-04 20:00:45 +02:00
Lucas Molas 1ec0ded953 document NewTipSet checks 2020-08-04 14:44:48 -03:00
Lucas Molas 9f82e98f28 check parent height 2020-08-04 14:44:27 -03:00
Łukasz Magiera e4f475ee59 gofmt 2020-08-04 19:07:31 +02:00
Łukasz Magiera adee59c795 client cli: improve lit-deals output 2020-08-04 19:07:17 +02:00
Łukasz Magiera 1feec642da Merge pull request #2815 from filecoin-project/fix/storage-deals-prop-cid
Fix proposal CID in `lotus-miner storage-deals list`
2020-08-04 17:41:51 +02:00
Brian Hoffman 0bb4c20e02 Fix misspelling in HelloMessage 2020-08-04 11:33:29 -04:00
hannahhoward 1b38791d94 fix(lotus-miner): output correct proposal CID
update storage-deals list command to output the correct proposal CID. previously we were taking the
CID without the client signature, which will not be the same CID
2020-08-04 08:22:47 -07:00
Łukasz Magiera b58eba0d99 remote: Fetch storage reservation 2020-08-04 16:34:29 +02:00
Łukasz Magiera 7fa666b0a3 Merge pull request #2795 from filecoin-project/fix/sm-gas-chain-break
Correctly account for gas of included messages
2020-08-04 14:52:32 +02:00
Łukasz Magiera d8d6f9cb51 Merge pull request #2792 from filecoin-project/feat/sector-deals
feat(chainwatch) define relation from dealIDs to sectorID
2020-08-04 14:49:02 +02:00
Łukasz Magiera 6028b5b18f Merge pull request #2805 from filecoin-project/asr/import-fix
Fix import
2020-08-04 14:37:08 +02:00
Łukasz Magiera de18d5521e workers: Enable unseal support 2020-08-04 14:32:09 +02:00
Aayush Rajasekaran d2e203c1ce Fix import 2020-08-04 00:45:02 -04:00
whyrusleeping 57b931b06a apply less nice but working fix 2020-08-03 18:26:55 -07:00
whyrusleeping 50ae04e6b7 add test to show that select messages isnt working as expected
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-04 03:03:28 +02:00
Jakub Sztandera 3e23b3653b Correctly account for gas of included messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-04 03:03:14 +02:00
frrist 023b2ce126 feat: create relation for dealIDs to sectorID 2020-08-03 16:31:24 -07:00
Lucas Molas 89348d7fda doc: create miner (#1890) 2020-08-03 20:06:05 -03:00
Łukasz Magiera cd8537e76f Merge pull request #2789 from filecoin-project/fix/post-fault-recover-decls
wdpost: Fix Fault/Recovery declaration timing
2020-08-04 00:52:38 +02:00
Łukasz Magiera ad9a691e0a Merge pull request #89 from filecoin-project/fix/locking
Fix some locking issues
2020-08-04 00:37:49 +02:00
Łukasz Magiera b6cf4964df Merge pull request #2790 from filecoin-project/feat/fix-chain-gas-stats
dont divide by zero if blocks have no messages
2020-08-03 23:06:41 +02:00
whyrusleeping 82f24d62d4 dont divide by zero if blocks have no messages 2020-08-03 14:03:04 -07:00
Łukasz Magiera c839ca456f wdpost: Test pleding a sector after recovery 2020-08-03 21:02:27 +02:00
Łukasz Magiera 3cab915fd2 mock: Make it possible to unfail sectors 2020-08-03 20:49:04 +02:00
Łukasz Magiera 83718c6165 Merge pull request #2788 from filecoin-project/fix/chainwatch-miner-panic
fix(chainwatch): Miner partition processing panics on nil bitfiled
2020-08-03 20:43:00 +02:00
Łukasz Magiera d7e1a526f6 Fix Fault/Recovery declaration timing 2020-08-03 20:29:58 +02:00
frrist b672070ba2 fix(chainwatch): miner processing panics on nil bf 2020-08-03 11:03:17 -07:00
Jakub Sztandera a58edeb96f Tighten up timestamp check
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-03 18:39:27 +02:00
Lucas Molas c0c692fa22 fix cbor-gen 2020-08-03 12:23:11 -03:00
Lucas Molas fc32410e5b review server 2020-08-03 12:20:05 -03:00
Lucas Molas 755772e12d review client comments 2020-08-03 12:20:05 -03:00
Lucas Molas 97b37474f9 extra check in toFullTipSets 2020-08-03 12:20:05 -03:00
Lucas Molas 3f6c418dc6 rename validatedResponse to private 2020-08-03 12:20:05 -03:00
Lucas Molas 0e4d5cb67b document CompactedMessages 2020-08-03 12:20:05 -03:00
Lucas Molas ccaca48140 temporarily make MaxRequestLength a var 2020-08-03 12:20:05 -03:00
Lucas Molas 0d77c96bda extend maximum to fork length 2020-08-03 12:20:05 -03:00
Lucas Molas 76d40ec408 first pass, ready for review 2020-08-03 12:20:04 -03:00
Łukasz Magiera ed251d9f82 Fix some locking issues 2020-08-03 14:18:11 +02:00
Whyrusleeping 43491cb7ed Merge pull request #2768 from filecoin-project/fix/add-explanation
Fix/add explanation
2020-08-01 16:59:20 -07:00
lanzafame f2d1fbdfa5 Add explanation to channel magic 2020-08-02 09:57:34 +10:00
whyrusleeping 9c51b48754 update some numbers 2020-08-01 16:56:38 -07:00
Łukasz Magiera fa240a37db Merge pull request #2766 from filecoin-project/feat/mpool-pruning
Implement some basic pruning strategy
2020-08-02 01:47:48 +02:00
WhyrusleepingandŁukasz Magiera 113fcac476 Update chain/messagepool/pruning.go
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-08-01 16:39:16 -07:00
WhyrusleepingandŁukasz Magiera 31296e6cdc Update chain/messagepool/pruning.go
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-08-01 16:39:02 -07:00
whyrusleeping 8260184abc more debug message cleanup 2020-08-01 16:35:02 -07:00
whyrusleeping f71957bcec aayush is too picky 2020-08-01 16:31:56 -07:00
whyrusleeping 78564e8c54 fix mr test 2020-08-01 16:29:26 -07:00
whyrusleeping 2e04dc908c clean up after review 2020-08-01 16:25:13 -07:00
whyrusleeping 255777a4a9 implement dumb pruning 2020-08-01 15:54:21 -07:00
whyrusleeping f2a3d23798 implement first pruning method, pruning of 'future' messages 2020-08-01 14:57:35 -07:00
whyrusleeping fe80f4b830 WIP: message pool pruning 2020-08-01 14:57:34 -07:00
Łukasz Magiera cb9406c2ca Merge pull request #2763 from filecoin-project/feat/chain-list-gas-stats
Feat/chain list gas stats
2020-08-01 23:47:05 +02:00
whyrusleeping 883b8467b5 fix spacing 2020-08-01 23:26:52 +02:00
whyrusleeping 65f8fae67a allow chain list to print useful gas statistics 2020-08-01 23:26:52 +02:00
Jakub Sztandera 113681fcc4 Merge pull request #2756 from filecoin-project/feat/better-gas-price-est
Improve gas price estimator
2020-08-01 22:04:42 +02:00
Jakub Sztandera b3fc3607f0 goimports
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-01 21:50:03 +02:00
Jakub Sztandera 31f4f5a4e5 rm comment!
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-01 21:48:30 +02:00
Jakub Sztandera 2394492798 Fix mining tests
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-01 16:56:35 +02:00
Jakub Sztandera 81a65fe1bc Swich gas-price to 0 in many places
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-08-01 16:23:13 +02:00
Łukasz Magiera 5bfee9875c Slightly better gas estimator math 2020-08-01 13:23:07 +02:00
Łukasz Magiera 90baf06011 gofmt 2020-08-01 09:40:25 +02:00
Łukasz Magiera e5ca4b22d5 Improve gas price estimator 2020-08-01 09:40:11 +02:00
Łukasz Magiera 4e9343c487 Merge pull request #2753 from filecoin-project/feat/retrieval-store-manager
Retrieval Store Manager
2020-08-01 00:03:42 +02:00
hannahhoward 8e6862f7ca fix(lint): fix lint errors 2020-07-31 14:19:40 -07:00
hannahhoward 3cac1080cc feat(retrievalstoremgr): add retrievalstoremgr
add manager for retrievals to handle different cases for IPFS/non-ipfs
2020-07-31 14:16:18 -07:00
hannahhoward 6b67c1cf39 revert(markets): remove multistore on client retrieval
Revert multistore functionality for retrieval client -- the need to do this is to support powergate.
we actually need an option for configuring how this command works -- so that it can use the
blockstore OR the multistore
2020-07-31 13:29:20 -07:00
Whyrusleeping 7c32d49ec6 Merge pull request #2712 from filecoin-project/frrist/sector-events
refactor(chainwatch): update to work with latest specs-actors miner changes
2020-07-31 13:22:12 -07:00
Łukasz Magiera 3ae55d1da3 Merge pull request #2714 from filecoin-project/feat/user-dealfiter
Support external deal decision logic
2020-07-31 21:56:44 +02:00
Łukasz Magiera 2b50a3cb4a Merge pull request #2752 from filecoin-project/asr/markets-update
Update markets
2020-07-31 21:47:31 +02:00
Łukasz Magiera f9863f31fd Merge pull request #2751 from filecoin-project/misc/windo-cheaper
Make VerifyPost cheaper
2020-07-31 21:44:35 +02:00
Aayush Rajasekaran c33e38eef2 Update markets 2020-07-31 15:43:34 -04:00
Łukasz Magiera 910f9f00bd Merge pull request #2749 from filecoin-project/deps/cbor-gen
update to latest cbor-gen
2020-07-31 21:42:03 +02:00
Jakub Sztandera ae29d132ed Make VerifyPost cheaper
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-31 21:38:23 +02:00
Aayush Rajasekaran d3da20ab27 Update chain-val 2020-07-31 15:37:00 -04:00
Łukasz Magiera 6d21255678 Merge remote-tracking branch 'origin/master' into next 2020-07-31 21:36:14 +02:00
Łukasz Magiera bdf6904c1a Merge pull request #2745 from filecoin-project/feat/interacnive-client-deal
client cli: Interactive deal command
2020-07-31 21:33:02 +02:00
Łukasz Magiera f993ff1ab8 make lotus-miner storage-deals list less bad 2020-07-31 20:56:47 +02:00
Łukasz Magiera fc3c91b738 Support external deal decision logic 2020-07-31 20:29:16 +02:00
whyrusleeping b83629c4d5 update to latest cbor-gen 2020-07-31 11:19:30 -07:00
Łukasz Magiera 45f85a5f86 Merge pull request #2748 from filecoin-project/asr/specs-update
Upgrade to specs-actors v0.8.5
2020-07-31 19:10:04 +02:00
Aayush Rajasekaran 0552d23b77 Upgrade to specs-actors v0.8.5 2020-07-31 12:40:45 -04:00
Whyrusleeping bd6a80505b Merge pull request #2731 from filecoin-project/pubsub-block-tracing
pubsub: only trace messages for the blocks topic
2020-07-31 09:27:26 -07:00
Łukasz Magiera b6c9169a87 client cli: Interactive deal command 2020-07-31 18:23:36 +02:00
vyzo 886e2e57dc gomod: update go-libp2p-pubsub@master 2020-07-31 19:17:09 +03:00
Łukasz Magiera 21d15d3151 Merge branch 'ldoublewood-fix/restart-worker-flag' into next 2020-07-31 15:30:56 +02:00
ldoublewood 40b7783c77 fix missing flag for restarting worker 2020-07-31 15:30:41 +02:00
Łukasz Magiera a8e12f94e9 Merge pull request #2738 from filecoin-project/feat/better-gas-used
Add gas guesstimation
2020-07-31 14:45:06 +02:00
Jakub Sztandera a8c6253fc7 Show it tests that it works even better
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-31 14:27:28 +02:00
Jakub Sztandera fc0bd2cda5 Add gas guesstimation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-31 14:27:28 +02:00
Jakub Sztandera 483b33acd1 Move SelectMessages to its own file
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-31 14:27:28 +02:00
Łukasz Magiera 4cb4e7c2c2 Merge remote-tracking branch 'origin/master' into next 2020-07-31 14:02:04 +02:00
Łukasz Magiera 6458354265 Merge pull request #2718 from filecoin-project/schomatis/make-gen
make gen
2020-07-31 13:54:09 +02:00
Łukasz Magiera 41199e5eca Merge pull request #2734 from filecoin-project/pubsub-extended-peer-scores
support extended pubsub peer scores
2020-07-31 13:02:33 +02:00
Łukasz Magiera 79dda448d7 Merge pull request #2725 from filecoin-project/feat/logging-markets
Better Event Logging For Markets
2020-07-31 13:00:15 +02:00
hannahhoward 0228ba1fb9 fix(markets): lower case labels 2020-07-31 12:55:47 +02:00
hannahhoward f56b31a5a5 fix(markets): convert to Infow 2020-07-31 12:55:47 +02:00
hannahhoward e201408d61 feat(markets): better event logging 2020-07-31 12:55:45 +02:00
Łukasz Magiera e89890d54a Merge pull request #2638 from filecoin-project/feat/pieces-cmds
Retrieval improvements
2020-07-31 12:49:55 +02:00
Łukasz Magiera f3c771db1c storageprovider: remove todo 2020-07-31 12:49:42 +02:00
vyzo d8ca29dd52 support extended pubsub peer scores 2020-07-31 11:27:22 +03:00
vyzo 1649c32325 pubsub: only trace message for the blocks topic 2020-07-31 10:15:21 +03:00
vyzo 741818ee67 gomod: update go-libp2p-pubsub@feat/trace-topics 2020-07-31 10:05:39 +03:00
Aayush Rajasekaran 9d987280c9 remove unused imports 2020-07-31 01:51:40 -04:00
whyrusleeping 0e78db3b8c print out selected messages in mpool shed cmd 2020-07-31 01:50:25 -04:00
whyrusleeping e19ff4c958 sprinkle in some color 2020-07-31 01:50:12 -04:00
whyrusleeping 146e59fe56 wire through new retrieval apis 2020-07-31 01:47:37 -04:00
whyrusleeping 5f091411c3 some client improvements 2020-07-31 01:33:44 -04:00
whyrusleeping 7fa4cd33f0 WIP: retrieval pieces inspection command 2020-07-31 01:33:30 -04:00
Aayush Rajasekaran 34bfafc7a7 Merge pull request #2721 from filecoin-project/fix/notsealed-readpiece
Update sector-storage with ReadPiece fixes
2020-07-31 01:12:22 -04:00
Łukasz Magiera 38bcb9bc09 Update sector-storage with ReadPiece fixes 2020-07-31 01:03:39 -04:00
Whyrusleeping d52ad2ea77 Merge pull request #2689 from filecoin-project/asr/deal-collateral
Update specs-actors, support deal provider collateral bounds
2020-07-30 21:58:16 -07:00
Aayush Rajasekaran c881f287ad Update specs-actors and chain-val...again 2020-07-31 00:29:44 -04:00
Aayush Rajasekaran a8e9a2fe92 Merge pull request #2663 from har00ga/master
Multiaddress instructions added
2020-07-31 00:25:34 -04:00
Whyrusleeping 898a72d078 Merge pull request #88 from filecoin-project/fix/readpiece-nounseal
Try to not unseal in ReadPiece when don't need to
2020-07-30 20:00:49 -07:00
frrist bc0408b962 refactor: add sector events back and miner info 2020-07-30 14:52:38 -07:00
Łukasz Magiera a4e30a851b Merge pull request #2719 from filecoin-project/schoamtis/fix/incoming/check-against-heaviest
fix: block validator: check against heaviest tipset
2020-07-30 23:47:35 +02:00
Aayush Rajasekaran 8daef5aa23 Update chain-val and specs-actors some more 2020-07-30 17:33:33 -04:00
Lucas Molas 595de3fccb fix: block validator: check against heaviest tipset 2020-07-30 18:05:28 -03:00
Łukasz Magiera 7153e1dd05 Fix tests 2020-07-30 22:38:05 +02:00
Lucas Molas f1f9ce5351 make gen 2020-07-30 17:25:18 -03:00
Łukasz Magiera 3d2084ab93 Try to not unseal in ReadPiece when don't need to 2020-07-30 22:03:43 +02:00
Whyrusleeping 83e29b1ccd Merge pull request #2713 from filecoin-project/update-libp2p
update libp2p dependencies
2020-07-30 12:00:52 -07:00
vyzo dd06e768d3 temporarily disabled broken test 2020-07-30 21:47:12 +03:00
vyzo 04b4a5e0c3 gomod: update libp2p dependencies 2020-07-30 20:36:24 +03:00
Łukasz Magiera 9ef69c91e4 Merge remote-tracking branch 'origin/next' into asr/deal-collateral 2020-07-30 17:19:33 +02:00
Łukasz Magiera c762770031 Merge pull request #2711 from filecoin-project/feat/allow-send-to-fail
Allow messages with not enough funds for transfer to apply
2020-07-30 17:17:47 +02:00
Jakub Sztandera 97009c8f0a Update to chain-val master
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-30 16:49:17 +02:00
Jakub Sztandera 14460d397a go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-30 16:25:57 +02:00
Jakub Sztandera 7f722623ca Allow messages with not enough funds for transfer to apply
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-30 16:23:30 +02:00
Łukasz Magiera 0d0fa1e670 Update specs-actors more 2020-07-30 15:22:34 +02:00
Łukasz Magiera 12e79a1661 Merge pull request #61 from filecoin-project/fix/addpiece-math
Fixes to math in AddPiece
2020-07-30 14:39:17 +02:00
Łukasz Magiera 627d7b5269 Merge remote-tracking branch 'origin/next' into asr/deal-collateral 2020-07-30 14:36:22 +02:00
Łukasz Magiera 4d328cad54 Get things to mostly work 2020-07-30 14:31:50 +02:00
Jakub Sztandera a0e7d6a781 Lint in relation to next
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-30 14:30:47 +02:00
Łukasz Magiera d423ae90d8 Fixes to math in AddPiece 2020-07-30 14:22:05 +02:00
Łukasz Magiera 8a74e06161 Merge pull request #60 from filecoin-project/daviddias-patch-1
docs: add note to use lotus issue tracker
2020-07-30 14:21:13 +02:00
Łukasz Magiera d57f0e6460 Merge pull request #56 from yaohcn/sealing-ctx
add sealing context
2020-07-30 14:18:47 +02:00
Łukasz Magiera 33dfb9a9cc Merge pull request #84 from jackoelv/patch-1
Update local.go
2020-07-30 12:20:03 +02:00
Łukasz Magiera 48d1782e71 Merge pull request #87 from filecoin-project/daviddias-patch-1
Update README.md
2020-07-30 12:16:36 +02:00
Łukasz Magiera 15ca665c21 Typo 2020-07-30 12:16:04 +02:00
Łukasz Magiera 8e6525e6dd Merge pull request #86 from filecoin-project/asr/specs-update
Update go-bitfield and specs-actors
2020-07-30 12:13:05 +02:00
Celeste A. Seberras 5d1e51da9c Update mining.md 2020-07-30 02:57:25 -04:00
David Dias 224a60fb23 Update README.md 2020-07-30 08:33:52 +02:00
David Dias 6e73e4b68e docs: add note to use lotus issue tracker 2020-07-30 08:29:23 +02:00
Aayush Rajasekaran 3ee28c3b6d Update go-bitfield and specs-actors 2020-07-30 01:00:24 -04:00
Aayush Rajasekaran 729c052f64 Update specs-actors, support deal provider collateral bounds 2020-07-30 00:55:37 -04:00
Łukasz Magiera 84a44f93a7 Merge pull request #2649 from Satoshi-Kusumoto/patch-1
remove Interopnet related instructions in the documentation
2020-07-30 04:06:21 +02:00
Łukasz Magiera a68d6239dc Merge pull request #2674 from filecoin-project/asr/multiaddrs
Include listen addresses in CLI miner info
2020-07-30 03:52:36 +02:00
Łukasz Magiera 76440e703e Merge pull request #2684 from filecoin-project/asr/fundmgr
Fundmanager shouldn't try to add zero
2020-07-30 03:48:15 +02:00
Łukasz Magiera bc36e949e8 Merge pull request #2629 from filecoin-project/work-tracker
Towards an updated work tracker
2020-07-30 03:45:38 +02:00
Travis Person ed33400a49 Merge pull request #2682 from filecoin-project/doc-updates-native
Update docs and systemd scripts
2020-07-29 17:30:24 -07:00
Aayush Rajasekaran 74dd01a8db Fundmanager shouldn't try to add zero 2020-07-29 20:27:22 -04:00
Whyrusleeping 7b567c77e9 Merge pull request #2680 from filecoin-project/asr/over-estimation
Increase PreCommitDeposit and InitialPledgeCollateral overestimation to 1.1x
2020-07-29 17:23:01 -07:00
Travis Person 2b883c8c41 Update docs and systemd scripts 2020-07-30 00:19:40 +00:00
Aayush Rajasekaran 49bca7f16c Increase PreCommitDeposit and InitialPledgeCollateral overestimation to 1.1x 2020-07-29 20:06:22 -04:00
Frrist 8b98fe1bf4 refresh top miners every 30 seconds (#2673) 2020-07-29 16:34:34 -07:00
Whyrusleeping a1808ae019 Merge pull request #2676 from filecoin-project/fix/log-fixes
Fix/log fixes
2020-07-29 14:54:28 -07:00
whyrusleeping 4e4fbafbe0 only log hello failure if the other side claims to support hello 2020-07-29 14:28:25 -07:00
whyrusleeping 4bbe5abf81 improve slow block production logs 2020-07-29 14:20:07 -07:00
Aayush Rajasekaran cadf52bb0a Include listen addresses in CLI miner info 2020-07-29 16:34:01 -04:00
Jakub Sztandera 26d36f994f Merge pull request #2670 from filecoin-project/daviddias-patch-1
fix: add label for incentinet back
2020-07-29 19:45:58 +02:00
David Dias f7fa9ab055 fix: add label for incentinet back 2020-07-29 19:35:58 +02:00
Jakub Sztandera 0aaff740e8 Merge pull request #2669 from filecoin-project/fix/disallow-msg-push-invalid
Prevent Pushing messages not valid for block inclusion
2020-07-29 19:34:02 +02:00
David Dias ded5f5a4c6 feat: add label sync and label list (#2630)
* feat: add label sync and label list

* fix: move label-syncer to workflows folder so that actions detects it

* feat: update labels
2020-07-29 19:28:38 +02:00
Jakub Sztandera 4a92422f8b Prevent Pushing messages not valid for block inclusion
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-29 19:15:24 +02:00
Jakub Sztandera dbe2590f6e Merge pull request #2668 from filecoin-project/revert-2667-fix/disallow-msg-push-invalid
Revert "Prevent Pushing messages not valid for block inclusion"
2020-07-29 19:06:50 +02:00
Jakub Sztandera 5eb74ba3f7 Revert "Prevent Pushing messages not valid for block inclusion" 2020-07-29 19:06:32 +02:00
Jakub Sztandera 5ea9d2fa9f Merge pull request #2667 from filecoin-project/fix/disallow-msg-push-invalid
Prevent Pushing messages not valid for block inclusion
2020-07-29 18:45:57 +02:00
Jakub Sztandera b3842de871 Merge pull request #2660 from filecoin-project/fix/set-addr-gas-limit
Set default set-addrs gas limit to 0
2020-07-29 18:45:42 +02:00
Jakub Sztandera c17c653eb1 Prevent Pushing messages not valid for block inclusion
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-29 18:34:10 +02:00
David Dias 78e5d28f65 docs: remove docs repo from the list 2020-07-29 15:30:36 +02:00
David Dias 9ad76b3335 docs: update repo list 2020-07-29 15:28:48 +02:00
David Dias 71d175a4c0 docs: remove deprecated repo from list 2020-07-29 15:19:37 +02:00
David Dias 01d152fcaa docs: update tracker section 2020-07-29 15:15:47 +02:00
Celeste A. Seberras 3b9fc92d66 Update mining.md 2020-07-29 06:59:39 -04:00
Jakub Sztandera 9ec11e2f8f Set default set-addrs gas limit to 0
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-29 10:04:06 +02:00
Black3HDF 7c780766f4 remove Interopnet related instructions 2020-07-29 10:00:05 +08:00
Aayush Rajasekaran 5df0ee7935 Merge pull request #2647 from filecoin-project/feat/better-seal-duration-ui
Feat/better seal duration ui
2020-07-28 21:32:54 -04:00
Aayush Rajasekaran e1288e79c9 Merge pull request #2648 from filecoin-project/feat/faucet-rate-limits
faucet: adjust rate limits
2020-07-28 21:25:22 -04:00
Travis Person 1131026be9 faucet: adjust rate limits 2020-07-29 01:23:31 +00:00
Aayush Rajasekaran 5e485a085a Merge pull request #2637 from filecoin-project/gas/tag-verify-post
Use scaling VerifyPost cost
2020-07-28 21:22:23 -04:00
Aayush Rajasekaran 4b494e3e6f Merge pull request #2568 from filecoin-project/feat/cid-builder
Improve CID handling, update specs-actors
2020-07-28 21:20:02 -04:00
whyrusleeping 005d60d6b4 better clientside calculation of default deal starts 2020-07-28 18:18:21 -07:00
Aayush Rajasekaran b51e2a868b Merge branch 'next' into feat/cid-builder 2020-07-28 21:02:30 -04:00
Aayush Rajasekaran a4fe359c28 Merge pull request #2605 from filecoin-project/asr/vesting-genesis
Correct calculation of TotalCircSupply
2020-07-28 20:43:55 -04:00
whyrusleeping dd8c88b418 improve some seal duration things 2020-07-28 17:40:42 -07:00
Aayush Rajasekaran 890f56ac38 Lock before setting up genesis msigs 2020-07-28 20:35:40 -04:00
Aayush Rajasekaran df13fc3e40 Add MinDealDuration to testground params 2020-07-28 20:03:20 -04:00
Whyrusleeping b60f2deedb Merge pull request #2641 from filecoin-project/feat/repub-less
only republish the next few messages from your mempool
2020-07-28 16:53:29 -07:00
whyrusleeping 7b29a1ae73 only republish the next few messages from your mempool 2020-07-28 16:31:05 -07:00
Łukasz Magiera 2bc1a7e327 Merge pull request #2618 from filecoin-project/asr/has-power
Use specs actor's MinerNominalPowerMeetsConsensusMinimum
2020-07-29 01:13:58 +02:00
Łukasz Magiera c3ff29cd7f Merge pull request #2560 from filecoin-project/feat/state-root-stat
add command to print state size statistics of actors
2020-07-29 01:08:56 +02:00
Aayush Rajasekaran 0b1d80d3e3 Rename constants to match CE spec 2020-07-28 17:26:55 -04:00
Aayush Rajasekaran 7153bda0be Correct MiningRewardTotal and calculation of filMined 2020-07-28 17:26:55 -04:00
Aayush Rajasekaran de867d7a9a Correct calculation of TotalCircSupply 2020-07-28 17:26:55 -04:00
Aayush Rajasekaran 859168015a Use specs actor's MinerNominalPowerMeetsConsensusMinimum 2020-07-28 17:21:05 -04:00
Aayush Rajasekaran 93ed4e5035 Update chain val 2020-07-28 16:45:53 -04:00
Jakub Sztandera 0d169dd947 Use scaling VerifyPost costs
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-28 22:31:43 +02:00
Jakub Sztandera b488012d5f Add warn
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-28 22:31:43 +02:00
Jakub Sztandera da4bc44032 Discard initial very long OnVerifyPost from analisys
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-28 22:31:43 +02:00
Jakub Sztandera 5d9c6cd02c Add proof info to gas trace
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-28 22:31:43 +02:00
Łukasz Magiera 58629db7f3 Merge pull request #2635 from filecoin-project/feat/use-tagged-markets-0.5.2
Update to tagged go-fil-markets
2020-07-28 21:25:24 +02:00
Łukasz Magiera aad91a5b3c One more specs-actors commit 2020-07-28 21:20:26 +02:00
Aayush Rajasekaran 32ef4ecbea Merge pull request #59 from filecoin-project/feat/separate-pc-deposit-func
Separate precommit deposit estimation func
2020-07-28 15:05:13 -04:00
hannahhoward 5d930ed15c fix(deps): update to tagged go-fil-markets
use 0.5.2 instead of custom commit
2020-07-28 12:00:53 -07:00
Łukasz Magiera ed04c80bb1 Fix precommit deposit 2020-07-28 20:55:31 +02:00
Łukasz Magiera 33f96f051f Separate precommit deposit estimation func 2020-07-28 20:50:42 +02:00
Łukasz Magiera 927ee2406a Downgrade actors, get tests to pass 2020-07-28 19:51:58 +02:00
Łukasz Magiera a4fe866bff Skip paych test for now 2020-07-28 19:50:27 +02:00
Łukasz Magiera fb59b40507 Fix some tests 2020-07-28 18:16:56 +02:00
Łukasz Magiera 1fd23248ff gofmt 2020-07-28 16:38:26 +02:00
Łukasz Magiera 3d71d529d2 Merge branch 'next' into feat/cid-builder 2020-07-28 16:37:58 +02:00
Łukasz Magiera 2cbe8fd707 gofmt 2020-07-28 16:37:29 +02:00
Łukasz Magiera 473a1f91d5 Update specs-actors to 33f4d6e 2020-07-28 16:36:32 +02:00
Łukasz Magiera 09b90773d8 Merge remote-tracking branch 'origin/next' into feat/cid-builder 2020-07-28 16:06:06 +02:00
Łukasz Magiera 8c95821e9c Merge branch 'keyko-io-feat/genesis-rootkey' into next 2020-07-28 15:40:44 +02:00
Łukasz Magiera 09eb3731f2 Fix duplicate vm setup in genesis 2020-07-28 15:38:13 +02:00
Łukasz Magiera f93bedee71 Merge pull request #2609 from filecoin-project/feat/nicer-miner-proving-deadlines
Better miner proving deadlines
2020-07-28 15:36:50 +02:00
Łukasz Magiera b7139c38ed Merge pull request #2617 from filecoin-project/feat/cron-on-nulls
stmgr: Execute cron tick on null rounds
2020-07-28 15:36:40 +02:00
Łukasz Magiera ddbdcaa3d3 Merge pull request #2567 from filecoin-project/feat/block-validation-histogram
Change block validation aggregation type from sum to distribution
2020-07-28 15:26:44 +02:00
David Dias dc6e58b17c docs: small readme update 2020-07-28 15:17:54 +02:00
Łukasz Magiera ca36519325 stmgr: Bigger number for cron gas limit 2020-07-28 14:32:30 +02:00
Łukasz Magiera eac0a1bba9 stmgr: Handle state forks with cron on null blocks correctly 2020-07-28 14:31:28 +02:00
Łukasz Magiera 6fefac368e Merge pull request #2625 from filecoin-project/feat/update-markets-0.5.1
Update markets for mulitple deal stores
2020-07-28 13:58:02 +02:00
Łukasz Magiera 86bfca696a Use markets master 2020-07-28 13:11:53 +02:00
jackoelv 366de97ab5 Update local.go
StorageBestAlloc returns a sorted slice of storage paths. if no break, It would alloc the worst-last path but not the first-best path.
2020-07-28 18:20:58 +08:00
Jose Pablo Fernandez 834ce171d3 Merge branch 'next' into feat/genesis-rootkey 2020-07-28 11:53:00 +02:00
hannahhoward 5a623cccb5 feat(markets): update markets mulitple deal stores 2020-07-27 23:13:28 -07:00
CAKE c1a814c235 Merge pull request #2622 from filecoin-project/momack2-patch-1
add connectivity configuration to the steps for joining testnet
2020-07-27 19:41:11 -07:00
MollyM 27949eb31c add connectivity configuration to the steps for joining testnet 2020-07-27 19:14:30 -07:00
Łukasz Magiera c0f0e2ba45 Merge pull request #2615 from filecoin-project/fix/chainwatch-null-block-reward-actor
fix: Chainwatch handle null rounds
2020-07-28 03:06:54 +02:00
Łukasz Magiera 8889c5cfd3 stmgr: Dedupe cron invocation 2020-07-28 02:28:22 +02:00
Łukasz Magiera 5b6006f8fe stmgr: Execute cron tick on null rounds 2020-07-28 02:25:16 +02:00
frrist ba7eaf3cc7 fix: reward actor processes null round states 2020-07-27 17:04:38 -07:00
Łukasz Magiera 291d2fe2de Merge pull request #2614 from filecoin-project/fix/market-offset-handling
markets: Fix offset in LocatePieceForDealWithinSector
2020-07-28 01:27:59 +02:00
Łukasz Magiera c133a37b7c gofmt 2020-07-28 01:22:41 +02:00
Łukasz Magiera 10362ab9b4 markets: Fix offset in LocatePieceForDealWithinSector 2020-07-28 01:22:20 +02:00
Łukasz Magiera 6a79d17319 Merge pull request #2604 from simonatsn/master
https://github.com/supranational/blst
2020-07-28 00:36:10 +02:00
Justin Hunter ef5efda4f5 Update filecoin docs correction (#2611) 2020-07-27 18:52:17 -03:00
Łukasz Magiera 772ee494c5 Merge pull request #2610 from filecoin-project/feat/mpool-stat-total
Print totals in mpool stat
2020-07-27 22:23:52 +02:00
Łukasz Magiera d0f4ede99b Print totals in mpool stat 2020-07-27 18:23:01 +02:00
Łukasz Magiera 0adfd68fae Better miner proving deadlines 2020-07-27 18:15:47 +02:00
Łukasz Magiera d557c407c6 Merge pull request #2608 from filecoin-project/feat/storage-remote-improvements
Update sector-storage, sealing sched-diag
2020-07-27 15:17:38 +02:00
Łukasz Magiera add7f0b4b0 Merge pull request #82 from filecoin-project/feat/sched-diag
Fix requestQueue iteration, diag methods
2020-07-27 15:17:25 +02:00
Łukasz Magiera 64e67df881 Merge remote-tracking branch 'origin/master' into next 2020-07-27 14:00:59 +02:00
刘林欣 26998fca32 add on-chain-info to lotus-miner sectors status command 2020-07-27 13:58:59 +02:00
Łukasz Magiera e60adb01fa Merge pull request #2407 from filecoin-project/add-actor-flag
fix --actor flag for `lotus-storage-miner info`
2020-07-27 13:54:18 +02:00
Łukasz Magiera 5fa707bb56 Merge pull request #2598 from filecoin-project/asr/msig-inspect
CLI: Optionally include vesting details in msig inspect
2020-07-27 13:52:43 +02:00
Łukasz Magiera 786fe64723 gofmt 2020-07-27 13:23:55 +02:00
Łukasz Magiera 135b77dab5 Update sector-storage, sealing sched-diag 2020-07-27 13:23:43 +02:00
Łukasz Magiera 9377cb376d gofmt 2020-07-27 13:21:36 +02:00
Łukasz Magiera 510897a497 container/heap doesn't provide sorted array 2020-07-27 13:20:18 +02:00
Łukasz Magiera 9fd91bb70a sched: function to dump scheduler state 2020-07-27 12:17:50 +02:00
Łukasz Magiera 57868bafa6 Merge pull request #81 from xjrwfilecoin/calibration
modify workerRequest
2020-07-27 12:15:08 +02:00
ocean 7aa1ccf726 modify workerRequest 2020-07-27 14:21:29 +08:00
Simon Peffers 78739d9417 Fixes for failed CI tests 2020-07-26 00:46:23 -04:00
Simon Peffers 0f3105a01f Integrate blst signature library: https://github.com/supranational/blst 2020-07-25 21:38:18 -04:00
Łukasz Magiera 8227b7d16f Merge pull request #2573 from filecoin-project/feat/storage-remote-improvements
Update sector-storage, parallel fetch limit
2020-07-25 23:36:22 +02:00
Łukasz Magiera 0eb4296519 Merge pull request #80 from filecoin-project/feat/remote-improvements
Remote store improvements
2020-07-25 23:36:16 +02:00
Aayush Rajasekaran df33a16f78 CLI: Optionally include vesting details in msig inspect 2020-07-25 13:00:25 -04:00
Łukasz Magiera 0034944f20 Merge pull request #2563 from filecoin-project/asr/genesis-miners-balance
Genesis miners need to be registered in the market actor's balance table
2020-07-25 10:05:49 +02:00
Łukasz Magiera 053fb3ac19 Merge pull request #2586 from filecoin-project/asr/pledge-cc
Add CLI command to calculate pledge collateral of a CC sector
2020-07-25 10:04:05 +02:00
Łukasz Magiera fc28098292 Merge pull request #2584 from filecoin-project/fix/chainwatch/top-miners-by-reward-applies-wincount
Top Miner by Reward applies WinCount; Add max_height view
2020-07-25 10:02:39 +02:00
Łukasz Magiera c459a13dca Merge pull request #2593 from mgoelzer/paych_get_parse_as_fil
Parse amount as FIL in paych get
2020-07-25 09:54:54 +02:00
Łukasz Magiera 834f97606e Merge pull request #2594 from filecoin-project/bug/default-address-value
add port to default address flag
2020-07-25 09:53:52 +02:00
Łukasz Magiera 215d305e3d Merge pull request #2581 from filecoin-project/feat/extract-multistore
Extract multistore code
2020-07-25 09:53:18 +02:00
ognots de1574d21f add port to default address flag
port is required and things will break otherwise
2020-07-24 22:46:29 -04:00
Mike Goelzer b409c8f2be Parse amount as FIL in paych get 2020-07-25 01:54:21 +00:00
Aayush Rajasekaran 6cf2fe50dc Add CLI command to calculate pledge collateral of a CC sector 2020-07-24 19:32:48 -04:00
Mike Greenberg c6e0a69bbc fix(chainwatch): Consider win_count in top_miner_by_base_reward view 2020-07-24 18:07:21 -04:00
Mike Greenberg 718dd26043 fix(chainwatch): Move scheduler-specific schema; Add max_height view 2020-07-24 18:07:12 -04:00
hannahhoward dd885b7302 feat(multistore): extract multistore code to repo
Extract multistore + multiread blockstore to a seperate repo
2020-07-24 14:47:22 -07:00
Whyrusleeping f69cce4089 Merge pull request #2576 from filecoin-project/fix/testnet-compat
pull in specs actors fix for testnet
2020-07-24 13:17:41 -07:00
Łukasz Magiera 958cc8b947 Update sector-storage, parallel fetch limit 2020-07-24 22:11:11 +02:00
whyrusleeping cda0326cc3 go mod tidy 2020-07-24 13:09:19 -07:00
whyrusleeping 3bdcae9a59 dont update go-fil-commcid 2020-07-24 12:41:23 -07:00
whyrusleeping 1163d36b02 hardcode legacy multihash types for backward compat 2020-07-24 12:33:04 -07:00
whyrusleeping d764d86e89 pull in specs actors fix for testnet 2020-07-24 11:36:19 -07:00
Łukasz Magiera 295300ff46 stores: Fix remote fetch move 2020-07-24 19:53:51 +02:00
Łukasz Magiera 94e20ffee5 remote: Fetch into temp files 2020-07-24 16:54:00 +02:00
Łukasz Magiera ff9ffddd57 remote: Limit parallel fetches 2020-07-24 16:43:46 +02:00
Łukasz Magiera 7410c057c6 Merge pull request #2565 from filecoin-project/feat/better-client-cli-docs
working on lotus client UX
2020-07-24 13:35:35 +02:00
Sami Mäkelä 15481e63dd merge 2020-07-24 12:34:48 +03:00
Sami Mäkelä d90fac6e09 tests are working now 2020-07-24 12:22:50 +03:00
Steven Allen bb54dc97b6 Fix incorrect ID CID optimization
Blocks inlined into CIDs can technically contain CIDs themselves. I'm guessing
this check was trying to skip "actor" CIDs (inline cids with raw blocks).
2020-07-23 23:22:44 -07:00
Steven Allen b7a4dbb07f Support inline CIDs
And use the new CidBuilder from the spec actors.

This patch does not switch over to inline CIDs by default, but paves the way.
2020-07-23 23:12:32 -07:00
lanzafame 9207315b25 Change block validation aggregation type from sum to distribution 2020-07-24 15:47:41 +10:00
Whyrusleeping 5af537147d Merge pull request #2566 from filecoin-project/asr/specs-revert
Update specs-actors
2020-07-23 19:02:09 -07:00
Aayush Rajasekaran bac42c5121 Update specs-actors 2020-07-23 21:53:15 -04:00
whyrusleeping 2cf59a23e7 working on lotus client UX 2020-07-23 18:52:29 -07:00
Whyrusleeping 4710ce6f66 Merge pull request #2562 from filecoin-project/feat/add-gas-limit-to-send
cli: allow setting gas limit in send
2020-07-23 18:36:26 -07:00
Aayush Rajasekaran 5a6e12dc97 Genesis miners need to be registered in the market actor's balance table 2020-07-23 20:34:27 -04:00
Łukasz Magiera a33b5a9526 Merge pull request #2561 from filecoin-project/feat/better-hello-logging
add some better logging for hello handshake failures
2020-07-24 02:26:27 +02:00
Travis Person 9b711adfd1 cli: allow setting gas limit in send 2020-07-24 00:23:48 +00:00
whyrusleeping 0594177191 add some better logging for hello handshake failures 2020-07-23 16:58:21 -07:00
whyrusleeping e85dfc7499 add command to print state size statistics of actors 2020-07-23 15:32:28 -07:00
Łukasz Magiera 474ab02d44 Merge pull request #2557 from filecoin-project/feat/storage-gas
Update storage gas prices
2020-07-23 23:24:44 +02:00
Łukasz Magiera b0b2e02248 Merge remote-tracking branch 'origin/next' into feat/storage-gas 2020-07-23 23:19:42 +02:00
Aayush Rajasekaran 4351d033f3 Update CV 2020-07-23 17:13:04 -04:00
Łukasz Magiera 062eaa9eac Merge pull request #2558 from filecoin-project/feat/upgrade-markets-0.5.1
Update to markets 0.5.1
2020-07-23 23:05:58 +02:00
Łukasz Magiera 6aabd18479 More spect-actors updates 2020-07-23 23:03:25 +02:00
Jakub Sztandera 0d91dbb681 Go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 23:02:19 +02:00
hannahhoward 5b8d3068f7 feat(markets): update to markets 0.5.1
update to markets 0.5.1, pass on params v1 correctly for retrieval
2020-07-23 14:01:34 -07:00
Jakub Sztandera 673c5ac851 Update specs actors
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 23:01:05 +02:00
Jakub Sztandera 4abff16783 Update storage gas prices
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 22:56:32 +02:00
Łukasz Magiera 774c6901a8 Merge remote-tracking branch 'origin/master' into next 2020-07-23 22:48:38 +02:00
Łukasz Magiera 6b00400d46 Merge pull request #2532 from filecoin-project/feat/specs-actors-v0.9ish
Update specs-actors
2020-07-23 22:47:31 +02:00
Aayush Rajasekaran e8837688a2 update specs actors 2020-07-23 16:44:09 -04:00
Łukasz Magiera 7caea34671 Merge pull request #2546 from filecoin-project/fix/post-skip-partitions
wdpost: Correctly skip partitions with no sectors
2020-07-23 22:34:20 +02:00
Łukasz Magiera 824c9dae32 Update sector-storage more 2020-07-23 22:11:25 +02:00
Łukasz Magiera ed2e57dde6 Merge pull request #77 from yaohcn/timeout-ctx
add RPC timeout
2020-07-23 22:09:50 +02:00
Łukasz Magiera 3921623861 Merge pull request #2506 from filecoin-project/asr/null-tipset
API documentation must not tell lies
2020-07-23 22:07:36 +02:00
Łukasz Magiera 7e760f956a Merge pull request #2522 from filecoin-project/feat/paych-settle
Add CLI commands to settle & collect payment channels
2020-07-23 22:04:57 +02:00
ognots ebe197b0a8 extract and assign routable assign earlier on and add timeout
unspecified address should be calculated before use.
add a new timeout flag and add a timeout to TCP dial
2020-07-23 22:00:25 +02:00
ognots 6fda21d717 make address flag optional
use unspecified address as default value.
this will extract a routable IP to listen on and advertise
2020-07-23 22:00:25 +02:00
ognots 36472802f7 support unspecified addresses for worker
allow operators to set an unspecified address - 0.0.0.0 - when setting address flag in 'lotus-worker run'
to extract worker ip, dial the miner api.
if the dial succeeds, a valid route between miner and worker can be inferred
2020-07-23 22:00:25 +02:00
Łukasz Magiera 694286b30d Merge pull request #2556 from filecoin-project/chore/format_cid_correctly_in_sectors_status
Do not double-encode base32 CIDs as hex
2020-07-23 21:57:45 +02:00
Łukasz Magiera 7fafaf81c0 Merge pull request #78 from filecoin-project/feat/mock-post
mock: More accurate WindowPost
2020-07-23 21:56:51 +02:00
Łukasz Magiera 69cb7f6b03 Merge pull request #2555 from filecoin-project/feat/helptext-helpers
sprinkle some nice helptext returns around
2020-07-23 21:42:26 +02:00
Peter Rabbitson c18aba39df Do not double-encode base32 CIDs as hex 2020-07-23 21:42:13 +02:00
whyrusleeping fcef3696bc sprinkle some nice helptext returns around 2020-07-23 12:31:28 -07:00
Łukasz Magiera a4d85a88fe Merge pull request #2551 from filecoin-project/feat/helptext-helpers
add a helper to make printing helptext on errors easier
2020-07-23 21:26:01 +02:00
Łukasz Magiera af50e69293 Merge pull request #2552 from filecoin-project/fix/rbf-error-msg
Improve RBF error message
2020-07-23 21:21:06 +02:00
whyrusleeping d547bd9f83 use xerrors.As 2020-07-23 11:48:48 -07:00
whyrusleeping 72fe8cb479 add the actual code 2020-07-23 11:46:22 -07:00
Jakub Sztandera fc2c737e05 Improve RBF error message
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 20:44:55 +02:00
Łukasz Magiera 637ec168df Merge pull request #2550 from filecoin-project/fix/runtime-logs
fix: correctly pass variadic args from runtime log
2020-07-23 20:42:52 +02:00
Łukasz Magiera e5977658f4 Merge pull request #2539 from Stebalien/feat/use-adt
Refactor to use actor adt types instead of directly using HAMTs and AMTs
2020-07-23 20:42:32 +02:00
whyrusleeping f47fea3751 add a helper to make printing helptext on errors easier 2020-07-23 11:41:53 -07:00
Łukasz Magiera 526a981911 Merge pull request #2535 from filecoin-project/drand/loe-mainnet
Add multiple drand configs
2020-07-23 20:05:50 +02:00
Jakub Sztandera 7e4f425b79 Fix testgrounds build
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 19:55:10 +02:00
Łukasz Magiera 3791008b01 mock: Fix tests 2020-07-23 19:46:51 +02:00
Łukasz Magiera f9ef83b4bf wdpost: Test sector/partition faulting 2020-07-23 19:23:21 +02:00
frrist bd2363178d fix: correctly pass variadic args from runtime log 2020-07-23 10:13:16 -07:00
Łukasz Magiera b2fe2c0e3b mock: More accurate WindowPost 2020-07-23 19:00:20 +02:00
Jakub Sztandera 7ae69c70fb Cleanup DrandBootstrap
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 18:45:08 +02:00
Jakub Sztandera ff5ff4d294 Add multiple drand configs
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-23 18:45:08 +02:00
Steven Allen 5fc83f4d05 Refactor to use actor adt types instead of directly using HAMTs and AMTs
This way there's a single source of truth. Preparation for fixing
https://github.com/filecoin-project/specs-actors/issues/517 (requires changing
HAMT parameters).
2020-07-23 09:34:57 -07:00
Sami Mäkelä 556408a6f2 add a default verifreg rootkey 2020-07-23 18:07:57 +03:00
yaohcn fafecdfd17 add RPC timeout 2020-07-23 20:34:27 +08:00
yaohcn 977fefeb1b add sealing context 2020-07-23 19:55:06 +08:00
Łukasz Magiera 717728f33b Merge pull request #2548 from filcloud/close-file
close file
2020-07-23 12:32:53 +02:00
Frank c38b8b1265 close file 2020-07-23 18:21:13 +08:00
Łukasz Magiera 1e6afb3b73 wdpost: Correctly skip partitions with no sectors 2020-07-23 11:13:02 +02:00
Łukasz Magiera 22c684deb6 Merge pull request #2534 from filecoin-project/asr/getsize
Implement buffered blocktore GetSize()
2020-07-23 10:59:28 +02:00
Łukasz Magiera df801470ca Return size in bufbs.GetSize 2020-07-23 10:23:44 +02:00
Łukasz Magiera 78f7a96300 Merge pull request #2538 from filecoin-project/fix/chainwatch-id-table-reorgs
fix: handle reorgs for id mapping table
2020-07-23 10:18:39 +02:00
Łukasz Magiera 264a6cc02d Merge pull request #2540 from filecoin-project/asr/wallet
Wallet balance should display 0 if address can't be resolved
2020-07-23 10:16:10 +02:00
Łukasz Magiera c2b7e983bf Merge pull request #2541 from filecoin-project/feat/better-send
implement method and parameter specification for send
2020-07-23 10:14:19 +02:00
Łukasz Magiera 1d2901cb98 Merge pull request #2542 from filecoin-project/feat/chainwatch/ticker-jobs
feat(chainwatch): Ticker triggers view refresh independent of processing
2020-07-23 10:12:27 +02:00
Łukasz Magiera 01685c44e4 Merge pull request #2543 from filecoin-project/asr/readme
update devnet in readme
2020-07-23 10:10:17 +02:00
Aayush Rajasekaran 2c895e8df2 update devnet in readme 2020-07-22 23:34:26 -04:00
Mike Greenberg 6adfc78043 feat(chainwatch): Ticker triggers view refresh independent of processing 2020-07-22 22:45:59 -04:00
whyrusleeping 5f1da94971 implement method and parameter specification for send 2020-07-22 19:30:51 -07:00
Aayush Rajasekaran 14572aa817 Wallet balance should display 0 if address can't be resolved 2020-07-22 21:51:58 -04:00
Dirk McCormick e8ed47410f feat: payment channels CLI commands to settle / collect 2020-07-22 18:05:09 -07:00
Hannah Howard 7b00bb1ffe Merge pull request #2448 from filecoin-project/feat/payment-channel-settler
Submit vouchers automatically when payment channels settle
2020-07-22 18:03:48 -07:00
Aayush Rajasekaran 54c0ae17f4 Implement buffered blocktore GetSize() 2020-07-22 19:58:35 -04:00
frrist 5a26dba8e5 fix: handle reorgs for id mapping table 2020-07-22 16:47:47 -07:00
Łukasz Magiera f15a3fbaba Merge pull request #2537 from filecoin-project/schomatis/fix/chain/test-winning-post-client
run VerifyWinningPoStProof test on client node
2020-07-23 00:52:03 +02:00
Łukasz Magiera 9077cfdddb Merge pull request #2536 from filecoin-project/feat/mpool-find
implement mpool find cmd
2020-07-23 00:49:16 +02:00
Łukasz Magiera d962f98a5b Merge pull request #2507 from filecoin-project/feat/miner-sealing-jobs
miner: sealing jobs command
2020-07-23 00:47:59 +02:00
Lucas Molas 596f379690 run VerifyWinningPoStProof test on client node 2020-07-22 19:27:06 -03:00
whyrusleeping 4191e25038 implement mpool find cmd 2020-07-22 15:07:02 -07:00
Łukasz Magiera 7c19c5b229 Merge pull request #76 from filecoin-project/feat/jobs-api
Add api to get active tasks
2020-07-22 23:37:12 +02:00
Łukasz Magiera d8c3cf11f6 Merge pull request #2529 from filecoin-project/fix/dont-ignore-sync-errors
properly return sync errors
2020-07-22 23:34:04 +02:00
Łukasz Magiera 4dc805c2ad Merge pull request #2533 from filecoin-project/feat/mpool-helpers
implement mpool replace command
2020-07-22 23:28:12 +02:00
whyrusleeping 711850fb22 implement mpool replace command 2020-07-22 14:19:59 -07:00
whyrusleeping e36fb5e622 ensure blocks with invalid winning post are not accepted 2020-07-22 14:04:20 -07:00
Łukasz Magiera a80639c376 Merge pull request #2531 from filecoin-project/feat/chainwatch-debug
chainwatch: add http server for pprof
2020-07-22 23:02:49 +02:00
Łukasz Magiera 7b55e96b51 Merge pull request #2465 from filecoin-project/feat/paych-integration-test
WIP: Payment channel end to end testing
2020-07-22 22:50:11 +02:00
Dirk McCormick 462562a921 fix: stmgr forks test 2020-07-22 16:27:50 -04:00
Dirk McCormick 55cfdd6fe8 fix: lint fix 2020-07-22 16:15:57 -04:00
Dirk McCormick 90e29a7bee fix: paych test voucher total comparison 2020-07-22 16:09:46 -04:00
Jakub Sztandera 8fb3f7e40e Fix bls verification when there are no messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-22 21:59:05 +02:00
Travis Person 89c9938013 chainwatch: add http server for pprof 2020-07-22 19:54:52 +00:00
Dirk McCormick 53bb57882d fix: supply sufficient funds to actor in paych test 2020-07-22 15:30:43 -04:00
Łukasz Magiera 67a1b3e382 Merge pull request #2530 from filecoin-project/master
Merge master into next
2020-07-22 21:24:37 +02:00
whyrusleeping 78e7e59381 Add test to check that bad winning post blocks are rejected 2020-07-22 12:12:41 -07:00
whyrusleeping 75b9fdc0a0 return multierror after creation 2020-07-22 11:53:56 -07:00
Jakub Sztandera dc35f2f40c Use MpoolPushMessage
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-22 20:02:29 +02:00
Dirk McCormick 46b7546d51 fix: zero out gas limit 2020-07-22 13:55:31 -04:00
Łukasz Magiera 2af3a0c024 Merge pull request #2525 from filecoin-project/feat/more-lotus-shed-tools
Feat/more lotus shed tools
2020-07-22 19:36:32 +02:00
Łukasz Magiera d411de811a Merge pull request #2526 from filecoin-project/fix/reduce-gas
Enable gas estimation for SubmitWindowPost
2020-07-22 19:35:58 +02:00
Łukasz Magiera d70edbcb7c Set things on syscallShim 2020-07-22 13:35:10 -04:00
hannahhoward 8141fecaa9 feat(paych): add simple integration test 2020-07-22 13:35:10 -04:00
hannahhoward f27bd1dacb feat(settler): address pr comments
clean up imports, improve api import, fix text, support waiting on messages
2020-07-22 13:34:35 -04:00
hannahhoward 98535d5e06 feat(settler): monitor settled channels
Add a routine to monitor the chain for payment channels settling, and if it's a channel that we are
the recipient of payments on, submit any outstanding vouchers to the
chain
2020-07-22 13:34:35 -04:00
Jakub Sztandera a3589e4487 Enable gas estimation for SubmitWindowPost
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-22 19:28:04 +02:00
whyrusleeping c4462ab63e add some useful tools 2020-07-22 10:14:45 -07:00
Łukasz Magiera b815a0a3dc Merge pull request #2523 from filecoin-project/feat/gas-estim-seq
During gas estimation apply sequence of messages
2020-07-22 18:22:46 +02:00
Jakub Sztandera 629e03f303 Apply sequence of messages
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-22 18:16:07 +02:00
Łukasz Magiera c466bb1696 Merge pull request #2521 from chunqizhi/wenchu02
Fix bug when run windowPost
2020-07-22 18:12:59 +02:00
Łukasz Magiera 47a930ae53 Drop commented-out code 2020-07-22 18:12:31 +02:00
Jakub Sztandera 7d83349507 Format FIL as FIL
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-22 17:50:34 +02:00
Jakub Sztandera b3bac0c9e8 Add better error messages for message pre-execution errors
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-22 17:50:34 +02:00
chunqizhi 8d28b72741 Fix bug when run windowPost 2020-07-22 17:02:46 +08:00
chunqizhi 19ee2a021b Merge pull request #10 from filecoin-project/next
Merge
2020-07-22 16:56:23 +08:00
Sami Mäkelä 2780b57f83 Merge branch 'next' of github.com:filecoin-project/lotus into feat/genesis-rootkey 2020-07-22 11:48:04 +03:00
Jakub Sztandera 03b2a40e15 Merge pull request #2513 from filecoin-project/fix/debug-statmt-peermgr
change debug to debugf
2020-07-22 03:05:59 +02:00
lanzafame 6f04b1dbd8 change debug to debugf 2020-07-22 10:40:41 +10:00
Whyrusleeping 8c4d7b431b Merge pull request #2511 from filecoin-project/feat/retrieval-fixes
a few improvements and fixes for the retrieval CLI
2020-07-21 17:21:54 -07:00
Whyrusleeping a7bbf56cae Update cli/client.go 2020-07-21 16:52:48 -07:00
whyrusleeping fda0651bb5 a few improvements and fixes for the retrieval CLI 2020-07-21 16:43:57 -07:00
Łukasz Magiera 30c1608380 Merge pull request #2508 from filecoin-project/feat/epoch-boundary-mitigation
mitigate epoch boundary attacks by randomizing cutoff
2020-07-21 23:11:37 +02:00
Łukasz Magiera d55a49a9b2 Merge pull request #2505 from filecoin-project/expose-ComputeStateHTMLTempl
expose ComputeStateHTMLTempl
2020-07-21 20:45:45 +02:00
whyrusleeping cd00b0090b mitigate epoch boundary attacks by randomizing cutoff 2020-07-21 11:42:38 -07:00
Łukasz Magiera 2633bdd838 miner: sealing jobs command 2020-07-21 20:08:03 +02:00
Łukasz Magiera c7da20e53c Add api to get active tasks 2020-07-21 20:01:25 +02:00
Aayush Rajasekaran d254fb228b API documentation must not tell lies 2020-07-21 13:44:05 -04:00
Anton Evangelatov 54f1f6b8c9 use io.Writer 2020-07-21 19:23:25 +02:00
Łukasz Magiera ff3236ef36 miner: Group CLI commands 2020-07-21 19:19:47 +02:00
Jakub Sztandera 116e34d7ef Merge pull request #2504 from filecoin-project/feat/elno-in-inf
Add election count to influx
2020-07-21 19:16:28 +02:00
Jakub Sztandera fcd6a18090 Add election count to influx
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-21 19:00:29 +02:00
Anton Evangelatov 9154939d8f expose ComputeStateHTMLTempl 2020-07-21 18:47:38 +02:00
Raúl Kripalani b8475114ba Merge branch 'next' into inmem-journal 2020-07-21 17:42:51 +01:00
Raúl Kripalani 443473f833 fix tests. 2020-07-21 17:37:06 +01:00
Raúl Kripalani 4e82cf369c rename journal entries to journal events. 2020-07-21 17:32:01 +01:00
Raúl Kripalani d547c2588c record deals events in journal. 2020-07-21 17:26:44 +01:00
Łukasz Magiera 460c525e03 Merge pull request #2501 from filecoin-project/fix/chainwatch-receipts-gas
fix: use bigint for gas_used in message receipt
2020-07-21 18:00:21 +02:00
frrist 08006bce3d fix: use bigint for gas_used in message receipt
- prevents overflows
2020-07-21 08:49:27 -07:00
Raúl Kripalani cb8e209f78 journal: disable noisy message pool events. 2020-07-21 13:13:09 +01:00
Raúl Kripalani 3bd9d55a15 message pool: write message(s) in journal entries. 2020-07-21 13:10:29 +01:00
Raúl Kripalani d6e6eedd58 pipe sealing events to the journal. 2020-07-21 13:02:51 +01:00
Łukasz Magiera e21ea5355f Merge pull request #2497 from filcloud/issue-2494
only show updated env
2020-07-21 12:58:01 +02:00
Łukasz Magiera 892f67bd76 Merge pull request #2492 from filecoin-project/jimpick/spelling-mpool
Spelling fix
2020-07-21 12:04:02 +02:00
Frank a59ee872ff only show updated env 2020-07-21 16:11:01 +08:00
Jakub Sztandera 3b2d0a19cb Merge pull request #2493 from filecoin-project/fix/gas-estimation-nonce
Fix nonce setting in gas estimation
2020-07-21 03:45:54 +02:00
Jakub Sztandera 6673a80db5 Fix nonce setting in gas estimation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-21 03:41:18 +02:00
Jim Pick 3e00885ba6 Spelling fix 2020-07-20 18:30:21 -07:00
Łukasz Magiera c6193699bf Merge pull request #2491 from filecoin-project/fix/msig-cli
fix a few multisig cli issues
2020-07-21 02:22:14 +02:00
Łukasz Magiera 0c7b3675d8 Merge pull request #2490 from filecoin-project/feat/gotestsum-json-arti
Update to newer gotestsum
2020-07-21 02:21:22 +02:00
whyrusleeping 42a7cb1248 fix a few multisig cli issues 2020-07-20 17:17:53 -07:00
Jakub Sztandera 34fffb90d5 Merge pull request #2485 from filecoin-project/feat/update-fsm
Update storage-fsm
2020-07-21 01:41:51 +02:00
Jakub Sztandera d07c379c69 Update to newer gotestsum
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-21 01:32:20 +02:00
Łukasz Magiera b1eb2cf3a7 Update storage-fsm 2020-07-21 01:21:44 +02:00
Łukasz Magiera aba6eaf532 Merge pull request #2489 from filecoin-project/fix/chainwatch/restore-block-reward
Restore base block reward; capture WinCount w header
2020-07-21 01:21:00 +02:00
Łukasz Magiera 66c44d24ff Merge pull request #2484 from filecoin-project/feat/gas-estim
Add gas estimation
2020-07-21 01:09:16 +02:00
Mike Greenberg cf917fc426 fix(chainwatch): Restore base block reward metric capture 2020-07-20 17:31:27 -04:00
Jakub Sztandera 71ce8845d5 Fix nil big int
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 21:50:03 +02:00
Jakub Sztandera a5334eb2b3 Fix lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 21:41:05 +02:00
Jakub Sztandera e6b3ba0178 Slow down pledgeSectors test
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 21:31:06 +02:00
Jakub Sztandera 7da629d03b Update gas prices
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 21:31:05 +02:00
Łukasz Magiera 2cfe2fe3c3 Merge pull request #52 from filecoin-project/fix/update-gas
Use estimated gas for commit
2020-07-20 21:00:00 +02:00
Łukasz Magiera deb1d6812e Merge pull request #2481 from filecoin-project/fix/reward-state
Make reward actor state in genesis more realistic
2020-07-20 20:58:26 +02:00
Łukasz Magiera 2a67bc6e1d Merge pull request #2482 from filecoin-project/feat/client-listdeals-fil
client: Pretty print fil amounts in list-deals
2020-07-20 20:56:24 +02:00
Łukasz Magiera f38cbb6134 Merge pull request #2478 from filecoin-project/move-mutex
Graceful shutdown of PeerMgr
2020-07-20 20:55:11 +02:00
Jakub Sztandera 5fd49d4d6a Use estimated gas for commit
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 20:34:59 +02:00
Łukasz Magiera f83d828b24 Merge remote-tracking branch 'origin/master' into next 2020-07-20 19:52:07 +02:00
Jakub Sztandera 310fa67f9d Add gas estimation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 19:48:30 +02:00
Łukasz Magiera a764331a95 Merge pull request #2483 from filecoin-project/fix/miner-use-post-out
wdpost: Actually set post.Proofs
2020-07-20 19:35:55 +02:00
Łukasz Magiera 5cc2358376 Merge pull request #51 from filecoin-project/asr/maxdeals
Enforce max deals per sector
2020-07-20 19:35:38 +02:00
Łukasz Magiera a06ded53e9 Merge pull request #47 from TroyWind/fix-precommit-failed-state
fix precommit1 failed state
2020-07-20 19:24:58 +02:00
Łukasz Magiera 901f9c3760 wdpost: Actually set post.Proofs 2020-07-20 19:21:10 +02:00
Łukasz Magiera 217890c822 client: Pretty print fil amounts in list-deals 2020-07-20 19:02:52 +02:00
Aayush Rajasekaran 2d46edace9 enforce max deals per sector 2020-07-20 12:43:19 -04:00
Jakub Sztandera bb33994219 Make reward actor state in genesis more realistic
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 17:59:05 +02:00
Anton Evangelatov d16529dacb shutdown for peermgr 2020-07-20 17:45:46 +02:00
Anton Evangelatov 69ebd2bb85 move mutex before select 2020-07-20 17:45:46 +02:00
Raúl Kripalani 7459ec6bba add mpool journal events; fix dependency injection. 2020-07-20 16:37:32 +01:00
Sami Mäkelä 287bfd9fb2 merge 2020-07-20 18:36:06 +03:00
Sami Mäkelä 510b9cfac6 cleanup 2020-07-20 18:05:17 +03:00
Sami Mäkelä 3cc3c9a34e generate an account 2020-07-20 18:03:27 +03:00
Raúl Kripalani 226786c1da wip 2020-07-20 14:45:17 +01:00
Jakub Sztandera e1c9c4297b use cid for cmp
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-20 15:29:07 +02:00
Łukasz Magiera 740499a726 Merge pull request #2479 from filecoin-project/fix/actor-unsafe-cids
Update specs-actor with unsafa param fixes
2020-07-20 14:52:26 +02:00
Łukasz Magiera df5c3d7141 Merge pull request #2474 from filecoin-project/fix/genesis-verified-deal-power
genesis: set deals to end on sector expiry
2020-07-20 14:33:55 +02:00
Łukasz Magiera e6f3444eb2 mod tidy, gofmt 2020-07-20 14:31:39 +02:00
Łukasz Magiera 5301aa4db2 Update specs-actor with unsafa param fixes 2020-07-20 14:31:18 +02:00
Łukasz Magiera 68c6443467 Merge pull request #2475 from filecoin-project/asr/specs-update
Update specs-actors
2020-07-20 11:46:36 +02:00
Raúl Kripalani 4d2d8b2d11 Merge branch 'next' into inmem-journal 2020-07-20 10:38:58 +01:00
Łukasz Magiera b41ed492df Update chain-val 2020-07-20 11:37:25 +02:00
Sami Mäkelä a62edd05de adding rootkey to genesis 2020-07-20 11:28:45 +03:00
Aayush Rajasekaran 34c7acf022 Update specs-actors 2020-07-20 02:15:45 -04:00
Travis Person 28f7874942 genesis: set deals to end on sector expiry
Setting the deal to end on the sector expiry ensures we get the full
quality adjustment of power for the full sector.

Resolves #2404
2020-07-19 22:38:59 +00:00
Łukasz Magiera db92b99ec1 Merge pull request #2473 from filecoin-project/drand/testnet
Use drand testnet
2020-07-19 18:30:10 +02:00
Jakub Sztandera 15ae22c680 Use drand testnet
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-19 17:32:41 +02:00
Łukasz Magiera c4ded2fc07 Merge pull request #2469 from filecoin-project/fix/miner-info
fix miner info
2020-07-18 21:23:10 +02:00
Łukasz Magiera 65f509db40 Merge pull request #2468 from filecoin-project/fix/initial-pledge-api
fix StateMinerInitialPledgeCollateral
2020-07-18 21:22:38 +02:00
Łukasz Magiera 0c8b451a00 fix miner info 2020-07-18 14:54:21 +02:00
Łukasz Magiera 780a892eb4 fix StateMinerInitialPledgeCollateral 2020-07-18 12:31:32 +02:00
Łukasz Magiera 9b1d2f4c13 Merge pull request #2462 from jsign/jsign/ipfsbstore
ipfsbstore: offlinemode, and Has() fix
2020-07-18 01:52:37 +02:00
Łukasz Magiera 1a1bd38495 Merge remote-tracking branch 'origin/master' into next 2020-07-18 00:43:08 +02:00
Łukasz Magiera 3383e6adc0 Merge pull request #2461 from filecoin-project/feat/win-sched-storage
Update sector-storage with window based scheduler
2020-07-18 00:39:59 +02:00
Łukasz Magiera d266c665b0 Update sector-storage with windowed scheduler 2020-07-18 00:38:02 +02:00
Łukasz Magiera e02b40f04f Merge pull request #2460 from filecoin-project/feat/specs-actors-v0.8ish
Feat/specs actors v0.8ish
2020-07-18 00:36:13 +02:00
Łukasz Magiera 76ff938e00 Update chain-val 2020-07-18 00:27:17 +02:00
Łukasz Magiera a06e685cfc Merge pull request #2450 from filecoin-project/feat/seed-msig-work
Feat/seed msig work
2020-07-18 00:21:45 +02:00
Łukasz Magiera 6cd1240fa2 Merge pull request #2459 from filecoin-project/feat/single-multi-ds
Use single multi ds
2020-07-18 00:18:32 +02:00
Łukasz Magiera 0ded061037 Get math to work 2020-07-18 00:15:21 +02:00
Łukasz Magiera a109ef9cbe Merge pull request #67 from filecoin-project/feat/windows
Window based scheduling
2020-07-17 23:35:54 +02:00
whyrusleeping 665b873c96 more permissive parsing, also don't set useless actor addr 2020-07-17 14:27:56 -07:00
Ignacio Hagopian fd2262f51f ipbsbstore: offlinemode, and Has() fix
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-07-17 18:02:12 -03:00
Łukasz Magiera 956f4d5e14 update specs-actors more 2020-07-17 22:58:04 +02:00
Łukasz Magiera ee6269756c Merge pull request #2429 from filecoin-project/frrist/chainwatch-miner-precommit
feat: track miner precommit
2020-07-17 22:51:42 +02:00
Jakub Sztandera 0f5e56289e Update stores list when deleting
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-17 22:44:16 +02:00
Jakub Sztandera f2ebeaa7e4 Fix lint
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-17 22:29:39 +02:00
Jakub Sztandera cc1d23a94c Use single multi ds
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-17 22:14:37 +02:00
Łukasz Magiera 6ff99315a1 Merge pull request #2457 from filecoin-project/fix/master-merge
Fix chainwatch merge conflicts
2020-07-17 22:12:37 +02:00
frrist 7ff468ce85 feat: track miner precommit
- add materalized view showing all miner sector info
2020-07-17 12:25:54 -07:00
Mike Greenberg 7e46fc1d8f fix: Comment out affected Actor interactions from API shift 2020-07-17 15:19:05 -04:00
Mike Greenberg d30e120608 Merge branch 'master' into fix/master-merge
* master:
  fix(chainwatch): Parallel reward persistence; Tighten rpc logging
  fix(chainwatch): Remove --front switch
  feat(chainwatch): Add miner index on top_miners_by_base_reward view
  fix(chainwatch): Backoff processor when no work exists to process
  fix(log): Move metrics and stage updates to debug; Add --log-level switch
  fix(chainwatch): Correct index name on state_height view
  feat(chainwatch): Capture base_block_reward per epoch; Top miner by reward view
  SwapSigner API methods
  refactor: remove unused code
  refactor: wire up new processor and syncer
  refactor: implement processor and syncer

 Conflicts:
        Makefile
        cmd/lotus-chainwatch/storage.go
        cmd/lotus-chainwatch/sync.go
2020-07-17 15:18:33 -04:00
Anton Evangelatov ef8ab20a31 fix --actor flag for lotus-storage-miner info 2020-07-17 20:20:31 +02:00
Jakub Sztandera 1b5797be9d Merge pull request #2456 from filecoin-project/feat/increase-cron-gas
Increase cron gas
2020-07-17 20:11:21 +02:00
Raúl Kripalani becbff0b13 add NilJournal; fix call sites to ChainStore constructor. 2020-07-17 19:10:47 +01:00
Jakub Sztandera b6f3513173 Increase gas limit for CallRaw
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-17 19:54:39 +02:00
Raúl Kripalani 4bcf01938c use new journal from chain/store pkg. 2020-07-17 18:54:26 +01:00
Jakub Sztandera aafafce083 Increase cron gas
Make gas check overflow safe
2020-07-17 19:49:55 +02:00
Raúl Kripalani bef7d64e66 refactor EventType construction. 2020-07-17 18:35:15 +01:00
Łukasz Magiera 441c70750c Merge pull request #2413 from filecoin-project/feat/actors-miner-refactor
Consume miner actor refactor
2020-07-17 19:33:07 +02:00
Łukasz Magiera de271fe729 build: Bump API version 2020-07-17 18:30:50 +02:00
Łukasz Magiera 4e1e9ecf3e Address review 2020-07-17 18:23:19 +02:00
Łukasz Magiera 4b74aa5768 wdpost: Correctly prove 0 sectors 2020-07-17 16:47:16 +02:00
Łukasz Magiera 56d13534b4 ProvingSet -> ActiveSectors 2020-07-17 16:26:48 +02:00
Łukasz Magiera bbc2657023 Fix StateMinerProvingSet 2020-07-17 16:21:00 +02:00
Łukasz Magiera 0a471bb12c Update chain-val 2020-07-17 15:59:03 +02:00
Raúl Kripalani 695f6cfe45 wip in-memory journal. 2020-07-17 14:34:42 +01:00
Łukasz Magiera 06acda0ab9 mod tidy, gofmt 2020-07-17 15:18:40 +02:00
Łukasz Magiera cb6767a02b Merge remote-tracking branch 'origin/next' into feat/actors-miner-refactor 2020-07-17 15:18:11 +02:00
Łukasz Magiera b026de2feb Use specs-actors master 2020-07-17 15:03:59 +02:00
Łukasz Magiera d575c3a5f7 Merge pull request #48 from filecoin-project/feat/actors-miner-refactor
Updates for refactored miner actor
2020-07-17 14:55:41 +02:00
Łukasz Magiera 3932b81401 Use specs-actors master 2020-07-17 14:36:38 +02:00
Łukasz Magiera f1b3837186 fix worker setup/cleanup raciness 2020-07-17 12:59:12 +02:00
Łukasz Magiera 3c9fa8609a Merge remote-tracking branch 'origin/next' into feat/windows 2020-07-17 11:55:19 +02:00
Łukasz Magiera c4de2373fd Merge pull request #2443 from filecoin-project/feat/chainwatch/capture-base-block-rewards
Capture base block rewards
2020-07-17 11:49:29 +02:00
Mike Greenberg 18d1ab0cb9 fix(chainwatch): Parallel reward persistence; Tighten rpc logging 2020-07-16 22:58:27 -04:00
whyrusleeping fe4a8dc183 finish integration of multisig genesis accounts 2020-07-16 19:50:13 -07:00
Łukasz Magiera 389d148a60 Merge pull request #2447 from filecoin-project/dep/badger
Update badger
2020-07-17 01:48:57 +02:00
Łukasz Magiera 908d47305b fix race in runWorker 2020-07-17 01:46:59 +02:00
Łukasz Magiera bf315e63d7 sched: working tests 2020-07-17 01:33:40 +02:00
Łukasz Magiera cab0c74e08 more sched test debugging 2020-07-17 01:26:55 +02:00
Łukasz Magiera be97a2e4a5 Merge pull request #2428 from ribasushi/chore/pre-update-more-deps
Bump fil-commcid and filecoin-ffi deps
2020-07-17 00:50:13 +02:00
Peter Rabbitson e266f3b955 Bump fil-commcid and filecoin-ffi deps
Propagates correct on-chain commX CIDs
2020-07-17 00:38:42 +02:00
Sami Mäkelä f1b8e1a7b0 skip empty addresses 2020-07-16 15:31:00 -07:00
Sami Mäkelä 6a403df100 csv reader 2020-07-16 15:31:00 -07:00
Sami Mäkelä 38e0dbb236 cleanup 2020-07-16 15:30:59 -07:00
Sami Mäkelä ab5b69c5e4 add it to map 2020-07-16 15:30:59 -07:00
Sami Mäkelä 21b78514f5 working 2020-07-16 15:30:59 -07:00
whyrusleeping fb34d2b9e3 WIP: parse msig accounts file and include it into the genesis template 2020-07-16 15:30:59 -07:00
Jakub Sztandera 2b0492c6d6 Update badger
Replace is needed as badger master's latest tag is v2.0.1

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-17 00:14:51 +02:00
Łukasz Magiera 2e557573f4 gofmt 2020-07-16 23:41:15 +02:00
Łukasz Magiera be6b88f406 Some sched tests 2020-07-16 23:41:04 +02:00
Łukasz Magiera 0a6c939a73 Drop unused SectorInfo fields 2020-07-16 23:40:54 +02:00
Łukasz Magiera a846ac9b39 Merge pull request #72 from ribasushi/chore/pre-update-more-deps
Bump fil-commcid and filecoin-ffi deps
2020-07-16 23:06:53 +02:00
Peter Rabbitson d244749f1a Bump fil-commcid and filecoin-ffi deps
Propagates correct on-chain commX CIDs
2020-07-16 23:00:22 +02:00
Łukasz Magiera 16ab71d302 Merge branch 'next' into feat/windows 2020-07-16 19:32:34 +02:00
Łukasz Magiera 5dacd51b91 Merge pull request #2444 from filecoin-project/fix/1950
Update sector-storage, fixes #1950
2020-07-16 18:50:29 +02:00
Łukasz Magiera 19f7fd304d Update sector-storage, fixes #1950 2020-07-16 18:30:42 +02:00
Łukasz Magiera e0d64c5ac6 Merge pull request #73 from filecoin-project/fix/proofs-rand
Correctly turn randomness into fr32 values
2020-07-16 18:29:22 +02:00
Łukasz Magiera 4f8015b58a Correctly turn randomness into fr32 values 2020-07-16 18:18:43 +02:00
Mike Greenberg 6e7f21de03 fix(chainwatch): Remove --front switch 2020-07-16 12:14:41 -04:00
Mike Greenberg c3cc2eea46 feat(chainwatch): Add miner index on top_miners_by_base_reward view 2020-07-16 11:36:52 -04:00
Mike Greenberg 7bfcff2c18 fix(chainwatch): Backoff processor when no work exists to process 2020-07-16 11:36:52 -04:00
Mike Greenberg f2f797f088 fix(log): Move metrics and stage updates to debug; Add --log-level switch 2020-07-16 11:36:52 -04:00
Mike Greenberg 033cfa8f47 fix(chainwatch): Correct index name on state_height view 2020-07-16 11:36:52 -04:00
Mike Greenberg 0cfddae711 feat(chainwatch): Capture base_block_reward per epoch; Top miner by reward view 2020-07-16 11:36:52 -04:00
Łukasz Magiera 9f4fb428c9 gofmt 2020-07-16 17:24:55 +02:00
Łukasz Magiera bdc8f7a2cb Api getting correct sector expiration info 2020-07-16 17:24:41 +02:00
Łukasz Magiera 5a3ab5c5f0 More actor updates 2020-07-16 14:48:20 +02:00
Łukasz Magiera a87899ddb6 Merge pull request #2396 from filecoin-project/frrist/chainwatch-faster-sync
Improvments to Chainwatch Syncing and Processing Pipeline
2020-07-16 11:49:53 +02:00
Łukasz Magiera 6092854ece Merge pull request #2384 from filecoin-project/asr/seal-duration
Add expected seal duration to custom deal logic
2020-07-16 11:34:46 +02:00
Łukasz Magiera 02176ec5f8 Merge pull request #2426 from filecoin-project/feat/block-gas-limit
Add block gas limit verification
2020-07-16 11:30:25 +02:00
Łukasz Magiera bbd4ffe842 Merge pull request #2430 from filecoin-project/asr/swap-signer
SwapSigner API methods
2020-07-16 11:28:51 +02:00
Aayush Rajasekaran 605560a981 SwapSigner API methods 2020-07-15 21:54:18 -04:00
Jakub Sztandera 02631155dc Add block gas limit verification
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-16 01:00:03 +02:00
Aayush Rajasekaran a5ef629cef Add expected seal duration to custom deal logic, reject deals that start too early 2020-07-15 17:31:50 -04:00
Łukasz Magiera 9b6afd82aa Merge pull request #2422 from filecoin-project/feat/upgrade-retrieval
Update markets with new retrieval
2020-07-15 23:10:20 +02:00
Łukasz Magiera 4553af505f Merge pull request #2343 from filecoin-project/feat/more-gas
Make virtual gas real
2020-07-15 23:09:17 +02:00
hannahhoward 61f120222f feat(markets): update markets with new retrieval 2020-07-15 14:04:31 -07:00
Łukasz Magiera b79b3d0c00 Merge pull request #50 from filecoin-project/fix/update-gas
Allow lotus to decide gas limit and gas price
2020-07-15 21:47:33 +02:00
Jakub Sztandera 610ed0dc13 Change OnIpldGet
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 21:40:49 +02:00
Jakub Sztandera 399c171f03 Update gas limits, update storage-fsm
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 21:21:53 +02:00
Jakub Sztandera 7e92e888bf Update gas limits, allows lotus to determine limit and price
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 21:12:02 +02:00
frrist b4c9ba0a8b refactor: remove unused code 2020-07-15 11:43:04 -07:00
frrist 9a53bf8f83 refactor: wire up new processor and syncer 2020-07-15 11:42:19 -07:00
frrist 41f4f1fd83 refactor: implement processor and syncer
- When chainwatch is ran it will first start a Syncer that continuously collects blocks from the
ChainNotify channel and persists them to the blocks_synced table. Once the Syncer has caught the
blocks_synced table up to the lotus daemons current head a Processor is started. The Processor
selects a batch of contiguous blocks and extracts and stores their data. It attempts to do as much
work as it can in parallel. When the blocks are done being processed their corresponding
processed_at and is_processed fields in the blocks_synced table are filled out.
2020-07-15 11:42:19 -07:00
Jakub Sztandera 7b14d445b4 Update message gas limits
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 20:01:57 +02:00
Jakub Sztandera 61156afd90 Update chain val
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 20:01:57 +02:00
Jakub Sztandera 347c2ed498 Update chain-val to new gas values
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 20:01:57 +02:00
Jakub Sztandera 4dd6f6400c Make virtual gas real
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 20:01:57 +02:00
Jakub Sztandera c0eb4b39ac Reorg some gas charges
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-15 20:01:56 +02:00
Aayush Rajasekaran 55618f20d4 Merge pull request #2381 from filecoin-project/asr/faq
Add a FAQ
2020-07-15 13:52:23 -04:00
Aayush Rajasekaran d7db55af39 Add a FAQ 2020-07-15 13:48:10 -04:00
Łukasz Magiera c1233291bc Merge remote-tracking branch 'origin/master' into next 2020-07-15 19:47:27 +02:00
Łukasz Magiera 0f2043d874 Merge pull request #2317 from filcloud/issue-2304
fix issue 2304: ux improvements
2020-07-15 19:38:35 +02:00
Łukasz Magiera 068f6a2e83 Merge pull request #2362 from filecoin-project/mock-clock
introduce the ability to mock time.
2020-07-15 18:41:00 +02:00
Łukasz Magiera 6b9fd74f8e Merge pull request #2419 from filecoin-project/schomatis/fix/newtipset/mismatch-lengths
fix: NewTipSet: check mismatch in number of parents
2020-07-15 17:49:39 +02:00
Łukasz Magiera 1efb8b4cc0 update cbor-gen 2020-07-15 16:54:29 +02:00
Łukasz Magiera 328439a8bf gofmt 2020-07-15 16:53:17 +02:00
Raúl Kripalani a44e80c829 Merge branch 'next' into mock-clock 2020-07-15 15:51:11 +01:00
Łukasz Magiera 041d70a7ff Updates for refactored miner actor 2020-07-15 16:51:02 +02:00
Raúl Kripalani 86457e5201 fix flaky test (miner#TestMessageFiltering). (#2411) 2020-07-15 15:50:32 +01:00
Łukasz Magiera ccba495840 Merge pull request #2331 from filecoin-project/chainwatch/market-state-deal-tracking
feat: add deal state and proposal tracking to cw
2020-07-15 16:19:10 +02:00
Łukasz Magiera 59b2908620 Merge pull request #2415 from filecoin-project/feat/test/post/standard-tag
debug: standard PoSt tag
2020-07-15 16:07:21 +02:00
Lucas Molas 21ffe188f4 fix: NewTipSet: check mismatch in number of parents 2020-07-15 08:17:50 -03:00
Łukasz Magiera 658681d002 Merge pull request #2412 from filecoin-project/feat/drand-devnet
Update to drand devnet
2020-07-15 12:47:36 +02:00
Łukasz Magiera d41a07161d paychmgr: handle voucher.ChannelAddr 2020-07-15 11:12:03 +02:00
Łukasz Magiera fc13794f5f Update StateMinerProvingDeadline 2020-07-15 11:06:14 +02:00
刘林欣 d4c8be92b0 fix precommit1 failed state 2020-07-15 09:41:35 +08:00
Lucas Molas 0313ab4e49 debug: standard PoSt tag 2020-07-14 19:22:25 -03:00
Łukasz Magiera bbfa66636d More test fixing 2020-07-14 22:30:25 +02:00
Łukasz Magiera 59e5144122 fix storage-miner cli 2020-07-14 22:14:37 +02:00
Jakub Sztandera 6ecc96d193 Update to drand devnet
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-14 21:16:26 +02:00
Łukasz Magiera 0ccc9f65a6 gofmt 2020-07-14 19:10:37 +02:00
Łukasz Magiera af87b9aa98 Fix widowed PoSt scheduler 2020-07-14 19:10:31 +02:00
Raúl Kripalani 0484496d92 Merge branch 'next' into mock-clock 2020-07-14 18:08:26 +01:00
Raúl Kripalani fbf6596f20 revert to real time for socket/stream deadlines. 2020-07-14 17:42:52 +01:00
Raúl Kripalani 55d88440eb refine block timing log statements. 2020-07-14 17:12:00 +01:00
Łukasz Magiera f53bd6bdba StateSectorPartition api 2020-07-14 14:32:17 +02:00
Łukasz Magiera faebc4c948 WIP Integrating specs-actors with refactored miner state 2020-07-14 13:45:45 +02:00
Łukasz Magiera 55cfebb439 Merge pull request #2405 from keyko-io/fix/hamt-loadnode
Fixing hamt bittreewidth
2020-07-14 12:39:03 +02:00
Sami Mäkelä d388566d5c fixing 2020-07-14 12:54:18 +03:00
chunqizhi 3e226b5aaa Add case: Removed in fsm.go 2020-07-14 16:41:19 +08:00
Łukasz Magiera 5f1cc6cefd Merge pull request #2398 from filecoin-project/asr/msig-cli
clarify multisig create helptext
2020-07-14 10:03:37 +02:00
Łukasz Magiera 8d03a9e739 Merge pull request #2391 from jiyilanzhou/master
api/api_full.go: fix method signature
2020-07-14 10:03:17 +02:00
Frank 5cc4f8132a reset comment 2020-07-14 10:53:24 +08:00
Aayush Rajasekaran 17642b5ecb clarify multisig create helptext 2020-07-13 19:50:18 -04:00
Whyrusleeping 62a503d686 Merge pull request #1563 from filecoin-project/feat/cache-bs
add an lru caching blockstore
2020-07-13 16:20:43 -07:00
erchuan.ma bb49546728 api/api_full.go: fix method signature
method signature not match
2020-07-13 22:35:51 +08:00
Łukasz Magiera a778917806 gofmt 2020-07-13 13:35:10 +02:00
Łukasz Magiera 2e4ed57363 Merge remote-tracking branch 'origin/master' into next 2020-07-13 13:34:56 +02:00
Łukasz Magiera 3f017688c7 Merge pull request #2377 from filecoin-project/asr/msig-api
API improvements
2020-07-13 13:24:09 +02:00
Łukasz Magiera bb07c0a5df Merge pull request #2378 from austinabell/zipml
Check message length before generating Cids
2020-07-13 13:20:56 +02:00
Łukasz Magiera 4e987163af Merge pull request #2385 from filecoin-project/feat/fountain-amount
lotus_fountain: add facuet distribution amount flag
2020-07-13 13:16:19 +02:00
Łukasz Magiera 7ec58255bf Merge pull request #2387 from filecoin-project/asr/cli-api
CLI/API improvements
2020-07-13 13:15:43 +02:00
Łukasz Magiera 1794862d73 Merge pull request #44 from filecoin-project/asr/mutex
Packing deals improvements
2020-07-13 12:58:10 +02:00
Łukasz Magiera 937eba4785 Merge pull request #70 from filecoin-project/asr/refactor
extract GetRequiredPadding
2020-07-13 12:52:43 +02:00
Łukasz Magiera 2c87890758 Merge pull request #2354 from filecoin-project/asr/specs-update
specs actors update
2020-07-13 12:50:25 +02:00
Raúl Kripalani 973dbd6a13 Merge branch 'next' into mock-clock 2020-07-13 11:29:53 +01:00
Łukasz Magiera c1048a0353 vm: Separate logger for actors 2020-07-13 12:29:27 +02:00
Łukasz Magiera 896f0c69fc gomod: Use chain-val master 2020-07-13 12:27:35 +02:00
Łukasz Magiera fcb6255161 Merge pull request #45 from filecoin-project/asr/temp
Increase gas limit
2020-07-13 12:15:20 +02:00
Aayush Rajasekaran 1a5c20ca75 CLI/API improvements 2020-07-13 01:13:56 -04:00
Travis Person f18bef867e lotus_fountain: add facuet distribution amount flag 2020-07-12 21:03:05 +00:00
frrist c9cb39d5a0 polish: update deal proposal table if slashed 2020-07-12 11:39:58 -07:00
Aayush Rajasekaran 6504b914ba Update chain-val and storage-fsm to temp commits 2020-07-12 01:15:47 -04:00
Aayush Rajasekaran 6e92d6a6f0 Increase gas limit 2020-07-12 00:50:02 -04:00
Aayush Rajasekaran 7e9f9106c9 Update specs actors 2020-07-12 00:30:42 -04:00
Aayush Rajasekaran 69626272d5 Update with reward state changes 2020-07-12 00:30:42 -04:00
Aayush Rajasekaran eed44d12ba Add log method to Runtime 2020-07-12 00:30:42 -04:00
Aayush Rajasekaran 2a61b241a8 Replace abi.BitFieldUnion with bitfield.MultiMerge 2020-07-12 00:30:42 -04:00
Aayush Rajasekaran 858513559b API improvements 2020-07-11 23:54:58 -04:00
Aayush Rajasekaran 12b63d59b2 Include unlock duration as a param for multisig creation 2020-07-11 23:54:58 -04:00
Aayush Rajasekaran a92d59317c Acquire lock before allocating pieces to sectors 2020-07-11 22:33:04 -04:00
Aayush Rajasekaran 1d67dcfa3c extract GetRequiredPadding 2020-07-11 22:32:25 -04:00
Frank 14ec9a2068 update storage miner and seal worker document 2020-07-11 16:55:13 +08:00
austinabell 2fd860324f avoid generating cids on all messages before checking message length 2020-07-10 19:59:58 -04:00
Łukasz Magiera 045e597787 remove open windows when dropping workers 2020-07-11 01:21:48 +02:00
frrist f9d8b051f4 polish: track tipset height for processing 2020-07-10 15:01:55 -07:00
frrist 1e2e62bad6 polish: track unpadded piece size in deal prop 2020-07-10 15:01:55 -07:00
frrist e13a251cc8 feat: add deal state and proposal tracking to cw 2020-07-10 15:01:55 -07:00
Łukasz Magiera 39d609a661 Merge pull request #2169 from waynewyang/evnet
set called 'true' after handle be called
2020-07-10 22:28:00 +02:00
Łukasz Magiera 89a6b6842c Merge remote-tracking branch 'origin/master' into next 2020-07-10 22:24:41 +02:00
Łukasz Magiera 5530a7bef2 Merge pull request #2322 from filecoin-project/frrist/deal-state-changes
Frrist/deal state changes
2020-07-10 21:57:42 +02:00
Łukasz Magiera 8ce35e30dd Merge remote-tracking branch 'origin/master' into next 2020-07-10 21:50:38 +02:00
Łukasz Magiera bc23b0ed4f Merge pull request #2278 from filecoin-project/fix/rename-vars
rename sync variables.
2020-07-10 21:36:04 +02:00
Łukasz Magiera dc9df10f5a sync: Also rename span attributes 2020-07-10 21:31:58 +02:00
Łukasz Magiera 6569cf8e0c Merge pull request #2347 from filecoin-project/ingar/select-retrieval-providers
Add a maxPrice option to the client retrieval CLI
2020-07-10 21:29:12 +02:00
Łukasz Magiera 58769b1d75 Merge pull request #2374 from filecoin-project/fix/voucher-lane-limit
Account for other vouchers when checking balance
2020-07-10 21:28:49 +02:00
Łukasz Magiera 69125f15f9 Merge pull request #2329 from filecoin-project/feat/chainwatch/capture-power
chainwatch: Capture power from miner and reward actors
2020-07-10 21:25:46 +02:00
Dirk McCormick a12e5884ab fix: add TODO about lane merging 2020-07-10 15:24:13 -04:00
Łukasz Magiera 3fcf7a0344 client: Fix an off-by-10^18 error setting retrieval maxPrice 2020-07-10 21:18:18 +02:00
Łukasz Magiera 3f0312a728 Merge pull request #2370 from filecoin-project/disable-call-StatePledgeCollateral
disable call to StatePledgeCollateral
2020-07-10 21:08:03 +02:00
Łukasz Magiera 8be4375288 Merge pull request #2372 from filecoin-project/fix/ret-keynotfound
Fix retrieval datastore-key-not-found error
2020-07-10 20:32:38 +02:00
Dirk McCormick f07c7377b6 feat: account for other vouchers when calculating voucher validity 2020-07-10 14:06:52 -04:00
Ingar Shu 7929a335c3 Add default max price, fix error messaging 2020-07-10 10:11:15 -07:00
Ingar Shu 5411ebb806 Add maxPrice option to client retrieval
- Use best offer if multiple offers returned
2020-07-10 10:04:54 -07:00
Łukasz Magiera ede57c0b12 Fix retrieval datastore-key-not-found error 2020-07-10 18:33:26 +02:00
Łukasz Magiera 56dd3f40e0 Merge pull request #2361 from filecoin-project/fix/seal-worker-init
Fix seal-worker init
2020-07-10 18:20:01 +02:00
Mike Greenberg ebd0e93a99 chainwatch: app exit with non-zero on error 2020-07-10 11:58:41 -04:00
Mike Greenberg 3332290626 fix: Logic bug; Schema column update stateroot -> state_root 2020-07-10 11:54:11 -04:00
Anton Evangelatov 0dbca1377a disable call to StatePledgeCollateral 2020-07-10 17:52:44 +02:00
Raúl Kripalani 13de81b3b2 introduce the ability to mock time. 2020-07-10 15:51:45 +01:00
Łukasz Magiera b245fd0b7d Merge pull request #2232 from filecoin-project/feat/verifreg-bitwidth
set proper bitwidth for verifreg command hamts
2020-07-10 16:19:45 +02:00
Łukasz Magiera 65648e6469 Fix seal-worker init 2020-07-10 16:13:35 +02:00
Łukasz Magiera 6a6bcd09ee Merge pull request #2346 from filecoin-project/feat/paychmgr-tst
Refactor payment channel manager
2020-07-10 16:12:53 +02:00
Frank 5dfb8c9474 add deprecation support 2020-07-10 20:18:09 +08:00
Łukasz Magiera a99a7fc484 Merge remote-tracking branch 'origin/master' into next 2020-07-10 10:37:27 +02:00
Łukasz Magiera e81f182840 Merge pull request #2330 from filecoin-project/feat/fil-units
produce and parse FIL suffix on FIL strings
2020-07-10 09:41:01 +02:00
FrankandAnton Evangelatov 973de3239f Update stats source path
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-07-10 10:07:53 +08:00
whyrusleeping a3602d4fcf fix tests, handle parsing with suffixes properly 2020-07-09 17:26:06 -07:00
Dirk McCormick b888385ba1 refactor: lint fixes 2020-07-09 18:49:43 -04:00
Dirk McCormick 6c70ef7c7d refactor: simplify state management 2020-07-09 18:27:39 -04:00
frrist bf6b76a4fb feat: add market deal state & proposal predicates
- detects changes in the market deal proposal and market deal state
amts.
2020-07-09 14:43:21 -07:00
Łukasz Magiera 7c73dbfba9 Merge pull request #2345 from filecoin-project/ingar/add-piece-cid-to-retrieval
Add piece cid to retrieval queries
2020-07-09 23:25:00 +02:00
Dirk McCormick 1cdb008bd5 fix: lane allocation 2020-07-09 17:20:17 -04:00
Dirk McCormick 770ee8b54d test: payment channel manager voucher and channel info tests 2020-07-09 16:35:43 -04:00
Ingar Shu 4aa30c1a51 Plumb piece cid in miner-specific query functions 2020-07-09 13:14:24 -07:00
Ingar Shu 171ce39e8c Add piece cid to retrieval queries 2020-07-09 13:03:17 -07:00
Łukasz Magiera 18199ff323 Merge pull request #2223 from filecoin-project/feat/miner-msg-select-use-gas-price-is-more-better
miner: Use gas price when selecting messages
2020-07-09 21:53:16 +02:00
Łukasz Magiera 0b5e63b7c3 Merge pull request #2328 from filecoin-project/feat/paychmgr-test
Tests for payment channel manager
2020-07-09 21:51:26 +02:00
Łukasz Magiera 2836b521f3 Merge pull request #2333 from filecoin-project/asr/temp
Correct initial setup of sector id counter
2020-07-09 21:40:30 +02:00
Łukasz Magiera c501f55695 Merge pull request #2344 from filecoin-project/fix/sectorstorage-osx
Fix osx build
2020-07-09 20:54:56 +02:00
Łukasz Magiera c3b208869a Fix osx build 2020-07-09 20:49:59 +02:00
Łukasz Magiera f0dae546b5 Merge pull request #68 from filecoin-project/fix/darwin
Fix build on osx
2020-07-09 20:46:11 +02:00
Łukasz Magiera d1a18c15e6 Fix build on osx 2020-07-09 20:43:19 +02:00
Łukasz Magiera 7f115954fd sched: More fixes 2020-07-09 19:17:15 +02:00
Łukasz Magiera f01378f83f Merge pull request #2336 from filecoin-project/mute/refresh
Mute RtRefreshManager logs as they break terminal emulation
2020-07-09 16:40:27 +02:00
Jakub Sztandera b0cf3d3228 Mute RtRefreshManager logs as they break terminal emulation
RtRefreshManager logs random binary strings, which somtimes might be
partial multi-byte Unicode or ASCI escape codes.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-09 16:21:55 +02:00
Łukasz Magiera 5c5fe09990 post-rebase fixes 2020-07-09 15:18:45 +02:00
Łukasz Magiera 45c1b268f1 sched: Remove unused worker field 2020-07-09 15:10:06 +02:00
Łukasz Magiera 903731adaf sched: Fix tests 2020-07-09 15:10:06 +02:00
Łukasz Magiera da96f06202 sched: implement runWorker 2020-07-09 15:10:06 +02:00
Łukasz Magiera ac7dc28cfb sched: WIP Windows 2020-07-09 15:10:06 +02:00
Sami Mäkelä 0784e57082 handling verified price here 2020-07-09 13:36:22 +03:00
Łukasz Magiera a445979f1a Merge pull request #64 from chunqizhi/wenchu
Modity addCachePathsForSectorSize func to support 2KiB sector size devnet locally also
2020-07-09 08:43:16 +02:00
Aayush Rajasekaran 57a1418ff8 Correct initial setup of sector id counter 2020-07-09 01:05:27 -04:00
Frank ce0f9922ee Update lotus-seal-worker to lotus-worker 2020-07-09 11:04:45 +08:00
Frank b2f94e4239 update lotusstorage 2020-07-09 10:20:25 +08:00
Frank 5b9baba900 fix issue 2304: ux improvements 2020-07-09 10:20:25 +08:00
whyrusleeping a79b31c230 produce and parse FIL suffix on FIL strings 2020-07-08 16:16:45 -07:00
Mike Greenberg 1081679360 feat(chainwatch): Capture miner_power data 2020-07-08 18:56:55 -04:00
Mike Greenberg b9effac437 feat(chainwatch): Capture baseline power in chain_power 2020-07-08 18:40:09 -04:00
Dirk McCormick 9a45ffd459 test: add basic paychmgr store test 2020-07-08 17:34:44 -04:00
Łukasz Magiera 7d841dbfa8 Merge pull request #2286 from filecoin-project/feat/client-multi-bstore
Multiple client blockstores
2020-07-08 23:21:22 +02:00
Łukasz Magiera cc09c5b6d9 client: Don't use filestore for local improts 2020-07-08 23:13:14 +02:00
Łukasz Magiera 5a117d8edf gofmt 2020-07-08 23:05:54 +02:00
Łukasz Magiera 802f16c542 client: Reenable nocopy on import 2020-07-08 23:05:43 +02:00
Łukasz Magiera 66237415c5 Merge remote-tracking branch 'origin/next' into feat/client-multi-bstore 2020-07-08 22:48:47 +02:00
Łukasz Magiera 8fbeebb86d rename sync variables. 2020-07-08 22:02:28 +02:00
Łukasz Magiera 5ca1be567d Merge pull request #2323 from filecoin-project/feat/fastretrieval
Support fast-retrieval deals
2020-07-08 21:54:46 +02:00
Łukasz Magiera b1bd8a4394 Use sector-storage next branch 2020-07-08 21:53:50 +02:00
Łukasz Magiera e3b9ba01c2 Merge pull request #66 from filecoin-project/fix/es
Fixes / changes for fast-retrieval support
2020-07-08 21:51:34 +02:00
Łukasz Magiera 2c00b92325 Merge remote-tracking branch 'origin/master' into next 2020-07-08 21:47:05 +02:00
Łukasz Magiera 24d8a84ad7 Merge pull request #2252 from filecoin-project/override-maddr
add `actor` flag to `lotus-storage-miner` for proving and info calls
2020-07-08 21:28:29 +02:00
Łukasz Magiera 56bf503210 Merge pull request #2303 from filecoin-project/asr/cli
correct error message
2020-07-08 21:18:34 +02:00
Łukasz Magiera 9a5b26c50c Merge pull request #2326 from filecoin-project/feat/optim-badger
Ignore log.Sync() error
2020-07-08 21:16:13 +02:00
Łukasz Magiera 4952d4be77 Merge pull request #2321 from filecoin-project/frrist/generic-adt_array-diffing
polish: genericize adt array diff & extract store
2020-07-08 21:15:36 +02:00
Jakub Sztandera 68081a7a1f Ignore log.Sync() error
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-08 21:13:22 +02:00
Łukasz Magiera 67dd5937ca Merge pull request #2324 from filecoin-project/feat/optim-badger
Fix daemon shutdown and enable compact on close
2020-07-08 21:12:57 +02:00
Łukasz Magiera 15f19adc6e Merge pull request #2315 from filecoin-project/feat/upgrade-markets-0.4.0
Upgrade markets with fast retrieval support
2020-07-08 21:12:35 +02:00
Łukasz Magiera 16690fc1d4 Merge pull request #2325 from filecoin-project/feat/upgrade-markets-0.4.0-fix
Adjust OnDealExpiredOrSlashed timeout to deal expiry
2020-07-08 21:10:58 +02:00
Jakub Sztandera ebecca64a1 Fix daemon shutdown
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-08 21:08:24 +02:00
Jakub Sztandera 0e7b7c9fdb Update go-ds-badger2
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-08 21:08:23 +02:00
Dirk McCormick c9b4dab1e1 fix: adjust OnDealExpiredOrSlashed timeout to deal expiry 2020-07-08 15:03:16 -04:00
Jakub Sztandera d3d4612575 Re-eanble compact on close
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-08 20:59:46 +02:00
Łukasz Magiera 99796220f9 Support fast-retrieval deals 2020-07-08 20:42:07 +02:00
frrist 1254f9de0c clean: go mod tidy 2020-07-08 11:21:40 -07:00
frrist d78b7e57c7 polish: include key in AdtArrayDiff interface
- some values do not contain their keys
2020-07-08 11:19:14 -07:00
frrist 509e3b653c polish: genericize adt array diff & extract store
- adds testing for adt diff
2020-07-08 11:19:14 -07:00
Łukasz Magiera 9af64c9b21 ffiwrapper: Fix UnsealPiece 2020-07-08 19:51:26 +02:00
Łukasz Magiera 631b8b5802 Merge pull request #2319 from filecoin-project/feat/optim-badger
Use mostly defaults for badger options
2020-07-08 18:05:58 +02:00
Jakub Sztandera 40286e4192 Use mostly defaults for badger options
This options are the defults in badger `master` now.
We should update to next badger version as soon as it is stable, it has
some nice improvments.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-08 17:54:33 +02:00
Łukasz Magiera 56570a2200 mock: Implemet ReleaseUnsealed correctly 2020-07-08 17:39:58 +02:00
Łukasz Magiera 8e0d33a1fd Updates for sectors-storge next 2020-07-08 17:23:27 +02:00
Aayush Rajasekaran 56a892e5f9 Merge pull request #2246 from TroyWind/fit-multiple-piece-into-a-sector
a sector contains multiple deals(pieces), the state of deals incorrect
2020-07-08 11:21:41 -04:00
Łukasz Magiera c0a242a1eb fsutil: FileSize util 2020-07-08 17:09:35 +02:00
Łukasz Magiera 0bc41d562d Move statfs to fsutil 2020-07-08 16:58:18 +02:00
Łukasz Magiera 2b9c05d395 Merge remote-tracking branch 'origin/next' into feat/upgrade-markets-0.4.0 2020-07-08 15:53:55 +02:00
Łukasz Magiera d16de56280 gofmt 2020-07-08 14:35:53 +02:00
Łukasz Magiera b049c5a7d1 Merge remote-tracking branch 'origin/master' into next 2020-07-08 14:35:40 +02:00
Łukasz Magiera ba0f7d703e Set lower polling interval for deal client 2020-07-08 12:52:37 +02:00
Łukasz Magiera 8e46753e38 Merge pull request #2306 from filecoin-project/fix/mark-bad
Fix bad block rason if ValidateBlock fails
2020-07-08 11:49:50 +02:00
hannahhoward aff1d02046 feat(markets): use tagged go-fil-markets 2020-07-08 02:12:18 -07:00
hannahhoward 124de31055 fix(markets): revert storage fsm changes 2020-07-08 02:05:15 -07:00
hannahhoward 24e3a4218b feat(markets): upgrade to latest
upgrade to latest markets with fast retrieval, underlying data transfer upgrade
2020-07-08 01:35:50 -07:00
Hannah Howard fe73c9fb71 Merge pull request #2240 from filecoin-project/feat/api-verif-cap
StateAPI for Verified Data Cap
2020-07-08 01:02:18 -07:00
Jakub Sztandera 74db060cdb Fix bad block rason if ValidateBlock fails
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-08 03:55:56 +02:00
whyrusleeping 0285a9741c remove debug logs 2020-07-07 16:44:57 -07:00
Łukasz Magiera 77cf6e49a0 Merge pull request #65 from filecoin-project/feat/local-space-alloc
Better storage reservation logic
2020-07-08 01:27:59 +02:00
Aayush Rajasekaran 53b6de6c4b CLI proving info: Check sector index before reading from deadlines 2020-07-07 18:56:53 -04:00
Aayush Rajasekaran 8645839974 correct error message 2020-07-07 18:29:45 -04:00
Łukasz Magiera 683aded05c Merge pull request #2302 from filecoin-project/asr/cli
Minor CLI improvements
2020-07-08 00:01:31 +02:00
Aayush Rajasekaran 20c80f977c Rename state compute's height flag to vm-height 2020-07-07 17:40:57 -04:00
Aayush Rajasekaran eac8a909e9 Unify all sender flags in CLI under the same name 2020-07-07 17:37:43 -04:00
Łukasz Magiera c97af35176 Merge pull request #2285 from filecoin-project/asr/timer
Update storage-FSM, add API to set sector seal delay
2020-07-07 21:43:14 +02:00
Łukasz Magiera bc5e298e2b Merge pull request #43 from filecoin-project/asr/timer
Add a timer to auto-start sector sealing
2020-07-07 21:42:29 +02:00
Aayush Rajasekaran 411c82ae8f Update storage-FSM, add API to set sector seal delay 2020-07-07 15:23:23 -04:00
Aayush Rajasekaran b838ed4e85 Add a timer to auto-start sector sealing 2020-07-07 15:19:27 -04:00
Dirk McCormick 7842016228 fix: lint fixes 2020-07-07 13:42:11 -04:00
dirkmcandŁukasz Magiera 2808c91280 docs: StateVerifiedClientStatus
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-07-07 13:35:03 -04:00
dirkmcandŁukasz Magiera fbedff79ab remove unused var
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-07-07 13:34:44 -04:00
Dirk McCormick f7e9f78ee3 fix: go fmt 2020-07-07 11:04:25 -04:00
Dirk McCormick ea3defe357 fix: update StateVerifiedClientStatus signature 2020-07-07 10:57:10 -04:00
Dirk McCormick 1ea11a748d fix: go fmt 2020-07-07 10:01:08 -04:00
Dirk McCormick c86e864d55 fix: use nil return from StateVerifiedClientStatus for not-found 2020-07-07 09:59:14 -04:00
Łukasz Magiera 55f089d997 client: Unbreak retrieval 2020-07-07 14:35:02 +02:00
Łukasz Magiera d370e0ae2d Go is hard 2020-07-07 13:48:13 +02:00
Łukasz Magiera 18fc3337ff client: API/Command to drop imports 2020-07-07 13:45:02 +02:00
Łukasz Magiera 7175b1dd65 gofmt 2020-07-07 11:38:22 +02:00
Łukasz Magiera 24ed43d541 client: Fix import labeling 2020-07-07 11:38:09 +02:00
Łukasz Magiera f59eb94d92 client: Set correct dag builder params 2020-07-07 11:14:13 +02:00
Łukasz Magiera 47f0898ce9 Wire up client import manager 2020-07-07 10:52:19 +02:00
Łukasz Magiera 8942967223 Client Import manager 2020-07-07 10:52:04 +02:00
Łukasz Magiera 4ad57fe2d5 Merge pull request #2289 from filecoin-project/asr/consensus-fault
VerifyConsensusFault should return an error if no fault is found
2020-07-07 09:29:10 +02:00
Aayush Rajasekaran ad980b4966 VerifyConsensusFault should return an error if no fault is found 2020-07-07 01:29:16 -04:00
Łukasz Magiera 99b5ec96a2 Merge pull request #2101 from filecoin-project/feat/persistent-journal
implement a persistent journal for lotus node operations
2020-07-07 02:38:04 +02:00
Łukasz Magiera 74aa3e05fa journal: Fix panic with no journal set 2020-07-07 02:28:59 +02:00
Łukasz Magiera ce8ec242f9 Merge pull request #63 from filecoin-project/feat/keep-unsealed
Unsealed copy changes
2020-07-07 02:15:36 +02:00
Łukasz Magiera ce2a500a06 Merge pull request #42 from filecoin-project/feat/fast-ret
Fast-retrieval copy plumbing
2020-07-07 02:15:01 +02:00
Łukasz Magiera ec9db30863 Add docstring to Sectorinfo.unsealedRanges 2020-07-07 02:14:25 +02:00
Łukasz Magiera 66e547230d Merge pull request #2233 from filecoin-project/frrist/miner-sector-predicate
feat: add miner sector predicate and test
2020-07-07 01:43:41 +02:00
whyrusleeping 04bd56a068 log message if journal is not configured 2020-07-06 15:37:05 -07:00
frrist e1c29ca469 polish: wire up miner state predicate 2020-07-06 14:36:21 -07:00
frrist 3c6e46cd70 feat: add miner sector predicate and test
-polish: OnActorStateChanged operate over TipSetKey
    - it was calling key() interally and tipsetkeys are cheaper to get than
the full tipset
  -polish: improve predicate method names
2020-07-06 14:27:39 -07:00
Łukasz Magiera 92e4507cf7 fsrepo: multi-datastores 2020-07-06 23:03:04 +02:00
Łukasz Magiera e7aec53631 Merge remote-tracking branch 'origin/master' into next 2020-07-06 23:02:24 +02:00
Łukasz Magiera 27b5a8c3ba Merge pull request #2283 from filecoin-project/feat/better-bad-reason
Add better description to bad blocks
2020-07-06 22:56:53 +02:00
Łukasz Magiera 40113933b4 gofmt 2020-07-06 22:47:39 +02:00
Jakub Sztandera 49800b8fec Add original tipset to the string
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-06 19:46:25 +02:00
Łukasz Magiera cf6ac44b6e Merge pull request #2277 from Leozhang404/master
if no sectors need to recovery, checkNextRecoveries will return
2020-07-06 19:24:15 +02:00
Jakub Sztandera 50c773c6a3 Add better description to bad blocks
Track original cause of blocks being marked as bad.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-06 19:23:29 +02:00
Łukasz Magiera 63ba9bd018 gofmt 2020-07-06 19:19:24 +02:00
Łukasz Magiera 63c62c49ce Fix tests 2020-07-06 19:19:13 +02:00
Dirk McCormick 0c8e6b822c fix: better error message for not found verfied client 2020-07-06 12:56:54 -04:00
Łukasz Magiera 7279a80dfa localstorage: don't double count reserved storage 2020-07-06 18:56:46 +02:00
Łukasz Magiera 41d3ac2159 Merge pull request #2282 from filecoin-project/fix/msig-create-no-addrs
error out when trying to create multisig with no addresses
2020-07-06 18:44:22 +02:00
whyrusleeping 18f7b9bb1d use nicer timestamps 2020-07-06 09:43:19 -07:00
whyrusleeping ccf64a8534 add the real code 2020-07-06 09:42:00 -07:00
whyrusleeping 42bd4eccbe implement a persistent journal for lotus node operations 2020-07-06 09:42:00 -07:00
whyrusleeping 0964c0a8a1 error out when trying to create multisig with no addresses 2020-07-06 09:40:56 -07:00
Łukasz Magiera 8099621cd0 stores: Allow reserving local storage 2020-07-06 18:36:44 +02:00
Łukasz Magiera c5a96fdd08 Change PathType to string 2020-07-06 16:13:42 +02:00
Leo CheungandŁukasz Magiera 874cb46cb3 Update storage/wdpost_run.go
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-07-06 06:20:41 -05:00
Leo CheungandŁukasz Magiera ddba20ccdf Update storage/wdpost_run.go
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-07-06 06:19:47 -05:00
Łukasz Magiera 4b44e4e73a fix ccupgrade test after master merge 2020-07-06 12:09:09 +02:00
chunqizhi 7b9ab5e292 Fix an error in addCachePathsForSectorSize func 2020-07-06 17:49:05 +08:00
Łukasz Magiera 4b0ae7ef9a Merge remote-tracking branch 'origin/master' into next 2020-07-06 11:38:19 +02:00
Łukasz Magiera 516e31d37c Merge pull request #2254 from filecoin-project/feat/decoded-return-values
provide decoded return values in output of StateWaitMsg
2020-07-06 11:24:12 +02:00
Łukasz Magiera 5836dfae41 Merge pull request #2259 from filecoin-project/yusef-mining-callback
add error argument to waitFunc callback in miner loop
2020-07-06 11:18:49 +02:00
Łukasz Magiera ee30b6e888 Merge pull request #2260 from filecoin-project/asr/cli-seal
Add CLI command to manually start sealing a sector
2020-07-06 11:16:10 +02:00
Łukasz Magiera 3bb992fe6f Merge pull request #2265 from filecoin-project/misc/template-version
Use `lotus version` instead to get daemon version
2020-07-06 11:15:04 +02:00
Łukasz Magiera 2f3fc31f11 Merge pull request #2268 from chunqizhi/zcq02
Add return nil when faults == 0
2020-07-06 11:14:35 +02:00
Leo Cheung 4e12c4cb69 Update wdpost_run.go
if some unrecovered sectors can not recovered (such as cache file is missing) , miner should not send message "DeclareFaultsRecovered"
2020-07-06 15:52:58 +08:00
Leo Cheung 79e93760b7 Merge pull request #1 from filecoin-project/master
update-0706
2020-07-06 02:43:20 -05:00
chunqizhi 837aba777f Modity addCachePathsForSectorSize func to support 2KiB sector size devnet locally also 2020-07-06 15:08:13 +08:00
chunqizhi 6c9beb9e87 Add return nil when faults == 0 2020-07-05 09:17:10 +08:00
Jakub Sztandera 1d0acf35d2 Use lotus version instead to get daemon version 2020-07-04 14:51:22 +02:00
Aayush Rajasekaran 9a182bb247 i guess i'll tidy up go mod while i'm at it 2020-07-03 17:36:17 -04:00
Yusef Napora ea5dc461a1 pass error into waitFunc callback 2020-07-03 17:15:43 -04:00
Aayush Rajasekaran 45fdcaea45 Add CLI command to manually start sealing a sector 2020-07-03 17:05:59 -04:00
Łukasz Magiera 0fd142153a mod tidy 2020-07-03 22:24:47 +02:00
Łukasz Magiera 636bf90f84 Don't error in ReleaseUnsealed 2020-07-03 22:23:36 +02:00
Łukasz Magiera 31d9abfc8c Implement FinalizeSector keepUnsealed 2020-07-03 21:52:31 +02:00
Łukasz Magiera e5fdae45b7 Merge pull request #2253 from filecoin-project/extract-stats
extract stats package
2020-07-03 21:18:11 +02:00
Łukasz Magiera db50396eb5 Merge pull request #2256 from filecoin-project/feat/auto-fountains-sector-sizes
fountain: populate miner sector dropdown from specs-actors
2020-07-03 21:16:08 +02:00
Łukasz Magiera ff1cceb7bd Merge pull request #2257 from filecoin-project/fix/lotus-shed-keyinfo-switch
lotus-shed: fix secp256k1
2020-07-03 21:13:50 +02:00
Travis Person d3a007fd0a lotus-shed: fix secp256k1 2020-07-03 19:03:02 +00:00
Travis Person 4e0cf1644f fountain: populate miner sector dropdown from specs-actors 2020-07-03 19:01:56 +00:00
Anton Evangelatov fe49bcd9fa make linter happy 2020-07-03 19:52:15 +02:00
Anton Evangelatov e4d8f266c6 make linter happy 2020-07-03 19:49:21 +02:00
Anton Evangelatov faab606bd4 maddr -> actor 2020-07-03 19:45:21 +02:00
Anton Evangelatov 978ab67c73 override maddr on lotus-storage-miner info as well 2020-07-03 19:35:20 +02:00
Anton Evangelatov 4679c35e61 include headlag in func signature 2020-07-03 19:22:04 +02:00
whyrusleeping 16e493a67a provide decoded return values in output of StateWaitMsg 2020-07-03 09:57:58 -07:00
Łukasz Magiera 655d6f6720 Merge remote-tracking branch 'origin/master' into next 2020-07-03 17:03:09 +02:00
Anton Evangelatov 8b88c17503 extract stats package 2020-07-03 16:52:40 +02:00
Yusef Napora d6d68b9096 call waitFunc callback on mining error 2020-07-03 09:56:40 -04:00
Łukasz Magiera d3a1261f1e Merge pull request #2227 from filecoin-project/asr/api
Add docs comments to API
2020-07-03 15:33:07 +02:00
Łukasz Magiera 19178cca08 Merge pull request #2245 from filecoin-project/feat/fauxrep
Feat/fauxrep
2020-07-03 15:32:00 +02:00
Jakub Sztandera 9936439608 Merge remote-tracking branch 'origin/master' into next
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-03 14:56:06 +02:00
chunqizhi 3e7654d459 Merge pull request #5 from filecoin-project/master
merge
2020-07-03 20:15:19 +08:00
Łukasz Magiera bb3758f648 seed: Support fake preseals 2020-07-03 03:29:21 +02:00
刘林欣 ff4d9ecc77 fit in cases where a sector contains multiple deals, the state of each deal is correct 2020-07-03 09:20:47 +08:00
Łukasz Magiera 9d56dabb31 Merge pull request #2243 from filecoin-project/feat/buf-has-caching
check underlying datastore for objects before putting to bufbstore
2020-07-03 02:51:27 +02:00
Łukasz Magiera c3393ee185 seed: Move sector preseal to separate func 2020-07-03 02:47:33 +02:00
Łukasz Magiera 17039a5672 Update FFI 2020-07-03 02:23:45 +02:00
whyrusleeping 809a3ba07c check underlying datastore for objects before putting to bufbstore 2020-07-02 16:48:14 -07:00
Łukasz Magiera 5de7b62dbc Merge pull request #2241 from filecoin-project/fix/specs-actors-faults
Update specs actors to resolve forkiness bug
2020-07-02 22:15:11 +02:00
Łukasz Magiera 0503592af7 Fast-retrieval copy plumbing 2020-07-02 22:09:59 +02:00
Jakub Sztandera 5fb76ddad2 Bump version
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 22:09:11 +02:00
Jakub Sztandera cc02092aae Go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 21:53:21 +02:00
Jakub Sztandera 3e4b80e7f6 Update specs actors
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 21:52:55 +02:00
Dirk McCormick 8489fb258a fix: return NotFoundErr from StateVerifiedClientStatus() if addr not found 2020-07-02 14:49:08 -04:00
Łukasz Magiera 14ae8c7272 Merge pull request #2156 from filecoin-project/fix/bench-analyze
Improve performance of bench import analyze
2020-07-02 19:35:18 +02:00
Anton Evangelatov 2a050ca326 override maddr for observability 2020-07-02 18:48:39 +02:00
Jakub Sztandera 567b8082c3 Back to 10 callers
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:35 +02:00
Jakub Sztandera f3f92ce5bc add scratchpad to gitignore
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:35 +02:00
Jakub Sztandera c4158f12f1 Include proof number as extra in OnVerifyPost
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:35 +02:00
Jakub Sztandera 3429941639 Add info about OnActorExecDone
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 11dc902d53 Adjust OnMethodInvocation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 41b775fdd4 Compute time spent in actors
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera e9d2a3edd9 Limit float print precision
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 42696372ee Progress to stderr
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 39625eada7 Add count
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 7a7e5a85ad Print tt from covar
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 254295b9c3 Readd covariance
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 4dd79ec6fa Calculate correlation
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:34 +02:00
Jakub Sztandera 9ccd25b072 Update gas values, compute correlation coefficient
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera 5e7f561133 Support complex extra, fix small bug in covariance
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera c68a8f802e Adjust gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera 29f5f451b3 Add covariance
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera 2caa7164a6 Midway adding covar
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera 21148033e2 Change alg for computing variance
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera bc88c632d1 Fix previous commit
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera 1e17ea3fff Adjust gas values
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:33 +02:00
Jakub Sztandera ca7e5f5e16 Set gas to 1
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera cd2595da67 Adjust gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera 3a9f1bf9a2 Revert "Try without recurson"
This reverts commit 76e3663b2b1f1b58f9097f45124add4fa7718199.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera 9094405537 Try without recurson
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera 4db61e71da Reduce caller depth
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera a6417dc24b Add stats test and print observation count
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera 1bc9fbca20 Ignore virtual
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera 369ec8221f Improve edge case handling
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:32 +02:00
Jakub Sztandera 052fc35a91 Maybe avoid NaNs
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:31 +02:00
Jakub Sztandera b8ab549bcb Cleanup lint
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:31 +02:00
Jakub Sztandera 4f60c1afe7 If something costs 0 gas, make it 1.
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:31 +02:00
Jakub Sztandera 9cd34509ee Fix error handling of json
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:31 +02:00
Jakub Sztandera a2fd0aad41 More on OnActorExec
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:31 +02:00
Jakub Sztandera 01ac4e5da3 Gas on actor exec
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:47:30 +02:00
Jakub Sztandera 01e230e810 Fix ratio
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:42 +02:00
Jakub Sztandera 78ee64d9f8 Fix stupid mistake
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:42 +02:00
Jakub Sztandera e5a7cb635c Siwtch back to float64
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:42 +02:00
Jakub Sztandera 49ddcdb4b0 Don't pass pointers
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:42 +02:00
Jakub Sztandera b5ae3c055b Remove warning
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera 9712bbc854 Decode in workers
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera 3134fcb54a Streaming mean and variance
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera 87d668390e Use float32
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera 710286d6e7 Add pprof
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera 04edeccbf4 fix trimming
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera db5929f4a5 Limit size of expensiveInvocs
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera e65215f1b5 Make lotus-bench import analyze multithreaded and less RAM hungry
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Jakub Sztandera c97720e731 Fix import analyze
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-02 18:46:41 +02:00
Dirk McCormick 2c7aa318c1 feat: state API for verified client data cap 2020-07-02 12:10:11 -04:00
Łukasz Magiera 3aaa4fb692 Merge pull request #2239 from filecoin-project/feat/upgrade-markets-0.3.1.1
Hotfix upgrade markets to 0.3.1.1 to master
2020-07-02 17:08:48 +02:00
hannahhoward 7e1e9bcd60 fix(markets): upgrade markets to 0.3.1.1
upgrade to 0.3.1.1 to get critical node restart fixes and retrieval map access fix
2020-07-02 08:03:10 -07:00
Łukasz Magiera 8c347d8764 Merge pull request #2231 from filecoin-project/feat/lotus-manage-fds
have lotus attempt to raise its own file descriptor limit
2020-07-02 10:49:34 +02:00
Łukasz Magiera f7bffdf63a Merge pull request #2230 from filecoin-project/feat/add-peer-to-hello-fail-log
add peer ID to hello protocol failure log
2020-07-02 10:49:02 +02:00
Łukasz Magiera bda43a4627 Merge pull request #2229 from filecoin-project/fix/vm-abort-log-msg
fix vm abortf log message
2020-07-02 10:48:36 +02:00
Łukasz Magiera 19195ddf96 Merge pull request #2228 from filecoin-project/feat/docgen-perms
add perms listing to docgen output
2020-07-02 10:48:04 +02:00
whyrusleeping 5fa3021a79 set proper bitwidth for verifreg command hamts 2020-07-01 17:29:11 -07:00
whyrusleeping a5935486ef have lotus attempt to raise its own file descriptor limit 2020-07-01 17:09:21 -07:00
Łukasz Magiera 055a8efe10 Merge pull request #2220 from filecoin-project/feat/cc-upgrade
CC upgrade
2020-07-02 01:22:14 +02:00
whyrusleeping ffd012906c add peer ID to hello protocol failure log 2020-07-01 16:20:05 -07:00
whyrusleeping f8a1fb2321 fix vm abortf log message 2020-07-01 15:51:21 -07:00
Łukasz Magiera 746669046a Use fsm next branch 2020-07-02 00:45:16 +02:00
Łukasz Magiera 171e0d0e4b Merge pull request #32 from filecoin-project/feat/cc-upgrade
CC upgrade
2020-07-02 00:12:41 +02:00
Aayush Rajasekaran 605e9bbbd7 Add docs comments to API 2020-07-01 17:16:05 -04:00
whyrusleeping 168b0f8df6 add perms listing to docgen output 2020-07-01 14:01:27 -07:00
Łukasz Magiera 0770b77336 Merge remote-tracking branch 'origin/next' into feat/cc-upgrade 2020-07-01 21:10:56 +02:00
Łukasz Magiera 4346f7d59d Merge pull request #2215 from filecoin-project/feat/specs-actors-v0.7.1
specs actors v0.7.1
2020-07-01 21:08:22 +02:00
Łukasz Magiera 70cac6ce08 miner: Use gas price when selecting messages 2020-07-01 20:35:19 +02:00
Aayush Rajasekaran 135ff85356 Fix params_testground to match specs-actors upgrade 2020-07-01 14:21:42 -04:00
Aayush Rajasekaran 7b0b1b5977 Update chain-validation 2020-07-01 13:00:42 -04:00
Łukasz Magiera 5946aa7a3a Merge remote-tracking branch 'origin/master' into next 2020-07-01 17:32:27 +02:00
Łukasz Magiera 70d8378404 Merge pull request #2214 from filecoin-project/fix/too-high-nonce-log
miner: Fix mpool too-high-nonce-msgs log
2020-07-01 17:30:27 +02:00
Jakub Sztandera 53d239aa8f Merge pull request #2213 from filecoin-project/fix/next-testground
next: Fix testground build
2020-07-01 17:30:01 +02:00
Łukasz Magiera 00e38ce126 Merge pull request #2219 from filecoin-project/feat/update-paramfetch
Update paramfetch
2020-07-01 17:28:37 +02:00
Łukasz Magiera 02c3f8ed80 Update paramfetch 2020-07-01 17:23:50 +02:00
Łukasz Magiera 82e2cd4746 Basic CC Upgrade support 2020-07-01 17:01:06 +02:00
Łukasz Magiera 59ec727191 gofmt 2020-07-01 16:34:05 +02:00
Łukasz Magiera 495b4ba841 Fix precommit deposit math 2020-07-01 16:33:59 +02:00
Łukasz Magiera 3030e3a74f mod tidy, gofmt 2020-07-01 15:32:24 +02:00
Łukasz Magiera e2691f3b3d Basic CC Upgrade logic 2020-07-01 15:30:25 +02:00
Łukasz Magiera dd6398dbcb Merge pull request #40 from filecoin-project/feat/specs-actors-v0.7.0
Specs actors v0.7.0
2020-07-01 15:11:52 +02:00
Łukasz Magiera 5b73b48dc8 Fix tests post actor update 2020-07-01 14:04:37 +02:00
Łukasz Magiera a359df93c9 chainwatch: Fix getting miner info 2020-07-01 13:50:50 +02:00
Łukasz Magiera 4c422c2d50 specs-actors v0.7.1 2020-07-01 13:47:40 +02:00
Łukasz Magiera e949a458ec miner: Fix mpool too-high-nonce-msgs log 2020-07-01 12:53:27 +02:00
Łukasz Magiera 1b0d87cafd Merge pull request #2198 from filecoin-project/feat/cli-fast-retrieval
CLI: add --fast retrieval flag to lotus client deal
2020-07-01 12:31:16 +02:00
Dirk McCormick 5c63581bd5 feat: add fast-retrieval flag to lotus client deal 2020-07-01 12:27:55 +02:00
Łukasz Magiera e89eb56a44 Merge pull request #2199 from filecoin-project/feat/cli-verif-client
CLI: add --verified-deal flag to lotus client deal
2020-07-01 12:26:16 +02:00
Dirk McCormick 00d18ca479 fix: change default for lotus client deal --verified-deal to false 2020-07-01 12:23:40 +02:00
Dirk McCormick 46f07faead feat: add verified-deal flag to lotus client deal 2020-07-01 12:23:40 +02:00
Łukasz Magiera 44de824fe3 next: Fix testground build 2020-07-01 12:20:32 +02:00
Łukasz Magiera f48681a61d Merge pull request #2195 from filecoin-project/feat/update-markets-0.3.2
Markets update 0.3.2
2020-07-01 12:19:14 +02:00
Łukasz Magiera f6b17a7f3c Fix storageadapter build post-rebase 2020-07-01 12:06:29 +02:00
hannahhoward 92bb5bd915 fix(lint): fix lint errors 2020-07-01 12:06:29 +02:00
hannahhoward be29f3bd99 feat(markets): update to markets v0.3.2
Update to markets v0.3.2, which neccesitates merging master & adding one more node function
2020-07-01 12:06:29 +02:00
Dirk McCormick a03d8b3c3f fix: simplify OnDealExpiredOrSlashed() 2020-07-01 12:06:29 +02:00
Dirk McCormick f8725ac3bd feat: add OnDealExpiredOrSlashed() to ClientNodeAdapter 2020-07-01 12:06:29 +02:00
Dirk McCormick a3abff768c fix: dont register state change if deal is not present in from and to states 2020-07-01 12:06:29 +02:00
Dirk McCormick 1fd1c2edbd feat: allow nil deal state change (deal removed) 2020-07-01 12:06:29 +02:00
Łukasz Magiera 131928ee53 chainwatch: Fix build 2020-07-01 12:05:50 +02:00
Łukasz Magiera 1761823efe Merge remote-tracking branch 'origin/master' into next 2020-07-01 11:39:21 +02:00
Łukasz Magiera 228ff3ba57 Merge pull request #2212 from filecoin-project/fix/master-build
sync: Fix build
2020-07-01 11:26:43 +02:00
Łukasz Magiera 4c1dfd7eda sync: Fix build 2020-07-01 11:24:26 +02:00
Łukasz Magiera cfdbc2312d Merge branch 'master' into next 2020-07-01 11:22:57 +02:00
Łukasz Magiera a2de752a33 Merge remote-tracking branch 'origin/master' into next 2020-07-01 11:21:05 +02:00
Łukasz Magiera e1799f1524 Merge pull request #2155 from filecoin-project/feat/ffi-0.30.1
Update FFI to 0.30.1
2020-07-01 11:17:18 +02:00
Łukasz Magiera 8f0e04027e Merge pull request #2154 from laser/feat/1920-selection-commands
implement toggling of online/offline storage/retrieval deals
2020-07-01 11:06:32 +02:00
Łukasz Magiera abdafc8ee4 Merge pull request #2140 from filecoin-project/chainwatch/sector-info-schema
feat: define miner sector schema
2020-07-01 11:02:57 +02:00
Łukasz Magiera 9030b559e8 Merge pull request #1470 from hunjixin/hunjixin/test/bls_benchmarks
add bench mark for bls sign and verify
2020-07-01 10:57:34 +02:00
Łukasz Magiera cd34d02377 Merge pull request #2209 from filecoin-project/feat/faster-winpost-sectors
use bitfields to enumerate sectors for winning post
2020-07-01 10:43:24 +02:00
Łukasz Magiera a362ef97df Merge pull request #2188 from filecoin-project/const-relaxation
make system constants configurable as vars.
2020-07-01 10:43:07 +02:00
Łukasz Magiera 92f392d422 Merge pull request #2192 from filecoin-project/fix/evnts-map-pnc
Fix concurrent map access panic in event API
2020-07-01 10:36:29 +02:00
Łukasz Magiera e8ddaab1c3 Merge pull request #2202 from jackoelv/patch-2
Update mining-troubleshooting.md
2020-07-01 10:35:56 +02:00
whyrusleeping da78ff9151 use bitfields to enumerate sectors for winning post 2020-06-30 21:57:49 -07:00
frrist e576c7a08e "feat": add logic to update miner sector table on term 2020-06-30 21:26:46 -07:00
jackoelv 2d180cdacf Update mining-troubleshooting.md
some code changed, document should be changed too. 
by default, bench is not maked by make 2k. so ,first make bench is safe.
I have checked the makefile, the bundle name is not lotus-bench but 'bench'.
2020-07-01 09:45:40 +08:00
Raúl Kripalani 77c7eb6fd9 fix lint errors. 2020-06-30 22:56:13 +01:00
Whyrusleeping 857b5962da Merge pull request #2000 from filecoin-project/asr/maxheight
Do not connect to peers with impossibly high heads
2020-06-30 14:24:50 -07:00
frrist 8c54c09ab7 pair: work from pair with placer 2020-06-30 13:22:58 -07:00
Łukasz Magiera 6927a532cf Update sector-storage with lower resource requirements 2020-06-30 21:03:44 +02:00
Dirk McCormick 49dccf4284 fix: concurrent map access panic 2020-06-30 14:24:08 -04:00
Łukasz Magiera 4c1968f62a Merge pull request #61 from filecoin-project/feat/ffi-0.30.1
Fileconi-FFI 0.30.1
2020-06-30 20:03:18 +02:00
Jakub Sztandera a4751ddd01 Merge pull request #2190 from filecoin-project/chore/upd-log
Update go-log
2020-06-30 19:59:26 +02:00
Jakub Sztandera c811133aac Update go-log
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-30 19:39:13 +02:00
Łukasz Magiera a53fff7608 Fix tests 2020-06-30 19:38:41 +02:00
Łukasz Magiera 6d02ac0290 mod tidy 2020-06-30 19:30:06 +02:00
Łukasz Magiera cff68a14d8 Adjust resource table for filecoin-ffi 0.30.1 2020-06-30 19:26:56 +02:00
Frrist c16ea42fad fix: update miner_head table with new miner fields (#2142) 2020-06-30 10:26:41 -07:00
Łukasz Magiera c1ac986f20 Update FFI 2020-06-30 19:05:47 +02:00
Raúl Kripalani 05e521ab03 fix test compilation issue. 2020-06-30 16:47:32 +01:00
Łukasz Magiera 472cf20b81 Merge pull request #2149 from filecoin-project/feat/specs-actors-v0.7.0
Specs actors v0.7.0
2020-06-30 16:09:03 +02:00
Raúl Kripalani 1ef490feea rename build.PropagationDelay{=>Secs}. 2020-06-30 15:01:30 +01:00
Raúl Kripalani 3b826e41f6 rename build.AllowableClockDrift{=>Secs}. 2020-06-30 15:00:01 +01:00
Raúl Kripalani d232299c77 type constants on all build tags. 2020-06-30 14:58:34 +01:00
Raúl Kripalani f774d2aab1 add testground Makefile target; attach to buildall. 2020-06-30 14:48:13 +01:00
Raúl KripalaniandAnton Evangelatov 642aed93d9 remove superfluous comment.
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-06-30 14:38:20 +01:00
Raúl Kripalani 4f9c907248 rename build.{BlockDelay=>BlockDelaySecs}.
Since this global is not typed as a time.Duration,
rather as an int, it makes sense to clarify the unit.
2020-06-30 14:26:49 +01:00
Łukasz Magiera 936ead016e Bump genesis funds for node_tests 2020-06-30 15:24:30 +02:00
Raúl Kripalani 612b2fe9d7 revert changes in go.sum. 2020-06-30 14:21:39 +01:00
Raúl Kripalani 0fddf3e114 make system constants configurable as vars.
This configurability is unlocked through the `testground`
build tag, which Project Oni will uses.

Changes in the usage places of these relaxed constants
were required due to the fact that Golang constants are
untyped, but vars aren't.

Read https://blog.golang.org/constants for more info.
2020-06-30 14:18:26 +01:00
Łukasz Magiera c3898e4abf Merge pull request #2172 from filecoin-project/feat/pred-tests
Add more predicate tests
2020-06-30 11:32:13 +02:00
Łukasz Magiera 726c09618a Merge pull request #2177 from filecoin-project/feat/lotus-shed-keyinfo
lotus-shed: organize peer key generate and other key commands under keyinfo
2020-06-30 11:30:57 +02:00
Łukasz Magiera 24529bf35d Merge branch 'next' into feat/specs-actors-v0.7.0 2020-06-29 22:45:50 +02:00
Travis Person 12f10ac414 lotus-shed: organize peer key generate and other key commands under keyinfo 2020-06-29 20:07:39 +00:00
Łukasz Magiera 77b3bf8bc2 Update FFI to 0.30.1 2020-06-29 20:24:27 +02:00
Łukasz Magiera a0e1d5f567 Merge pull request #2175 from filecoin-project/feat/update-markets-0.3.1
Update to markets 0.3.1
2020-06-29 20:09:33 +02:00
hannahhoward 4e32c7edb3 feat(markets): update to markets 0.3.1
Update to markets 0.3.1 with multiaddr support for miners
2020-06-29 10:24:23 -07:00
Łukasz Magiera 2bab5d1ddd Merge remote-tracking branch 'origin/master' into next 2020-06-29 17:45:58 +02:00
Dirk McCormick c72def55fe test: add more predicate tests 2020-06-29 11:21:29 -04:00
Łukasz Magiera 982962ef0a Merge pull request #2171 from filecoin-project/fix/bitfield-null-marshal
Update go-bitfield with fixed empty marshaling
2020-06-29 16:14:47 +02:00
Łukasz Magiera 90a470ed78 Update go-bitfield with fixed empty marshaling 2020-06-29 16:06:57 +02:00
waynewyang 048d0e0d7a set 'true' after handle be called 2020-06-29 21:37:08 +08:00
Łukasz Magiera f812cac142 Merge pull request #2161 from waynewyang/mining
fix: mining logic
2020-06-29 15:24:45 +02:00
Łukasz Magiera aeab3a709a Merge pull request #2158 from jackoelv/patch-1
Update mining.md
2020-06-29 15:19:58 +02:00
Łukasz Magiera 7058f4eb63 Merge pull request #2153 from filecoin-project/feat/state-changes-api
Feat/state changes api
2020-06-29 15:19:18 +02:00
Aayush Rajasekaran 1f57d9462c Don't return nil interfaces from runtime.Send() 2020-06-29 01:13:45 -04:00
waynewyang 8d51a20143 fix: mining logic 2020-06-28 18:20:56 +08:00
jackoelv a4f6269724 Update mining.md
lotus-storage-miner state power should be changed to lotus state power
2020-06-27 23:16:24 +08:00
Lucas MolasandJakub Sztandera fbfe57cd63 doc: block validations (#1919)
Co-authored-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-26 20:13:14 -03:00
Łukasz Magiera 0118a78967 Merge pull request #2050 from filecoin-project/asr/api-bitfield
Return sector numbers, not bitfields from API
2020-06-27 00:51:52 +02:00
Dirk McCormick 659c723ea3 fix: embed hcEvents into events as pointer so as not to copy lock 2020-06-26 15:42:44 -04:00
Dirk McCormick bbb9a9cd1a refactor: lint fixes 2020-06-26 15:36:48 -04:00
laser 5052a87a82 bugfix: accessors should be read and writers should be admin 2020-06-26 12:33:39 -07:00
laser b9180a99d4 toggle consideration of offline storage/retrieval deal proposals 2020-06-26 12:27:41 -07:00
Dirk McCormick db1773d708 docs: add predicate docs 2020-06-26 14:59:23 -04:00
Dirk McCormick a1b009328d refactor: simplify diff 2020-06-26 14:43:46 -04:00
Dirk McCormick 393a9ca4f2 test: predicates test 2020-06-26 14:41:19 -04:00
Aayush Rajasekaran 73e973c29b Update chain-val, using temp commits 2020-06-26 14:28:33 -04:00
Aayush Rajasekaran 8e7ac226b0 Include WinCount when awarding block rewards 2020-06-26 14:27:49 -04:00
laser e910a045d0 big rename to allow for later introducing the "consider offline" config 2020-06-26 10:50:54 -07:00
laser 5d9a775699 replace enable/disable commands with selection commands 2020-06-26 10:33:06 -07:00
Łukasz Magiera 8233143578 Merge pull request #2144 from Alexey-N-Chernyshov/patch-1
Fix to addresses in paychmgr channel creation
2020-06-26 19:14:30 +02:00
Łukasz Magiera 950cb8bc03 Merge pull request #1970 from RobQuistNL/patch-3
Update Ubuntu installation documentation + bump required go version to 1.14
2020-06-26 19:12:08 +02:00
Łukasz Magiera afab9395b9 gofmt 2020-06-26 18:01:50 +02:00
Łukasz Magiera 5d6fcbeccf Change initial pledge calc to PrecommitInfo 2020-06-26 18:00:50 +02:00
Łukasz Magiera 408c9a7b33 Set precommit deposit correctly 2020-06-26 17:58:29 +02:00
Łukasz Magiera 9aec1e9484 Update specs-actors to v0.7.0 2020-06-26 17:29:08 +02:00
Łukasz Magiera 24f4c96fc3 apitest: auto-start sealing precoss 2020-06-26 17:28:05 +02:00
Łukasz Magiera 6893dbb657 api: MsigCrate required param is now uint64 2020-06-26 15:52:22 +02:00
Łukasz Magiera edd7151184 Fix StateMinerInitialPledgeCollateral 2020-06-26 15:49:39 +02:00
Łukasz Magiera b8f1264e71 genesis: Update process comment 2020-06-26 15:23:52 +02:00
Łukasz Magiera a7c372efff storage-fsm updates for sector packing 2020-06-26 15:13:18 +02:00
Łukasz Magiera a6d1323eba Update specs-actors to v0.7.0; More correct genesis sector import 2020-06-26 15:08:12 +02:00
Łukasz Magiera 8f585713fa Update storage, FSM 2020-06-26 13:11:34 +02:00
Łukasz Magiera d27ff60ae2 Merge remote-tracking branch 'origin/master' into next 2020-06-26 13:08:37 +02:00
Łukasz Magiera c059934fe8 Merge pull request #38 from filecoin-project/asr/multiple-deals
Pack multiple deals into a sector
2020-06-26 13:02:27 +02:00
Łukasz Magiera 76ce3b9d94 Merge pull request #59 from filecoin-project/feat/gencommd-align-pieces
ffiwrapper: Insert alignment between pieces
2020-06-26 13:00:03 +02:00
Łukasz Magiera 2db86111b2 Merge pull request #2084 from filecoin-project/feat/poiss-sortition
Initial implementation of Poisson Sortition
2020-06-26 12:26:35 +02:00
Alexey eafb04004e Fix to addresses in paychmgr channel creation 2020-06-26 09:06:01 +03:00
Rob Quist 3d3e384d5c Merge pull request #2 from RobQuistNL/patch-2
Update makefile
2020-06-26 02:10:53 +02:00
Rob Quist 38533631bf Bump to Go v. 1.14 as requirement 2020-06-26 02:09:39 +02:00
frrist 6fe39ef065 fixup! feat: define miner sector schema 2020-06-25 17:03:28 -07:00
frrist 47c3e14d4b fixup! feat: define miner sector schema 2020-06-25 17:00:22 -07:00
frrist d8b647cc3a fixup! feat: define miner sector schema 2020-06-25 16:07:43 -07:00
Dirk McCormick abad4a3941 refactor: modify predicates API 2020-06-25 17:43:37 -04:00
frrist 2c0a4914cf feat: define miner sector schema
- define a miner sector schema to store miner sector details at each tipset the miner experiences a
state change. This solution stores redundant data since a miner state change (head cid changes)
does not necessarily indicate its sectors changes.

- makes progress towards sentinel/issues/10
2020-06-25 13:16:50 -07:00
Łukasz Magiera a8997dc35c ffiwrapper: Insert alignment between pieces 2020-06-25 21:57:26 +02:00
Aayush Rajasekaran e54b49b442 Bump API version 2020-06-25 13:49:15 -04:00
Aayush Rajasekaran 50aa1e6baa Update bitfield 2020-06-25 13:49:15 -04:00
Aayush Rajasekaran e3c897fb68 Change StateReadState to take an address, not an actor 2020-06-25 13:49:15 -04:00
Aayush Rajasekaran a3c686d317 Try to pack deals into existing unsealed sectors before creating new ones 2020-06-25 13:47:14 -04:00
Aayush Rajasekaran 81a2792e37 Move sector number calculation into newSector 2020-06-25 13:36:04 -04:00
Aayush Rajasekaran ff8894f2ec Maintain a map of UnsealedSectorInfos 2020-06-25 13:36:04 -04:00
Aayush Rajasekaran 020f3a173a Squash Sealing's AllocatePiece and SealPiece into one method 2020-06-25 13:36:04 -04:00
Aayush Rajasekaran 73f5c68674 Non-CC sectors start with no pieces, can be added using addPiece() 2020-06-25 13:33:23 -04:00
Aayush Rajasekaran 7f75cd71da Resolve proof type when creating new sector 2020-06-25 13:33:23 -04:00
Aayush Rajasekaran eb17b2f371 Add a state for waiting on deals, and events for new deals and start packing 2020-06-25 13:33:23 -04:00
Aayush Rajasekaran db863a4de7 Add new event for start of CC sectors 2020-06-25 13:33:23 -04:00
Aayush Rajasekaran 5ad33896cc Do not allocate pieces that are bigger than a sector 2020-06-25 13:33:23 -04:00
Dirk McCormick 728afc0587 refactor: remove state API example 2020-06-25 12:46:43 -04:00
Dirk McCormick 95a9dc9db0 refactor: use struct instead of array for state change 2020-06-25 12:43:06 -04:00
Dirk McCormick b62fef7541 feat: include previous TS in StateChangedHandler 2020-06-25 12:43:06 -04:00
Dirk McCormick dd490220d7 refactor: Extract message-specific code from calledEvents
This allows us to create a general purpose head change events manager that can be used for call events and also for state change events.
2020-06-25 12:43:06 -04:00
hannahhoward 7f932b96ae WIP 2020-06-25 12:41:50 -04:00
Łukasz Magiera 4af9a20903 Merge pull request #2132 from filecoin-project/feat/deal-sechd-prio
sealing: Give priority to sectors with deals
2020-06-25 18:27:35 +02:00
Łukasz Magiera f9cb549fbe Merge pull request #2137 from filecoin-project/feat/compact-trace
Make gas traces smaller, strip callers in import-bench
2020-06-25 18:25:38 +02:00
Łukasz Magiera 7e342e60d1 sealing: Give priority to sectors with deals 2020-06-25 18:13:45 +02:00
Łukasz Magiera 379a4655b0 Merge pull request #36 from filecoin-project/feat/deal-sechd-prio
Give sector with deals priority in sealing
2020-06-25 18:08:32 +02:00
Łukasz Magiera b1b7c4257b Use sector-storage master 2020-06-25 17:46:35 +02:00
Łukasz Magiera 98ef8e4ef2 Merge pull request #58 from filecoin-project/feat/sched-prio
sched: Support external priority
2020-06-25 17:43:33 +02:00
Jakub Sztandera f98063d604 In this case I want it to be not really safe
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-25 16:58:55 +02:00
Jakub Sztandera 10c4fae8c0 Make gas traces smaller, strip callers in import-bench
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-25 16:46:50 +02:00
Łukasz Magiera ddd1f21e5d sched: Support external priority 2020-06-25 16:45:25 +02:00
Łukasz Magiera a381a4174e Give sector with deals priority in sealing 2020-06-24 23:55:51 +02:00
Łukasz Magiera cae24a226b Merge pull request #2119 from laser/feat/1920-toggle-retrieval
allow retrieval miner to enable/disable consideration of retrieval deal proposals
2020-06-24 21:19:19 +02:00
Łukasz Magiera 0162322833 Merge pull request #2126 from filecoin-project/fix/events-race
Fix two races in events
2020-06-24 21:09:14 +02:00
Łukasz Magiera 06dfe3c5ae Merge pull request #2131 from filecoin-project/fix/chainwatch-tipset-api-access
fix: use tipset corresponding to stateroot
2020-06-24 20:04:18 +02:00
frrist a98c4038f4 fix: use tipset corresponding to stateroot
- Use te tipsetkey corresponding to the stateroot when fetching actor
data from the lotus api.
2020-06-24 11:01:25 -07:00
Jakub Sztandera 4895c895aa Change WinCount to int64, wire it to BlockMessage
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-24 19:51:22 +02:00
Jakub Sztandera 88352c74fc Address @Magik6k CR
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-24 17:11:26 +02:00
laser 4c760ec1b1 lint: update comments to match type declarations 2020-06-24 08:08:10 -07:00
laser 176d0bb7c0 add "lotus-storage-miner retrieval-deals" subcommands
- enable retrieval
- disable retrieval
2020-06-24 08:08:10 -07:00
laser bc90b857c9 change "lotus-storage-miner deals" to "lotus-storage-miner storage-deals" 2020-06-24 08:08:10 -07:00
laser ef0abf2b98 disable/enable retrieval deal consideration via config 2020-06-24 08:07:12 -07:00
Jakub Sztandera 008a2969b2 Fix two races in events
Also race fix: depends on https://github.com/ipfs/go-blockservice/pull/65
Resolves #2092, #2099, #2108, #1930, #2110

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-24 17:05:24 +02:00
Jakub Sztandera 36d5880a30 Remove TestElectionExp
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-24 15:25:23 +02:00
Łukasz Magiera 7d9f9ba756 Merge pull request #2125 from filecoin-project/fix/cw-state-heights-index
chainwatch: state_heights_uindex is not unique
2020-06-24 14:55:42 +02:00
Łukasz Magiera 358b36bc66 chainwatch: state_heights_uindex is not unique 2020-06-24 14:34:53 +02:00
Łukasz Magiera f1e686f706 Merge pull request #2107 from chunqizhi/zc
An incorrect sector was detected, but also run windowPoSt
2020-06-24 12:40:16 +02:00
Łukasz Magiera 0b1fa54a4d wdpost: Remove commented code 2020-06-24 12:38:46 +02:00
chunqizhi 49281ef599 Merge pull request #4 from filecoin-project/master
merge
2020-06-24 13:55:29 +08:00
24c7f47566 Modify print faulty sectors in provingFaultsCmd 2020-06-24 10:14:20 +08:00
Łukasz Magiera 4037d707c9 Merge pull request #2120 from filecoin-project/feat/change-addrs-cmd
add command to change registered multiaddrs for miner
2020-06-24 01:02:35 +02:00
Łukasz Magiera 001d4ab002 Appease the linter 2020-06-24 01:00:32 +02:00
Łukasz Magiera f115603093 Merge pull request #2121 from filecoin-project/fix/1917
Update sector-storage to fix #2080 and #1917
2020-06-24 00:56:59 +02:00
Łukasz Magiera d7bb284e57 miner: Move set-addrs command to a new 'actor' namespace 2020-06-24 00:54:28 +02:00
Łukasz Magiera 11c53c26ff Update sector-storage to fix #2080 and #1917 2020-06-24 00:47:47 +02:00
Łukasz Magiera de544b5316 Merge pull request #56 from filecoin-project/feat/shed-sel-cmp-timeout
sched: Also handle timeout on selector Cmp
2020-06-24 00:46:36 +02:00
Łukasz Magiera cea46d8c8c sched: Also handle timeout on selector Cmp 2020-06-24 00:43:58 +02:00
Łukasz Magiera 72a1ed2fa3 Merge pull request #54 from hayeah/rpc-timeout
add RPC timeout to maybeSchedRequest
2020-06-24 00:33:00 +02:00
Łukasz Magiera d28bbf4674 Merge pull request #2095 from filecoin-project/feat/sector-remove
Update specs-storage; Support for removing sectors
2020-06-24 00:32:33 +02:00
Łukasz Magiera a7d662a7d8 Update to actually working sector-storage 2020-06-24 00:23:39 +02:00
Łukasz Magiera 1cb2b0ac1c Merge pull request #55 from filecoin-project/fix/finsector-mv-none
fix: Don't try to move removed unsealed sector files
2020-06-24 00:19:33 +02:00
Łukasz Magiera 57bda914f9 fix: Don't try to move removed unsealed sector files 2020-06-24 00:04:02 +02:00
Łukasz Magiera 6f8c464393 Merge remote-tracking branch 'origin/master' into feat/sector-remove 2020-06-23 23:54:27 +02:00
Raúl Kripalani c8104a03e6 some initial godocs. (#2118) 2020-06-23 18:51:25 -03:00
Łukasz Magiera 69559bcf4f Use fsm, sector-storage master 2020-06-23 23:32:12 +02:00
Łukasz Magiera fe71d5b42d Merge pull request #34 from filecoin-project/feat/cc-upgrade-1
Update storage interfaces, support removing sectors
2020-06-23 23:30:10 +02:00
whyrusleeping d524821c86 add command to change registered multiaddrs for miner 2020-06-23 14:25:45 -07:00
Łukasz Magiera 8a3b7c575f Use sector-storage master 2020-06-23 23:15:29 +02:00
Jakub Sztandera e864244226 Merge pull request #2117 from filecoin-project/fix/drand-config-di
improve DrandConfig dependency injection
2020-06-23 23:14:58 +02:00
Łukasz Magiera 47d9335658 Merge pull request #53 from filecoin-project/feat/remove-sector
Update specs-storage, sector removing support
2020-06-23 23:05:24 +02:00
Yusef Napora 5074cf8beb import DrandConfig from dtypes 2020-06-23 16:23:06 -04:00
Yusef Napora b448de422e improve DrandConfig dependency injection 2020-06-23 16:01:10 -04:00
Łukasz Magiera 99d3571772 Merge pull request #2115 from filecoin-project/feat/drand-config-override
allow overriding drand config
2020-06-23 21:59:05 +02:00
Łukasz Magiera 0354275b39 Merge pull request #2112 from laser/bugs/2111-hanging-client-retrieve
return error if retrieval deal rejected
2020-06-23 21:56:02 +02:00
laser 309fbc15b2 import aliasing, for legibility 2020-06-23 12:22:33 -07:00
Łukasz Magiera 28e3c863bf Merge pull request #2114 from filecoin-project/fix/state-mkt-participants
state: Get correct locked table in StateMarketParticipants
2020-06-23 21:21:43 +02:00
laser 06162290af explicitly handle each deal status, as per PR feedback 2020-06-23 12:14:41 -07:00
Yusef Napora 628872d0e4 forgot my go fmt hook 2020-06-23 15:10:27 -04:00
Yusef Napora 960523f45f fix drand test 2020-06-23 15:09:28 -04:00
Łukasz Magiera fb04b17fad state: Get correct locked table in StateMarketParticipants 2020-06-23 20:55:59 +02:00
Jakub Sztandera 19ed695811 Fix TestInteropBH
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 20:37:35 +02:00
Jakub Sztandera 1f967c6f63 Fix debug_advance
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 20:37:35 +02:00
Jakub Sztandera 2165728088 Fix TestDealMining
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 20:09:58 +02:00
laser 8adc831a31 return error if retrieval deal rejected 2020-06-23 11:08:04 -07:00
Yusef Napora 566a99240d allow overriding drand config 2020-06-23 13:33:18 -04:00
Łukasz Magiera 7b2241f051 Merge pull request #2102 from filecoin-project/feat/parallel-block-val
run block validation for tipsets in parallel
2020-06-23 17:59:14 +02:00
Jakub Sztandera 156a14eeeb Integrate Poisson Sortition into chain sync
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:59:44 +02:00
Jakub Sztandera 97088e3109 Add golden test for exp function
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:33:10 +02:00
Jakub Sztandera 2b597fb780 Add tests for lambda
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:02 +02:00
Jakub Sztandera efeaa9b6ad Fix lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:02 +02:00
Jakub Sztandera d7f710806b Implement golden tests for Poisson distribution
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:02 +02:00
Jakub Sztandera d92362f96e Add comments about algorithm
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:02 +02:00
Jakub Sztandera 8fea872345 Refactor poisson to struct for easier testing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:02 +02:00
Jakub Sztandera 84c0b50aa1 Rename fxToD
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:01 +02:00
Jakub Sztandera f523b17a35 Improve performance of ComputeWinCount
As it turns out `big.Int#Mul` doesn't like it when you reuse input as
output.

```
name         old time/op    new time/op    delta
WinCounts-8    4.56µs ± 1%    3.90µs ± 2%  -14.44%  (p=0.000 n=9+10)

name         old alloc/op   new alloc/op   delta
WinCounts-8    3.50kB ± 0%    1.15kB ± 0%  -67.23%  (p=0.000 n=10+10)

name         old allocs/op  new allocs/op  delta
WinCounts-8      45.0 ± 0%      24.0 ± 0%  -46.67%  (p=0.000 n=10+10)
```

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:01 +02:00
Jakub Sztandera ee5639aad9 Initial implementation of Poisson Sortition
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-23 16:24:01 +02:00
55ed45f108 Get the good sectors to run windowPost 2020-06-23 20:46:41 +08:00
Łukasz Magiera f8e7901b89 Address review 2020-06-23 14:44:34 +02:00
Łukasz Magiera 9e70e95242 sync: Correctly pass blocks to ValidateBlock 2020-06-23 14:10:47 +02:00
Łukasz Magiera 68d38eff33 Merge pull request #2103 from filecoin-project/deps/libp2p-0.10.0
update to latest libp2p release
2020-06-23 12:44:42 +02:00
Łukasz Magiera abd400801c mod tidy 2020-06-23 11:46:20 +02:00
Howard Yeh be4112ee68 add RPC timeout to maybeSchedRequest 2020-06-23 17:42:47 +08:00
Łukasz Magiera d24a750ba4 Merge pull request #2106 from filecoin-project/feat/streaming-bench-results
stream bench import results to disk
2020-06-23 11:42:18 +02:00
whyrusleeping 9903eba7fb stream bench import results to disk 2020-06-22 20:08:19 -07:00
whyrusleeping 3752311f44 update to latest libp2p release 2020-06-22 16:25:41 -07:00
whyrusleeping b71f771acb run block validation for tipsets in parallel 2020-06-22 16:09:05 -07:00
Łukasz Magiera 9f3145aec0 Merge pull request #2093 from filecoin-project/asr/clarify
Clarify expected block win when below minimum power threshold
2020-06-22 22:32:08 +02:00
Łukasz Magiera 8638076ecb Merge pull request #1894 from filecoin-project/feat/chainwatch-usage
Add chainwatch systemd svc config
2020-06-22 22:25:48 +02:00
Mike Greenberg 8649baccf7 Remove dev values from chainwatch.service 2020-06-22 16:17:07 -04:00
Aayush Rajasekaran c33d9e9668 Merge pull request #2094 from filecoin-project/schomatis/doc/security-policy
doc: report a vulnerability
2020-06-22 15:39:52 -04:00
Łukasz Magiera 03d70e1513 Merge pull request #2097 from filecoin-project/feat/disable-builtin-assets
provide an option to disable loading of built-in assets.
2020-06-22 21:35:58 +02:00
Raúl Kripalani d20255b1b4 provide an option to disable loading of built-in assets. 2020-06-22 19:42:04 +01:00
Łukasz Magiera cd91e42a56 ci: lint-changes based on master 2020-06-22 19:39:08 +02:00
Łukasz Magiera e2435be0b9 build: Bump API version 2020-06-22 19:36:26 +02:00
Łukasz Magiera 5adc188466 miner: Command to remove sectors 2020-06-22 19:35:14 +02:00
Łukasz Magiera 101ba0b796 Update deps to support removing sectors 2020-06-22 19:03:35 +02:00
Łukasz Magiera 628c590c00 Drop unused faulty state logic 2020-06-22 18:55:53 +02:00
Łukasz Magiera 24fd125223 Implement a way to remove sectors 2020-06-22 18:55:53 +02:00
Łukasz Magiera d8c81e712e Upgrade sector-storage 2020-06-22 18:55:53 +02:00
Łukasz Magiera cc8670b956 Merge pull request #33 from filecoin-project/fix/missing-pc1
Handle missing on-chain precommit in WaitSeed
2020-06-22 18:51:31 +02:00
Lucas Molas 8cd2012d27 doc: report a vulnerability 2020-06-22 12:45:24 -03:00
Aayush Rajasekaran 4959596527 Clarify expected block win when below minimum power threshold 2020-06-22 11:42:26 -04:00
Łukasz Magiera 07cf84cbc7 Update specs-storage, sector removing support 2020-06-22 17:06:09 +02:00
Łukasz Magiera ffbfa84591 Merge pull request #52 from yaohcn/finalize-not-sched-unseal
finalize not sched on unsealed worker
2020-06-22 13:36:32 +02:00
Łukasz Magiera b6e250303e Handle missing on-chain precommit in WaitSeed 2020-06-22 13:09:31 +02:00
956c397c3c Add provingFaultsCmd for getting sectors information for the currently known faults 2020-06-22 16:00:29 +08:00
chunqizhi 1249ede2b7 Merge pull request #3 from filecoin-project/master
merge
2020-06-22 15:47:43 +08:00
Łukasz Magiera 596ed330dd Merge pull request #2069 from laser/feat/1920-blocklist-cids
allow storage miners to manage a blocklist of piece CIDs
2020-06-19 21:19:15 +02:00
Łukasz Magiera b4c1594d99 Merge pull request #2073 from mitchwagner/patch-1
Remove redundant glossary item
2020-06-19 21:05:29 +02:00
Łukasz Magiera 98cb08d853 Merge pull request #2077 from laser/bugs/1993-problems-with-sizestr
bump from 3 to 4 digits in format-string used by types.SizeStr
2020-06-19 21:04:30 +02:00
Nathaniel Jensen 6b86dcde4a doc: Fix architecture broken link 2020-06-19 13:33:19 -03:00
laser fbeaab466a obey the linter 2020-06-19 09:20:20 -07:00
laser 5e77b5da9f bump from 3 to 4 digits in format-string
Fixes #1993
2020-06-19 08:51:06 -07:00
yaohcn 92a6ba8a57 finalize not sched on unsealed worker 2020-06-19 09:43:19 +08:00
Mitch Wagner 7c4225d01c Remove redundant glossary item
The excised entry previously rendered twice in the glossary under two different keys. This commit removes one of those KV pairs to avoid that.
2020-06-18 21:31:26 -04:00
Łukasz Magiera ffa7be86fe Merge pull request #2070 from filecoin-project/feat/reset-genesis
New Genesis
2020-06-19 01:29:01 +02:00
Łukasz Magiera c41c210ced New Genesis 2020-06-19 01:24:04 +02:00
laser de7d6c255c blacklist -> blocklist 2020-06-18 15:51:01 -07:00
laser 99060fbb64 eliminate errant debug line 2020-06-18 14:05:59 -07:00
laser 0c8d648998 specify which CID is being blacklisted (it's the piece) 2020-06-18 14:02:22 -07:00
laser aa18d1985e reject storage deal proposals containing blacklisted piece CIDs 2020-06-18 13:32:20 -07:00
laser b0edf924b4 add commands for manipulating storage deal CID blacklist 2020-06-18 13:15:18 -07:00
laser 997a46a90f wombat 2020-06-18 10:32:32 -07:00
Łukasz Magiera b99b8f55f6 Merge pull request #2065 from filecoin-project/docs/docgen-fixes
docgen improvements
2020-06-18 16:20:19 +02:00
Łukasz Magiera c0a50a2143 api: Add a bunch of donstrings 2020-06-18 15:44:47 +02:00
Łukasz Magiera 382734b057 docgen: Generate simple index 2020-06-18 14:56:00 +02:00
Łukasz Magiera 90fbbea372 docgen: Make larger inputs/outputs more readable 2020-06-18 14:37:41 +02:00
Łukasz Magiera 55d9ad0b55 Fix docgen 2020-06-18 14:30:00 +02:00
Łukasz Magiera e5e5d0d9e4 Merge pull request #2064 from filecoin-project/deps/sectorstorage-d9de9b7cb4
Update sector-storage with 32G checkFiles fix
2020-06-18 12:44:29 +02:00
Łukasz Magiera 324b659d33 Update sector-storage with 32G checkFiles fix 2020-06-18 09:34:28 +02:00
Łukasz Magiera d9de9b7cb4 Merge pull request #51 from filecoin-project/fix/cache-check-paths
Fix/cache check paths
2020-06-18 09:32:00 +02:00
Whyrusleeping ad297f28b8 Merge pull request #50 from filecoin-project/fix/log-err
actually log the stat error in question
2020-06-17 20:00:23 -07:00
Jeromy 5d7d633595 check appropriate paths per sector size 2020-06-17 19:35:05 -07:00
Jeromy 1436e21761 actually log the stat error in question 2020-06-17 19:22:03 -07:00
Aayush Rajasekaran edcf899be1 Merge pull request #2060 from filecoin-project/jimpick/fix-lotus-bench-link
Fix bad link in hardware mining docs
2020-06-17 21:19:58 -04:00
Jim Pick 2bf781d591 Fix bad link in hardware mining docs
This fixes a bad link.

There's also a link to the Github issue thread for results that still works, but
is a bit stale (for proofs before v20). I didn't attempt to fix that as there
doesn't appear to be a thread for v27 proofs.
2020-06-17 18:04:46 -07:00
Łukasz Magiera cc179c5270 Merge pull request #2047 from filecoin-project/feat/parallel-sealing-bench
allow sealing bench to run parallel seals
2020-06-18 01:28:56 +02:00
Łukasz Magiera b417725e3e Merge pull request #2059 from filecoin-project/feat/testnet-peers
Bootstrap peers
2020-06-18 01:15:49 +02:00
Travis Person c02d8225a8 Bootstrap peers 2020-06-17 23:01:26 +00:00
Łukasz Magiera 659f570cfc Merge pull request #2058 from filecoin-project/jimpick/spelling
Spelling: s/winnnig/winning/
2020-06-17 22:09:17 +02:00
Jim Pick c7e470bd5e Spelling: s/winnnig/winning/
It was bugging me. :-)
2020-06-17 12:49:23 -07:00
Łukasz Magiera fe4efa0e0e Merge pull request #1842 from filecoin-project/next
Next network staging
2020-06-17 20:58:21 +02:00
Łukasz Magiera 02234d00b7 Merge remote-tracking branch 'origin/master' into next 2020-06-17 20:50:42 +02:00
Łukasz Magiera bef5bfcbb6 Merge pull request #2057 from filecoin-project/deps/fsm-fixes
Update storage FSM with a bunch of fixes
2020-06-17 20:48:50 +02:00
Łukasz Magiera 290512ee68 Update storage FSM with a bunch of fixes 2020-06-17 20:42:08 +02:00
Łukasz Magiera 4380106d3e Merge pull request #31 from filecoin-project/fix/handle-missng-pc-msg
checkCommit: handle missing precommit in handlePreCommitWait
2020-06-17 20:37:54 +02:00
Łukasz Magiera ce0b99ee9d checkCommit: handle missing precommit in handlePreCommitWait 2020-06-17 20:35:47 +02:00
Łukasz Magiera d129d6eada Merge pull request #2056 from filecoin-project/upd/specs-ac-chargegas
Update to specs actors with ChargeGas interface
2020-06-17 20:18:10 +02:00
Jakub Sztandera 5c5a3f2264 go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-17 20:04:28 +02:00
Łukasz Magiera d4644a28c1 Merge pull request #2046 from laser/feat/2027-manipulate-ask
add ask-manipulating (and printing) deal subcommands
2020-06-17 20:03:51 +02:00
Jeromy d66c70d1e6 add configurable paralellism for sub portions of the sealing process 2020-06-17 11:02:48 -07:00
Łukasz Magiera 77fc23c4d1 Merge pull request #30 from filecoin-project/fix/no-precommit-recover
checkCommit: handle missing precommits
2020-06-17 20:02:48 +02:00
Jakub Sztandera b91e7a9860 Update to specs actors with ChargeGas interface
Based on `lotus-0.6.1-chargegas` in specs-actors.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-17 20:00:30 +02:00
laser fcdfda8ba2 use chain head instead of mining base 2020-06-17 10:56:42 -07:00
Łukasz Magiera 2800fd919b Merge pull request #2053 from filecoin-project/feat/worker-reconnect
seal-worker: Auto-restart if miner dies
2020-06-17 19:48:29 +02:00
Łukasz Magiera 512bbb99ca Merge pull request #2054 from filecoin-project/fix/wdpost-panic
wdpost: Don't return nil from checkSectors
2020-06-17 19:48:09 +02:00
laser ed5b74b1ae tidy up 2020-06-17 10:42:09 -07:00
laser 791dff5a87 don't go into negative remaining time 2020-06-17 10:30:16 -07:00
laser 402cd8be19 get-ask output should use durations, too 2020-06-17 10:20:42 -07:00
Łukasz Magiera bdcb1e3592 Merge pull request #2029 from filecoin-project/feat/gas-delta-output
add some smartness to bench analyze gas output
2020-06-17 18:44:10 +02:00
Łukasz Magiera e60dd219dc wdpost: Don't return nil from checkSectors 2020-06-17 18:21:40 +02:00
laser 9d7be5dcbf modify set-ask to work with human-readable clock time/duration 2020-06-17 09:20:43 -07:00
Łukasz Magiera 70e964d9f9 Merge pull request #2039 from filecoin-project/feat/testnet-params
Set build params for testnet
2020-06-17 18:01:31 +02:00
laser 673a643184 use xerrors, as per feedback in PR 2020-06-17 08:57:18 -07:00
Łukasz Magiera 2761872ea7 seal-worker: Auto-restart when API connection is lost 2020-06-17 17:47:18 +02:00
Łukasz Magiera fc7195f19a seal-worker: Wait for miner API on start 2020-06-17 17:47:18 +02:00
Łukasz Magiera 8b8bb5e833 rpc: add Closing method 2020-06-17 17:47:18 +02:00
laser 5d4f1bb3f1 work with bit-padded byte quantities, as per PR feedback 2020-06-17 08:42:30 -07:00
laser 139c3297ab change "duration" help text 2020-06-17 08:34:50 -07:00
Łukasz Magiera b2d14380b4 checkCommit: handle missing precommits 2020-06-17 17:19:36 +02:00
RobQuistNL 20503de3ba Merge branch 'next' of github.com:filecoin-project/lotus into patch-3 2020-06-17 09:08:16 +02:00
laser 2676892886 go mod tidy 2020-06-16 17:47:04 -07:00
laser 5acf5bf102 upper and lower bounds checking 2020-06-16 17:45:11 -07:00
Jeromy ec693008d7 allow sealing bench to run parallel seals 2020-06-16 17:39:51 -07:00
laser 4ba1846c11 format the piece sizes 2020-06-16 17:32:45 -07:00
laser 5eceed81e1 add "get-ask" command 2020-06-16 17:23:03 -07:00
Whyrusleeping 8b725b4b8c Merge pull request #2045 from filecoin-project/feat/seed-rm-unsealed
seed: Cleanup unsealed sectors
2020-06-16 16:58:44 -07:00
laser 6253c39100 replace "set-price" with "set-ask"
Fixes #2027
2020-06-16 16:13:21 -07:00
Łukasz Magiera b845013836 Set build params for testnet 2020-06-17 00:37:40 +02:00
Łukasz Magiera 9690bc9c63 seed: Cleanup unsealed sectors 2020-06-17 00:35:51 +02:00
Whyrusleeping c6a8fe16c6 Merge pull request #2042 from jsign/jsign/considerstatus
Consider QueryOffer Error & Status
2020-06-16 13:58:37 -07:00
Ignacio Hagopian ec9a334f93 append message on unavailable and error status
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-06-16 17:52:47 -03:00
Ignacio Hagopian 35d9de6b6e consider response status and err
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-06-16 17:32:03 -03:00
Aayush Rajasekaran 4d0df5d599 Merge pull request #2040 from jsign/jsign/minerretrieval
Miner QueryOffer API & non local-discovery retrieval CLI support
2020-06-16 16:00:40 -04:00
Ignacio Hagopian 7fd082e941 resolve peerid
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-06-16 12:22:44 -03:00
Ignacio Hagopian 9d17e0be9d ClientMinerQueryOfer API & CLI support
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-06-16 11:14:49 -03:00
Rob Quist 030472d61c Remove Rust installation and remove Go installation guide 2020-06-16 15:30:41 +02:00
Łukasz Magiera 6bff52483b Merge pull request #1973 from filecoin-project/feat/drand-upd
Update to new drand
2020-06-16 15:30:40 +02:00
Łukasz Magiera 32d8ca2f21 Merge pull request #2037 from filecoin-project/feat/testnet-reset-updates
Pre-testnet reset updates
2020-06-16 15:29:33 +02:00
Jakub Sztandera fd6c8769dd Update to new drand
WIP

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-16 14:46:30 +02:00
Łukasz Magiera bac6a47c67 specs-actors v0.6.1 2020-06-16 12:30:54 +02:00
Łukasz Magiera 18dd1c277b Update ffi 2020-06-16 12:28:28 +02:00
Łukasz Magiera ab4c11c096 Merge remote-tracking branch 'origin/master' into next 2020-06-16 12:04:29 +02:00
Łukasz Magiera 6bbea74a7d Merge pull request #1961 from RobQuistNL/patch-2
Update documentation about Lotus Seal Worker
2020-06-16 11:58:38 +02:00
chunqizhi 4f1efbe38f Merge pull request #2 from filecoin-project/master
merge
2020-06-16 17:57:52 +08:00
Łukasz Magiera eeb5053919 Merge pull request #2031 from filecoin-project/feat/stats-power-lookup
stats: increase miner power lookup perf
2020-06-16 11:53:09 +02:00
Aayush Rajasekaran d8a517f992 Syncer::InformNewHead can quickly fail if height is impossibly large 2020-06-16 00:51:00 -04:00
Aayush Rajasekaran aa513d920e Merge pull request #1705 from hayeah/cache-tipset-validation-progress
Cache tipset validation progress
2020-06-16 00:14:11 -04:00
Whyrusleeping 3327ed50a8 Merge pull request #2033 from filecoin-project/asr/advance-block
Make advance-block work
2020-06-15 19:49:19 -07:00
Travis Person f31fcdae08 stats: increase miner power lookup perf 2020-06-16 02:48:27 +00:00
Whyrusleeping 66b15b7076 Merge pull request #2032 from filecoin-project/deps/go-fil-markets-0.3.0
Update to fil-markets 0.3.0
2020-06-15 19:46:24 -07:00
chunqizhi c5a9f180af Merge pull request #1 from filecoin-project/master
merge
2020-06-16 09:47:20 +08:00
Aayush Rajasekaran a9abf3ceb2 extract the fake Wpost used for testing 2020-06-15 21:02:53 -04:00
Aayush Rajasekaran ed3b2716af Don't verify ElectionPostVRF when insecure validation enabled 2020-06-15 21:02:25 -04:00
Aayush Rajasekaran 69948cd09c WalletSign should resolve ID addresses 2020-06-15 21:00:22 -04:00
Jeromy f8c4b64782 improve chain import analyze output, add some rough virtual gas charges 2020-06-15 16:05:29 -07:00
hannahhoward a422647819 fix(lint): fix lint error
fix lint error and update to tagged package
2020-06-15 15:53:39 -07:00
hannahhoward 9262661135 chore(deps): update to fil-markets 0.3.0
Updates to latest fil markets with resumability and other fixes
2020-06-15 15:43:47 -07:00
Jeromy 01c4726fd5 add some smartness to bench analyze gas output 2020-06-15 13:02:57 -07:00
Łukasz Magiera 0230362d33 Merge pull request #2025 from filecoin-project/deps/specs-actors-v0.6
specs-actors v0.6
2020-06-15 21:30:37 +02:00
Łukasz Magiera f8669d4e95 Update chain-val and sector-storage 2020-06-15 21:21:40 +02:00
Łukasz Magiera 42c9e08595 Merge pull request #46 from filecoin-project/feat/faults-sealed-size
faults: Check sealed sector file size
2020-06-15 21:20:01 +02:00
Łukasz Magiera cb2dfb2e11 Merge pull request #49 from filecoin-project/fix/unseal-close-correct
ffiwrapper: Close the correct end of the pipe in unseal
2020-06-15 21:11:57 +02:00
Łukasz Magiera 0fea67f662 Merge pull request #48 from filecoin-project/feat/log-and-ignore-falloc
Log and ignore if fallocate is not supported
2020-06-15 21:05:12 +02:00
Jakub Sztandera e82d2ee8ee Log and ignore if fallocate is not supported
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-15 20:19:42 +02:00
Łukasz Magiera e530ff93c4 ffiwrapper: Close the correct end of the pipe in unseal 2020-06-15 19:59:20 +02:00
Łukasz Magiera 12298f8953 Merge pull request #2026 from filecoin-project/feat/gas-extra
Use extra field in gastrace
2020-06-15 19:57:30 +02:00
Łukasz Magiera daca8651f4 Fix bench 2020-06-15 19:53:21 +02:00
Jakub Sztandera 8039701f9e Use extra field in gastrace
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-15 19:52:04 +02:00
Łukasz Magiera 01f0bb3124 Merge pull request #1994 from laser/feat/1920-toggle-accepting-storage-deals
allow miner to disable/enable consideration of received storage deal proposals
2020-06-15 19:05:39 +02:00
Łukasz Magiera 58a79773ee fix debug build 2020-06-15 18:34:36 +02:00
Łukasz Magiera c832c0bf3f mod tidy 2020-06-15 18:31:59 +02:00
Łukasz Magiera 907364ce67 Update deps, fix more tests 2020-06-15 18:30:49 +02:00
Łukasz Magiera 494c3bc487 Merge pull request #27 from filecoin-project/deps/specs-actors-v0.6
specs-actors v0.6
2020-06-15 18:27:49 +02:00
Jakub Sztandera 18cf7b046e Merge pull request #2024 from filecoin-project/feat/virtual-gas
Add virtual gas
2020-06-15 18:27:24 +02:00
Łukasz Magiera bd2ff4e909 specs-actors v0.6 2020-06-15 18:26:01 +02:00
Whyrusleeping 87e5c38e32 Merge pull request #1952 from laser/feat/805-warn-lotus-balance
display a little inline warning if balance is zero
2020-06-15 09:19:00 -07:00
Łukasz Magiera 728a47ab99 Merge pull request #47 from filecoin-project/deps/actors-v0.6.0
specs-actors v0.6
2020-06-15 17:48:52 +02:00
Jakub Sztandera c98972ab23 Merge pull request #1555 from filecoin-project/feat/hashverify
Use HashVerify
2020-06-15 17:47:42 +02:00
Łukasz Magiera f3026a9ee6 mod tidy 2020-06-15 17:45:37 +02:00
Jakub Sztandera 2a78ebabd9 Use HashVerify
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-15 17:39:16 +02:00
Łukasz Magiera 3d1225bf34 gofmt 2020-06-15 16:28:57 +02:00
Jakub Sztandera a23a87a17f Add virtual gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-15 16:18:05 +02:00
Łukasz Magiera 49b1acba43 Merge pull request #1992 from filecoin-project/fix/correct-recov-deadlines
wdpost: Submit recoveries for sectors within a deadline
2020-06-15 15:09:22 +02:00
Łukasz Magiera b6ef7d5910 Merge pull request #26 from storswift/master
Fix a mistake in checkPrecommit
2020-06-15 15:08:35 +02:00
Łukasz Magiera 464f6a6b08 Update specs-actors to v0.6 2020-06-15 14:49:18 +02:00
Łukasz Magiera 7e7fac05e0 Merge pull request #1989 from filecoin-project/feat/merge-master
Merge in master into the next
2020-06-15 14:45:00 +02:00
Łukasz Magiera 7296ce7287 Merge remote-tracking branch 'origin/next' into feat/merge-master 2020-06-15 14:40:29 +02:00
Łukasz Magiera 70c8f7b1ee Merge remote-tracking branch 'origin/master' into feat/merge-master 2020-06-15 14:38:38 +02:00
Łukasz Magiera f67bbbc457 specs-actors v0.6 2020-06-15 14:32:17 +02:00
Łukasz Magiera 14c615dead faults: Check sealed sector file size 2020-06-15 12:54:12 +02:00
Łukasz Magiera 50b04d6b2b Merge pull request #2019 from chunqizhi/zcq
Add usage information for provingInfoCmd
2020-06-15 12:19:38 +02:00
chunqizhi 12056c8904 go fmt 2020-06-15 17:43:42 +08:00
Łukasz Magiera fdbda6f608 Merge pull request #2017 from jsign/jsign/nits
nit: unchecked errors
2020-06-15 11:31:57 +02:00
Howard Yeh c822816f8e Cache tipset validation progress 2020-06-14 18:41:17 +08:00
chunqizhi 6d36c030e0 Add usage information for provingInfoCmd 2020-06-13 18:05:30 +08:00
Ignacio Hagopian 82c6be14f4 unchecked errs
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-06-12 22:34:00 -03:00
Łukasz Magiera fb4ad043dd Merge pull request #2011 from filecoin-project/feat/more-callers
Expose more callers, ellipsis unimportant ones
2020-06-13 01:55:26 +02:00
Jakub Sztandera 91ea039077 Change ellipsis, more accurate timing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-12 20:46:04 +02:00
Łukasz Magiera 8e025db656 Merge pull request #2014 from filecoin-project/fix/chain-reorgs-race
fix a potential race with chain reorgs notifees.
2020-06-12 20:35:16 +02:00
Raúl Kripalani 4e9293ba04 fix a potential race with chain reorgs notifees. 2020-06-12 19:18:23 +01:00
Łukasz Magiera 19afb57ac7 Merge pull request #1953 from jimpick/feat/libp2p-announce-addresses
Make libp2p swarm Announce / NoAnnounce addresses configurable
2020-06-12 19:28:13 +02:00
Jakub Sztandera a032bbe087 Merge pull request #2012 from filecoin-project/schomatis/feat/doc/README/branches
doc: active development branches
2020-06-12 19:27:51 +02:00
Lucas Molas a2943a6b7f doc: active development branches 2020-06-12 13:59:03 -03:00
Jakub Sztandera 8ad2b3c3d9 Removed commented out code
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-12 18:58:55 +02:00
Jakub Sztandera cd69e57a33 Expose more callers, ellipsis unimportant ones
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-12 18:49:29 +02:00
Rob Quist ca8a00f8a1 Update hardware-mining.md 2020-06-12 18:19:04 +02:00
Rob Quist 9077dea0cd Update install-lotus-ubuntu.md 2020-06-12 17:40:47 +02:00
Rob Quist d670257402 Add back installation of Go and Rust 2020-06-12 17:30:43 +02:00
Łukasz Magiera 3460fb0d47 Merge pull request #2005 from filecoin-project/feat/comp-state-template
compute-state html: Convert to templates
2020-06-12 16:47:05 +02:00
Jakub Sztandera 82eb7786d4 Cleanup lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-12 16:25:55 +02:00
Jakub Sztandera 00385acc1d Remove htmlSafeAttr
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-12 15:26:58 +02:00
Jakub Sztandera 813940762c Use html/template
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-12 14:46:50 +02:00
Łukasz Magiera bd25d6db06 compute-state html: Convert to templates 2020-06-12 13:30:35 +02:00
Łukasz Magiera 9fbc7aafb4 Merge pull request #2001 from filecoin-project/asr/fetch-params-cli
Improve UX of fetch-params
2020-06-12 10:04:26 +02:00
Łukasz Magiera 227819dc1e docs: Update local-dev-net 2020-06-12 10:03:31 +02:00
marco-storswift 0092bff922 fixed #25
ticketEpoch := epoch - SealRandomnessLookback in the func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.SealRandomness, abi.ChainEpoch, error) {
2020-06-12 14:48:33 +08:00
Aayush Rajasekaran 2c401f9041 Improve UX of fetch-params 2020-06-12 01:17:10 -04:00
Jeromy c7e3a5cff4 fix null incrementing 2020-06-12 02:28:17 +02:00
Łukasz Magiera 5469df7dd1 Merge pull request #1991 from filecoin-project/feat/split-gas
Add gas tracing
2020-06-11 22:33:22 +02:00
Jakub Sztandera 071ddf6563 Add aggregate number, add number of bytes for storage calls
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-11 22:25:24 +02:00
laser 36b327b57b various symbol renames 2020-06-11 13:18:18 -07:00
laser 7587e6c08b get and set storage deal acceptance through CLI 2020-06-11 12:59:50 -07:00
Jakub Sztandera c90d35869b Add gas tracing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-11 21:59:39 +02:00
laser 67110ce739 stub enable/disable storage deal commands 2020-06-11 12:20:11 -07:00
laser 5421d0d1c5 better field and struct names + set default appropriately
Storage miners, by default, should be configured to accept storage deals.
2020-06-11 12:15:28 -07:00
laser c458b4712a better rejection messages 2020-06-11 12:06:38 -07:00
Łukasz Magiera 0200e3def5 wdpost: Submit recoveries for sectors within a deadline 2020-06-11 20:38:29 +02:00
Jakub Sztandera 6acc9a62f8 Split gas internally into compute gas and storage gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-11 20:37:14 +02:00
laser d6b2519843 config-driven IsAcceptingStorageDeals flag
Makes incremental progress towards #1920.
2020-06-11 11:29:59 -07:00
Łukasz Magiera c8046f4597 Merge branch 'next' of github.com:filecoin-project/go-lotus into next 2020-06-11 18:24:51 +02:00
Łukasz Magiera 1c583ab487 Merge pull request #1966 from laser/feat/reload-config
expose config-setting through Repo interface
2020-06-11 18:15:06 +02:00
Łukasz Magiera 936f84dfa6 Merge pull request #1988 from waynewyang/VerifyConsensusFault
fix:the condition of time-offset mining fault
2020-06-11 18:11:48 +02:00
Jakub Sztandera 491f080a37 Merge remote-tracking branch 'origin/master' into feat/merge-master
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-11 17:59:27 +02:00
waynewyang 8354bd91db fix:the condition of time-offset mining fault 2020-06-11 23:52:44 +08:00
laser fb1d5197fa pass SetConfig a mutator func, as per PR feedback
- fsLockedRepo.config gets a mutex
- add missing checkToken call to lockedMemRepo#GetStorage and lockedMemRepo#SetStorage
- LockedRepo#SetConfig accepts a mutating function as per @magik
2020-06-11 08:49:19 -07:00
laser cf321f7667 add support for replacing config after node starts
- TODO: does a "locked repo" need fine-grained (i.e. field-level) locking?
2020-06-11 08:49:19 -07:00
laser 2d6b2e3811 fix a spelling error 2020-06-11 08:49:19 -07:00
laser d4dbfdbe91 rename Config to GetConfig 2020-06-11 08:49:19 -07:00
Łukasz Magiera c9a845d3aa Merge remote-tracking branch 'origin/master' into next 2020-06-11 16:29:26 +02:00
Łukasz Magiera 1e41ca125d Merge pull request #1975 from filecoin-project/feat/ex-trace
Refactor ExecutionResult to ExecutionTrace
2020-06-11 16:24:17 +02:00
Jakub Sztandera 500ddd6585 go mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-11 16:07:04 +02:00
Łukasz Magiera 9457df9ddd Merge pull request #1985 from filecoin-project/fix/chain-idx-nulls
chainstore index: Drop wrong check
2020-06-11 16:01:05 +02:00
Jakub Sztandera c3f23ddce8 Refactor ExecutionResult to ExecutionTrace
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-11 15:53:47 +02:00
Łukasz Magiera 8b308972a4 chainstore index: Drop wrong check 2020-06-11 15:43:24 +02:00
Łukasz Magiera 4f632c893c Merge pull request #1983 from waynewyang/ConsensusFault
Add flag for cli slash-consensus
2020-06-11 14:27:33 +02:00
waynewyang 41066bd45e Add flag for cli slash-consensus 2020-06-11 19:20:11 +08:00
Jeromy ac1048fcd7 test a few more cases 2020-06-11 12:31:32 +02:00
Jeromy 14ea847ef6 fix chain index seeking through long ranges of null rounds 2020-06-11 12:31:32 +02:00
Anton Evangelatov 2ce3a5f887 docs: add a note about open files limit 2020-06-11 12:31:32 +02:00
waynewyang 27858506ff error check 2020-06-11 12:31:32 +02:00
Aayush Rajasekaran 6ba5c5d0e1 Doc fix: use correct file name 2020-06-11 12:31:32 +02:00
Lucas MolasandAayush Rajasekaran dc112a5a00 Lotus architecture notes (#1768)
Co-authored-by: Aayush Rajasekaran <arajasek94@gmail.com>
2020-06-11 12:31:32 +02:00
laser fe60ffb6ff display quantities of bytes in human-readable format
- client commP
- client local
- client find
- client query-ask
- client list-deals
- state sector-size
2020-06-11 12:31:32 +02:00
Jeromy 512270593b clean up some of the more spammy logs 2020-06-11 12:31:29 +02:00
Mike Greenberg 2cd6347a13 Express block validation, cpu/mem usage via OpenCensus 2020-06-11 12:31:04 +02:00
Łukasz Magiera b1f66b181c Merge pull request #1980 from yaohcn/fix/bench-prove
bench prove need miner-addr flag
2020-06-11 12:10:49 +02:00
Łukasz Magiera d5dae844bd Merge pull request #1978 from filecoin-project/fix/chain-index-seek-nulls
Fix/chain index seek nulls
2020-06-11 12:08:53 +02:00
yaohcn e0a8e993bc bench prove nedd miner-addr flag 2020-06-11 16:35:46 +08:00
Jeromy 1aff04faab test a few more cases 2020-06-10 22:17:29 -07:00
Jeromy 295c0861c4 fix chain index seeking through long ranges of null rounds 2020-06-10 22:15:46 -07:00
Whyrusleeping ba3f73acb8 Merge pull request #1974 from nonsense/docs-open-files-limit
docs: add a note about open files limit
2020-06-10 17:37:25 -07:00
Anton Evangelatov 68959582b9 docs: add a note about open files limit 2020-06-11 00:15:46 +02:00
Łukasz Magiera 1f9b563412 Merge pull request #1954 from filecoin-project/asr/peerid
Create an api.MinerInfo that has peerID as a Peer ID
2020-06-10 19:32:42 +02:00
Łukasz Magiera 99bc46b8b8 Merge pull request #1971 from waynewyang/err-check
error check
2020-06-10 14:38:38 +02:00
waynewyang e2d2af3afa error check 2020-06-10 20:34:04 +08:00
Łukasz Magiera 41f6d62a51 Merge pull request #45 from filecoin-project/fix/double-runlock
local store: Fix double RUnlock
2020-06-10 14:27:46 +02:00
Łukasz Magiera 40712b1026 local store: Fix double RUnlock 2020-06-10 14:08:03 +02:00
RobQuistNL af4c4d4f1f Prevent words from being marked as glossary links 2020-06-10 11:44:35 +02:00
RobQuistNL 6d06bfb452 Update documentation 2020-06-10 11:41:58 +02:00
RobQuistNL 159a1a4645 Update other docs + bump go.mod version 2020-06-10 10:29:57 +02:00
Rob Quist d4b230c137 Update Ubuntu installation documentation + bump required go version to 1.14 2020-06-10 10:24:38 +02:00
Łukasz Magiera 6f501119bf Merge pull request #1957 from filecoin-project/feat/v27
v27 parameters
2020-06-10 02:04:59 +02:00
Łukasz Magiera a00df0da90 FFI v27 2020-06-10 01:44:14 +02:00
Aayush Rajasekaran 6d90f12bb6 Doc fix: use correct file name 2020-06-09 20:22:51 -03:00
Lucas MolasandAayush Rajasekaran 469eef8231 Lotus architecture notes (#1768)
Co-authored-by: Aayush Rajasekaran <arajasek94@gmail.com>
2020-06-09 20:17:28 -03:00
Łukasz Magiera 252c2b0c96 Merge pull request #44 from filecoin-project/feat/v27
v27 parameters
2020-06-10 01:15:55 +02:00
Aayush Rajasekaran 1ccad22227 Move api.MinerInfo to api/types 2020-06-09 19:08:43 -04:00
Aayush Rajasekaran 5cf76ba8b3 Create an api.MinerInfo that has peerID as a Peer ID 2020-06-09 19:07:53 -04:00
Jakub Sztandera 81bc8471e3 Merge pull request #1963 from filecoin-project/chore/upd-log
Update go-log to master
2020-06-09 23:27:02 +02:00
Jakub Sztandera 5feea2e0f8 Update go-log to master
It restores line informations in log messages

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-09 23:06:40 +02:00
Łukasz Magiera 52782b6def ffiwrapper: Fix AddPiece with multireaders 2020-06-09 22:10:14 +02:00
Łukasz Magiera 79b35c59a5 Merge pull request #1959 from laser/feat/human-readable-bytes-display
display quantities of bytes in human-readable format
2020-06-09 22:09:30 +02:00
Łukasz Magiera 35749f0330 Merge pull request #1962 from filecoin-project/fix/log-spammy
clean up some of the more spammy logs
2020-06-09 22:04:26 +02:00
laser 2889efb608 display quantities of bytes in human-readable format
- client commP
- client local
- client find
- client query-ask
- client list-deals
- state sector-size
2020-06-09 12:53:44 -07:00
Jeromy 686c543778 clean up some of the more spammy logs 2020-06-09 12:49:31 -07:00
Rob Quist 093dc907b3 Update documentation about Lotus Seal Worker
Running the initial command `lotus-seal-worker run` gave an error about `--address` being a required parameter.
After setting that to `127.0.0.1:2345` the miner started to freak out and sectors broke as the mining process locked up.

It seems like in the mean time the sealing work has already been moved into the `lotus-storage-miner` and thus doesn't need to run alongside the miner. 

Changed the docs to what I think is correct now - but please check, I could be horribly wrong :)
2020-06-09 20:57:21 +02:00
Łukasz Magiera 57adda40f9 ffiwrapper: Test FD leaks 2020-06-09 12:24:03 +02:00
Łukasz Magiera edb4a1ee9e Fix addpiece and unsealRange 2020-06-09 12:06:21 +02:00
Łukasz Magiera 9dfe8851f8 vet fixes 2020-06-09 11:14:25 +02:00
Łukasz Magiera 3cd79b6fec wip fixing addpiece 2020-06-09 11:13:23 +02:00
Jakub Sztandera 1144049c66 Merge pull request #1927 from filecoin-project/feat/opencensus_report_validation_time
Express block validation time via OpenCensus
2020-06-09 10:03:46 +02:00
Jim Pick 6e11ff3796 Make libp2p swarm Announce / NoAnnounce addresses configurable
In go-ipfs, it is possible to manually configure addresses to announce
or not announce to the swarm.

https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#addressesannounce

This PR adds the same feature to Lotus. It can be configured from the [libp2p]
section of either the .lotus or .lotusstorage config.toml file. Example:

[Libp2p]
  ListenAddresses = ["/ip4/0.0.0.0/tcp/34515", "/ip6/::/tcp/34515"]
  AnnounceAddresses = ["/ip4/52.13.91.110/tcp/34515"]
2020-06-08 17:03:11 -07:00
Łukasz Magiera 796af1351c v27 parameters 2020-06-09 01:02:44 +02:00
Łukasz Magiera 19013b09e0 v27 parameters 2020-06-08 23:48:31 +02:00
Łukasz Magiera 7539d88f54 Merge pull request #1951 from filecoin-project/feat/sstor-post-better
Update sector-storage with better post faults
2020-06-08 23:48:13 +02:00
Łukasz Magiera 28f895cec2 Update sector-storage with better post faults 2020-06-08 23:20:19 +02:00
Łukasz Magiera bccaf69712 Merge pull request #43 from filecoin-project/feat/better-fault-checks
A bunch of PoSt improvements
2020-06-08 22:32:46 +02:00
laser 751bc45bef display a little inline warning if balance is zero 2020-06-08 12:20:44 -07:00
Łukasz Magiera 1902049972 mock: Update interface 2020-06-08 20:30:48 +02:00
Mike Greenberg ae83ca6893 Express block validation, cpu/mem usage via OpenCensus 2020-06-08 14:15:01 -04:00
Łukasz Magiera 375a6b4d38 verifier: Handle sector unlocking correctly 2020-06-08 19:57:34 +02:00
Łukasz Magiera 8e489cdbdb verifier: Skip sectors which can't be acquired 2020-06-08 19:36:41 +02:00
Łukasz Magiera 8c58fcb1cc verifier: update interfaces 2020-06-08 19:22:15 +02:00
Łukasz Magiera 547bf93f4a roprov: Use TryLock 2020-06-08 18:57:56 +02:00
Łukasz Magiera 5f4efedbdd Merge pull request #1949 from filecoin-project/feat/no-mbase-update-err
don't update the mining base if mining fails for some reason
2020-06-08 18:56:48 +02:00
Jeromy 9d49c6861f don't update the mining base if mining fails for some reason 2020-06-08 09:51:47 -07:00
Łukasz Magiera 1a5af8cafd Improve fault checker 2020-06-08 18:47:59 +02:00
Łukasz Magiera 3b56288a5e Merge remote-tracking branch 'origin/master' into next 2020-06-08 18:29:36 +02:00
Jakub Sztandera f257f4febb Merge pull request #1911 from filecoin-project/feat/drand-score
Score drand topic
2020-06-08 15:12:25 +02:00
Łukasz Magiera df867f3349 Merge pull request #1946 from filecoin-project/asr/walletdelete
Add delete functionality to the wallet
2020-06-08 13:27:42 +02:00
Łukasz Magiera 5270c20263 Merge pull request #1947 from filecoin-project/asr/mineravailablebalance
Correct double-counting in StateMinerAvailableBalance
2020-06-08 13:24:54 +02:00
Jakub Sztandera 7762cd0a68 Assign positive scores to drand bootstrappers
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-08 11:34:46 +02:00
Jakub Sztandera e91cc9cd08 Add drand topic scores
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-08 11:34:46 +02:00
Aayush Rajasekaran 741825a04e Correct double-counting in StateMinerAvailableBalance 2020-06-07 20:49:50 -04:00
Aayush Rajasekaran 49b27da426 Add delete functionality to the wallet 2020-06-07 19:36:01 -04:00
Łukasz Magiera bf4bbd15e5 Merge pull request #1945 from filecoin-project/feat/specs-actors-v0.5.6
Update specs-actors to v0.5.6
2020-06-06 20:53:58 +02:00
Łukasz Magiera baa69c3c81 Update specs-actors to v0.5.6 2020-06-06 19:51:10 +02:00
Whyrusleeping ac644605f2 Merge pull request #1942 from filecoin-project/fix/proto-panic
Fix protobuf panic by updating protobuf to 1.4.2
2020-06-05 18:04:20 -07:00
Jakub Sztandera 94da339622 Fix protobuf panic by updating protobuf to 1.4.2
The panic is caused by usage of internal protobuf interface.
It was changed in protobuf 1.4.0 and reluctantly fixed in 1.4.2

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-06 02:47:29 +02:00
Whyrusleeping 366359803a Merge pull request #1903 from filecoin-project/feat/reuse-get-tipset-by-height
reuse GetTipsetByHeight in GetRandomness
2020-06-05 16:06:28 -07:00
Łukasz Magiera 3b13397165 gofmt 2020-06-06 00:59:01 +02:00
Łukasz Magiera 163c2b2544 Merge remote-tracking branch 'origin/master' into next 2020-06-06 00:58:24 +02:00
Łukasz Magiera 9e2603c1bf Merge pull request #1937 from laser/bugs/916-standardize-cid-base32
print "client"-command CIDs as base32-encoded strs
2020-06-06 00:53:07 +02:00
Łukasz Magiera d27750590a Merge pull request #1928 from filecoin-project/fix/lsm-prov-deadlines
Make lotus-storage-miner deadlines correct
2020-06-06 00:37:09 +02:00
Łukasz Magiera 33a00ab9e5 Merge pull request #1938 from filecoin-project/deps/spect-actors-upd
Update specs-actors
2020-06-06 00:31:09 +02:00
Łukasz Magiera f765fe36d7 Make lotus-storage-miner deadlines correct 2020-06-06 00:28:32 +02:00
Whyrusleeping be7a95c9a5 Merge pull request #1915 from filecoin-project/feat/chain-index
implement chain index to make lookbacks faster
2020-06-05 15:13:47 -07:00
Aayush Rajasekaran 2571480bb6 Update chain-val, use tagged specs-actors 2020-06-05 18:13:30 -04:00
Jeromy 73d928751d disallow sourcing randomness from future epochs 2020-06-05 15:12:13 -07:00
Whyrusleeping 0c19544d94 Merge pull request #1941 from filecoin-project/deps/update-hamt
update to new hamt code with improved perf
2020-06-05 14:54:21 -07:00
laser a80dce2e3b move to client command 2020-06-05 14:22:29 -07:00
Jeromy fb09d1ad2b update to new hamt code with improved perf 2020-06-05 14:13:08 -07:00
laser 963e4dd2fc set a Base32 default explicitly 2020-06-05 13:52:36 -07:00
Łukasz Magiera a5d81c6cc9 Merge pull request #1932 from filecoin-project/feat/chainget-state
chain get: @state selector to prettify actor state
2020-06-05 22:42:36 +02:00
laser b167e73acb allow CLI consumer to specify CID encoding for output 2020-06-05 13:33:45 -07:00
Łukasz Magiera e7af464033 Merge pull request #1931 from filecoin-project/feat/compute-state-sub-links
compute-state html: Allow linking to internal executions
2020-06-05 22:29:23 +02:00
laser 28e454fd4a go mod tidy 2020-06-05 13:13:53 -07:00
laser 55a9c9ae0a client deal command outputs Base32-encoded CID 2020-06-05 13:13:33 -07:00
laser b3eef76cdd client commP outputs Base32-encoded string 2020-06-05 13:13:16 -07:00
Łukasz Magiera 3f81ff3507 Update specs-actors 2020-06-05 22:06:11 +02:00
laser 2347ba6f39 print "client"-command CIDs as base32-encoded strs
Fixes #916
2020-06-05 13:04:28 -07:00
Łukasz Magiera b9d3c26eae Merge pull request #1924 from filecoin-project/fix/sealing-betterering
Sealing Improvements
2020-06-05 21:58:31 +02:00
Łukasz Magiera cd6670205c Update sector-storage 2020-06-05 21:31:57 +02:00
Łukasz Magiera 4b9317d1f0 Merge pull request #42 from filecoin-project/feat/allow-commit1-anywhere
Allow Commit1 anywhere
2020-06-05 21:27:46 +02:00
Whyrusleeping 9f4ac4f4f3 Merge pull request #1934 from filecoin-project/bugs/return-on-error-#1611
fix unhandled nil return
2020-06-05 12:26:27 -07:00
shannonwells e4bed4d963 return on all err conditions 2020-06-05 11:20:07 -07:00
shannonwells 76b5c8b145 fix unhandled nil return 2020-06-05 11:20:07 -07:00
Łukasz Magiera 9836c45e03 Merge pull request #1935 from filecoin-project/feat/cap-batch-verify-threads
add a simple semaphore to batch verify seals
2020-06-05 20:19:45 +02:00
Łukasz Magiera f92ef92193 Make ctxCond nicer 2020-06-05 20:04:59 +02:00
Jeromy 51f1712564 add a simple semaphore to batch verify seals 2020-06-05 10:47:49 -07:00
Łukasz Magiera e9eff8be5c Merge pull request #1933 from laser/bugs/1209-paramfetch-sigterm
pass context to paramfetch.GetParams
2020-06-05 19:46:23 +02:00
laser 4855045ea2 pass context to paramfetch.GetParams
Fixes #1209
2020-06-05 10:28:00 -07:00
Łukasz Magiera 958f74340b mock: Fix concurrent map writes in AddPiece 2020-06-05 18:43:47 +02:00
Łukasz Magiera 6b06ae528c chain get: @state selector to prettify actor state 2020-06-05 17:41:21 +02:00
Łukasz Magiera c06dc750da Address review 2020-06-05 16:52:59 +02:00
Łukasz Magiera 813961b458 compute-state html: Allow linking to internal executions 2020-06-05 14:57:37 +02:00
Łukasz Magiera 7ae9d26cd1 Merge remote-tracking branch 'origin/next' into fix/sealing-betterering 2020-06-05 14:00:47 +02:00
Łukasz Magiera 9e5cc7c910 Update fsm, sector-storage 2020-06-05 10:46:45 +02:00
Łukasz Magiera aa405b2176 Merge pull request #24 from filecoin-project/feat/improvements
A bunch of improvements for more reliable sealing
2020-06-05 10:23:04 +02:00
Łukasz Magiera 7d166fd730 Merge pull request #1908 from filecoin-project/docs/cpu-choice
add a doc on amd vs intel cpus
2020-06-05 01:21:50 +02:00
Łukasz Magiera 60101fd97b Merge pull request #1926 from filecoin-project/chore/merge-master
Merge in master into next
2020-06-05 01:13:12 +02:00
Jakub Sztandera 0bc174697a Fix WindowPoStScheduler
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-05 00:52:45 +02:00
Jakub Sztandera 7bee5b3abc Merge remote-tracking branch 'origin/master' into next
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-05 00:33:43 +02:00
Aayush Rajasekaran 656b285195 Bugfix: Begin walkback when lookback target's height is too low 2020-06-04 18:17:54 -04:00
whyrusleeping 86083531c6 a couple bugfixes 2020-06-04 18:17:54 -04:00
Jeromy c01f70105f implement chain index to make lookbacks faster 2020-06-04 18:17:54 -04:00
Łukasz Magiera 5aafa91e22 Merge pull request #1898 from filecoin-project/deps/update
Update CLI lib
2020-06-04 23:45:39 +02:00
Łukasz Magiera bada564c10 Merge pull request #1912 from filecoin-project/asr/statesearch
search for a message should stop if we reach sender nonce of 0
2020-06-04 23:42:16 +02:00
Łukasz Magiera 13176e8b53 Cleanup PathType usages 2020-06-04 23:30:20 +02:00
Łukasz Magiera f9f0d86ddf Merge pull request #1913 from acruikshank/feat/1853-confirmations-in-StateWaitMsg2
Add confidence and timeout to message wait
2020-06-04 23:23:15 +02:00
vyzo 6beabb5e8a Merge pull request #1914 from filecoin-project/feat/update-pubsub
update libp2p dependencies
2020-06-04 22:50:48 +03:00
vyzo 3719938849 gomod: update go-maddr-filter 2020-06-04 22:35:33 +03:00
vyzo 6420990007 gomod: update go-libp2p-quic-transport 2020-06-04 22:34:07 +03:00
vyzo 1fab24b9bc gomod: update go-libp2p-kad-dht 2020-06-04 22:32:11 +03:00
Łukasz Magiera 8bbe63bd9d Add expected win rate to miner-info 2020-06-04 21:26:29 +02:00
Łukasz Magiera fa3b1552cf Update sector-storage intefraces 2020-06-04 21:26:29 +02:00
Łukasz Magiera c625b30781 Update fsm adapter 2020-06-04 21:26:29 +02:00
Łukasz Magiera 05d703e53b Fix testworker 2020-06-04 21:19:15 +02:00
Łukasz Magiera b3cde66bd2 Recover from half-successful FinalizeSector 2020-06-04 21:15:15 +02:00
Łukasz Magiera aac3c448a4 Drop AcquireSector locks 2020-06-04 21:00:16 +02:00
vyzo b339750757 gomod: update go-libp2p-yamux 2020-06-04 21:34:01 +03:00
Łukasz Magiera 8ad1af106d Retry precommit2 once before redoing precommit1 2020-06-04 17:30:36 +02:00
acruikshank da960a9de4 more import rearrangement 2020-06-04 09:54:37 -04:00
Mike Greenberg ce30162907 Fix documentation link for new systemd page 2020-06-04 08:10:08 -04:00
Mike Greenberg c0cdcbb9e0 Adjust service logging and startup settings 2020-06-04 08:09:01 -04:00
vyzo 954a20ff4c gomod: update go-libp2p to v0.9.4 2020-06-04 14:25:17 +03:00
vyzo 8057b994cf go.mod: remove unecessary (and harmful) replace directive for go-systemd 2020-06-04 14:23:59 +03:00
acruikshank ea111b058e imports 2020-06-03 22:34:57 -04:00
acruikshank ce33074626 go fmt 2020-06-03 22:30:09 -04:00
acruikshank 5f95a92135 fix race (sort of) by increasing confidence 2020-06-03 22:18:38 -04:00
Jeromy cd817906b2 handle sourcing randomness from a future block 2020-06-03 18:30:43 -07:00
Jakub Sztandera 29dbc26dbd Update cli
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-04 01:01:41 +02:00
Łukasz Magiera b5674f12f0 Allow FinalizeSector on all nodes 2020-06-03 23:45:05 +02:00
Łukasz Magiera 1f5aa7fb7d Auto-retry failed finalize 2020-06-03 23:42:17 +02:00
acruikshank 04f0130530 remove timeout 2020-06-03 17:42:06 -04:00
vyzo f210a6e91a pubsub: set Dout parameter to 3 (from the default of 2)
we are using a higher D value than the default, so this can be safely increased.
2020-06-04 00:03:31 +03:00
vyzo aded0706be gomod: update go-libp2p@v0.9.3 and go-libp2p-pubsub@v0.3.2 2020-06-04 00:02:54 +03:00
Łukasz Magiera 7fc7221348 Use correct SealRandomnessLookbackLimit 2020-06-03 22:57:44 +02:00
Łukasz Magiera a39bc94c58 Integrate index locks into manager 2020-06-03 22:00:43 +02:00
acruikshank 57567db017 tidy 2020-06-03 15:51:11 -04:00
acruikshank 5574e4f11b add confidence and timeout to message wait 2020-06-03 15:38:37 -04:00
Łukasz Magiera d9d3ccf6c6 index: Implement basic global sector locking system 2020-06-03 21:21:27 +02:00
Aayush Rajasekaran 4b01b666f6 Bugfix: searchback for a message should stop if we reach sender nonce of 0 2020-06-03 14:08:05 -04:00
Łukasz Magiera 35740895ed Merge pull request #1899 from filecoin-project/feat/1827-lotus-daemon-stop-cmd
add (sub)commands which shut down lotus daemon and storage miner
2020-06-03 19:15:20 +02:00
Jakub Sztandera 4c5d84d106 Merge pull request #1904 from filecoin-project/feat/peer-scores
Add `lotus net scores` for pubsub score visibility
2020-06-03 18:04:16 +02:00
Jeromy a8915f0331 add a doc on amd vs intel cpus 2020-06-03 08:45:53 -07:00
Łukasz Magiera 1467fe4226 Fix tests 2020-06-03 12:50:56 +02:00
Jakub Sztandera 7f962e19c2 Fix lint
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-03 03:19:18 +02:00
Jakub Sztandera 186fd4da74 Add lotus net scores for pubsub score visibility
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-03 03:13:49 +02:00
Jeromy 2fdcf5347b reuse GetTipsetByHeight in GetRandomness 2020-06-02 17:35:23 -07:00
Jakub Sztandera 4a983995a8 Merge pull request #1901 from acruikshank/bugs/1893-chain-import-home-directory
Expand tilde before passing file name into chain import
2020-06-02 23:53:04 +02:00
Łukasz Magiera 222f3d876c Fix handling of re-precommit 2020-06-02 23:45:28 +02:00
Jakub Sztandera 263bdc9687 Merge pull request #1902 from filecoin-project/chore/merge-master
Merge in master into next
2020-06-02 23:23:41 +02:00
Jakub Sztandera 42c76aaebc Remove mod-download
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 23:11:17 +02:00
Jakub Sztandera 9326cb5411 Update golangci-lint, increase its timeout
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 23:07:48 +02:00
Jakub Sztandera 415b69155b Disable caches
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 23:02:37 +02:00
Jakub Sztandera 3423d29815 Prune go mod cache
Circle reports 1.9GB, should be closer to 300MB

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 22:54:29 +02:00
Jakub Sztandera 673a972fe9 Merge remote-tracking branch 'origin/master' into next
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 22:49:27 +02:00
acruikshank 1fd20b636b tidy 2020-06-02 16:48:50 -04:00
acruikshank d7a2556292 expand tilda before passing file name into chain import 2020-06-02 16:43:39 -04:00
Łukasz Magiera 9b92e145e7 Try to re-precommit on consecutive failed commit proof compute 2020-06-02 22:30:40 +02:00
Łukasz Magiera 8aa158d4e6 Merge pull request #1900 from filecoin-project/feat/subcall-timing-compute-state
add subcall timing to compute state output
2020-06-02 22:23:25 +02:00
Łukasz Magiera 3595b1f8e9 compute-state html: Add timing for internal executions 2020-06-02 22:06:03 +02:00
Jeromy 9b867a221a add subcall timing to compute state output 2020-06-02 12:53:24 -07:00
laser 46a016cdce name change, for consistency 2020-06-02 12:38:21 -07:00
laser bea9cd2fe2 rename to better convey intent + document 2020-06-02 12:35:11 -07:00
laser ee9d9a52a9 first take at a "lotus-storage-miner stop" command
Fixes #1827
2020-06-02 12:31:21 -07:00
laser 1e8a875edb shutdownChan instead of shutdownCh, for consistency 2020-06-02 12:31:01 -07:00
laser 36a93c90eb use a real ellipsis, kinda 2020-06-02 12:30:45 -07:00
laser 38d714a28a first take at "daemon stop" command
Fixes #1827

TODO: plumb the daemon-stopping into lotus-storage-miner, too
2020-06-02 12:29:58 -07:00
Whyrusleeping bbb954afc5 Merge pull request #1896 from filecoin-project/chore/lint-2
Fix even more lint warnings
2020-06-02 11:40:57 -07:00
Whyrusleeping de5d16eeac Merge pull request #1897 from filecoin-project/deps/update-json-rpc
update to fixed jsonrpc library
2020-06-02 11:36:31 -07:00
Jeromy 1968195da9 update to fixed jsonrpc library 2020-06-02 11:21:54 -07:00
Jakub Sztandera 22851df145 Undo change in events_test
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 18:46:43 +02:00
Jakub Sztandera 96ade5f2dd Cleanup more lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 18:38:41 +02:00
laser 5e727819ad stub the "daemon stop" command 2020-06-02 08:09:18 -07:00
Jakub Sztandera 5605aae269 Fix even more lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-06-02 16:29:39 +02:00
Łukasz Magiera c6b6c2990c Merge pull request #1888 from filecoin-project/feat/build-typ-version
Include build type in version
2020-06-01 21:18:30 +02:00
Łukasz Magiera a49dc90386 Fix version test 2020-06-01 21:11:37 +02:00
Łukasz Magiera 64f4e80446 Include build type in version 2020-06-01 20:49:39 +02:00
Łukasz Magiera e67253b6a8 Merge pull request #1887 from filecoin-project/feat/improve-datastore
fsrepo: Use LevelDB for metadata datastore
2020-06-01 20:21:15 +02:00
Łukasz Magiera c73326e96d fsrepo: Use LevelDB for metadata datastore 2020-06-01 20:13:07 +02:00
Łukasz Magiera 7003960fdd Merge remote-tracking branch 'origin/master' into next 2020-06-01 18:52:06 +02:00
Łukasz Magiera 0acc2a2a63 Merge pull request #1880 from filecoin-project/asr/minerfaults
Add an API method to list all faults occuring in a certain range
2020-06-01 18:47:09 +02:00
Łukasz Magiera 596f78f9e6 Merge pull request #1885 from filecoin-project/bugs/sector-size-usage-in-scripts
update scripts and docs to use human-readable sector size
2020-06-01 18:45:20 +02:00
Łukasz Magiera 17f1eec81f Merge pull request #1886 from filecoin-project/feat/1829-repo-already-locked
error message to tell user why repo is already locked
2020-06-01 18:43:05 +02:00
Łukasz Magiera f0d44ea396 Merge pull request #1884 from filecoin-project/feat/fountain-maddr-link
fountain/miner: Add a link to docs about creating owner address
2020-06-01 18:41:57 +02:00
Łukasz Magiera ad4712b593 Merge pull request #1873 from filecoin-project/feat/better-post-faults
wdpost: Better fault handling
2020-06-01 18:39:00 +02:00
laser 92b8d9ad17 tell user why repo is already locked
Fixes #1829
2020-06-01 09:37:10 -07:00
laser 12ff9fd76b update scripts and docs to use human-readable sector size
Commit #fa863595 modified various CLI commands to accept a 
human-readable sector size. We should update docs and scripts, too.
2020-06-01 09:20:44 -07:00
Łukasz Magiera e26cf4e003 fountain/miner: Add a link to docs about creating owner address 2020-06-01 17:49:15 +02:00
Łukasz Magiera b753cd4503 Run window post test on circle 2020-06-01 15:06:10 +02:00
Łukasz Magiera ee29a92021 Add a test for Window Post 2020-06-01 14:49:48 +02:00
Łukasz Magiera c3916e3a7f Merge pull request #1875 from filecoin-project/feat/check-verifreg-cmds
add commands to check individual balances for verifiers and clients
2020-06-01 13:00:08 +02:00
Aayush Rajasekaran ec0baefc48 Add an API method to list all faults occuring in a certain range 2020-05-31 00:57:52 -04:00
Jeromy bac1e3f901 put blocks in cache after get 2020-05-29 15:15:59 -07:00
Jeromy 94555ea8c1 delete block should delete from cache too 2020-05-29 15:13:18 -07:00
Jeromy cc233c6956 add an lru caching blockstore 2020-05-29 15:13:18 -07:00
Jeromy 2a3d79f055 add commands to check individual balances for verifiers and clients 2020-05-29 14:47:17 -07:00
Whyrusleeping 1c01799a4b Merge pull request #1855 from filecoin-project/feat/systemd-usage
Add systemd documention to table of contents
2020-05-29 14:07:09 -07:00
WhyrusleepingandJakub Sztandera 4ef330ba8b Update scripts/lotus-daemon.service
Co-authored-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-29 14:02:07 -07:00
Łukasz Magiera cd2bf04a6b wdpost: Better fault handling 2020-05-29 21:36:11 +02:00
Łukasz Magiera f7a71f4be7 Merge pull request #1837 from filecoin-project/feat/secstor-unseal
Update sector-storage with ReadPiece impl
2020-05-29 20:36:40 +02:00
Łukasz Magiera e5c24ff32b Update sector-storage with ReadPiece impl 2020-05-29 19:53:35 +02:00
Łukasz Magiera 9df0cdf193 Merge pull request #34 from filecoin-project/feat/unseal
Unseal support
2020-05-29 19:52:41 +02:00
Whyrusleeping f87054bde4 Merge pull request #1858 from hayeah/fix-miner-stale-tipset
Fix block production timing to avoid mining old tipset
2020-05-29 10:41:25 -07:00
Łukasz Magiera 9e7eb3feef Remove dead commented code 2020-05-29 19:40:49 +02:00
Łukasz Magiera 8b9dbc22e5 fr32: Fix tests 2020-05-29 19:06:44 +02:00
Łukasz Magiera 2184f21dd2 make unseal actually work in lotus 2020-05-29 18:57:44 +02:00
Łukasz Magiera e954cc0d67 Merge pull request #1872 from filecoin-project/asr/docs
Fix broken link
2020-05-29 18:44:00 +02:00
Aayush Rajasekaran 43c887f2b6 Fix broken link 2020-05-29 12:35:21 -04:00
Aayush Rajasekaran 1cf9b9a67f Merge pull request #1861 from filecoin-project/asr/printmoney
Correctly handle transfers with sender = receiver
2020-05-29 12:27:56 -04:00
Aayush Rajasekaran 7dd25c3ac5 Correctly handle transfers with sender = receiver 2020-05-29 12:15:41 -04:00
Jakub Sztandera 241c3fa673 Merge pull request #1869 from filecoin-project/feat/drand-pubsub
Add pubsub support to drand beacon
2020-05-29 18:06:38 +02:00
Łukasz Magiera 785eeb1eee Merge pull request #1850 from filecoin-project/chore/lint
Cleanup many lint warnings
2020-05-29 18:06:06 +02:00
Jakub Sztandera 30d82ba962 Explicity Watch for randomness
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-29 17:55:24 +02:00
Jakub Sztandera 002d021eb7 Enable HashMsgId
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-29 17:55:24 +02:00
Jakub Sztandera 71eb41b9aa Add pubsub support to drand beacon
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-29 17:55:17 +02:00
Łukasz Magiera 3b698db127 fr32: real PadWriter 2020-05-29 17:21:21 +02:00
Łukasz Magiera f06369166e Merge pull request #1868 from filecoin-project/feat/pond-regen-methods
pond: rerun method-gen
2020-05-29 15:14:20 +02:00
Łukasz Magiera 5129fed7c8 pond: rerun method-gen 2020-05-29 14:36:56 +02:00
Łukasz Magiera f06794ae84 Merge pull request #1856 from filecoin-project/deps/specs-actors-batch-porep
update specs actors to version with batch porep verification
2020-05-29 14:13:04 +02:00
Howard Yeh 1cabecedee Fix block production timing to avoid mining old tipset 2020-05-29 18:13:58 +08:00
Whyrusleeping f17c32c593 Merge pull request #1749 from filecoin-project/feat/shed-verifreg
add some commands for interacting with verified registry actor to lot…
2020-05-28 17:41:28 -07:00
Whyrusleeping b59f88324c Merge pull request #1865 from filecoin-project/fix/missing-err-check-stored-ask
Add missing err check in storage ask initialization
2020-05-28 17:17:50 -07:00
hannahhoward 0c4db8cf6b fix(storageminer): add missing err check
Missing an err check in storage miner initialization in the stored ask
2020-05-28 17:05:17 -07:00
Jeromy 9c020e54b5 Add more verifreg commands to list verifiers and clients 2020-05-28 17:01:01 -07:00
Jeromy 9811375d18 add some commands for interacting with verified registry actor to lotus-shed 2020-05-28 17:01:00 -07:00
Łukasz Magiera 2a70ff3cf3 wireup fr32 padding to the unsealed file 2020-05-29 01:33:00 +02:00
Łukasz Magiera 55867ab48b fr32: io.Reader utils 2020-05-29 00:17:29 +02:00
Whyrusleeping 2632621f7e Merge pull request #1862 from filecoin-project/mod-tidy/master
Mod-tidy on master
2020-05-28 14:52:00 -07:00
Jakub Sztandera d742efe165 Mod-tidy on master
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-28 23:50:29 +02:00
Jakub Sztandera 492ffac913 Merge pull request #1853 from shepf/master
update struct.go github url
2020-05-28 23:50:05 +02:00
Mike Greenberg 21415a9847 add chainwatch systemd svc config; make install-chainwatch-service 2020-05-28 16:53:00 -04:00
Mike Greenberg 4acf0c7ec0 install service files in suitable path; tweak lotus svc restarting 2020-05-28 16:26:07 -04:00
Aayush Rajasekaran fa69adf45c update chain-validation 2020-05-28 13:21:12 -07:00
Aayush Rajasekaran fa04da2995 Update specs-actors and storage-fsm 2020-05-28 13:19:36 -07:00
Jeromy e2a554c2e6 update specs actors to version with batch porep verification 2020-05-28 13:19:18 -07:00
Jeromy 91da81c8bc mod tidy 2020-05-28 13:17:55 -07:00
Jeromy 7bd18290db Merge branch 'master' into next 2020-05-28 13:16:47 -07:00
Jeromy 8e55c91cd2 check neq zero exit code 2020-05-28 22:11:49 +02:00
Mike Greenberg 514339e855 update systemd services; include make directives and docs for use 2020-05-28 22:11:49 +02:00
frrist 9f8ecb0ac4 update chain-validation
- has new syscalls
2020-05-28 22:11:49 +02:00
frrist be1bbe88b0 update chain-val syscalls interface 2020-05-28 22:11:49 +02:00
Łukasz Magiera f1ccbe496a cli: Trim spaces from token file 2020-05-28 22:11:49 +02:00
vyzo 495554e565 gomod: update go-libp2p-pubsub@v0.3.1 2020-05-28 22:11:49 +02:00
Ignacio Hagopian 17c378c18a fix
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-28 22:11:49 +02:00
Ignacio Hagopian 6e63ea6cce revert file
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-28 22:11:49 +02:00
Ignacio Hagopian 10753f14d0 retrieve: make fileref optional
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-28 22:11:49 +02:00
Ignacio Hagopian 0af7cd1448 allow using ipfs for retrieval
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-28 22:11:49 +02:00
Ignacio Hagopian de3edc2ec7 remote ipfs support & automatic env
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-28 22:11:49 +02:00
Whyrusleeping d0eb4278ae Merge pull request #1860 from filecoin-project/fix/recovery-exit-code-check
check neq zero exit code
2020-05-28 12:59:29 -07:00
Łukasz Magiera d38296a553 fr32: More testing 2020-05-28 19:49:25 +02:00
Łukasz Magiera 4db8351348 fr32 utils 2020-05-28 19:15:15 +02:00
Jeromy b807bdbea0 check neq zero exit code 2020-05-28 08:45:34 -07:00
Whyrusleeping cdada6e889 Merge pull request #23 from filecoin-project/feat/batch-verify-porep-handling
handle poreps being batch verified
2020-05-27 22:06:23 -07:00
Jeromy 4d4f8c1f9c handle poreps being batch verified 2020-05-27 17:10:50 -07:00
Mike Greenberg 386b818d16 add systemd documention to table of contents 2020-05-27 19:28:31 -04:00
Jakub Sztandera 8639409f74 go mod tidy
,
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-28 01:16:01 +02:00
Jakub Sztandera b372881e91 Fix more lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-28 01:15:19 +02:00
Whyrusleeping fc351d08b0 Merge pull request #1849 from filecoin-project/feat/remove-drand-on-miner
Remove drand on miner side, MinerGetBaseInfo provides the same info
2020-05-27 16:06:08 -07:00
shepf eb325e6814 update struct.go github url 2020-05-28 07:05:53 +08:00
Jakub Sztandera 7232e5481c Use origin/next for linting
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-28 00:49:52 +02:00
Jakub Sztandera f26a336afb Use git.base_revision
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-28 00:45:17 +02:00
Whyrusleeping 70e690dac0 Merge pull request #1852 from filecoin-project/feat/systemd-usage
Update systemd usage and docs
2020-05-27 15:23:45 -07:00
Mike Greenberg 78e0c96f22 update systemd services; include make directives and docs for use 2020-05-27 17:17:18 -04:00
Jakub Sztandera d6615b6286 Cleanup many lint warnings
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-27 22:53:20 +02:00
Whyrusleeping f49b328e17 Merge pull request #20 from filecoin-project/feat/pre-commit-wait-state
add a new state for precommit wait
2020-05-27 11:35:32 -07:00
Jakub Sztandera 4604b60fb1 Remove drand on miner side, MinerGetBaseInfo provides the same info
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-27 20:24:26 +02:00
Whyrusleeping 75041b96e4 Merge pull request #1815 from filecoin-project/frrist/new-chainval-syscalls
update chain-val syscalls interface
2020-05-27 11:00:16 -07:00
Whyrusleeping 8544bda14a Merge pull request #1846 from filecoin-project/feat/trim-token-file
cli: Trim spaces from token file
2020-05-27 10:58:09 -07:00
Whyrusleeping 745fba7d1f Merge pull request #1841 from filecoin-project/gomod/update-pubsub
Update go-libp2p-pubsub to v0.3.1
2020-05-27 10:50:19 -07:00
Łukasz Magiera 6986204657 Merge pull request #1848 from filecoin-project/feat/new-drand-client
Update go-log, reduce drand entry log level, add TAG env for dev scripts
2020-05-27 16:22:13 +02:00
Jakub Sztandera 3f9cde28fc Update go-log, reduce drand entry log level, add TAG env for dev scripts
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-27 16:19:21 +02:00
Jakub Sztandera aa682a377d Partially fix pond spawn
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-27 16:19:21 +02:00
Łukasz Magiera af1d54501f Merge pull request #1843 from jsign/jsign/2stackedprs
Allow remote IPFS node support & IPFS for data retrieval & automatic env wiring
2020-05-27 14:59:18 +02:00
Ignacio Hagopian 009cd92010 fix
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-27 09:50:32 -03:00
Łukasz Magiera 6386107b80 Merge pull request #1819 from filecoin-project/feat/new-drand-client
Switch to new drand client
2020-05-27 14:35:01 +02:00
Jakub Sztandera 218b2b82c1 Update drand chain info
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-27 14:09:04 +02:00
Jakub Sztandera b06b0147a9 Switch to new drand client
This is a preview of a change to new drand client.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-27 13:52:33 +02:00
Łukasz Magiera b74e8f5922 Merge pull request #1847 from waynewyang/Deadline-Index
fix: add deadline index for wdpost
2020-05-27 11:40:31 +02:00
waynewyang 94a7ef1c10 add deadline index for wdpost 2020-05-27 17:01:48 +08:00
Łukasz Magiera 02afd7d71f cli: Trim spaces from token file 2020-05-27 10:13:06 +02:00
Łukasz Magiera e3d3887a0b Address review 2020-05-26 21:08:51 +02:00
Ignacio Hagopian a10690359c revert file
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-26 15:35:20 -03:00
Łukasz Magiera fa4ff89dca Set devnet params 2020-05-26 19:58:09 +02:00
Ignacio Hagopian bcd84cbe9d retrieve: make fileref optional
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-26 14:52:52 -03:00
Ignacio Hagopian 61daaa774b allow using ipfs for retrieval
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-26 14:52:52 -03:00
Ignacio Hagopian d5346f8326 remote ipfs support & automatic env
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-26 14:52:51 -03:00
frrist 8ce6921b18 update chain-validation
- has new syscalls
2020-05-26 10:51:19 -07:00
frrist c8f28103f3 update chain-val syscalls interface 2020-05-26 10:49:39 -07:00
vyzo 3cd3785385 gomod: update go-libp2p-pubsub@v0.3.1 2020-05-26 20:47:00 +03:00
Łukasz Magiera 9089aadbbf Merge pull request #1821 from filecoin-project/deps/update-ffi
update to latest ffi
2020-05-26 19:34:02 +02:00
Łukasz Magiera 02ca1937f8 mod tidy 2020-05-26 19:07:21 +02:00
Łukasz Magiera ffaeb89347 Merge remote-tracking branch 'origin/master' into feat/unseal 2020-05-26 19:05:35 +02:00
Łukasz Magiera 8586b98c1a Merge pull request #40 from filecoin-project/deps/update-ffi
update to latest filecoin-ffi
2020-05-26 18:37:25 +02:00
Łukasz Magiera 9690e84722 mod tidy 2020-05-26 18:36:19 +02:00
Łukasz Magiera 65f04da920 mock: Update interface 2020-05-26 16:39:25 +02:00
Łukasz Magiera 6897110fe5 Merge pull request #1838 from waynewyang/wdpost-input-correct
Fix:the input sectors of wpost  must match with the minerActor
2020-05-26 15:00:58 +02:00
waynewyang b799af3e9a Fix:the input sectors of wpost must match with the minerActor 2020-05-26 17:58:20 +08:00
Łukasz Magiera 6fe92ff13c go fmt 2020-05-26 10:25:29 +02:00
Łukasz Magiera 793d332002 Move UnpaddedByteIndex from FFI wrapper 2020-05-26 10:25:17 +02:00
Łukasz Magiera e06cfd24cf mock: Update unseal method 2020-05-26 10:19:42 +02:00
Łukasz Magiera 9641d93615 Merge pull request #1836 from waynewyang/Wdpost-Gaslimit
Set largest gaslimit for wdpost
2020-05-26 08:53:59 +02:00
waynewyang da6768c94d Set largest gaslimit for wdpost 2020-05-26 11:43:17 +08:00
Lucas Molas 54a8b88d6c Merge pull request #1832 from filecoin-project/fix/disable-relay
Unconditionally disable relay
2020-05-25 10:38:48 -03:00
vyzo ba6217cc2c go mod tidy 2020-05-25 13:46:53 +03:00
vyzo 314da26da3 unconditionally disable relay 2020-05-25 13:39:50 +03:00
Jeromy 646800b8a8 update to latest ffi 2020-05-22 09:26:14 -07:00
Lucas Molas 92d58ab191 Merge pull request #1820 from filecoin-project/fix/sink-message-topic-deliveries
sink message topic deliveries
2020-05-22 11:33:43 -03:00
vyzo 5531f27798 sink the FirstMessageDeliveries boost for the messages topic 2020-05-22 17:25:56 +03:00
vyzo cc98117df2 log block validation time 2020-05-22 17:21:37 +03:00
Jeromy a59ca7536a update to latest filecoin-ffi 2020-05-21 18:19:46 -07:00
Whyrusleeping 83fd743db8 Merge pull request #21 from filecoin-project/deps/update-ffi
update to latest filecoin-ffi
2020-05-21 18:05:18 -07:00
Jeromy fad9412c04 update to latest filecoin-ffi 2020-05-21 18:03:34 -07:00
Whyrusleeping ffd340086e Merge pull request #1817 from filecoin-project/feat/sort-miners-by-deal-count
Add command to sort miners by deal counts
2020-05-21 16:06:44 -07:00
Jeromy 805686be2e Add command to sort miners by deal counts 2020-05-21 15:52:20 -07:00
Whyrusleeping 0d3f602d58 Merge pull request #1804 from filecoin-project/feat/seal-verify-shed
put a command for verifying seals into the shed
2020-05-21 10:07:19 -07:00
Whyrusleeping 83436842c5 Merge pull request #1802 from filecoin-project/feat/gfm-v0.2.7
Use latest go-fil-markets
2020-05-21 10:05:54 -07:00
Whyrusleeping bafb922ff7 Merge pull request #1811 from filecoin-project/feat/update-pubsub
Update pubsub and libp2p
2020-05-21 09:51:00 -07:00
Jeromy 6e024d9994 parse ticket and seal randomness flags 2020-05-21 08:26:32 -07:00
vyzo d597c3fb0d increase OpportunisticGraftThreshold to 5 2020-05-21 14:38:11 +03:00
vyzo 24cebb8b2f gomod: update go-libp2p@v0.9.2 2020-05-21 12:13:14 +03:00
vyzo 0cc8446a79 configure Dout=0 for bootstrappers, turn off Mesh Failure Penalty for messages as well 2020-05-21 12:11:22 +03:00
vyzo 3e383d909a gomod: update go-libp2p-pubsub@v0.3.0 2020-05-21 12:08:13 +03:00
hannahhoward 3264a9faad feat(deps): update to latest go-fil-markets
update to go-fil-markets v0.2.7 with latest changes, modify constructors as needed to accomodate new
DS Prefix customization
2020-05-20 16:01:03 -07:00
hannahhoward c52b75d59e fix(deps): update to new 0.2.7 2020-05-20 16:00:03 -07:00
shannonwells 652c257763 passing w/ new namespace wraps 2020-05-20 15:58:59 -07:00
shannonwells 060f23d748 mod tidy 2020-05-20 15:56:58 -07:00
shannonwells e68ab286f6 upgrade lotus to go-fil-markets v0.2.5 2020-05-20 15:56:58 -07:00
Jeromy 92e5cc5ad7 add args usage 2020-05-20 15:28:19 -07:00
Łukasz Magiera 8898eb8206 Merge remote-tracking branch 'origin/master' into feat/unseal 2020-05-20 22:29:05 +02:00
Łukasz Magiera 6831ca9e03 Merge pull request #1808 from filecoin-project/feat/extract-jsonrpc-auth
Extract auth utils to go-jsonrpc
2020-05-20 22:22:53 +02:00
Łukasz Magiera f7325a69c1 Extract auth utils to go-jsonrpc 2020-05-20 20:37:45 +02:00
Łukasz Magiera bb78292faf Merge pull request #1807 from filecoin-project/feat/extract-jsonrpc
Extract lib/jsonrpc to go-jsonrpc
2020-05-20 19:58:50 +02:00
Łukasz Magiera eeca031525 extract lib/jsonrpc to go-jsonrpc 2020-05-20 19:49:09 +02:00
Jeromy f82e0e61e1 put a command for verifying seals into the shed 2020-05-20 10:10:35 -07:00
Łukasz Magiera 75e47db520 Merge pull request #1771 from filecoin-project/feat/post-recover
post: Handle Recovering sectors
2020-05-20 19:08:09 +02:00
Łukasz Magiera 3da1a0d8cc post: Declare recoveries for the next deadline 2020-05-20 19:07:31 +02:00
Travis Person a293bd798f init map 2020-05-20 18:41:22 +02:00
Łukasz Magiera ae60001dcc post: Handle Recovering sectors 2020-05-20 18:41:20 +02:00
Łukasz Magiera 33673a30c7 Wire up unsealing logic, track primary sector copies 2020-05-20 18:36:46 +02:00
Łukasz Magiera 21f02924c1 Merge pull request #39 from jsign/jsign/ffx
mock: produce more valid PoSt proof
2020-05-20 16:30:55 +02:00
Ignacio Hagopian 806f7b33aa produce more valid post proof
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-20 11:16:45 -03:00
Łukasz Magiera cea7c41023 Merge pull request #1761 from dtynn/fix/dtynn/use_abs_path_for_client_filestore
use abs path to construct FileManager
2020-05-20 12:49:53 +02:00
Łukasz Magiera 0fe7a0b2e3 Merge pull request #1764 from filecoin-project/feat/has-cache-bs
add blockstore 'Has' caching
2020-05-20 12:48:50 +02:00
Łukasz Magiera 267368d56c Merge pull request #1767 from filecoin-project/feat/html-trace-improvements
add tipset key and height to html trace output
2020-05-20 12:48:05 +02:00
Łukasz Magiera f5451ad455 Merge pull request #1795 from shannon-6block/master
Pset represents the proving sectors, and Sset repensents all sectors
2020-05-20 12:46:22 +02:00
Łukasz Magiera 555537c528 Merge pull request #1791 from filecoin-project/feat/api-gen-2
improving the autogenerated api docs
2020-05-20 12:40:49 +02:00
shannon cc5875c6bd Pset represents the proving sectors, and Sset repensents all sectors 2020-05-20 12:12:13 +08:00
Whyrusleeping ca37a9086f Merge pull request #38 from jsign/jsign/postfake
mock: add faked post
2020-05-19 17:50:31 -07:00
Ignacio Hagopian f9e495ac49 mock: add faked post
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-05-19 21:27:21 -03:00
Jeromy c54d050cb7 slightly better methodgroup parsing, and more group docs 2020-05-19 09:49:47 -07:00
Łukasz Magiera 8f70192bf3 Missing stuff 2020-05-19 18:11:56 +02:00
Łukasz Magiera 05bc399afc Update testworker 2020-05-19 18:09:48 +02:00
Jeromy cb88237305 improving the autogenerated api docs 2020-05-19 08:48:58 -07:00
Whyrusleeping cc44167f2c Merge pull request #1564 from filecoin-project/feat/api-doc-gen
working on api documentation autogeneration
2020-05-18 19:24:31 -07:00
Whyrusleeping 78c656e4c1 Merge pull request #1788 from filecoin-project/asr/issuetemplate
Create an issue template for mining issues
2020-05-18 17:27:55 -07:00
Jeromy 607bcc401c very basic api documentation autogeneration 2020-05-18 17:20:54 -07:00
Whyrusleeping 7fd481ea6f Merge pull request #1766 from filecoin-project/feat/chain-get-decoders
Feat/chain get decoders
2020-05-18 16:06:41 -07:00
Whyrusleeping 9c91daf19a Merge pull request #1787 from filecoin-project/fix/dont-mine-below-min
having power below the minimum means not having power
2020-05-18 16:05:06 -07:00
Łukasz Magiera 78c0b8f985 ffiwrapper: Test unsealing 2020-05-19 01:03:49 +02:00
Jeromy 06bcde9c2d add a new state for precommit wait 2020-05-18 15:49:21 -07:00
Aayush Rajasekaran c1ef9d1731 Create an issue template for mining issues 2020-05-18 18:31:53 -04:00
Łukasz Magiera 86f3c0916e ffiwrapper: UnsealPiece 2020-05-19 00:08:11 +02:00
Jeromy eaf69b160c having power below the minimum means not having power 2020-05-18 14:51:42 -07:00
Łukasz Magiera 269286e587 Merge pull request #1785 from filecoin-project/frrist/chain-val-update
update chain-validation
2020-05-18 23:49:11 +02:00
Łukasz Magiera f99c5416ce Merge pull request #1786 from filecoin-project/asr/clideal
Prevent client list-deals from crashing
2020-05-18 23:48:33 +02:00
Aayush Rajasekaran 8f6c3c2cc7 prevent client list-deals from crashing 2020-05-18 17:44:00 -04:00
frrist a2e25897e9 go mod tidy 2020-05-18 14:35:47 -07:00
frrist fc9e046ca7 update chain-validation 2020-05-18 12:50:36 -07:00
Travis Person 5730d46179 Merge pull request #1728 from filecoin-project/frrist/vm-transfer-exitcodes
return correct exit codes from vm transfer
2020-05-18 19:28:48 +00:00
frrist 9165f14693 feedback: fatal errors in vm.transfer 2020-05-18 12:00:52 -07:00
frrist 9305eca97c don't ignore transfer error in delete actor 2020-05-18 12:00:52 -07:00
frrist 0c2e4e2d4f return correct exitcodes from vm transfer 2020-05-18 12:00:52 -07:00
Łukasz Magiera 59725b3af3 Merge pull request #1784 from filecoin-project/feat/update-serialization-vectors
update serialization vectors
2020-05-18 20:34:44 +02:00
Whyrusleeping a0ab3483ed Merge pull request #1770 from filecoin-project/asr/test
Add an interop test for block header serialisation
2020-05-18 11:28:06 -07:00
Jeromy e6f3b79b23 update serialization vectors 2020-05-18 11:02:34 -07:00
Whyrusleeping 1ed6183344 Merge pull request #1782 from filecoin-project/fix/no-metrics-drand
Change drand to one without metrics
2020-05-18 10:24:15 -07:00
Jakub Sztandera 29b1ac964b mod tidy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-18 19:09:19 +02:00
Jakub Sztandera 8d637c515a Change drand to one without metrics
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-05-18 19:00:30 +02:00
Łukasz Magiera a9631587f0 Merge pull request #33 from filecoin-project/feat/sched-sequential-ids
sched: Take sector numbers into accout when scheduling work
2020-05-18 15:31:36 +02:00
Łukasz Magiera f577c2120c Partial Files, use for sealing 2020-05-18 15:22:35 +02:00
Aayush Rajasekaran 5220a61fc5 Add an interop test for block header serialisation 2020-05-16 17:27:04 -04:00
Łukasz Magiera e620df4c43 Merge pull request #37 from filecoin-project/feat/veryverysimplefaultchecks
Very simple fault check function
2020-05-16 23:22:31 +02:00
Łukasz Magiera 450b0b8acb very simple fault check function 2020-05-16 23:08:24 +02:00
Jeromy d9502693f0 add tipset key and height to html trace output 2020-05-16 12:53:51 -07:00
Whyrusleeping 9a0d0511c7 Merge pull request #1765 from filecoin-project/fix/miner-info-div-zero
avoid dividing by zero if pset is empty
2020-05-16 12:48:53 -07:00
Jeromy 72eb32ae3c add additional chain get decoders 2020-05-16 12:41:04 -07:00
Jeromy cf9e576028 avoid dividing by zero if pset is empty 2020-05-16 11:35:24 -07:00
Jeromy 9804bd3c4c add blockstore 'Has' caching 2020-05-16 11:31:14 -07:00
dtynn 30e2642f4d use abs path to construct FileManager 2020-05-16 09:36:38 +08:00
Łukasz Magiera 4065c94c1f Scaffolding for UnsealRange 2020-05-16 01:10:04 +02:00
Whyrusleeping 54b3eafd6d Merge pull request #1758 from filecoin-project/fix/lotus-bench-secp
register secp signatures for lotus bench usage
2020-05-15 13:05:27 -07:00
Jeromy f6589407c1 register secp signatures for lotus bench usage 2020-05-15 13:01:45 -07:00
Łukasz Magiera 5c73602d24 Merge pull request #1757 from filecoin-project/feat/faster-mpool-add
cache signatures, and dont check them in a lock
2020-05-15 20:27:31 +02:00
Whyrusleeping 70657e35ba Merge pull request #1708 from filecoin-project/feat/block-validator
Improved pubsub block validator
2020-05-15 11:26:26 -07:00
Łukasz Magiera 920c43f589 Merge pull request #36 from filecoin-project/fix/less-commit2-mem
resources: relax memory requirements for commit2
2020-05-15 20:17:56 +02:00
Łukasz Magiera 908053015b Merge pull request #1753 from filecoin-project/feat/less-res-comm2
Update sector-storage with relaxed commit2 resource numbers
2020-05-15 20:17:41 +02:00
Whyrusleeping 8bae22ef61 Merge pull request #1746 from filecoin-project/bug/circleci-mac
install jq in /usr/local/bin
2020-05-15 11:17:12 -07:00
Łukasz Magiera 1012a64110 Merge pull request #1756 from filecoin-project/feat/ffi-88555ec98
Update FFI
2020-05-15 20:16:27 +02:00
Łukasz Magiera 9eb2399539 Merge pull request #1754 from filecoin-project/fix/initial-pledge
state: Calculate slightly larger initial pledge
2020-05-15 20:15:36 +02:00
Ignacio Corderi 744fc321e9 Merge pull request #19 from filecoin-project/icorderi/18
feat: Remove unused deal state from api.StateMarketStorageDeal signature

This is a breaking change on the SealingAPI
The StateMarketStorageDeal method now returns a tuple instead of a triple.

Fixes #18
2020-05-15 15:10:31 -03:00
Łukasz Magiera d539be4875 Merge pull request #1741 from filecoin-project/fix/json-out-chan-closing
properly select channel ID to close for handleOutChans
2020-05-15 20:10:10 +02:00
Jeromy 13fc3f2f54 remove stress test (not really a real test) 2020-05-15 11:00:13 -07:00
Jeromy 33ec4d332b cache signatures, and dont check them in a lock 2020-05-15 10:56:38 -07:00
Whyrusleeping d6bb0500df Merge pull request #1752 from filecoin-project/fix/mpool-slowness
miner: Optimize SelectMessages
2020-05-15 10:48:06 -07:00
Łukasz Magiera b90666b293 miner: optimize SelectMessages 2020-05-15 19:30:31 +02:00
Łukasz Magiera 173a72f374 Merge pull request #1755 from filecoin-project/fix/cw-tkt-crash
chainwatch: Don't crash with nil ticket
2020-05-15 19:17:45 +02:00
Łukasz Magiera 0ae0e89ddd Update FFI 2020-05-15 19:16:06 +02:00
Łukasz Magiera c4d01c04a4 chainwatch: don't crash with nil ticket 2020-05-15 19:06:52 +02:00
Łukasz Magiera 0b56ca3c21 Merge pull request #1751 from filecoin-project/fix/turnoff-block-mesh-penalty
Turn off Mesh Delivery Failure penalty
2020-05-15 19:02:46 +02:00
Ignacio Corderi e2150fd66e feat: remove unused return argument from storage deal
This is a breaking change on the `SealingAPI`
- The `StateMarketStorageDeal` method now returns a tuple instead of a triple.
2020-05-15 13:31:32 -03:00
Łukasz Magiera 022348f426 state: Calculate slightly larger initial pledge 2020-05-15 16:53:35 +02:00
Łukasz Magiera ad108d6051 Update sector-storage with relaxed commit2 resource numbers 2020-05-15 16:00:14 +02:00
Łukasz Magiera 20817dc51d resources: relax memory requirements for commit2 2020-05-15 14:33:04 +02:00
vyzo dbe2a1e2cd turn off Mesh Delivery Failure penalty 2020-05-15 12:50:20 +03:00
Aayush Rajasekaran f86a2ced06 Merge pull request #1747 from filecoin-project/asr/docs
Fix 3 typos
2020-05-14 18:34:59 -04:00
Aayush Rajasekaran f7a45f6c12 Fix 3 typos 2020-05-14 18:27:47 -04:00
ognots 658f78d75f install jq in /usr/local/bin
/home/ognots/.bin not in path, causing macos test to fail
2020-05-14 17:32:05 -04:00
Aayush Rajasekaran e9eaee6ef8 Merge pull request #1745 from filecoin-project/asr/docs
Docs finishing touches
2020-05-14 17:08:33 -04:00
Aayush Rajasekaran 505e30c7b2 Docs finishing touches 2020-05-14 16:27:20 -04:00
Jeromy edae6a3ae8 fix the problem 2020-05-14 12:05:01 -07:00
Jeromy 987571dd8c add test to demonstrate failure 2020-05-14 11:48:58 -07:00
vyzo 81bc159b3e cache successful block signature validation 2020-05-14 20:48:40 +03:00
vyzo 50e05ae1ba use sigs.CheckBlockSignature 2020-05-14 20:48:40 +03:00
vyzo 432c69c616 update message validator to provide rejection signal 2020-05-14 20:48:40 +03:00
vyzo e714294273 initialize map 2020-05-14 20:48:19 +03:00
vyzo c3a144bcb6 flesh out signature validation logic 2020-05-14 20:48:19 +03:00
vyzo dd86a289ce cache miner worker keys 2020-05-14 20:48:19 +03:00
vyzo 6e0dac06f4 utility to retrieve miner worker key from the chain 2020-05-14 20:48:19 +03:00
vyzo 5bd0e92068 remove source flagging from bogus CID blocks
it's ineffective.
2020-05-14 20:48:19 +03:00
vyzo b032d3524b configure behaviour penalty for gsv1.1 2020-05-14 20:48:19 +03:00
vyzo 6933df918a gomod: update go-libp2p-pubsub@master 2020-05-14 20:45:25 +03:00
Łukasz Magiera 617d34b9de sched: Take sector numbers into accout when scheduling work 2020-05-14 01:58:01 +02:00
Łukasz Magiera 4051533cc4 Merge pull request #32 from filecoin-project/fix/pc1-fail-cleanup
Cleanup before retrying precommit1
2020-05-13 20:52:32 +02:00
Łukasz Magiera 2bc21be319 Cleanup before retrying precommit1 2020-05-13 20:45:14 +02:00
Łukasz Magiera ebc27d314b Merge pull request #31 from filecoin-project/feat/64g
Add entries for 64G sectors
2020-05-09 02:51:26 +02:00
Łukasz Magiera 845502f522 Add entries for 64G sectors 2020-05-09 02:50:08 +02:00
Łukasz Magiera 4980cb4c92 Merge pull request #16 from filecoin-project/feat/v26-parameters
use v26 parameters + update sector-storage to drop lotus transitive dep
2020-05-08 23:23:39 +02:00
laser b565215d58 update sector-storage + go mod tidy 2020-05-08 14:14:41 -07:00
laser 32d092b293 v26 groth parameters 2020-05-08 14:13:37 -07:00
Łukasz Magiera a74812ba12 Merge pull request #30 from filecoin-project/feat/v26-proofs
update filecoin-ffi (and related) to v26 proofs
2020-05-08 22:34:01 +02:00
laser b24920c606 update to v26 proofs 2020-05-08 13:08:02 -07:00
Łukasz Magiera c395e40963 Merge pull request #29 from filecoin-project/feat/heartbeat
Improve storage selection logic
2020-05-08 21:24:01 +02:00
Łukasz Magiera 164e2214c3 Merge pull request #28 from filecoin-project/feat/basic-tests
Add some basic tests
2020-05-08 20:27:19 +02:00
Łukasz Magiera 170cc0e275 Add some basic tests 2020-05-08 20:01:42 +02:00
Łukasz Magiera e721b8910c stores: use heartbeat info in selecting alloc storage 2020-05-08 19:02:18 +02:00
Łukasz Magiera fc637552b7 stores: Simple health reporting 2020-05-08 18:08:48 +02:00
Łukasz Magiera 8c47b13d9e Merge pull request #27 from filecoin-project/fix/unseal
Fix unseal; some improvements
2020-05-08 02:05:08 +02:00
Łukasz Magiera ced1d6e087 Priority queue for tasks 2020-05-08 02:03:21 +02:00
Łukasz Magiera 1bbfb7cffd Fix ffiwrapper unseal 2020-05-08 00:23:07 +02:00
Łukasz Magiera 10f7750d80 v26 resource table 2020-05-08 00:22:37 +02:00
Łukasz Magiera e4a9a16161 Merge pull request #24 from filecoin-project/feat/worker-closing
sched: Handle closing workers better
2020-05-01 20:11:53 +02:00
Łukasz Magiera 780596477c gofmt 2020-05-01 20:04:21 +02:00
Łukasz Magiera cb0bb31d06 sched: Handle closing workers 2020-05-01 20:00:17 +02:00
Erin Swenson-Healey a03f325ffa Merge pull request #23 from filecoin-project/bugs/remove-lotus-dependency
remove lotus from dependency graph
2020-05-01 09:36:38 -07:00
laser a4ee6e27b9 ignore unused field 2020-05-01 09:31:34 -07:00
laser 593d2fce21 ignore build artifacts 2020-05-01 09:18:57 -07:00
laser f0569bd3c4 remove lotus from dependency graph 2020-05-01 09:18:00 -07:00
Łukasz Magiera 1da6937a0f sched: Try scheduling on newly connected workers 2020-05-01 17:29:27 +02:00
Łukasz Magiera 83b1b94034 Merge pull request #20 from filecoin-project/feat/overallocate
Refactor scheduling logic
2020-04-29 20:06:15 +02:00
Łukasz Magiera 7f1c9c89e7 remote store: Handle parallel fetches 2020-04-29 17:58:55 +02:00
Łukasz Magiera dd23715942 sched: add missing check for non-multicore thread availability 2020-04-29 17:04:40 +02:00
Łukasz Magiera 38cf04b888 sched: prefer workers with lower utilization 2020-04-29 16:04:05 +02:00
Łukasz Magiera 9777ddd2b7 stores: nicer error when sector was lost 2020-04-29 16:03:44 +02:00
Łukasz Magiera a0af4d4d2b index: hold rlock in StorageList 2020-04-29 14:13:21 +02:00
Łukasz Magiera e970fa09b0 Merge pull request #21 from filecoin-project/anorth/specs-actors
Upgrade to specs-actors v0.3.0
2020-04-29 10:21:30 +02:00
anorth 5ab39592cf Upgrade to specs-actors v0.3.0 2020-04-29 13:36:31 +10:00
Łukasz Magiera 5f1a27d52b sched: Address review 2020-04-28 12:34:07 +02:00
Łukasz Magiera d57877af31 sched: Fix error handling in assignWorker 2020-04-27 22:59:17 +02:00
Łukasz Magiera d399312786 sched: virtual resource pool for prefetching sector data 2020-04-27 22:50:30 +02:00
Łukasz Magiera 8c4dc60e75 move scheduling logic to a separate struct 2020-04-27 20:37:36 +02:00
Łukasz Magiera 01487d5ad3 Merge pull request #14 from filecoin-project/anorth/specs-actors
Upgrade to specs-actors v0.2.0
2020-04-27 20:20:14 +02:00
Łukasz Magiera 5bea676ce3 worker: Fetch task type 2020-04-27 14:55:37 +02:00
Łukasz Magiera f59d6b971b sched: Nicer handling of multicore tasks 2020-04-27 14:38:24 +02:00
Łukasz Magiera 2ef195583f Add Makefile 2020-04-27 13:43:59 +02:00
Łukasz Magiera c19a254498 Merge pull request #19 from filecoin-project/anorth/specs-actors
Upgrade to specs-actors v0.2.0
2020-04-25 12:23:15 +02:00
anorth 14256e22d3 Upgrade to specs-actors v0.2.0 2020-04-25 12:37:12 +10:00
anorth 368d07ad9c Upgrade to specs-actors v0.2.0 2020-04-25 12:32:51 +10:00
Łukasz Magiera 9404c859cb Merge pull request #18 from filecoin-project/feat/no-ffi-workerinfo
Move WorkerInfo to not require importing ffi
2020-04-24 00:23:24 +02:00
Łukasz Magiera 9eb049a833 move WorkerInfo to not require importing ffi 2020-04-24 00:20:53 +02:00
Whyrusleeping ec2b62c042 Merge pull request #12 from filecoin-project/feat/commit-collateral
Set pledge collateral in commit message
2020-04-23 09:17:48 -07:00
Łukasz Magiera f3bea4aa8b Set pledge collateral in commit message 2020-04-23 13:42:51 +02:00
Łukasz Magiera 1283a89a95 Merge pull request #11 from filecoin-project/anorth/tickets
Compute seal ticket internally, remove node ticket fn
2020-04-23 13:18:48 +02:00
anorth 29460c440d Compute seal ticket internally, remove node ticket fn 2020-04-23 10:13:02 +10:00
Łukasz Magiera 5963a2c82e Merge pull request #9 from filecoin-project/anorth/specs-actors
Update to specs-actors v1.0.0
2020-04-22 11:15:33 +02:00
Łukasz Magiera 6a3320b113 Merge pull request #16 from damonlau27/master
prefer remote worker
2020-04-22 10:51:39 +02:00
Łukasz Magiera 9230b22ea4 Merge pull request #15 from filecoin-project/anorth/specs-actors
Update to specs-actors v1.0.0
2020-04-22 10:48:02 +02:00
damonlau27 c1888035ac prefer remote worker 2020-04-22 16:18:02 +08:00
anorth f784a9098f Update to specs-actors v1.0.0 2020-04-22 15:51:19 +10:00
anorth a875473670 Update to specs-actors v1.0.0 2020-04-22 15:49:28 +10:00
Łukasz Magiera 1515cffb5d Merge pull request #8 from filecoin-project/fix/rand-entropy
Add correct entropy to randomness
2020-04-20 20:32:20 +02:00
Łukasz Magiera 7da71113a7 Add correct entropy to randomness 2020-04-20 20:21:11 +02:00
Łukasz Magiera e75536581a Merge pull request #12 from filecoin-project/fix/mock-winpost
mock: fix winning post challenge generation
2020-04-18 00:54:59 +02:00
Łukasz Magiera 16d40dfd15 mock: fix winning post 2020-04-18 00:52:42 +02:00
Łukasz Magiera 2dd3cc4875 Merge pull request #11 from filecoin-project/feat/separate-genwinchg
Move GenerateWinningPoStSectorChallenge to Verifier
2020-04-17 22:46:21 +02:00
Łukasz Magiera 9209a5f186 Merge pull request #6 from filecoin-project/feat/update-actors
Update specs-actors, windowed post updates
2020-04-17 22:45:56 +02:00
Łukasz Magiera fda71dbf53 Fix tests 2020-04-17 22:16:52 +02:00
Łukasz Magiera f2744cf099 policy: Round up expiration to nearest ProvingPeriod 2020-04-17 21:47:44 +02:00
Łukasz Magiera 6850784b1e Move GenerateWinningPoStSectorChallenge to Verifier 2020-04-17 16:00:21 +02:00
Łukasz Magiera afc45d4b6e mod tidy 2020-04-15 20:00:41 +02:00
Łukasz Magiera c19538f834 Update specs-actors 2020-04-15 20:00:29 +02:00
Łukasz Magiera 069c3b2468 Merge pull request #5 from filecoin-project/feat/v25
Update to v25 proof parameters
2020-04-13 22:09:47 +02:00
Łukasz Magiera 26b8ff722d Update Deps 2020-04-13 22:00:04 +02:00
Whyrusleeping 61616264b1 Merge pull request #10 from filecoin-project/feat/v25
Update proofs to v25 parameters, win PoSt
2020-04-10 17:02:42 -07:00
Łukasz Magiera 9d548f7432 Use FFI master 2020-04-11 01:28:57 +02:00
Łukasz Magiera 4c010a03af Update Deps 2020-04-10 23:16:48 +02:00
Łukasz Magiera 92e77fbba5 Update FFI 2020-04-10 23:12:11 +02:00
Łukasz Magiera c0d619cd86 gofmt 2020-04-10 23:01:42 +02:00
Łukasz Magiera cd464ef916 Drop SectorSizeForRegisteredProof 2020-04-10 23:01:35 +02:00
Łukasz Magiera 65efbfce12 Fix tests with v25 params 2020-04-10 21:13:47 +02:00
Łukasz Magiera e854090bdd v25 2020-04-10 20:46:53 +02:00
Łukasz Magiera 8fc0fd3221 Merge pull request #4 from filecoin-project/feat/dynamic-worker-address
we should always load worker address from the chain
2020-04-09 20:49:38 +02:00
laser 7b387ba4b2 fix error message 2020-04-09 10:46:44 -07:00
laser 5f3a3c76dd we should always load worker address from the chain 2020-04-09 10:34:07 -07:00
Erin Swenson-Healey 1c35692235 Merge pull request #3 from filecoin-project/feat/pre-commit-expiration-policy
initialize FSM with pre-commit expiry policy
2020-04-08 08:39:57 -07:00
laser f2649af5a1 rename pdi ("peace with deal info") -> p ("piece") 2020-04-08 07:56:35 -07:00
laser 1dfca2ff76 drop unused method brought in via rebase 2020-04-08 07:52:47 -07:00
laser 0cd4e0413f renaming PieceWithOptionalDealInfo -> Piece, drop PieceWithDealInfo 2020-04-08 07:52:20 -07:00
laser 5f3990d1bc remove unused, intermediate literal 2020-04-08 07:39:47 -07:00
laser c9dd3b3238 fix typo ("of" instead of "or") 2020-04-08 07:39:47 -07:00
laser 1f1e291cd1 use pre-commit policy to set pre-commit sector expiry epoch 2020-04-08 07:39:47 -07:00
laser de07fe8aaf persist deal schedule to piece data for pre-commit sector expiry 2020-04-08 07:39:47 -07:00
Erin Swenson-Healey 5326cb55b3 Merge pull request #2 from filecoin-project/feat/ticket-fn-takes-token
ticket-acquiring function takes tipset identifier
2020-04-08 07:39:38 -07:00
laser 55e54593cc fix(ticketfn): getting a ticket should take tipset identifier 2020-04-07 13:26:43 -07:00
laser 7c7b9b6a63 remove now-unused ChainReadObj 2020-04-07 13:20:52 -07:00
Łukasz Magiera 25993479b1 Merge pull request #1 from filecoin-project/feat/extract-lotus-goodies
extract "sealing" package into storage-fsm project
2020-04-07 18:32:48 +02:00
laser 32cf7ec677 need parameters.json for vk and groth parameter downloading (circleci) 2020-04-06 17:40:12 -07:00
laser d4d58047b0 add licenses and basic readme scaffolding 2020-04-06 17:38:48 -07:00
laser 8f682303ca configure CI, move types around, prepare for consumption by lotus 2020-04-06 17:29:52 -07:00
laser 52afe582e1 Merge branch 'testnet/3' of /tmp/lotus into feat/extract-lotus-goodies 2020-04-06 16:20:09 -07:00
Erin Swenson-Healey a2933084ca Initial commit 2020-04-06 16:16:49 -07:00
laser 8006f12dea SectorID -> SectorNumber 2020-04-06 15:31:33 -07:00
laser b7be24d775 revert name change 2020-04-06 14:05:26 -07:00
laser 0fc5ebf5b1 update CBOR encoders/decoders 2020-04-06 13:35:29 -07:00
laser b592a67892 move to types 2020-04-06 13:31:49 -07:00
laser f2cce14390 reorder imports 2020-04-06 13:27:14 -07:00
laser 70615df273 miscellaneous fixes post-rebase 2020-04-06 13:23:37 -07:00
laser 9b29210dce remove all lotus types from sealing package in preparation for extraction
events adapter

implement StateWaitMsg and StateComputeDataCommitment

implement StateGetSectorPreCommitOnChainInfo

implement ChainHead and SendMsg

implement remaining methods
2020-04-06 12:57:55 -07:00
Łukasz Magiera a6d0938385 Merge pull request #9 from filecoin-project/docs/architecture
readme: Add a section about architecture
2020-04-06 21:50:14 +02:00
Łukasz Magiera 0bc12be059 readme: Add a section about architecture 2020-04-06 21:44:45 +02:00
Łukasz Magiera c29cb87d2f fsm: Get correct interactive randomness if it lands on a nullblock 2020-04-04 04:57:05 +02:00
Łukasz Magiera dcfd0943d5 fsm: Handle invalid Commits 2020-04-04 03:50:05 +02:00
Łukasz Magiera 25bd37364c fsm: Update cbor-gen 2020-04-03 21:34:20 +02:00
Łukasz Magiera 4a6c5c25b0 fsm: Implement handlers for Commit errors 2020-04-03 19:45:48 +02:00
Łukasz Magiera 8c824dfaf7 sealing fsm: Separate precommit 1/2 2020-04-03 18:54:15 +02:00
Łukasz Magiera 5977db8833 fsm: Fix tests after changisg SectorState to a string 2020-04-03 18:36:48 +02:00
Łukasz Magiera abb433aa42 Change api.SectorState to a string 2020-04-03 18:29:31 +02:00
Łukasz Magiera 2c98869d96 Merge pull request #7 from filecoin-project/chores/address-pr-nit
bit shift 2 instead of 1 as per PR feedback
2020-04-02 01:56:33 +02:00
Łukasz Magiera 0cf0240cb5 Merge pull request #8 from filecoin-project/chores/add-various-docs
add README + basic CircleCI configuration
2020-04-02 01:55:41 +02:00
laser 9339232946 shift by multiple of 10 2020-04-01 16:26:47 -07:00
laser b17b226220 one line gofmt 2020-04-01 16:22:32 -07:00
laser 431a15c14a nolint the existing linting errors 2020-04-01 16:18:20 -07:00
laser ffc966a9ad fix gofmt issue which ci caught 2020-04-01 16:14:04 -07:00
laser 58922b7e76 golangci-lint needs libfilcrypto 2020-04-01 16:13:20 -07:00
laser 5874d90719 ensure submodules are initialized 2020-04-01 16:11:32 -07:00
laser c694853ddb ci: check out code before running linters 2020-04-01 16:08:59 -07:00
laser fdc2e4a67a ci: run tests on build 2020-04-01 16:07:34 -07:00
laser fcaaae705d circleci: add shell config
- download groth parameters and keys
- perform go mod tidy check
2020-04-01 15:51:50 -07:00
laser ba291a9254 add CircleCI badge 2020-04-01 15:20:17 -07:00
laser feb97789c5 add README.md 2020-04-01 15:14:08 -07:00
laser c99952d8cd shift 2 2020-04-01 14:24:09 -07:00
Erin Swenson-Healey 7c07e3406e Merge pull request #6 from filecoin-project/feat/relax-testing-sector-constraints
loosen constraints on 8MiB and 2KiB sectors (for testing)
2020-04-01 12:09:56 -07:00
laser 0730ece757 loosen constraints on 8MiB and 2KiB sectors (for testing) 2020-04-01 11:56:32 -07:00
lijunlong 8c05251cce simplify code 2020-04-01 09:41:26 +08:00
lijunlong 7c15d1e8c3 add bench mark for bls sign and verify 2020-03-28 12:34:12 +08:00
Łukasz Magiera c8928ff5d9 Extract sector-storage 2020-03-28 01:32:39 +01:00
Łukasz Magiera c4b928d441 Revert specs-actors version 2020-03-28 00:33:38 +01:00
Łukasz Magiera afebab334e Update imports; Add build scripts 2020-03-28 00:21:36 +01:00
Łukasz Magiera bbbe16531b Repo setup 2020-03-28 00:02:52 +01:00
Łukasz Magiera 089c769373 sectorstorage: Untangle from lotus deps 2020-03-27 22:35:33 +01:00
Łukasz Magiera 9be406482b sectorstorage: Untangle from lotus deps 2020-03-27 22:35:33 +01:00
Łukasz Magiera 353ecbc62d sectorstorage: Address review 2020-03-27 18:45:32 +01:00
Łukasz Magiera ed6202d202 Cleanup after dropping sectorbuilder 2020-03-26 20:35:16 +01:00
Łukasz Magiera 617e3135c1 Cleanup after dropping sectorbuilder 2020-03-26 20:35:16 +01:00
Łukasz Magiera 2dfa38f572 Merge sectorbuilder into sectorstorage 2020-03-26 03:51:06 +01:00
Łukasz Magiera e8e90300f0 Merge sectorbuilder into sectorstorage 2020-03-26 03:51:06 +01:00
Łukasz Magiera 3081a1b9c7 Fix sealing sectors with multiple pieces 2020-03-26 02:18:13 +01:00
Łukasz Magiera 0ce42d520a stores: Mute serve-stat debug log 2020-03-25 22:23:01 +01:00
Łukasz Magiera db93e784ab workers: gofmt 2020-03-25 21:20:24 +01:00
Łukasz Magiera 8c63b25704 stores: 'None' file type 2020-03-25 21:19:58 +01:00
Łukasz Magiera f22942b3c8 sectorstorage: Move sealed sectors to storage in FinalizeSector 2020-03-25 19:21:53 +01:00
Łukasz Magiera a975f018c5 Merge remote-tracking branch 'origin/testnet/3' into feat/new-workers 2020-03-25 01:02:23 +01:00
Łukasz Magiera 817e699738 sectorstorage: wire up closing logic 2020-03-25 00:52:55 +01:00
Łukasz Magiera d8f357b01c workers: More review related fixes 2020-03-25 00:37:40 +01:00
Łukasz Magiera cd892105f6 sectorstorage: Remove unsealed sector in FinalizeSector 2020-03-24 21:28:07 +01:00
Łukasz Magiera 2900bb099f storageminer: Config for local worker task types 2020-03-24 20:38:00 +01:00
Łukasz Magiera bb4983ee39 Merge remote-tracking branch 'origin/testnet/3' into feat/new-workers 2020-03-24 19:09:02 +01:00
Łukasz Magiera dce6d8e4ae workers: Address review 2020-03-24 19:01:04 +01:00
Aayush Rajasekaran 01828ef885 Re: #1412: Add a non-blocking version of StateWaitMsg
- This commit adds a new method called StateSearchMsg
- We can probably overhaul StateWaitMsg onto this new method at a later point in time
2020-03-24 06:43:15 -04:00
Łukasz Magiera 290b7ebd26 storageminer: More storage stats in storage list 2020-03-23 23:43:38 +01:00
Łukasz Magiera 6842b4cb46 sectorstorage: Enable sealing on the local worker by default 2020-03-23 17:28:40 +01:00
Łukasz Magiera 40060e3525 sectorstorage: Fix remote sector deletion 2020-03-23 16:40:36 +01:00
Łukasz Magiera 68e279b399 workers: Basic monitoring tools 2020-03-23 15:56:22 +01:00
Łukasz Magiera 15e9d6ba5a sector index: Don't add duplicate storage URLs 2020-03-23 13:12:43 +01:00
Łukasz Magiera a9443774a9 Rename agvmgr+sealmgr to sectorstorage 2020-03-23 12:47:10 +01:00
Łukasz Magiera e40c5d441d Rename agvmgr+sealmgr to sectorstorage 2020-03-23 12:47:10 +01:00
Łukasz Magiera 88ad4858ec gofmt 2020-03-22 22:39:27 +01:00
Łukasz Magiera 2fc1114ad2 sealing: Improve sector log 2020-03-22 21:44:27 +01:00
Jeromy ea4c93a044 update and rerun cbor gen 2020-03-21 14:17:01 -07:00
Łukasz Magiera 80c774ec49 storageminer: Fix preseal meta import for genesis miners 2020-03-20 01:20:01 +01:00
Łukasz Magiera 0b4979d20a workers: get sectors back to miner process after precommit 2020-03-19 20:17:58 +01:00
Łukasz Magiera dadcfb8101 Merge remote-tracking branch 'origin/testnet/3' into feat/new-workers 2020-03-19 03:28:55 +01:00
whyrusleeping e035f05564 change gas limit to be a normal int64 2020-03-18 13:45:37 -07:00
Łukasz Magiera 0a3d61435e Fix tests after specs-storage changes 2020-03-18 02:08:11 +01:00
Łukasz Magiera 6ce8cda0a3 Use new specs-storage interface 2020-03-17 21:19:52 +01:00
whyrusleeping d255b7d6e9 Merge branch 'master' into testnet/3 2020-03-07 16:46:12 -08:00
Łukasz Magiera 9476452c49 sealing: Fix noop plan loop 2020-03-07 00:03:57 +01:00
Aayush Rajasekaran 2fec889a11 Unify MethodCall and ReplayResults into SimulationResult
- Call and Replay now return the same type, which includes both Message and MessageReceipt
2020-03-06 11:10:40 -08:00
Łukasz Magiera dbca774e17 libs: Use go-statemachine 2020-03-06 20:01:03 +01:00
Łukasz Magiera d5a4051c7f libs: Use zerocomm from sectorbuilder 2020-03-06 19:50:41 +01:00
Łukasz Magiera 732ea1b882 sectorbuilder type updates 2020-03-06 06:38:59 +01:00
Łukasz Magiera 0e195410b5 sealmgr: Implement all sealing steps 2020-03-05 19:19:32 +01:00
Łukasz Magiera 63e3ee222b Merge remote-tracking branch 'origin/testnet/3' into feat/4stage-seal 2020-03-04 04:01:13 +01:00
Łukasz Magiera b31c8a56f7 Storage Manager refactor 2020-03-03 23:19:22 +01:00
whyrusleeping ed6c957001 more misc fixes 2020-03-01 17:09:38 -08:00
whyrusleeping 94073cfb5a progress is made incrementally 2020-02-28 14:00:34 -08:00
whyrusleeping cacb797d16 pass on proper sector types 2020-02-28 12:52:14 -08:00
whyrusleeping 47901c3fb7 fixing miner logic to make more tests pass 2020-02-28 11:31:28 -08:00
Łukasz Magiera c45a376dd6 Regen cbor marshalers 2020-02-28 00:34:48 +01:00
whyrusleeping 9e77a046a1 make it all build finally 2020-02-27 13:45:31 -08:00
Łukasz Magiera 628d90353d Merge branch 'feat/update-sectorbuilder' of github.com:filecoin-project/go-lotus into feat/update-sectorbuilder 2020-02-27 01:56:15 +01:00
Łukasz Magiera cec0b3c15f zerocomm: 'Fix' the test 2020-02-27 01:56:09 +01:00
whyrusleeping 300264bee1 more fixes for random garbage 2020-02-26 16:42:39 -08:00
Łukasz Magiera d1c15a2666 Some test fixes 2020-02-26 10:05:22 +01:00
Łukasz Magiera 5649f5a87f types: Drop some redundant alias types 2020-02-25 22:09:22 +01:00
Łukasz Magiera 9c5d2fff1a actors: Remove addrass aliases 2020-02-25 21:54:58 +01:00
Łukasz Magiera fc4fa38c9b actors: drop a bunch of type aliases 2020-02-25 21:35:15 +01:00
Łukasz Magiera 2f22fa416d post-upstream-merge fixes 2020-02-24 18:45:25 +01:00
Łukasz Magiera c8b9846705 Merge branch 'testnet/3' into feat/specs-actors 2020-02-24 18:32:02 +01:00
Łukasz Magiera 1dc80d4c04 Fix Sealing in TestAPIDealFlow 2020-02-23 21:33:10 +01:00
Łukasz Magiera ed8569eb99 More unified randomness handling 2020-02-23 21:00:47 +01:00
Łukasz Magiera 4b4368a898 Deal flow fixes 2020-02-23 16:50:36 +01:00
Łukasz Magiera d04c304c93 Implement committed capacity sectors 2020-02-23 01:47:47 +01:00
Łukasz Magiera da236a26fc Generate zero CommP table 2020-02-22 15:06:38 +01:00
Łukasz Magiera 65b91a95d2 get chain to runnable state 2020-02-22 14:10:46 +01:00
Łukasz Magiera 9b40fa6c76 gofmt; mod tidy 2020-02-21 20:28:20 +01:00
Łukasz Magiera 70263b6fba storageminer: Update api interfaces 2020-02-21 18:43:44 +01:00
Łukasz Magiera e5b838bac8 update specs-actors 2020-02-21 17:57:40 +01:00
Łukasz Magiera 888267520d Merge remote-tracking branch 'origin/master' into testnet/3 2020-02-19 22:10:14 +01:00
whyrusleeping b82d26aee7 working towards a working genesis generator 2020-02-17 23:15:30 -08:00
Aayush Rajasekaran 15722b4bb9 Re: #1250: API methods should receive TipSetKeys, not TipSets, as input 2020-02-17 19:53:43 -05:00
Łukasz Magiera 175b0e88a3 gofmt 2020-02-14 22:38:30 +01:00
Łukasz Magiera 944ba527f3 use specs-actors birfields 2020-02-14 01:24:24 +01:00
Łukasz Magiera 8a5a5022ce Update cbor-gen 2020-02-13 02:37:28 +01:00
Łukasz Magiera 5a24c2dc5d Fix client market impl, gofmt 2020-02-13 01:15:33 +01:00
Łukasz Magiera 8bf95879f7 cbor-gen fixes 2020-02-13 01:10:07 +01:00
Łukasz Magiera 939610a930 Propagate spec actor types more 2020-02-12 08:44:20 +01:00
Łukasz Magiera bcea739cff genesis: Change template types 2020-02-12 01:58:55 +01:00
Łukasz Magiera 0279e8a34a genesis: Cleanup the structure 2020-02-11 21:48:03 +01:00
Łukasz Magiera 835ca2801c wip gengen fixing 2020-02-11 04:31:28 +01:00
Łukasz Magiera f5c78e67b0 stmgr: Update stmgr utils 2020-02-11 03:33:27 +01:00
Łukasz Magiera cd31b6721c Fix compilation after dep updates 2020-02-11 02:11:58 +01:00
Łukasz Magiera 0225142b90 specs-actors: Fis some test compilation errors 2020-02-10 20:16:36 +01:00
Łukasz Magiera fb495e98b4 specs-actors: Fix most compilation errors 2020-02-09 07:06:32 +01:00
Łukasz Magiera 68eb35e0f4 gofmt 2020-02-08 03:18:37 +01:00
Łukasz Magiera 9b5968f170 Spec Actors integration 2020-02-08 03:18:32 +01:00
Łukasz Magiera 17eb1f8ae1 Merge pull request #1223 from filecoin-project/fix/squash-forks
squash forks and use correct amt library everywhere
2020-02-06 20:14:55 +01:00
whyrusleeping 572cf16a51 squash forks and use correct amt library everywhere 2020-02-04 18:26:42 -08:00
Łukasz Magiera 4d19bebc03 storageminer: Work around broken fastPledgeCommitment 2020-02-04 21:46:31 +01:00
Łukasz Magiera 2d6f0cc589 sealing: fix finalize with cache only 2020-02-02 20:36:15 +01:00
Łukasz Magiera bd766ab3cd sealing: more logging in pledge sector flow 2020-01-31 20:22:31 +01:00
Łukasz Magiera edfbe71b0f fix pledgeReader with small sectors 2020-01-31 20:07:20 +01:00
Łukasz Magiera 52ff34c13e Fix tests 2020-01-31 02:27:38 +01:00
Łukasz Magiera b001a73da1 Update sectorbuilder 2020-01-31 02:18:48 +01:00
Łukasz Magiera 591ea245bc Merge remote-tracking branch 'origin/master' into feat/new-sb-fs 2020-01-30 07:46:47 +01:00
Łukasz Magiera c63fc61a52 sealing: Fix pledgeReader 2020-01-30 07:41:30 +01:00
Łukasz Magiera 8c2bdf984c Merge branch 'master' into feat/new-sb-fs 2020-01-30 07:39:52 +01:00
Łukasz Magiera 90b855094e Fix fast pledge math 2020-01-30 02:01:10 +01:00
Łukasz Magiera c4e9a77be4 actually call finalizeSector 2020-01-29 23:37:31 +01:00
Łukasz Magiera 4ce9d005dd sealing: FinalizeSector step 2020-01-29 22:25:06 +01:00
Whyrusleeping cb318cf2e9 Merge pull request #1158 from filecoin-project/feat/par-pledge
sealing: Parallel CommP calc in pledge sector
2020-01-29 12:15:22 -08:00
Łukasz Magiera 731660c76f test fastPledgeCommitment 2020-01-29 21:01:20 +01:00
Łukasz Magiera 367062aee4 sealing: round parts in fastPledgeCommitment 2020-01-29 20:12:27 +01:00
Łukasz Magiera 73839692d9 initial sectorbuilder FS refactor integration 2020-01-29 00:08:02 +01:00
laser debf107b54 write basic test affirming state change 2020-01-28 12:39:07 -08:00
laser e62515c042 planCommitting must handle SectorCommitFailed
The SectorCommitFailed struct can be created from within Sealing#handleCommitting, and is created if actors.SerializeParams(params) produces an error or if m.api.MpoolPushMessage(ctx.Context(), msg) produces an error.
2020-01-28 11:46:26 -08:00
Łukasz Magiera f6b12a33a2 sealing: Parallel CommP calc in pledge sector 2020-01-25 12:15:28 +01:00
Łukasz Magiera 248a362c3e sealing: docstrings for sanity-checks 2020-01-24 21:15:02 +01:00
Łukasz Magiera 0dfbb7d83e Merge remote-tracking branch 'origin/master' into feat/sector-recovery 2020-01-24 01:53:58 +01:00
Łukasz Magiera db5f1d2235 sealing: PreCommitFailed can go to SealFailed 2020-01-23 18:45:57 +01:00
Łukasz Magiera 75670290fe sealing: Handlef for PreCommitFailed 2020-01-23 18:34:04 +01:00
Łukasz Magiera ddf5cce6dd storageminer: Use tabwriter in sectors list 2020-01-23 17:15:45 +01:00
Łukasz Magiera 943197e65c sealing: Don't infinite-loop on fatal errors 2020-01-23 17:11:58 +01:00
Łukasz Magiera 54289225e8 sealing: Errors are hard 2020-01-23 17:02:55 +01:00
Łukasz Magiera 82343460dd sealing: Error types that can actually be checked 2020-01-23 16:57:50 +01:00
Łukasz Magiera 74095b25c5 sealing: Actually call handleSealFailed 2020-01-23 16:47:33 +01:00
Łukasz Magiera 2715ff763f sealing: implement handler for sealFailed 2020-01-23 16:38:10 +01:00
Łukasz Magiera 3ec83f2318 storageminer: log flag for sector status 2020-01-23 15:18:05 +01:00
Łukasz Magiera 9d0d15d51c sealing: Check ticket expiration 2020-01-23 15:05:44 +01:00
Łukasz Magiera 2aa9b16dbc sealing: check deal expiration 2020-01-23 13:17:45 +01:00
Łukasz Magiera 08a5030b46 sealing: Nonzero exit on commit isn't fatal 2020-01-23 11:02:20 +01:00
Łukasz Magiera c80099173e sealing: Not getting seal ticket isn't fatal 2020-01-22 22:16:45 +01:00
Łukasz Magiera ee34cf612f sealing: Wire up sector event log 2020-01-22 21:29:19 +01:00
Łukasz Magiera 7463ee72d0 sealing: wire up checkPieces and checkSeal 2020-01-22 20:47:29 +01:00
Łukasz Magiera 032b2d877c sealing: Fix planOne for global events 2020-01-22 19:30:56 +01:00
Łukasz Magiera 3a2047dcd7 sealing: Add Log field to SectorInfo 2020-01-22 03:41:39 +01:00
Łukasz Magiera 85d40a318b Merge branch 'master' into feat/sector-recovery 2020-01-22 03:27:11 +01:00
Łukasz Magiera a77c19a60d Fix master build 2020-01-21 19:51:17 +01:00
Łukasz Magiera 793bf7f579 Update cbor-gen, error on unknown fields 2020-01-21 17:28:55 +01:00
Łukasz Magiera 7c6a884980 cobr-gen: Soft struct-map unmarshaling 2020-01-21 17:05:10 +01:00
Łukasz Magiera f121570d60 sealing: Some state renaming 2020-01-20 23:04:46 +01:00
Łukasz Magiera 93453ed683 sealing: WIP SectorInfo sanity checks 2020-01-20 23:04:27 +01:00
dtynn 7566d75aeb small fixes 2020-01-20 16:23:56 +08:00
Łukasz Magiera 49461b2e68 Merge branch 'master' into feat/event-states 2020-01-18 14:40:59 +01:00
Łukasz Magiera a3747f8c71 Merge branch 'master' into feat/event-states 2020-01-16 03:59:14 +01:00
Łukasz Magiera 347e788eb6 sealing: gofmt 2020-01-16 03:54:57 +01:00
Łukasz Magiera 6413108dc9 sealing: Handle events based on current state 2020-01-16 03:53:59 +01:00
Łukasz Magiera e3b05e51b1 sealing: Handle seed changes more correctly 2020-01-16 02:25:49 +01:00
Łukasz Magiera 72ca563a1d sealing: More cleanup 2020-01-15 21:53:14 +01:00
Łukasz Magiera 03f31d74f1 Move miner sealing logic into a separate package 2020-01-15 21:49:11 +01:00
621 changed files with 75507 additions and 16496 deletions
+155 -50
View File
@@ -1,11 +1,11 @@
version: 2.1
orbs:
go: gotest/tools@0.0.9
go: gotest/tools@0.0.13
executors:
golang:
docker:
- image: circleci/golang:1.14.2
- image: circleci/golang:1.14.6
resource_class: 2xlarge
ubuntu:
docker:
@@ -45,7 +45,7 @@ commands:
- 'v25-2k-lotus-params'
paths:
- /var/tmp/filecoin-proof-parameters/
- run: ./lotus fetch-params --proving-params 2048
- run: ./lotus fetch-params 2048
- save_cache:
name: Save parameters cache
key: 'v25-2k-lotus-params'
@@ -79,7 +79,6 @@ jobs:
steps:
- install-deps
- prepare
- go/mod-download
- go/mod-tidy-check
build-all:
@@ -87,21 +86,17 @@ jobs:
steps:
- install-deps
- prepare
- go/mod-download
- run: sudo apt-get update
- run: sudo apt-get install npm
- restore_cache:
name: restore go mod cache
key: v1-go-deps-{{ arch }}-{{ checksum "/home/circleci/project/go.mod" }}
- run:
command: make buildall
- store_artifacts:
path: lotus
- store_artifacts:
path: lotus-storage-miner
path: lotus-miner
- store_artifacts:
path: lotus-seal-worker
- run: mkdir linux && mv lotus lotus-storage-miner lotus-seal-worker linux/
path: lotus-worker
- run: mkdir linux && mv lotus lotus-miner lotus-worker linux/
- persist_to_workspace:
root: "."
paths:
@@ -112,17 +107,13 @@ jobs:
steps:
- install-deps
- prepare
- go/mod-download
- restore_cache:
name: restore go mod cache
key: v1-go-deps-{{ arch }}-{{ checksum "/home/circleci/project/go.mod" }}
- run:
command: make debug
test: &test
description: |
Run tests with gotestsum.
parameters:
parameters: &test-params
executor:
type: executor
default: golang
@@ -134,13 +125,16 @@ jobs:
type: string
default: "./..."
description: Import paths of packages to be tested.
winpost-test:
type: string
default: "0"
test-suite-name:
type: string
default: unit
description: Test suite name to report to CircleCI.
gotestsum-format:
type: string
default: short
default: pkgname-and-test-fails
description: gotestsum format. https://github.com/gotestyourself/gotestsum#format
coverage:
type: string
@@ -156,30 +150,34 @@ jobs:
steps:
- install-deps
- prepare
- go/mod-download
- restore_cache:
name: restore go mod cache
key: v1-go-deps-{{ arch }}-{{ checksum "/home/circleci/project/go.mod" }}
- run:
command: make deps lotus
no_output_timeout: 30m
- download-params
- go/install-gotestsum:
gobin: $HOME/.local/bin
version: 0.5.2
- run:
name: go test
environment:
GOTESTSUM_JUNITFILE: /tmp/test-reports/<< parameters.test-suite-name >>/junit.xml
GOTESTSUM_FORMAT: << parameters.gotestsum-format >>
LOTUS_TEST_WINDOW_POST: << parameters.winpost-test >>
SKIP_CONFORMANCE: "1"
command: |
mkdir -p /tmp/test-reports/<< parameters.test-suite-name >>
gotestsum -- \
mkdir -p /tmp/test-artifacts
gotestsum \
--format << parameters.gotestsum-format >> \
--junitfile /tmp/test-reports/<< parameters.test-suite-name >>/junit.xml \
--jsonfile /tmp/test-artifacts/<< parameters.test-suite-name >>.json \
-- \
<< parameters.coverage >> \
<< parameters.go-test-flags >> \
<< parameters.packages >>
no_output_timeout: 30m
- store_test_results:
path: /tmp/test-reports
- store_artifacts:
path: /tmp/test-artifacts/<< parameters.test-suite-name >>.json
- when:
condition: << parameters.codecov-upload >>
steps:
@@ -189,16 +187,92 @@ jobs:
shell: /bin/bash -eo pipefail
command: |
bash <(curl -s https://codecov.io/bash)
- save_cache:
name: save go mod cache
key: v1-go-deps-{{ arch }}-{{ checksum "/home/circleci/project/go.mod" }}
paths:
- "~/go/pkg"
- "~/go/src/github.com"
- "~/go/src/golang.org"
test-short:
<<: *test
test-window-post:
<<: *test
test-conformance:
description: |
Run tests using a corpus of interoperable test vectors for Filecoin
implementations to test their correctness and compliance with the Filecoin
specifications.
parameters:
<<: *test-params
vectors-branch:
type: string
default: ""
description: |
Branch on github.com/filecoin-project/test-vectors to checkout and
test with. If empty (the default) the commit defined by the git
submodule is used.
executor: << parameters.executor >>
steps:
- install-deps
- prepare
- run:
command: make deps lotus
no_output_timeout: 30m
- download-params
- when:
condition:
not:
equal: [ "", << parameters.vectors-branch >> ]
steps:
- run:
name: checkout vectors branch
command: |
cd extern/test-vectors
git fetch
git checkout origin/<< parameters.vectors-branch >>
- go/install-gotestsum:
gobin: $HOME/.local/bin
version: 0.5.2
- run:
name: install statediff globally
command: |
## statediff is optional; we succeed even if compilation fails.
mkdir -p /tmp/statediff
git clone https://github.com/filecoin-project/statediff.git /tmp/statediff
cd /tmp/statediff
go install ./cmd/statediff || exit 0
- run:
name: go test
environment:
SKIP_CONFORMANCE: "0"
command: |
mkdir -p /tmp/test-reports
mkdir -p /tmp/test-artifacts
gotestsum \
--format pkgname-and-test-fails \
--junitfile /tmp/test-reports/junit.xml \
-- \
-v -coverpkg ./chain/vm/,github.com/filecoin-project/specs-actors/... -coverprofile=/tmp/conformance.out ./conformance/
go tool cover -html=/tmp/conformance.out -o /tmp/test-artifacts/conformance-coverage.html
no_output_timeout: 30m
- store_test_results:
path: /tmp/test-reports
- store_artifacts:
path: /tmp/test-artifacts/conformance-coverage.html
build-lotus-soup:
description: |
Compile `lotus-soup` Testground test plan using the current version of Lotus.
parameters:
<<: *test-params
executor: << parameters.executor >>
steps:
- install-deps
- prepare
- run: cd extern/oni && git submodule sync
- run: cd extern/oni && git submodule update --init
- run: cd extern/filecoin-ffi && make
- run:
name: "replace lotus, filecoin-ffi, blst and fil-blst deps"
command: cd extern/oni/lotus-soup && go mod edit -replace github.com/filecoin-project/lotus=../../../ && go mod edit -replace github.com/filecoin-project/filecoin-ffi=../../filecoin-ffi && go mod edit -replace github.com/supranational/blst=../../fil-blst/blst && go mod edit -replace github.com/filecoin-project/fil-blst=../../fil-blst
- run:
name: "build lotus-soup testplan"
command: pushd extern/oni/lotus-soup && go build -tags=testground .
build-macos:
description: build darwin lotus binary
@@ -225,24 +299,22 @@ jobs:
- run:
name: Install jq
command: |
mkdir $HOME/.bin
curl --location https://github.com/stedolan/jq/releases/download/jq-1.6/jq-osx-amd64 --output $HOME/.bin/jq
chmod +x $HOME/.bin/jq
curl --location https://github.com/stedolan/jq/releases/download/jq-1.6/jq-osx-amd64 --output /usr/local/bin/jq
chmod +x /usr/local/bin/jq
- restore_cache:
name: restore go mod and cargo cache
name: restore cargo cache
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
- install-deps
- go/mod-download
- run:
command: make build
no_output_timeout: 30m
- store_artifacts:
path: lotus
- store_artifacts:
path: lotus-storage-miner
path: lotus-miner
- store_artifacts:
path: lotus-seal-worker
- run: mkdir darwin && mv lotus lotus-storage-miner lotus-seal-worker darwin/
path: lotus-worker
- run: mkdir darwin && mv lotus lotus-miner lotus-worker darwin/
- persist_to_workspace:
root: "."
paths:
@@ -259,10 +331,30 @@ jobs:
steps:
- install-deps
- prepare
- go/mod-download
- run:
command: "! go fmt ./... 2>&1 | read"
cbor-gen-check:
executor: golang
steps:
- install-deps
- prepare
- run: make deps
- run: go install golang.org/x/tools/cmd/goimports
- run: go install github.com/hannahhoward/cbor-gen-for
- run: go generate ./...
- run: git --no-pager diff
- run: git --no-pager diff --quiet
docs-check:
executor: golang
steps:
- install-deps
- prepare
- run: make docsgen
- run: git --no-pager diff
- run: git --no-pager diff --quiet
lint: &lint
description: |
Run golangci-lint.
@@ -272,7 +364,7 @@ jobs:
default: golang
golangci-lint-version:
type: string
default: 1.23.8
default: 1.27.0
concurrency:
type: string
default: '2'
@@ -288,7 +380,6 @@ jobs:
steps:
- install-deps
- prepare
- go/mod-download
- run:
command: make deps
no_output_timeout: 30m
@@ -298,11 +389,8 @@ jobs:
- run:
name: Lint
command: |
$HOME/.local/bin/golangci-lint run -v \
$HOME/.local/bin/golangci-lint run -v --timeout 2m \
--concurrency << parameters.concurrency >> << parameters.args >>
lint-changes:
<<: *lint
lint-all:
<<: *lint
@@ -331,18 +419,35 @@ workflows:
version: 2.1
ci:
jobs:
- lint-changes:
args: "--new-from-rev origin/master"
- test:
codecov-upload: true
- lint-all:
concurrency: "16" # expend all docker 2xlarge CPUs.
- mod-tidy-check
- gofmt
- cbor-gen-check
- docs-check
- test:
codecov-upload: true
test-suite-name: full
- test-window-post:
go-test-flags: "-run=TestWindowedPost"
winpost-test: "1"
test-suite-name: window-post
- test-short:
go-test-flags: "--timeout 10m --short"
test-suite-name: short
filters:
tags:
only:
- /^v\d+\.\d+\.\d+$/
- test-conformance:
test-suite-name: conformance
packages: "./conformance"
- test-conformance:
name: test-conformance-bleeding-edge
test-suite-name: conformance-bleeding-edge
packages: "./conformance"
vectors-branch: master
- build-lotus-soup
- build-debug
- build-all:
requires:
+2
View File
@@ -1,3 +1,5 @@
comment: off
ignore:
- "cbor_gen.go"
github_checks:
annotations: false
+15
View File
@@ -0,0 +1,15 @@
## 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 @whyrusleeping @Kubuxu
### Conformance testing.
conformance/ @raulk
extern/test-vectors @raulk
+1 -1
View File
@@ -21,7 +21,7 @@ A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Version (run `lotus --version`):**
**Version (run `lotus version`):**
**Additional context**
Add any other context about the problem here.
+43
View File
@@ -0,0 +1,43 @@
---
name: Sealing Issues
about: Create a report for help with sealing (commit) failures.
title: ''
labels: 'sealing'
assignees: ''
---
Please provide all the information requested here to help us troubleshoot "commit failed" issues.
If the information requested is missing, we will probably have to just ask you to provide it anyway,
before we can help debug.
**Describe the problem**
A brief description of the problem you encountered while proving (sealing) a sector.
Including what commands you ran, and a description of your setup, is very helpful.
**Sectors status**
The output of `lotus-miner sectors status --log <sectorId>` for the failed sector(s).
**Lotus miner logs**
Please go through the logs of your miner, and include screenshots of any error-like messages you find.
Alternatively please upload full log files and share a link here
**Lotus miner diagnostic info**
Please collect the following diagnostic information, and share a link here
* lotus-miner diagnostic info `lotus-miner info all > allinfo`
** Code modifications **
If you have modified parts of lotus, please describe which areas were modified,
and the scope of those modifications
**Version**
The output of `lotus --version`.
+248
View File
@@ -0,0 +1,248 @@
###
### Special magic GitHub labels
### https://help.github.com/en/github/building-a-strong-community/encouraging-helpful-contributions-to-your-project-with-labels
#
- name: "good first issue"
color: 7057ff
description: "Good for newcomers"
- name: "help wanted"
color: 008672
description: "Extra attention is needed"
###
### Goals
#
- name: goal/incentives
color: ff004d
description: "Incentinet"
###
### Areas
#
- name: area/ux
color: 00A4E0
description: "Area: UX"
- name: area/chain/vm
color: 00A4E2
description: "Area: Chain/VM"
- name: area/chain/sync
color: 00A4E4
description: "Area: Chain/Sync"
- name: area/chain/misc
color: 00A4E6
description: "Area: Chain/Misc"
- name: area/markets
color: 00A4E8
description: "Area: Markets"
- name: area/sealing/fsm
color: 0bb1ed
description: "Area: Sealing/FSM"
- name: area/sealing/storage
color: 0EB4F0
description: "Area: Sealing/Storage"
- name: area/proving
color: 0EB4F0
description: "Area: Proving"
- name: area/mining
color: 10B6F2
description: "Area: Mining"
- name: area/client/storage
color: 13B9F5
description: "Area: Client/Storage"
- name: area/client/retrieval
color: 15BBF7
description: "Area: Client/Retrieval"
- name: area/wallet
color: 15BBF7
description: "Area: Wallet"
- name: area/payment-channel
color: ff6767
description: "Area: Payment Channel"
- name: area/multisig
color: fff0ff
description: "Area: Multisig"
- name: area/networking
color: 273f8a
description: "Area: Networking"
###
### Kinds
#
- name: kind/bug
color: c92712
description: "Kind: Bug"
- name: kind/chore
color: fcf0b5
description: "Kind: Chore"
- name: kind/feature
color: FFF3B8
description: "Kind: Feature"
- name: kind/improvement
color: FFF5BA
description: "Kind: Improvement"
- name: kind/test
color: FFF8BD
description: "Kind: Test"
- name: kind/question
color: FFFDC2
description: "Kind: Question"
- name: kind/enhancement
color: FFFFC5
description: "Kind: Enhancement"
- name: kind/discussion
color: FFFFC7
description: "Kind: Discussion"
###
### Difficulties
#
- name: dif/trivial
color: b2b7ff
description: "Can be confidently tackled by newcomers, who are widely unfamiliar with lotus"
- name: dif/easy
color: 7886d7
description: "An existing lotus user should be able to pick this up"
- name: dif/medium
color: 6574cd
description: "Prior development experience with lotus is likely helpful"
- name: dif/hard
color: 5661b3
description: "Suggests that having worked on the specific component affected by this issue is important"
- name: dif/expert
color: 2f365f
description: "Requires extensive knowledge of the history, implications, ramifications of the issue"
###
### Efforts
#
- name: effort/minutes
color: e8fffe
description: "Effort: Minutes"
- name: effort/hours
color: a0f0ed
description: "Effort: Hours"
- name: effort/day
color: 64d5ca
description: "Effort: One Day"
- name: effort/days
color: 4dc0b5
description: "Effort: Multiple Days"
- name: effort/week
color: 38a89d
description: "Effort: One Week"
- name: effort/weeks
color: 20504f
description: "Effort: Multiple Weeks"
###
### Impacts
#
- name: impact/regression
color: f1f5f8
description: "Impact: Regression"
- name: impact/api-breakage
color: ECF0F3
description: "Impact: API Breakage"
- name: impact/quality
color: E7EBEE
description: "Impact: Quality"
- name: impact/dx
color: E2E6E9
description: "Impact: Developer Experience"
- name: impact/test-flakiness
color: DDE1E4
description: "Impact: Test Flakiness"
- name: impact/consensus
color: b20014
description: "Impact: Consensus"
###
### Topics
#
- name: topic/interoperability
color: bf0f73
description: "Topic: Interoperability"
- name: topic/specs
color: CC1C80
description: "Topic: Specs"
- name: topic/docs
color: D9298D
description: "Topic: Documentation"
- name: topic/architecture
color: E53599
description: "Topic: Architecture"
###
### Priorities
###
- name: P0
color: dd362a
description: "P0: Critical Blocker"
- name: P1
color: ce8048
description: "P1: Must be resolved"
- name: P2
color: dbd81a
description: "P2: Should be resolved"
- name: P3
color: 9fea8f
description: "P3: Might get resolved"
###
### Hints
#
#- name: hint/good-first-issue
# color: 7057ff
# description: "Hint: Good First Issue"
#- name: hint/help-wanted
# color: 008672
# description: "Hint: Help Wanted"
- name: hint/needs-decision
color: 33B9A5
description: "Hint: Needs Decision"
- name: hint/needs-triage
color: 1AA08C
description: "Hint: Needs Triage"
- name: hint/needs-analysis
color: 26AC98
description: "Hint: Needs Analysis"
- name: hint/needs-author-input
color: 33B9A5
description: "Hint: Needs Author Input"
- name: hint/needs-team-input
color: 40C6B2
description: "Hint: Needs Team Input"
- name: hint/needs-community-input
color: 4DD3BF
description: "Hint: Needs Community Input"
- name: hint/needs-review
color: 5AE0CC
description: "Hint: Needs Review"
###
### Statuses
#
- name: status/done
color: edb3a6
description: "Status: Done"
- name: status/deferred
color: E0A699
description: "Status: Deferred"
- name: status/in-progress
color: D49A8D
description: "Status: In Progress"
- name: status/blocked
color: C78D80
description: "Status: Blocked"
- name: status/inactive
color: BA8073
description: "Status: Inactive"
- name: status/waiting
color: AD7366
description: "Status: Waiting"
- name: status/rotten
color: 7A4033
description: "Status: Rotten"
- name: status/discarded
color: 6D3326
description: "Status: Discarded / Won't fix"
+17
View File
@@ -0,0 +1,17 @@
name: Label syncer
on:
push:
paths:
- '.github/labels.yml'
branches:
- master
jobs:
build:
name: Sync labels
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@1.0.0
- uses: micnncim/action-label-syncer@v1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+12 -8
View File
@@ -1,19 +1,23 @@
/lotus
/lotus-storage-miner
/lotus-seal-worker
/lotus-miner
/lotus-worker
/lotus-seed
/lotus-health
/lotus-chainwatch
/lotus-shed
/pond
/townhall
/fountain
/stats
/bench
/lotus-pond
/lotus-townhall
/lotus-fountain
/lotus-stats
/lotus-bench
/lotus-gateway
/lotus-pcr
/bench.json
/lotuspond/front/node_modules
/lotuspond/front/build
/cmd/lotus-townhall/townhall/node_modules
/cmd/lotus-townhall/townhall/build
/cmd/lotus-townhall/townhall/package-lock.json
extern/filecoin-ffi/rust/target
**/*.a
**/*.pc
@@ -24,7 +28,6 @@ build/paramfetch.sh
/vendor
/blocks.dot
/blocks.svg
/chainwatch
/chainwatch.db
/bundle
/darwin
@@ -35,3 +38,4 @@ build/paramfetch.sh
bin/ipget
bin/tmp/*
.idea
scratchpad
+9
View File
@@ -5,3 +5,12 @@
[submodule "extern/serialization-vectors"]
path = extern/serialization-vectors
url = https://github.com/filecoin-project/serialization-vectors
[submodule "extern/test-vectors"]
path = extern/test-vectors
url = https://github.com/filecoin-project/test-vectors.git
[submodule "extern/fil-blst"]
path = extern/fil-blst
url = https://github.com/filecoin-project/fil-blst.git
[submodule "extern/oni"]
path = extern/oni
url = https://github.com/filecoin-project/oni
+36 -1
View File
@@ -22,16 +22,51 @@ issues:
- "func name will be used as test\\.Test.* by other packages, and that stutters; consider calling this"
- "Potential file inclusion via variable"
- "should have( a package)? comment"
- "Error return value of `logging.SetLogLevel` is not checked"
- "comment on exported"
- "(func|method) \\w+ should be \\w+"
- "(type|var|struct field|(method|func) parameter) `\\w+` should be `\\w+`"
- "(G306|G301|G307|G108|G302|G204|G104)"
- "don't use ALL_CAPS in Go names"
- "string .* has .* occurrences, make it a constant"
- "a blank import should be only in a main or test package, or have a comment justifying it"
- "package comment should be of the form"
exclude-use-default: false
exclude-rules:
- path: lotuspond
linters:
- errcheck
- path: node/modules/lp2p
linters:
- golint
- path: ".*_test.go"
- path: build/params_.*\.go
linters:
- golint
- path: api/apistruct/struct.go
linters:
- golint
- path: .*_test.go
linters:
- gosec
- path: chain/vectors/gen/.*
linters:
- gosec
- path: cmd/lotus-bench/.*
linters:
- gosec
- path: api/test/.*
text: "context.Context should be the first parameter"
linters:
- golint
linters-settings:
goconst:
min-occurrences: 6
+474 -4
View File
@@ -1,7 +1,477 @@
# lotus changelog
# Lotus changelog
## 0.1.0 / 2019-12-11
# 0.7.1 / 2020-09-17
We are very excited to release **lotus** 0.1.0. This is our testnet release. To install lotus and join the testnet, please visit [docs.lotu.sh](docs.lotu.sh). Please file bug reports as [issues](https://github.com/filecoin-project/lotus/issues).
This optional release of Lotus introduces some critical fixes to the window PoSt process. It also upgrades some core dependencies, and introduces many improvements to the mining process, deal-making cycle, and overall User Experience.
A huge thank you to all contributors for this testnet release!
## Changes
#### Some notable improvements:
- 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)
- Split window PoST submission into multiple messages (https://github.com/filecoin-project/lotus/pull/3689)
- Improve journal coverage (https://github.com/filecoin-project/lotus/pull/2455)
- Allow retrievals while sealing (https://github.com/filecoin-project/lotus/pull/3778)
- Don't prune locally published messages (https://github.com/filecoin-project/lotus/pull/3772)
- Add get-ask, set-ask retrieval commands (https://github.com/filecoin-project/lotus/pull/3886)
- Consistently name winning and window post in logs (https://github.com/filecoin-project/lotus/pull/3873))
- Add auto flag to mpool replace (https://github.com/filecoin-project/lotus/pull/3752))
#### Dependencies
- Upgrade markets to `v0.6.1` (https://github.com/filecoin-project/lotus/pull/3906)
- Upgrade specs-actors to `v0.9.10` (https://github.com/filecoin-project/lotus/pull/3846)
- Upgrade badger (https://github.com/filecoin-project/lotus/pull/3739)
# 0.7.0 / 2020-09-10
This consensus-breaking release of Lotus is designed to test a network upgrade on the space race testnet. The changes that break consensus are:
- Upgrading the Drand network used from the test Drand network to the League of Entropy main drand network. This is the same Drand network that will be used in the Filecoin mainnet.
- Upgrading to specs-actors v0.9.8, which adds a new method to the Multisig actor.
## Changes
#### Core Lotus
- Fix IsAncestorOf (https://github.com/filecoin-project/lotus/pull/3717)
- Update to specs-actors v0.9.8 (https://github.com/filecoin-project/lotus/pull/3725)
- Increase chain throughput by 20% (https://github.com/filecoin-project/lotus/pull/3732)
- Updare to go-libp2p-pubsub `master` (https://github.com/filecoin-project/lotus/pull/3735)
- Drand upgrade (https://github.com/filecoin-project/lotus/pull/3670)
- Multisig API additions (https://github.com/filecoin-project/lotus/pull/3590)
#### Storage Miner
- Increase the number of times precommit2 is attempted before moving back to precommit1 (https://github.com/filecoin-project/lotus/pull/3720)
#### Message pool
- Relax mpool add strictness checks for local pushes (https://github.com/filecoin-project/lotus/pull/3724)
#### Maintenance
- Fix devnets (https://github.com/filecoin-project/lotus/pull/3712)
- Fix(chainwatch): compare prev miner with cur miner (https://github.com/filecoin-project/lotus/pull/3715)
- CI: fix statediff build; make optional (https://github.com/filecoin-project/lotus/pull/3729)
- Feat: Chaos abort (https://github.com/filecoin-project/lotus/pull/3733)
## Contributors
The following contributors had commits go into this release.
We are grateful for every contribution!
| Contributor | Commits | Lines ± |
|--------------------|---------|---------------|
| arajasek | 28 | +1144/-239 |
| Kubuxu | 19 | +452/-261 |
| whyrusleeping | 13 | +456/-87 |
| vyzo | 11 | +318/-20 |
| raulk | 10 | +1289/-350 |
| magik6k | 6 | +188/-55 |
| dirkmc | 3 | +31/-8 |
| alanshaw | 3 | +176/-37 |
| Stebalien | 2 | +9/-12 |
| lanzafame | 1 | +1/-1 |
| frrist | 1 | +1/-1 |
| mishmosh | 1 | +1/-1 |
| nonsense | 1 | +1/-0 |
# 0.6.2 / 2020-09-09
This release introduces some critical fixes to message selection and gas estimation logic. It also adds the ability for nodes to mark a certain tipset as checkpointed, as well as various minor improvements and bugfixes.
## Changes
#### 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)
- Add basic command for printing gas performance of messages in the mpool (https://github.com/filecoin-project/lotus/pull/3701)
- Adjust optimal selection to always try to fill blocks (https://github.com/filecoin-project/lotus/pull/3685)
- Fix very minor bug in repub baseFeeLowerBound (https://github.com/filecoin-project/lotus/pull/3663)
- Add an auto flag to mpool replace (https://github.com/filecoin-project/lotus/pull/3676)
- Fix mpool optimal selection packing failure (https://github.com/filecoin-project/lotus/pull/3698)
#### Core Lotus
- Don't use latency as initital estimate for blocksync (https://github.com/filecoin-project/lotus/pull/3648)
- Add niceSleep 1 second when drand errors (https://github.com/filecoin-project/lotus/pull/3664)
- Fix isChainNearSync check in block validator (https://github.com/filecoin-project/lotus/pull/3650)
- Add peer to peer manager before fetching the tipset (https://github.com/filecoin-project/lotus/pull/3667)
- Add StageFetchingMessages to sync status (https://github.com/filecoin-project/lotus/pull/3668)
- Pass tipset through upgrade logic (https://github.com/filecoin-project/lotus/pull/3673)
- Allow nodes to mark tipsets as checkpointed (https://github.com/filecoin-project/lotus/pull/3680)
- Remove hard-coded late-fee in window PoSt (https://github.com/filecoin-project/lotus/pull/3702)
- Gas: Fix median calc (https://github.com/filecoin-project/lotus/pull/3686)
#### Storage
- Storage manager: bail out with an error if unsealed cid is undefined (https://github.com/filecoin-project/lotus/pull/3655)
- Storage: return true from Sealer.ReadPiece() on success (https://github.com/filecoin-project/lotus/pull/3657)
#### Maintenance
- Resolve lotus, test-vectors, statediff dependency cycle (https://github.com/filecoin-project/lotus/pull/3688)
- Paych: add docs on how to use paych status (https://github.com/filecoin-project/lotus/pull/3690)
- Initial CODEOWNERS (https://github.com/filecoin-project/lotus/pull/3691)
# 0.6.1 / 2020-09-08
This optional release introduces a minor improvement to the sync process, ensuring nodes don't fall behind and then resync.
## Changes
- Update `test-vectors` (https://github.com/filecoin-project/lotus/pull/3645)
- Revert "only subscribe to pubsub topics once we are synced" (https://github.com/filecoin-project/lotus/pull/3643)
# 0.6.0 / 2020-09-07
This consensus-breaking release of Lotus is designed to test a network upgrade on the space race testnet. The changes that break consensus are:
- Tweaking of some cryptoecon parameters in specs-actors 0.9.7 (https://github.com/filecoin-project/specs-actors/releases/tag/v0.9.7)
- Rebalancing FIL distribution to make testnet FIL scarce, which prevents base fee spikes and sets better expectations for mainnet
This release also introduces many improvements to Lotus! Among them are a new version of go-fil-markets that supports non-blocking retrieval, various spam reduction measures in the messagepool and p2p logic, and UX improvements to payment channels, dealmaking, and state inspection.
## Changes
#### Core Lotus and dependencies
- Implement faucet funds reallocation logic (https://github.com/filecoin-project/lotus/pull/3632)
- Network upgrade: Upgrade to correct fork threshold (https://github.com/filecoin-project/lotus/pull/3628)
- Update to specs 0.9.7 and markets 0.6.0 (https://github.com/filecoin-project/lotus/pull/3627)
- Network upgrade: Perform base fee tamping (https://github.com/filecoin-project/lotus/pull/3623)
- Chain events: if cache best() is nil, return chain head (https://github.com/filecoin-project/lotus/pull/3611)
- Update to specs actors v0.9.6 (https://github.com/filecoin-project/lotus/pull/3603)
#### Messagepool
- Temporarily allow negative chains (https://github.com/filecoin-project/lotus/pull/3625)
- Improve publish/republish logic (https://github.com/filecoin-project/lotus/pull/3592)
- Fix selection bug; priority messages were not included if other chains were negative (https://github.com/filecoin-project/lotus/pull/3580)
- Add defensive check for minimum GasFeeCap for inclusion within the next 20 blocks (https://github.com/filecoin-project/lotus/pull/3579)
- 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)
#### Payment channels
- 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)
- Rename CLI command from "paych get" to "paych add-funds" (https://github.com/filecoin-project/lotus/pull/3520)
#### Peer-to-peer
- Only subscribe to pubsub topics once we are synced (https://github.com/filecoin-project/lotus/pull/3602)
- Reduce mpool add failure log spam (https://github.com/filecoin-project/lotus/pull/3562)
- Republish messages even if the chains have negative performance(https://github.com/filecoin-project/lotus/pull/3557)
- Adjust gossipsub gossip factor (https://github.com/filecoin-project/lotus/pull/3556)
- Integrate pubsub Random Early Drop (https://github.com/filecoin-project/lotus/pull/3518)
#### Miscellaneous
- Fix panic in OnDealExpiredSlashed (https://github.com/filecoin-project/lotus/pull/3553)
- Robustify state manager against holes in actor method numbers (https://github.com/filecoin-project/lotus/pull/3538)
#### UX
- VM: Fix an error message (https://github.com/filecoin-project/lotus/pull/3608)
- Documentation: Batch replacement,update lotus-storage-miner to lotus-miner (https://github.com/filecoin-project/lotus/pull/3571)
- CLI: Robust actor lookup (https://github.com/filecoin-project/lotus/pull/3535)
- Add agent flag to net peers (https://github.com/filecoin-project/lotus/pull/3534)
- Add watch option to storage-deals list (https://github.com/filecoin-project/lotus/pull/3527)
#### Testing & tooling
- Decommission chain-validation (https://github.com/filecoin-project/lotus/pull/3606)
- Metrics: add expected height metric (https://github.com/filecoin-project/lotus/pull/3586)
- PCR: Use current tipset during refund (https://github.com/filecoin-project/lotus/pull/3570)
- Lotus-shed: Add math command (https://github.com/filecoin-project/lotus/pull/3568)
- PCR: Add tipset aggergation (https://github.com/filecoin-project/lotus/pull/3565)- Fix broken paych tests (https://github.com/filecoin-project/lotus/pull/3551)
- Make chain export ~1000x times faster (https://github.com/filecoin-project/lotus/pull/3533)
- Chainwatch: Stop SyncIncomingBlocks from leaking into chainwatch processing; No panics during processing (https://github.com/filecoin-project/lotus/pull/3526)
- Conformance: various changes (https://github.com/filecoin-project/lotus/pull/3521)
# 0.5.10 / 2020-09-03
This patch includes a crucial fix to the message pool selection logic, strongly disfavouring messages that might cause a miner penalty.
## Changes
- Fix calculation of GasReward in messagepool (https://github.com/filecoin-project/lotus/pull/3528)
# 0.5.9 / 2020-09-03
This patch includes a hotfix to the `GasEstimateFeeCap` method, capping the estimated fee to a reasonable level by default.
## Changes
- 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)
- Cap fees to reasonable level by default (https://github.com/filecoin-project/lotus/pull/3516)
- Add APIs and command to inspect bandwidth usage (https://github.com/filecoin-project/lotus/pull/3497)
- Track expected nonce in mpool, ignore messages with large nonce gaps (https://github.com/filecoin-project/lotus/pull/3450)
# 0.5.8 / 2020-09-02
This patch includes some bugfixes to the sector sealing process, and updates go-fil-markets. It also improves the performance of blocksync, adds a method to export chain state trees, and improves chainwatch.
## Changes
- Upgrade markets to v0.5.9 (https://github.com/filecoin-project/lotus/pull/3496)
- Improve blocksync to load fewer messages: (https://github.com/filecoin-project/lotus/pull/3494)
- Fix a panic in the ffi-wrapper's `ReadPiece` (https://github.com/filecoin-project/lotus/pull/3492/files)
- Fix a deadlock in the sealing scheduler (https://github.com/filecoin-project/lotus/pull/3489)
- Add test vectors for tipset tests (https://github.com/filecoin-project/lotus/pull/3485/files)
- Improve the advance-block debug command (https://github.com/filecoin-project/lotus/pull/3476)
- Add toggle for message processing to Lotus PCR (https://github.com/filecoin-project/lotus/pull/3470)
- Allow exporting recent chain state trees (https://github.com/filecoin-project/lotus/pull/3463)
- Remove height from chain rand (https://github.com/filecoin-project/lotus/pull/3458)
- Disable GC on chain badger datastore (https://github.com/filecoin-project/lotus/pull/3457)
- Account for `GasPremium` in `GasEstimateFeeCap` (https://github.com/filecoin-project/lotus/pull/3456)
- Update go-libp2p-pubsub to `master` (https://github.com/filecoin-project/lotus/pull/3455)
- Chainwatch improvements (https://github.com/filecoin-project/lotus/pull/3442)
# 0.5.7 / 2020-08-31
This patch release includes some bugfixes and enhancements to the sector lifecycle and message pool logic.
## Changes
- Rebuild unsealed infos on miner restart (https://github.com/filecoin-project/lotus/pull/3401)
- CLI to attach storage paths to workers (https://github.com/filecoin-project/lotus/pull/3405)
- Do not select negative performing message chains for inclusion (https://github.com/filecoin-project/lotus/pull/3392)
- Remove a redundant error-check (https://github.com/filecoin-project/lotus/pull/3421)
- Correctly move unsealed sectors in `FinalizeSectors` (https://github.com/filecoin-project/lotus/pull/3424)
- Improve worker selection logic (https://github.com/filecoin-project/lotus/pull/3425)
- Don't use context to close bitswap (https://github.com/filecoin-project/lotus/pull/3430)
- Correctly estimate gas premium when there is only one message on chain (https://github.com/filecoin-project/lotus/pull/3428)
# 0.5.6 / 2020-08-29
Hotfix release that fixes a panic in the sealing scheduler (https://github.com/filecoin-project/lotus/pull/3389).
# 0.5.5
This patch release introduces a large number of improvements to the sealing process.
It also updates go-fil-markets to
[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).
#### Downstream upgrades
- Upgrades markets to v0.5.8 (https://github.com/filecoin-project/lotus/pull/3384)
- Upgrades go-libp2p-pubsub to v0.3.5 (https://github.com/filecoin-project/lotus/pull/3305)
#### Sector sealing
- 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.
- 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.
- Auto-retry sending Precommit and Commit messages if they run out of gas
- Auto-retry sector remove tasks when they fail
- 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)
#### Message Pool
- Spam Protection: Track required funds for pending messages (https://github.com/filecoin-project/lotus/pull/3313)
#### Chainwatch
- Add more power and reward metrics (https://github.com/filecoin-project/lotus/pull/3367)
- Fix raciness in sector deal table (https://github.com/filecoin-project/lotus/pull/3275)
- Parallelize miner processing (https://github.com/filecoin-project/lotus/pull/3380)
- Accept Lotus API and token (https://github.com/filecoin-project/lotus/pull/3337)
# 0.5.4
A patch release, containing a few nice bugfixes and improvements:
- Fix parsing of peer ID in `lotus-miner actor set-peer-id` (@whyrusleeping)
- Update dependencies, fixing several bugs (@Stebalien)
- Fix remaining linter warnings (@Stebalien)
- Use safe string truncation (@Ingar)
- Allow tweaking of blocksync message window size (@whyrusleeping)
- Add some additional gas stats to metrics (@Kubuxu)
- Fix an edge case bug in message selection, add many tests (@vyzo)
# 0.5.3
Yet another hotfix release.
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
enough to give you good code review, otherwise you'll end up quickly bumping
versions again.
- Fixed a bug in the mempool that was introduced in v0.5.2
# 0.5.2 / 2020-08-24
This is a hotfix release.
- Fix message selection to not include messages that are invalid for block
inclusion.
- Improve SelectMessage handling of the case where the message pools tipset
differs from our mining base.
# 0.5.1 / 2020-08-24
The Space Race release!
This release contains the genesis car file and bootstrap peers for the space
race network.
Additionally, we included two small fixes to genesis creation:
- Randomize ticket value in genesis generation
- Correctly set t099 (burnt funds actor) to have valid account actor state
# 0.5.0 / 2020-08-20
This version of Lotus will be used for the incentivized testnet Space Race competition,
and can be considered mainnet-ready code. It includes some protocol
changes, upgrades of core dependencies, and various bugfixes and UX/performance improvements.
## Highlights
Among the highlights included in this release are:
- Gas changes: We implemented EIP-1559 and introduced real gas values.
- Deal-making: We now support "Committed Capacity" sectors, "fast-retrieval" deals,
and the packing of multiple deals into a single sector.
- Renamed features: We renamed some of the binaries, environment variables, and default
paths associated with a Lotus node.
### Gas changes
We made some significant changes to the mechanics of gas in this release.
#### Network fee
We implemented something similar to
[Ethereum's EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).
The `Message` structure had three changes:
- The `GasPrice` field has been removed
- A new `GasFeeCap` field has been added, which controls the maximum cost
the sender incurs for the message
- A new `GasPremium` field has been added, which controls the reward a miner
earns for including the message
A sender will never be charged more than `GasFeeCap * GasLimit`.
A miner will typically earn `GasPremium * GasLimit` as a reward.
The `Blockheader` structure has one new field, called `ParentBaseFee`.
Informally speaking,the `ParentBaseFee`
is increased when blocks are densely packed with messages, and decreased otherwise.
The `ParentBaseFee` is used when calculating how much a sender burns when executing a message. _Burning_ simply refers to sending attoFIL to a dedicated, unreachable account.
A message causes `ParentBaseFee * GasUsed` attoFIL to be burnt.
#### Real gas values
This release also includes our first "real" gas costs for primitive operations.
The costs were designed to account for both the _time_ that message execution takes,
as well as the _space_ a message adds to the state tree.
## Deal-making changes
There are three key changes to the deal-making process.
#### Committed Capacity sectors
Miners can now pledge "Committed Capacity" (CC) sectors, which are explicitly
stated as containing junk data, and must not include any deals. Miners can do this
to increase their storage power, and win block rewards from this pledged storage.
They can mark these sectors as "upgradable" with `lotus-miner sectors mark-for-upgrade`.
If the miner receives and accepts one or more storage deals, the sector that includes
those deals will _replace_ the CC sector. This is intended to maximize the amount of useful
storage on the Filecoin network.
#### Fast-retrieval deals
Clients can now include a `fast-retrieval` flag when proposing deals with storage miners.
If set to true, the miner will include an extra copy of the deal data. This
data can be quickly served in a retrieval deal, since it will not need to be unsealed.
#### Multiple deals per sector
Miners can now pack multiple deals into a single sector, so long as all the deals
fit into the sector capacity. This should increase the packing efficiency of miners.
### Renamed features
To improve the user experience, we updated several names to mainatin
standard prefixing, and to better reflect the meaning of the features being referenced.
In particular, the Lotus miner binary is now called `lotus-miner`, the default
path for miner data is now `~/.lotusminer`, and the environment variable
that sets the path for miner data is now `$LOTUS_MINER_PATH`. A full list of renamed
features can be found [here](https://github.com/filecoin-project/lotus/issues/2304).
## Changelog
#### Downstream upgrades
- Upgrades markets to v0.5.6 (https://github.com/filecoin-project/lotus/pull/3058)
- Upgrades specs-actors to v0.9.3 (https://github.com/filecoin-project/lotus/pull/3151)
#### Core protocol
- Introduces gas values, replacing placeholders (https://github.com/filecoin-project/lotus/pull/2343)
- Implements EIP-1559, introducing a network base fee, message gas fee cap, and message gas fee premium (https://github.com/filecoin-project/lotus/pull/2874)
- Implements Poisson Sortition for elections (https://github.com/filecoin-project/lotus/pull/2084)
#### Deal-making lifecycle
- Introduces "Committed Capacity" sectors (https://github.com/filecoin-project/lotus/pull/2220)
- Introduces "fast-retrieval" flag for deals (https://github.com/filecoin-project/lotus/pull/2323
- Supports packing multiple deals into one sector (https://github.com/filecoin-project/storage-fsm/pull/38)
#### Enhancements
- Optimized message pool selection logic (https://github.com/filecoin-project/lotus/pull/2838)
- Window-based scheduling of sealing tasks (https://github.com/filecoin-project/sector-storage/pull/67)
- Faster window PoSt (https://github.com/filecoin-project/lotus/pull/2209/files)
- Refactors the payment channel manager (https://github.com/filecoin-project/lotus/pull/2640)
- Refactors blocksync (https://github.com/filecoin-project/lotus/pull/2715/files)
#### UX
- Provide status updates for data-transfer (https://github.com/filecoin-project/lotus/pull/3162, https://github.com/filecoin-project/lotus/pull/3191)
- Miners can customise asks (https://github.com/filecoin-project/lotus/pull/2046)
- Miners can toggle auto-acceptance of deals (https://github.com/filecoin-project/lotus/pull/1994)
- Miners can maintain a blocklist of piece CIDs (https://github.com/filecoin-project/lotus/pull/2069)
## Contributors
The following contributors had 10 or more commits go into this release.
We are grateful for every contribution!
| Contributor | Commits | Lines ± |
|--------------------|---------|---------------|
| magik6k | 361 | +13197/-6136 |
| Kubuxu | 227 | +5670/-2587 |
| arajasek | 120 | +2916/-1264 |
| whyrusleeping | 112 | +3979/-1089 |
| vyzo | 99 | +3343/-1305 |
| dirkmc | 68 | +8732/-3621 |
| laser | 45 | +1489/-501 |
| hannahhoward | 43 | +2654/-990 |
| frrist | 37 | +6630/-4338 |
| schomatis | 28 | +3016/-1368 |
| placer14 | 27 | +824/-350 |
| raulk | 25 | +28718/-29849 |
| mrsmkl | 22 | +560/-368 |
| travisperson | 18 | +1354/-314 |
| nonsense | 16 | +2956/-2842 |
| ingar | 13 | +331/-123 |
| daviddias | 11 | +311/-11 |
| Stebalien | 11 | +1204/-980 |
| RobQuistNL | 10 | +69/-74 |
# 0.1.0 / 2019-12-11
We are very excited to release **lotus** 0.1.0. This is our testnet release. To install lotus and join the testnet, please visit [lotu.sh](lotu.sh). Please file bug reports as [issues](https://github.com/filecoin-project/lotus/issues).
A huge thank you to all contributors for this testnet release!
+145 -60
View File
@@ -6,7 +6,7 @@ all: build
unexport GOFLAGS
GOVERSION:=$(shell go version | cut -d' ' -f 3 | cut -d. -f 2)
ifeq ($(shell expr $(GOVERSION) \< 13), 1)
ifeq ($(shell expr $(GOVERSION) \< 14), 1)
$(warning Your Golang version is go 1.$(GOVERSION))
$(error Update Golang to version $(shell grep '^go' go.mod))
endif
@@ -17,7 +17,7 @@ MODULES:=
CLEAN:=
BINS:=
ldflags=-X=github.com/filecoin-project/lotus/build.CurrentCommit='+git$(subst -,.,$(shell git describe --always --match=NeVeRmAtCh --dirty 2>/dev/null || git rev-parse --short HEAD 2>/dev/null))'
ldflags=-X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.$(subst -,.,$(shell git describe --always --match=NeVeRmAtCh --dirty 2>/dev/null || git rev-parse --short HEAD 2>/dev/null))
ifneq ($(strip $(LDFLAGS)),)
ldflags+=-extldflags=$(LDFLAGS)
endif
@@ -58,10 +58,10 @@ deps: $(BUILD_DEPS)
.PHONY: deps
debug: GOFLAGS+=-tags=debug
debug: lotus lotus-storage-miner lotus-seal-worker lotus-seed
debug: lotus lotus-miner lotus-worker lotus-seed
2k: GOFLAGS+=-tags=2k
2k: lotus lotus-storage-miner lotus-seal-worker lotus-seed
2k: lotus lotus-miner lotus-worker lotus-seed
lotus: $(BUILD_DEPS)
rm -f lotus
@@ -71,19 +71,19 @@ lotus: $(BUILD_DEPS)
.PHONY: lotus
BINS+=lotus
lotus-storage-miner: $(BUILD_DEPS)
rm -f lotus-storage-miner
go build $(GOFLAGS) -o lotus-storage-miner ./cmd/lotus-storage-miner
go run github.com/GeertJohan/go.rice/rice append --exec lotus-storage-miner -i ./build
.PHONY: lotus-storage-miner
BINS+=lotus-storage-miner
lotus-miner: $(BUILD_DEPS)
rm -f lotus-miner
go build $(GOFLAGS) -o lotus-miner ./cmd/lotus-storage-miner
go run github.com/GeertJohan/go.rice/rice append --exec lotus-miner -i ./build
.PHONY: lotus-miner
BINS+=lotus-miner
lotus-seal-worker: $(BUILD_DEPS)
rm -f lotus-seal-worker
go build $(GOFLAGS) -o lotus-seal-worker ./cmd/lotus-seal-worker
go run github.com/GeertJohan/go.rice/rice append --exec lotus-seal-worker -i ./build
.PHONY: lotus-seal-worker
BINS+=lotus-seal-worker
lotus-worker: $(BUILD_DEPS)
rm -f lotus-worker
go build $(GOFLAGS) -o lotus-worker ./cmd/lotus-seal-worker
go run github.com/GeertJohan/go.rice/rice append --exec lotus-worker -i ./build
.PHONY: lotus-worker
BINS+=lotus-worker
lotus-shed: $(BUILD_DEPS)
rm -f lotus-shed
@@ -92,16 +92,28 @@ lotus-shed: $(BUILD_DEPS)
.PHONY: lotus-shed
BINS+=lotus-shed
build: lotus lotus-storage-miner lotus-seal-worker
lotus-gateway: $(BUILD_DEPS)
rm -f lotus-gateway
go build $(GOFLAGS) -o lotus-gateway ./cmd/lotus-gateway
.PHONY: lotus-gateway
BINS+=lotus-gateway
build: lotus lotus-miner lotus-worker
@[[ $$(type -P "lotus") ]] && echo "Caution: you have \
an existing lotus binary in your PATH. This may cause problems if you don't run 'sudo make install'" || true
.PHONY: build
install:
install: install-daemon install-miner install-worker
install-daemon:
install -C ./lotus /usr/local/bin/lotus
install -C ./lotus-storage-miner /usr/local/bin/lotus-storage-miner
install -C ./lotus-seal-worker /usr/local/bin/lotus-seal-worker
install-miner:
install -C ./lotus-miner /usr/local/bin/lotus-miner
install-worker:
install -C ./lotus-worker /usr/local/bin/lotus-worker
# TOOLS
@@ -119,55 +131,124 @@ benchmarks:
@curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}"
.PHONY: benchmarks
pond: build
go build -o pond ./lotuspond
lotus-pond: 2k
go build -o lotus-pond ./lotuspond
(cd lotuspond/front && npm i && CI=false npm run build)
.PHONY: pond
BINS+=pond
.PHONY: lotus-pond
BINS+=lotus-pond
townhall:
rm -f townhall
go build -o townhall ./cmd/lotus-townhall
lotus-townhall:
rm -f lotus-townhall
go build -o lotus-townhall ./cmd/lotus-townhall
(cd ./cmd/lotus-townhall/townhall && npm i && npm run build)
go run github.com/GeertJohan/go.rice/rice append --exec townhall -i ./cmd/lotus-townhall -i ./build
.PHONY: townhall
BINS+=townhall
go run github.com/GeertJohan/go.rice/rice append --exec lotus-townhall -i ./cmd/lotus-townhall -i ./build
.PHONY: lotus-townhall
BINS+=lotus-townhall
fountain:
rm -f fountain
go build -o fountain ./cmd/lotus-fountain
go run github.com/GeertJohan/go.rice/rice append --exec fountain -i ./cmd/lotus-fountain -i ./build
.PHONY: fountain
BINS+=fountain
lotus-fountain:
rm -f lotus-fountain
go build -o lotus-fountain ./cmd/lotus-fountain
go run github.com/GeertJohan/go.rice/rice append --exec lotus-fountain -i ./cmd/lotus-fountain -i ./build
.PHONY: lotus-fountain
BINS+=lotus-fountain
chainwatch:
rm -f chainwatch
go build -o chainwatch ./cmd/lotus-chainwatch
go run github.com/GeertJohan/go.rice/rice append --exec chainwatch -i ./cmd/lotus-chainwatch -i ./build
.PHONY: chainwatch
BINS+=chainwatch
lotus-chainwatch:
rm -f lotus-chainwatch
go build $(GOFLAGS) -o lotus-chainwatch ./cmd/lotus-chainwatch
.PHONY: lotus-chainwatch
BINS+=lotus-chainwatch
bench:
rm -f bench
go build -o bench ./cmd/lotus-bench
go run github.com/GeertJohan/go.rice/rice append --exec bench -i ./build
.PHONY: bench
BINS+=bench
lotus-bench:
rm -f lotus-bench
go build -o lotus-bench ./cmd/lotus-bench
go run github.com/GeertJohan/go.rice/rice append --exec lotus-bench -i ./build
.PHONY: lotus-bench
BINS+=lotus-bench
stats:
rm -f stats
go build -o stats ./tools/stats
go run github.com/GeertJohan/go.rice/rice append --exec stats -i ./build
.PHONY: stats
BINS+=stats
lotus-stats:
rm -f lotus-stats
go build -o lotus-stats ./cmd/lotus-stats
go run github.com/GeertJohan/go.rice/rice append --exec lotus-stats -i ./build
.PHONY: lotus-stats
BINS+=lotus-stats
health:
lotus-pcr:
rm -f lotus-pcr
go build $(GOFLAGS) -o lotus-pcr ./cmd/lotus-pcr
go run github.com/GeertJohan/go.rice/rice append --exec lotus-pcr -i ./build
.PHONY: lotus-pcr
BINS+=lotus-pcr
lotus-health:
rm -f lotus-health
go build -o lotus-health ./cmd/lotus-health
go run github.com/GeertJohan/go.rice/rice append --exec lotus-health -i ./build
.PHONY: lotus-health
BINS+=lotus-health
.PHONY: health
BINS+=health
testground:
go build -tags testground -o /dev/null ./cmd/lotus
.PHONY: testground
BINS+=testground
install-chainwatch: lotus-chainwatch
install -C ./lotus-chainwatch /usr/local/bin/lotus-chainwatch
# SYSTEMD
install-daemon-service: install-daemon
mkdir -p /etc/systemd/system
mkdir -p /var/log/lotus
install -C -m 0644 ./scripts/lotus-daemon.service /etc/systemd/system/lotus-daemon.service
systemctl daemon-reload
@echo
@echo "lotus-daemon service installed. Don't forget to run 'sudo systemctl start lotus-daemon' to start it and 'sudo systemctl enable lotus-daemon' for it to be enabled on startup."
install-miner-service: install-miner install-daemon-service
mkdir -p /etc/systemd/system
mkdir -p /var/log/lotus
install -C -m 0644 ./scripts/lotus-miner.service /etc/systemd/system/lotus-miner.service
systemctl daemon-reload
@echo
@echo "lotus-miner service installed. Don't forget to run 'sudo systemctl start lotus-miner' to start it and 'sudo systemctl enable lotus-miner' for it to be enabled on startup."
install-chainwatch-service: install-chainwatch install-daemon-service
mkdir -p /etc/systemd/system
mkdir -p /var/log/lotus
install -C -m 0644 ./scripts/lotus-chainwatch.service /etc/systemd/system/lotus-chainwatch.service
systemctl daemon-reload
@echo
@echo "chainwatch service installed. Don't forget to run 'sudo systemctl start lotus-chainwatch' to start it and 'sudo systemctl enable lotus-chainwatch' for it to be enabled on startup."
install-main-services: install-miner-service
install-all-services: install-main-services install-chainwatch-service
install-services: install-main-services
clean-daemon-service: clean-miner-service clean-chainwatch-service
-systemctl stop lotus-daemon
-systemctl disable lotus-daemon
rm -f /etc/systemd/system/lotus-daemon.service
systemctl daemon-reload
clean-miner-service:
-systemctl stop lotus-miner
-systemctl disable lotus-miner
rm -f /etc/systemd/system/lotus-miner.service
systemctl daemon-reload
clean-chainwatch-service:
-systemctl stop lotus-chainwatch
-systemctl disable lotus-chainwatch
rm -f /etc/systemd/system/lotus-chainwatch.service
systemctl daemon-reload
clean-main-services: clean-daemon-service
clean-all-services: clean-main-services
clean-services: clean-all-services
# MISC
@@ -175,15 +256,15 @@ buildall: $(BINS)
completions:
./scripts/make-completions.sh lotus
./scripts/make-completions.sh lotus-storage-miner
./scripts/make-completions.sh lotus-miner
.PHONY: completions
install-completions:
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-storage-miner /usr/share/bash-completion/completions/lotus-storage-miner
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-storage-miner /usr/local/share/zsh/site-functions/_lotus-storage-miner
install -C ./scripts/zsh-completion/lotus-miner /usr/local/share/zsh/site-functions/_lotus-miner
clean:
rm -rf $(CLEAN) $(BINS)
@@ -197,11 +278,15 @@ dist-clean:
type-gen:
go run ./gen/main.go
go generate ./...
method-gen:
(cd ./lotuspond/front/src/chain && go run ./methodgen.go)
gen: type-gen method-gen
docsgen:
go run ./api/docgen > documentation/en/api-methods.md
print-%:
@echo $*=$($*)
+38 -7
View File
@@ -1,16 +1,47 @@
![Lotus](documentation/images/lotus_logo_h.png)
<p align="center">
<a href="https://lotu.sh/" title="Lotus Docs">
<img src="documentation/images/lotus_logo_h.png" alt="Project Lotus Logo" width="244" />
</a>
</p>
# Project Lotus - 莲
<h1 align="center">Project Lotus - 莲</h1>
Lotus is an implementation of the Filecoin Distributed Storage Network. For more details about Filecoin, check out the [Filecoin Spec](https://github.com/filecoin-project/specs).
<p align="center">
<a href="https://circleci.com/gh/filecoin-project/lotus"><img src="https://circleci.com/gh/filecoin-project/lotus.svg?style=svg"></a>
<a href="https://codecov.io/gh/filecoin-project/lotus"><img src="https://codecov.io/gh/filecoin-project/lotus/branch/master/graph/badge.svg"></a>
<a href="https://goreportcard.com/report/github.com/filecoin-project/lotus"><img src="https://goreportcard.com/badge/github.com/filecoin-project/lotus" /></a>
<a href=""><img src="https://img.shields.io/badge/golang-%3E%3D1.14.7-blue.svg" /></a>
<br>
</p>
## Development
All work is tracked via issues. An attempt at keeping an up-to-date view on remaining work is in the [lotus testnet github project board](https://github.com/filecoin-project/lotus/projects/1).
Lotus is an implementation of the Filecoin Distributed Storage Network. For more details about Filecoin, check out the [Filecoin Spec](https://spec.filecoin.io).
## Building & Documentation
For instructions on how to build lotus from source, please visit [https://docs.lotu.sh](https://docs.lotu.sh) or read the source [here](https://github.com/filecoin-project/lotus/tree/master/documentation).
For instructions on how to build lotus from source, please visit [https://lotu.sh](https://lotu.sh) or read the source [here](https://github.com/filecoin-project/lotus/tree/master/documentation).
## Reporting a Vulnerability
Please send an email to security@filecoin.org. See our [security policy](SECURITY.md) for more details.
## Development
The main branches under development at the moment are:
* [`master`](https://github.com/filecoin-project/lotus): current testnet.
* [`next`](https://github.com/filecoin-project/lotus/tree/next): working branch with chain-breaking changes.
* [`ntwk-calibration`](https://github.com/filecoin-project/lotus/tree/ntwk-calibration): devnet running one of `next` commits.
### Tracker
All work is tracked via issues. An attempt at keeping an up-to-date view on remaining work towards Mainnet launch can be seen at the [lotus github project board](https://github.com/orgs/filecoin-project/projects/8). The issues labeled with `incentives` are there to identify the issues needed for Space Race launch.
### Packages
The lotus Filecoin implementation unfolds into the following packages:
- [This repo](https://github.com/filecoin-project/lotus)
- [go-fil-markets](https://github.com/filecoin-project/go-fil-markets) which has its own [kanban work tracker available here](https://app.zenhub.com/workspaces/markets-shared-components-5daa144a7046a60001c6e253/board)
- [spec-actors](https://github.com/filecoin-project/specs-actors) which has its own [kanban work tracker available here](https://app.zenhub.com/workspaces/actors-5ee6f3aa87591f0016c05685/board)
## License
+29
View File
@@ -0,0 +1,29 @@
# Security Policy
## Reporting a Vulnerability
For *critical* bugs, please send an email to security@filecoin.org.
The bug reporting process differs between bugs that are critical and may crash the network, and others that are unlikely to cause problems if malicious parties know about it. For non-critical bugs, please simply file a GitHub [issue](https://github.com/filecoin-project/lotus/issues/new?template=bug_report.md).
Please try to provide a clear description of any bugs reported, along with how to reproduce the bug if possible. More detailed bug reports (especially those with a PoC included) will help us move forward much faster. Additionally, please avoid reporting bugs that already have open issues. Take a moment to search the issue list of the related GitHub repositories before writing up a new report.
Here are some examples of bugs we would consider 'critical':
* If you can spend from a `multisig` wallet you do not control the keys for.
* If you can cause a miner to be slashed without them actually misbehaving.
* If you can maintain power without submitting windowed posts regularly.
* If you can craft a message that causes lotus nodes to panic.
* If you can cause your miner to win significantly more blocks than it should.
* If you can craft a message that causes a persistent fork in the network.
* If you can cause the total amount of Filecoin in the network to no longer be 2 billion.
This is not an exhaustive list, but should provide some idea of what we consider 'critical'.
## Supported Versions
* TODO: This should be defined and set up by Mainnet launch.
| Version | Supported |
| ------- | ------------------ |
| Testnet | :white_check_mark: |
+38 -7
View File
@@ -4,19 +4,23 @@ import (
"context"
"fmt"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/go-jsonrpc/auth"
metrics "github.com/libp2p/go-libp2p-core/metrics"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
protocol "github.com/libp2p/go-libp2p-core/protocol"
"github.com/filecoin-project/lotus/build"
)
type Permission = string
type Common interface {
// Auth
AuthVerify(ctx context.Context, token string) ([]Permission, error)
AuthNew(ctx context.Context, perms []Permission) ([]byte, error)
// network
// MethodGroup: Auth
AuthVerify(ctx context.Context, token string) ([]auth.Permission, error)
AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error)
// MethodGroup: Net
NetConnectedness(context.Context, peer.ID) (network.Connectedness, error)
NetPeers(context.Context) ([]peer.AddrInfo, error)
@@ -24,6 +28,23 @@ type Common interface {
NetAddrsListen(context.Context) (peer.AddrInfo, error)
NetDisconnect(context.Context, peer.ID) error
NetFindPeer(context.Context, peer.ID) (peer.AddrInfo, error)
NetPubsubScores(context.Context) ([]PubsubScore, error)
NetAutoNatStatus(context.Context) (NatInfo, error)
NetAgentVersion(ctx context.Context, p peer.ID) (string, error)
// NetBandwidthStats returns statistics about the nodes total bandwidth
// usage and current rate across all peers and protocols.
NetBandwidthStats(ctx context.Context) (metrics.Stats, error)
// NetBandwidthStatsByPeer returns statistics about the nodes bandwidth
// usage and current rate per peer
NetBandwidthStatsByPeer(ctx context.Context) (map[string]metrics.Stats, error)
// NetBandwidthStatsByProtocol returns statistics about the nodes bandwidth
// usage and current rate per protocol
NetBandwidthStatsByProtocol(ctx context.Context) (map[protocol.ID]metrics.Stats, error)
// MethodGroup: Common
// ID returns peerID of libp2p node backing this API
ID(context.Context) (peer.ID, error)
@@ -33,6 +54,11 @@ type Common interface {
LogList(context.Context) ([]string, error)
LogSetLevel(context.Context, string, string) error
// trigger graceful shutdown
Shutdown(context.Context) error
Closing(context.Context) (<-chan struct{}, error)
}
// Version provides various build-time information
@@ -54,3 +80,8 @@ type Version struct {
func (v Version) String() string {
return fmt.Sprintf("%s+api%s", v.Version, v.APIVersion.String())
}
type NatInfo struct {
Reachability network.Reachability
PublicAddr string
}
+501 -78
View File
@@ -2,23 +2,32 @@ package api
import (
"context"
"fmt"
"time"
"github.com/filecoin-project/go-state-types/dline"
"github.com/filecoin-project/specs-actors/actors/runtime/proof"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-filestore"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
"github.com/filecoin-project/go-fil-markets/storagemarket"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/go-multistore"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
"github.com/filecoin-project/specs-actors/actors/builtin/power"
"github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
"github.com/filecoin-project/lotus/chain/types"
marketevents "github.com/filecoin-project/lotus/markets/loggers"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
@@ -26,83 +35,257 @@ import (
type FullNode interface {
Common
// TODO: TipSetKeys
// MethodGroup: Chain
// The Chain method group contains methods for interacting with the
// blockchain, but that do not require any form of state computation.
// chain
// ChainNotify returns channel with chain head updates
// First message is guaranteed to be of len == 1, and type == 'current'
// ChainNotify returns channel with chain head updates.
// First message is guaranteed to be of len == 1, and type == 'current'.
ChainNotify(context.Context) (<-chan []*HeadChange, error)
// ChainHead returns the current head of the chain.
ChainHead(context.Context) (*types.TipSet, error)
ChainGetRandomness(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
// ChainGetRandomnessFromTickets is used to sample the chain for randomness.
ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
// ChainGetRandomnessFromBeacon is used to sample the beacon for randomness.
ChainGetRandomnessFromBeacon(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
// ChainGetBlock returns the block specified by the given CID.
ChainGetBlock(context.Context, cid.Cid) (*types.BlockHeader, error)
// ChainGetTipSet returns the tipset specified by the given TipSetKey.
ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error)
ChainGetBlockMessages(context.Context, cid.Cid) (*BlockMessages, error)
ChainGetParentReceipts(context.Context, cid.Cid) ([]*types.MessageReceipt, error)
ChainGetParentMessages(context.Context, cid.Cid) ([]Message, error)
// ChainGetBlockMessages returns messages stored in the specified block.
ChainGetBlockMessages(ctx context.Context, blockCid cid.Cid) (*BlockMessages, error)
// ChainGetParentReceipts returns receipts for messages in parent tipset of
// the specified block.
ChainGetParentReceipts(ctx context.Context, blockCid cid.Cid) ([]*types.MessageReceipt, error)
// ChainGetParentMessages returns messages stored in parent tipset of the
// specified block.
ChainGetParentMessages(ctx context.Context, blockCid cid.Cid) ([]Message, error)
// ChainGetTipSetByHeight looks back for a tipset at the specified epoch.
// If there are no blocks at the specified epoch, a tipset at an earlier epoch
// will be returned.
ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)
// ChainReadObj reads ipld nodes referenced by the specified CID from chain
// blockstore and returns raw bytes.
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
// ChainHasObj checks if a given CID exists in the chain blockstore.
ChainHasObj(context.Context, cid.Cid) (bool, error)
ChainStatObj(context.Context, cid.Cid, cid.Cid) (ObjStat, error)
// ChainStatObj returns statistics about the graph referenced by 'obj'.
// If 'base' is also specified, then the returned stat will be a diff
// between the two objects.
ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (ObjStat, error)
// ChainSetHead forcefully sets current chain head. Use with caution.
ChainSetHead(context.Context, types.TipSetKey) error
// ChainGetGenesis returns the genesis tipset.
ChainGetGenesis(context.Context) (*types.TipSet, error)
// ChainTipSetWeight computes weight for the specified tipset.
ChainTipSetWeight(context.Context, types.TipSetKey) (types.BigInt, error)
ChainGetNode(ctx context.Context, p string) (*IpldObject, error)
ChainGetMessage(context.Context, cid.Cid) (*types.Message, error)
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error)
ChainExport(context.Context, types.TipSetKey) (<-chan []byte, error)
// syncer
// ChainGetMessage reads a message referenced by the specified CID from the
// chain blockstore.
ChainGetMessage(context.Context, cid.Cid) (*types.Message, error)
// ChainGetPath returns a set of revert/apply operations needed to get from
// one tipset to another, for example:
//```
// to
// ^
// from tAA
// ^ ^
// tBA tAB
// ^---*--^
// ^
// tRR
//```
// Would return `[revert(tBA), apply(tAB), apply(tAA)]`
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error)
// ChainExport returns a stream of bytes with CAR dump of chain data.
// The exported chain data includes the header chain from the given tipset
// back to genesis, the entire genesis state, and the most recent 'nroots'
// state trees.
// If oldmsgskip is set, messages from before the requested roots are also not included.
ChainExport(ctx context.Context, nroots abi.ChainEpoch, oldmsgskip bool, tsk types.TipSetKey) (<-chan []byte, error)
// MethodGroup: Beacon
// The Beacon method group contains methods for interacting with the random beacon (DRAND)
// BeaconGetEntry returns the beacon entry for the given filecoin epoch. If
// the entry has not yet been produced, the call will block until the entry
// becomes available
BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error)
// GasEstimateFeeCap estimates gas fee cap
GasEstimateFeeCap(context.Context, *types.Message, int64, types.TipSetKey) (types.BigInt, error)
// GasEstimateGasLimit estimates gas used by the message and returns it.
// It fails if message fails to execute.
GasEstimateGasLimit(context.Context, *types.Message, types.TipSetKey) (int64, error)
// GasEstimateGasPremium estimates what gas price should be used for a
// message to have high likelihood of inclusion in `nblocksincl` epochs.
GasEstimateGasPremium(_ context.Context, nblocksincl uint64,
sender address.Address, gaslimit int64, tsk types.TipSetKey) (types.BigInt, error)
// GasEstimateMessageGas estimates gas values for unset message gas fields
GasEstimateMessageGas(context.Context, *types.Message, *MessageSendSpec, types.TipSetKey) (*types.Message, error)
// MethodGroup: Sync
// The Sync method group contains methods for interacting with and
// observing the lotus sync service.
// SyncState returns the current status of the lotus sync system.
SyncState(context.Context) (*SyncState, error)
// SyncSubmitBlock can be used to submit a newly created block to the.
// network through this node
SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error
// SyncIncomingBlocks returns a channel streaming incoming, potentially not
// yet synced block headers.
SyncIncomingBlocks(ctx context.Context) (<-chan *types.BlockHeader, error)
// SyncCheckpoint marks a blocks as checkpointed, meaning that it won't ever fork away from it.
SyncCheckpoint(ctx context.Context, tsk types.TipSetKey) error
// SyncMarkBad marks a blocks as bad, meaning that it won't ever by synced.
// Use with extreme caution.
SyncMarkBad(ctx context.Context, bcid cid.Cid) error
// SyncUnmarkBad unmarks a blocks as bad, making it possible to be validated and synced again.
SyncUnmarkBad(ctx context.Context, bcid cid.Cid) error
// SyncCheckBad checks if a block was marked as bad, and if it was, returns
// the reason.
SyncCheckBad(ctx context.Context, bcid cid.Cid) (string, error)
// messages
// MethodGroup: Mpool
// The Mpool methods are for interacting with the message pool. The message pool
// manages all incoming and outgoing 'messages' going over the network.
// MpoolPending returns pending mempool messages.
MpoolPending(context.Context, types.TipSetKey) ([]*types.SignedMessage, error)
// MpoolSelect returns a list of pending messages for inclusion in the next block
MpoolSelect(context.Context, types.TipSetKey, float64) ([]*types.SignedMessage, error)
// MpoolPush pushes a signed message to mempool.
MpoolPush(context.Context, *types.SignedMessage) (cid.Cid, error)
MpoolPushMessage(context.Context, *types.Message) (*types.SignedMessage, error) // get nonce, sign, push
// MpoolPushMessage atomically assigns a nonce, signs, and pushes a message
// to mempool.
// maxFee is only used when GasFeeCap/GasPremium fields aren't specified
//
// When maxFee is set to 0, MpoolPushMessage will guess appropriate fee
// based on current chain conditions
MpoolPushMessage(ctx context.Context, msg *types.Message, spec *MessageSendSpec) (*types.SignedMessage, error)
// MpoolGetNonce gets next nonce for the specified sender.
// Note that this method may not be atomic. Use MpoolPushMessage instead.
MpoolGetNonce(context.Context, address.Address) (uint64, error)
MpoolSub(context.Context) (<-chan MpoolUpdate, error)
MpoolEstimateGasPrice(context.Context, uint64, address.Address, int64, types.TipSetKey) (types.BigInt, error)
// FullNodeStruct
// MpoolClear clears pending messages from the mpool
MpoolClear(context.Context, bool) error
// miner
// MpoolGetConfig returns (a copy of) the current mpool config
MpoolGetConfig(context.Context) (*types.MpoolConfig, error)
// MpoolSetConfig sets the mpool config to (a copy of) the supplied config
MpoolSetConfig(context.Context, *types.MpoolConfig) error
// MethodGroup: Miner
MinerGetBaseInfo(context.Context, address.Address, abi.ChainEpoch, types.TipSetKey) (*MiningBaseInfo, error)
MinerCreateBlock(context.Context, *BlockTemplate) (*types.BlockMsg, error)
// // UX ?
// wallet
// MethodGroup: Wallet
// WalletNew creates a new address in the wallet with the given sigType.
WalletNew(context.Context, crypto.SigType) (address.Address, error)
// WalletHas indicates whether the given address is in the wallet.
WalletHas(context.Context, address.Address) (bool, error)
// WalletList lists all the addresses in the wallet.
WalletList(context.Context) ([]address.Address, error)
// WalletBalance returns the balance of the given address at the current head of the chain.
WalletBalance(context.Context, address.Address) (types.BigInt, error)
// WalletSign signs the given bytes using the given address.
WalletSign(context.Context, address.Address, []byte) (*crypto.Signature, error)
// WalletSignMessage signs the given message using the given address.
WalletSignMessage(context.Context, address.Address, *types.Message) (*types.SignedMessage, error)
// WalletVerify takes an address, a signature, and some bytes, and indicates whether the signature is valid.
// The address does not have to be in the wallet.
WalletVerify(context.Context, address.Address, []byte, *crypto.Signature) bool
// WalletDefaultAddress returns the address marked as default in the wallet.
WalletDefaultAddress(context.Context) (address.Address, error)
// WalletSetDefault marks the given address as as the default one.
WalletSetDefault(context.Context, address.Address) error
// WalletExport returns the private key of an address in the wallet.
WalletExport(context.Context, address.Address) (*types.KeyInfo, error)
// WalletImport receives a KeyInfo, which includes a private key, and imports it into the wallet.
WalletImport(context.Context, *types.KeyInfo) (address.Address, error)
// WalletDelete deletes an address from the wallet.
WalletDelete(context.Context, address.Address) error
// Other
// ClientImport imports file under the specified path into filestore
ClientImport(ctx context.Context, ref FileRef) (cid.Cid, error)
// MethodGroup: Client
// The Client methods all have to do with interacting with the storage and
// retrieval markets as a client
// ClientImport imports file under the specified path into filestore.
ClientImport(ctx context.Context, ref FileRef) (*ImportRes, error)
// ClientRemoveImport removes file import
ClientRemoveImport(ctx context.Context, importID multistore.StoreID) error
// ClientStartDeal proposes a deal with a miner.
ClientStartDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error)
// ClientGetDealInfo returns the latest information about a given deal.
ClientGetDealInfo(context.Context, cid.Cid) (*DealInfo, error)
// ClientListDeals returns information about the deals made by the local client.
ClientListDeals(ctx context.Context) ([]DealInfo, error)
// ClientGetDealUpdates returns the status of updated deals
ClientGetDealUpdates(ctx context.Context) (<-chan DealInfo, error)
// ClientHasLocal indicates whether a certain CID is locally stored.
ClientHasLocal(ctx context.Context, root cid.Cid) (bool, error)
ClientFindData(ctx context.Context, root cid.Cid) ([]QueryOffer, error)
ClientRetrieve(ctx context.Context, order RetrievalOrder, ref FileRef) error
// ClientFindData identifies peers that have a certain file, and returns QueryOffers (one per peer).
ClientFindData(ctx context.Context, root cid.Cid, piece *cid.Cid) ([]QueryOffer, error)
// ClientMinerQueryOffer returns a QueryOffer for the specific miner and file.
ClientMinerQueryOffer(ctx context.Context, miner address.Address, root cid.Cid, piece *cid.Cid) (QueryOffer, error)
// ClientRetrieve initiates the retrieval of a file, as specified in the order.
ClientRetrieve(ctx context.Context, order RetrievalOrder, ref *FileRef) error
// ClientRetrieveWithEvents initiates the retrieval of a file, as specified in the order, and provides a channel
// of status updates.
ClientRetrieveWithEvents(ctx context.Context, order RetrievalOrder, ref *FileRef) (<-chan marketevents.RetrievalEvent, error)
// ClientQueryAsk returns a signed StorageAsk from the specified miner.
ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.SignedStorageAsk, error)
ClientCalcCommP(ctx context.Context, inpath string, miner address.Address) (*CommPRet, error)
// ClientCalcCommP calculates the CommP for a specified file
ClientCalcCommP(ctx context.Context, inpath string) (*CommPRet, error)
// ClientGenCar generates a CAR file for the specified file.
ClientGenCar(ctx context.Context, ref FileRef, outpath string) error
// ClientDealSize calculates real deal data size
ClientDealSize(ctx context.Context, root cid.Cid) (DataSize, error)
// ClientListTransfers returns the status of all ongoing transfers of data
ClientListDataTransfers(ctx context.Context) ([]DataTransferChannel, error)
ClientDataTransferUpdates(ctx context.Context) (<-chan DataTransferChannel, error)
// ClientRetrieveTryRestartInsufficientFunds attempts to restart stalled retrievals on a given payment channel
// which are stuck due to insufficient funds
ClientRetrieveTryRestartInsufficientFunds(ctx context.Context, paymentChannel address.Address) error
// ClientUnimport removes references to the specified file from filestore
//ClientUnimport(path string)
@@ -112,61 +295,179 @@ type FullNode interface {
//ClientListAsks() []Ask
// if tipset is nil, we'll use heaviest
// MethodGroup: State
// The State methods are used to query, inspect, and interact with chain state.
// All methods take a TipSetKey as a parameter. The state looked up is the state at that tipset.
// A nil TipSetKey can be provided as a param, this will cause the heaviest tipset in the chain to be used.
// StateCall runs the given message and returns its result without any persisted changes.
StateCall(context.Context, *types.Message, types.TipSetKey) (*InvocResult, error)
// StateReplay returns the result of executing the indicated message, assuming it was executed in the indicated tipset.
StateReplay(context.Context, types.TipSetKey, cid.Cid) (*InvocResult, error)
// StateGetActor returns the indicated actor's nonce and balance.
StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error)
StateReadState(ctx context.Context, act *types.Actor, tsk types.TipSetKey) (*ActorState, error)
// StateReadState returns the indicated actor's state.
StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error)
// StateListMessages looks back and returns all messages with a matching to or from address, stopping at the given height.
StateListMessages(ctx context.Context, match *types.Message, tsk types.TipSetKey, toht abi.ChainEpoch) ([]cid.Cid, error)
// StateNetworkName returns the name of the network the node is synced to
StateNetworkName(context.Context) (dtypes.NetworkName, error)
StateMinerSectors(context.Context, address.Address, *abi.BitField, bool, types.TipSetKey) ([]*ChainSectorInfo, error)
StateMinerProvingSet(context.Context, address.Address, types.TipSetKey) ([]*ChainSectorInfo, error)
StateMinerProvingDeadline(context.Context, address.Address, types.TipSetKey) (*miner.DeadlineInfo, error)
// StateMinerSectors returns info about the given miner's sectors. If the filter bitfield is nil, all sectors are included.
// If the filterOut boolean is set to true, any sectors in the filter are excluded.
// If false, only those sectors in the filter are included.
StateMinerSectors(context.Context, address.Address, *bitfield.BitField, bool, types.TipSetKey) ([]*ChainSectorInfo, error)
// StateMinerActiveSectors returns info about sectors that a given miner is actively proving.
StateMinerActiveSectors(context.Context, address.Address, types.TipSetKey) ([]*ChainSectorInfo, error)
// StateMinerProvingDeadline calculates the deadline at some epoch for a proving period
// and returns the deadline-related calculations.
StateMinerProvingDeadline(context.Context, address.Address, types.TipSetKey) (*dline.Info, error)
// StateMinerPower returns the power of the indicated miner
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error)
StateMinerInfo(context.Context, address.Address, types.TipSetKey) (miner.MinerInfo, error)
StateMinerDeadlines(context.Context, address.Address, types.TipSetKey) (*miner.Deadlines, error)
StateMinerFaults(context.Context, address.Address, types.TipSetKey) ([]abi.SectorNumber, error)
StateMinerInitialPledgeCollateral(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (types.BigInt, error)
// StateMinerInfo returns info about the indicated miner
StateMinerInfo(context.Context, address.Address, types.TipSetKey) (MinerInfo, error)
// StateMinerDeadlines returns all the proving deadlines for the given miner
StateMinerDeadlines(context.Context, address.Address, types.TipSetKey) ([]*miner.Deadline, error)
// StateMinerPartitions loads miner partitions for the specified miner/deadline
StateMinerPartitions(context.Context, address.Address, uint64, types.TipSetKey) ([]*miner.Partition, error)
// StateMinerFaults returns a bitfield indicating the faulty sectors of the given miner
StateMinerFaults(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error)
// StateAllMinerFaults returns all non-expired Faults that occur within lookback epochs of the given tipset
StateAllMinerFaults(ctx context.Context, lookback abi.ChainEpoch, ts types.TipSetKey) ([]*Fault, error)
// StateMinerRecoveries returns a bitfield indicating the recovering sectors of the given miner
StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error)
// StateMinerInitialPledgeCollateral returns the precommit deposit for the specified miner's sector
StateMinerPreCommitDepositForPower(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error)
// StateMinerInitialPledgeCollateral returns the initial pledge collateral for the specified miner's sector
StateMinerInitialPledgeCollateral(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error)
// StateMinerAvailableBalance returns the portion of a miner's balance that can be withdrawn or spent
StateMinerAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error)
// StateSectorPreCommitInfo returns the PreCommit info for the specified miner's sector
StateSectorPreCommitInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error)
StatePledgeCollateral(context.Context, types.TipSetKey) (types.BigInt, error)
StateWaitMsg(context.Context, cid.Cid) (*MsgLookup, error)
// StateSectorGetInfo returns the on-chain info for the specified miner's sector. Returns null in case the sector info isn't found
// NOTE: returned info.Expiration may not be accurate in some cases, use StateSectorExpiration to get accurate
// expiration epoch
StateSectorGetInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorOnChainInfo, error)
// StateSectorExpiration returns epoch at which given sector will expire
StateSectorExpiration(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*SectorExpiration, error)
// StateSectorPartition finds deadline/partition with the specified sector
StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tok types.TipSetKey) (*SectorLocation, error)
// StateSearchMsg searches for a message in the chain, and returns its receipt and the tipset where it was executed
StateSearchMsg(context.Context, cid.Cid) (*MsgLookup, error)
// StateMsgGasCost searches for a message in the chain, and returns details of the messages gas costs, including the penalty and miner tip
StateMsgGasCost(context.Context, cid.Cid, types.TipSetKey) (*MsgGasCost, error)
// StateWaitMsg looks back in the chain for a message. If not found, it blocks until the
// message arrives on chain, and gets to the indicated confidence depth.
StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64) (*MsgLookup, error)
// StateListMiners returns the addresses of every miner that has claimed power in the Power Actor
StateListMiners(context.Context, types.TipSetKey) ([]address.Address, error)
// StateListActors returns the addresses of every actor in the state
StateListActors(context.Context, types.TipSetKey) ([]address.Address, error)
// StateMarketBalance looks up the Escrow and Locked balances of the given address in the Storage Market
StateMarketBalance(context.Context, address.Address, types.TipSetKey) (MarketBalance, error)
// StateMarketParticipants returns the Escrow and Locked balances of every participant in the Storage Market
StateMarketParticipants(context.Context, types.TipSetKey) (map[string]MarketBalance, error)
// StateMarketDeals returns information about every deal in the Storage Market
StateMarketDeals(context.Context, types.TipSetKey) (map[string]MarketDeal, error)
// StateMarketStorageDeal returns information about the indicated deal
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error)
// StateLookupID retrieves the ID address of the given address
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error)
// StateAccountKey returns the public key address of the given ID address
StateAccountKey(context.Context, address.Address, types.TipSetKey) (address.Address, error)
// StateChangedActors returns all the actors whose states change between the two given state CIDs
// TODO: Should this take tipset keys instead?
StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error)
// StateGetReceipt returns the message receipt for the given message
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
// StateMinerSectorCount returns the number of sectors in a miner's sector set and proving set
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error)
// StateCompute is a flexible command that applies the given messages on the given tipset.
// The messages are run as though the VM were at the provided height.
StateCompute(context.Context, abi.ChainEpoch, []*types.Message, types.TipSetKey) (*ComputeStateOutput, error)
// StateVerifiedClientStatus returns the data cap for the given address.
// Returns nil if there is no entry in the data cap table for the
// address.
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*verifreg.DataCap, error)
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
// can issue. It takes the deal size and verified status as parameters.
StateDealProviderCollateralBounds(context.Context, abi.PaddedPieceSize, bool, types.TipSetKey) (DealCollateralBounds, error)
// StateCirculatingSupply returns the circulating supply of Filecoin at the given tipset
StateCirculatingSupply(context.Context, types.TipSetKey) (CirculatingSupply, error)
// MethodGroup: Msig
// The Msig methods are used to interact with multisig wallets on the
// filecoin network
// MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent
MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error)
MsigCreate(context.Context, int64, []address.Address, types.BigInt, address.Address, types.BigInt) (cid.Cid, error)
// MsigGetVested returns the amount of FIL that vested in a multisig in a certain period.
// It takes the following params: <multisig address>, <start epoch>, <end epoch>
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error)
// MsigCreate creates a multisig wallet
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
//<initial balance>, <sender address of the create msg>, <gas price>
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error)
// MsigPropose proposes a multisig message
// It takes the following params: <multisig address>, <recipient address>, <value to transfer>,
// <sender address of the propose msg>, <method to call in the proposed message>, <params to include in the proposed message>
MsigPropose(context.Context, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
// MsigApprove approves a previously-proposed multisig message
// It takes the following params: <multisig address>, <proposed message ID>, <proposer address>, <recipient address>, <value to transfer>,
// <sender address of the approve msg>, <method to call in the proposed message>, <params to include in the proposed message>
MsigApprove(context.Context, address.Address, uint64, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
MsigCancel(context.Context, address.Address, uint64, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
// MsigCancel cancels a previously-proposed multisig message
// It takes the following params: <multisig address>, <proposed message ID>, <recipient address>, <value to transfer>,
// <sender address of the cancel msg>, <method to call in the proposed message>, <params to include in the proposed message>
MsigCancel(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
// MsigAddPropose proposes adding a signer in the multisig
// It takes the following params: <multisig address>, <sender address of the propose msg>,
// <new signer>, <whether the number of required signers should be increased>
MsigAddPropose(context.Context, address.Address, address.Address, address.Address, bool) (cid.Cid, error)
// MsigAddApprove approves a previously proposed AddSigner message
// It takes the following params: <multisig address>, <sender address of the approve msg>, <proposed message ID>,
// <proposer address>, <new signer>, <whether the number of required signers should be increased>
MsigAddApprove(context.Context, address.Address, address.Address, uint64, address.Address, address.Address, bool) (cid.Cid, error)
// MsigAddCancel cancels a previously proposed AddSigner message
// It takes the following params: <multisig address>, <sender address of the cancel msg>, <proposed message ID>,
// <new signer>, <whether the number of required signers should be increased>
MsigAddCancel(context.Context, address.Address, address.Address, uint64, address.Address, bool) (cid.Cid, error)
// MsigSwapPropose proposes swapping 2 signers in the multisig
// It takes the following params: <multisig address>, <sender address of the propose msg>,
// <old signer>, <new signer>
MsigSwapPropose(context.Context, address.Address, address.Address, address.Address, address.Address) (cid.Cid, error)
// MsigSwapApprove approves a previously proposed SwapSigner
// It takes the following params: <multisig address>, <sender address of the approve msg>, <proposed message ID>,
// <proposer address>, <old signer>, <new signer>
MsigSwapApprove(context.Context, address.Address, address.Address, uint64, address.Address, address.Address, address.Address) (cid.Cid, error)
// MsigSwapCancel cancels a previously proposed SwapSigner message
// It takes the following params: <multisig address>, <sender address of the cancel msg>, <proposed message ID>,
// <old signer>, <new signer>
MsigSwapCancel(context.Context, address.Address, address.Address, uint64, address.Address, address.Address) (cid.Cid, error)
MarketEnsureAvailable(context.Context, address.Address, address.Address, types.BigInt) (cid.Cid, error)
// MarketFreeBalance
PaychGet(ctx context.Context, from, to address.Address, ensureFunds types.BigInt) (*ChannelInfo, error)
// MethodGroup: Paych
// The Paych methods are for interacting with and managing payment channels
PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt) (*ChannelInfo, error)
PaychGetWaitReady(context.Context, cid.Cid) (address.Address, error)
PaychAvailableFunds(ctx context.Context, ch address.Address) (*ChannelAvailableFunds, error)
PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*ChannelAvailableFunds, error)
PaychList(context.Context) ([]address.Address, error)
PaychStatus(context.Context, address.Address) (*PaychStatus, error)
PaychClose(context.Context, address.Address) (cid.Cid, error)
PaychSettle(context.Context, address.Address) (cid.Cid, error)
PaychCollect(context.Context, address.Address) (cid.Cid, error)
PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error)
PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []VoucherSpec) (*PaymentInfo, error)
PaychVoucherCheckValid(context.Context, address.Address, *paych.SignedVoucher) error
PaychVoucherCheckSpendable(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (bool, error)
PaychVoucherCreate(context.Context, address.Address, types.BigInt, uint64) (*paych.SignedVoucher, error)
PaychVoucherCreate(context.Context, address.Address, types.BigInt, uint64) (*VoucherCreateResult, error)
PaychVoucherAdd(context.Context, address.Address, *paych.SignedVoucher, []byte, types.BigInt) (types.BigInt, error)
PaychVoucherList(context.Context, address.Address) ([]*paych.SignedVoucher, error)
PaychVoucherSubmit(context.Context, address.Address, *paych.SignedVoucher) (cid.Cid, error)
PaychVoucherSubmit(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (cid.Cid, error)
}
type FileRef struct {
@@ -175,15 +476,35 @@ type FileRef struct {
}
type MinerSectors struct {
Sset uint64
Pset uint64
Sectors uint64
Active uint64
}
type SectorExpiration struct {
OnTime abi.ChainEpoch
// non-zero if sector is faulty, epoch at which it will be permanently
// removed if it doesn't recover
Early abi.ChainEpoch
}
type SectorLocation struct {
Deadline uint64
Partition uint64
}
type ImportRes struct {
Root cid.Cid
ImportID multistore.StoreID
}
type Import struct {
Status filestore.Status
Key cid.Cid
Key multistore.StoreID
Err string
Root *cid.Cid
Source string
FilePath string
Size uint64
}
type DealInfo struct {
@@ -192,6 +513,7 @@ type DealInfo struct {
Message string // more information about deal state, particularly errors
Provider address.Address
DataRef *storagemarket.DataRef
PieceCID cid.Cid
Size uint64
@@ -199,11 +521,27 @@ type DealInfo struct {
Duration uint64
DealID abi.DealID
CreationTime time.Time
}
type MsgLookup struct {
Receipt types.MessageReceipt
TipSet *types.TipSet
Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed
Receipt types.MessageReceipt
ReturnDec interface{}
TipSet types.TipSetKey
Height abi.ChainEpoch
}
type MsgGasCost struct {
Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed
GasUsed abi.TokenAmount
BaseFeeBurn abi.TokenAmount
OverEstimationBurn abi.TokenAmount
MinerPenalty abi.TokenAmount
MinerTip abi.TokenAmount
Refund abi.TokenAmount
TotalCost abi.TokenAmount
}
type BlockMessages struct {
@@ -242,14 +580,36 @@ type PaychStatus struct {
}
type ChannelInfo struct {
Channel address.Address
ChannelMessage cid.Cid
Channel address.Address
WaitSentinel cid.Cid
}
type ChannelAvailableFunds struct {
// Channel is the address of the channel
Channel *address.Address
// From is the from address of the channel (channel creator)
From address.Address
// To is the to address of the channel
To address.Address
// ConfirmedAmt is the amount of funds that have been confirmed on-chain
// for the channel
ConfirmedAmt types.BigInt
// PendingAmt is the amount of funds that are pending confirmation on-chain
PendingAmt types.BigInt
// PendingWaitSentinel can be used with PaychGetWaitReady to wait for
// confirmation of pending funds
PendingWaitSentinel *cid.Cid
// QueuedAmt is the amount that is queued up behind a pending request
QueuedAmt types.BigInt
// VoucherRedeemedAmt is the amount that is redeemed by vouchers on-chain
// and in the local datastore
VoucherReedeemedAmt types.BigInt
}
type PaymentInfo struct {
Channel address.Address
ChannelMessage *cid.Cid
Vouchers []*paych.SignedVoucher
Channel address.Address
WaitSentinel cid.Cid
Vouchers []*paych.SignedVoucher
}
type VoucherSpec struct {
@@ -261,6 +621,16 @@ type VoucherSpec struct {
Extra *paych.ModVerifyParams
}
// VoucherCreateResult is the response to calling PaychVoucherCreate
type VoucherCreateResult struct {
// Voucher that was created, or nil if there was an error or if there
// were insufficient funds in the channel
Voucher *paych.SignedVoucher
// Shortfall is the additional amount that would be needed in the channel
// in order to be able to create the voucher
Shortfall types.BigInt
}
type MinerPower struct {
MinerPower power.Claim
TotalPower power.Claim
@@ -269,27 +639,31 @@ type MinerPower struct {
type QueryOffer struct {
Err string
Root cid.Cid
Root cid.Cid
Piece *cid.Cid
Size uint64
MinPrice types.BigInt
UnsealPrice types.BigInt
PaymentInterval uint64
PaymentIntervalIncrease uint64
Miner address.Address
MinerPeerID peer.ID
MinerPeer retrievalmarket.RetrievalPeer
}
func (o *QueryOffer) Order(client address.Address) RetrievalOrder {
return RetrievalOrder{
Root: o.Root,
Piece: o.Piece,
Size: o.Size,
Total: o.MinPrice,
UnsealPrice: o.UnsealPrice,
PaymentInterval: o.PaymentInterval,
PaymentIntervalIncrease: o.PaymentIntervalIncrease,
Client: client,
Miner: o.Miner,
MinerPeerID: o.MinerPeerID,
Miner: o.Miner,
MinerPeer: o.MinerPeer,
}
}
@@ -305,23 +679,25 @@ type MarketDeal struct {
type RetrievalOrder struct {
// TODO: make this less unixfs specific
Root cid.Cid
Size uint64
Root cid.Cid
Piece *cid.Cid
Size uint64
// TODO: support offset
Total types.BigInt
UnsealPrice types.BigInt
PaymentInterval uint64
PaymentIntervalIncrease uint64
Client address.Address
Miner address.Address
MinerPeerID peer.ID
MinerPeer retrievalmarket.RetrievalPeer
}
type InvocResult struct {
Msg *types.Message
MsgRct *types.MessageReceipt
InternalExecutions []*types.ExecutionResult
Error string
Duration time.Duration
Msg *types.Message
MsgRct *types.MessageReceipt
ExecutionTrace types.ExecutionTrace
Error string
Duration time.Duration
}
type MethodCall struct {
@@ -330,12 +706,15 @@ type MethodCall struct {
}
type StartDealParams struct {
Data *storagemarket.DataRef
Wallet address.Address
Miner address.Address
EpochPrice types.BigInt
MinBlocksDuration uint64
DealStartEpoch abi.ChainEpoch
Data *storagemarket.DataRef
Wallet address.Address
Miner address.Address
EpochPrice types.BigInt
MinBlocksDuration uint64
ProviderCollateral big.Int
DealStartEpoch abi.ChainEpoch
FastRetrieval bool
VerifiedDeal bool
}
type IpldObject struct {
@@ -368,8 +747,28 @@ const (
StageMessages
StageSyncComplete
StageSyncErrored
StageFetchingMessages
)
func (v SyncStateStage) String() string {
switch v {
case StageHeaders:
return "header sync"
case StagePersistHeaders:
return "persisting headers"
case StageMessages:
return "message sync"
case StageSyncComplete:
return "complete"
case StageSyncErrored:
return "error"
case StageFetchingMessages:
return "fetching messages"
default:
return fmt.Sprintf("<unknown: %d>", v)
}
}
type MpoolChange int
const (
@@ -387,14 +786,28 @@ type ComputeStateOutput struct {
Trace []*InvocResult
}
type DealCollateralBounds struct {
Min abi.TokenAmount
Max abi.TokenAmount
}
type CirculatingSupply struct {
FilVested abi.TokenAmount
FilMined abi.TokenAmount
FilBurnt abi.TokenAmount
FilLocked abi.TokenAmount
FilCirculating abi.TokenAmount
}
type MiningBaseInfo struct {
MinerPower types.BigInt
NetworkPower types.BigInt
Sectors []abi.SectorInfo
Sectors []proof.SectorInfo
WorkerKey address.Address
SectorSize abi.SectorSize
PrevBeaconEntry types.BeaconEntry
BeaconEntries []types.BeaconEntry
HasMinPower bool
}
type BlockTemplate struct {
@@ -406,7 +819,12 @@ type BlockTemplate struct {
Messages []*types.SignedMessage
Epoch abi.ChainEpoch
Timestamp uint64
WinningPoStProof []abi.PoStProof
WinningPoStProof []proof.PoStProof
}
type DataSize struct {
PayloadSize int64
PieceSize abi.PaddedPieceSize
}
type CommPRet struct {
@@ -424,3 +842,8 @@ const (
MsigApprove MsigProposeResponse = iota
MsigCancel
)
type Fault struct {
Miner address.Address
Epoch abi.ChainEpoch
}
+77 -17
View File
@@ -3,16 +3,19 @@ package api
import (
"bytes"
"context"
"time"
"github.com/ipfs/go-cid"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-fil-markets/piecestore"
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
"github.com/filecoin-project/go-fil-markets/storagemarket"
"github.com/filecoin-project/sector-storage/stores"
"github.com/filecoin-project/sector-storage/storiface"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/extern/sector-storage/fsutil"
"github.com/filecoin-project/lotus/extern/sector-storage/stores"
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
)
// StorageMiner is a low-level interface to the Filecoin network storage miner node
@@ -29,34 +32,75 @@ type StorageMiner interface {
PledgeSector(context.Context) error
// Get the status of a given sector by ID
SectorsStatus(context.Context, abi.SectorNumber) (SectorInfo, error)
SectorsStatus(ctx context.Context, sid abi.SectorNumber, showOnChainInfo bool) (SectorInfo, error)
// List all staged sectors
SectorsList(context.Context) ([]abi.SectorNumber, error)
SectorsRefs(context.Context) (map[string][]SealedRef, error)
// SectorStartSealing can be called on sectors in Empty or WaitDeals states
// to trigger sealing early
SectorStartSealing(context.Context, abi.SectorNumber) error
// SectorSetSealDelay sets the time that a newly-created sector
// waits for more deals before it starts sealing
SectorSetSealDelay(context.Context, time.Duration) error
// SectorGetSealDelay gets the time that a newly-created sector
// waits for more deals before it starts sealing
SectorGetSealDelay(context.Context) (time.Duration, error)
// SectorSetExpectedSealDuration sets the expected time for a sector to seal
SectorSetExpectedSealDuration(context.Context, time.Duration) error
// SectorGetExpectedSealDuration gets the expected time for a sector to seal
SectorGetExpectedSealDuration(context.Context) (time.Duration, error)
SectorsUpdate(context.Context, abi.SectorNumber, SectorState) error
SectorRemove(context.Context, abi.SectorNumber) error
SectorMarkForUpgrade(ctx context.Context, id abi.SectorNumber) error
StorageList(ctx context.Context) (map[stores.ID][]stores.Decl, error)
StorageLocal(ctx context.Context) (map[stores.ID]string, error)
StorageStat(ctx context.Context, id stores.ID) (stores.FsStat, error)
StorageStat(ctx context.Context, id stores.ID) (fsutil.FsStat, error)
// WorkerConnect tells the node to connect to workers RPC
WorkerConnect(context.Context, string) error
WorkerStats(context.Context) (map[uint64]storiface.WorkerStats, error)
WorkerJobs(context.Context) (map[uint64][]storiface.WorkerJob, error)
// SealingSchedDiag dumps internal sealing scheduler state
SealingSchedDiag(context.Context) (interface{}, error)
stores.SectorIndex
MarketImportDealData(ctx context.Context, propcid cid.Cid, path string) error
MarketListDeals(ctx context.Context) ([]storagemarket.StorageDeal, error)
MarketListRetrievalDeals(ctx context.Context) ([]retrievalmarket.ProviderDealState, error)
MarketGetDealUpdates(ctx context.Context) (<-chan storagemarket.MinerDeal, error)
MarketListIncompleteDeals(ctx context.Context) ([]storagemarket.MinerDeal, error)
MarketSetPrice(context.Context, types.BigInt) error
MarketSetAsk(ctx context.Context, price types.BigInt, verifiedPrice types.BigInt, duration abi.ChainEpoch, minPieceSize abi.PaddedPieceSize, maxPieceSize abi.PaddedPieceSize) error
MarketGetAsk(ctx context.Context) (*storagemarket.SignedStorageAsk, error)
MarketSetRetrievalAsk(ctx context.Context, rask *retrievalmarket.Ask) error
MarketGetRetrievalAsk(ctx context.Context) (*retrievalmarket.Ask, error)
MarketListDataTransfers(ctx context.Context) ([]DataTransferChannel, error)
MarketDataTransferUpdates(ctx context.Context) (<-chan DataTransferChannel, error)
DealsImportData(ctx context.Context, dealPropCid cid.Cid, file string) error
DealsList(ctx context.Context) ([]storagemarket.StorageDeal, error)
DealsConsiderOnlineStorageDeals(context.Context) (bool, error)
DealsSetConsiderOnlineStorageDeals(context.Context, bool) error
DealsConsiderOnlineRetrievalDeals(context.Context) (bool, error)
DealsSetConsiderOnlineRetrievalDeals(context.Context, bool) error
DealsPieceCidBlocklist(context.Context) ([]cid.Cid, error)
DealsSetPieceCidBlocklist(context.Context, []cid.Cid) error
DealsConsiderOfflineStorageDeals(context.Context) (bool, error)
DealsSetConsiderOfflineStorageDeals(context.Context, bool) error
DealsConsiderOfflineRetrievalDeals(context.Context) (bool, error)
DealsSetConsiderOfflineRetrievalDeals(context.Context, bool) error
StorageAddLocal(ctx context.Context, path string) error
PiecesListPieces(ctx context.Context) ([]cid.Cid, error)
PiecesListCidInfos(ctx context.Context) ([]cid.Cid, error)
PiecesGetPieceInfo(ctx context.Context, pieceCid cid.Cid) (*piecestore.PieceInfo, error)
PiecesGetCIDInfo(ctx context.Context, payloadCid cid.Cid) (*piecestore.CIDInfo, error)
}
type SealRes struct {
@@ -76,24 +120,40 @@ type SectorLog struct {
}
type SectorInfo struct {
SectorID abi.SectorNumber
State SectorState
CommD *cid.Cid
CommR *cid.Cid
Proof []byte
Deals []abi.DealID
Ticket SealTicket
Seed SealSeed
Retries uint64
SectorID abi.SectorNumber
State SectorState
CommD *cid.Cid
CommR *cid.Cid
Proof []byte
Deals []abi.DealID
Ticket SealTicket
Seed SealSeed
PreCommitMsg *cid.Cid
CommitMsg *cid.Cid
Retries uint64
ToUpgrade bool
LastErr string
Log []SectorLog
// On Chain Info
SealProof abi.RegisteredSealProof // The seal proof type implies the PoSt proof/s
Activation abi.ChainEpoch // Epoch during which the sector proof was accepted
Expiration abi.ChainEpoch // Epoch during which the sector expires
DealWeight abi.DealWeight // Integral of active deals over sector lifetime
VerifiedDealWeight abi.DealWeight // Integral of active verified deals over sector lifetime
InitialPledge abi.TokenAmount // Pledge collected to commit this sector
// Expiration Info
OnTime abi.ChainEpoch
// non-zero if sector is faulty, epoch at which it will be permanently
// removed if it doesn't recover
Early abi.ChainEpoch
}
type SealedRef struct {
SectorID abi.SectorNumber
Offset uint64
Offset abi.PaddedPieceSize
Size abi.UnpaddedPieceSize
}
+19 -6
View File
@@ -2,17 +2,20 @@ package api
import (
"context"
"io"
"github.com/filecoin-project/sector-storage/sealtasks"
"github.com/filecoin-project/sector-storage/stores"
"github.com/filecoin-project/sector-storage/storiface"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/ipfs/go-cid"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/extern/sector-storage/sealtasks"
"github.com/filecoin-project/lotus/extern/sector-storage/stores"
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
"github.com/filecoin-project/specs-storage/storage"
"github.com/filecoin-project/lotus/build"
)
type WorkerApi interface {
type WorkerAPI interface {
Version(context.Context) (build.Version, error)
// TODO: Info() (name, ...) ?
@@ -20,8 +23,18 @@ type WorkerApi interface {
Paths(context.Context) ([]stores.StoragePath, error)
Info(context.Context) (storiface.WorkerInfo, error)
AddPiece(ctx context.Context, sector abi.SectorID, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage.Data) (abi.PieceInfo, error)
storage.Sealer
Fetch(context.Context, abi.SectorID, stores.SectorFileType, bool) error
MoveStorage(ctx context.Context, sector abi.SectorID, types stores.SectorFileType) error
UnsealPiece(context.Context, abi.SectorID, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) error
ReadPiece(context.Context, io.Writer, abi.SectorID, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize) (bool, error)
StorageAddLocal(ctx context.Context, path string) error
Fetch(context.Context, abi.SectorID, stores.SectorFileType, stores.PathType, stores.AcquireMode) error
Closing(context.Context) (<-chan struct{}, error)
}
+2 -1
View File
@@ -5,8 +5,9 @@ import (
blocks "github.com/ipfs/go-block-format"
"github.com/ipfs/go-cid"
blockstore "github.com/ipfs/go-ipfs-blockstore"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/lib/blockstore"
)
type ChainIO interface {
+13 -86
View File
@@ -1,111 +1,38 @@
package apistruct
import (
"context"
"reflect"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-jsonrpc/auth"
"github.com/filecoin-project/lotus/api"
)
type permKey int
var permCtxKey permKey
const (
// When changing these, update docs/API.md too
PermRead api.Permission = "read" // default
PermWrite api.Permission = "write"
PermSign api.Permission = "sign" // Use wallet keys for signing
PermAdmin api.Permission = "admin" // Manage permissions
PermRead auth.Permission = "read" // default
PermWrite auth.Permission = "write"
PermSign auth.Permission = "sign" // Use wallet keys for signing
PermAdmin auth.Permission = "admin" // Manage permissions
)
var AllPermissions = []api.Permission{PermRead, PermWrite, PermSign, PermAdmin}
var defaultPerms = []api.Permission{PermRead}
func WithPerm(ctx context.Context, perms []api.Permission) context.Context {
return context.WithValue(ctx, permCtxKey, perms)
}
var AllPermissions = []auth.Permission{PermRead, PermWrite, PermSign, PermAdmin}
var DefaultPerms = []auth.Permission{PermRead}
func PermissionedStorMinerAPI(a api.StorageMiner) api.StorageMiner {
var out StorageMinerStruct
permissionedAny(a, &out.Internal)
permissionedAny(a, &out.CommonStruct.Internal)
auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal)
auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.CommonStruct.Internal)
return &out
}
func PermissionedFullAPI(a api.FullNode) api.FullNode {
var out FullNodeStruct
permissionedAny(a, &out.Internal)
permissionedAny(a, &out.CommonStruct.Internal)
auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal)
auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.CommonStruct.Internal)
return &out
}
func PermissionedWorkerAPI(a api.WorkerApi) api.WorkerApi {
func PermissionedWorkerAPI(a api.WorkerAPI) api.WorkerAPI {
var out WorkerStruct
permissionedAny(a, &out.Internal)
auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal)
return &out
}
func HasPerm(ctx context.Context, perm api.Permission) bool {
callerPerms, ok := ctx.Value(permCtxKey).([]api.Permission)
if !ok {
callerPerms = defaultPerms
}
for _, callerPerm := range callerPerms {
if callerPerm == perm {
return true
}
}
return false
}
func permissionedAny(in interface{}, out interface{}) {
rint := reflect.ValueOf(out).Elem()
ra := reflect.ValueOf(in)
for f := 0; f < rint.NumField(); f++ {
field := rint.Type().Field(f)
requiredPerm := api.Permission(field.Tag.Get("perm"))
if requiredPerm == "" {
panic("missing 'perm' tag on " + field.Name) // ok
}
// Validate perm tag
ok := false
for _, perm := range AllPermissions {
if requiredPerm == perm {
ok = true
break
}
}
if !ok {
panic("unknown 'perm' tag on " + field.Name) // ok
}
fn := ra.MethodByName(field.Name)
rint.Field(f).Set(reflect.MakeFunc(field.Type, func(args []reflect.Value) (results []reflect.Value) {
ctx := args[0].Interface().(context.Context)
if HasPerm(ctx, requiredPerm) {
return fn.Call(args)
}
err := xerrors.Errorf("missing permission to invoke '%s' (need '%s')", field.Name, requiredPerm)
rerr := reflect.ValueOf(&err).Elem()
if field.Type.NumOut() == 2 {
return []reflect.Value{
reflect.Zero(field.Type.Out(0)),
rerr,
}
} else {
return []reflect.Value{rerr}
}
}))
}
}
+647 -183
View File
File diff suppressed because it is too large Load Diff
+51 -51
View File
@@ -6,8 +6,8 @@ import (
"fmt"
"io"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
abi "github.com/filecoin-project/go-state-types/abi"
paych "github.com/filecoin-project/specs-actors/actors/builtin/paych"
cbg "github.com/whyrusleeping/cbor-gen"
xerrors "golang.org/x/xerrors"
)
@@ -33,7 +33,7 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Channel"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Channel"); err != nil {
if _, err := io.WriteString(w, string("Channel")); err != nil {
return err
}
@@ -41,26 +41,20 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
return err
}
// t.ChannelMessage (cid.Cid) (struct)
if len("ChannelMessage") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"ChannelMessage\" was too long")
// t.WaitSentinel (cid.Cid) (struct)
if len("WaitSentinel") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"WaitSentinel\" was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("ChannelMessage"))); err != nil {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("WaitSentinel"))); err != nil {
return err
}
if _, err := io.WriteString(w, "ChannelMessage"); err != nil {
if _, err := io.WriteString(w, string("WaitSentinel")); err != nil {
return err
}
if t.ChannelMessage == nil {
if _, err := w.Write(cbg.CborNull); err != nil {
return err
}
} else {
if err := cbg.WriteCidBuf(scratch, w, *t.ChannelMessage); err != nil {
return xerrors.Errorf("failed to write cid field t.ChannelMessage: %w", err)
}
if err := cbg.WriteCidBuf(scratch, w, t.WaitSentinel); err != nil {
return xerrors.Errorf("failed to write cid field t.WaitSentinel: %w", err)
}
// t.Vouchers ([]*paych.SignedVoucher) (slice)
@@ -71,7 +65,7 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Vouchers"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Vouchers"); err != nil {
if _, err := io.WriteString(w, string("Vouchers")); err != nil {
return err
}
@@ -91,6 +85,8 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
}
func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) error {
*t = PaymentInfo{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -131,29 +127,17 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) error {
}
}
// t.ChannelMessage (cid.Cid) (struct)
case "ChannelMessage":
// t.WaitSentinel (cid.Cid) (struct)
case "WaitSentinel":
{
pb, err := br.PeekByte()
c, err := cbg.ReadCid(br)
if err != nil {
return err
return xerrors.Errorf("failed to read cid field t.WaitSentinel: %w", err)
}
if pb == cbg.CborNull[0] {
var nbuf [1]byte
if _, err := br.Read(nbuf[:]); err != nil {
return err
}
} else {
c, err := cbg.ReadCid(br)
if err != nil {
return xerrors.Errorf("failed to read cid field t.ChannelMessage: %w", err)
}
t.ChannelMessage = &c
}
t.WaitSentinel = c
}
// t.Vouchers ([]*paych.SignedVoucher) (slice)
@@ -212,7 +196,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("SectorID"))); err != nil {
return err
}
if _, err := io.WriteString(w, "SectorID"); err != nil {
if _, err := io.WriteString(w, string("SectorID")); err != nil {
return err
}
@@ -220,7 +204,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
return err
}
// t.Offset (uint64) (uint64)
// t.Offset (abi.PaddedPieceSize) (uint64)
if len("Offset") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Offset\" was too long")
}
@@ -228,7 +212,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Offset"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Offset"); err != nil {
if _, err := io.WriteString(w, string("Offset")); err != nil {
return err
}
@@ -244,7 +228,7 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Size"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Size"); err != nil {
if _, err := io.WriteString(w, string("Size")); err != nil {
return err
}
@@ -256,6 +240,8 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
}
func (t *SealedRef) UnmarshalCBOR(r io.Reader) error {
*t = SealedRef{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -301,7 +287,7 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) error {
t.SectorID = abi.SectorNumber(extra)
}
// t.Offset (uint64) (uint64)
// t.Offset (abi.PaddedPieceSize) (uint64)
case "Offset":
{
@@ -313,7 +299,7 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) error {
if maj != cbg.MajUnsignedInt {
return fmt.Errorf("wrong type for uint64 field")
}
t.Offset = uint64(extra)
t.Offset = abi.PaddedPieceSize(extra)
}
// t.Size (abi.UnpaddedPieceSize) (uint64)
@@ -358,7 +344,7 @@ func (t *SealedRefs) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Refs"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Refs"); err != nil {
if _, err := io.WriteString(w, string("Refs")); err != nil {
return err
}
@@ -378,6 +364,8 @@ func (t *SealedRefs) MarshalCBOR(w io.Writer) error {
}
func (t *SealedRefs) UnmarshalCBOR(r io.Reader) error {
*t = SealedRefs{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -464,7 +452,7 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Value"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Value"); err != nil {
if _, err := io.WriteString(w, string("Value")); err != nil {
return err
}
@@ -476,7 +464,7 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error {
return err
}
if _, err := w.Write(t.Value); err != nil {
if _, err := w.Write(t.Value[:]); err != nil {
return err
}
@@ -488,7 +476,7 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Epoch"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Epoch"); err != nil {
if _, err := io.WriteString(w, string("Epoch")); err != nil {
return err
}
@@ -505,6 +493,8 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error {
}
func (t *SealTicket) UnmarshalCBOR(r io.Reader) error {
*t = SealTicket{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -549,8 +539,12 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) error {
if maj != cbg.MajByteString {
return fmt.Errorf("expected byte array")
}
t.Value = make([]byte, extra)
if _, err := io.ReadFull(br, t.Value); err != nil {
if extra > 0 {
t.Value = make([]uint8, extra)
}
if _, err := io.ReadFull(br, t.Value[:]); err != nil {
return err
}
// t.Epoch (abi.ChainEpoch) (int64)
@@ -606,7 +600,7 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Value"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Value"); err != nil {
if _, err := io.WriteString(w, string("Value")); err != nil {
return err
}
@@ -618,7 +612,7 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error {
return err
}
if _, err := w.Write(t.Value); err != nil {
if _, err := w.Write(t.Value[:]); err != nil {
return err
}
@@ -630,7 +624,7 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("Epoch"))); err != nil {
return err
}
if _, err := io.WriteString(w, "Epoch"); err != nil {
if _, err := io.WriteString(w, string("Epoch")); err != nil {
return err
}
@@ -647,6 +641,8 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error {
}
func (t *SealSeed) UnmarshalCBOR(r io.Reader) error {
*t = SealSeed{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -691,8 +687,12 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) error {
if maj != cbg.MajByteString {
return fmt.Errorf("expected byte array")
}
t.Value = make([]byte, extra)
if _, err := io.ReadFull(br, t.Value); err != nil {
if extra > 0 {
t.Value = make([]uint8, extra)
}
if _, err := io.ReadFull(br, t.Value[:]); err != nil {
return err
}
// t.Epoch (abi.ChainEpoch) (int64)
+35 -11
View File
@@ -1,17 +1,23 @@
package client
import (
"github.com/filecoin-project/lotus/api/apistruct"
"context"
"net/http"
"net/url"
"path"
"time"
"github.com/filecoin-project/go-jsonrpc"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/lib/jsonrpc"
"github.com/filecoin-project/lotus/api/apistruct"
"github.com/filecoin-project/lotus/lib/rpcenc"
)
// NewCommonRPC creates a new http jsonrpc client.
func NewCommonRPC(addr string, requestHeader http.Header) (api.Common, jsonrpc.ClientCloser, error) {
func NewCommonRPC(ctx context.Context, addr string, requestHeader http.Header) (api.Common, jsonrpc.ClientCloser, error) {
var res apistruct.CommonStruct
closer, err := jsonrpc.NewMergeClient(addr, "Filecoin",
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
[]interface{}{
&res.Internal,
},
@@ -22,9 +28,9 @@ func NewCommonRPC(addr string, requestHeader http.Header) (api.Common, jsonrpc.C
}
// NewFullNodeRPC creates a new http jsonrpc client.
func NewFullNodeRPC(addr string, requestHeader http.Header) (api.FullNode, jsonrpc.ClientCloser, error) {
func NewFullNodeRPC(ctx context.Context, addr string, requestHeader http.Header) (api.FullNode, jsonrpc.ClientCloser, error) {
var res apistruct.FullNodeStruct
closer, err := jsonrpc.NewMergeClient(addr, "Filecoin",
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
[]interface{}{
&res.CommonStruct.Internal,
&res.Internal,
@@ -33,27 +39,45 @@ func NewFullNodeRPC(addr string, requestHeader http.Header) (api.FullNode, jsonr
return &res, closer, err
}
// NewStorageMinerRPC creates a new http jsonrpc client for storage miner
func NewStorageMinerRPC(addr string, requestHeader http.Header) (api.StorageMiner, jsonrpc.ClientCloser, error) {
// NewStorageMinerRPC creates a new http jsonrpc client for miner
func NewStorageMinerRPC(ctx context.Context, addr string, requestHeader http.Header, opts ...jsonrpc.Option) (api.StorageMiner, jsonrpc.ClientCloser, error) {
var res apistruct.StorageMinerStruct
closer, err := jsonrpc.NewMergeClient(addr, "Filecoin",
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
[]interface{}{
&res.CommonStruct.Internal,
&res.Internal,
},
requestHeader,
opts...,
)
return &res, closer, err
}
func NewWorkerRPC(addr string, requestHeader http.Header) (api.WorkerApi, jsonrpc.ClientCloser, error) {
func NewWorkerRPC(ctx context.Context, addr string, requestHeader http.Header) (api.WorkerAPI, jsonrpc.ClientCloser, error) {
u, err := url.Parse(addr)
if err != nil {
return nil, nil, err
}
switch u.Scheme {
case "ws":
u.Scheme = "http"
case "wss":
u.Scheme = "https"
}
///rpc/v0 -> /rpc/streams/v0/push
u.Path = path.Join(u.Path, "../streams/v0/push")
var res apistruct.WorkerStruct
closer, err := jsonrpc.NewMergeClient(addr, "Filecoin",
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
[]interface{}{
&res.Internal,
},
requestHeader,
rpcenc.ReaderParamEncoder(u.String()),
jsonrpc.WithNoReconnect(),
jsonrpc.WithTimeout(30*time.Second),
)
return &res, closer, err
+419
View File
@@ -0,0 +1,419 @@
package main
import (
"encoding/json"
"fmt"
"go/ast"
"go/parser"
"go/token"
"reflect"
"sort"
"strings"
"time"
"unicode"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-filestore"
metrics "github.com/libp2p/go-libp2p-core/metrics"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
protocol "github.com/libp2p/go-libp2p-core/protocol"
pubsub "github.com/libp2p/go-libp2p-pubsub"
"github.com/multiformats/go-multiaddr"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
datatransfer "github.com/filecoin-project/go-data-transfer"
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
"github.com/filecoin-project/go-jsonrpc/auth"
"github.com/filecoin-project/go-multistore"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/go-state-types/exitcode"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/api/apistruct"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
var ExampleValues = map[reflect.Type]interface{}{
reflect.TypeOf(auth.Permission("")): auth.Permission("write"),
reflect.TypeOf(""): "string value",
reflect.TypeOf(uint64(42)): uint64(42),
reflect.TypeOf(byte(7)): byte(7),
reflect.TypeOf([]byte{}): []byte("byte array"),
}
func addExample(v interface{}) {
ExampleValues[reflect.TypeOf(v)] = v
}
func init() {
c, err := cid.Decode("bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4")
if err != nil {
panic(err)
}
ExampleValues[reflect.TypeOf(c)] = c
c2, err := cid.Decode("bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve")
if err != nil {
panic(err)
}
tsk := types.NewTipSetKey(c, c2)
ExampleValues[reflect.TypeOf(tsk)] = tsk
addr, err := address.NewIDAddress(1234)
if err != nil {
panic(err)
}
ExampleValues[reflect.TypeOf(addr)] = addr
pid, err := peer.Decode("12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf")
if err != nil {
panic(err)
}
addExample(pid)
addExample(&pid)
addExample(bitfield.NewFromSet([]uint64{5}))
addExample(abi.RegisteredSealProof_StackedDrg32GiBV1)
addExample(abi.RegisteredPoStProof_StackedDrgWindow32GiBV1)
addExample(abi.ChainEpoch(10101))
addExample(crypto.SigTypeBLS)
addExample(int64(9))
addExample(12.3)
addExample(123)
addExample(uintptr(0))
addExample(abi.MethodNum(1))
addExample(exitcode.ExitCode(0))
addExample(crypto.DomainSeparationTag_ElectionProofProduction)
addExample(true)
addExample(abi.UnpaddedPieceSize(1024))
addExample(abi.UnpaddedPieceSize(1024).Padded())
addExample(abi.DealID(5432))
addExample(filestore.StatusFileChanged)
addExample(abi.SectorNumber(9))
addExample(abi.SectorSize(32 * 1024 * 1024 * 1024))
addExample(api.MpoolChange(0))
addExample(network.Connected)
addExample(dtypes.NetworkName("lotus"))
addExample(api.SyncStateStage(1))
addExample(build.FullAPIVersion)
addExample(api.PCHInbound)
addExample(time.Minute)
addExample(datatransfer.TransferID(3))
addExample(datatransfer.Ongoing)
addExample(multistore.StoreID(50))
addExample(retrievalmarket.ClientEventDealAccepted)
addExample(retrievalmarket.DealStatusNew)
addExample(network.ReachabilityPublic)
addExample(&types.ExecutionTrace{
Msg: exampleValue(reflect.TypeOf(&types.Message{}), nil).(*types.Message),
MsgRct: exampleValue(reflect.TypeOf(&types.MessageReceipt{}), nil).(*types.MessageReceipt),
})
addExample(map[string]types.Actor{
"t01236": exampleValue(reflect.TypeOf(types.Actor{}), nil).(types.Actor),
})
addExample(map[string]api.MarketDeal{
"t026363": exampleValue(reflect.TypeOf(api.MarketDeal{}), nil).(api.MarketDeal),
})
addExample(map[string]api.MarketBalance{
"t026363": exampleValue(reflect.TypeOf(api.MarketBalance{}), nil).(api.MarketBalance),
})
addExample(map[string]*pubsub.TopicScoreSnapshot{
"/blocks": {
TimeInMesh: time.Minute,
FirstMessageDeliveries: 122,
MeshMessageDeliveries: 1234,
InvalidMessageDeliveries: 3,
},
})
addExample(map[string]metrics.Stats{
"12D3KooWSXmXLJmBR1M7i9RW9GQPNUhZSzXKzxDHWtAgNuJAbyEJ": {
RateIn: 100,
RateOut: 50,
TotalIn: 174000,
TotalOut: 12500,
},
})
addExample(map[protocol.ID]metrics.Stats{
"/fil/hello/1.0.0": {
RateIn: 100,
RateOut: 50,
TotalIn: 174000,
TotalOut: 12500,
},
})
maddr, err := multiaddr.NewMultiaddr("/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior")
if err != nil {
panic(err)
}
// because reflect.TypeOf(maddr) returns the concrete type...
ExampleValues[reflect.TypeOf(struct{ A multiaddr.Multiaddr }{}).Field(0).Type] = maddr
}
func exampleValue(t, parent reflect.Type) interface{} {
v, ok := ExampleValues[t]
if ok {
return v
}
switch t.Kind() {
case reflect.Slice:
out := reflect.New(t).Elem()
reflect.Append(out, reflect.ValueOf(exampleValue(t.Elem(), t)))
return out.Interface()
case reflect.Chan:
return exampleValue(t.Elem(), nil)
case reflect.Struct:
es := exampleStruct(t, parent)
v := reflect.ValueOf(es).Elem().Interface()
ExampleValues[t] = v
return v
case reflect.Array:
out := reflect.New(t).Elem()
for i := 0; i < t.Len(); i++ {
out.Index(i).Set(reflect.ValueOf(exampleValue(t.Elem(), t)))
}
return out.Interface()
case reflect.Ptr:
if t.Elem().Kind() == reflect.Struct {
es := exampleStruct(t.Elem(), t)
//ExampleValues[t] = es
return es
}
case reflect.Interface:
return struct{}{}
}
panic(fmt.Sprintf("No example value for type: %s", t))
}
func exampleStruct(t, parent reflect.Type) interface{} {
ns := reflect.New(t)
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
if f.Type == parent {
continue
}
if strings.Title(f.Name) == f.Name {
ns.Elem().Field(i).Set(reflect.ValueOf(exampleValue(f.Type, t)))
}
}
return ns.Interface()
}
type Visitor struct {
Methods map[string]ast.Node
}
func (v *Visitor) Visit(node ast.Node) ast.Visitor {
st, ok := node.(*ast.TypeSpec)
if !ok {
return v
}
if st.Name.Name != "FullNode" {
return nil
}
iface := st.Type.(*ast.InterfaceType)
for _, m := range iface.Methods.List {
if len(m.Names) > 0 {
v.Methods[m.Names[0].Name] = m
}
}
return v
}
const noComment = "There are not yet any comments for this method."
func parseApiASTInfo() (map[string]string, map[string]string) { //nolint:golint
fset := token.NewFileSet()
pkgs, err := parser.ParseDir(fset, "./api", nil, parser.AllErrors|parser.ParseComments)
if err != nil {
fmt.Println("parse error: ", err)
}
ap := pkgs["api"]
f := ap.Files["api/api_full.go"]
cmap := ast.NewCommentMap(fset, f, f.Comments)
v := &Visitor{make(map[string]ast.Node)}
ast.Walk(v, pkgs["api"])
groupDocs := make(map[string]string)
out := make(map[string]string)
for mn, node := range v.Methods {
cs := cmap.Filter(node).Comments()
if len(cs) == 0 {
out[mn] = noComment
} else {
for _, c := range cs {
if strings.HasPrefix(c.Text(), "MethodGroup:") {
parts := strings.Split(c.Text(), "\n")
groupName := strings.TrimSpace(parts[0][12:])
comment := strings.Join(parts[1:], "\n")
groupDocs[groupName] = comment
break
}
}
last := cs[len(cs)-1].Text()
if !strings.HasPrefix(last, "MethodGroup:") {
out[mn] = last
} else {
out[mn] = noComment
}
}
}
return out, groupDocs
}
type MethodGroup struct {
GroupName string
Header string
Methods []*Method
}
type Method struct {
Comment string
Name string
InputExample string
ResponseExample string
}
func methodGroupFromName(mn string) string {
i := strings.IndexFunc(mn[1:], func(r rune) bool {
return unicode.IsUpper(r)
})
if i < 0 {
return ""
}
return mn[:i+1]
}
func main() {
comments, groupComments := parseApiASTInfo()
groups := make(map[string]*MethodGroup)
var api struct{ api.FullNode }
t := reflect.TypeOf(api)
for i := 0; i < t.NumMethod(); i++ {
m := t.Method(i)
groupName := methodGroupFromName(m.Name)
g, ok := groups[groupName]
if !ok {
g = new(MethodGroup)
g.Header = groupComments[groupName]
g.GroupName = groupName
groups[groupName] = g
}
var args []interface{}
ft := m.Func.Type()
for j := 2; j < ft.NumIn(); j++ {
inp := ft.In(j)
args = append(args, exampleValue(inp, nil))
}
v, err := json.MarshalIndent(args, "", " ")
if err != nil {
panic(err)
}
outv := exampleValue(ft.Out(0), nil)
ov, err := json.MarshalIndent(outv, "", " ")
if err != nil {
panic(err)
}
g.Methods = append(g.Methods, &Method{
Name: m.Name,
Comment: comments[m.Name],
InputExample: string(v),
ResponseExample: string(ov),
})
}
var groupslice []*MethodGroup
for _, g := range groups {
groupslice = append(groupslice, g)
}
sort.Slice(groupslice, func(i, j int) bool {
return groupslice[i].GroupName < groupslice[j].GroupName
})
fmt.Printf("# Groups\n")
for _, g := range groupslice {
fmt.Printf("* [%s](#%s)\n", g.GroupName, g.GroupName)
for _, method := range g.Methods {
fmt.Printf(" * [%s](#%s)\n", method.Name, method.Name)
}
}
permStruct := reflect.TypeOf(apistruct.FullNodeStruct{}.Internal)
commonPermStruct := reflect.TypeOf(apistruct.CommonStruct{}.Internal)
for _, g := range groupslice {
g := g
fmt.Printf("## %s\n", g.GroupName)
fmt.Printf("%s\n\n", g.Header)
sort.Slice(g.Methods, func(i, j int) bool {
return g.Methods[i].Name < g.Methods[j].Name
})
for _, m := range g.Methods {
fmt.Printf("### %s\n", m.Name)
fmt.Printf("%s\n\n", m.Comment)
meth, ok := permStruct.FieldByName(m.Name)
if !ok {
meth, ok = commonPermStruct.FieldByName(m.Name)
if !ok {
panic("no perms for method: " + m.Name)
}
}
perms := meth.Tag.Get("perm")
fmt.Printf("Perms: %s\n\n", perms)
if strings.Count(m.InputExample, "\n") > 0 {
fmt.Printf("Inputs:\n```json\n%s\n```\n\n", m.InputExample)
} else {
fmt.Printf("Inputs: `%s`\n\n", m.InputExample)
}
if strings.Count(m.ResponseExample, "\n") > 0 {
fmt.Printf("Response:\n```json\n%s\n```\n\n", m.ResponseExample)
} else {
fmt.Printf("Response: `%s`\n\n", m.ResponseExample)
}
}
}
}
+56
View File
@@ -0,0 +1,56 @@
package test
import (
"context"
"fmt"
"sync/atomic"
"testing"
"time"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/miner"
)
type BlockMiner struct {
ctx context.Context
t *testing.T
miner TestStorageNode
blocktime time.Duration
mine int64
nulls int64
done chan struct{}
}
func NewBlockMiner(ctx context.Context, t *testing.T, miner TestStorageNode, blocktime time.Duration) *BlockMiner {
return &BlockMiner{
ctx: ctx,
t: t,
miner: miner,
blocktime: blocktime,
mine: int64(1),
done: make(chan struct{}),
}
}
func (bm *BlockMiner) MineBlocks() {
time.Sleep(time.Second)
go func() {
defer close(bm.done)
for atomic.LoadInt64(&bm.mine) == 1 {
time.Sleep(bm.blocktime)
nulls := atomic.SwapInt64(&bm.nulls, 0)
if err := bm.miner.MineOne(bm.ctx, miner.MineReq{
InjectNulls: abi.ChainEpoch(nulls),
Done: func(bool, abi.ChainEpoch, error) {},
}); err != nil {
bm.t.Error(err)
}
}
}()
}
func (bm *BlockMiner) Stop() {
atomic.AddInt64(&bm.mine, -1)
fmt.Println("shutting down mining")
<-bm.done
}
+99
View File
@@ -0,0 +1,99 @@
package test
import (
"context"
"fmt"
"os"
"sync/atomic"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/node/impl"
)
func TestCCUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
addrinfo, err := client.NetAddrsListen(ctx)
if err != nil {
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrinfo); err != nil {
t.Fatal(err)
}
time.Sleep(time.Second)
mine := int64(1)
done := make(chan struct{})
go func() {
defer close(done)
for atomic.LoadInt64(&mine) == 1 {
time.Sleep(blocktime)
if err := sn[0].MineOne(ctx, MineNext); err != nil {
t.Error(err)
}
}
}()
maddr, err := miner.ActorAddress(ctx)
if err != nil {
t.Fatal(err)
}
CC := abi.SectorNumber(GenesisPreseals + 1)
Upgraded := CC + 1
pledgeSectors(t, ctx, miner, 1, 0, nil)
sl, err := miner.SectorsList(ctx)
if err != nil {
t.Fatal(err)
}
if len(sl) != 1 {
t.Fatal("expected 1 sector")
}
if sl[0] != CC {
t.Fatal("bad")
}
{
si, err := client.StateSectorGetInfo(ctx, maddr, CC, types.EmptyTSK)
require.NoError(t, err)
require.Less(t, 50000, int(si.Expiration))
}
if err := miner.SectorMarkForUpgrade(ctx, sl[0]); err != nil {
t.Fatal(err)
}
makeDeal(t, ctx, 6, client, miner, false, false)
// Validate upgrade
{
exp, err := client.StateSectorExpiration(ctx, maddr, CC, types.EmptyTSK)
require.NoError(t, err)
require.Greater(t, 50000, int(exp.OnTime))
}
{
exp, err := client.StateSectorExpiration(ctx, maddr, Upgraded, types.EmptyTSK)
require.NoError(t, err)
require.Less(t, 50000, int(exp.OnTime))
}
fmt.Println("shutting down mining")
atomic.AddInt64(&mine, -1)
<-done
}
+231 -32
View File
@@ -8,18 +8,23 @@ import (
"math/rand"
"os"
"path/filepath"
"sync/atomic"
"testing"
"time"
"github.com/ipfs/go-cid"
"github.com/stretchr/testify/require"
"github.com/ipfs/go-cid"
files "github.com/ipfs/go-ipfs-files"
logging "github.com/ipfs/go-log/v2"
"github.com/ipld/go-car"
"github.com/filecoin-project/go-fil-markets/storagemarket"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
"github.com/filecoin-project/lotus/miner"
dag "github.com/ipfs/go-merkledag"
dstest "github.com/ipfs/go-merkledag/test"
unixfile "github.com/ipfs/go-unixfs/file"
@@ -29,16 +34,21 @@ import (
ipld "github.com/ipfs/go-ipld-format"
)
var MineNext = miner.MineReq{
InjectNulls: 0,
Done: func(bool, abi.ChainEpoch, error) {},
}
func init() {
logging.SetAllLoggers(logging.LevelInfo)
build.InsecurePoStValidation = true
}
func TestDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, carExport bool) {
os.Setenv("BELLMAN_NO_GPU", "1")
func TestDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, carExport, fastRet bool) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, 1, oneMiner)
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
@@ -52,30 +62,30 @@ func TestDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, carExport
}
time.Sleep(time.Second)
mine := true
mine := int64(1)
done := make(chan struct{})
go func() {
defer close(done)
for mine {
for atomic.LoadInt64(&mine) == 1 {
time.Sleep(blocktime)
if err := sn[0].MineOne(ctx, func(bool) {}); err != nil {
if err := sn[0].MineOne(ctx, MineNext); err != nil {
t.Error(err)
}
}
}()
makeDeal(t, ctx, 6, client, miner, carExport)
makeDeal(t, ctx, 6, client, miner, carExport, fastRet)
mine = false
atomic.AddInt64(&mine, -1)
fmt.Println("shutting down mining")
<-done
}
func TestDoubleDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration) {
os.Setenv("BELLMAN_NO_GPU", "1")
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, 1, oneMiner)
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
@@ -89,28 +99,28 @@ func TestDoubleDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration) {
}
time.Sleep(time.Second)
mine := true
mine := int64(1)
done := make(chan struct{})
go func() {
defer close(done)
for mine {
for atomic.LoadInt64(&mine) == 1 {
time.Sleep(blocktime)
if err := sn[0].MineOne(ctx, func(bool) {}); err != nil {
if err := sn[0].MineOne(ctx, MineNext); err != nil {
t.Error(err)
}
}
}()
makeDeal(t, ctx, 6, client, miner, false)
makeDeal(t, ctx, 7, client, miner, false)
makeDeal(t, ctx, 6, client, miner, false, false)
makeDeal(t, ctx, 7, client, miner, false, false)
mine = false
atomic.AddInt64(&mine, -1)
fmt.Println("shutting down mining")
<-done
}
func makeDeal(t *testing.T, ctx context.Context, rseed int, client *impl.FullNodeAPI, miner TestStorageNode, carExport bool) {
func makeDeal(t *testing.T, ctx context.Context, rseed int, client *impl.FullNodeAPI, miner TestStorageNode, carExport, fastRet bool) {
data := make([]byte, 1600)
rand.New(rand.NewSource(int64(rseed))).Read(data)
@@ -122,18 +132,151 @@ func makeDeal(t *testing.T, ctx context.Context, rseed int, client *impl.FullNod
fmt.Println("FILE CID: ", fcid)
deal := startDeal(t, ctx, miner, client, fcid)
deal := startDeal(t, ctx, miner, client, fcid, fastRet)
// TODO: this sleep is only necessary because deals don't immediately get logged in the dealstore, we should fix this
time.Sleep(time.Second)
waitDealSealed(t, ctx, client, deal)
waitDealSealed(t, ctx, miner, client, deal, false)
// Retrieval
info, err := client.ClientGetDealInfo(ctx, *deal)
require.NoError(t, err)
testRetrieval(t, ctx, err, client, fcid, carExport, data)
testRetrieval(t, ctx, client, fcid, &info.PieceCID, carExport, data)
}
func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client *impl.FullNodeAPI, fcid cid.Cid) *cid.Cid {
func TestFastRetrievalDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
addrinfo, err := client.NetAddrsListen(ctx)
if err != nil {
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrinfo); err != nil {
t.Fatal(err)
}
time.Sleep(time.Second)
mine := int64(1)
done := make(chan struct{})
go func() {
defer close(done)
for atomic.LoadInt64(&mine) == 1 {
time.Sleep(blocktime)
if err := sn[0].MineOne(ctx, MineNext); err != nil {
t.Error(err)
}
}
}()
data := make([]byte, 1600)
rand.New(rand.NewSource(int64(8))).Read(data)
r := bytes.NewReader(data)
fcid, err := client.ClientImportLocal(ctx, r)
if err != nil {
t.Fatal(err)
}
fmt.Println("FILE CID: ", fcid)
deal := startDeal(t, ctx, miner, client, fcid, true)
waitDealPublished(t, ctx, miner, deal)
fmt.Println("deal published, retrieving")
// Retrieval
info, err := client.ClientGetDealInfo(ctx, *deal)
require.NoError(t, err)
testRetrieval(t, ctx, client, fcid, &info.PieceCID, false, data)
atomic.AddInt64(&mine, -1)
fmt.Println("shutting down mining")
<-done
}
func TestSenondDealRetrieval(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
addrinfo, err := client.NetAddrsListen(ctx)
if err != nil {
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrinfo); err != nil {
t.Fatal(err)
}
time.Sleep(time.Second)
mine := int64(1)
done := make(chan struct{})
go func() {
defer close(done)
for atomic.LoadInt64(&mine) == 1 {
time.Sleep(blocktime)
if err := sn[0].MineOne(ctx, MineNext); err != nil {
t.Error(err)
}
}
}()
{
data1 := make([]byte, 800)
rand.New(rand.NewSource(int64(3))).Read(data1)
r := bytes.NewReader(data1)
fcid1, err := client.ClientImportLocal(ctx, r)
if err != nil {
t.Fatal(err)
}
data2 := make([]byte, 800)
rand.New(rand.NewSource(int64(9))).Read(data2)
r2 := bytes.NewReader(data2)
fcid2, err := client.ClientImportLocal(ctx, r2)
if err != nil {
t.Fatal(err)
}
deal1 := startDeal(t, ctx, miner, client, fcid1, true)
// TODO: this sleep is only necessary because deals don't immediately get logged in the dealstore, we should fix this
time.Sleep(time.Second)
waitDealSealed(t, ctx, miner, client, deal1, true)
deal2 := startDeal(t, ctx, miner, client, fcid2, true)
time.Sleep(time.Second)
waitDealSealed(t, ctx, miner, client, deal2, false)
// Retrieval
info, err := client.ClientGetDealInfo(ctx, *deal2)
require.NoError(t, err)
rf, _ := miner.SectorsRefs(ctx)
fmt.Printf("refs: %+v\n", rf)
testRetrieval(t, ctx, client, fcid2, &info.PieceCID, false, data2)
}
atomic.AddInt64(&mine, -1)
fmt.Println("shutting down mining")
<-done
}
func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client *impl.FullNodeAPI, fcid cid.Cid, fastRet bool) *cid.Cid {
maddr, err := miner.ActorAddress(ctx)
if err != nil {
t.Fatal(err)
@@ -144,11 +287,15 @@ func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client
t.Fatal(err)
}
deal, err := client.ClientStartDeal(ctx, &api.StartDealParams{
Data: &storagemarket.DataRef{Root: fcid},
Data: &storagemarket.DataRef{
TransferType: storagemarket.TTGraphsync,
Root: fcid,
},
Wallet: addr,
Miner: maddr,
EpochPrice: types.NewInt(1000000),
MinBlocksDuration: 100,
MinBlocksDuration: uint64(build.MinDealDuration),
FastRetrieval: fastRet,
})
if err != nil {
t.Fatalf("%+v", err)
@@ -156,7 +303,7 @@ func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client
return deal
}
func waitDealSealed(t *testing.T, ctx context.Context, client *impl.FullNodeAPI, deal *cid.Cid) {
func waitDealSealed(t *testing.T, ctx context.Context, miner TestStorageNode, client *impl.FullNodeAPI, deal *cid.Cid, noseal bool) {
loop:
for {
di, err := client.ClientGetDealInfo(ctx, *deal)
@@ -164,6 +311,11 @@ loop:
t.Fatal(err)
}
switch di.State {
case storagemarket.StorageDealSealing:
if noseal {
return
}
startSealingWaiting(t, ctx, miner)
case storagemarket.StorageDealProposalRejected:
t.Fatal("deal rejected")
case storagemarket.StorageDealFailing:
@@ -179,8 +331,53 @@ loop:
}
}
func testRetrieval(t *testing.T, ctx context.Context, err error, client *impl.FullNodeAPI, fcid cid.Cid, carExport bool, data []byte) {
offers, err := client.ClientFindData(ctx, fcid)
func waitDealPublished(t *testing.T, ctx context.Context, miner TestStorageNode, deal *cid.Cid) {
subCtx, cancel := context.WithCancel(ctx)
defer cancel()
updates, err := miner.MarketGetDealUpdates(subCtx)
if err != nil {
t.Fatal(err)
}
for {
select {
case <-ctx.Done():
t.Fatal("context timeout")
case di := <-updates:
if deal.Equals(di.ProposalCid) {
switch di.State {
case storagemarket.StorageDealProposalRejected:
t.Fatal("deal rejected")
case storagemarket.StorageDealFailing:
t.Fatal("deal failed")
case storagemarket.StorageDealError:
t.Fatal("deal errored", di.Message)
case storagemarket.StorageDealFinalizing, storagemarket.StorageDealSealing, storagemarket.StorageDealActive:
fmt.Println("COMPLETE", di)
return
}
fmt.Println("Deal state: ", storagemarket.DealStates[di.State])
}
}
}
}
func startSealingWaiting(t *testing.T, ctx context.Context, miner TestStorageNode) {
snums, err := miner.SectorsList(ctx)
require.NoError(t, err)
for _, snum := range snums {
si, err := miner.SectorsStatus(ctx, snum, false)
require.NoError(t, err)
t.Logf("Sector state: %s", si.State)
if si.State == api.SectorState(sealing.WaitDeals) {
require.NoError(t, miner.SectorStartSealing(ctx, snum))
}
}
}
func testRetrieval(t *testing.T, ctx context.Context, client *impl.FullNodeAPI, fcid cid.Cid, piece *cid.Cid, carExport bool, data []byte) {
offers, err := client.ClientFindData(ctx, fcid, piece)
if err != nil {
t.Fatal(err)
}
@@ -193,20 +390,22 @@ func testRetrieval(t *testing.T, ctx context.Context, err error, client *impl.Fu
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(rpath)
defer os.RemoveAll(rpath) //nolint:errcheck
caddr, err := client.WalletDefaultAddress(ctx)
if err != nil {
t.Fatal(err)
}
ref := api.FileRef{
ref := &api.FileRef{
Path: filepath.Join(rpath, "ret"),
IsCAR: carExport,
}
err = client.ClientRetrieve(ctx, offers[0].Order(caddr), ref)
if err != nil {
t.Fatalf("%+v", err)
updates, err := client.ClientRetrieveWithEvents(ctx, offers[0].Order(caddr), ref)
for update := range updates {
if update.Err != "" {
t.Fatalf("%v", err)
}
}
rdata, err := ioutil.ReadFile(filepath.Join(rpath, "ret"))
+67 -59
View File
@@ -12,36 +12,39 @@ import (
logging "github.com/ipfs/go-log/v2"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"github.com/stretchr/testify/require"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/miner"
"github.com/filecoin-project/lotus/node/impl"
)
//nolint:deadcode,varcheck
var log = logging.Logger("apitest")
func (ts *testSuite) testMining(t *testing.T) {
ctx := context.Background()
apis, sn := ts.makeNodes(t, 1, oneMiner)
apis, sn := ts.makeNodes(t, 1, OneMiner)
api := apis[0]
h1, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(0), h1.Height())
newHeads, err := api.ChainNotify(ctx)
require.NoError(t, err)
<-newHeads
initHead := (<-newHeads)[0]
baseHeight := initHead.Val.Height()
err = sn[0].MineOne(ctx, func(bool) {})
h1, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, int64(h1.Height()), int64(baseHeight))
MineUntilBlock(ctx, t, apis[0], sn[0], nil)
require.NoError(t, err)
<-newHeads
h2, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(1), h2.Height())
require.Greater(t, int64(h2.Height()), int64(h1.Height()))
}
func (ts *testSuite) testMiningReal(t *testing.T) {
@@ -51,45 +54,48 @@ func (ts *testSuite) testMiningReal(t *testing.T) {
}()
ctx := context.Background()
apis, sn := ts.makeNodes(t, 1, oneMiner)
apis, sn := ts.makeNodes(t, 1, OneMiner)
api := apis[0]
h1, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(0), h1.Height())
newHeads, err := api.ChainNotify(ctx)
require.NoError(t, err)
<-newHeads
initHead := (<-newHeads)[0]
if initHead.Val.Height() != 2 {
<-newHeads
}
err = sn[0].MineOne(ctx, func(bool) {})
h1, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(2), h1.Height())
MineUntilBlock(ctx, t, apis[0], sn[0], nil)
require.NoError(t, err)
<-newHeads
h2, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(1), h2.Height())
require.Equal(t, abi.ChainEpoch(3), h2.Height())
err = sn[0].MineOne(ctx, func(bool) {})
MineUntilBlock(ctx, t, apis[0], sn[0], nil)
require.NoError(t, err)
<-newHeads
h2, err = api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(2), h2.Height())
require.Equal(t, abi.ChainEpoch(4), h2.Height())
}
func TestDealMining(t *testing.T, b APIBuilder, blocktime time.Duration, carExport bool) {
os.Setenv("BELLMAN_NO_GPU", "1")
_ = os.Setenv("BELLMAN_NO_GPU", "1")
// test making a deal with a fresh miner, and see if it starts to mine
ctx := context.Background()
n, sn := b(t, 1, []StorageMiner{
{Full: 0, Preseal: PresealGenesis},
{Full: 0, Preseal: 0}, // TODO: Add support for storage miners on non-first full node
{Full: 0, Preseal: 0}, // TODO: Add support for miners on non-first full node
})
client := n[0].FullNode.(*impl.FullNodeAPI)
provider := sn[1]
@@ -125,27 +131,30 @@ func TestDealMining(t *testing.T, b APIBuilder, blocktime time.Duration, carExpo
done := make(chan struct{})
minedTwo := make(chan struct{})
m2addr, err := sn[1].ActorAddress(context.TODO())
if err != nil {
t.Fatal(err)
}
go func() {
defer close(done)
prevExpect := 0
complChan := minedTwo
for atomic.LoadInt32(&mine) != 0 {
wait := make(chan int, 2)
mdone := func(mined bool) {
go func() {
n := 0
if mined {
n = 1
}
wait <- n
}()
wait := make(chan int)
mdone := func(mined bool, _ abi.ChainEpoch, err error) {
n := 0
if mined {
n = 1
}
wait <- n
}
if err := sn[0].MineOne(ctx, mdone); err != nil {
if err := sn[0].MineOne(ctx, miner.MineReq{Done: mdone}); err != nil {
t.Error(err)
}
if err := sn[1].MineOne(ctx, mdone); err != nil {
if err := sn[1].MineOne(ctx, miner.MineReq{Done: mdone}); err != nil {
t.Error(err)
}
@@ -153,43 +162,42 @@ func TestDealMining(t *testing.T, b APIBuilder, blocktime time.Duration, carExpo
expect += <-wait
time.Sleep(blocktime)
for {
n := 0
for i, node := range sn {
mb, err := node.MiningBase(ctx)
if err != nil {
t.Error(err)
return
}
if len(mb.Cids()) != expect {
log.Warnf("node %d mining base not complete (%d, want %d)", i, len(mb.Cids()), expect)
continue
}
n++
}
if n == len(sn) {
break
}
time.Sleep(blocktime)
if expect == 0 {
// null block
continue
}
if prevExpect == 2 && expect == 2 && minedTwo != nil {
close(minedTwo)
minedTwo = nil
var nodeOneMined bool
for _, node := range sn {
mb, err := node.MiningBase(ctx)
if err != nil {
t.Error(err)
return
}
for _, b := range mb.Blocks() {
if b.Miner == m2addr {
nodeOneMined = true
break
}
}
}
if nodeOneMined && complChan != nil {
close(complChan)
complChan = nil
}
prevExpect = expect
}
}()
deal := startDeal(t, ctx, provider, client, fcid)
deal := startDeal(t, ctx, provider, client, fcid, false)
// TODO: this sleep is only necessary because deals don't immediately get logged in the dealstore, we should fix this
time.Sleep(time.Second)
waitDealSealed(t, ctx, client, deal)
waitDealSealed(t, ctx, provider, client, deal, false)
<-minedTwo
+259
View File
@@ -0,0 +1,259 @@
package test
import (
"context"
"fmt"
"os"
"sync/atomic"
"testing"
"time"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
"github.com/ipfs/go-cid"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/events"
"github.com/filecoin-project/lotus/chain/events/state"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/wallet"
)
func TestPaymentChannels(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, 2, OneMiner)
paymentCreator := n[0]
paymentReceiver := n[1]
miner := sn[0]
// get everyone connected
addrs, err := paymentCreator.NetAddrsListen(ctx)
if err != nil {
t.Fatal(err)
}
if err := paymentReceiver.NetConnect(ctx, addrs); err != nil {
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrs); err != nil {
t.Fatal(err)
}
// start mining blocks
bm := NewBlockMiner(ctx, t, miner, blocktime)
bm.MineBlocks()
// send some funds to register the receiver
receiverAddr, err := paymentReceiver.WalletNew(ctx, wallet.ActSigType("secp256k1"))
if err != nil {
t.Fatal(err)
}
SendFunds(ctx, t, paymentCreator, receiverAddr, abi.NewTokenAmount(1e18))
// setup the payment channel
createrAddr, err := paymentCreator.WalletDefaultAddress(ctx)
if err != nil {
t.Fatal(err)
}
channelAmt := int64(100000)
channelInfo, err := paymentCreator.PaychGet(ctx, createrAddr, receiverAddr, abi.NewTokenAmount(channelAmt))
if err != nil {
t.Fatal(err)
}
channel, err := paymentCreator.PaychGetWaitReady(ctx, channelInfo.WaitSentinel)
if err != nil {
t.Fatal(err)
}
// allocate three lanes
var lanes []uint64
for i := 0; i < 3; i++ {
lane, err := paymentCreator.PaychAllocateLane(ctx, channel)
if err != nil {
t.Fatal(err)
}
lanes = append(lanes, lane)
}
// Make two vouchers each for each lane, then save on the other side
// Note that the voucher with a value of 2000 has a higher nonce, so it
// supersedes the voucher with a value of 1000
for _, lane := range lanes {
vouch1, err := paymentCreator.PaychVoucherCreate(ctx, channel, abi.NewTokenAmount(1000), lane)
if err != nil {
t.Fatal(err)
}
if vouch1.Voucher == nil {
t.Fatal(fmt.Errorf("Not enough funds to create voucher: missing %d", vouch1.Shortfall))
}
vouch2, err := paymentCreator.PaychVoucherCreate(ctx, channel, abi.NewTokenAmount(2000), lane)
if err != nil {
t.Fatal(err)
}
if vouch2.Voucher == nil {
t.Fatal(fmt.Errorf("Not enough funds to create voucher: missing %d", vouch2.Shortfall))
}
delta1, err := paymentReceiver.PaychVoucherAdd(ctx, channel, vouch1.Voucher, nil, abi.NewTokenAmount(1000))
if err != nil {
t.Fatal(err)
}
if !delta1.Equals(abi.NewTokenAmount(1000)) {
t.Fatal("voucher didn't have the right amount")
}
delta2, err := paymentReceiver.PaychVoucherAdd(ctx, channel, vouch2.Voucher, nil, abi.NewTokenAmount(1000))
if err != nil {
t.Fatal(err)
}
if !delta2.Equals(abi.NewTokenAmount(1000)) {
t.Fatal("voucher didn't have the right amount")
}
}
// settle the payment channel
settleMsgCid, err := paymentCreator.PaychSettle(ctx, channel)
if err != nil {
t.Fatal(err)
}
res := waitForMessage(ctx, t, paymentCreator, settleMsgCid, time.Second*10, "settle")
if res.Receipt.ExitCode != 0 {
t.Fatal("Unable to settle payment channel")
}
// wait for the receiver to submit their vouchers
ev := events.NewEvents(ctx, paymentCreator)
preds := state.NewStatePredicates(paymentCreator)
finished := make(chan struct{})
err = ev.StateChanged(func(ts *types.TipSet) (done bool, more bool, err error) {
act, err := paymentCreator.StateReadState(ctx, channel, ts.Key())
if err != nil {
return false, false, err
}
state := act.State.(paych.State)
if state.ToSend.GreaterThanEqual(abi.NewTokenAmount(6000)) {
return true, false, nil
}
return false, true, nil
}, func(oldTs, newTs *types.TipSet, states events.StateChange, curH abi.ChainEpoch) (more bool, err error) {
toSendChange := states.(*state.PayChToSendChange)
if toSendChange.NewToSend.GreaterThanEqual(abi.NewTokenAmount(6000)) {
close(finished)
return false, nil
}
return true, nil
}, func(ctx context.Context, ts *types.TipSet) error {
return nil
}, int(build.MessageConfidence)+1, build.SealRandomnessLookbackLimit, func(oldTs, newTs *types.TipSet) (bool, events.StateChange, error) {
return preds.OnPaymentChannelActorChanged(channel, preds.OnToSendAmountChanges())(ctx, oldTs.Key(), newTs.Key())
})
if err != nil {
t.Fatal(err)
}
select {
case <-finished:
case <-time.After(time.Second):
t.Fatal("Timed out waiting for receiver to submit vouchers")
}
// wait for the settlement period to pass before collecting
waitForBlocks(ctx, t, bm, paymentReceiver, receiverAddr, paych.SettleDelay)
creatorPreCollectBalance, err := paymentCreator.WalletBalance(ctx, createrAddr)
if err != nil {
t.Fatal(err)
}
// collect funds (from receiver, though either party can do it)
collectMsg, err := paymentReceiver.PaychCollect(ctx, channel)
if err != nil {
t.Fatal(err)
}
res, err = paymentReceiver.StateWaitMsg(ctx, collectMsg, 3)
if err != nil {
t.Fatal(err)
}
if res.Receipt.ExitCode != 0 {
t.Fatal("unable to collect on payment channel")
}
// Finally, check the balance for the creator
currentCreatorBalance, err := paymentCreator.WalletBalance(ctx, createrAddr)
if err != nil {
t.Fatal(err)
}
// The highest nonce voucher that the creator sent on each lane is 2000
totalVouchers := int64(len(lanes) * 2000)
// When receiver submits the tokens to the chain, creator should get a
// refund on the remaining balance, which is
// channel amount - total voucher value
expectedRefund := channelAmt - totalVouchers
delta := big.Sub(currentCreatorBalance, creatorPreCollectBalance)
if !delta.Equals(abi.NewTokenAmount(expectedRefund)) {
t.Fatalf("did not send correct funds from creator: expected %d, got %d", expectedRefund, delta)
}
// shut down mining
bm.Stop()
}
func waitForBlocks(ctx context.Context, t *testing.T, bm *BlockMiner, paymentReceiver TestNode, receiverAddr address.Address, count int) {
// We need to add null blocks in batches, if we add too many the chain can't sync
batchSize := 60
for i := 0; i < count; i += batchSize {
size := batchSize
if i > count {
size = count - i
}
// Add a batch of null blocks
atomic.StoreInt64(&bm.nulls, int64(size-1))
// Add a real block
m, err := paymentReceiver.MpoolPushMessage(ctx, &types.Message{
To: builtin.BurntFundsActorAddr,
From: receiverAddr,
Value: types.NewInt(0),
}, nil)
if err != nil {
t.Fatal(err)
}
_, err = paymentReceiver.StateWaitMsg(ctx, m.Cid(), 1)
if err != nil {
t.Fatal(err)
}
}
}
func waitForMessage(ctx context.Context, t *testing.T, paymentCreator TestNode, msgCid cid.Cid, duration time.Duration, desc string) *api.MsgLookup {
ctx, cancel := context.WithTimeout(ctx, duration)
defer cancel()
fmt.Println("Waiting for", desc)
res, err := paymentCreator.StateWaitMsg(ctx, msgCid, 1)
if err != nil {
fmt.Println("Error waiting for", desc, err)
t.Fatal(err)
}
if res.Receipt.ExitCode != 0 {
t.Fatalf("did not successfully send %s", desc)
}
fmt.Println("Confirmed", desc)
return res
}
+22 -9
View File
@@ -4,23 +4,36 @@ import (
"context"
"testing"
"github.com/multiformats/go-multiaddr"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/stretchr/testify/assert"
"github.com/filecoin-project/lotus/miner"
)
type TestNode struct {
api.FullNode
// ListenAddr is the address on which an API server is listening, if an
// API server is created for this Node
ListenAddr multiaddr.Multiaddr
}
type TestStorageNode struct {
api.StorageMiner
// ListenAddr is the address on which an API server is listening, if an
// API server is created for this Node
ListenAddr multiaddr.Multiaddr
MineOne func(context.Context, func(bool)) error
MineOne func(context.Context, miner.MineReq) error
}
var PresealGenesis = -1
const GenesisPreseals = 2
type StorageMiner struct {
Full int
Preseal int
@@ -49,25 +62,25 @@ func TestApis(t *testing.T, b APIBuilder) {
t.Run("testMiningReal", ts.testMiningReal)
}
var oneMiner = []StorageMiner{{Full: 0, Preseal: PresealGenesis}}
var OneMiner = []StorageMiner{{Full: 0, Preseal: PresealGenesis}}
func (ts *testSuite) testVersion(t *testing.T) {
build.RunningNodeType = build.NodeFull
ctx := context.Background()
apis, _ := ts.makeNodes(t, 1, oneMiner)
apis, _ := ts.makeNodes(t, 1, OneMiner)
api := apis[0]
v, err := api.Version(ctx)
if err != nil {
t.Fatal(err)
}
if v.Version != build.BuildVersion {
t.Error("Version didn't work properly")
}
require.Equal(t, v.Version, build.BuildVersion)
}
func (ts *testSuite) testID(t *testing.T) {
ctx := context.Background()
apis, _ := ts.makeNodes(t, 1, oneMiner)
apis, _ := ts.makeNodes(t, 1, OneMiner)
api := apis[0]
id, err := api.ID(ctx)
@@ -79,7 +92,7 @@ func (ts *testSuite) testID(t *testing.T) {
func (ts *testSuite) testConnectTwo(t *testing.T) {
ctx := context.Background()
apis, _ := ts.makeNodes(t, 2, oneMiner)
apis, _ := ts.makeNodes(t, 2, OneMiner)
p, err := apis[0].NetPeers(ctx)
if err != nil {
+86
View File
@@ -0,0 +1,86 @@
package test
import (
"context"
"testing"
"time"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/miner"
)
func SendFunds(ctx context.Context, t *testing.T, sender TestNode, addr address.Address, amount abi.TokenAmount) {
senderAddr, err := sender.WalletDefaultAddress(ctx)
if err != nil {
t.Fatal(err)
}
msg := &types.Message{
From: senderAddr,
To: addr,
Value: amount,
}
sm, err := sender.MpoolPushMessage(ctx, msg, nil)
if err != nil {
t.Fatal(err)
}
res, err := sender.StateWaitMsg(ctx, sm.Cid(), 1)
if err != nil {
t.Fatal(err)
}
if res.Receipt.ExitCode != 0 {
t.Fatal("did not successfully send money")
}
}
func MineUntilBlock(ctx context.Context, t *testing.T, fn TestNode, sn TestStorageNode, cb func(abi.ChainEpoch)) {
for i := 0; i < 1000; i++ {
var success bool
var err error
var epoch abi.ChainEpoch
wait := make(chan struct{})
mineErr := sn.MineOne(ctx, miner.MineReq{
Done: func(win bool, ep abi.ChainEpoch, e error) {
success = win
err = e
epoch = ep
wait <- struct{}{}
},
})
if mineErr != nil {
t.Fatal(mineErr)
}
<-wait
if err != nil {
t.Fatal(err)
}
if success {
// Wait until it shows up on the given full nodes ChainHead
nloops := 50
for i := 0; i < nloops; i++ {
ts, err := fn.ChainHead(ctx)
if err != nil {
t.Fatal(err)
}
if ts.Height() == epoch {
break
}
if i == nloops-1 {
t.Fatal("block never managed to sync to node")
}
time.Sleep(time.Millisecond * 10)
}
if cb != nil {
cb(epoch)
}
return
}
t.Log("did not mine block, trying again", i)
}
t.Fatal("failed to mine 1000 times in a row...")
}
+321
View File
@@ -0,0 +1,321 @@
package test
import (
"context"
"fmt"
"os"
"strings"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/extern/sector-storage/mock"
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
miner2 "github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
bminer "github.com/filecoin-project/lotus/miner"
"github.com/filecoin-project/lotus/node/impl"
)
func init() {
err := os.Setenv("BELLMAN_NO_GPU", "1")
if err != nil {
panic(fmt.Sprintf("failed to set BELLMAN_NO_GPU env variable: %s", err))
}
}
func TestPledgeSector(t *testing.T, b APIBuilder, blocktime time.Duration, nSectors int) {
ctx := context.Background()
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
addrinfo, err := client.NetAddrsListen(ctx)
if err != nil {
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrinfo); err != nil {
t.Fatal(err)
}
build.Clock.Sleep(time.Second)
mine := true
done := make(chan struct{})
go func() {
defer close(done)
for mine {
build.Clock.Sleep(blocktime)
if err := sn[0].MineOne(ctx, bminer.MineReq{Done: func(bool, abi.ChainEpoch, error) {
}}); err != nil {
t.Error(err)
}
}
}()
pledgeSectors(t, ctx, miner, nSectors, 0, nil)
mine = false
<-done
}
func pledgeSectors(t *testing.T, ctx context.Context, miner TestStorageNode, n, existing int, blockNotif <-chan struct{}) {
for i := 0; i < n; i++ {
err := miner.PledgeSector(ctx)
require.NoError(t, err)
if i%3 == 0 && blockNotif != nil {
<-blockNotif
}
}
for {
s, err := miner.SectorsList(ctx) // Note - the test builder doesn't import genesis sectors into FSM
require.NoError(t, err)
fmt.Printf("Sectors: %d\n", len(s))
if len(s) >= n+existing {
break
}
build.Clock.Sleep(100 * time.Millisecond)
}
fmt.Printf("All sectors is fsm\n")
s, err := miner.SectorsList(ctx)
require.NoError(t, err)
toCheck := map[abi.SectorNumber]struct{}{}
for _, number := range s {
toCheck[number] = struct{}{}
}
for len(toCheck) > 0 {
for n := range toCheck {
st, err := miner.SectorsStatus(ctx, n, false)
require.NoError(t, err)
if st.State == api.SectorState(sealing.Proving) {
delete(toCheck, n)
}
if strings.Contains(string(st.State), "Fail") {
t.Fatal("sector in a failed state", st.State)
}
}
build.Clock.Sleep(100 * time.Millisecond)
fmt.Printf("WaitSeal: %d\n", len(s))
}
}
func TestWindowPost(t *testing.T, b APIBuilder, blocktime time.Duration, nSectors int) {
ctx := context.Background()
n, sn := b(t, 1, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
addrinfo, err := client.NetAddrsListen(ctx)
if err != nil {
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrinfo); err != nil {
t.Fatal(err)
}
build.Clock.Sleep(time.Second)
mine := true
done := make(chan struct{})
go func() {
defer close(done)
for mine {
build.Clock.Sleep(blocktime)
if err := sn[0].MineOne(ctx, MineNext); err != nil {
t.Error(err)
}
}
}()
pledgeSectors(t, ctx, miner, nSectors, 0, nil)
maddr, err := miner.ActorAddress(ctx)
require.NoError(t, err)
di, err := client.StateMinerProvingDeadline(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
mid, err := address.IDFromAddress(maddr)
require.NoError(t, err)
fmt.Printf("Running one proving period\n")
for {
head, err := client.ChainHead(ctx)
require.NoError(t, err)
if head.Height() > di.PeriodStart+(miner2.WPoStProvingPeriod)+2 {
break
}
if head.Height()%100 == 0 {
fmt.Printf("@%d\n", head.Height())
}
build.Clock.Sleep(blocktime)
}
p, err := client.StateMinerPower(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
ssz, err := miner.ActorSectorSize(ctx, maddr)
require.NoError(t, err)
require.Equal(t, p.MinerPower, p.TotalPower)
require.Equal(t, p.MinerPower.RawBytePower, types.NewInt(uint64(ssz)*uint64(nSectors+GenesisPreseals)))
fmt.Printf("Drop some sectors\n")
// Drop 2 sectors from deadline 2 partition 0 (full partition / deadline)
{
parts, err := client.StateMinerPartitions(ctx, maddr, 2, types.EmptyTSK)
require.NoError(t, err)
require.Greater(t, len(parts), 0)
n, err := parts[0].Sectors.Count()
require.NoError(t, err)
require.Equal(t, uint64(2), n)
// Drop the partition
err = parts[0].Sectors.ForEach(func(sid uint64) error {
return miner.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).MarkCorrupted(abi.SectorID{
Miner: abi.ActorID(mid),
Number: abi.SectorNumber(sid),
}, true)
})
require.NoError(t, err)
}
var s abi.SectorID
// Drop 1 sectors from deadline 3 partition 0
{
parts, err := client.StateMinerPartitions(ctx, maddr, 3, types.EmptyTSK)
require.NoError(t, err)
require.Greater(t, len(parts), 0)
n, err := parts[0].Sectors.Count()
require.NoError(t, err)
require.Equal(t, uint64(2), n)
// Drop the sector
sn, err := parts[0].Sectors.First()
require.NoError(t, err)
all, err := parts[0].Sectors.All(2)
require.NoError(t, err)
fmt.Println("the sectors", all)
s = abi.SectorID{
Miner: abi.ActorID(mid),
Number: abi.SectorNumber(sn),
}
err = miner.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).MarkFailed(s, true)
require.NoError(t, err)
}
di, err = client.StateMinerProvingDeadline(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
fmt.Printf("Go through another PP, wait for sectors to become faulty\n")
for {
head, err := client.ChainHead(ctx)
require.NoError(t, err)
if head.Height() > di.PeriodStart+(miner2.WPoStProvingPeriod)+2 {
break
}
if head.Height()%100 == 0 {
fmt.Printf("@%d\n", head.Height())
}
build.Clock.Sleep(blocktime)
}
p, err = client.StateMinerPower(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
require.Equal(t, p.MinerPower, p.TotalPower)
sectors := p.MinerPower.RawBytePower.Uint64() / uint64(ssz)
require.Equal(t, nSectors+GenesisPreseals-3, int(sectors)) // -3 just removed sectors
fmt.Printf("Recover one sector\n")
err = miner.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).MarkFailed(s, false)
require.NoError(t, err)
di, err = client.StateMinerProvingDeadline(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
for {
head, err := client.ChainHead(ctx)
require.NoError(t, err)
if head.Height() > di.PeriodStart+(miner2.WPoStProvingPeriod)+2 {
break
}
if head.Height()%100 == 0 {
fmt.Printf("@%d\n", head.Height())
}
build.Clock.Sleep(blocktime)
}
p, err = client.StateMinerPower(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
require.Equal(t, p.MinerPower, p.TotalPower)
sectors = p.MinerPower.RawBytePower.Uint64() / uint64(ssz)
require.Equal(t, nSectors+GenesisPreseals-2, int(sectors)) // -2 not recovered sectors
// pledge a sector after recovery
pledgeSectors(t, ctx, miner, 1, nSectors, nil)
{
// wait a bit more
head, err := client.ChainHead(ctx)
require.NoError(t, err)
waitUntil := head.Height() + 10
for {
head, err := client.ChainHead(ctx)
require.NoError(t, err)
if head.Height() > waitUntil {
break
}
}
}
p, err = client.StateMinerPower(ctx, maddr, types.EmptyTSK)
require.NoError(t, err)
require.Equal(t, p.MinerPower, p.TotalPower)
sectors = p.MinerPower.RawBytePower.Uint64() / uint64(ssz)
require.Equal(t, nSectors+GenesisPreseals-2+1, int(sectors)) // -2 not recovered sectors + 1 just pledged
mine = false
<-done
}
+119
View File
@@ -2,11 +2,22 @@ package api
import (
"encoding/json"
"fmt"
"github.com/filecoin-project/go-address"
datatransfer "github.com/filecoin-project/go-data-transfer"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p-core/peer"
pubsub "github.com/libp2p/go-libp2p-pubsub"
ma "github.com/multiformats/go-multiaddr"
)
// TODO: check if this exists anywhere else
type MultiaddrSlice []ma.Multiaddr
func (m *MultiaddrSlice) UnmarshalJSON(raw []byte) (err error) {
@@ -32,3 +43,111 @@ type ObjStat struct {
Size uint64
Links uint64
}
type PubsubScore struct {
ID peer.ID
Score *pubsub.PeerScoreSnapshot
}
type MinerInfo struct {
Owner address.Address // Must be an ID-address.
Worker address.Address // Must be an ID-address.
NewWorker address.Address // Must be an ID-address.
ControlAddresses []address.Address // Must be an ID-addresses.
WorkerChangeEpoch abi.ChainEpoch
PeerId *peer.ID
Multiaddrs []abi.Multiaddrs
SealProofType abi.RegisteredSealProof
SectorSize abi.SectorSize
WindowPoStPartitionSectors uint64
}
func NewApiMinerInfo(info *miner.MinerInfo) MinerInfo {
var pid *peer.ID
if peerID, err := peer.IDFromBytes(info.PeerId); err == nil {
pid = &peerID
}
mi := MinerInfo{
Owner: info.Owner,
Worker: info.Worker,
ControlAddresses: info.ControlAddresses,
NewWorker: address.Undef,
WorkerChangeEpoch: -1,
PeerId: pid,
Multiaddrs: info.Multiaddrs,
SealProofType: info.SealProofType,
SectorSize: info.SectorSize,
WindowPoStPartitionSectors: info.WindowPoStPartitionSectors,
}
if info.PendingWorkerKey != nil {
mi.NewWorker = info.PendingWorkerKey.NewWorker
mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt
}
return mi
}
type MessageSendSpec struct {
MaxFee abi.TokenAmount
}
var DefaultMessageSendSpec = MessageSendSpec{
// MaxFee of 0.1FIL
MaxFee: abi.NewTokenAmount(int64(build.FilecoinPrecision) / 10),
}
func (ms *MessageSendSpec) Get() MessageSendSpec {
if ms == nil {
return DefaultMessageSendSpec
}
return *ms
}
type DataTransferChannel struct {
TransferID datatransfer.TransferID
Status datatransfer.Status
BaseCID cid.Cid
IsInitiator bool
IsSender bool
Voucher string
Message string
OtherPeer peer.ID
Transferred uint64
}
// NewDataTransferChannel constructs an API DataTransferChannel type from full channel state snapshot and a host id
func NewDataTransferChannel(hostID peer.ID, channelState datatransfer.ChannelState) DataTransferChannel {
channel := DataTransferChannel{
TransferID: channelState.TransferID(),
Status: channelState.Status(),
BaseCID: channelState.BaseCID(),
IsSender: channelState.Sender() == hostID,
Message: channelState.Message(),
}
stringer, ok := channelState.Voucher().(fmt.Stringer)
if ok {
channel.Voucher = stringer.String()
} else {
voucherJSON, err := json.Marshal(channelState.Voucher())
if err != nil {
channel.Voucher = fmt.Errorf("Voucher Serialization: %w", err).Error()
} else {
channel.Voucher = string(voucherJSON)
}
}
if channel.IsSender {
channel.IsInitiator = !channelState.IsPull()
channel.Transferred = channelState.Sent()
channel.OtherPeer = channelState.Recipient()
} else {
channel.IsInitiator = channelState.IsPull()
channel.Transferred = channelState.Received()
channel.OtherPeer = channelState.Sender()
}
return channel
}
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"context"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/filecoin-project/go-state-types/crypto"
)
type SignFunc = func(context.Context, []byte) (*crypto.Signature, error)
+4
View File
@@ -13,6 +13,10 @@ import (
)
func BuiltinBootstrap() ([]peer.AddrInfo, error) {
if DisableBuiltinAssets {
return nil, nil
}
var out []peer.AddrInfo
b := rice.MustFindBox("bootstrap")
+6 -12
View File
@@ -1,12 +1,6 @@
/dns4/bootstrap-0-sin.fil-test.net/tcp/1347/p2p/12D3KooWKNF7vNFEhnvB45E9mw2B5z6t419W3ziZPLdUDVnLLKGs
/ip4/86.109.15.57/tcp/1347/p2p/12D3KooWKNF7vNFEhnvB45E9mw2B5z6t419W3ziZPLdUDVnLLKGs
/dns4/bootstrap-0-dfw.fil-test.net/tcp/1347/p2p/12D3KooWECJTm7RUPyGfNbRwm6y2fK4wA7EB8rDJtWsq5AKi7iDr
/ip4/139.178.84.45/tcp/1347/p2p/12D3KooWECJTm7RUPyGfNbRwm6y2fK4wA7EB8rDJtWsq5AKi7iDr
/dns4/bootstrap-0-fra.fil-test.net/tcp/1347/p2p/12D3KooWC7MD6m7iNCuDsYtNr7xVtazihyVUizBbhmhEiyMAm9ym
/ip4/136.144.49.17/tcp/1347/p2p/12D3KooWC7MD6m7iNCuDsYtNr7xVtazihyVUizBbhmhEiyMAm9ym
/dns4/bootstrap-1-sin.fil-test.net/tcp/1347/p2p/12D3KooWD8eYqsKcEMFax6EbWN3rjA7qFsxCez2rmN8dWqkzgNaN
/ip4/86.109.15.55/tcp/1347/p2p/12D3KooWD8eYqsKcEMFax6EbWN3rjA7qFsxCez2rmN8dWqkzgNaN
/dns4/bootstrap-1-dfw.fil-test.net/tcp/1347/p2p/12D3KooWLB3RR8frLAmaK4ntHC2dwrAjyGzQgyUzWxAum1FxyyqD
/ip4/139.178.84.41/tcp/1347/p2p/12D3KooWLB3RR8frLAmaK4ntHC2dwrAjyGzQgyUzWxAum1FxyyqD
/dns4/bootstrap-1-fra.fil-test.net/tcp/1347/p2p/12D3KooWGPDJAw3HW4uVU3JEQBfFaZ1kdpg4HvvwRMVpUYbzhsLQ
/ip4/136.144.49.131/tcp/1347/p2p/12D3KooWGPDJAw3HW4uVU3JEQBfFaZ1kdpg4HvvwRMVpUYbzhsLQ
/dns4/bootstrap-0.testnet.fildev.network/tcp/1347/p2p/12D3KooWJTUBUjtzWJGWU1XSiY21CwmHaCNLNYn2E7jqHEHyZaP7
/dns4/bootstrap-1.testnet.fildev.network/tcp/1347/p2p/12D3KooW9yeKXha4hdrJKq74zEo99T8DhriQdWNoojWnnQbsgB3v
/dns4/bootstrap-2.testnet.fildev.network/tcp/1347/p2p/12D3KooWCrx8yVG9U9Kf7w8KLN3Edkj5ZKDhgCaeMqQbcQUoB6CT
/dns4/bootstrap-4.testnet.fildev.network/tcp/1347/p2p/12D3KooWPkL9LrKRQgHtq7kn9ecNhGU9QaziG8R5tX8v9v7t3h34
/dns4/bootstrap-3.testnet.fildev.network/tcp/1347/p2p/12D3KooWKYSsbpgZ3HAjax5M1BXCwXLa6gVkUARciz7uN3FNtr7T
/dns4/bootstrap-5.testnet.fildev.network/tcp/1347/p2p/12D3KooWQYzqnLASJAabyMpPb1GcWZvNSe7JDcRuhdRqonFoiK9W
+10
View File
@@ -0,0 +1,10 @@
package build
import "github.com/raulk/clock"
// Clock is the global clock for the system. In standard builds,
// we use a real-time clock, which maps to the `time` package.
//
// Tests that need control of time can replace this variable with
// clock.NewMock(). Always use real time for socket/stream deadlines.
var Clock = clock.New()
+83
View File
@@ -0,0 +1,83 @@
package build
import (
"sort"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
type DrandEnum int
func DrandConfigSchedule() dtypes.DrandSchedule {
out := dtypes.DrandSchedule{}
for start, config := range DrandSchedule {
out = append(out, dtypes.DrandPoint{Start: start, Config: DrandConfigs[config]})
}
sort.Slice(out, func(i, j int) bool {
return out[i].Start < out[j].Start
})
return out
}
const (
DrandMainnet DrandEnum = iota + 1
DrandTestnet
DrandDevnet
DrandLocalnet
DrandIncentinet
)
var DrandConfigs = map[DrandEnum]dtypes.DrandConfig{
DrandMainnet: {
Servers: []string{
"https://api.drand.sh",
"https://api2.drand.sh",
"https://api3.drand.sh",
},
Relays: []string{
"/dnsaddr/api.drand.sh/",
"/dnsaddr/api2.drand.sh/",
"/dnsaddr/api3.drand.sh/",
},
ChainInfoJSON: `{"public_key":"868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af31","period":30,"genesis_time":1595431050,"hash":"8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce","groupHash":"176f93498eac9ca337150b46d21dd58673ea4e3581185f869672e59fa4cb390a"}`,
},
DrandTestnet: {
Servers: []string{
"https://pl-eu.testnet.drand.sh",
"https://pl-us.testnet.drand.sh",
"https://pl-sin.testnet.drand.sh",
},
Relays: []string{
"/dnsaddr/pl-eu.testnet.drand.sh/",
"/dnsaddr/pl-us.testnet.drand.sh/",
"/dnsaddr/pl-sin.testnet.drand.sh/",
},
ChainInfoJSON: `{"public_key":"922a2e93828ff83345bae533f5172669a26c02dc76d6bf59c80892e12ab1455c229211886f35bb56af6d5bea981024df","period":25,"genesis_time":1590445175,"hash":"84b2234fb34e835dccd048255d7ad3194b81af7d978c3bf157e3469592ae4e02","groupHash":"4dd408e5fdff9323c76a9b6f087ba8fdc5a6da907bd9217d9d10f2287d081957"}`,
},
DrandDevnet: {
Servers: []string{
"https://dev1.drand.sh",
"https://dev2.drand.sh",
},
Relays: []string{
"/dnsaddr/dev1.drand.sh/",
"/dnsaddr/dev2.drand.sh/",
},
ChainInfoJSON: `{"public_key":"8cda589f88914aa728fd183f383980b35789ce81b274e5daee1f338b77d02566ef4d3fb0098af1f844f10f9c803c1827","period":25,"genesis_time":1595348225,"hash":"e73b7dc3c4f6a236378220c0dd6aa110eb16eed26c11259606e07ee122838d4f","groupHash":"567d4785122a5a3e75a9bc9911d7ea807dd85ff76b78dc4ff06b075712898607"}`,
},
DrandIncentinet: {
Servers: []string{
"https://pl-eu.incentinet.drand.sh",
"https://pl-us.incentinet.drand.sh",
"https://pl-sin.incentinet.drand.sh",
},
Relays: []string{
"/dnsaddr/pl-eu.incentinet.drand.sh/",
"/dnsaddr/pl-us.incentinet.drand.sh/",
"/dnsaddr/pl-sin.incentinet.drand.sh/",
},
ChainInfoJSON: `{"public_key":"8cad0c72c606ab27d36ee06de1d5b2db1faf92e447025ca37575ab3a8aac2eaae83192f846fc9e158bc738423753d000","period":30,"genesis_time":1595873820,"hash":"80c8b872c714f4c00fdd3daa465d5514049f457f01f85a4caf68cdcd394ba039","groupHash":"d9406aaed487f7af71851b4399448e311f2328923d454e971536c05398ce2d9b"}`,
},
}
+15
View File
@@ -0,0 +1,15 @@
package build
// DisableBuiltinAssets disables the resolution of go.rice boxes that store
// built-in assets, such as proof parameters, bootstrap peers, genesis blocks,
// etc.
//
// When this value is set to true, it is expected that the user will
// provide any such configurations through the Lotus API itself.
//
// This is useful when you're using Lotus as a library, such as to orchestrate
// test scenarios, or for other purposes where you don't need to use the
// defaults shipped with the binary.
//
// For this flag to be effective, it must be enabled _before_ instantiating Lotus.
var DisableBuiltinAssets = false
Binary file not shown.
+1 -1
View File
@@ -2,6 +2,6 @@ package build
import rice "github.com/GeertJohan/go.rice"
func ParametersJson() []byte {
func ParametersJSON() []byte {
return rice.MustFindBox("proof-params").MustBytes("parameters.json")
}
+21 -11
View File
@@ -3,25 +3,35 @@
package build
import (
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/power"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
)
func init() {
power.ConsensusMinerMinPower = big.NewInt(2048)
miner.SupportedProofTypes = map[abi.RegisteredProof]struct{}{
abi.RegisteredProof_StackedDRG2KiBSeal: {},
}
verifreg.MinVerifiedDealSize = big.NewInt(256)
const UpgradeBreezeHeight = -1
const BreezeGasTampingDuration = 0
const UpgradeSmokeHeight = -1
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
0: DrandMainnet,
}
// Seconds
const BlockDelay = 2
func init() {
power.ConsensusMinerMinPower = big.NewInt(2048)
miner.SupportedProofTypes = map[abi.RegisteredSealProof]struct{}{
abi.RegisteredSealProof_StackedDrg2KiBV1: {},
}
verifreg.MinVerifiedDealSize = big.NewInt(256)
const PropagationDelay = 3
BuildType |= Build2k
}
const BlockDelaySecs = uint64(4)
const PropagationDelaySecs = uint64(1)
// SlashablePowerDelay is the number of epochs after ElectionPeriodStart, after
// which the miner is slashed
+1
View File
@@ -4,6 +4,7 @@ package build
func init() {
InsecurePoStValidation = true
BuildType |= BuildDebug
}
// NOTE: Also includes settings from params_2k
-124
View File
@@ -1,124 +0,0 @@
package build
import (
"math/big"
"sort"
"github.com/libp2p/go-libp2p-core/protocol"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
func DefaultSectorSize() abi.SectorSize {
szs := make([]abi.SectorSize, 0, len(miner.SupportedProofTypes))
for spt := range miner.SupportedProofTypes {
ss, err := spt.SectorSize()
if err != nil {
panic(err)
}
szs = append(szs, ss)
}
sort.Slice(szs, func(i, j int) bool {
return szs[i] < szs[j]
})
return szs[0]
}
// Core network constants
func BlocksTopic(netName dtypes.NetworkName) string { return "/fil/blocks/" + string(netName) }
func MessagesTopic(netName dtypes.NetworkName) string { return "/fil/msgs/" + string(netName) }
func DhtProtocolName(netName dtypes.NetworkName) protocol.ID {
return protocol.ID("/fil/kad/" + string(netName))
}
// /////
// Storage
const UnixfsChunkSize uint64 = 1 << 20
const UnixfsLinksPerLevel = 1024
// /////
// Consensus / Network
// Seconds
const AllowableClockDrift = 1
// Epochs
const ForkLengthThreshold = Finality
// Blocks (e)
var BlocksPerEpoch = uint64(builtin.ExpectedLeadersPerEpoch)
// Epochs
const Finality = miner.ChainFinalityish
// constants for Weight calculation
// The ratio of weight contributed by short-term vs long-term factors in a given round
const WRatioNum = int64(1)
const WRatioDen = 2
// /////
// Proofs
// Epochs
const SealRandomnessLookback = Finality
// Epochs
const SealRandomnessLookbackLimit = SealRandomnessLookback + 2000 // TODO: Get from spec specs-actors
// Maximum lookback that randomness can be sourced from for a seal proof submission
const MaxSealLookback = SealRandomnessLookbackLimit + 2000 // TODO: Get from specs-actors
// /////
// Mining
// Epochs
const TicketRandomnessLookback = 1
const WinningPoStSectorSetLookback = 10
// /////
// Devnet settings
const TotalFilecoin = 2_000_000_000
const MiningRewardTotal = 1_400_000_000
const FilecoinPrecision = 1_000_000_000_000_000_000
var InitialRewardBalance *big.Int
// TODO: Move other important consts here
func init() {
InitialRewardBalance = big.NewInt(MiningRewardTotal)
InitialRewardBalance = InitialRewardBalance.Mul(InitialRewardBalance, big.NewInt(FilecoinPrecision))
}
// Sync
const BadBlockCacheSize = 1 << 15
// assuming 4000 messages per round, this lets us not lose any messages across a
// 10 block reorg.
const BlsSignatureCacheSize = 40000
// ///////
// Limits
// TODO: If this is gonna stay, it should move to specs-actors
const BlockMessageLimit = 512
const BlockGasLimit = 100_000_000
var DrandCoeffs = []string{
"82c279cce744450e68de98ee08f9698a01dd38f8e3be3c53f2b840fb9d09ad62a0b6b87981e179e1b14bc9a2d284c985",
"82d51308ad346c686f81b8094551597d7b963295cbf313401a93df9baf52d5ae98a87745bee70839a4d6e65c342bd15b",
"94eebfd53f4ba6a3b8304236400a12e73885e5a781509a5c8d41d2e8b476923d8ea6052649b3c17282f596217f96c5de",
"8dc4231e42b4edf39e86ef1579401692480647918275da767d3e558c520d6375ad953530610fd27daf110187877a65d0",
}
+46
View File
@@ -0,0 +1,46 @@
package build
import (
"sort"
"github.com/libp2p/go-libp2p-core/protocol"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
func DefaultSectorSize() abi.SectorSize {
szs := make([]abi.SectorSize, 0, len(miner.SupportedProofTypes))
for spt := range miner.SupportedProofTypes {
ss, err := spt.SectorSize()
if err != nil {
panic(err)
}
szs = append(szs, ss)
}
sort.Slice(szs, func(i, j int) bool {
return szs[i] < szs[j]
})
return szs[0]
}
// Core network constants
func BlocksTopic(netName dtypes.NetworkName) string { return "/fil/blocks/" + string(netName) }
func MessagesTopic(netName dtypes.NetworkName) string { return "/fil/msgs/" + string(netName) }
func DhtProtocolName(netName dtypes.NetworkName) protocol.ID {
return protocol.ID("/fil/kad/" + string(netName))
}
func UseNewestNetwork() bool {
// TODO: Put these in a container we can iterate over
if UpgradeBreezeHeight <= 0 && UpgradeSmokeHeight <= 0 {
return true
}
return false
}
+106
View File
@@ -0,0 +1,106 @@
// +build !testground
package build
import (
"math/big"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
)
// /////
// Storage
const UnixfsChunkSize uint64 = 1 << 20
const UnixfsLinksPerLevel = 1024
// /////
// Consensus / Network
const AllowableClockDriftSecs = uint64(1)
const NewestNetworkVersion = network.Version2
// Epochs
const ForkLengthThreshold = Finality
// Blocks (e)
var BlocksPerEpoch = uint64(builtin.ExpectedLeadersPerEpoch)
// Epochs
const Finality = miner.ChainFinality
const MessageConfidence = uint64(5)
// constants for Weight calculation
// The ratio of weight contributed by short-term vs long-term factors in a given round
const WRatioNum = int64(1)
const WRatioDen = uint64(2)
// /////
// Proofs
// Epochs
const SealRandomnessLookback = Finality
// Epochs
const SealRandomnessLookbackLimit = SealRandomnessLookback + 2000 // TODO: Get from spec specs-actors
// Maximum lookback that randomness can be sourced from for a seal proof submission
const MaxSealLookback = SealRandomnessLookbackLimit + 2000 // TODO: Get from specs-actors
// /////
// Mining
// Epochs
const TicketRandomnessLookback = abi.ChainEpoch(1)
const WinningPoStSectorSetLookback = abi.ChainEpoch(10)
// /////
// Devnet settings
const FilBase = uint64(2_000_000_000)
const FilAllocStorageMining = uint64(1_100_000_000)
const FilecoinPrecision = uint64(1_000_000_000_000_000_000)
var InitialRewardBalance *big.Int
// TODO: Move other important consts here
func init() {
InitialRewardBalance = big.NewInt(int64(FilAllocStorageMining))
InitialRewardBalance = InitialRewardBalance.Mul(InitialRewardBalance, big.NewInt(int64(FilecoinPrecision)))
}
// Sync
const BadBlockCacheSize = 1 << 15
// assuming 4000 messages per round, this lets us not lose any messages across a
// 10 block reorg.
const BlsSignatureCacheSize = 40000
// Size of signature verification cache
// 32k keeps the cache around 10MB in size, max
const VerifSigCacheSize = 32000
// ///////
// Limits
// TODO: If this is gonna stay, it should move to specs-actors
const BlockMessageLimit = 10000
const BlockGasLimit = 10_000_000_000
const BlockGasTarget = BlockGasLimit / 2
const BaseFeeMaxChangeDenom = 8 // 12.5%
const InitialBaseFee = 100e6
const MinimumBaseFee = 100
const PackingEfficiencyNum = 4
const PackingEfficiencyDenom = 5
// Actor consts
// TODO: Pull from actors when its made not private
var MinDealDuration = abi.ChainEpoch(180 * builtin.EpochsInDay)
+84
View File
@@ -0,0 +1,84 @@
// +build testground
// This file makes hardcoded parameters (const) configurable as vars.
//
// Its purpose is to unlock various degrees of flexibility and parametrization
// when writing Testground plans for Lotus.
//
package build
import (
"math/big"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
)
var (
UnixfsChunkSize = uint64(1 << 20)
UnixfsLinksPerLevel = 1024
BlocksPerEpoch = uint64(builtin.ExpectedLeadersPerEpoch)
BlockMessageLimit = 512
BlockGasLimit = int64(100_000_000_000)
BlockGasTarget = int64(BlockGasLimit / 2)
BaseFeeMaxChangeDenom = int64(8) // 12.5%
InitialBaseFee = int64(100e6)
MinimumBaseFee = int64(100)
BlockDelaySecs = uint64(builtin.EpochDurationSeconds)
PropagationDelaySecs = uint64(6)
AllowableClockDriftSecs = uint64(1)
Finality = miner.ChainFinality
ForkLengthThreshold = Finality
SlashablePowerDelay = 20
InteractivePoRepConfidence = 6
MessageConfidence uint64 = 5
WRatioNum = int64(1)
WRatioDen = uint64(2)
BadBlockCacheSize = 1 << 15
BlsSignatureCacheSize = 40000
VerifSigCacheSize = 32000
SealRandomnessLookback = Finality
SealRandomnessLookbackLimit = SealRandomnessLookback + 2000
MaxSealLookback = SealRandomnessLookbackLimit + 2000
TicketRandomnessLookback = abi.ChainEpoch(1)
WinningPoStSectorSetLookback = abi.ChainEpoch(10)
FilBase uint64 = 2_000_000_000
FilAllocStorageMining uint64 = 1_400_000_000
FilecoinPrecision uint64 = 1_000_000_000_000_000_000
InitialRewardBalance = func() *big.Int {
v := big.NewInt(int64(FilAllocStorageMining))
v = v.Mul(v, big.NewInt(int64(FilecoinPrecision)))
return v
}()
// Actor consts
// TODO: Pull from actors when its made not private
MinDealDuration = abi.ChainEpoch(180 * builtin.EpochsInDay)
PackingEfficiencyNum int64 = 4
PackingEfficiencyDenom int64 = 5
UpgradeBreezeHeight abi.ChainEpoch = -1
BreezeGasTampingDuration abi.ChainEpoch = 0
UpgradeSmokeHeight abi.ChainEpoch = -1
DrandSchedule = map[abi.ChainEpoch]DrandEnum{
0: DrandMainnet,
}
NewestNetworkVersion = network.Version2
)
+19 -9
View File
@@ -1,25 +1,35 @@
// +build !debug
// +build !2k
// +build !testground
package build
import (
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/power"
)
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
0: DrandIncentinet,
UpgradeSmokeHeight: DrandMainnet,
}
const UpgradeBreezeHeight = 41280
const BreezeGasTampingDuration = 120
const UpgradeSmokeHeight = 51000
func init() {
power.ConsensusMinerMinPower = big.NewInt(1024 << 30)
miner.SupportedProofTypes = map[abi.RegisteredProof]struct{}{
abi.RegisteredProof_StackedDRG32GiBSeal: {},
abi.RegisteredProof_StackedDRG64GiBSeal: {},
power.ConsensusMinerMinPower = big.NewInt(10 << 40)
miner.SupportedProofTypes = map[abi.RegisteredSealProof]struct{}{
abi.RegisteredSealProof_StackedDrg32GiBV1: {},
abi.RegisteredSealProof_StackedDrg64GiBV1: {},
}
}
// Seconds
const BlockDelay = builtin.EpochDurationSeconds
const BlockDelaySecs = uint64(builtin.EpochDurationSeconds)
const PropagationDelay = 6
const PropagationDelaySecs = uint64(6)
+91 -91
View File
@@ -1,152 +1,152 @@
{
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.params": {
"cid": "QmYkygifkXnrnsN4MJsjBFHTQJHx294CyikDgDK8nYxdGh",
"digest": "df3f30442a6d6b4192f5071fb17e820c",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.params": {
"cid": "QmVxjFRyhmyQaZEtCh7nk2abc7LhFkzhnRX4rcHqCCpikR",
"digest": "7610b9f82bfc88405b7a832b651ce2f6",
"sector_size": 2048
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.vk": {
"cid": "QmdXyqbmy2bkJA9Kyhh6z25GrTCq48LwX6c1mxPsm54wi7",
"digest": "0bea3951abf9557a3569f68e52a30c6c",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.vk": {
"cid": "QmcS5JZs8X3TdtkEBpHAdUYjdNDqcL7fWQFtQz69mpnu2X",
"digest": "0e0958009936b9d5e515ec97b8cb792d",
"sector_size": 2048
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.params": {
"cid": "Qmf5XZZtP5VcYTf65MbKjLVabcS6cYMbr2rFShmfJzh5e5",
"digest": "655e6277638edc8c658094f6f0b33d54",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.params": {
"cid": "QmUiRx71uxfmUE8V3H9sWAsAXoM88KR4eo1ByvvcFNeTLR",
"digest": "1a7d4a9c8a502a497ed92a54366af33f",
"sector_size": 536870912
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.vk": {
"cid": "QmPuhdWnAXBks43emnkqi9FQzyU1gASKyz23zrD27BPGs8",
"digest": "57690e3a6a94c3f704802a674b34f36b",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.vk": {
"cid": "QmfCeddjFpWtavzfEzZpJfzSajGNwfL4RjFXWAvA9TSnTV",
"digest": "4dae975de4f011f101f5a2f86d1daaba",
"sector_size": 536870912
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.params": {
"cid": "QmPNVgTN7N5vDtD5u7ERMTLcvUtrKRBfYVUDr6uW3pKhX7",
"digest": "3d390654f58e603b896ac70c653f5676",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.params": {
"cid": "QmcSTqDcFVLGGVYz1njhUZ7B6fkKtBumsLUwx4nkh22TzS",
"digest": "82c88066be968bb550a05e30ff6c2413",
"sector_size": 2048
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.vk": {
"cid": "Qmbj61Zez7v5xA7nSCnmWbyLYznWJDWeusz7Yg8EcgVdoN",
"digest": "8c170a164743c39576a7f47a1b51e6f3",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.vk": {
"cid": "QmSTCXF2ipGA3f6muVo6kHc2URSx6PzZxGUqu7uykaH5KU",
"digest": "ffd79788d614d27919ae5bd2d94eacb6",
"sector_size": 2048
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.params": {
"cid": "QmRApb8RZoBK3cqicT7V3ydXg8yVvqPFMPrQNXP33aBihp",
"digest": "b1b58ff9a297b82885e8a7dfb035f83c",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.params": {
"cid": "QmU9SBzJNrcjRFDiFc4GcApqdApN6z9X7MpUr66mJ2kAJP",
"digest": "700171ecf7334e3199437c930676af82",
"sector_size": 8388608
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.vk": {
"cid": "QmcytF1dTdqMFoyXi931j1RgmGtLfR9LLLaBznRt1tPQyD",
"digest": "1a09e00c641f192f55af3433a028f050",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.vk": {
"cid": "QmbmUMa3TbbW3X5kFhExs6WgC4KeWT18YivaVmXDkB6ANG",
"digest": "79ebb55f56fda427743e35053edad8fc",
"sector_size": 8388608
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.params": {
"cid": "QmPvr54tWaVeP4WnekivzUAJitTqsQfvikBvAHNEaDNQSw",
"digest": "9380e41368ed4083dbc922b290d3b786",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.params": {
"cid": "QmdNEL2RtqL52GQNuj8uz6mVj5Z34NVnbaJ1yMyh1oXtBx",
"digest": "c49499bb76a0762884896f9683403f55",
"sector_size": 8388608
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.vk": {
"cid": "QmXyVLVDRCcxA9SjT7PeK8HFtyxZ2ZH3SHa8KoGLw8VGJt",
"digest": "f0731a7e20f90704bd38fc5d27882f6d",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.vk": {
"cid": "QmUiVYCQUgr6Y13pZFr8acWpSM4xvTXUdcvGmxyuHbKhsc",
"digest": "34d4feeacd9abf788d69ef1bb4d8fd00",
"sector_size": 8388608
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.params": {
"cid": "Qmf5f6ko3dqj7qauzXpZqxM9B2x2sL977K6gE2ppNwuJPv",
"digest": "273ebb8c896326b7c292bee8b775fd38",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.params": {
"cid": "QmVgCsJFRXKLuuUhT3aMYwKVGNA9rDeR6DCrs7cAe8riBT",
"digest": "827359440349fe8f5a016e7598993b79",
"sector_size": 536870912
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.vk": {
"cid": "QmfP3MQe8koW63n5MkDENENVHxib78MJYYyZvbneCsuze8",
"digest": "3dd94da9da64e51b3445bc528d84e76d",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.vk": {
"cid": "QmfA31fbCWojSmhSGvvfxmxaYCpMoXP95zEQ9sLvBGHNaN",
"digest": "bd2cd62f65c1ab84f19ca27e97b7c731",
"sector_size": 536870912
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.params": {
"cid": "QmYEeeCE8uT2bsVkxcqqUYeMmMEbe6rfmo8wQCv7jFHqqm",
"digest": "c947f2021304ed43b7216f7a8436e294",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.params": {
"cid": "QmaUmfcJt6pozn8ndq1JVBzLRjRJdHMTPd4foa8iw5sjBZ",
"digest": "2cf49eb26f1fee94c85781a390ddb4c8",
"sector_size": 34359738368
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.vk": {
"cid": "QmXB63ExriFjB4ywWnXTnFwCcLFfCeEP3h15qtL5i7F4aX",
"digest": "ab20d7b253e7e9a0d2ccdf7599ec8ec3",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.vk": {
"cid": "QmR9i9KL3vhhAqTBGj1bPPC7LvkptxrH9RvxJxLN1vvsBE",
"digest": "0f8ec542485568fa3468c066e9fed82b",
"sector_size": 34359738368
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.params": {
"cid": "QmW5Yxg3L1NSzuQVcRMHMbG3uvVoi4dTLzVaDpnEUPQpnA",
"digest": "079ba19645828ae42b22b0e3f4866e8d",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.params": {
"cid": "Qmdtczp7p4wrbDofmHdGhiixn9irAcN77mV9AEHZBaTt1i",
"digest": "d84f79a16fe40e9e25a36e2107bb1ba0",
"sector_size": 34359738368
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.vk": {
"cid": "QmQzZ5dJ11tcSBees38WX41tZLXS9BqpEti253m5QcnTNs",
"digest": "c76125a50a7de315165de359b5174ae4",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.vk": {
"cid": "QmZCvxKcKP97vDAk8Nxs9R1fWtqpjQrAhhfXPoCi1nkDoF",
"digest": "fc02943678dd119e69e7fab8420e8819",
"sector_size": 34359738368
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.params": {
"cid": "QmNk3wga1tS53FUu1QnkK8ehWA2cqpCnSEAPv3KLxdJxNa",
"digest": "421e4790c0b80e0107a7ff67acf14084",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.params": {
"cid": "QmeAN4vuANhXsF8xP2Lx5j2L6yMSdogLzpcvqCJThRGK1V",
"digest": "3810b7780ac0e299b22ae70f1f94c9bc",
"sector_size": 68719476736
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.vk": {
"cid": "QmVQCHGsrUtbn9RjHs1e6GXfeXDW5m9w4ge48PSX3Z2as2",
"digest": "8b60e9cc1470a6729c687d6cf0a1f79c",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.vk": {
"cid": "QmWV8rqZLxs1oQN9jxNWmnT1YdgLwCcscv94VARrhHf1T7",
"digest": "59d2bf1857adc59a4f08fcf2afaa916b",
"sector_size": 68719476736
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.params": {
"cid": "QmTL3VvydaMFWKvE5VzxjgKsJYgL9JMM4JVYNtQxdj9JK1",
"digest": "2685f31124b22ea6b2857e5a5e87ffa3",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.params": {
"cid": "QmVkrXc1SLcpgcudK5J25HH93QvR9tNsVhVTYHm5UymXAz",
"digest": "2170a91ad5bae22ea61f2ea766630322",
"sector_size": 68719476736
},
"v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.vk": {
"cid": "QmSVWbLqQYbUbbJyfsRMzEib2rfSqMtnPks1Nw22omcBQm",
"digest": "efe703cd2839597c7ca5c2a906b74296",
"v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.vk": {
"cid": "QmbfQjPD7EpzjhWGmvWAsyN2mAZ4PcYhsf3ujuhU9CSuBm",
"digest": "6d3789148fb6466d07ee1e24d6292fd6",
"sector_size": 68719476736
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.params": {
"cid": "QmU9dH31nZZUJnsogR4Ld4ySUcH6wm2RgmGiujwnqtbU6k",
"digest": "fcef8e87ae2afd7a28aae44347b804cf",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.params": {
"cid": "QmWceMgnWYLopMuM4AoGMvGEau7tNe5UK83XFjH5V9B17h",
"digest": "434fb1338ecfaf0f59256f30dde4968f",
"sector_size": 2048
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.vk": {
"cid": "QmdJ15DMGPooye5NaPcRfXUdHUDibcN7hKjbmTGuu1K4AQ",
"digest": "2ee2b3518229680db15161d4f582af37",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.vk": {
"cid": "QmamahpFCstMUqHi2qGtVoDnRrsXhid86qsfvoyCTKJqHr",
"digest": "dc1ade9929ade1708238f155343044ac",
"sector_size": 2048
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.params": {
"cid": "QmZgtxcY3tMXXQxZTA7ZTUDXLVUnfxNcerXgeW4gG2NnfP",
"digest": "3273c7135cb75684248b475781b738ee",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.params": {
"cid": "QmYBpTt7LWNAWr1JXThV5VxX7wsQFLd1PHrGYVbrU1EZjC",
"digest": "6c77597eb91ab936c1cef4cf19eba1b3",
"sector_size": 536870912
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.vk": {
"cid": "QmSS6ZkAV2aGZcgKgdPpEEgihXF1ryZX8PSAZDWSoeL1d4",
"digest": "1519b5f61d9044a59f2bdc57537c094b",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.vk": {
"cid": "QmWionkqH2B6TXivzBSQeSyBxojaiAFbzhjtwYRrfwd8nH",
"digest": "065179da19fbe515507267677f02823e",
"sector_size": 536870912
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.params": {
"cid": "QmQBGXeiNn6hVwbR6qFarQqiNGDdKk4h9ucfyvcXyfYz2N",
"digest": "7d5f896f435c38e93bcda6dd168d860b",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.params": {
"cid": "QmPXAPPuQtuQz7Zz3MHMAMEtsYwqM1o9H1csPLeiMUQwZH",
"digest": "09e612e4eeb7a0eb95679a88404f960c",
"sector_size": 8388608
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.vk": {
"cid": "QmPrZgBVGMckEAeu5eSJnLmiAwcPQjKjZe5ir6VaQ5AxKs",
"digest": "fe6d2de44580a0db5a4934688899b92f",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.vk": {
"cid": "QmYCuipFyvVW1GojdMrjK1JnMobXtT4zRCZs1CGxjizs99",
"digest": "b687beb9adbd9dabe265a7e3620813e4",
"sector_size": 8388608
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.params": {
"cid": "QmZL2cq45XJn5BFzagAZwgFmLrcM1W6CXoiEF9C5j5tjEF",
"digest": "acdfed9f0512bc85a01a9fb871d475d5",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.params": {
"cid": "QmengpM684XLQfG8754ToonszgEg2bQeAGUan5uXTHUQzJ",
"digest": "6a388072a518cf46ebd661f5cc46900a",
"sector_size": 34359738368
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.vk": {
"cid": "QmQ4zB7nNa1tDYNifBkExRnZtwtxZw775iaqvVsZyRi6Q2",
"digest": "524a2f3e9d6826593caebc41bb545c40",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.vk": {
"cid": "Qmf93EMrADXAK6CyiSfE8xx45fkMfR3uzKEPCvZC1n2kzb",
"digest": "0c7b4aac1c40fdb7eb82bc355b41addf",
"sector_size": 34359738368
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.params": {
"cid": "QmY7DitNKXFeLQt9QoVQkfjM1EvRnprqUVxjmkTXkHDNka",
"digest": "f27271c0537ba65ade2ec045f8fbd069",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.params": {
"cid": "QmS7ye6Ri2MfFzCkcUJ7FQ6zxDKuJ6J6B8k5PN7wzSR9sX",
"digest": "1801f8a6e1b00bceb00cc27314bb5ce3",
"sector_size": 68719476736
},
"v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.vk": {
"cid": "QmUJsvoCuQ4LszPmeRVAkMYb5qY95ctz3UXKhu8xLzyFKo",
"digest": "576b292938c6c9d0a0e721bd867a543b",
"v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.vk": {
"cid": "QmehSmC6BhrgRZakPDta2ewoH9nosNzdjCqQRXsNFNUkLN",
"digest": "a89884252c04c298d0b3c81bfd884164",
"sector_size": 68719476736
}
}
}
+61 -5
View File
@@ -1,13 +1,39 @@
package build
import "fmt"
import (
"fmt"
"golang.org/x/xerrors"
)
var CurrentCommit string
var BuildType int
const (
BuildDefault = 0
Build2k = 0x1
BuildDebug = 0x3
)
func buildType() string {
switch BuildType {
case BuildDefault:
return ""
case BuildDebug:
return "+debug"
case Build2k:
return "+2k"
default:
return "+huh?"
}
}
// BuildVersion is the local build version, set by build system
const BuildVersion = "0.3.0"
const BuildVersion = "0.7.1"
var UserVersion = BuildVersion + CurrentCommit
func UserVersion() string {
return BuildVersion + buildType() + CurrentCommit
}
type Version uint32
@@ -30,9 +56,39 @@ func (ve Version) EqMajorMinor(v2 Version) bool {
return ve&minorMask == v2&minorMask
}
// APIVersion is a semver version of the rpc api exposed
var APIVersion Version = newVer(0, 3, 0)
type NodeType int
const (
NodeUnknown NodeType = iota
NodeFull
NodeMiner
NodeWorker
)
var RunningNodeType NodeType
func VersionForType(nodeType NodeType) (Version, error) {
switch nodeType {
case NodeFull:
return FullAPIVersion, nil
case NodeMiner:
return MinerAPIVersion, nil
case NodeWorker:
return WorkerAPIVersion, nil
default:
return Version(0), xerrors.Errorf("unknown node type %d", nodeType)
}
}
// semver versions of the rpc api exposed
var (
FullAPIVersion = newVer(0, 15, 0)
MinerAPIVersion = newVer(0, 14, 0)
WorkerAPIVersion = newVer(0, 14, 0)
)
//nolint:varcheck,deadcode
const (
majorMask = 0xff0000
minorMask = 0xffff00
+1 -1
View File
@@ -3,7 +3,7 @@ package aerrors
import (
"fmt"
"github.com/filecoin-project/specs-actors/actors/runtime/exitcode"
"github.com/filecoin-project/go-state-types/exitcode"
"golang.org/x/xerrors"
)
+1 -1
View File
@@ -3,8 +3,8 @@ package aerrors_test
import (
"testing"
"github.com/filecoin-project/go-state-types/exitcode"
. "github.com/filecoin-project/lotus/chain/actors/aerrors"
"github.com/filecoin-project/specs-actors/actors/runtime/exitcode"
"github.com/stretchr/testify/assert"
"golang.org/x/xerrors"
+2 -1
View File
@@ -4,7 +4,7 @@ import (
"errors"
"fmt"
"github.com/filecoin-project/specs-actors/actors/runtime/exitcode"
"github.com/filecoin-project/go-state-types/exitcode"
cbor "github.com/ipfs/go-ipld-cbor"
"golang.org/x/xerrors"
)
@@ -50,6 +50,7 @@ func Newf(retCode exitcode.ExitCode, format string, args ...interface{}) ActorEr
}
// todo: bit hacky
func NewfSkip(skip int, retCode exitcode.ExitCode, format string, args ...interface{}) ActorError {
if retCode == 0 {
return &actorError{
+40 -5
View File
@@ -1,6 +1,8 @@
package chain
import (
"fmt"
"github.com/filecoin-project/lotus/build"
lru "github.com/hashicorp/golang-lru"
"github.com/ipfs/go-cid"
@@ -10,6 +12,35 @@ type BadBlockCache struct {
badBlocks *lru.ARCCache
}
type BadBlockReason struct {
Reason string
TipSet []cid.Cid
OriginalReason *BadBlockReason
}
func NewBadBlockReason(cid []cid.Cid, format string, i ...interface{}) BadBlockReason {
return BadBlockReason{
TipSet: cid,
Reason: fmt.Sprintf(format, i...),
}
}
func (bbr BadBlockReason) Linked(reason string, i ...interface{}) BadBlockReason {
or := &bbr
if bbr.OriginalReason != nil {
or = bbr.OriginalReason
}
return BadBlockReason{Reason: fmt.Sprintf(reason, i...), OriginalReason: or}
}
func (bbr BadBlockReason) String() string {
res := bbr.Reason
if bbr.OriginalReason != nil {
res += " caused by: " + fmt.Sprintf("%s %s", bbr.OriginalReason.TipSet, bbr.OriginalReason.String())
}
return res
}
func NewBadBlockCache() *BadBlockCache {
cache, err := lru.NewARC(build.BadBlockCacheSize)
if err != nil {
@@ -21,15 +52,19 @@ func NewBadBlockCache() *BadBlockCache {
}
}
func (bts *BadBlockCache) Add(c cid.Cid, reason string) {
bts.badBlocks.Add(c, reason)
func (bts *BadBlockCache) Add(c cid.Cid, bbr BadBlockReason) {
bts.badBlocks.Add(c, bbr)
}
func (bts *BadBlockCache) Has(c cid.Cid) (string, bool) {
func (bts *BadBlockCache) Remove(c cid.Cid) {
bts.badBlocks.Remove(c)
}
func (bts *BadBlockCache) Has(c cid.Cid) (BadBlockReason, bool) {
rval, ok := bts.badBlocks.Get(c)
if !ok {
return "", false
return BadBlockReason{}, false
}
return rval.(string), true
return rval.(BadBlockReason), true
}
+81 -11
View File
@@ -2,12 +2,13 @@ package beacon
import (
"context"
"time"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
logging "github.com/ipfs/go-log"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
)
var log = logging.Logger("beacon")
@@ -17,14 +18,54 @@ type Response struct {
Err error
}
type Schedule []BeaconPoint
func (bs Schedule) BeaconForEpoch(e abi.ChainEpoch) RandomBeacon {
for i := len(bs) - 1; i >= 0; i-- {
bp := bs[i]
if e >= bp.Start {
return bp.Beacon
}
}
return bs[0].Beacon
}
type BeaconPoint struct {
Start abi.ChainEpoch
Beacon RandomBeacon
}
// RandomBeacon represents a system that provides randomness to Lotus.
// Other components interrogate the RandomBeacon to acquire randomness that's
// valid for a specific chain epoch. Also to verify beacon entries that have
// been posted on chain.
type RandomBeacon interface {
Entry(context.Context, uint64) <-chan Response
VerifyEntry(types.BeaconEntry, types.BeaconEntry) error
MaxBeaconRoundForEpoch(abi.ChainEpoch, types.BeaconEntry) uint64
MaxBeaconRoundForEpoch(abi.ChainEpoch) uint64
}
func ValidateBlockValues(b RandomBeacon, h *types.BlockHeader, prevEntry types.BeaconEntry) error {
maxRound := b.MaxBeaconRoundForEpoch(h.Height, prevEntry)
func ValidateBlockValues(bSchedule Schedule, h *types.BlockHeader, parentEpoch abi.ChainEpoch,
prevEntry types.BeaconEntry) error {
{
parentBeacon := bSchedule.BeaconForEpoch(parentEpoch)
currBeacon := bSchedule.BeaconForEpoch(h.Height)
if parentBeacon != currBeacon {
if len(h.BeaconEntries) != 2 {
return xerrors.Errorf("expected two beacon entries at beacon fork, got %d", len(h.BeaconEntries))
}
err := currBeacon.VerifyEntry(h.BeaconEntries[1], h.BeaconEntries[0])
if err != nil {
return xerrors.Errorf("beacon at fork point invalid: (%v, %v): %w",
h.BeaconEntries[1], h.BeaconEntries[0], err)
}
return nil
}
}
// TODO: fork logic
b := bSchedule.BeaconForEpoch(h.Height)
maxRound := b.MaxBeaconRoundForEpoch(h.Height)
if maxRound == prevEntry.Round {
if len(h.BeaconEntries) != 0 {
return xerrors.Errorf("expected not to have any beacon entries in this block, got %d", len(h.BeaconEntries))
@@ -32,6 +73,10 @@ func ValidateBlockValues(b RandomBeacon, h *types.BlockHeader, prevEntry types.B
return nil
}
if len(h.BeaconEntries) == 0 {
return xerrors.Errorf("expected to have beacon entries in this block, but didn't find any")
}
last := h.BeaconEntries[len(h.BeaconEntries)-1]
if last.Round != maxRound {
return xerrors.Errorf("expected final beacon entry in block to be at round %d, got %d", maxRound, last.Round)
@@ -47,10 +92,35 @@ func ValidateBlockValues(b RandomBeacon, h *types.BlockHeader, prevEntry types.B
return nil
}
func BeaconEntriesForBlock(ctx context.Context, beacon RandomBeacon, round abi.ChainEpoch, prev types.BeaconEntry) ([]types.BeaconEntry, error) {
start := time.Now()
func BeaconEntriesForBlock(ctx context.Context, bSchedule Schedule, epoch abi.ChainEpoch, parentEpoch abi.ChainEpoch, prev types.BeaconEntry) ([]types.BeaconEntry, error) {
{
parentBeacon := bSchedule.BeaconForEpoch(parentEpoch)
currBeacon := bSchedule.BeaconForEpoch(epoch)
if parentBeacon != currBeacon {
// Fork logic
round := currBeacon.MaxBeaconRoundForEpoch(epoch)
out := make([]types.BeaconEntry, 2)
rch := currBeacon.Entry(ctx, round-1)
res := <-rch
if res.Err != nil {
return nil, xerrors.Errorf("getting entry %d returned error: %w", round-1, res.Err)
}
out[0] = res.Entry
rch = currBeacon.Entry(ctx, round)
res = <-rch
if res.Err != nil {
return nil, xerrors.Errorf("getting entry %d returned error: %w", round, res.Err)
}
out[1] = res.Entry
return out, nil
}
}
maxRound := beacon.MaxBeaconRoundForEpoch(round, prev)
beacon := bSchedule.BeaconForEpoch(epoch)
start := build.Clock.Now()
maxRound := beacon.MaxBeaconRoundForEpoch(epoch)
if maxRound == prev.Round {
return nil, nil
}
@@ -73,11 +143,11 @@ func BeaconEntriesForBlock(ctx context.Context, beacon RandomBeacon, round abi.C
out = append(out, resp.Entry)
cur = resp.Entry.Round - 1
case <-ctx.Done():
return nil, xerrors.Errorf("context timed out waiting on beacon entry to come back for round %d: %w", round, ctx.Err())
return nil, xerrors.Errorf("context timed out waiting on beacon entry to come back for epoch %d: %w", epoch, ctx.Err())
}
}
log.Debugw("fetching beacon entries", "took", time.Since(start), "numEntries", len(out))
log.Debugw("fetching beacon entries", "took", build.Clock.Since(start), "numEntries", len(out))
reverse(out)
return out, nil
}
+90 -127
View File
@@ -1,48 +1,34 @@
package drand
import (
"bytes"
"context"
"math/rand"
"sync"
"time"
dchain "github.com/drand/drand/chain"
dclient "github.com/drand/drand/client"
hclient "github.com/drand/drand/client/http"
dlog "github.com/drand/drand/log"
gclient "github.com/drand/drand/lp2p/client"
"github.com/drand/kyber"
kzap "github.com/go-kit/kit/log/zap"
"go.uber.org/zap/zapcore"
"golang.org/x/xerrors"
logging "github.com/ipfs/go-log"
pubsub "github.com/libp2p/go-libp2p-pubsub"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/beacon"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/specs-actors/actors/abi"
"golang.org/x/xerrors"
logging "github.com/ipfs/go-log"
dbeacon "github.com/drand/drand/beacon"
"github.com/drand/drand/core"
dkey "github.com/drand/drand/key"
dnet "github.com/drand/drand/net"
dproto "github.com/drand/drand/protobuf/drand"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
var log = logging.Logger("drand")
var drandServers = []string{
"nicolas.drand.fil-test.net:443",
"philipp.drand.fil-test.net:443",
"mathilde.drand.fil-test.net:443",
"ludovic.drand.fil-test.net:443",
"gabbi.drand.fil-test.net:443",
"linus.drand.fil-test.net:443",
"jeff.drand.fil-test.net:443",
}
var drandPubKey *dkey.DistPublic
func init() {
drandPubKey = new(dkey.DistPublic)
err := drandPubKey.FromTOML(&dkey.DistPublicTOML{Coefficients: build.DrandCoeffs})
if err != nil {
panic(err)
}
}
type drandPeer struct {
addr string
tls bool
@@ -56,14 +42,17 @@ func (dp *drandPeer) IsTLS() bool {
return dp.tls
}
// DrandBeacon connects Lotus with a drand network in order to provide
// randomness to the system in a way that's aligned with Filecoin rounds/epochs.
//
// We connect to drand peers via their public HTTP endpoints. The peers are
// enumerated in the drandServers variable.
//
// The root trust for the Drand chain is configured from build.DrandChain.
type DrandBeacon struct {
client dnet.Client
client dclient.Client
peers []dnet.Peer
peersIndex int
peersIndexMtx sync.Mutex
pubkey *dkey.DistPublic
pubkey kyber.Point
// seconds
interval time.Duration
@@ -76,120 +65,91 @@ type DrandBeacon struct {
localCache map[uint64]types.BeaconEntry
}
func NewDrandBeacon(genesisTs, interval uint64) (*DrandBeacon, error) {
func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes.DrandConfig) (*DrandBeacon, error) {
if genesisTs == 0 {
panic("what are you doing this cant be zero")
}
drandChain, err := dchain.InfoFromJSON(bytes.NewReader([]byte(config.ChainInfoJSON)))
if err != nil {
return nil, xerrors.Errorf("unable to unmarshal drand chain info: %w", err)
}
dlogger := dlog.NewKitLoggerFrom(kzap.NewZapSugarLogger(
log.SugaredLogger.Desugar(), zapcore.InfoLevel))
var clients []dclient.Client
for _, url := range config.Servers {
hc, err := hclient.NewWithInfo(url, drandChain, nil)
if err != nil {
return nil, xerrors.Errorf("could not create http drand client: %w", err)
}
clients = append(clients, hc)
}
opts := []dclient.Option{
dclient.WithChainInfo(drandChain),
dclient.WithCacheSize(1024),
dclient.WithLogger(dlogger),
dclient.WithAutoWatch(),
}
if ps != nil {
opts = append(opts, gclient.WithPubsub(ps))
} else {
log.Info("drand beacon without pubsub")
}
client, err := dclient.Wrap(clients, opts...)
if err != nil {
return nil, xerrors.Errorf("creating drand client")
}
db := &DrandBeacon{
client: dnet.NewGrpcClient(),
client: client,
localCache: make(map[uint64]types.BeaconEntry),
}
for _, ds := range drandServers {
db.peers = append(db.peers, &drandPeer{addr: ds, tls: true})
}
db.peersIndex = rand.Intn(len(db.peers))
groupResp, err := db.client.Group(context.TODO(), db.peers[db.peersIndex], &dproto.GroupRequest{})
if err != nil {
return nil, xerrors.Errorf("failed to get group response from beacon peer: %w", err)
}
kgroup, err := core.ProtoToGroup(groupResp)
if err != nil {
return nil, xerrors.Errorf("failed to parse group response: %w", err)
}
// TODO: verify these values are what we expect them to be
if !kgroup.PublicKey.Equal(drandPubKey) {
return nil, xerrors.Errorf("public key does not match")
}
// fmt.Printf("Drand Pubkey:\n%#v\n", kgroup.PublicKey.TOML()) // use to print public key
db.pubkey = drandPubKey
db.interval = kgroup.Period
db.drandGenTime = uint64(kgroup.GenesisTime)
db.pubkey = drandChain.PublicKey
db.interval = drandChain.Period
db.drandGenTime = uint64(drandChain.GenesisTime)
db.filRoundTime = interval
db.filGenTime = genesisTs
// TODO: the stream currently gives you back *all* values since drand genesis.
// Having the stream in the background is merely an optimization, so not a big deal to disable it for now
// go db.handleStreamingUpdates()
return db, nil
}
func (db *DrandBeacon) rotatePeersIndex() {
db.peersIndexMtx.Lock()
nval := rand.Intn(len(db.peers))
db.peersIndex = nval
db.peersIndexMtx.Unlock()
log.Warnf("rotated to drand peer %d, %q", nval, db.peers[nval].Address())
}
func (db *DrandBeacon) getPeerIndex() int {
db.peersIndexMtx.Lock()
defer db.peersIndexMtx.Unlock()
return db.peersIndex
}
func (db *DrandBeacon) handleStreamingUpdates() {
for {
p := db.peers[db.getPeerIndex()]
ch, err := db.client.PublicRandStream(context.Background(), p, &dproto.PublicRandRequest{})
if err != nil {
log.Warnf("failed to get public rand stream to peer %q: %s", p.Address(), err)
log.Warnf("trying again in 10 seconds")
db.rotatePeersIndex()
time.Sleep(time.Second * 10)
continue
}
for e := range ch {
db.cacheValue(types.BeaconEntry{
Round: e.Round,
Data: e.Signature,
})
}
log.Warnf("drand beacon stream to peer %q broke, reconnecting in 10 seconds", p.Address())
db.rotatePeersIndex()
time.Sleep(time.Second * 10)
}
}
func (db *DrandBeacon) Entry(ctx context.Context, round uint64) <-chan beacon.Response {
// check cache, it it if there, otherwise query the endpoint
cres := db.getCachedValue(round)
if cres != nil {
out := make(chan beacon.Response, 1)
out <- beacon.Response{Entry: *cres}
close(out)
return out
}
out := make(chan beacon.Response, 1)
if round != 0 {
be := db.getCachedValue(round)
if be != nil {
out <- beacon.Response{Entry: *be}
close(out)
return out
}
}
go func() {
p := db.peers[db.getPeerIndex()]
resp, err := db.client.PublicRand(ctx, p, &dproto.PublicRandRequest{Round: round})
start := build.Clock.Now()
log.Infow("start fetching randomness", "round", round)
resp, err := db.client.Get(ctx, round)
var br beacon.Response
if err != nil {
db.rotatePeersIndex()
br.Err = xerrors.Errorf("drand peer %q failed publicRand request: %w", p.Address(), err)
br.Err = xerrors.Errorf("drand failed Get request: %w", err)
} else {
br.Entry.Round = resp.GetRound()
br.Entry.Data = resp.GetSignature()
br.Entry.Round = resp.Round()
br.Entry.Data = resp.Signature()
}
log.Infow("done fetching randomness", "round", round, "took", build.Clock.Since(start))
out <- br
close(out)
}()
return out
}
func (db *DrandBeacon) cacheValue(e types.BeaconEntry) {
db.cacheLk.Lock()
defer db.cacheLk.Unlock()
@@ -211,20 +171,23 @@ func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntr
// TODO handle genesis better
return nil
}
b := &dbeacon.Beacon{
if be := db.getCachedValue(curr.Round); be != nil {
// return no error if the value is in the cache already
return nil
}
b := &dchain.Beacon{
PreviousSig: prev.Data,
Round: curr.Round,
Signature: curr.Data,
}
//log.Warnw("VerifyEntry", "beacon", b)
err := dbeacon.VerifyBeacon(db.pubkey.Key(), b)
err := dchain.VerifyBeacon(db.pubkey, b)
if err == nil {
db.cacheValue(curr)
}
return err
}
func (db *DrandBeacon) MaxBeaconRoundForEpoch(filEpoch abi.ChainEpoch, prevEntry types.BeaconEntry) uint64 {
func (db *DrandBeacon) MaxBeaconRoundForEpoch(filEpoch abi.ChainEpoch) uint64 {
// TODO: sometimes the genesis time for filecoin is zero and this goes negative
latestTs := ((uint64(filEpoch) * db.filRoundTime) + db.filGenTime) - db.filRoundTime
dround := (latestTs - db.drandGenTime) / uint64(db.interval.Seconds())
+18 -7
View File
@@ -1,14 +1,25 @@
package drand
import (
"fmt"
"os"
"testing"
dchain "github.com/drand/drand/chain"
hclient "github.com/drand/drand/client/http"
"github.com/stretchr/testify/assert"
"github.com/filecoin-project/lotus/build"
)
func TestPrintDrandPubkey(t *testing.T) {
bc, err := NewDrandBeacon(1, 1)
if err != nil {
t.Fatal(err)
}
fmt.Printf("Drand Pubkey:\n%#v\n", bc.pubkey.TOML())
func TestPrintGroupInfo(t *testing.T) {
server := build.DrandConfigs[build.DrandIncentinet].Servers[0]
c, err := hclient.New(server, nil, nil)
assert.NoError(t, err)
cg := c.(interface {
FetchChainInfo(groupHash []byte) (*dchain.Info, error)
})
chain, err := cg.FetchChainInfo(nil)
assert.NoError(t, err)
err = chain.ToJSON(os.Stdout)
assert.NoError(t, err)
}
+2 -6
View File
@@ -6,8 +6,8 @@ import (
"encoding/binary"
"time"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/minio/blake2b-simd"
"golang.org/x/xerrors"
)
@@ -53,11 +53,7 @@ func (mb *mockBeacon) VerifyEntry(from types.BeaconEntry, to types.BeaconEntry)
return nil
}
func (mb *mockBeacon) IsEntryForEpoch(e types.BeaconEntry, epoch abi.ChainEpoch, nulls int) (bool, error) {
return int64(e.Round) <= int64(epoch) && int64(epoch)-int64(nulls) >= int64(e.Round), nil
}
func (mb *mockBeacon) MaxBeaconRoundForEpoch(epoch abi.ChainEpoch, prevEntry types.BeaconEntry) uint64 {
func (mb *mockBeacon) MaxBeaconRoundForEpoch(epoch abi.ChainEpoch) uint64 {
return uint64(epoch)
}
+5 -4
View File
@@ -5,9 +5,10 @@ import (
"sync"
"time"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
"github.com/hashicorp/golang-lru"
peer "github.com/libp2p/go-libp2p-core/peer"
lru "github.com/hashicorp/golang-lru"
"github.com/libp2p/go-libp2p-core/peer"
)
type blockReceiptTracker struct {
@@ -37,14 +38,14 @@ func (brt *blockReceiptTracker) Add(p peer.ID, ts *types.TipSet) {
if !ok {
pset := &peerSet{
peers: map[peer.ID]time.Time{
p: time.Now(),
p: build.Clock.Now(),
},
}
brt.cache.Add(ts.Key(), pset)
return
}
val.(*peerSet).peers[p] = time.Now()
val.(*peerSet).peers[p] = build.Clock.Now()
}
func (brt *blockReceiptTracker) GetPeers(ts *types.TipSet) []peer.ID {
-257
View File
@@ -1,257 +0,0 @@
package blocksync
import (
"bufio"
"context"
"time"
"github.com/libp2p/go-libp2p-core/protocol"
"go.opencensus.io/trace"
"golang.org/x/xerrors"
cborutil "github.com/filecoin-project/go-cbor-util"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid"
logging "github.com/ipfs/go-log/v2"
inet "github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
)
var log = logging.Logger("blocksync")
type NewStreamFunc func(context.Context, peer.ID, ...protocol.ID) (inet.Stream, error)
const BlockSyncProtocolID = "/fil/sync/blk/0.0.1"
const BlockSyncMaxRequestLength = 800
type BlockSyncService struct {
cs *store.ChainStore
}
type BlockSyncRequest struct {
Start []cid.Cid
RequestLength uint64
Options uint64
}
type BSOptions struct {
IncludeBlocks bool
IncludeMessages bool
}
func ParseBSOptions(optfield uint64) *BSOptions {
return &BSOptions{
IncludeBlocks: optfield&(BSOptBlocks) != 0,
IncludeMessages: optfield&(BSOptMessages) != 0,
}
}
const (
BSOptBlocks = 1 << iota
BSOptMessages
)
const (
StatusOK = uint64(0)
StatusPartial = uint64(101)
StatusNotFound = uint64(201)
StatusGoAway = uint64(202)
StatusInternalError = uint64(203)
StatusBadRequest = uint64(204)
)
type BlockSyncResponse struct {
Chain []*BSTipSet
Status uint64
Message string
}
type BSTipSet struct {
Blocks []*types.BlockHeader
BlsMessages []*types.Message
BlsMsgIncludes [][]uint64
SecpkMessages []*types.SignedMessage
SecpkMsgIncludes [][]uint64
}
func NewBlockSyncService(cs *store.ChainStore) *BlockSyncService {
return &BlockSyncService{
cs: cs,
}
}
func (bss *BlockSyncService) HandleStream(s inet.Stream) {
ctx, span := trace.StartSpan(context.Background(), "blocksync.HandleStream")
defer span.End()
defer s.Close()
var req BlockSyncRequest
if err := cborutil.ReadCborRPC(bufio.NewReader(s), &req); err != nil {
log.Warnf("failed to read block sync request: %s", err)
return
}
log.Infow("block sync request", "start", req.Start, "len", req.RequestLength)
resp, err := bss.processRequest(ctx, s.Conn().RemotePeer(), &req)
if err != nil {
log.Warn("failed to process block sync request: ", err)
return
}
writeDeadline := 60 * time.Second
s.SetDeadline(time.Now().Add(writeDeadline))
if err := cborutil.WriteCborRPC(s, resp); err != nil {
log.Warnw("failed to write back response for handle stream", "err", err, "peer", s.Conn().RemotePeer())
return
}
}
func (bss *BlockSyncService) processRequest(ctx context.Context, p peer.ID, req *BlockSyncRequest) (*BlockSyncResponse, error) {
_, span := trace.StartSpan(ctx, "blocksync.ProcessRequest")
defer span.End()
opts := ParseBSOptions(req.Options)
if len(req.Start) == 0 {
return &BlockSyncResponse{
Status: StatusBadRequest,
Message: "no cids given in blocksync request",
}, nil
}
span.AddAttributes(
trace.BoolAttribute("blocks", opts.IncludeBlocks),
trace.BoolAttribute("messages", opts.IncludeMessages),
trace.Int64Attribute("reqlen", int64(req.RequestLength)),
)
reqlen := req.RequestLength
if reqlen > BlockSyncMaxRequestLength {
log.Warnw("limiting blocksync request length", "orig", req.RequestLength, "peer", p)
reqlen = BlockSyncMaxRequestLength
}
chain, err := collectChainSegment(bss.cs, types.NewTipSetKey(req.Start...), reqlen, opts)
if err != nil {
log.Warn("encountered error while responding to block sync request: ", err)
return &BlockSyncResponse{
Status: StatusInternalError,
Message: err.Error(),
}, nil
}
status := StatusOK
if reqlen < req.RequestLength {
status = StatusPartial
}
return &BlockSyncResponse{
Chain: chain,
Status: status,
}, nil
}
func collectChainSegment(cs *store.ChainStore, start types.TipSetKey, length uint64, opts *BSOptions) ([]*BSTipSet, error) {
var bstips []*BSTipSet
cur := start
for {
var bst BSTipSet
ts, err := cs.LoadTipSet(cur)
if err != nil {
return nil, xerrors.Errorf("failed loading tipset %s: %w", cur, err)
}
if opts.IncludeMessages {
bmsgs, bmincl, smsgs, smincl, err := gatherMessages(cs, ts)
if err != nil {
return nil, xerrors.Errorf("gather messages failed: %w", err)
}
bst.BlsMessages = bmsgs
bst.BlsMsgIncludes = bmincl
bst.SecpkMessages = smsgs
bst.SecpkMsgIncludes = smincl
}
if opts.IncludeBlocks {
bst.Blocks = ts.Blocks()
}
bstips = append(bstips, &bst)
if uint64(len(bstips)) >= length || ts.Height() == 0 {
return bstips, nil
}
cur = ts.Parents()
}
}
func gatherMessages(cs *store.ChainStore, ts *types.TipSet) ([]*types.Message, [][]uint64, []*types.SignedMessage, [][]uint64, error) {
blsmsgmap := make(map[cid.Cid]uint64)
secpkmsgmap := make(map[cid.Cid]uint64)
var secpkmsgs []*types.SignedMessage
var blsmsgs []*types.Message
var secpkincl, blsincl [][]uint64
for _, b := range ts.Blocks() {
bmsgs, smsgs, err := cs.MessagesForBlock(b)
if err != nil {
return nil, nil, nil, nil, err
}
bmi := make([]uint64, 0, len(bmsgs))
for _, m := range bmsgs {
i, ok := blsmsgmap[m.Cid()]
if !ok {
i = uint64(len(blsmsgs))
blsmsgs = append(blsmsgs, m)
blsmsgmap[m.Cid()] = i
}
bmi = append(bmi, i)
}
blsincl = append(blsincl, bmi)
smi := make([]uint64, 0, len(smsgs))
for _, m := range smsgs {
i, ok := secpkmsgmap[m.Cid()]
if !ok {
i = uint64(len(secpkmsgs))
secpkmsgs = append(secpkmsgs, m)
secpkmsgmap[m.Cid()] = i
}
smi = append(smi, i)
}
secpkincl = append(secpkincl, smi)
}
return blsmsgs, blsincl, secpkmsgs, secpkincl, nil
}
func bstsToFullTipSet(bts *BSTipSet) (*store.FullTipSet, error) {
fts := &store.FullTipSet{}
for i, b := range bts.Blocks {
fb := &types.FullBlock{
Header: b,
}
for _, mi := range bts.BlsMsgIncludes[i] {
fb.BlsMessages = append(fb.BlsMessages, bts.BlsMessages[mi])
}
for _, mi := range bts.SecpkMsgIncludes[i] {
fb.SecpkMessages = append(fb.SecpkMessages, bts.SecpkMessages[mi])
}
fts.Blocks = append(fts.Blocks, fb)
}
return fts, nil
}
-590
View File
@@ -1,590 +0,0 @@
package blocksync
import (
"bufio"
"context"
"fmt"
"math/rand"
"sort"
"sync"
"time"
blocks "github.com/ipfs/go-block-format"
bserv "github.com/ipfs/go-blockservice"
"github.com/ipfs/go-cid"
graphsync "github.com/ipfs/go-graphsync"
gsnet "github.com/ipfs/go-graphsync/network"
host "github.com/libp2p/go-libp2p-core/host"
inet "github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
"go.opencensus.io/trace"
"golang.org/x/xerrors"
cborutil "github.com/filecoin-project/go-cbor-util"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
incrt "github.com/filecoin-project/lotus/lib/increadtimeout"
"github.com/filecoin-project/lotus/lib/peermgr"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
type BlockSync struct {
bserv bserv.BlockService
gsync graphsync.GraphExchange
host host.Host
syncPeers *bsPeerTracker
peerMgr *peermgr.PeerMgr
}
func NewBlockSyncClient(bserv dtypes.ChainBlockService, h host.Host, pmgr peermgr.MaybePeerMgr, gs dtypes.Graphsync) *BlockSync {
return &BlockSync{
bserv: bserv,
host: h,
syncPeers: newPeerTracker(pmgr.Mgr),
peerMgr: pmgr.Mgr,
gsync: gs,
}
}
func (bs *BlockSync) processStatus(req *BlockSyncRequest, res *BlockSyncResponse) error {
switch res.Status {
case StatusPartial: // Partial Response
return xerrors.Errorf("not handling partial blocksync responses yet")
case StatusNotFound: // req.Start not found
return xerrors.Errorf("not found")
case StatusGoAway: // Go Away
return xerrors.Errorf("not handling 'go away' blocksync responses yet")
case StatusInternalError: // Internal Error
return xerrors.Errorf("block sync peer errored: %s", res.Message)
case StatusBadRequest:
return xerrors.Errorf("block sync request invalid: %s", res.Message)
default:
return xerrors.Errorf("unrecognized response code: %d", res.Status)
}
}
func (bs *BlockSync) GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) {
ctx, span := trace.StartSpan(ctx, "bsync.GetBlocks")
defer span.End()
if span.IsRecordingEvents() {
span.AddAttributes(
trace.StringAttribute("tipset", fmt.Sprint(tsk.Cids())),
trace.Int64Attribute("count", int64(count)),
)
}
req := &BlockSyncRequest{
Start: tsk.Cids(),
RequestLength: uint64(count),
Options: BSOptBlocks,
}
peers := bs.getPeers()
// randomize the first few peers so we don't always pick the same peer
shufflePrefix(peers)
start := time.Now()
var oerr error
for _, p := range peers {
// TODO: doing this synchronously isnt great, but fetching in parallel
// may not be a good idea either. think about this more
select {
case <-ctx.Done():
return nil, xerrors.Errorf("blocksync getblocks failed: %w", ctx.Err())
default:
}
res, err := bs.sendRequestToPeer(ctx, p, req)
if err != nil {
oerr = err
if !xerrors.Is(err, inet.ErrNoConn) {
log.Warnf("BlockSync request failed for peer %s: %s", p.String(), err)
}
continue
}
if res.Status == StatusOK || res.Status == StatusPartial {
resp, err := bs.processBlocksResponse(req, res)
if err != nil {
return nil, xerrors.Errorf("success response from peer failed to process: %w", err)
}
bs.syncPeers.logGlobalSuccess(time.Since(start))
bs.host.ConnManager().TagPeer(p, "bsync", 25)
return resp, nil
}
oerr = bs.processStatus(req, res)
if oerr != nil {
log.Warnf("BlockSync peer %s response was an error: %s", p.String(), oerr)
}
}
return nil, xerrors.Errorf("GetBlocks failed with all peers: %w", oerr)
}
func (bs *BlockSync) GetFullTipSet(ctx context.Context, p peer.ID, tsk types.TipSetKey) (*store.FullTipSet, error) {
// TODO: round robin through these peers on error
req := &BlockSyncRequest{
Start: tsk.Cids(),
RequestLength: 1,
Options: BSOptBlocks | BSOptMessages,
}
res, err := bs.sendRequestToPeer(ctx, p, req)
if err != nil {
return nil, err
}
switch res.Status {
case 0: // Success
if len(res.Chain) == 0 {
return nil, fmt.Errorf("got zero length chain response")
}
bts := res.Chain[0]
return bstsToFullTipSet(bts)
case 101: // Partial Response
return nil, xerrors.Errorf("partial responses are not handled for single tipset fetching")
case 201: // req.Start not found
return nil, fmt.Errorf("not found")
case 202: // Go Away
return nil, xerrors.Errorf("received 'go away' response peer")
case 203: // Internal Error
return nil, fmt.Errorf("block sync peer errored: %q", res.Message)
case 204: // Invalid Request
return nil, fmt.Errorf("block sync request invalid: %q", res.Message)
default:
return nil, fmt.Errorf("unrecognized response code")
}
}
func shufflePrefix(peers []peer.ID) {
pref := 5
if len(peers) < pref {
pref = len(peers)
}
buf := make([]peer.ID, pref)
perm := rand.Perm(pref)
for i, v := range perm {
buf[i] = peers[v]
}
copy(peers, buf)
}
func (bs *BlockSync) GetChainMessages(ctx context.Context, h *types.TipSet, count uint64) ([]*BSTipSet, error) {
ctx, span := trace.StartSpan(ctx, "GetChainMessages")
defer span.End()
peers := bs.getPeers()
// randomize the first few peers so we don't always pick the same peer
shufflePrefix(peers)
req := &BlockSyncRequest{
Start: h.Cids(),
RequestLength: count,
Options: BSOptMessages,
}
var err error
start := time.Now()
for _, p := range peers {
res, rerr := bs.sendRequestToPeer(ctx, p, req)
if rerr != nil {
err = rerr
log.Warnf("BlockSync request failed for peer %s: %s", p.String(), err)
continue
}
if res.Status == StatusOK {
bs.syncPeers.logGlobalSuccess(time.Since(start))
return res.Chain, nil
}
if res.Status == StatusPartial {
// TODO: track partial response sizes to ensure we don't overrequest too often
return res.Chain, nil
}
err = bs.processStatus(req, res)
if err != nil {
log.Warnf("BlockSync peer %s response was an error: %s", p.String(), err)
}
}
if err == nil {
return nil, xerrors.Errorf("GetChainMessages failed, no peers connected")
}
// TODO: What if we have no peers (and err is nil)?
return nil, xerrors.Errorf("GetChainMessages failed with all peers(%d): %w", len(peers), err)
}
func (bs *BlockSync) sendRequestToPeer(ctx context.Context, p peer.ID, req *BlockSyncRequest) (_ *BlockSyncResponse, err error) {
ctx, span := trace.StartSpan(ctx, "sendRequestToPeer")
defer span.End()
defer func() {
if err != nil {
if span.IsRecordingEvents() {
span.SetStatus(trace.Status{
Code: 5,
Message: err.Error(),
})
}
}
}()
if span.IsRecordingEvents() {
span.AddAttributes(
trace.StringAttribute("peer", p.Pretty()),
)
}
gsproto := string(gsnet.ProtocolGraphsync)
supp, err := bs.host.Peerstore().SupportsProtocols(p, BlockSyncProtocolID, gsproto)
if err != nil {
return nil, xerrors.Errorf("failed to get protocols for peer: %w", err)
}
if len(supp) == 0 {
return nil, xerrors.Errorf("peer %s supports no known sync protocols", p)
}
switch supp[0] {
case BlockSyncProtocolID:
res, err := bs.fetchBlocksBlockSync(ctx, p, req)
if err != nil {
return nil, xerrors.Errorf("blocksync req failed: %w", err)
}
return res, nil
case gsproto:
res, err := bs.fetchBlocksGraphSync(ctx, p, req)
if err != nil {
return nil, xerrors.Errorf("graphsync req failed: %w", err)
}
return res, nil
default:
return nil, xerrors.Errorf("peerstore somehow returned unexpected protocols: %v", supp)
}
}
func (bs *BlockSync) fetchBlocksBlockSync(ctx context.Context, p peer.ID, req *BlockSyncRequest) (*BlockSyncResponse, error) {
ctx, span := trace.StartSpan(ctx, "blockSyncFetch")
defer span.End()
start := time.Now()
s, err := bs.host.NewStream(inet.WithNoDial(ctx, "should already have connection"), p, BlockSyncProtocolID)
if err != nil {
bs.RemovePeer(p)
return nil, xerrors.Errorf("failed to open stream to peer: %w", err)
}
s.SetWriteDeadline(time.Now().Add(5 * time.Second))
if err := cborutil.WriteCborRPC(s, req); err != nil {
s.SetWriteDeadline(time.Time{})
bs.syncPeers.logFailure(p, time.Since(start))
return nil, err
}
s.SetWriteDeadline(time.Time{})
var res BlockSyncResponse
r := incrt.New(s, 50<<10, 5*time.Second)
if err := cborutil.ReadCborRPC(bufio.NewReader(r), &res); err != nil {
bs.syncPeers.logFailure(p, time.Since(start))
return nil, err
}
if span.IsRecordingEvents() {
span.AddAttributes(
trace.Int64Attribute("resp_status", int64(res.Status)),
trace.StringAttribute("msg", res.Message),
trace.Int64Attribute("chain_len", int64(len(res.Chain))),
)
}
bs.syncPeers.logSuccess(p, time.Since(start))
return &res, nil
}
func (bs *BlockSync) processBlocksResponse(req *BlockSyncRequest, res *BlockSyncResponse) ([]*types.TipSet, error) {
if len(res.Chain) == 0 {
return nil, xerrors.Errorf("got no blocks in successful blocksync response")
}
cur, err := types.NewTipSet(res.Chain[0].Blocks)
if err != nil {
return nil, err
}
out := []*types.TipSet{cur}
for bi := 1; bi < len(res.Chain); bi++ {
next := res.Chain[bi].Blocks
nts, err := types.NewTipSet(next)
if err != nil {
return nil, err
}
if !types.CidArrsEqual(cur.Parents().Cids(), nts.Cids()) {
return nil, fmt.Errorf("parents of tipset[%d] were not tipset[%d]", bi-1, bi)
}
out = append(out, nts)
cur = nts
}
return out, nil
}
func (bs *BlockSync) GetBlock(ctx context.Context, c cid.Cid) (*types.BlockHeader, error) {
sb, err := bs.bserv.GetBlock(ctx, c)
if err != nil {
return nil, err
}
return types.DecodeBlock(sb.RawData())
}
func (bs *BlockSync) AddPeer(p peer.ID) {
bs.syncPeers.addPeer(p)
}
func (bs *BlockSync) RemovePeer(p peer.ID) {
bs.syncPeers.removePeer(p)
}
func (bs *BlockSync) getPeers() []peer.ID {
return bs.syncPeers.prefSortedPeers()
}
func (bs *BlockSync) FetchMessagesByCids(ctx context.Context, cids []cid.Cid) ([]*types.Message, error) {
out := make([]*types.Message, len(cids))
err := bs.fetchCids(ctx, cids, func(i int, b blocks.Block) error {
msg, err := types.DecodeMessage(b.RawData())
if err != nil {
return err
}
if out[i] != nil {
return fmt.Errorf("received duplicate message")
}
out[i] = msg
return nil
})
if err != nil {
return nil, err
}
return out, nil
}
func (bs *BlockSync) FetchSignedMessagesByCids(ctx context.Context, cids []cid.Cid) ([]*types.SignedMessage, error) {
out := make([]*types.SignedMessage, len(cids))
err := bs.fetchCids(ctx, cids, func(i int, b blocks.Block) error {
smsg, err := types.DecodeSignedMessage(b.RawData())
if err != nil {
return err
}
if out[i] != nil {
return fmt.Errorf("received duplicate message")
}
out[i] = smsg
return nil
})
if err != nil {
return nil, err
}
return out, nil
}
func (bs *BlockSync) fetchCids(ctx context.Context, cids []cid.Cid, cb func(int, blocks.Block) error) error {
resp := bs.bserv.GetBlocks(context.TODO(), cids)
m := make(map[cid.Cid]int)
for i, c := range cids {
m[c] = i
}
for i := 0; i < len(cids); i++ {
select {
case v, ok := <-resp:
if !ok {
if i == len(cids)-1 {
break
}
return fmt.Errorf("failed to fetch all messages")
}
ix, ok := m[v.Cid()]
if !ok {
return fmt.Errorf("received message we didnt ask for")
}
if err := cb(ix, v); err != nil {
return err
}
}
}
return nil
}
type peerStats struct {
successes int
failures int
firstSeen time.Time
averageTime time.Duration
}
type bsPeerTracker struct {
lk sync.Mutex
peers map[peer.ID]*peerStats
avgGlobalTime time.Duration
pmgr *peermgr.PeerMgr
}
func newPeerTracker(pmgr *peermgr.PeerMgr) *bsPeerTracker {
return &bsPeerTracker{
peers: make(map[peer.ID]*peerStats),
pmgr: pmgr,
}
}
func (bpt *bsPeerTracker) addPeer(p peer.ID) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
if _, ok := bpt.peers[p]; ok {
return
}
bpt.peers[p] = &peerStats{
firstSeen: time.Now(),
}
}
const (
// newPeerMul is how much better than average is the new peer assumed to be
// less than one to encourouge trying new peers
newPeerMul = 0.9
)
func (bpt *bsPeerTracker) prefSortedPeers() []peer.ID {
// TODO: this could probably be cached, but as long as its not too many peers, fine for now
bpt.lk.Lock()
defer bpt.lk.Unlock()
out := make([]peer.ID, 0, len(bpt.peers))
for p := range bpt.peers {
out = append(out, p)
}
// sort by 'expected cost' of requesting data from that peer
// additionally handle edge cases where not enough data is available
sort.Slice(out, func(i, j int) bool {
pi := bpt.peers[out[i]]
pj := bpt.peers[out[j]]
var costI, costJ float64
getPeerInitLat := func(p peer.ID) float64 {
var res float64
if bpt.pmgr != nil {
if lat, ok := bpt.pmgr.GetPeerLatency(p); ok {
res = float64(lat)
}
}
if res == 0 {
res = float64(bpt.avgGlobalTime)
}
return res * newPeerMul
}
if pi.successes+pi.failures > 0 {
failRateI := float64(pi.failures) / float64(pi.failures+pi.successes)
costI = float64(pi.averageTime) + failRateI*float64(bpt.avgGlobalTime)
} else {
costI = getPeerInitLat(out[i])
}
if pj.successes+pj.failures > 0 {
failRateJ := float64(pj.failures) / float64(pj.failures+pj.successes)
costJ = float64(pj.averageTime) + failRateJ*float64(bpt.avgGlobalTime)
} else {
costJ = getPeerInitLat(out[j])
}
return costI < costJ
})
return out
}
const (
// xInvAlpha = (N+1)/2
localInvAlpha = 5 // 86% of the value is the last 9
globalInvAlpha = 20 // 86% of the value is the last 39
)
func (bpt *bsPeerTracker) logGlobalSuccess(dur time.Duration) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
if bpt.avgGlobalTime == 0 {
bpt.avgGlobalTime = dur
return
}
delta := (dur - bpt.avgGlobalTime) / globalInvAlpha
bpt.avgGlobalTime += delta
}
func logTime(pi *peerStats, dur time.Duration) {
if pi.averageTime == 0 {
pi.averageTime = dur
return
}
delta := (dur - pi.averageTime) / localInvAlpha
pi.averageTime += delta
}
func (bpt *bsPeerTracker) logSuccess(p peer.ID, dur time.Duration) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
if pi, ok := bpt.peers[p]; !ok {
log.Warnw("log success called on peer not in tracker", "peerid", p.String())
return
} else {
pi.successes++
logTime(pi, dur)
}
}
func (bpt *bsPeerTracker) logFailure(p peer.ID, dur time.Duration) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
if pi, ok := bpt.peers[p]; !ok {
log.Warn("log failure called on peer not in tracker", "peerid", p.String())
return
} else {
pi.failures++
logTime(pi, dur)
}
}
func (bpt *bsPeerTracker) removePeer(p peer.ID) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
delete(bpt.peers, p)
}
-151
View File
@@ -1,151 +0,0 @@
package blocksync
import (
"context"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
"github.com/ipfs/go-graphsync"
"github.com/ipld/go-ipld-prime"
"github.com/libp2p/go-libp2p-core/peer"
"golang.org/x/xerrors"
store "github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
basicnode "github.com/ipld/go-ipld-prime/node/basic"
ipldselector "github.com/ipld/go-ipld-prime/traversal/selector"
selectorbuilder "github.com/ipld/go-ipld-prime/traversal/selector/builder"
)
const (
// AMT selector recursion. An AMT has arity of 8 so this gives allows
// us to retrieve trees with 8^10 (1,073,741,824) elements.
amtRecursionDepth = uint32(10)
// some constants for looking up tuple encoded struct fields
// field index of Parents field in a block header
blockIndexParentsField = 5
// field index of Messages field in a block header
blockIndexMessagesField = 10
// field index of AMT node in AMT head
amtHeadNodeFieldIndex = 2
// field index of links array AMT node
amtNodeLinksFieldIndex = 1
// field index of values array AMT node
amtNodeValuesFieldIndex = 2
// maximum depth per traversal
maxRequestLength = 50
)
var amtSelector selectorbuilder.SelectorSpec
func init() {
// builer for selectors
ssb := selectorbuilder.NewSelectorSpecBuilder(basicnode.Style.Any)
// amt selector -- needed to selector through a messages AMT
amtSelector = ssb.ExploreIndex(amtHeadNodeFieldIndex,
ssb.ExploreRecursive(ipldselector.RecursionLimitDepth(int(amtRecursionDepth)),
ssb.ExploreUnion(
ssb.ExploreIndex(amtNodeLinksFieldIndex,
ssb.ExploreAll(ssb.ExploreRecursiveEdge())),
ssb.ExploreIndex(amtNodeValuesFieldIndex,
ssb.ExploreAll(ssb.Matcher())))))
}
func selectorForRequest(req *BlockSyncRequest) ipld.Node {
// builer for selectors
ssb := selectorbuilder.NewSelectorSpecBuilder(basicnode.Style.Any)
bso := ParseBSOptions(req.Options)
if bso.IncludeMessages {
return ssb.ExploreRecursive(ipldselector.RecursionLimitDepth(int(req.RequestLength)),
ssb.ExploreIndex(blockIndexParentsField,
ssb.ExploreUnion(
ssb.ExploreAll(
ssb.ExploreIndex(blockIndexMessagesField,
ssb.ExploreRange(0, 2, amtSelector),
)),
ssb.ExploreIndex(0, ssb.ExploreRecursiveEdge()),
))).Node()
}
return ssb.ExploreRecursive(ipldselector.RecursionLimitDepth(int(req.RequestLength)), ssb.ExploreIndex(blockIndexParentsField,
ssb.ExploreUnion(
ssb.ExploreAll(
ssb.Matcher(),
),
ssb.ExploreIndex(0, ssb.ExploreRecursiveEdge()),
))).Node()
}
func firstTipsetSelector(req *BlockSyncRequest) ipld.Node {
// builer for selectors
ssb := selectorbuilder.NewSelectorSpecBuilder(basicnode.Style.Any)
bso := ParseBSOptions(req.Options)
if bso.IncludeMessages {
return ssb.ExploreIndex(blockIndexMessagesField,
ssb.ExploreRange(0, 2, amtSelector),
).Node()
}
return ssb.Matcher().Node()
}
func (bs *BlockSync) executeGsyncSelector(ctx context.Context, p peer.ID, root cid.Cid, sel ipld.Node) error {
extension := graphsync.ExtensionData{
Name: "chainsync",
Data: nil,
}
_, errs := bs.gsync.Request(ctx, p, cidlink.Link{Cid: root}, sel, extension)
for err := range errs {
return xerrors.Errorf("failed to complete graphsync request: %w", err)
}
return nil
}
// Fallback for interacting with other non-lotus nodes
func (bs *BlockSync) fetchBlocksGraphSync(ctx context.Context, p peer.ID, req *BlockSyncRequest) (*BlockSyncResponse, error) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
immediateTsSelector := firstTipsetSelector(req)
// Do this because we can only request one root at a time
for _, r := range req.Start {
if err := bs.executeGsyncSelector(ctx, p, r, immediateTsSelector); err != nil {
return nil, err
}
}
if req.RequestLength > maxRequestLength {
req.RequestLength = maxRequestLength
}
sel := selectorForRequest(req)
// execute the selector forreal
if err := bs.executeGsyncSelector(ctx, p, req.Start[0], sel); err != nil {
return nil, err
}
// Now pull the data we fetched out of the chainstore (where it should now be persisted)
tempcs := store.NewChainStore(bs.bserv.Blockstore(), datastore.NewMapDatastore(), nil)
opts := ParseBSOptions(req.Options)
tsk := types.NewTipSetKey(req.Start...)
chain, err := collectChainSegment(tempcs, tsk, req.RequestLength, opts)
if err != nil {
return nil, xerrors.Errorf("failed to load chain data from chainstore after successful graphsync response (start = %v): %w", req.Start, err)
}
return &BlockSyncResponse{Chain: chain}, nil
}
+81
View File
@@ -0,0 +1,81 @@
package chain
import (
"encoding/json"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/node/modules/dtypes"
"github.com/ipfs/go-datastore"
"golang.org/x/xerrors"
)
var CheckpointKey = datastore.NewKey("/chain/checks")
func loadCheckpoint(ds dtypes.MetadataDS) (types.TipSetKey, error) {
haveChks, err := ds.Has(CheckpointKey)
if err != nil {
return types.EmptyTSK, err
}
if !haveChks {
return types.EmptyTSK, nil
}
tskBytes, err := ds.Get(CheckpointKey)
if err != nil {
return types.EmptyTSK, err
}
var tsk types.TipSetKey
err = json.Unmarshal(tskBytes, &tsk)
if err != nil {
return types.EmptyTSK, err
}
return tsk, err
}
func (syncer *Syncer) SetCheckpoint(tsk types.TipSetKey) error {
if tsk == types.EmptyTSK {
return xerrors.Errorf("called with empty tsk")
}
syncer.checkptLk.Lock()
defer syncer.checkptLk.Unlock()
ts, err := syncer.ChainStore().LoadTipSet(tsk)
if err != nil {
return xerrors.Errorf("cannot find tipset: %w", err)
}
hts := syncer.ChainStore().GetHeaviestTipSet()
anc, err := syncer.ChainStore().IsAncestorOf(ts, hts)
if err != nil {
return xerrors.Errorf("cannot determine whether checkpoint tipset is in main-chain: %w", err)
}
if !hts.Equals(ts) && !anc {
return xerrors.Errorf("cannot mark tipset as checkpoint, since it isn't in the main-chain: %w", err)
}
tskBytes, err := json.Marshal(tsk)
if err != nil {
return err
}
err = syncer.ds.Put(CheckpointKey, tskBytes)
if err != nil {
return err
}
syncer.checkpt = tsk
return nil
}
func (syncer *Syncer) GetCheckpoint() types.TipSetKey {
syncer.checkptLk.Lock()
defer syncer.checkptLk.Unlock()
return syncer.checkpt
}
+14 -24
View File
@@ -5,7 +5,7 @@ import (
"sync"
"time"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
logging "github.com/ipfs/go-log/v2"
"golang.org/x/xerrors"
@@ -19,7 +19,7 @@ import (
var log = logging.Logger("events")
// `curH`-`ts.Height` = `confidence`
// HeightHandler `curH`-`ts.Height` = `confidence`
type HeightHandler func(ctx context.Context, ts *types.TipSet, curH abi.ChainEpoch) error
type RevertHandler func(ctx context.Context, ts *types.TipSet) error
@@ -31,10 +31,11 @@ type heightHandler struct {
revert RevertHandler
}
type eventApi interface {
type eventAPI interface {
ChainNotify(context.Context) (<-chan []*api.HeadChange, error)
ChainGetBlockMessages(context.Context, cid.Cid) (*api.BlockMessages, error)
ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)
ChainHead(context.Context) (*types.TipSet, error)
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error)
@@ -42,7 +43,7 @@ type eventApi interface {
}
type Events struct {
api eventApi
api eventAPI
tsc *tipSetCache
lk sync.Mutex
@@ -51,13 +52,13 @@ type Events struct {
readyOnce sync.Once
heightEvents
calledEvents
*hcEvents
}
func NewEvents(ctx context.Context, api eventApi) *Events {
func NewEvents(ctx context.Context, api eventAPI) *Events {
gcConfidence := 2 * build.ForkLengthThreshold
tsc := newTSCache(gcConfidence, api.ChainGetTipSetByHeight)
tsc := newTSCache(gcConfidence, api)
e := &Events{
api: api,
@@ -67,25 +68,14 @@ func NewEvents(ctx context.Context, api eventApi) *Events {
heightEvents: heightEvents{
tsc: tsc,
ctx: ctx,
gcConfidence: abi.ChainEpoch(gcConfidence),
gcConfidence: gcConfidence,
heightTriggers: map[uint64]*heightHandler{},
htTriggerHeights: map[abi.ChainEpoch][]uint64{},
htHeights: map[abi.ChainEpoch][]uint64{},
},
calledEvents: calledEvents{
cs: api,
tsc: tsc,
ctx: ctx,
gcConfidence: uint64(gcConfidence),
confQueue: map[triggerH]map[msgH][]*queuedEvent{},
revertQueue: map[msgH][]triggerH{},
triggers: map[triggerId]*callHandler{},
matchers: map[triggerId][]MatchFunc{},
timeouts: map[abi.ChainEpoch]map[triggerId]int{},
},
hcEvents: newHCEvents(ctx, api, tsc, uint64(gcConfidence)),
}
e.ready.Add(1)
@@ -110,7 +100,7 @@ func (e *Events) listenHeadChanges(ctx context.Context) {
log.Warnf("not restarting listenHeadChanges: context error: %s", ctx.Err())
return
}
time.Sleep(time.Second)
build.Clock.Sleep(time.Second)
log.Info("restarting listenHeadChanges")
}
}
@@ -143,7 +133,7 @@ func (e *Events) listenHeadChangesOnce(ctx context.Context) error {
}
e.readyOnce.Do(func() {
e.at = cur[0].Val.Height()
e.lastTs = cur[0].Val
e.ready.Done()
})
@@ -166,7 +156,7 @@ func (e *Events) listenHeadChangesOnce(ctx context.Context) error {
}
// sync with fake chainstore (for tests)
if fcs, ok := e.api.(interface{notifDone()}); ok {
if fcs, ok := e.api.(interface{ notifDone() }); ok {
fcs.notifDone()
}
}
@@ -186,5 +176,5 @@ func (e *Events) headChange(rev, app []*types.TipSet) error {
return err
}
return e.headChangeCalled(rev, app)
return e.processHeadChangeEvent(rev, app)
}
+381 -119
View File
@@ -5,7 +5,7 @@ import (
"math"
"sync"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
"golang.org/x/xerrors"
@@ -13,8 +13,9 @@ import (
)
const NoTimeout = math.MaxInt64
const NoHeight = abi.ChainEpoch(-1)
type triggerId = uint64
type triggerID = uint64
// msgH is the block height at which a message was present / event has happened
type msgH = abi.ChainEpoch
@@ -23,53 +24,60 @@ type msgH = abi.ChainEpoch
// message (msgH+confidence)
type triggerH = abi.ChainEpoch
// `ts` is the tipset, in which the `msg` is included.
type eventData interface{}
// EventHandler arguments:
// `prevTs` is the previous tipset, eg the "from" tipset for a state change.
// `ts` is the event tipset, eg the tipset in which the `msg` is included.
// `curH`-`ts.Height` = `confidence`
type CalledHandler func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error)
type EventHandler func(data eventData, prevTs, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error)
// CheckFunc is used for atomicity guarantees. If the condition the callbacks
// wait for has already happened in tipset `ts`
//
// If `done` is true, timeout won't be triggered
// If `more` is false, no messages will be sent to CalledHandler (RevertHandler
// If `more` is false, no messages will be sent to EventHandler (RevertHandler
// may still be called)
type CheckFunc func(ts *types.TipSet) (done bool, more bool, err error)
type MatchFunc func(msg *types.Message) (bool, error)
type callHandler struct {
// Keep track of information for an event handler
type handlerInfo struct {
confidence int
timeout abi.ChainEpoch
disabled bool // TODO: GC after gcConfidence reached
handle CalledHandler
handle EventHandler
revert RevertHandler
}
// When a change occurs, a queuedEvent is created and put into a queue
// until the required confidence is reached
type queuedEvent struct {
trigger triggerId
trigger triggerID
h abi.ChainEpoch
msg *types.Message
prevH abi.ChainEpoch
h abi.ChainEpoch
data eventData
called bool
}
type calledEvents struct {
cs eventApi
// Manages chain head change events, which may be forward (new tipset added to
// chain) or backward (chain branch discarded in favour of heavier branch)
type hcEvents struct {
cs eventAPI
tsc *tipSetCache
ctx context.Context
gcConfidence uint64
at abi.ChainEpoch
lastTs *types.TipSet
lk sync.Mutex
ctr triggerId
ctr triggerID
triggers map[triggerId]*callHandler
matchers map[triggerId][]MatchFunc
triggers map[triggerID]*handlerInfo
// maps block heights to events
// [triggerH][msgH][event]
@@ -78,29 +86,81 @@ type calledEvents struct {
// [msgH][triggerH]
revertQueue map[msgH][]triggerH
// [timeoutH+confidence][triggerId]{calls}
timeouts map[abi.ChainEpoch]map[triggerId]int
// [timeoutH+confidence][triggerID]{calls}
timeouts map[abi.ChainEpoch]map[triggerID]int
messageEvents
watcherEvents
}
func (e *calledEvents) headChangeCalled(rev, app []*types.TipSet) error {
func newHCEvents(ctx context.Context, cs eventAPI, tsc *tipSetCache, gcConfidence uint64) *hcEvents {
e := hcEvents{
ctx: ctx,
cs: cs,
tsc: tsc,
gcConfidence: gcConfidence,
confQueue: map[triggerH]map[msgH][]*queuedEvent{},
revertQueue: map[msgH][]triggerH{},
triggers: map[triggerID]*handlerInfo{},
timeouts: map[abi.ChainEpoch]map[triggerID]int{},
}
e.messageEvents = newMessageEvents(ctx, &e, cs)
e.watcherEvents = newWatcherEvents(ctx, &e, cs)
return &e
}
// Called when there is a change to the head with tipsets to be
// reverted / applied
func (e *hcEvents) processHeadChangeEvent(rev, app []*types.TipSet) error {
e.lk.Lock()
defer e.lk.Unlock()
for _, ts := range rev {
e.handleReverts(ts)
e.at = ts.Height()
e.lastTs = ts
}
for _, ts := range app {
// called triggers
e.checkNewCalls(ts)
for ; e.at <= ts.Height(); e.at++ {
e.applyWithConfidence(ts, e.at)
// Check if the head change caused any state changes that we were
// waiting for
stateChanges := e.watcherEvents.checkStateChanges(e.lastTs, ts)
// Queue up calls until there have been enough blocks to reach
// confidence on the state changes
for tid, data := range stateChanges {
e.queueForConfidence(tid, data, e.lastTs, ts)
}
// Check if the head change included any new message calls
newCalls, err := e.messageEvents.checkNewCalls(ts)
if err != nil {
return err
}
// Queue up calls until there have been enough blocks to reach
// confidence on the message calls
for tid, data := range newCalls {
e.queueForConfidence(tid, data, nil, ts)
}
for at := e.lastTs.Height(); at <= ts.Height(); at++ {
// Apply any queued events and timeouts that were targeted at the
// current chain height
e.applyWithConfidence(ts, at)
e.applyTimeouts(ts)
}
// Update the latest known tipset
e.lastTs = ts
}
return nil
}
func (e *calledEvents) handleReverts(ts *types.TipSet) {
func (e *hcEvents) handleReverts(ts *types.TipSet) {
reverts, ok := e.revertQueue[ts.Height()]
if !ok {
return // nothing to do
@@ -116,7 +176,7 @@ func (e *calledEvents) handleReverts(ts *types.TipSet) {
trigger := e.triggers[event.trigger]
if err := trigger.revert(e.ctx, ts); err != nil {
log.Errorf("reverting chain trigger (call %s.%d() @H %d, called @ %d) failed: %s", event.msg.To, event.msg.Method, ts.Height(), triggerH, err)
log.Errorf("reverting chain trigger (@H %d, triggered @ %d) failed: %s", ts.Height(), triggerH, err)
}
}
delete(e.confQueue[triggerH], ts.Height())
@@ -124,42 +184,15 @@ func (e *calledEvents) handleReverts(ts *types.TipSet) {
delete(e.revertQueue, ts.Height())
}
func (e *calledEvents) checkNewCalls(ts *types.TipSet) {
pts, err := e.cs.ChainGetTipSet(e.ctx, ts.Parents()) // we actually care about messages in the parent tipset here
if err != nil {
log.Errorf("getting parent tipset in checkNewCalls: %s", err)
return
// Queue up events until the chain has reached a height that reflects the
// desired confidence
func (e *hcEvents) queueForConfidence(trigID uint64, data eventData, prevTs, ts *types.TipSet) {
trigger := e.triggers[trigID]
prevH := NoHeight
if prevTs != nil {
prevH = prevTs.Height()
}
e.messagesForTs(pts, func(msg *types.Message) {
// TODO: provide receipts
for tid, matchFns := range e.matchers {
var matched bool
for _, matchFn := range matchFns {
ok, err := matchFn(msg)
if err != nil {
log.Errorf("event matcher failed: %s", err)
continue
}
matched = ok
if matched {
break
}
}
if matched {
e.queueForConfidence(tid, msg, ts)
break
}
}
})
}
func (e *calledEvents) queueForConfidence(triggerId uint64, msg *types.Message, ts *types.TipSet) {
trigger := e.triggers[triggerId]
appliedH := ts.Height()
triggerH := appliedH + abi.ChainEpoch(trigger.confidence)
@@ -171,18 +204,20 @@ func (e *calledEvents) queueForConfidence(triggerId uint64, msg *types.Message,
}
byOrigH[appliedH] = append(byOrigH[appliedH], &queuedEvent{
trigger: triggerId,
trigger: trigID,
prevH: prevH,
h: appliedH,
msg: msg,
data: data,
})
e.revertQueue[appliedH] = append(e.revertQueue[appliedH], triggerH)
}
func (e *calledEvents) applyWithConfidence(ts *types.TipSet, height abi.ChainEpoch) {
// Apply any events that were waiting for this chain height for confidence
func (e *hcEvents) applyWithConfidence(ts *types.TipSet, height abi.ChainEpoch) {
byOrigH, ok := e.confQueue[height]
if !ok {
return // no triggers at thin height
return // no triggers at this height
}
for origH, events := range byOrigH {
@@ -201,15 +236,20 @@ func (e *calledEvents) applyWithConfidence(ts *types.TipSet, height abi.ChainEpo
continue
}
rec, err := e.cs.StateGetReceipt(e.ctx, event.msg.Cid(), ts.Key())
if err != nil {
log.Error(err)
return
// Previous tipset - this is relevant for example in a state change
// from one tipset to another
var prevTs *types.TipSet
if event.prevH != NoHeight {
prevTs, err = e.tsc.get(event.prevH)
if err != nil {
log.Errorf("events: applyWithConfidence didn't find tipset for previous event; wanted %d; current %d", event.prevH, height)
continue
}
}
more, err := trigger.handle(event.msg, rec, triggerTs, height)
more, err := trigger.handle(event.data, prevTs, triggerTs, height)
if err != nil {
log.Errorf("chain trigger (call %s.%d() @H %d, called @ %d) failed: %s", event.msg.To, event.msg.Method, origH, height, err)
log.Errorf("chain trigger (@H %d, triggered @ %d) failed: %s", origH, height, err)
continue // don't revert failed calls
}
@@ -225,17 +265,18 @@ func (e *calledEvents) applyWithConfidence(ts *types.TipSet, height abi.ChainEpo
}
}
func (e *calledEvents) applyTimeouts(ts *types.TipSet) {
// Apply any timeouts that expire at this height
func (e *hcEvents) applyTimeouts(ts *types.TipSet) {
triggers, ok := e.timeouts[ts.Height()]
if !ok {
return // nothing to do
}
for triggerId, calls := range triggers {
for triggerID, calls := range triggers {
if calls > 0 {
continue // don't timeout if the method was called
}
trigger := e.triggers[triggerId]
trigger := e.triggers[triggerID]
if trigger.disabled {
continue
}
@@ -255,12 +296,232 @@ func (e *calledEvents) applyTimeouts(ts *types.TipSet) {
}
}
func (e *calledEvents) messagesForTs(ts *types.TipSet, consume func(*types.Message)) {
// Listen for an event
// - CheckFunc: immediately checks if the event already occurred
// - EventHandler: called when the event has occurred, after confidence tipsets
// - RevertHandler: called if the chain head changes causing the event to revert
// - confidence: wait this many tipsets before calling EventHandler
// - timeout: at this chain height, timeout on waiting for this event
func (e *hcEvents) onHeadChanged(check CheckFunc, hnd EventHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch) (triggerID, error) {
e.lk.Lock()
defer e.lk.Unlock()
// Check if the event has already occurred
ts, err := e.tsc.best()
if err != nil {
return 0, xerrors.Errorf("error getting best tipset: %w", err)
}
done, more, err := check(ts)
if err != nil {
return 0, xerrors.Errorf("called check error (h: %d): %w", ts.Height(), err)
}
if done {
timeout = NoTimeout
}
// Create a trigger for the event
id := e.ctr
e.ctr++
e.triggers[id] = &handlerInfo{
confidence: confidence,
timeout: timeout + abi.ChainEpoch(confidence),
disabled: !more,
handle: hnd,
revert: rev,
}
// If there's a timeout, set up a timeout check at that height
if timeout != NoTimeout {
if e.timeouts[timeout+abi.ChainEpoch(confidence)] == nil {
e.timeouts[timeout+abi.ChainEpoch(confidence)] = map[uint64]int{}
}
e.timeouts[timeout+abi.ChainEpoch(confidence)][id] = 0
}
return id, nil
}
// headChangeAPI is used to allow the composed event APIs to call back to hcEvents
// to listen for changes
type headChangeAPI interface {
onHeadChanged(check CheckFunc, hnd EventHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch) (triggerID, error)
}
// watcherEvents watches for a state change
type watcherEvents struct {
ctx context.Context
cs eventAPI
hcAPI headChangeAPI
lk sync.RWMutex
matchers map[triggerID]StateMatchFunc
}
func newWatcherEvents(ctx context.Context, hcAPI headChangeAPI, cs eventAPI) watcherEvents {
return watcherEvents{
ctx: ctx,
cs: cs,
hcAPI: hcAPI,
matchers: make(map[triggerID]StateMatchFunc),
}
}
// Run each of the matchers against the previous and current state to see if
// there's a change
func (we *watcherEvents) checkStateChanges(oldState, newState *types.TipSet) map[triggerID]eventData {
we.lk.RLock()
defer we.lk.RUnlock()
res := make(map[triggerID]eventData)
for tid, matchFn := range we.matchers {
ok, data, err := matchFn(oldState, newState)
if err != nil {
log.Errorf("event diff fn failed: %s", err)
continue
}
if ok {
res[tid] = data
}
}
return res
}
// StateChange represents a change in state
type StateChange interface{}
// StateChangeHandler arguments:
// `oldTs` is the state "from" tipset
// `newTs` is the state "to" tipset
// `states` is the change in state
// `curH`-`ts.Height` = `confidence`
type StateChangeHandler func(oldTs, newTs *types.TipSet, states StateChange, curH abi.ChainEpoch) (more bool, err error)
type StateMatchFunc func(oldTs, newTs *types.TipSet) (bool, StateChange, error)
// StateChanged registers a callback which is triggered when a specified state
// change occurs or a timeout is reached.
//
// * `CheckFunc` callback is invoked immediately with a recent tipset, it
// returns two booleans - `done`, and `more`.
//
// * `done` should be true when some on-chain state change we are waiting
// for has happened. When `done` is set to true, timeout trigger is disabled.
//
// * `more` should be false when we don't want to receive new notifications
// through StateChangeHandler. Note that notifications may still be delivered to
// RevertHandler
//
// * `StateChangeHandler` is called when the specified state change was observed
// on-chain, and a confidence threshold was reached, or the specified `timeout`
// height was reached with no state change observed. When this callback is
// invoked on a timeout, `oldState` and `newState` are set to nil.
// This callback returns a boolean specifying whether further notifications
// should be sent, like `more` return param from `CheckFunc` above.
//
// * `RevertHandler` is called after apply handler, when we drop the tipset
// containing the message. The tipset passed as the argument is the tipset
// that is being dropped. Note that the event dropped may be re-applied
// in a different tipset in small amount of time.
//
// * `StateMatchFunc` is called against each tipset state. If there is a match,
// the state change is queued up until the confidence interval has elapsed (and
// `StateChangeHandler` is called)
func (we *watcherEvents) StateChanged(check CheckFunc, scHnd StateChangeHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, mf StateMatchFunc) error {
hnd := func(data eventData, prevTs, ts *types.TipSet, height abi.ChainEpoch) (bool, error) {
states, ok := data.(StateChange)
if data != nil && !ok {
panic("expected StateChange")
}
return scHnd(prevTs, ts, states, height)
}
id, err := we.hcAPI.onHeadChanged(check, hnd, rev, confidence, timeout)
if err != nil {
return err
}
we.lk.Lock()
defer we.lk.Unlock()
we.matchers[id] = mf
return nil
}
// messageEvents watches for message calls to actors
type messageEvents struct {
ctx context.Context
cs eventAPI
hcAPI headChangeAPI
lk sync.RWMutex
matchers map[triggerID][]MsgMatchFunc
}
func newMessageEvents(ctx context.Context, hcAPI headChangeAPI, cs eventAPI) messageEvents {
return messageEvents{
ctx: ctx,
cs: cs,
hcAPI: hcAPI,
matchers: map[triggerID][]MsgMatchFunc{},
}
}
// Check if there are any new actor calls
func (me *messageEvents) checkNewCalls(ts *types.TipSet) (map[triggerID]eventData, error) {
pts, err := me.cs.ChainGetTipSet(me.ctx, ts.Parents()) // we actually care about messages in the parent tipset here
if err != nil {
log.Errorf("getting parent tipset in checkNewCalls: %s", err)
return nil, err
}
me.lk.RLock()
defer me.lk.RUnlock()
res := make(map[triggerID]eventData)
me.messagesForTs(pts, func(msg *types.Message) {
// TODO: provide receipts
for tid, matchFns := range me.matchers {
var matched bool
var once bool
for _, matchFn := range matchFns {
matchOne, ok, err := matchFn(msg)
if err != nil {
log.Errorf("event matcher failed: %s", err)
continue
}
matched = ok
once = matchOne
if matched {
break
}
}
if matched {
res[tid] = msg
if once {
break
}
}
}
})
return res, nil
}
// Get the messages in a tipset
func (me *messageEvents) messagesForTs(ts *types.TipSet, consume func(*types.Message)) {
seen := map[cid.Cid]struct{}{}
for _, tsb := range ts.Blocks() {
msgs, err := e.cs.ChainGetBlockMessages(context.TODO(), tsb.Cid())
msgs, err := me.cs.ChainGetBlockMessages(context.TODO(), tsb.Cid())
if err != nil {
log.Errorf("messagesForTs MessagesForBlock failed (ts.H=%d, Bcid:%s, B.Mcid:%s): %s", ts.Height(), tsb.Cid(), tsb.Messages, err)
// this is quite bad, but probably better than missing all the other updates
@@ -289,20 +550,27 @@ func (e *calledEvents) messagesForTs(ts *types.TipSet, consume func(*types.Messa
}
}
// Called registers a callbacks which are triggered when a specified method is
// MsgHandler arguments:
// `ts` is the tipset, in which the `msg` is included.
// `curH`-`ts.Height` = `confidence`
type MsgHandler func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error)
type MsgMatchFunc func(msg *types.Message) (matchOnce bool, matched bool, err error)
// Called registers a callback which is triggered when a specified method is
// called on an actor, or a timeout is reached.
//
// * `CheckFunc` callback is invoked immediately with a recent tipset, it
// returns two booleans - `done`, and `more`.
//
// * `done` should be true when some on-chain action we are waiting for has
// happened. When `done` is set to true, timeout trigger is disabled.
// * `done` should be true when some on-chain action we are waiting for has
// happened. When `done` is set to true, timeout trigger is disabled.
//
// * `more` should be false when we don't want to receive new notifications
// through CalledHandler. Note that notifications may still be delivered to
// RevertHandler
// * `more` should be false when we don't want to receive new notifications
// through MsgHandler. Note that notifications may still be delivered to
// RevertHandler
//
// * `CalledHandler` is called when the specified event was observed on-chain,
// * `MsgHandler` is called when the specified event was observed on-chain,
// and a confidence threshold was reached, or the specified `timeout` height
// was reached with no events observed. When this callback is invoked on a
// timeout, `msg` is set to nil. This callback returns a boolean specifying
@@ -313,44 +581,38 @@ func (e *calledEvents) messagesForTs(ts *types.TipSet, consume func(*types.Messa
// containing the message. The tipset passed as the argument is the tipset
// that is being dropped. Note that the message dropped may be re-applied
// in a different tipset in small amount of time.
func (e *calledEvents) Called(check CheckFunc, hnd CalledHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, mf MatchFunc) error {
e.lk.Lock()
defer e.lk.Unlock()
ts := e.tsc.best()
done, more, err := check(ts)
if err != nil {
return xerrors.Errorf("called check error (h: %d): %w", ts.Height(), err)
}
if done {
timeout = NoTimeout
}
id := e.ctr
e.ctr++
e.triggers[id] = &callHandler{
confidence: confidence,
timeout: timeout + abi.ChainEpoch(confidence),
disabled: !more,
handle: hnd,
revert: rev,
}
e.matchers[id] = append(e.matchers[id], mf)
if timeout != NoTimeout {
if e.timeouts[timeout+abi.ChainEpoch(confidence)] == nil {
e.timeouts[timeout+abi.ChainEpoch(confidence)] = map[uint64]int{}
//
// * `MsgMatchFunc` is called against each message. If there is a match, the
// message is queued up until the confidence interval has elapsed (and
// `MsgHandler` is called)
func (me *messageEvents) Called(check CheckFunc, msgHnd MsgHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, mf MsgMatchFunc) error {
hnd := func(data eventData, prevTs, ts *types.TipSet, height abi.ChainEpoch) (bool, error) {
msg, ok := data.(*types.Message)
if data != nil && !ok {
panic("expected msg")
}
e.timeouts[timeout+abi.ChainEpoch(confidence)][id] = 0
rec, err := me.cs.StateGetReceipt(me.ctx, msg.Cid(), ts.Key())
if err != nil {
return false, err
}
return msgHnd(msg, rec, ts, height)
}
id, err := me.hcAPI.onHeadChanged(check, hnd, rev, confidence, timeout)
if err != nil {
return err
}
me.lk.Lock()
defer me.lk.Unlock()
me.matchers[id] = append(me.matchers[id], mf)
return nil
}
func (e *calledEvents) CalledMsg(ctx context.Context, hnd CalledHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, msg types.ChainMsg) error {
return e.Called(e.CheckMsg(ctx, msg, hnd), hnd, rev, confidence, timeout, e.MatchMsg(msg.VMMessage()))
// Convenience function for checking and matching messages
func (me *messageEvents) CalledMsg(ctx context.Context, hnd MsgHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, msg types.ChainMsg) error {
return me.Called(me.CheckMsg(ctx, msg, hnd), hnd, rev, confidence, timeout, me.MatchMsg(msg.VMMessage()))
}
+29 -14
View File
@@ -4,8 +4,9 @@ import (
"context"
"sync"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"go.opencensus.io/trace"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/types"
)
@@ -15,12 +16,12 @@ type heightEvents struct {
tsc *tipSetCache
gcConfidence abi.ChainEpoch
ctr triggerId
ctr triggerID
heightTriggers map[triggerId]*heightHandler
heightTriggers map[triggerID]*heightHandler
htTriggerHeights map[triggerH][]triggerId
htHeights map[msgH][]triggerId
htTriggerHeights map[triggerH][]triggerID
htHeights map[msgH][]triggerID
ctx context.Context
}
@@ -32,6 +33,8 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
span.AddAttributes(trace.Int64Attribute("reverts", int64(len(rev))))
span.AddAttributes(trace.Int64Attribute("applies", int64(len(app))))
e.lk.Lock()
defer e.lk.Unlock()
for _, ts := range rev {
// TODO: log error if h below gcconfidence
// revert height-based triggers
@@ -40,7 +43,10 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
for _, tid := range e.htHeights[h] {
ctx, span := trace.StartSpan(ctx, "events.HeightRevert")
err := e.heightTriggers[tid].revert(ctx, ts)
rev := e.heightTriggers[tid].revert
e.lk.Unlock()
err := rev(ctx, ts)
e.lk.Lock()
e.heightTriggers[tid].called = false
span.End()
@@ -87,7 +93,6 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
if hnd.called {
return nil
}
hnd.called = true
triggerH := h - abi.ChainEpoch(hnd.confidence)
@@ -98,8 +103,11 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
ctx, span := trace.StartSpan(ctx, "events.HeightApply")
span.AddAttributes(trace.BoolAttribute("immediate", false))
err = hnd.handle(ctx, incTs, h)
handle := hnd.handle
e.lk.Unlock()
err = handle(ctx, incTs, h)
e.lk.Lock()
hnd.called = true
span.End()
if err != nil {
@@ -136,16 +144,19 @@ func (e *heightEvents) headChangeAt(rev, app []*types.TipSet) error {
}
// ChainAt invokes the specified `HeightHandler` when the chain reaches the
// specified height+confidence threshold. If the chain is rolled-back under the
// specified height, `RevertHandler` will be called.
// specified height+confidence threshold. If the chain is rolled-back under the
// specified height, `RevertHandler` will be called.
//
// ts passed to handlers is the tipset at the specified, or above, if lower tipsets were null
func (e *heightEvents) ChainAt(hnd HeightHandler, rev RevertHandler, confidence int, h abi.ChainEpoch) error {
e.lk.Lock() // Tricky locking, check your locks if you modify this function!
bestH := e.tsc.best().Height()
best, err := e.tsc.best()
if err != nil {
return xerrors.Errorf("error getting best tipset: %w", err)
}
bestH := best.Height()
if bestH >= h+abi.ChainEpoch(confidence) {
ts, err := e.tsc.getNonNull(h)
if err != nil {
@@ -164,7 +175,11 @@ func (e *heightEvents) ChainAt(hnd HeightHandler, rev RevertHandler, confidence
}
e.lk.Lock()
bestH = e.tsc.best().Height()
best, err = e.tsc.best()
if err != nil {
return xerrors.Errorf("error getting best tipset: %w", err)
}
bestH = best.Height()
}
defer e.lk.Unlock()
+269 -14
View File
@@ -11,8 +11,8 @@ import (
"github.com/stretchr/testify/require"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
@@ -46,6 +46,10 @@ type fakeCS struct {
sub func(rev, app []*types.TipSet)
}
func (fcs *fakeCS) ChainHead(ctx context.Context) (*types.TipSet, error) {
panic("implement me")
}
func (fcs *fakeCS) ChainGetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) {
return fcs.tipsets[key], nil
}
@@ -110,7 +114,11 @@ func (fcs *fakeCS) makeTs(t *testing.T, parents []cid.Cid, h abi.ChainEpoch, msg
func (fcs *fakeCS) ChainNotify(context.Context) (<-chan []*api.HeadChange, error) {
out := make(chan []*api.HeadChange, 1)
out <- []*api.HeadChange{{Type: store.HCCurrent, Val: fcs.tsc.best()}}
best, err := fcs.tsc.best()
if err != nil {
return nil, err
}
out <- []*api.HeadChange{{Type: store.HCCurrent, Val: best}}
fcs.sub = func(rev, app []*types.TipSet) {
notif := make([]*api.HeadChange, len(rev)+len(app))
@@ -174,7 +182,8 @@ func (fcs *fakeCS) advance(rev, app int, msgs map[int]cid.Cid, nulls ...int) { /
var revs []*types.TipSet
for i := 0; i < rev; i++ {
ts := fcs.tsc.best()
ts, err := fcs.tsc.best()
require.NoError(fcs.t, err)
if _, ok := nullm[int(ts.Height())]; !ok {
revs = append(revs, ts)
@@ -196,7 +205,9 @@ func (fcs *fakeCS) advance(rev, app int, msgs map[int]cid.Cid, nulls ...int) { /
continue
}
ts := fcs.makeTs(fcs.t, fcs.tsc.best().Key().Cids(), fcs.h, mc)
best, err := fcs.tsc.best()
require.NoError(fcs.t, err)
ts := fcs.makeTs(fcs.t, best.Key().Cids(), fcs.h, mc)
require.NoError(fcs.t, fcs.tsc.add(ts))
if hasMsgs {
@@ -211,15 +222,14 @@ func (fcs *fakeCS) advance(rev, app int, msgs map[int]cid.Cid, nulls ...int) { /
fcs.sub(revs, apps)
fcs.sync.Lock()
fcs.sync.Unlock()
fcs.sync.Unlock() //nolint:staticcheck
}
func (fcs *fakeCS) notifDone() {
fcs.sync.Unlock()
}
var _ eventApi = &fakeCS{}
var _ eventAPI = &fakeCS{}
func TestAt(t *testing.T) {
fcs := &fakeCS{
@@ -562,9 +572,9 @@ func TestAtChainedConfidenceNull(t *testing.T) {
require.Equal(t, false, reverted)
}
func matchAddrMethod(to address.Address, m abi.MethodNum) func(msg *types.Message) (bool, error) {
return func(msg *types.Message) (bool, error) {
return to == msg.To && m == msg.Method, nil
func matchAddrMethod(to address.Address, m abi.MethodNum) func(msg *types.Message) (matchOnce bool, matched bool, err error) {
return func(msg *types.Message) (matchOnce bool, matched bool, err error) {
return true, to == msg.To && m == msg.Method, nil
}
}
@@ -671,7 +681,7 @@ func TestCalled(t *testing.T) {
0: n2msg,
})
require.Equal(t, true, applied) // msg from H=7, which had reverted execution
require.Equal(t, true, applied) // msg from H=7, which had reverted execution
require.Equal(t, false, reverted)
require.Equal(t, abi.ChainEpoch(10), appliedH)
applied = false
@@ -1005,8 +1015,6 @@ func TestRemoveTriggersOnMessage(t *testing.T) {
return false, true, nil
}, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) {
require.Equal(t, false, applied)
fmt.Println(msg == nil)
fmt.Println(curH)
applied = true
return more, nil
}, func(_ context.Context, ts *types.TipSet) error {
@@ -1068,3 +1076,250 @@ func TestRemoveTriggersOnMessage(t *testing.T) {
require.Equal(t, true, applied)
require.Equal(t, false, reverted)
}
type testStateChange struct {
from string
to string
}
func TestStateChanged(t *testing.T) {
fcs := &fakeCS{
t: t,
h: 1,
msgs: map[cid.Cid]fakeMsg{},
blkMsgs: map[cid.Cid]cid.Cid{},
tsc: newTSCache(2*build.ForkLengthThreshold, nil),
}
require.NoError(t, fcs.tsc.add(fcs.makeTs(t, nil, 1, dummyCid)))
events := NewEvents(context.Background(), fcs)
more := true
var applied, reverted bool
var appliedData StateChange
var appliedOldTs *types.TipSet
var appliedNewTs *types.TipSet
var appliedH abi.ChainEpoch
var matchData StateChange
confidence := 3
timeout := abi.ChainEpoch(20)
err := events.StateChanged(func(ts *types.TipSet) (d bool, m bool, e error) {
return false, true, nil
}, func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) {
require.Equal(t, false, applied)
applied = true
appliedData = data
appliedOldTs = oldTs
appliedNewTs = newTs
appliedH = curH
return more, nil
}, func(_ context.Context, ts *types.TipSet) error {
reverted = true
return nil
}, confidence, timeout, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) {
if matchData == nil {
return false, matchData, nil
}
d := matchData
matchData = nil
return true, d, nil
})
require.NoError(t, err)
// create few blocks to make sure nothing get's randomly called
fcs.advance(0, 4, nil) // H=5
require.Equal(t, false, applied)
require.Equal(t, false, reverted)
// create state change (but below confidence threshold)
matchData = testStateChange{from: "a", to: "b"}
fcs.advance(0, 3, nil)
require.Equal(t, false, applied)
require.Equal(t, false, reverted)
// create additional block so we are above confidence threshold
fcs.advance(0, 2, nil) // H=10 (confidence=3, apply)
require.Equal(t, true, applied)
require.Equal(t, false, reverted)
applied = false
// dip below confidence (should not apply again)
fcs.advance(2, 2, nil) // H=10 (confidence=3, apply)
require.Equal(t, false, applied)
require.Equal(t, false, reverted)
// Change happens from 5 -> 6
require.Equal(t, abi.ChainEpoch(5), appliedOldTs.Height())
require.Equal(t, abi.ChainEpoch(6), appliedNewTs.Height())
// Actually applied (with confidence) at 9
require.Equal(t, abi.ChainEpoch(9), appliedH)
// Make sure the state change was correctly passed through
rcvd := appliedData.(testStateChange)
require.Equal(t, "a", rcvd.from)
require.Equal(t, "b", rcvd.to)
}
func TestStateChangedRevert(t *testing.T) {
fcs := &fakeCS{
t: t,
h: 1,
msgs: map[cid.Cid]fakeMsg{},
blkMsgs: map[cid.Cid]cid.Cid{},
tsc: newTSCache(2*build.ForkLengthThreshold, nil),
}
require.NoError(t, fcs.tsc.add(fcs.makeTs(t, nil, 1, dummyCid)))
events := NewEvents(context.Background(), fcs)
more := true
var applied, reverted bool
var matchData StateChange
confidence := 1
timeout := abi.ChainEpoch(20)
err := events.StateChanged(func(ts *types.TipSet) (d bool, m bool, e error) {
return false, true, nil
}, func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) {
require.Equal(t, false, applied)
applied = true
return more, nil
}, func(_ context.Context, ts *types.TipSet) error {
reverted = true
return nil
}, confidence, timeout, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) {
if matchData == nil {
return false, matchData, nil
}
d := matchData
matchData = nil
return true, d, nil
})
require.NoError(t, err)
fcs.advance(0, 2, nil) // H=3
// Make a state change from TS at height 3 to TS at height 4
matchData = testStateChange{from: "a", to: "b"}
fcs.advance(0, 1, nil) // H=4
// Haven't yet reached confidence
require.Equal(t, false, applied)
require.Equal(t, false, reverted)
// Advance to reach confidence level
fcs.advance(0, 1, nil) // H=5
// Should now have called the handler
require.Equal(t, true, applied)
require.Equal(t, false, reverted)
applied = false
// Advance 3 more TS
fcs.advance(0, 3, nil) // H=8
require.Equal(t, false, applied)
require.Equal(t, false, reverted)
// Regress but not so far as to cause a revert
fcs.advance(3, 1, nil) // H=6
require.Equal(t, false, applied)
require.Equal(t, false, reverted)
// Regress back to state where change happened
fcs.advance(3, 1, nil) // H=4
// Expect revert to have happened
require.Equal(t, false, applied)
require.Equal(t, true, reverted)
}
func TestStateChangedTimeout(t *testing.T) {
fcs := &fakeCS{
t: t,
h: 1,
msgs: map[cid.Cid]fakeMsg{},
blkMsgs: map[cid.Cid]cid.Cid{},
tsc: newTSCache(2*build.ForkLengthThreshold, nil),
}
require.NoError(t, fcs.tsc.add(fcs.makeTs(t, nil, 1, dummyCid)))
events := NewEvents(context.Background(), fcs)
called := false
err := events.StateChanged(func(ts *types.TipSet) (d bool, m bool, e error) {
return false, true, nil
}, func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) {
called = true
require.Nil(t, data)
require.Equal(t, abi.ChainEpoch(20), newTs.Height())
require.Equal(t, abi.ChainEpoch(23), curH)
return false, nil
}, func(_ context.Context, ts *types.TipSet) error {
t.Fatal("revert on timeout")
return nil
}, 3, 20, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) {
return false, nil, nil
})
require.NoError(t, err)
fcs.advance(0, 21, nil)
require.False(t, called)
fcs.advance(0, 5, nil)
require.True(t, called)
called = false
// with check func reporting done
fcs = &fakeCS{
t: t,
h: 1,
msgs: map[cid.Cid]fakeMsg{},
blkMsgs: map[cid.Cid]cid.Cid{},
tsc: newTSCache(2*build.ForkLengthThreshold, nil),
}
require.NoError(t, fcs.tsc.add(fcs.makeTs(t, nil, 1, dummyCid)))
events = NewEvents(context.Background(), fcs)
err = events.StateChanged(func(ts *types.TipSet) (d bool, m bool, e error) {
return true, true, nil
}, func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) {
called = true
require.Nil(t, data)
require.Equal(t, abi.ChainEpoch(20), newTs.Height())
require.Equal(t, abi.ChainEpoch(23), curH)
return false, nil
}, func(_ context.Context, ts *types.TipSet) error {
t.Fatal("revert on timeout")
return nil
}, 3, 20, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) {
return false, nil, nil
})
require.NoError(t, err)
fcs.advance(0, 21, nil)
require.False(t, called)
fcs.advance(0, 5, nil)
require.False(t, called)
}
+25
View File
@@ -0,0 +1,25 @@
package state
import (
"context"
"github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
)
type contextStore struct {
ctx context.Context
cst *cbor.BasicIpldStore
}
func (cs *contextStore) Context() context.Context {
return cs.ctx
}
func (cs *contextStore) Get(ctx context.Context, c cid.Cid, out interface{}) error {
return cs.cst.Get(ctx, c, out)
}
func (cs *contextStore) Put(ctx context.Context, v interface{}) (cid.Cid, error) {
return cs.cst.Put(ctx, v)
}
+115
View File
@@ -0,0 +1,115 @@
package state
import (
"bytes"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/util/adt"
typegen "github.com/whyrusleeping/cbor-gen"
)
// AdtArrayDiff generalizes adt.Array diffing by accepting a Deferred type that can unmarshalled to its corresponding struct
// in an interface implantation.
// Add should be called when a new k,v is added to the array
// Modify should be called when a value is modified in the array
// Remove should be called when a value is removed from the array
type AdtArrayDiff interface {
Add(key uint64, val *typegen.Deferred) error
Modify(key uint64, from, to *typegen.Deferred) error
Remove(key uint64, val *typegen.Deferred) error
}
// TODO Performance can be improved by diffing the underlying IPLD graph, e.g. https://github.com/ipfs/go-merkledag/blob/749fd8717d46b4f34c9ce08253070079c89bc56d/dagutils/diff.go#L104
// CBOR Marshaling will likely be the largest performance bottleneck here.
// DiffAdtArray accepts two *adt.Array's and an AdtArrayDiff implementation. It does the following:
// - All values that exist in preArr and not in curArr are passed to AdtArrayDiff.Remove()
// - All values that exist in curArr nnd not in prevArr are passed to adtArrayDiff.Add()
// - All values that exist in preArr and in curArr are passed to AdtArrayDiff.Modify()
// - It is the responsibility of AdtArrayDiff.Modify() to determine if the values it was passed have been modified.
func DiffAdtArray(preArr, curArr *adt.Array, out AdtArrayDiff) error {
prevVal := new(typegen.Deferred)
if err := preArr.ForEach(prevVal, func(i int64) error {
curVal := new(typegen.Deferred)
found, err := curArr.Get(uint64(i), curVal)
if err != nil {
return err
}
if !found {
if err := out.Remove(uint64(i), prevVal); err != nil {
return err
}
return nil
}
// no modification
if !bytes.Equal(prevVal.Raw, curVal.Raw) {
if err := out.Modify(uint64(i), prevVal, curVal); err != nil {
return err
}
}
return curArr.Delete(uint64(i))
}); err != nil {
return err
}
curVal := new(typegen.Deferred)
return curArr.ForEach(curVal, func(i int64) error {
return out.Add(uint64(i), curVal)
})
}
// TODO Performance can be improved by diffing the underlying IPLD graph, e.g. https://github.com/ipfs/go-merkledag/blob/749fd8717d46b4f34c9ce08253070079c89bc56d/dagutils/diff.go#L104
// CBOR Marshaling will likely be the largest performance bottleneck here.
// AdtMapDiff generalizes adt.Map diffing by accepting a Deferred type that can unmarshalled to its corresponding struct
// in an interface implantation.
// AsKey should return the Keyer implementation specific to the map
// Add should be called when a new k,v is added to the map
// Modify should be called when a value is modified in the map
// Remove should be called when a value is removed from the map
type AdtMapDiff interface {
AsKey(key string) (abi.Keyer, error)
Add(key string, val *typegen.Deferred) error
Modify(key string, from, to *typegen.Deferred) error
Remove(key string, val *typegen.Deferred) error
}
func DiffAdtMap(preMap, curMap *adt.Map, out AdtMapDiff) error {
prevVal := new(typegen.Deferred)
if err := preMap.ForEach(prevVal, func(key string) error {
curVal := new(typegen.Deferred)
k, err := out.AsKey(key)
if err != nil {
return err
}
found, err := curMap.Get(k, curVal)
if err != nil {
return err
}
if !found {
if err := out.Remove(key, prevVal); err != nil {
return err
}
return nil
}
// no modification
if !bytes.Equal(prevVal.Raw, curVal.Raw) {
if err := out.Modify(key, prevVal, curVal); err != nil {
return err
}
}
return curMap.Delete(k)
}); err != nil {
return err
}
curVal := new(typegen.Deferred)
return curMap.ForEach(curVal, func(key string) error {
return out.Add(key, curVal)
})
}
+303
View File
@@ -0,0 +1,303 @@
package state
import (
"bytes"
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
cbornode "github.com/ipfs/go-ipld-cbor"
typegen "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/runtime"
"github.com/filecoin-project/specs-actors/actors/util/adt"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func TestDiffAdtArray(t *testing.T) {
ctxstoreA := newContextStore()
ctxstoreB := newContextStore()
arrA := adt.MakeEmptyArray(ctxstoreA)
arrB := adt.MakeEmptyArray(ctxstoreB)
require.NoError(t, arrA.Set(0, runtime.CBORBytes([]byte{0}))) // delete
require.NoError(t, arrA.Set(1, runtime.CBORBytes([]byte{0}))) // modify
require.NoError(t, arrB.Set(1, runtime.CBORBytes([]byte{1})))
require.NoError(t, arrA.Set(2, runtime.CBORBytes([]byte{1}))) // delete
require.NoError(t, arrA.Set(3, runtime.CBORBytes([]byte{0}))) // noop
require.NoError(t, arrB.Set(3, runtime.CBORBytes([]byte{0})))
require.NoError(t, arrA.Set(4, runtime.CBORBytes([]byte{0}))) // modify
require.NoError(t, arrB.Set(4, runtime.CBORBytes([]byte{6})))
require.NoError(t, arrB.Set(5, runtime.CBORBytes{8})) // add
require.NoError(t, arrB.Set(6, runtime.CBORBytes{9})) // add
changes := new(TestDiffArray)
assert.NoError(t, DiffAdtArray(arrA, arrB, changes))
assert.NotNil(t, changes)
assert.Equal(t, 2, len(changes.Added))
// keys 5 and 6 were added
assert.EqualValues(t, uint64(5), changes.Added[0].key)
assert.EqualValues(t, []byte{8}, changes.Added[0].val)
assert.EqualValues(t, uint64(6), changes.Added[1].key)
assert.EqualValues(t, []byte{9}, changes.Added[1].val)
assert.Equal(t, 2, len(changes.Modified))
// keys 1 and 4 were modified
assert.EqualValues(t, uint64(1), changes.Modified[0].From.key)
assert.EqualValues(t, []byte{0}, changes.Modified[0].From.val)
assert.EqualValues(t, uint64(1), changes.Modified[0].To.key)
assert.EqualValues(t, []byte{1}, changes.Modified[0].To.val)
assert.EqualValues(t, uint64(4), changes.Modified[1].From.key)
assert.EqualValues(t, []byte{0}, changes.Modified[1].From.val)
assert.EqualValues(t, uint64(4), changes.Modified[1].To.key)
assert.EqualValues(t, []byte{6}, changes.Modified[1].To.val)
assert.Equal(t, 2, len(changes.Removed))
// keys 0 and 2 were deleted
assert.EqualValues(t, uint64(0), changes.Removed[0].key)
assert.EqualValues(t, []byte{0}, changes.Removed[0].val)
assert.EqualValues(t, uint64(2), changes.Removed[1].key)
assert.EqualValues(t, []byte{1}, changes.Removed[1].val)
}
func TestDiffAdtMap(t *testing.T) {
ctxstoreA := newContextStore()
ctxstoreB := newContextStore()
mapA := adt.MakeEmptyMap(ctxstoreA)
mapB := adt.MakeEmptyMap(ctxstoreB)
require.NoError(t, mapA.Put(abi.UIntKey(0), runtime.CBORBytes([]byte{0}))) // delete
require.NoError(t, mapA.Put(abi.UIntKey(1), runtime.CBORBytes([]byte{0}))) // modify
require.NoError(t, mapB.Put(abi.UIntKey(1), runtime.CBORBytes([]byte{1})))
require.NoError(t, mapA.Put(abi.UIntKey(2), runtime.CBORBytes([]byte{1}))) // delete
require.NoError(t, mapA.Put(abi.UIntKey(3), runtime.CBORBytes([]byte{0}))) // noop
require.NoError(t, mapB.Put(abi.UIntKey(3), runtime.CBORBytes([]byte{0})))
require.NoError(t, mapA.Put(abi.UIntKey(4), runtime.CBORBytes([]byte{0}))) // modify
require.NoError(t, mapB.Put(abi.UIntKey(4), runtime.CBORBytes([]byte{6})))
require.NoError(t, mapB.Put(abi.UIntKey(5), runtime.CBORBytes{8})) // add
require.NoError(t, mapB.Put(abi.UIntKey(6), runtime.CBORBytes{9})) // add
changes := new(TestDiffMap)
assert.NoError(t, DiffAdtMap(mapA, mapB, changes))
assert.NotNil(t, changes)
assert.Equal(t, 2, len(changes.Added))
// keys 5 and 6 were added
assert.EqualValues(t, uint64(6), changes.Added[0].key)
assert.EqualValues(t, []byte{9}, changes.Added[0].val)
assert.EqualValues(t, uint64(5), changes.Added[1].key)
assert.EqualValues(t, []byte{8}, changes.Added[1].val)
assert.Equal(t, 2, len(changes.Modified))
// keys 1 and 4 were modified
assert.EqualValues(t, uint64(1), changes.Modified[0].From.key)
assert.EqualValues(t, []byte{0}, changes.Modified[0].From.val)
assert.EqualValues(t, uint64(1), changes.Modified[0].To.key)
assert.EqualValues(t, []byte{1}, changes.Modified[0].To.val)
assert.EqualValues(t, uint64(4), changes.Modified[1].From.key)
assert.EqualValues(t, []byte{0}, changes.Modified[1].From.val)
assert.EqualValues(t, uint64(4), changes.Modified[1].To.key)
assert.EqualValues(t, []byte{6}, changes.Modified[1].To.val)
assert.Equal(t, 2, len(changes.Removed))
// keys 0 and 2 were deleted
assert.EqualValues(t, uint64(0), changes.Removed[0].key)
assert.EqualValues(t, []byte{0}, changes.Removed[0].val)
assert.EqualValues(t, uint64(2), changes.Removed[1].key)
assert.EqualValues(t, []byte{1}, changes.Removed[1].val)
}
type TestDiffMap struct {
Added []adtMapDiffResult
Modified []TestAdtMapDiffModified
Removed []adtMapDiffResult
}
var _ AdtMapDiff = &TestDiffMap{}
func (t *TestDiffMap) AsKey(key string) (abi.Keyer, error) {
k, err := abi.ParseUIntKey(key)
if err != nil {
return nil, err
}
return abi.UIntKey(k), nil
}
func (t *TestDiffMap) Add(key string, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
k, err := abi.ParseUIntKey(key)
if err != nil {
return err
}
t.Added = append(t.Added, adtMapDiffResult{
key: k,
val: *v,
})
return nil
}
func (t *TestDiffMap) Modify(key string, from, to *typegen.Deferred) error {
vFrom := new(runtime.CBORBytes)
err := vFrom.UnmarshalCBOR(bytes.NewReader(from.Raw))
if err != nil {
return err
}
vTo := new(runtime.CBORBytes)
err = vTo.UnmarshalCBOR(bytes.NewReader(to.Raw))
if err != nil {
return err
}
k, err := abi.ParseUIntKey(key)
if err != nil {
return err
}
if !bytes.Equal(*vFrom, *vTo) {
t.Modified = append(t.Modified, TestAdtMapDiffModified{
From: adtMapDiffResult{
key: k,
val: *vFrom,
},
To: adtMapDiffResult{
key: k,
val: *vTo,
},
})
}
return nil
}
func (t *TestDiffMap) Remove(key string, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
k, err := abi.ParseUIntKey(key)
if err != nil {
return err
}
t.Removed = append(t.Removed, adtMapDiffResult{
key: k,
val: *v,
})
return nil
}
type adtMapDiffResult struct {
key uint64
val runtime.CBORBytes
}
type TestAdtMapDiffModified struct {
From adtMapDiffResult
To adtMapDiffResult
}
type adtArrayDiffResult struct {
key uint64
val runtime.CBORBytes
}
type TestDiffArray struct {
Added []adtArrayDiffResult
Modified []TestAdtArrayDiffModified
Removed []adtArrayDiffResult
}
var _ AdtArrayDiff = &TestDiffArray{}
type TestAdtArrayDiffModified struct {
From adtArrayDiffResult
To adtArrayDiffResult
}
func (t *TestDiffArray) Add(key uint64, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
t.Added = append(t.Added, adtArrayDiffResult{
key: key,
val: *v,
})
return nil
}
func (t *TestDiffArray) Modify(key uint64, from, to *typegen.Deferred) error {
vFrom := new(runtime.CBORBytes)
err := vFrom.UnmarshalCBOR(bytes.NewReader(from.Raw))
if err != nil {
return err
}
vTo := new(runtime.CBORBytes)
err = vTo.UnmarshalCBOR(bytes.NewReader(to.Raw))
if err != nil {
return err
}
if !bytes.Equal(*vFrom, *vTo) {
t.Modified = append(t.Modified, TestAdtArrayDiffModified{
From: adtArrayDiffResult{
key: key,
val: *vFrom,
},
To: adtArrayDiffResult{
key: key,
val: *vTo,
},
})
}
return nil
}
func (t *TestDiffArray) Remove(key uint64, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
t.Removed = append(t.Removed, adtArrayDiffResult{
key: key,
val: *v,
})
return nil
}
func newContextStore() *contextStore {
ctx := context.Background()
bs := bstore.NewTemporarySync()
store := cbornode.NewCborStore(bs)
return &contextStore{
ctx: ctx,
cst: store,
}
}
+787
View File
@@ -0,0 +1,787 @@
package state
import (
"bytes"
"context"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/specs-actors/actors/builtin"
init_ "github.com/filecoin-project/specs-actors/actors/builtin/init"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
"github.com/filecoin-project/specs-actors/actors/util/adt"
"github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
typegen "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/lotus/api/apibstore"
"github.com/filecoin-project/lotus/chain/types"
)
// UserData is the data returned from the DiffTipSetKeyFunc
type UserData interface{}
// ChainAPI abstracts out calls made by this class to external APIs
type ChainAPI interface {
apibstore.ChainIO
StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error)
}
// StatePredicates has common predicates for responding to state changes
type StatePredicates struct {
api ChainAPI
cst *cbor.BasicIpldStore
}
func NewStatePredicates(api ChainAPI) *StatePredicates {
return &StatePredicates{
api: api,
cst: cbor.NewCborStore(apibstore.NewAPIBlockstore(api)),
}
}
// DiffTipSetKeyFunc check if there's a change form oldState to newState, and returns
// - changed: was there a change
// - user: user-defined data representing the state change
// - err
type DiffTipSetKeyFunc func(ctx context.Context, oldState, newState types.TipSetKey) (changed bool, user UserData, err error)
type DiffActorStateFunc func(ctx context.Context, oldActorStateHead, newActorStateHead cid.Cid) (changed bool, user UserData, err error)
// OnActorStateChanged calls diffStateFunc when the state changes for the given actor
func (sp *StatePredicates) OnActorStateChanged(addr address.Address, diffStateFunc DiffActorStateFunc) DiffTipSetKeyFunc {
return func(ctx context.Context, oldState, newState types.TipSetKey) (changed bool, user UserData, err error) {
oldActor, err := sp.api.StateGetActor(ctx, addr, oldState)
if err != nil {
return false, nil, err
}
newActor, err := sp.api.StateGetActor(ctx, addr, newState)
if err != nil {
return false, nil, err
}
if oldActor.Head.Equals(newActor.Head) {
return false, nil, nil
}
return diffStateFunc(ctx, oldActor.Head, newActor.Head)
}
}
type DiffStorageMarketStateFunc func(ctx context.Context, oldState *market.State, newState *market.State) (changed bool, user UserData, err error)
// OnStorageMarketActorChanged calls diffStorageMarketState when the state changes for the market actor
func (sp *StatePredicates) OnStorageMarketActorChanged(diffStorageMarketState DiffStorageMarketStateFunc) DiffTipSetKeyFunc {
return sp.OnActorStateChanged(builtin.StorageMarketActorAddr, func(ctx context.Context, oldActorStateHead, newActorStateHead cid.Cid) (changed bool, user UserData, err error) {
var oldState market.State
if err := sp.cst.Get(ctx, oldActorStateHead, &oldState); err != nil {
return false, nil, err
}
var newState market.State
if err := sp.cst.Get(ctx, newActorStateHead, &newState); err != nil {
return false, nil, err
}
return diffStorageMarketState(ctx, &oldState, &newState)
})
}
type BalanceTables struct {
EscrowTable *adt.BalanceTable
LockedTable *adt.BalanceTable
}
// DiffBalanceTablesFunc compares two balance tables
type DiffBalanceTablesFunc func(ctx context.Context, oldBalanceTable, newBalanceTable BalanceTables) (changed bool, user UserData, err error)
// OnBalanceChanged runs when the escrow table for available balances changes
func (sp *StatePredicates) OnBalanceChanged(diffBalances DiffBalanceTablesFunc) DiffStorageMarketStateFunc {
return func(ctx context.Context, oldState *market.State, newState *market.State) (changed bool, user UserData, err error) {
if oldState.EscrowTable.Equals(newState.EscrowTable) && oldState.LockedTable.Equals(newState.LockedTable) {
return false, nil, nil
}
ctxStore := &contextStore{
ctx: ctx,
cst: sp.cst,
}
oldEscrowRoot, err := adt.AsBalanceTable(ctxStore, oldState.EscrowTable)
if err != nil {
return false, nil, err
}
oldLockedRoot, err := adt.AsBalanceTable(ctxStore, oldState.LockedTable)
if err != nil {
return false, nil, err
}
newEscrowRoot, err := adt.AsBalanceTable(ctxStore, newState.EscrowTable)
if err != nil {
return false, nil, err
}
newLockedRoot, err := adt.AsBalanceTable(ctxStore, newState.LockedTable)
if err != nil {
return false, nil, err
}
return diffBalances(ctx, BalanceTables{oldEscrowRoot, oldLockedRoot}, BalanceTables{newEscrowRoot, newLockedRoot})
}
}
type DiffAdtArraysFunc func(ctx context.Context, oldDealStateRoot, newDealStateRoot *adt.Array) (changed bool, user UserData, err error)
// OnDealStateChanged calls diffDealStates when the market deal state changes
func (sp *StatePredicates) OnDealStateChanged(diffDealStates DiffAdtArraysFunc) DiffStorageMarketStateFunc {
return func(ctx context.Context, oldState *market.State, newState *market.State) (changed bool, user UserData, err error) {
if oldState.States.Equals(newState.States) {
return false, nil, nil
}
ctxStore := &contextStore{
ctx: ctx,
cst: sp.cst,
}
oldRoot, err := adt.AsArray(ctxStore, oldState.States)
if err != nil {
return false, nil, err
}
newRoot, err := adt.AsArray(ctxStore, newState.States)
if err != nil {
return false, nil, err
}
return diffDealStates(ctx, oldRoot, newRoot)
}
}
// OnDealProposalChanged calls diffDealProps when the market proposal state changes
func (sp *StatePredicates) OnDealProposalChanged(diffDealProps DiffAdtArraysFunc) DiffStorageMarketStateFunc {
return func(ctx context.Context, oldState *market.State, newState *market.State) (changed bool, user UserData, err error) {
if oldState.Proposals.Equals(newState.Proposals) {
return false, nil, nil
}
ctxStore := &contextStore{
ctx: ctx,
cst: sp.cst,
}
oldRoot, err := adt.AsArray(ctxStore, oldState.Proposals)
if err != nil {
return false, nil, err
}
newRoot, err := adt.AsArray(ctxStore, newState.Proposals)
if err != nil {
return false, nil, err
}
return diffDealProps(ctx, oldRoot, newRoot)
}
}
var _ AdtArrayDiff = &MarketDealProposalChanges{}
type MarketDealProposalChanges struct {
Added []ProposalIDState
Removed []ProposalIDState
}
type ProposalIDState struct {
ID abi.DealID
Proposal market.DealProposal
}
func (m *MarketDealProposalChanges) Add(key uint64, val *typegen.Deferred) error {
dp := new(market.DealProposal)
err := dp.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Added = append(m.Added, ProposalIDState{abi.DealID(key), *dp})
return nil
}
func (m *MarketDealProposalChanges) Modify(key uint64, from, to *typegen.Deferred) error {
// short circuit, DealProposals are static
return nil
}
func (m *MarketDealProposalChanges) Remove(key uint64, val *typegen.Deferred) error {
dp := new(market.DealProposal)
err := dp.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Removed = append(m.Removed, ProposalIDState{abi.DealID(key), *dp})
return nil
}
// OnDealProposalAmtChanged detects changes in the deal proposal AMT for all deal proposals and returns a MarketProposalsChanges structure containing:
// - Added Proposals
// - Modified Proposals
// - Removed Proposals
func (sp *StatePredicates) OnDealProposalAmtChanged() DiffAdtArraysFunc {
return func(ctx context.Context, oldDealProps, newDealProps *adt.Array) (changed bool, user UserData, err error) {
proposalChanges := new(MarketDealProposalChanges)
if err := DiffAdtArray(oldDealProps, newDealProps, proposalChanges); err != nil {
return false, nil, err
}
if len(proposalChanges.Added)+len(proposalChanges.Removed) == 0 {
return false, nil, nil
}
return true, proposalChanges, nil
}
}
var _ AdtArrayDiff = &MarketDealStateChanges{}
type MarketDealStateChanges struct {
Added []DealIDState
Modified []DealStateChange
Removed []DealIDState
}
type DealIDState struct {
ID abi.DealID
Deal market.DealState
}
func (m *MarketDealStateChanges) Add(key uint64, val *typegen.Deferred) error {
ds := new(market.DealState)
err := ds.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Added = append(m.Added, DealIDState{abi.DealID(key), *ds})
return nil
}
func (m *MarketDealStateChanges) Modify(key uint64, from, to *typegen.Deferred) error {
dsFrom := new(market.DealState)
if err := dsFrom.UnmarshalCBOR(bytes.NewReader(from.Raw)); err != nil {
return err
}
dsTo := new(market.DealState)
if err := dsTo.UnmarshalCBOR(bytes.NewReader(to.Raw)); err != nil {
return err
}
if *dsFrom != *dsTo {
m.Modified = append(m.Modified, DealStateChange{abi.DealID(key), dsFrom, dsTo})
}
return nil
}
func (m *MarketDealStateChanges) Remove(key uint64, val *typegen.Deferred) error {
ds := new(market.DealState)
err := ds.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Removed = append(m.Removed, DealIDState{abi.DealID(key), *ds})
return nil
}
// OnDealStateAmtChanged detects changes in the deal state AMT for all deal states and returns a MarketDealStateChanges structure containing:
// - Added Deals
// - Modified Deals
// - Removed Deals
func (sp *StatePredicates) OnDealStateAmtChanged() DiffAdtArraysFunc {
return func(ctx context.Context, oldDealStates, newDealStates *adt.Array) (changed bool, user UserData, err error) {
dealStateChanges := new(MarketDealStateChanges)
if err := DiffAdtArray(oldDealStates, newDealStates, dealStateChanges); err != nil {
return false, nil, err
}
if len(dealStateChanges.Added)+len(dealStateChanges.Modified)+len(dealStateChanges.Removed) == 0 {
return false, nil, nil
}
return true, dealStateChanges, nil
}
}
// ChangedDeals is a set of changes to deal state
type ChangedDeals map[abi.DealID]DealStateChange
// DealStateChange is a change in deal state from -> to
type DealStateChange struct {
ID abi.DealID
From *market.DealState
To *market.DealState
}
// DealStateChangedForIDs detects changes in the deal state AMT for the given deal IDs
func (sp *StatePredicates) DealStateChangedForIDs(dealIds []abi.DealID) DiffAdtArraysFunc {
return func(ctx context.Context, oldDealStateArray, newDealStateArray *adt.Array) (changed bool, user UserData, err error) {
changedDeals := make(ChangedDeals)
for _, dealID := range dealIds {
var oldDealPtr, newDealPtr *market.DealState
var oldDeal, newDeal market.DealState
// If the deal has been removed, we just set it to nil
found, err := oldDealStateArray.Get(uint64(dealID), &oldDeal)
if err != nil {
return false, nil, err
}
if found {
oldDealPtr = &oldDeal
}
found, err = newDealStateArray.Get(uint64(dealID), &newDeal)
if err != nil {
return false, nil, err
}
if found {
newDealPtr = &newDeal
}
if oldDeal != newDeal {
changedDeals[dealID] = DealStateChange{dealID, oldDealPtr, newDealPtr}
}
}
if len(changedDeals) > 0 {
return true, changedDeals, nil
}
return false, nil, nil
}
}
// ChangedBalances is a set of changes to deal state
type ChangedBalances map[address.Address]BalanceChange
// BalanceChange is a change in balance from -> to
type BalanceChange struct {
From abi.TokenAmount
To abi.TokenAmount
}
// AvailableBalanceChangedForAddresses detects changes in the escrow table for the given addresses
func (sp *StatePredicates) AvailableBalanceChangedForAddresses(getAddrs func() []address.Address) DiffBalanceTablesFunc {
return func(ctx context.Context, oldBalances, newBalances BalanceTables) (changed bool, user UserData, err error) {
changedBalances := make(ChangedBalances)
addrs := getAddrs()
for _, addr := range addrs {
// If the deal has been removed, we just set it to nil
oldEscrowBalance, err := oldBalances.EscrowTable.Get(addr)
if err != nil {
return false, nil, err
}
oldLockedBalance, err := oldBalances.LockedTable.Get(addr)
if err != nil {
return false, nil, err
}
oldBalance := big.Sub(oldEscrowBalance, oldLockedBalance)
newEscrowBalance, err := newBalances.EscrowTable.Get(addr)
if err != nil {
return false, nil, err
}
newLockedBalance, err := newBalances.LockedTable.Get(addr)
if err != nil {
return false, nil, err
}
newBalance := big.Sub(newEscrowBalance, newLockedBalance)
if !oldBalance.Equals(newBalance) {
changedBalances[addr] = BalanceChange{oldBalance, newBalance}
}
}
if len(changedBalances) > 0 {
return true, changedBalances, nil
}
return false, nil, nil
}
}
type DiffMinerActorStateFunc func(ctx context.Context, oldState *miner.State, newState *miner.State) (changed bool, user UserData, err error)
func (sp *StatePredicates) OnInitActorChange(diffInitActorState DiffInitActorStateFunc) DiffTipSetKeyFunc {
return sp.OnActorStateChanged(builtin.InitActorAddr, func(ctx context.Context, oldActorStateHead, newActorStateHead cid.Cid) (changed bool, user UserData, err error) {
var oldState init_.State
if err := sp.cst.Get(ctx, oldActorStateHead, &oldState); err != nil {
return false, nil, err
}
var newState init_.State
if err := sp.cst.Get(ctx, newActorStateHead, &newState); err != nil {
return false, nil, err
}
return diffInitActorState(ctx, &oldState, &newState)
})
}
func (sp *StatePredicates) OnMinerActorChange(minerAddr address.Address, diffMinerActorState DiffMinerActorStateFunc) DiffTipSetKeyFunc {
return sp.OnActorStateChanged(minerAddr, func(ctx context.Context, oldActorStateHead, newActorStateHead cid.Cid) (changed bool, user UserData, err error) {
var oldState miner.State
if err := sp.cst.Get(ctx, oldActorStateHead, &oldState); err != nil {
return false, nil, err
}
var newState miner.State
if err := sp.cst.Get(ctx, newActorStateHead, &newState); err != nil {
return false, nil, err
}
return diffMinerActorState(ctx, &oldState, &newState)
})
}
type MinerSectorChanges struct {
Added []miner.SectorOnChainInfo
Extended []SectorExtensions
Removed []miner.SectorOnChainInfo
}
var _ AdtArrayDiff = &MinerSectorChanges{}
type SectorExtensions struct {
From miner.SectorOnChainInfo
To miner.SectorOnChainInfo
}
func (m *MinerSectorChanges) Add(key uint64, val *typegen.Deferred) error {
si := new(miner.SectorOnChainInfo)
err := si.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Added = append(m.Added, *si)
return nil
}
func (m *MinerSectorChanges) Modify(key uint64, from, to *typegen.Deferred) error {
siFrom := new(miner.SectorOnChainInfo)
err := siFrom.UnmarshalCBOR(bytes.NewReader(from.Raw))
if err != nil {
return err
}
siTo := new(miner.SectorOnChainInfo)
err = siTo.UnmarshalCBOR(bytes.NewReader(to.Raw))
if err != nil {
return err
}
if siFrom.Expiration != siTo.Expiration {
m.Extended = append(m.Extended, SectorExtensions{
From: *siFrom,
To: *siTo,
})
}
return nil
}
func (m *MinerSectorChanges) Remove(key uint64, val *typegen.Deferred) error {
si := new(miner.SectorOnChainInfo)
err := si.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Removed = append(m.Removed, *si)
return nil
}
func (sp *StatePredicates) OnMinerSectorChange() DiffMinerActorStateFunc {
return func(ctx context.Context, oldState, newState *miner.State) (changed bool, user UserData, err error) {
ctxStore := &contextStore{
ctx: ctx,
cst: sp.cst,
}
sectorChanges := &MinerSectorChanges{
Added: []miner.SectorOnChainInfo{},
Extended: []SectorExtensions{},
Removed: []miner.SectorOnChainInfo{},
}
// no sector changes
if oldState.Sectors.Equals(newState.Sectors) {
return false, nil, nil
}
oldSectors, err := adt.AsArray(ctxStore, oldState.Sectors)
if err != nil {
return false, nil, err
}
newSectors, err := adt.AsArray(ctxStore, newState.Sectors)
if err != nil {
return false, nil, err
}
if err := DiffAdtArray(oldSectors, newSectors, sectorChanges); err != nil {
return false, nil, err
}
// nothing changed
if len(sectorChanges.Added)+len(sectorChanges.Extended)+len(sectorChanges.Removed) == 0 {
return false, nil, nil
}
return true, sectorChanges, nil
}
}
type MinerPreCommitChanges struct {
Added []miner.SectorPreCommitOnChainInfo
Removed []miner.SectorPreCommitOnChainInfo
}
func (m *MinerPreCommitChanges) AsKey(key string) (abi.Keyer, error) {
sector, err := abi.ParseUIntKey(key)
if err != nil {
return nil, err
}
return miner.SectorKey(abi.SectorNumber(sector)), nil
}
func (m *MinerPreCommitChanges) Add(key string, val *typegen.Deferred) error {
sp := new(miner.SectorPreCommitOnChainInfo)
err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Added = append(m.Added, *sp)
return nil
}
func (m *MinerPreCommitChanges) Modify(key string, from, to *typegen.Deferred) error {
return nil
}
func (m *MinerPreCommitChanges) Remove(key string, val *typegen.Deferred) error {
sp := new(miner.SectorPreCommitOnChainInfo)
err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
}
m.Removed = append(m.Removed, *sp)
return nil
}
func (sp *StatePredicates) OnMinerPreCommitChange() DiffMinerActorStateFunc {
return func(ctx context.Context, oldState, newState *miner.State) (changed bool, user UserData, err error) {
ctxStore := &contextStore{
ctx: ctx,
cst: sp.cst,
}
precommitChanges := &MinerPreCommitChanges{
Added: []miner.SectorPreCommitOnChainInfo{},
Removed: []miner.SectorPreCommitOnChainInfo{},
}
if oldState.PreCommittedSectors.Equals(newState.PreCommittedSectors) {
return false, nil, nil
}
oldPrecommits, err := adt.AsMap(ctxStore, oldState.PreCommittedSectors)
if err != nil {
return false, nil, err
}
newPrecommits, err := adt.AsMap(ctxStore, newState.PreCommittedSectors)
if err != nil {
return false, nil, err
}
if err := DiffAdtMap(oldPrecommits, newPrecommits, precommitChanges); err != nil {
return false, nil, err
}
if len(precommitChanges.Added)+len(precommitChanges.Removed) == 0 {
return false, nil, nil
}
return true, precommitChanges, nil
}
}
// DiffPaymentChannelStateFunc is function that compares two states for the payment channel
type DiffPaymentChannelStateFunc func(ctx context.Context, oldState *paych.State, newState *paych.State) (changed bool, user UserData, err error)
// OnPaymentChannelActorChanged calls diffPaymentChannelState when the state changes for the the payment channel actor
func (sp *StatePredicates) OnPaymentChannelActorChanged(paychAddr address.Address, diffPaymentChannelState DiffPaymentChannelStateFunc) DiffTipSetKeyFunc {
return sp.OnActorStateChanged(paychAddr, func(ctx context.Context, oldActorStateHead, newActorStateHead cid.Cid) (changed bool, user UserData, err error) {
var oldState paych.State
if err := sp.cst.Get(ctx, oldActorStateHead, &oldState); err != nil {
return false, nil, err
}
var newState paych.State
if err := sp.cst.Get(ctx, newActorStateHead, &newState); err != nil {
return false, nil, err
}
return diffPaymentChannelState(ctx, &oldState, &newState)
})
}
// PayChToSendChange is a difference in the amount to send on a payment channel when the money is collected
type PayChToSendChange struct {
OldToSend abi.TokenAmount
NewToSend abi.TokenAmount
}
// OnToSendAmountChanges monitors changes on the total amount to send from one party to the other on a payment channel
func (sp *StatePredicates) OnToSendAmountChanges() DiffPaymentChannelStateFunc {
return func(ctx context.Context, oldState *paych.State, newState *paych.State) (changed bool, user UserData, err error) {
if oldState.ToSend.Equals(newState.ToSend) {
return false, nil, nil
}
return true, &PayChToSendChange{
OldToSend: oldState.ToSend,
NewToSend: newState.ToSend,
}, nil
}
}
type AddressPair struct {
ID address.Address
PK address.Address
}
type InitActorAddressChanges struct {
Added []AddressPair
Modified []AddressChange
Removed []AddressPair
}
type AddressChange struct {
From AddressPair
To AddressPair
}
type DiffInitActorStateFunc func(ctx context.Context, oldState *init_.State, newState *init_.State) (changed bool, user UserData, err error)
func (i *InitActorAddressChanges) AsKey(key string) (abi.Keyer, error) {
addr, err := address.NewFromBytes([]byte(key))
if err != nil {
return nil, err
}
return abi.AddrKey(addr), nil
}
func (i *InitActorAddressChanges) Add(key string, val *typegen.Deferred) error {
pkAddr, err := address.NewFromBytes([]byte(key))
if err != nil {
return err
}
id := new(typegen.CborInt)
if err := id.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil {
return err
}
idAddr, err := address.NewIDAddress(uint64(*id))
if err != nil {
return err
}
i.Added = append(i.Added, AddressPair{
ID: idAddr,
PK: pkAddr,
})
return nil
}
func (i *InitActorAddressChanges) Modify(key string, from, to *typegen.Deferred) error {
pkAddr, err := address.NewFromBytes([]byte(key))
if err != nil {
return err
}
fromID := new(typegen.CborInt)
if err := fromID.UnmarshalCBOR(bytes.NewReader(from.Raw)); err != nil {
return err
}
fromIDAddr, err := address.NewIDAddress(uint64(*fromID))
if err != nil {
return err
}
toID := new(typegen.CborInt)
if err := toID.UnmarshalCBOR(bytes.NewReader(to.Raw)); err != nil {
return err
}
toIDAddr, err := address.NewIDAddress(uint64(*toID))
if err != nil {
return err
}
i.Modified = append(i.Modified, AddressChange{
From: AddressPair{
ID: fromIDAddr,
PK: pkAddr,
},
To: AddressPair{
ID: toIDAddr,
PK: pkAddr,
},
})
return nil
}
func (i *InitActorAddressChanges) Remove(key string, val *typegen.Deferred) error {
pkAddr, err := address.NewFromBytes([]byte(key))
if err != nil {
return err
}
id := new(typegen.CborInt)
if err := id.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil {
return err
}
idAddr, err := address.NewIDAddress(uint64(*id))
if err != nil {
return err
}
i.Removed = append(i.Removed, AddressPair{
ID: idAddr,
PK: pkAddr,
})
return nil
}
func (sp *StatePredicates) OnAddressMapChange() DiffInitActorStateFunc {
return func(ctx context.Context, oldState, newState *init_.State) (changed bool, user UserData, err error) {
ctxStore := &contextStore{
ctx: ctx,
cst: sp.cst,
}
addressChanges := &InitActorAddressChanges{
Added: []AddressPair{},
Modified: []AddressChange{},
Removed: []AddressPair{},
}
if oldState.AddressMap.Equals(newState.AddressMap) {
return false, nil, nil
}
oldAddrs, err := adt.AsMap(ctxStore, oldState.AddressMap)
if err != nil {
return false, nil, err
}
newAddrs, err := adt.AsMap(ctxStore, newState.AddressMap)
if err != nil {
return false, nil, err
}
if err := DiffAdtMap(oldAddrs, newAddrs, addressChanges); err != nil {
return false, nil, err
}
if len(addressChanges.Added)+len(addressChanges.Removed)+len(addressChanges.Modified) == 0 {
return false, nil, nil
}
return true, addressChanges, nil
}
}
+609
View File
@@ -0,0 +1,609 @@
package state
import (
"context"
"testing"
"github.com/filecoin-project/go-bitfield"
"github.com/stretchr/testify/require"
"golang.org/x/xerrors"
"github.com/ipfs/go-cid"
cbornode "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/util/adt"
tutils "github.com/filecoin-project/specs-actors/support/testing"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
var dummyCid cid.Cid
func init() {
dummyCid, _ = cid.Parse("bafkqaaa")
}
type mockAPI struct {
ts map[types.TipSetKey]*types.Actor
bs bstore.Blockstore
}
func newMockAPI(bs bstore.Blockstore) *mockAPI {
return &mockAPI{
bs: bs,
ts: make(map[types.TipSetKey]*types.Actor),
}
}
func (m mockAPI) ChainHasObj(ctx context.Context, c cid.Cid) (bool, error) {
return m.bs.Has(c)
}
func (m mockAPI) ChainReadObj(ctx context.Context, c cid.Cid) ([]byte, error) {
blk, err := m.bs.Get(c)
if err != nil {
return nil, xerrors.Errorf("blockstore get: %w", err)
}
return blk.RawData(), nil
}
func (m mockAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) {
return m.ts[tsk], nil
}
func (m mockAPI) setActor(tsk types.TipSetKey, act *types.Actor) {
m.ts[tsk] = act
}
func TestMarketPredicates(t *testing.T) {
ctx := context.Background()
bs := bstore.NewTemporarySync()
store := adt.WrapStore(ctx, cbornode.NewCborStore(bs))
oldDeal1 := &market.DealState{
SectorStartEpoch: 1,
LastUpdatedEpoch: 2,
SlashEpoch: 0,
}
oldDeal2 := &market.DealState{
SectorStartEpoch: 4,
LastUpdatedEpoch: 5,
SlashEpoch: 0,
}
oldDeals := map[abi.DealID]*market.DealState{
abi.DealID(1): oldDeal1,
abi.DealID(2): oldDeal2,
}
oldProp1 := &market.DealProposal{
PieceCID: dummyCid,
PieceSize: 0,
VerifiedDeal: false,
Client: tutils.NewIDAddr(t, 1),
Provider: tutils.NewIDAddr(t, 1),
StartEpoch: 1,
EndEpoch: 2,
StoragePricePerEpoch: big.Zero(),
ProviderCollateral: big.Zero(),
ClientCollateral: big.Zero(),
}
oldProp2 := &market.DealProposal{
PieceCID: dummyCid,
PieceSize: 0,
VerifiedDeal: false,
Client: tutils.NewIDAddr(t, 1),
Provider: tutils.NewIDAddr(t, 1),
StartEpoch: 2,
EndEpoch: 3,
StoragePricePerEpoch: big.Zero(),
ProviderCollateral: big.Zero(),
ClientCollateral: big.Zero(),
}
oldProps := map[abi.DealID]*market.DealProposal{
abi.DealID(1): oldProp1,
abi.DealID(2): oldProp2,
}
oldBalances := map[address.Address]balance{
tutils.NewIDAddr(t, 1): {abi.NewTokenAmount(1000), abi.NewTokenAmount(1000)},
tutils.NewIDAddr(t, 2): {abi.NewTokenAmount(2000), abi.NewTokenAmount(500)},
tutils.NewIDAddr(t, 3): {abi.NewTokenAmount(3000), abi.NewTokenAmount(2000)},
tutils.NewIDAddr(t, 5): {abi.NewTokenAmount(3000), abi.NewTokenAmount(1000)},
}
oldStateC := createMarketState(ctx, t, store, oldDeals, oldProps, oldBalances)
newDeal1 := &market.DealState{
SectorStartEpoch: 1,
LastUpdatedEpoch: 3,
SlashEpoch: 0,
}
// deal 2 removed
// added
newDeal3 := &market.DealState{
SectorStartEpoch: 1,
LastUpdatedEpoch: 2,
SlashEpoch: 3,
}
newDeals := map[abi.DealID]*market.DealState{
abi.DealID(1): newDeal1,
// deal 2 was removed
abi.DealID(3): newDeal3,
}
// added
newProp3 := &market.DealProposal{
PieceCID: dummyCid,
PieceSize: 0,
VerifiedDeal: false,
Client: tutils.NewIDAddr(t, 1),
Provider: tutils.NewIDAddr(t, 1),
StartEpoch: 4,
EndEpoch: 4,
StoragePricePerEpoch: big.Zero(),
ProviderCollateral: big.Zero(),
ClientCollateral: big.Zero(),
}
newProps := map[abi.DealID]*market.DealProposal{
abi.DealID(1): oldProp1, // 1 was persisted
// prop 2 was removed
abi.DealID(3): newProp3, // new
// NB: DealProposals cannot be modified, so don't test that case.
}
newBalances := map[address.Address]balance{
tutils.NewIDAddr(t, 1): {abi.NewTokenAmount(3000), abi.NewTokenAmount(0)},
tutils.NewIDAddr(t, 2): {abi.NewTokenAmount(2000), abi.NewTokenAmount(500)},
tutils.NewIDAddr(t, 4): {abi.NewTokenAmount(5000), abi.NewTokenAmount(0)},
tutils.NewIDAddr(t, 5): {abi.NewTokenAmount(1000), abi.NewTokenAmount(3000)},
}
newStateC := createMarketState(ctx, t, store, newDeals, newProps, newBalances)
minerAddr, err := address.NewFromString("t00")
require.NoError(t, err)
oldState, err := mockTipset(minerAddr, 1)
require.NoError(t, err)
newState, err := mockTipset(minerAddr, 2)
require.NoError(t, err)
api := newMockAPI(bs)
api.setActor(oldState.Key(), &types.Actor{Head: oldStateC})
api.setActor(newState.Key(), &types.Actor{Head: newStateC})
t.Run("deal ID predicate", func(t *testing.T) {
preds := NewStatePredicates(api)
dealIds := []abi.DealID{abi.DealID(1), abi.DealID(2)}
diffIDFn := preds.OnStorageMarketActorChanged(preds.OnDealStateChanged(preds.DealStateChangedForIDs(dealIds)))
// Diff a state against itself: expect no change
changed, _, err := diffIDFn(ctx, oldState.Key(), oldState.Key())
require.NoError(t, err)
require.False(t, changed)
// Diff old state against new state
changed, valIDs, err := diffIDFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.True(t, changed)
changedDealIDs, ok := valIDs.(ChangedDeals)
require.True(t, ok)
require.Len(t, changedDealIDs, 2)
require.Contains(t, changedDealIDs, abi.DealID(1))
require.Contains(t, changedDealIDs, abi.DealID(2))
deal1 := changedDealIDs[abi.DealID(1)]
if deal1.From.LastUpdatedEpoch != 2 || deal1.To.LastUpdatedEpoch != 3 {
t.Fatal("Unexpected change to LastUpdatedEpoch")
}
deal2 := changedDealIDs[abi.DealID(2)]
if deal2.From.LastUpdatedEpoch != 5 || deal2.To != nil {
t.Fatal("Expected To to be nil")
}
// Diff with non-existent deal.
noDeal := []abi.DealID{4}
diffNoDealFn := preds.OnStorageMarketActorChanged(preds.OnDealStateChanged(preds.DealStateChangedForIDs(noDeal)))
changed, _, err = diffNoDealFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.False(t, changed)
// Test that OnActorStateChanged does not call the callback if the state has not changed
mockAddr, err := address.NewFromString("t01")
require.NoError(t, err)
actorDiffFn := preds.OnActorStateChanged(mockAddr, func(context.Context, cid.Cid, cid.Cid) (bool, UserData, error) {
t.Fatal("No state change so this should not be called")
return false, nil, nil
})
changed, _, err = actorDiffFn(ctx, oldState.Key(), oldState.Key())
require.NoError(t, err)
require.False(t, changed)
// Test that OnDealStateChanged does not call the callback if the state has not changed
diffDealStateFn := preds.OnDealStateChanged(func(context.Context, *adt.Array, *adt.Array) (bool, UserData, error) {
t.Fatal("No state change so this should not be called")
return false, nil, nil
})
marketState := createEmptyMarketState(t, store)
changed, _, err = diffDealStateFn(ctx, marketState, marketState)
require.NoError(t, err)
require.False(t, changed)
})
t.Run("deal state array predicate", func(t *testing.T) {
preds := NewStatePredicates(api)
diffArrFn := preds.OnStorageMarketActorChanged(preds.OnDealStateChanged(preds.OnDealStateAmtChanged()))
changed, _, err := diffArrFn(ctx, oldState.Key(), oldState.Key())
require.NoError(t, err)
require.False(t, changed)
changed, valArr, err := diffArrFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.True(t, changed)
changedDeals, ok := valArr.(*MarketDealStateChanges)
require.True(t, ok)
require.Len(t, changedDeals.Added, 1)
require.Equal(t, abi.DealID(3), changedDeals.Added[0].ID)
require.Equal(t, *newDeal3, changedDeals.Added[0].Deal)
require.Len(t, changedDeals.Removed, 1)
require.Len(t, changedDeals.Modified, 1)
require.Equal(t, abi.DealID(1), changedDeals.Modified[0].ID)
require.Equal(t, newDeal1, changedDeals.Modified[0].To)
require.Equal(t, oldDeal1, changedDeals.Modified[0].From)
require.Equal(t, abi.DealID(2), changedDeals.Removed[0].ID)
})
t.Run("deal proposal array predicate", func(t *testing.T) {
preds := NewStatePredicates(api)
diffArrFn := preds.OnStorageMarketActorChanged(preds.OnDealProposalChanged(preds.OnDealProposalAmtChanged()))
changed, _, err := diffArrFn(ctx, oldState.Key(), oldState.Key())
require.NoError(t, err)
require.False(t, changed)
changed, valArr, err := diffArrFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.True(t, changed)
changedProps, ok := valArr.(*MarketDealProposalChanges)
require.True(t, ok)
require.Len(t, changedProps.Added, 1)
require.Equal(t, abi.DealID(3), changedProps.Added[0].ID)
require.Equal(t, *newProp3, changedProps.Added[0].Proposal)
// proposals cannot be modified -- no modified testing
require.Len(t, changedProps.Removed, 1)
require.Equal(t, abi.DealID(2), changedProps.Removed[0].ID)
require.Equal(t, *oldProp2, changedProps.Removed[0].Proposal)
})
t.Run("balances predicate", func(t *testing.T) {
preds := NewStatePredicates(api)
getAddresses := func() []address.Address {
return []address.Address{tutils.NewIDAddr(t, 1), tutils.NewIDAddr(t, 2), tutils.NewIDAddr(t, 3), tutils.NewIDAddr(t, 4)}
}
diffBalancesFn := preds.OnStorageMarketActorChanged(preds.OnBalanceChanged(preds.AvailableBalanceChangedForAddresses(getAddresses)))
// Diff a state against itself: expect no change
changed, _, err := diffBalancesFn(ctx, oldState.Key(), oldState.Key())
require.NoError(t, err)
require.False(t, changed)
// Diff old state against new state
changed, valIDs, err := diffBalancesFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.True(t, changed)
changedBalances, ok := valIDs.(ChangedBalances)
require.True(t, ok)
require.Len(t, changedBalances, 3)
require.Contains(t, changedBalances, tutils.NewIDAddr(t, 1))
require.Contains(t, changedBalances, tutils.NewIDAddr(t, 3))
require.Contains(t, changedBalances, tutils.NewIDAddr(t, 4))
balance1 := changedBalances[tutils.NewIDAddr(t, 1)]
if !balance1.From.Equals(abi.NewTokenAmount(1000)) || !balance1.To.Equals(abi.NewTokenAmount(3000)) {
t.Fatal("Unexpected change to balance")
}
balance3 := changedBalances[tutils.NewIDAddr(t, 3)]
if !balance3.From.Equals(abi.NewTokenAmount(3000)) || !balance3.To.Equals(abi.NewTokenAmount(0)) {
t.Fatal("Unexpected change to balance")
}
balance4 := changedBalances[tutils.NewIDAddr(t, 4)]
if !balance4.From.Equals(abi.NewTokenAmount(0)) || !balance4.To.Equals(abi.NewTokenAmount(5000)) {
t.Fatal("Unexpected change to balance")
}
// Diff with non-existent address.
getNoAddress := func() []address.Address { return []address.Address{tutils.NewIDAddr(t, 6)} }
diffNoAddressFn := preds.OnStorageMarketActorChanged(preds.OnBalanceChanged(preds.AvailableBalanceChangedForAddresses(getNoAddress)))
changed, _, err = diffNoAddressFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.False(t, changed)
// Test that OnBalanceChanged does not call the callback if the state has not changed
diffDealBalancesFn := preds.OnBalanceChanged(func(context.Context, BalanceTables, BalanceTables) (bool, UserData, error) {
t.Fatal("No state change so this should not be called")
return false, nil, nil
})
marketState := createEmptyMarketState(t, store)
changed, _, err = diffDealBalancesFn(ctx, marketState, marketState)
require.NoError(t, err)
require.False(t, changed)
})
}
func TestMinerSectorChange(t *testing.T) {
ctx := context.Background()
bs := bstore.NewTemporarySync()
store := adt.WrapStore(ctx, cbornode.NewCborStore(bs))
nextID := uint64(0)
nextIDAddrF := func() address.Address {
defer func() { nextID++ }()
return tutils.NewIDAddr(t, nextID)
}
owner, worker := nextIDAddrF(), nextIDAddrF()
si0 := newSectorOnChainInfo(0, tutils.MakeCID("0", &miner.SealedCIDPrefix), big.NewInt(0), abi.ChainEpoch(0), abi.ChainEpoch(10))
si1 := newSectorOnChainInfo(1, tutils.MakeCID("1", &miner.SealedCIDPrefix), big.NewInt(1), abi.ChainEpoch(1), abi.ChainEpoch(11))
si2 := newSectorOnChainInfo(2, tutils.MakeCID("2", &miner.SealedCIDPrefix), big.NewInt(2), abi.ChainEpoch(2), abi.ChainEpoch(11))
oldMinerC := createMinerState(ctx, t, store, owner, worker, []miner.SectorOnChainInfo{si0, si1, si2})
si3 := newSectorOnChainInfo(3, tutils.MakeCID("3", &miner.SealedCIDPrefix), big.NewInt(3), abi.ChainEpoch(3), abi.ChainEpoch(12))
// 0 delete
// 1 extend
// 2 same
// 3 added
si1Ext := si1
si1Ext.Expiration++
newMinerC := createMinerState(ctx, t, store, owner, worker, []miner.SectorOnChainInfo{si1Ext, si2, si3})
minerAddr := nextIDAddrF()
oldState, err := mockTipset(minerAddr, 1)
require.NoError(t, err)
newState, err := mockTipset(minerAddr, 2)
require.NoError(t, err)
api := newMockAPI(bs)
api.setActor(oldState.Key(), &types.Actor{Head: oldMinerC})
api.setActor(newState.Key(), &types.Actor{Head: newMinerC})
preds := NewStatePredicates(api)
minerDiffFn := preds.OnMinerActorChange(minerAddr, preds.OnMinerSectorChange())
change, val, err := minerDiffFn(ctx, oldState.Key(), newState.Key())
require.NoError(t, err)
require.True(t, change)
require.NotNil(t, val)
sectorChanges, ok := val.(*MinerSectorChanges)
require.True(t, ok)
require.Equal(t, len(sectorChanges.Added), 1)
require.Equal(t, 1, len(sectorChanges.Added))
require.Equal(t, si3, sectorChanges.Added[0])
require.Equal(t, 1, len(sectorChanges.Removed))
require.Equal(t, si0, sectorChanges.Removed[0])
require.Equal(t, 1, len(sectorChanges.Extended))
require.Equal(t, si1, sectorChanges.Extended[0].From)
require.Equal(t, si1Ext, sectorChanges.Extended[0].To)
change, val, err = minerDiffFn(ctx, oldState.Key(), oldState.Key())
require.NoError(t, err)
require.False(t, change)
require.Nil(t, val)
change, val, err = minerDiffFn(ctx, newState.Key(), oldState.Key())
require.NoError(t, err)
require.True(t, change)
require.NotNil(t, val)
sectorChanges, ok = val.(*MinerSectorChanges)
require.True(t, ok)
require.Equal(t, 1, len(sectorChanges.Added))
require.Equal(t, si0, sectorChanges.Added[0])
require.Equal(t, 1, len(sectorChanges.Removed))
require.Equal(t, si3, sectorChanges.Removed[0])
require.Equal(t, 1, len(sectorChanges.Extended))
require.Equal(t, si1, sectorChanges.Extended[0].To)
require.Equal(t, si1Ext, sectorChanges.Extended[0].From)
}
func mockTipset(minerAddr address.Address, timestamp uint64) (*types.TipSet, error) {
return types.NewTipSet([]*types.BlockHeader{{
Miner: minerAddr,
Height: 5,
ParentStateRoot: dummyCid,
Messages: dummyCid,
ParentMessageReceipts: dummyCid,
BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS},
BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS},
Timestamp: timestamp,
}})
}
type balance struct {
available abi.TokenAmount
locked abi.TokenAmount
}
func createMarketState(ctx context.Context, t *testing.T, store adt.Store, deals map[abi.DealID]*market.DealState, props map[abi.DealID]*market.DealProposal, balances map[address.Address]balance) cid.Cid {
dealRootCid := createDealAMT(ctx, t, store, deals)
propRootCid := createProposalAMT(ctx, t, store, props)
balancesCids := createBalanceTable(ctx, t, store, balances)
state := createEmptyMarketState(t, store)
state.States = dealRootCid
state.Proposals = propRootCid
state.EscrowTable = balancesCids[0]
state.LockedTable = balancesCids[1]
stateC, err := store.Put(ctx, state)
require.NoError(t, err)
return stateC
}
func createEmptyMarketState(t *testing.T, store adt.Store) *market.State {
emptyArrayCid, err := adt.MakeEmptyArray(store).Root()
require.NoError(t, err)
emptyMap, err := adt.MakeEmptyMap(store).Root()
require.NoError(t, err)
return market.ConstructState(emptyArrayCid, emptyMap, emptyMap)
}
func createDealAMT(ctx context.Context, t *testing.T, store adt.Store, deals map[abi.DealID]*market.DealState) cid.Cid {
root := adt.MakeEmptyArray(store)
for dealID, dealState := range deals {
err := root.Set(uint64(dealID), dealState)
require.NoError(t, err)
}
rootCid, err := root.Root()
require.NoError(t, err)
return rootCid
}
func createProposalAMT(ctx context.Context, t *testing.T, store adt.Store, props map[abi.DealID]*market.DealProposal) cid.Cid {
root := adt.MakeEmptyArray(store)
for dealID, prop := range props {
err := root.Set(uint64(dealID), prop)
require.NoError(t, err)
}
rootCid, err := root.Root()
require.NoError(t, err)
return rootCid
}
func createBalanceTable(ctx context.Context, t *testing.T, store adt.Store, balances map[address.Address]balance) [2]cid.Cid {
escrowMapRoot := adt.MakeEmptyMap(store)
escrowMapRootCid, err := escrowMapRoot.Root()
require.NoError(t, err)
escrowRoot, err := adt.AsBalanceTable(store, escrowMapRootCid)
require.NoError(t, err)
lockedMapRoot := adt.MakeEmptyMap(store)
lockedMapRootCid, err := lockedMapRoot.Root()
require.NoError(t, err)
lockedRoot, err := adt.AsBalanceTable(store, lockedMapRootCid)
require.NoError(t, err)
for addr, balance := range balances {
err := escrowRoot.Add(addr, big.Add(balance.available, balance.locked))
require.NoError(t, err)
err = lockedRoot.Add(addr, balance.locked)
require.NoError(t, err)
}
escrowRootCid, err := escrowRoot.Root()
require.NoError(t, err)
lockedRootCid, err := lockedRoot.Root()
require.NoError(t, err)
return [2]cid.Cid{escrowRootCid, lockedRootCid}
}
func createMinerState(ctx context.Context, t *testing.T, store adt.Store, owner, worker address.Address, sectors []miner.SectorOnChainInfo) cid.Cid {
rootCid := createSectorsAMT(ctx, t, store, sectors)
state := createEmptyMinerState(ctx, t, store, owner, worker)
state.Sectors = rootCid
stateC, err := store.Put(ctx, state)
require.NoError(t, err)
return stateC
}
func createEmptyMinerState(ctx context.Context, t *testing.T, store adt.Store, owner, worker address.Address) *miner.State {
emptyArrayCid, err := adt.MakeEmptyArray(store).Root()
require.NoError(t, err)
emptyMap, err := adt.MakeEmptyMap(store).Root()
require.NoError(t, err)
emptyDeadline, err := store.Put(store.Context(), miner.ConstructDeadline(emptyArrayCid))
require.NoError(t, err)
emptyVestingFunds := miner.ConstructVestingFunds()
emptyVestingFundsCid, err := store.Put(store.Context(), emptyVestingFunds)
require.NoError(t, err)
emptyDeadlines := miner.ConstructDeadlines(emptyDeadline)
emptyDeadlinesCid, err := store.Put(store.Context(), emptyDeadlines)
require.NoError(t, err)
minerInfo := emptyMap
emptyBitfield := bitfield.NewFromSet(nil)
emptyBitfieldCid, err := store.Put(store.Context(), emptyBitfield)
require.NoError(t, err)
state, err := miner.ConstructState(minerInfo, 123, emptyBitfieldCid, emptyArrayCid, emptyMap, emptyDeadlinesCid, emptyVestingFundsCid)
require.NoError(t, err)
return state
}
func createSectorsAMT(ctx context.Context, t *testing.T, store adt.Store, sectors []miner.SectorOnChainInfo) cid.Cid {
root := adt.MakeEmptyArray(store)
for _, sector := range sectors {
sector := sector
err := root.Set(uint64(sector.SectorNumber), &sector)
require.NoError(t, err)
}
rootCid, err := root.Root()
require.NoError(t, err)
return rootCid
}
// returns a unique SectorOnChainInfo with each invocation with SectorNumber set to `sectorNo`.
func newSectorOnChainInfo(sectorNo abi.SectorNumber, sealed cid.Cid, weight big.Int, activation, expiration abi.ChainEpoch) miner.SectorOnChainInfo {
info := newSectorPreCommitInfo(sectorNo, sealed, expiration)
return miner.SectorOnChainInfo{
SectorNumber: info.SectorNumber,
SealProof: info.SealProof,
SealedCID: info.SealedCID,
DealIDs: info.DealIDs,
Expiration: info.Expiration,
Activation: activation,
DealWeight: weight,
VerifiedDealWeight: weight,
InitialPledge: big.Zero(),
ExpectedDayReward: big.Zero(),
ExpectedStoragePledge: big.Zero(),
}
}
const (
sectorSealRandEpochValue = abi.ChainEpoch(1)
)
// returns a unique SectorPreCommitInfo with each invocation with SectorNumber set to `sectorNo`.
func newSectorPreCommitInfo(sectorNo abi.SectorNumber, sealed cid.Cid, expiration abi.ChainEpoch) *miner.SectorPreCommitInfo {
return &miner.SectorPreCommitInfo{
SealProof: abi.RegisteredSealProof_StackedDrg32GiBV1,
SectorNumber: sectorNo,
SealedCID: sealed,
SealRandEpoch: sectorSealRandEpochValue,
DealIDs: nil,
Expiration: expiration,
}
}
+15 -8
View File
@@ -3,13 +3,16 @@ package events
import (
"context"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/types"
)
type tsByHFunc func(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)
type tsCacheAPI interface {
ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)
ChainHead(context.Context) (*types.TipSet, error)
}
// tipSetCache implements a simple ring-buffer cache to keep track of recent
// tipsets
@@ -18,10 +21,10 @@ type tipSetCache struct {
start int
len int
storage tsByHFunc
storage tsCacheAPI
}
func newTSCache(cap abi.ChainEpoch, storage tsByHFunc) *tipSetCache {
func newTSCache(cap abi.ChainEpoch, storage tsCacheAPI) *tipSetCache {
return &tipSetCache{
cache: make([]*types.TipSet, cap),
start: 0,
@@ -94,7 +97,7 @@ func (tsc *tipSetCache) getNonNull(height abi.ChainEpoch) (*types.TipSet, error)
func (tsc *tipSetCache) get(height abi.ChainEpoch) (*types.TipSet, error) {
if tsc.len == 0 {
log.Warnf("tipSetCache.get: cache is empty, requesting from storage (h=%d)", height)
return tsc.storage(context.TODO(), height, types.EmptyTSK)
return tsc.storage.ChainGetTipSetByHeight(context.TODO(), height, types.EmptyTSK)
}
headH := tsc.cache[tsc.start].Height()
@@ -114,14 +117,18 @@ func (tsc *tipSetCache) get(height abi.ChainEpoch) (*types.TipSet, error) {
if height < tail.Height() {
log.Warnf("tipSetCache.get: requested tipset not in cache, requesting from storage (h=%d; tail=%d)", height, tail.Height())
return tsc.storage(context.TODO(), height, tail.Key())
return tsc.storage.ChainGetTipSetByHeight(context.TODO(), height, tail.Key())
}
return tsc.cache[normalModulo(tsc.start-int(headH-height), clen)], nil
}
func (tsc *tipSetCache) best() *types.TipSet {
return tsc.cache[tsc.start]
func (tsc *tipSetCache) best() (*types.TipSet, error) {
best := tsc.cache[tsc.start]
if best == nil {
return tsc.storage.ChainHead(context.TODO())
}
return best, nil
}
func normalModulo(n, m int) int {
+61 -15
View File
@@ -4,8 +4,8 @@ import (
"context"
"testing"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/stretchr/testify/require"
"github.com/filecoin-project/go-address"
@@ -13,10 +13,7 @@ import (
)
func TestTsCache(t *testing.T) {
tsc := newTSCache(50, func(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) {
t.Fatal("storage call")
return &types.TipSet{}, nil
})
tsc := newTSCache(50, &tsCacheAPIFailOnStorageCall{t: t})
h := abi.ChainEpoch(75)
@@ -43,7 +40,12 @@ func TestTsCache(t *testing.T) {
for i := 0; i < 9000; i++ {
if i%90 > 60 {
if err := tsc.revert(tsc.best()); err != nil {
best, err := tsc.best()
if err != nil {
t.Fatal(err, "; i:", i)
return
}
if err := tsc.revert(best); err != nil {
t.Fatal(err, "; i:", i)
return
}
@@ -55,11 +57,21 @@ func TestTsCache(t *testing.T) {
}
type tsCacheAPIFailOnStorageCall struct {
t *testing.T
}
func (tc *tsCacheAPIFailOnStorageCall) ChainGetTipSetByHeight(ctx context.Context, epoch abi.ChainEpoch, key types.TipSetKey) (*types.TipSet, error) {
tc.t.Fatal("storage call")
return &types.TipSet{}, nil
}
func (tc *tsCacheAPIFailOnStorageCall) ChainHead(ctx context.Context) (*types.TipSet, error) {
tc.t.Fatal("storage call")
return &types.TipSet{}, nil
}
func TestTsCacheNulls(t *testing.T) {
tsc := newTSCache(50, func(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) {
t.Fatal("storage call")
return &types.TipSet{}, nil
})
tsc := newTSCache(50, &tsCacheAPIFailOnStorageCall{t: t})
h := abi.ChainEpoch(75)
@@ -91,7 +103,9 @@ func TestTsCacheNulls(t *testing.T) {
add()
add()
require.Equal(t, h-1, tsc.best().Height())
best, err := tsc.best()
require.NoError(t, err)
require.Equal(t, h-1, best.Height())
ts, err := tsc.get(h - 1)
require.NoError(t, err)
@@ -109,9 +123,17 @@ func TestTsCacheNulls(t *testing.T) {
require.NoError(t, err)
require.Equal(t, h-8, ts.Height())
require.NoError(t, tsc.revert(tsc.best()))
require.NoError(t, tsc.revert(tsc.best()))
require.Equal(t, h-8, tsc.best().Height())
best, err = tsc.best()
require.NoError(t, err)
require.NoError(t, tsc.revert(best))
best, err = tsc.best()
require.NoError(t, err)
require.NoError(t, tsc.revert(best))
best, err = tsc.best()
require.NoError(t, err)
require.Equal(t, h-8, best.Height())
h += 50
add()
@@ -120,3 +142,27 @@ func TestTsCacheNulls(t *testing.T) {
require.NoError(t, err)
require.Equal(t, h-1, ts.Height())
}
type tsCacheAPIStorageCallCounter struct {
t *testing.T
chainGetTipSetByHeight int
chainHead int
}
func (tc *tsCacheAPIStorageCallCounter) ChainGetTipSetByHeight(ctx context.Context, epoch abi.ChainEpoch, key types.TipSetKey) (*types.TipSet, error) {
tc.chainGetTipSetByHeight++
return &types.TipSet{}, nil
}
func (tc *tsCacheAPIStorageCallCounter) ChainHead(ctx context.Context) (*types.TipSet, error) {
tc.chainHead++
return &types.TipSet{}, nil
}
func TestTsCacheEmpty(t *testing.T) {
// Calling best on an empty cache should just call out to the chain API
callCounter := &tsCacheAPIStorageCallCounter{t: t}
tsc := newTSCache(50, callCounter)
_, err := tsc.best()
require.NoError(t, err)
require.Equal(t, 1, callCounter.chainHead)
}
+7 -7
View File
@@ -8,11 +8,11 @@ import (
"github.com/filecoin-project/lotus/chain/types"
)
func (e *calledEvents) CheckMsg(ctx context.Context, smsg types.ChainMsg, hnd CalledHandler) CheckFunc {
func (me *messageEvents) CheckMsg(ctx context.Context, smsg types.ChainMsg, hnd MsgHandler) CheckFunc {
msg := smsg.VMMessage()
return func(ts *types.TipSet) (done bool, more bool, err error) {
fa, err := e.cs.StateGetActor(ctx, msg.From, ts.Key())
fa, err := me.cs.StateGetActor(ctx, msg.From, ts.Key())
if err != nil {
return false, true, err
}
@@ -22,7 +22,7 @@ func (e *calledEvents) CheckMsg(ctx context.Context, smsg types.ChainMsg, hnd Ca
return false, true, nil
}
rec, err := e.cs.StateGetReceipt(ctx, smsg.VMMessage().Cid(), ts.Key())
rec, err := me.cs.StateGetReceipt(ctx, smsg.VMMessage().Cid(), ts.Key())
if err != nil {
return false, true, xerrors.Errorf("getting receipt in CheckMsg: %w", err)
}
@@ -33,12 +33,12 @@ func (e *calledEvents) CheckMsg(ctx context.Context, smsg types.ChainMsg, hnd Ca
}
}
func (e *calledEvents) MatchMsg(inmsg *types.Message) MatchFunc {
return func(msg *types.Message) (bool, error) {
func (me *messageEvents) MatchMsg(inmsg *types.Message) MsgMatchFunc {
return func(msg *types.Message) (matchOnce bool, matched bool, err error) {
if msg.From == inmsg.From && msg.Nonce == inmsg.Nonce && !inmsg.Equals(msg) {
return false, xerrors.Errorf("matching msg %s from %s, nonce %d: got duplicate origin/nonce msg %s", inmsg.Cid(), inmsg.From, inmsg.Nonce, msg.Nonce)
return true, false, xerrors.Errorf("matching msg %s from %s, nonce %d: got duplicate origin/nonce msg %d", inmsg.Cid(), inmsg.From, inmsg.Nonce, msg.Nonce)
}
return inmsg.Equals(msg), nil
return true, inmsg.Equals(msg), nil
}
}
@@ -1,49 +1,49 @@
// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
package blocksync
package exchange
import (
"fmt"
"io"
"github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid"
types "github.com/filecoin-project/lotus/chain/types"
cid "github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen"
xerrors "golang.org/x/xerrors"
)
var _ = xerrors.Errorf
var lengthBufBlockSyncRequest = []byte{131}
var lengthBufRequest = []byte{131}
func (t *BlockSyncRequest) MarshalCBOR(w io.Writer) error {
func (t *Request) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write(lengthBufBlockSyncRequest); err != nil {
if _, err := w.Write(lengthBufRequest); err != nil {
return err
}
scratch := make([]byte, 9)
// t.Start ([]cid.Cid) (slice)
if len(t.Start) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Start was too long")
// t.Head ([]cid.Cid) (slice)
if len(t.Head) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Head was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Start))); err != nil {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Head))); err != nil {
return err
}
for _, v := range t.Start {
for _, v := range t.Head {
if err := cbg.WriteCidBuf(scratch, w, v); err != nil {
return xerrors.Errorf("failed writing cid field t.Start: %w", err)
return xerrors.Errorf("failed writing cid field t.Head: %w", err)
}
}
// t.RequestLength (uint64) (uint64)
// t.Length (uint64) (uint64)
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.RequestLength)); err != nil {
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Length)); err != nil {
return err
}
@@ -56,7 +56,9 @@ func (t *BlockSyncRequest) MarshalCBOR(w io.Writer) error {
return nil
}
func (t *BlockSyncRequest) UnmarshalCBOR(r io.Reader) error {
func (t *Request) UnmarshalCBOR(r io.Reader) error {
*t = Request{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -72,7 +74,7 @@ func (t *BlockSyncRequest) UnmarshalCBOR(r io.Reader) error {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.Start ([]cid.Cid) (slice)
// t.Head ([]cid.Cid) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
@@ -80,7 +82,7 @@ func (t *BlockSyncRequest) UnmarshalCBOR(r io.Reader) error {
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.Start: array too large (%d)", extra)
return fmt.Errorf("t.Head: array too large (%d)", extra)
}
if maj != cbg.MajArray {
@@ -88,19 +90,19 @@ func (t *BlockSyncRequest) UnmarshalCBOR(r io.Reader) error {
}
if extra > 0 {
t.Start = make([]cid.Cid, extra)
t.Head = make([]cid.Cid, extra)
}
for i := 0; i < int(extra); i++ {
c, err := cbg.ReadCid(br)
if err != nil {
return xerrors.Errorf("reading cid field t.Start failed: %w", err)
return xerrors.Errorf("reading cid field t.Head failed: %w", err)
}
t.Start[i] = c
t.Head[i] = c
}
// t.RequestLength (uint64) (uint64)
// t.Length (uint64) (uint64)
{
@@ -111,7 +113,7 @@ func (t *BlockSyncRequest) UnmarshalCBOR(r io.Reader) error {
if maj != cbg.MajUnsignedInt {
return fmt.Errorf("wrong type for uint64 field")
}
t.RequestLength = uint64(extra)
t.Length = uint64(extra)
}
// t.Options (uint64) (uint64)
@@ -131,19 +133,37 @@ func (t *BlockSyncRequest) UnmarshalCBOR(r io.Reader) error {
return nil
}
var lengthBufBlockSyncResponse = []byte{131}
var lengthBufResponse = []byte{131}
func (t *BlockSyncResponse) MarshalCBOR(w io.Writer) error {
func (t *Response) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write(lengthBufBlockSyncResponse); err != nil {
if _, err := w.Write(lengthBufResponse); err != nil {
return err
}
scratch := make([]byte, 9)
// t.Status (blocksync.status) (uint64)
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Status)); err != nil {
return err
}
// t.ErrorMessage (string) (string)
if len(t.ErrorMessage) > cbg.MaxLength {
return xerrors.Errorf("Value in field t.ErrorMessage was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.ErrorMessage))); err != nil {
return err
}
if _, err := io.WriteString(w, string(t.ErrorMessage)); err != nil {
return err
}
// t.Chain ([]*blocksync.BSTipSet) (slice)
if len(t.Chain) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Chain was too long")
@@ -157,28 +177,12 @@ func (t *BlockSyncResponse) MarshalCBOR(w io.Writer) error {
return err
}
}
// t.Status (uint64) (uint64)
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Status)); err != nil {
return err
}
// t.Message (string) (string)
if len(t.Message) > cbg.MaxLength {
return xerrors.Errorf("Value in field t.Message was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.Message))); err != nil {
return err
}
if _, err := io.WriteString(w, t.Message); err != nil {
return err
}
return nil
}
func (t *BlockSyncResponse) UnmarshalCBOR(r io.Reader) error {
func (t *Response) UnmarshalCBOR(r io.Reader) error {
*t = Response{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -194,6 +198,30 @@ func (t *BlockSyncResponse) UnmarshalCBOR(r io.Reader) error {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.Status (blocksync.status) (uint64)
{
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if maj != cbg.MajUnsignedInt {
return fmt.Errorf("wrong type for uint64 field")
}
t.Status = status(extra)
}
// t.ErrorMessage (string) (string)
{
sval, err := cbg.ReadStringBuf(br, scratch)
if err != nil {
return err
}
t.ErrorMessage = string(sval)
}
// t.Chain ([]*blocksync.BSTipSet) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
@@ -223,34 +251,296 @@ func (t *BlockSyncResponse) UnmarshalCBOR(r io.Reader) error {
t.Chain[i] = &v
}
// t.Status (uint64) (uint64)
return nil
}
{
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if maj != cbg.MajUnsignedInt {
return fmt.Errorf("wrong type for uint64 field")
}
t.Status = uint64(extra)
var lengthBufCompactedMessages = []byte{132}
func (t *CompactedMessages) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write(lengthBufCompactedMessages); err != nil {
return err
}
// t.Message (string) (string)
{
sval, err := cbg.ReadStringBuf(br, scratch)
if err != nil {
scratch := make([]byte, 9)
// t.Bls ([]*types.Message) (slice)
if len(t.Bls) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Bls was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Bls))); err != nil {
return err
}
for _, v := range t.Bls {
if err := v.MarshalCBOR(w); err != nil {
return err
}
}
t.Message = string(sval)
// t.BlsIncludes ([][]uint64) (slice)
if len(t.BlsIncludes) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.BlsIncludes was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsIncludes))); err != nil {
return err
}
for _, v := range t.BlsIncludes {
if len(v) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field v was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil {
return err
}
for _, v := range v {
if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil {
return err
}
}
}
// t.Secpk ([]*types.SignedMessage) (slice)
if len(t.Secpk) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Secpk was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Secpk))); err != nil {
return err
}
for _, v := range t.Secpk {
if err := v.MarshalCBOR(w); err != nil {
return err
}
}
// t.SecpkIncludes ([][]uint64) (slice)
if len(t.SecpkIncludes) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.SecpkIncludes was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkIncludes))); err != nil {
return err
}
for _, v := range t.SecpkIncludes {
if len(v) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field v was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil {
return err
}
for _, v := range v {
if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil {
return err
}
}
}
return nil
}
var lengthBufBSTipSet = []byte{133}
func (t *CompactedMessages) UnmarshalCBOR(r io.Reader) error {
*t = CompactedMessages{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
maj, extra, err := cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if maj != cbg.MajArray {
return fmt.Errorf("cbor input should be of type array")
}
if extra != 4 {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.Bls ([]*types.Message) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.Bls: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.Bls = make([]*types.Message, extra)
}
for i := 0; i < int(extra); i++ {
var v types.Message
if err := v.UnmarshalCBOR(br); err != nil {
return err
}
t.Bls[i] = &v
}
// t.BlsIncludes ([][]uint64) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.BlsIncludes: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.BlsIncludes = make([][]uint64, extra)
}
for i := 0; i < int(extra); i++ {
{
var maj byte
var extra uint64
var err error
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.BlsIncludes[i]: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.BlsIncludes[i] = make([]uint64, extra)
}
for j := 0; j < int(extra); j++ {
maj, val, err := cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return xerrors.Errorf("failed to read uint64 for t.BlsIncludes[i] slice: %w", err)
}
if maj != cbg.MajUnsignedInt {
return xerrors.Errorf("value read for array t.BlsIncludes[i] was not a uint, instead got %d", maj)
}
t.BlsIncludes[i][j] = uint64(val)
}
}
}
// t.Secpk ([]*types.SignedMessage) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.Secpk: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.Secpk = make([]*types.SignedMessage, extra)
}
for i := 0; i < int(extra); i++ {
var v types.SignedMessage
if err := v.UnmarshalCBOR(br); err != nil {
return err
}
t.Secpk[i] = &v
}
// t.SecpkIncludes ([][]uint64) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.SecpkIncludes: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.SecpkIncludes = make([][]uint64, extra)
}
for i := 0; i < int(extra); i++ {
{
var maj byte
var extra uint64
var err error
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.SecpkIncludes[i]: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.SecpkIncludes[i] = make([]uint64, extra)
}
for j := 0; j < int(extra); j++ {
maj, val, err := cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return xerrors.Errorf("failed to read uint64 for t.SecpkIncludes[i] slice: %w", err)
}
if maj != cbg.MajUnsignedInt {
return xerrors.Errorf("value read for array t.SecpkIncludes[i] was not a uint, instead got %d", maj)
}
t.SecpkIncludes[i][j] = uint64(val)
}
}
}
return nil
}
var lengthBufBSTipSet = []byte{130}
func (t *BSTipSet) MarshalCBOR(w io.Writer) error {
if t == nil {
@@ -277,83 +567,16 @@ func (t *BSTipSet) MarshalCBOR(w io.Writer) error {
}
}
// t.BlsMessages ([]*types.Message) (slice)
if len(t.BlsMessages) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.BlsMessages was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsMessages))); err != nil {
// t.Messages (blocksync.CompactedMessages) (struct)
if err := t.Messages.MarshalCBOR(w); err != nil {
return err
}
for _, v := range t.BlsMessages {
if err := v.MarshalCBOR(w); err != nil {
return err
}
}
// t.BlsMsgIncludes ([][]uint64) (slice)
if len(t.BlsMsgIncludes) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.BlsMsgIncludes was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsMsgIncludes))); err != nil {
return err
}
for _, v := range t.BlsMsgIncludes {
if len(v) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field v was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil {
return err
}
for _, v := range v {
if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil {
return err
}
}
}
// t.SecpkMessages ([]*types.SignedMessage) (slice)
if len(t.SecpkMessages) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.SecpkMessages was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkMessages))); err != nil {
return err
}
for _, v := range t.SecpkMessages {
if err := v.MarshalCBOR(w); err != nil {
return err
}
}
// t.SecpkMsgIncludes ([][]uint64) (slice)
if len(t.SecpkMsgIncludes) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.SecpkMsgIncludes was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkMsgIncludes))); err != nil {
return err
}
for _, v := range t.SecpkMsgIncludes {
if len(v) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field v was too long")
}
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil {
return err
}
for _, v := range v {
if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil {
return err
}
}
}
return nil
}
func (t *BSTipSet) UnmarshalCBOR(r io.Reader) error {
*t = BSTipSet{}
br := cbg.GetPeeker(r)
scratch := make([]byte, 8)
@@ -365,7 +588,7 @@ func (t *BSTipSet) UnmarshalCBOR(r io.Reader) error {
return fmt.Errorf("cbor input should be of type array")
}
if extra != 5 {
if extra != 2 {
return fmt.Errorf("cbor input had wrong number of fields")
}
@@ -398,181 +621,24 @@ func (t *BSTipSet) UnmarshalCBOR(r io.Reader) error {
t.Blocks[i] = &v
}
// t.BlsMessages ([]*types.Message) (slice)
// t.Messages (blocksync.CompactedMessages) (struct)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
{
if extra > cbg.MaxLength {
return fmt.Errorf("t.BlsMessages: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.BlsMessages = make([]*types.Message, extra)
}
for i := 0; i < int(extra); i++ {
var v types.Message
if err := v.UnmarshalCBOR(br); err != nil {
b, err := br.ReadByte()
if err != nil {
return err
}
t.BlsMessages[i] = &v
}
// t.BlsMsgIncludes ([][]uint64) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.BlsMsgIncludes: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.BlsMsgIncludes = make([][]uint64, extra)
}
for i := 0; i < int(extra); i++ {
{
var maj byte
var extra uint64
var err error
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
if b != cbg.CborNull[0] {
if err := br.UnreadByte(); err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.BlsMsgIncludes[i]: array too large (%d)", extra)
t.Messages = new(CompactedMessages)
if err := t.Messages.UnmarshalCBOR(br); err != nil {
return xerrors.Errorf("unmarshaling t.Messages pointer: %w", err)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.BlsMsgIncludes[i] = make([]uint64, extra)
}
for j := 0; j < int(extra); j++ {
maj, val, err := cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return xerrors.Errorf("failed to read uint64 for t.BlsMsgIncludes[i] slice: %w", err)
}
if maj != cbg.MajUnsignedInt {
return xerrors.Errorf("value read for array t.BlsMsgIncludes[i] was not a uint, instead got %d", maj)
}
t.BlsMsgIncludes[i][j] = uint64(val)
}
}
}
// t.SecpkMessages ([]*types.SignedMessage) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.SecpkMessages: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.SecpkMessages = make([]*types.SignedMessage, extra)
}
for i := 0; i < int(extra); i++ {
var v types.SignedMessage
if err := v.UnmarshalCBOR(br); err != nil {
return err
}
t.SecpkMessages[i] = &v
}
// t.SecpkMsgIncludes ([][]uint64) (slice)
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.SecpkMsgIncludes: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.SecpkMsgIncludes = make([][]uint64, extra)
}
for i := 0; i < int(extra); i++ {
{
var maj byte
var extra uint64
var err error
maj, extra, err = cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.SecpkMsgIncludes[i]: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.SecpkMsgIncludes[i] = make([]uint64, extra)
}
for j := 0; j < int(extra); j++ {
maj, val, err := cbg.CborReadHeaderBuf(br, scratch)
if err != nil {
return xerrors.Errorf("failed to read uint64 for t.SecpkMsgIncludes[i] slice: %w", err)
}
if maj != cbg.MajUnsignedInt {
return xerrors.Errorf("value read for array t.SecpkMsgIncludes[i] was not a uint, instead got %d", maj)
}
t.SecpkMsgIncludes[i][j] = uint64(val)
}
}
}
return nil
}
+430
View File
@@ -0,0 +1,430 @@
package exchange
import (
"bufio"
"context"
"fmt"
"math/rand"
"time"
"github.com/libp2p/go-libp2p-core/host"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
"go.opencensus.io/trace"
"go.uber.org/fx"
"golang.org/x/xerrors"
cborutil "github.com/filecoin-project/go-cbor-util"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
incrt "github.com/filecoin-project/lotus/lib/increadtimeout"
"github.com/filecoin-project/lotus/lib/peermgr"
)
// client implements exchange.Client, using the libp2p ChainExchange protocol
// as the fetching mechanism.
type client struct {
// Connection manager used to contact the server.
// FIXME: We should have a reduced interface here, initialized
// just with our protocol ID, we shouldn't be able to open *any*
// connection.
host host.Host
peerTracker *bsPeerTracker
}
var _ Client = (*client)(nil)
// NewClient creates a new libp2p-based exchange.Client that uses the libp2p
// ChainExhange protocol as the fetching mechanism.
func NewClient(lc fx.Lifecycle, host host.Host, pmgr peermgr.MaybePeerMgr) Client {
return &client{
host: host,
peerTracker: newPeerTracker(lc, host, pmgr.Mgr),
}
}
// Main logic of the client request service. The provided `Request`
// is sent to the `singlePeer` if one is indicated or to all available
// ones otherwise. The response is processed and validated according
// to the `Request` options. Either a `validatedResponse` is returned
// (which can be safely accessed), or an `error` that may represent
// either a response error status, a failed validation or an internal
// error.
//
// This is the internal single point of entry for all external-facing
// APIs, currently we have 3 very heterogeneous services exposed:
// * GetBlocks: Headers
// * GetFullTipSet: Headers | Messages
// * GetChainMessages: Messages
// This function handles all the different combinations of the available
// request options without disrupting external calls. In the future the
// consumers should be forced to use a more standardized service and
// adhere to a single API derived from this function.
func (c *client) doRequest(ctx context.Context, req *Request, singlePeer *peer.ID) (*validatedResponse, error) {
// Validate request.
if req.Length == 0 {
return nil, xerrors.Errorf("invalid request of length 0")
}
if req.Length > MaxRequestLength {
return nil, xerrors.Errorf("request length (%d) above maximum (%d)",
req.Length, MaxRequestLength)
}
if req.Options == 0 {
return nil, xerrors.Errorf("request with no options set")
}
// Generate the list of peers to be queried, either the
// `singlePeer` indicated or all peers available (sorted
// by an internal peer tracker with some randomness injected).
var peers []peer.ID
if singlePeer != nil {
peers = []peer.ID{*singlePeer}
} else {
peers = c.getShuffledPeers()
if len(peers) == 0 {
return nil, xerrors.Errorf("no peers available")
}
}
// Try the request for each peer in the list,
// return on the first successful response.
// FIXME: Doing this serially isn't great, but fetching in parallel
// may not be a good idea either. Think about this more.
globalTime := build.Clock.Now()
// Global time used to track what is the expected time we will need to get
// a response if a client fails us.
for _, peer := range peers {
select {
case <-ctx.Done():
return nil, xerrors.Errorf("context cancelled: %w", ctx.Err())
default:
}
// Send request, read response.
res, err := c.sendRequestToPeer(ctx, peer, req)
if err != nil {
if !xerrors.Is(err, network.ErrNoConn) {
log.Warnf("could not connect to peer %s: %s",
peer.String(), err)
}
continue
}
// Process and validate response.
validRes, err := c.processResponse(req, res)
if err != nil {
log.Warnf("processing peer %s response failed: %s",
peer.String(), err)
continue
}
c.peerTracker.logGlobalSuccess(build.Clock.Since(globalTime))
c.host.ConnManager().TagPeer(peer, "bsync", SuccessPeerTagValue)
return validRes, nil
}
errString := "doRequest failed for all peers"
if singlePeer != nil {
errString = fmt.Sprintf("doRequest failed for single peer %s", *singlePeer)
}
return nil, xerrors.Errorf(errString)
}
// Process and validate response. Check the status, the integrity of the
// information returned, and that it matches the request. Extract the information
// into a `validatedResponse` for the external-facing APIs to select what they
// need.
//
// We are conflating in the single error returned both status and validation
// errors. Peer penalization should happen here then, before returning, so
// we can apply the correct penalties depending on the cause of the error.
// FIXME: Add the `peer` as argument once we implement penalties.
func (c *client) processResponse(req *Request, res *Response) (*validatedResponse, error) {
err := res.statusToError()
if err != nil {
return nil, xerrors.Errorf("status error: %s", err)
}
options := parseOptions(req.Options)
if options.noOptionsSet() {
// Safety check: this shouldn't have been sent, and even if it did
// it should have been caught by the peer in its error status.
return nil, xerrors.Errorf("nothing was requested")
}
// Verify that the chain segment returned is in the valid range.
// Note that the returned length might be less than requested.
resLength := len(res.Chain)
if resLength == 0 {
return nil, xerrors.Errorf("got no chain in successful response")
}
if resLength > int(req.Length) {
return nil, xerrors.Errorf("got longer response (%d) than requested (%d)",
resLength, req.Length)
}
if resLength < int(req.Length) && res.Status != Partial {
return nil, xerrors.Errorf("got less than requested without a proper status: %d", res.Status)
}
validRes := &validatedResponse{}
if options.IncludeHeaders {
// Check for valid block sets and extract them into `TipSet`s.
validRes.tipsets = make([]*types.TipSet, resLength)
for i := 0; i < resLength; i++ {
validRes.tipsets[i], err = types.NewTipSet(res.Chain[i].Blocks)
if err != nil {
return nil, xerrors.Errorf("invalid tipset blocks at height (head - %d): %w", i, err)
}
}
// Check that the returned head matches the one requested.
if !types.CidArrsEqual(validRes.tipsets[0].Cids(), req.Head) {
return nil, xerrors.Errorf("returned chain head does not match request")
}
// Check `TipSet`s are connected (valid chain).
for i := 0; i < len(validRes.tipsets)-1; i++ {
if validRes.tipsets[i].IsChildOf(validRes.tipsets[i+1]) == false {
return nil, fmt.Errorf("tipsets are not connected at height (head - %d)/(head - %d)",
i, i+1)
// FIXME: Maybe give more information here, like CIDs.
}
}
}
if options.IncludeMessages {
validRes.messages = make([]*CompactedMessages, resLength)
for i := 0; i < resLength; i++ {
if res.Chain[i].Messages == nil {
return nil, xerrors.Errorf("no messages included for tipset at height (head - %d)", i)
}
validRes.messages[i] = res.Chain[i].Messages
}
if options.IncludeHeaders {
// If the headers were also returned check that the compression
// indexes are valid before `toFullTipSets()` is called by the
// consumer.
for tipsetIdx := 0; tipsetIdx < resLength; tipsetIdx++ {
msgs := res.Chain[tipsetIdx].Messages
blocksNum := len(res.Chain[tipsetIdx].Blocks)
if len(msgs.BlsIncludes) != blocksNum {
return nil, xerrors.Errorf("BlsIncludes (%d) does not match number of blocks (%d)",
len(msgs.BlsIncludes), blocksNum)
}
if len(msgs.SecpkIncludes) != blocksNum {
return nil, xerrors.Errorf("SecpkIncludes (%d) does not match number of blocks (%d)",
len(msgs.SecpkIncludes), blocksNum)
}
for blockIdx := 0; blockIdx < blocksNum; blockIdx++ {
for _, mi := range msgs.BlsIncludes[blockIdx] {
if int(mi) >= len(msgs.Bls) {
return nil, xerrors.Errorf("index in BlsIncludes (%d) exceeds number of messages (%d)",
mi, len(msgs.Bls))
}
}
for _, mi := range msgs.SecpkIncludes[blockIdx] {
if int(mi) >= len(msgs.Secpk) {
return nil, xerrors.Errorf("index in SecpkIncludes (%d) exceeds number of messages (%d)",
mi, len(msgs.Secpk))
}
}
}
}
}
}
return validRes, nil
}
// GetBlocks implements Client.GetBlocks(). Refer to the godocs there.
func (c *client) GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) {
ctx, span := trace.StartSpan(ctx, "bsync.GetBlocks")
defer span.End()
if span.IsRecordingEvents() {
span.AddAttributes(
trace.StringAttribute("tipset", fmt.Sprint(tsk.Cids())),
trace.Int64Attribute("count", int64(count)),
)
}
req := &Request{
Head: tsk.Cids(),
Length: uint64(count),
Options: Headers,
}
validRes, err := c.doRequest(ctx, req, nil)
if err != nil {
return nil, err
}
return validRes.tipsets, nil
}
// GetFullTipSet implements Client.GetFullTipSet(). Refer to the godocs there.
func (c *client) GetFullTipSet(ctx context.Context, peer peer.ID, tsk types.TipSetKey) (*store.FullTipSet, error) {
// TODO: round robin through these peers on error
req := &Request{
Head: tsk.Cids(),
Length: 1,
Options: Headers | Messages,
}
validRes, err := c.doRequest(ctx, req, &peer)
if err != nil {
return nil, err
}
return validRes.toFullTipSets()[0], nil
// If `doRequest` didn't fail we are guaranteed to have at least
// *one* tipset here, so it's safe to index directly.
}
// GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there.
func (c *client) GetChainMessages(ctx context.Context, head *types.TipSet, length uint64) ([]*CompactedMessages, error) {
ctx, span := trace.StartSpan(ctx, "GetChainMessages")
if span.IsRecordingEvents() {
span.AddAttributes(
trace.StringAttribute("tipset", fmt.Sprint(head.Cids())),
trace.Int64Attribute("count", int64(length)),
)
}
defer span.End()
req := &Request{
Head: head.Cids(),
Length: length,
Options: Messages,
}
validRes, err := c.doRequest(ctx, req, nil)
if err != nil {
return nil, err
}
return validRes.messages, nil
}
// Send a request to a peer. Write request in the stream and read the
// response back. We do not do any processing of the request/response
// here.
func (c *client) sendRequestToPeer(ctx context.Context, peer peer.ID, req *Request) (_ *Response, err error) {
// Trace code.
ctx, span := trace.StartSpan(ctx, "sendRequestToPeer")
defer span.End()
if span.IsRecordingEvents() {
span.AddAttributes(
trace.StringAttribute("peer", peer.Pretty()),
)
}
defer func() {
if err != nil {
if span.IsRecordingEvents() {
span.SetStatus(trace.Status{
Code: 5,
Message: err.Error(),
})
}
}
}()
// -- TRACE --
supported, err := c.host.Peerstore().SupportsProtocols(peer, BlockSyncProtocolID, ChainExchangeProtocolID)
if err != nil {
c.RemovePeer(peer)
return nil, xerrors.Errorf("failed to get protocols for peer: %w", err)
}
if len(supported) == 0 || (supported[0] != BlockSyncProtocolID && supported[0] != ChainExchangeProtocolID) {
return nil, xerrors.Errorf("peer %s does not support protocols %s",
peer, []string{BlockSyncProtocolID, ChainExchangeProtocolID})
}
connectionStart := build.Clock.Now()
// Open stream to peer.
stream, err := c.host.NewStream(
network.WithNoDial(ctx, "should already have connection"),
peer,
ChainExchangeProtocolID, BlockSyncProtocolID)
if err != nil {
c.RemovePeer(peer)
return nil, xerrors.Errorf("failed to open stream to peer: %w", err)
}
// Write request.
_ = stream.SetWriteDeadline(time.Now().Add(WriteReqDeadline))
if err := cborutil.WriteCborRPC(stream, req); err != nil {
_ = stream.SetWriteDeadline(time.Time{})
c.peerTracker.logFailure(peer, build.Clock.Since(connectionStart), req.Length)
// FIXME: Should we also remove peer here?
return nil, err
}
_ = stream.SetWriteDeadline(time.Time{}) // clear deadline // FIXME: Needs
// its own API (https://github.com/libp2p/go-libp2p-core/issues/162).
// Read response.
var res Response
err = cborutil.ReadCborRPC(
bufio.NewReader(incrt.New(stream, ReadResMinSpeed, ReadResDeadline)),
&res)
if err != nil {
c.peerTracker.logFailure(peer, build.Clock.Since(connectionStart), req.Length)
return nil, xerrors.Errorf("failed to read chainxchg response: %w", err)
}
// FIXME: Move all this together at the top using a defer as done elsewhere.
// Maybe we need to declare `res` in the signature.
if span.IsRecordingEvents() {
span.AddAttributes(
trace.Int64Attribute("resp_status", int64(res.Status)),
trace.StringAttribute("msg", res.ErrorMessage),
trace.Int64Attribute("chain_len", int64(len(res.Chain))),
)
}
c.peerTracker.logSuccess(peer, build.Clock.Since(connectionStart), uint64(len(res.Chain)))
// FIXME: We should really log a success only after we validate the response.
// It might be a bit hard to do.
return &res, nil
}
// AddPeer implements Client.AddPeer(). Refer to the godocs there.
func (c *client) AddPeer(p peer.ID) {
c.peerTracker.addPeer(p)
}
// RemovePeer implements Client.RemovePeer(). Refer to the godocs there.
func (c *client) RemovePeer(p peer.ID) {
c.peerTracker.removePeer(p)
}
// getShuffledPeers returns a preference-sorted set of peers (by latency
// and failure counting), shuffling the first few peers so we don't always
// pick the same peer.
// FIXME: Consider merging with `shufflePrefix()s`.
func (c *client) getShuffledPeers() []peer.ID {
peers := c.peerTracker.prefSortedPeers()
shufflePrefix(peers)
return peers
}
func shufflePrefix(peers []peer.ID) {
prefix := ShufflePeersPrefix
if len(peers) < prefix {
prefix = len(peers)
}
buf := make([]peer.ID, prefix)
perm := rand.Perm(prefix)
for i, v := range perm {
buf[i] = peers[v]
}
copy(peers, buf)
}
+19
View File
@@ -0,0 +1,19 @@
// Package exchange contains the ChainExchange server and client components.
//
// ChainExchange is the basic chain synchronization protocol of Filecoin.
// ChainExchange is an RPC-oriented protocol, with a single operation to
// request blocks for now.
//
// A request contains a start anchor block (referred to with a CID), and a
// amount of blocks requested beyond the anchor (including the anchor itself).
//
// A client can also pass options, encoded as a 64-bit bitfield. Lotus supports
// two options at the moment:
//
// - include block contents
// - include block messages
//
// The response will include a status code, an optional message, and the
// response payload in case of success. The payload is a slice of serialized
// tipsets.
package exchange
+51
View File
@@ -0,0 +1,51 @@
package exchange
import (
"context"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
)
// Server is the responder side of the ChainExchange protocol. It accepts
// requests from clients and services them by returning the requested
// chain data.
type Server interface {
// HandleStream is the protocol handler to be registered on a libp2p
// protocol router.
//
// In the current version of the protocol, streams are single-use. The
// server will read a single Request, and will respond with a single
// Response. It will dispose of the stream straight after.
HandleStream(stream network.Stream)
}
// Client is the requesting side of the ChainExchange protocol. It acts as
// a proxy for other components to request chain data from peers. It is chiefly
// used by the Syncer.
type Client interface {
// GetBlocks fetches block headers from the network, from the provided
// tipset *backwards*, returning as many tipsets as the count parameter,
// or less.
GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error)
// GetChainMessages fetches messages from the network, from the provided
// tipset *backwards*, returning the messages from as many tipsets as the
// count parameter, or less.
GetChainMessages(ctx context.Context, head *types.TipSet, length uint64) ([]*CompactedMessages, error)
// GetFullTipSet fetches a full tipset from a given peer. If successful,
// the fetched object contains block headers and all messages in full form.
GetFullTipSet(ctx context.Context, peer peer.ID, tsk types.TipSetKey) (*store.FullTipSet, error)
// AddPeer adds a peer to the pool of peers that the Client requests
// data from.
AddPeer(peer peer.ID)
// RemovePeer removes a peer from the pool of peers that the Client
// requests data from.
RemovePeer(peer peer.ID)
}
+189
View File
@@ -0,0 +1,189 @@
package exchange
// FIXME: This needs to be reviewed.
import (
"context"
"sort"
"sync"
"time"
host "github.com/libp2p/go-libp2p-core/host"
"github.com/libp2p/go-libp2p-core/peer"
"go.uber.org/fx"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/lib/peermgr"
)
type peerStats struct {
successes int
failures int
firstSeen time.Time
averageTime time.Duration
}
type bsPeerTracker struct {
lk sync.Mutex
peers map[peer.ID]*peerStats
avgGlobalTime time.Duration
pmgr *peermgr.PeerMgr
}
func newPeerTracker(lc fx.Lifecycle, h host.Host, pmgr *peermgr.PeerMgr) *bsPeerTracker {
bsPt := &bsPeerTracker{
peers: make(map[peer.ID]*peerStats),
pmgr: pmgr,
}
sub, err := h.EventBus().Subscribe(new(peermgr.NewFilPeer))
if err != nil {
panic(err)
}
go func() {
for newPeer := range sub.Out() {
bsPt.addPeer(newPeer.(peermgr.NewFilPeer).Id)
}
}()
lc.Append(fx.Hook{
OnStop: func(ctx context.Context) error {
return sub.Close()
},
})
return bsPt
}
func (bpt *bsPeerTracker) addPeer(p peer.ID) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
if _, ok := bpt.peers[p]; ok {
return
}
bpt.peers[p] = &peerStats{
firstSeen: build.Clock.Now(),
}
}
const (
// newPeerMul is how much better than average is the new peer assumed to be
// less than one to encourouge trying new peers
newPeerMul = 0.9
)
func (bpt *bsPeerTracker) prefSortedPeers() []peer.ID {
// TODO: this could probably be cached, but as long as its not too many peers, fine for now
bpt.lk.Lock()
defer bpt.lk.Unlock()
out := make([]peer.ID, 0, len(bpt.peers))
for p := range bpt.peers {
out = append(out, p)
}
// sort by 'expected cost' of requesting data from that peer
// additionally handle edge cases where not enough data is available
sort.Slice(out, func(i, j int) bool {
pi := bpt.peers[out[i]]
pj := bpt.peers[out[j]]
var costI, costJ float64
getPeerInitLat := func(p peer.ID) float64 {
return float64(bpt.avgGlobalTime) * newPeerMul
}
if pi.successes+pi.failures > 0 {
failRateI := float64(pi.failures) / float64(pi.failures+pi.successes)
costI = float64(pi.averageTime) + failRateI*float64(bpt.avgGlobalTime)
} else {
costI = getPeerInitLat(out[i])
}
if pj.successes+pj.failures > 0 {
failRateJ := float64(pj.failures) / float64(pj.failures+pj.successes)
costJ = float64(pj.averageTime) + failRateJ*float64(bpt.avgGlobalTime)
} else {
costJ = getPeerInitLat(out[j])
}
return costI < costJ
})
return out
}
const (
// xInvAlpha = (N+1)/2
localInvAlpha = 10 // 86% of the value is the last 19
globalInvAlpha = 25 // 86% of the value is the last 49
)
func (bpt *bsPeerTracker) logGlobalSuccess(dur time.Duration) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
if bpt.avgGlobalTime == 0 {
bpt.avgGlobalTime = dur
return
}
delta := (dur - bpt.avgGlobalTime) / globalInvAlpha
bpt.avgGlobalTime += delta
}
func logTime(pi *peerStats, dur time.Duration) {
if pi.averageTime == 0 {
pi.averageTime = dur
return
}
delta := (dur - pi.averageTime) / localInvAlpha
pi.averageTime += delta
}
func (bpt *bsPeerTracker) logSuccess(p peer.ID, dur time.Duration, reqSize uint64) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
var pi *peerStats
var ok bool
if pi, ok = bpt.peers[p]; !ok {
log.Warnw("log success called on peer not in tracker", "peerid", p.String())
return
}
pi.successes++
if reqSize == 0 {
reqSize = 1
}
logTime(pi, dur/time.Duration(reqSize))
}
func (bpt *bsPeerTracker) logFailure(p peer.ID, dur time.Duration, reqSize uint64) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
var pi *peerStats
var ok bool
if pi, ok = bpt.peers[p]; !ok {
log.Warn("log failure called on peer not in tracker", "peerid", p.String())
return
}
pi.failures++
if reqSize == 0 {
reqSize = 1
}
logTime(pi, dur/time.Duration(reqSize))
}
func (bpt *bsPeerTracker) removePeer(p peer.ID) {
bpt.lk.Lock()
defer bpt.lk.Unlock()
delete(bpt.peers, p)
}
+205
View File
@@ -0,0 +1,205 @@
package exchange
import (
"time"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/store"
"github.com/ipfs/go-cid"
logging "github.com/ipfs/go-log"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/types"
)
var log = logging.Logger("chainxchg")
const (
// BlockSyncProtocolID is the protocol ID of the former blocksync protocol.
// Deprecated.
BlockSyncProtocolID = "/fil/sync/blk/0.0.1"
// ChainExchangeProtocolID is the protocol ID of the chain exchange
// protocol.
ChainExchangeProtocolID = "/fil/chain/xchg/0.0.1"
)
// FIXME: Bumped from original 800 to this to accommodate `syncFork()`
// use of `GetBlocks()`. It seems the expectation of that API is to
// fetch any amount of blocks leaving it to the internal logic here
// to partition and reassemble the requests if they go above the maximum.
// (Also as a consequence of this temporarily removing the `const`
// qualifier to avoid "const initializer [...] is not a constant" error.)
var MaxRequestLength = uint64(build.ForkLengthThreshold)
const (
// Extracted constants from the code.
// FIXME: Should be reviewed and confirmed.
SuccessPeerTagValue = 25
WriteReqDeadline = 5 * time.Second
ReadResDeadline = WriteReqDeadline
ReadResMinSpeed = 50 << 10
ShufflePeersPrefix = 5
WriteResDeadline = 60 * time.Second
)
// FIXME: Rename. Make private.
type Request struct {
// List of ordered CIDs comprising a `TipSetKey` from where to start
// fetching backwards.
// FIXME: Consider using `TipSetKey` now (introduced after the creation
// of this protocol) instead of converting back and forth.
Head []cid.Cid
// Number of block sets to fetch from `Head` (inclusive, should always
// be in the range `[1, MaxRequestLength]`).
Length uint64
// Request options, see `Options` type for more details. Compressed
// in a single `uint64` to save space.
Options uint64
}
// `Request` processed and validated to query the tipsets needed.
type validatedRequest struct {
head types.TipSetKey
length uint64
options *parsedOptions
}
// Request options. When fetching the chain segment we can fetch
// either block headers, messages, or both.
const (
Headers = 1 << iota
Messages
)
// Decompressed options into separate struct members for easy access
// during internal processing..
type parsedOptions struct {
IncludeHeaders bool
IncludeMessages bool
}
func (options *parsedOptions) noOptionsSet() bool {
return options.IncludeHeaders == false &&
options.IncludeMessages == false
}
func parseOptions(optfield uint64) *parsedOptions {
return &parsedOptions{
IncludeHeaders: optfield&(uint64(Headers)) != 0,
IncludeMessages: optfield&(uint64(Messages)) != 0,
}
}
// FIXME: Rename. Make private.
type Response struct {
Status status
// String that complements the error status when converting to an
// internal error (see `statusToError()`).
ErrorMessage string
Chain []*BSTipSet
}
type status uint64
const (
Ok status = 0
// We could not fetch all blocks requested (but at least we returned
// the `Head` requested). Not considered an error.
Partial = 101
// Errors
NotFound = 201
GoAway = 202
InternalError = 203
BadRequest = 204
)
// Convert status to internal error.
func (res *Response) statusToError() error {
switch res.Status {
case Ok, Partial:
return nil
// FIXME: Consider if we want to not process `Partial` responses
// and return an error instead.
case NotFound:
return xerrors.Errorf("not found")
case GoAway:
return xerrors.Errorf("not handling 'go away' chainxchg responses yet")
case InternalError:
return xerrors.Errorf("block sync peer errored: %s", res.ErrorMessage)
case BadRequest:
return xerrors.Errorf("block sync request invalid: %s", res.ErrorMessage)
default:
return xerrors.Errorf("unrecognized response code: %d", res.Status)
}
}
// FIXME: Rename.
type BSTipSet struct {
Blocks []*types.BlockHeader
Messages *CompactedMessages
}
// All messages of a single tipset compacted together instead
// of grouped by block to save space, since there are normally
// many repeated messages per tipset in different blocks.
//
// `BlsIncludes`/`SecpkIncludes` matches `Bls`/`Secpk` messages
// to blocks in the tipsets with the format:
// `BlsIncludes[BI][MI]`
// * BI: block index in the tipset.
// * MI: message index in `Bls` list
//
// FIXME: The logic to decompress this structure should belong
// to itself, not to the consumer.
type CompactedMessages struct {
Bls []*types.Message
BlsIncludes [][]uint64
Secpk []*types.SignedMessage
SecpkIncludes [][]uint64
}
// Response that has been validated according to the protocol
// and can be safely accessed.
type validatedResponse struct {
tipsets []*types.TipSet
// List of all messages per tipset (grouped by tipset,
// not by block, hence a single index like `tipsets`).
messages []*CompactedMessages
}
// Decompress messages and form full tipsets with them. The headers
// need to have been requested as well.
func (res *validatedResponse) toFullTipSets() []*store.FullTipSet {
if len(res.tipsets) == 0 || len(res.tipsets) != len(res.messages) {
// This decompression can only be done if both headers and
// messages are returned in the response. (The second check
// is already implied by the guarantees of `validatedResponse`,
// added here just for completeness.)
return nil
}
ftsList := make([]*store.FullTipSet, len(res.tipsets))
for tipsetIdx := range res.tipsets {
fts := &store.FullTipSet{} // FIXME: We should use the `NewFullTipSet` API.
msgs := res.messages[tipsetIdx]
for blockIdx, b := range res.tipsets[tipsetIdx].Blocks() {
fb := &types.FullBlock{
Header: b,
}
for _, mi := range msgs.BlsIncludes[blockIdx] {
fb.BlsMessages = append(fb.BlsMessages, msgs.Bls[mi])
}
for _, mi := range msgs.SecpkIncludes[blockIdx] {
fb.SecpkMessages = append(fb.SecpkMessages, msgs.Secpk[mi])
}
fts.Blocks = append(fts.Blocks, fb)
}
ftsList[tipsetIdx] = fts
}
return ftsList
}
+247
View File
@@ -0,0 +1,247 @@
package exchange
import (
"bufio"
"context"
"fmt"
"time"
"go.opencensus.io/trace"
"golang.org/x/xerrors"
cborutil "github.com/filecoin-project/go-cbor-util"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid"
inet "github.com/libp2p/go-libp2p-core/network"
)
// server implements exchange.Server. It services requests for the
// libp2p ChainExchange protocol.
type server struct {
cs *store.ChainStore
}
var _ Server = (*server)(nil)
// NewServer creates a new libp2p-based exchange.Server. It services requests
// for the libp2p ChainExchange protocol.
func NewServer(cs *store.ChainStore) Server {
return &server{
cs: cs,
}
}
// HandleStream implements Server.HandleStream. Refer to the godocs there.
func (s *server) HandleStream(stream inet.Stream) {
ctx, span := trace.StartSpan(context.Background(), "chainxchg.HandleStream")
defer span.End()
defer stream.Close() //nolint:errcheck
var req Request
if err := cborutil.ReadCborRPC(bufio.NewReader(stream), &req); err != nil {
log.Warnf("failed to read block sync request: %s", err)
return
}
log.Infow("block sync request",
"start", req.Head, "len", req.Length)
resp, err := s.processRequest(ctx, &req)
if err != nil {
log.Warn("failed to process request: ", err)
return
}
_ = stream.SetDeadline(time.Now().Add(WriteResDeadline))
if err := cborutil.WriteCborRPC(stream, resp); err != nil {
_ = stream.SetDeadline(time.Time{})
log.Warnw("failed to write back response for handle stream",
"err", err, "peer", stream.Conn().RemotePeer())
return
}
_ = stream.SetDeadline(time.Time{})
}
// Validate and service the request. We return either a protocol
// response or an internal error.
func (s *server) processRequest(ctx context.Context, req *Request) (*Response, error) {
validReq, errResponse := validateRequest(ctx, req)
if errResponse != nil {
// The request did not pass validation, return the response
// indicating it.
return errResponse, nil
}
return s.serviceRequest(ctx, validReq)
}
// Validate request. We either return a `validatedRequest`, or an error
// `Response` indicating why we can't process it. We do not return any
// internal errors here, we just signal protocol ones.
func validateRequest(ctx context.Context, req *Request) (*validatedRequest, *Response) {
_, span := trace.StartSpan(ctx, "chainxchg.ValidateRequest")
defer span.End()
validReq := validatedRequest{}
validReq.options = parseOptions(req.Options)
if validReq.options.noOptionsSet() {
return nil, &Response{
Status: BadRequest,
ErrorMessage: "no options set",
}
}
validReq.length = req.Length
if validReq.length > MaxRequestLength {
return nil, &Response{
Status: BadRequest,
ErrorMessage: fmt.Sprintf("request length over maximum allowed (%d)",
MaxRequestLength),
}
}
if validReq.length == 0 {
return nil, &Response{
Status: BadRequest,
ErrorMessage: "invalid request length of zero",
}
}
if len(req.Head) == 0 {
return nil, &Response{
Status: BadRequest,
ErrorMessage: "no cids in request",
}
}
validReq.head = types.NewTipSetKey(req.Head...)
// FIXME: Add as a defer at the start.
span.AddAttributes(
trace.BoolAttribute("blocks", validReq.options.IncludeHeaders),
trace.BoolAttribute("messages", validReq.options.IncludeMessages),
trace.Int64Attribute("reqlen", int64(validReq.length)),
)
return &validReq, nil
}
func (s *server) serviceRequest(ctx context.Context, req *validatedRequest) (*Response, error) {
_, span := trace.StartSpan(ctx, "chainxchg.ServiceRequest")
defer span.End()
chain, err := collectChainSegment(s.cs, req)
if err != nil {
log.Warn("block sync request: collectChainSegment failed: ", err)
return &Response{
Status: InternalError,
ErrorMessage: err.Error(),
}, nil
}
status := Ok
if len(chain) < int(req.length) {
status = Partial
}
return &Response{
Chain: chain,
Status: status,
}, nil
}
func collectChainSegment(cs *store.ChainStore, req *validatedRequest) ([]*BSTipSet, error) {
var bstips []*BSTipSet
cur := req.head
for {
var bst BSTipSet
ts, err := cs.LoadTipSet(cur)
if err != nil {
return nil, xerrors.Errorf("failed loading tipset %s: %w", cur, err)
}
if req.options.IncludeHeaders {
bst.Blocks = ts.Blocks()
}
if req.options.IncludeMessages {
bmsgs, bmincl, smsgs, smincl, err := gatherMessages(cs, ts)
if err != nil {
return nil, xerrors.Errorf("gather messages failed: %w", err)
}
// FIXME: Pass the response to `gatherMessages()` and set all this there.
bst.Messages = &CompactedMessages{}
bst.Messages.Bls = bmsgs
bst.Messages.BlsIncludes = bmincl
bst.Messages.Secpk = smsgs
bst.Messages.SecpkIncludes = smincl
}
bstips = append(bstips, &bst)
// If we collected the length requested or if we reached the
// start (genesis), then stop.
if uint64(len(bstips)) >= req.length || ts.Height() == 0 {
return bstips, nil
}
cur = ts.Parents()
}
}
func gatherMessages(cs *store.ChainStore, ts *types.TipSet) ([]*types.Message, [][]uint64, []*types.SignedMessage, [][]uint64, error) {
blsmsgmap := make(map[cid.Cid]uint64)
secpkmsgmap := make(map[cid.Cid]uint64)
var secpkincl, blsincl [][]uint64
var blscids, secpkcids []cid.Cid
for _, block := range ts.Blocks() {
bc, sc, err := cs.ReadMsgMetaCids(block.Messages)
if err != nil {
return nil, nil, nil, nil, err
}
// FIXME: DRY. Use `chain.Message` interface.
bmi := make([]uint64, 0, len(bc))
for _, m := range bc {
i, ok := blsmsgmap[m]
if !ok {
i = uint64(len(blscids))
blscids = append(blscids, m)
blsmsgmap[m] = i
}
bmi = append(bmi, i)
}
blsincl = append(blsincl, bmi)
smi := make([]uint64, 0, len(sc))
for _, m := range sc {
i, ok := secpkmsgmap[m]
if !ok {
i = uint64(len(secpkcids))
secpkcids = append(secpkcids, m)
secpkmsgmap[m] = i
}
smi = append(smi, i)
}
secpkincl = append(secpkincl, smi)
}
blsmsgs, err := cs.LoadMessagesFromCids(blscids)
if err != nil {
return nil, nil, nil, nil, err
}
secpkmsgs, err := cs.LoadSignedMessagesFromCids(secpkcids)
if err != nil {
return nil, nil, nil, nil, err
}
return blsmsgs, blsincl, secpkmsgs, secpkincl, nil
}
+126 -62
View File
@@ -8,15 +8,16 @@ import (
"sync/atomic"
"time"
"github.com/filecoin-project/specs-actors/actors/runtime/proof"
"github.com/filecoin-project/go-address"
commcid "github.com/filecoin-project/go-fil-commcid"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
saminer "github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/crypto"
block "github.com/ipfs/go-block-format"
"github.com/ipfs/go-blockservice"
"github.com/ipfs/go-cid"
blockstore "github.com/ipfs/go-ipfs-blockstore"
offline "github.com/ipfs/go-ipfs-exchange-offline"
format "github.com/ipfs/go-ipld-format"
logging "github.com/ipfs/go-log/v2"
@@ -35,15 +36,21 @@ import (
"github.com/filecoin-project/lotus/chain/vm"
"github.com/filecoin-project/lotus/chain/wallet"
"github.com/filecoin-project/lotus/cmd/lotus-seed/seed"
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
"github.com/filecoin-project/lotus/genesis"
"github.com/filecoin-project/lotus/lib/blockstore"
"github.com/filecoin-project/lotus/lib/sigs"
"github.com/filecoin-project/lotus/node/repo"
"github.com/filecoin-project/sector-storage/ffiwrapper"
)
const msgsPerBlock = 20
//nolint:deadcode,varcheck
var log = logging.Logger("gen")
const msgsPerBlock = 20
var ValidWpostForTesting = []proof.PoStProof{{
ProofBytes: []byte("valid proof"),
}}
type ChainGen struct {
msgsPerBlock int
@@ -52,7 +59,7 @@ type ChainGen struct {
cs *store.ChainStore
beacon beacon.RandomBeacon
beacon beacon.Schedule
sm *stmgr.StateManager
@@ -88,9 +95,34 @@ func (m mybs) Get(c cid.Cid) (block.Block, error) {
return b, nil
}
var rootkeyMultisig = genesis.MultisigMeta{
Signers: []address.Address{remAccTestKey},
Threshold: 1,
VestingDuration: 0,
VestingStart: 0,
}
var DefaultVerifregRootkeyActor = genesis.Actor{
Type: genesis.TMultisig,
Balance: big.NewInt(0),
Meta: rootkeyMultisig.ActorMeta(),
}
var remAccTestKey, _ = address.NewFromString("t1ceb34gnsc6qk5dt6n7xg6ycwzasjhbxm3iylkiy")
var remAccMeta = genesis.MultisigMeta{
Signers: []address.Address{remAccTestKey},
Threshold: 1,
}
var DefaultRemainderAccountActor = genesis.Actor{
Type: genesis.TMultisig,
Balance: big.NewInt(0),
Meta: remAccMeta.ActorMeta(),
}
func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
saminer.SupportedProofTypes = map[abi.RegisteredProof]struct{}{
abi.RegisteredProof_StackedDRG2KiBSeal: {},
saminer.SupportedProofTypes = map[abi.RegisteredSealProof]struct{}{
abi.RegisteredSealProof_StackedDrg2KiBV1: {},
}
mr := repo.NewMemory(nil)
@@ -104,12 +136,12 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
return nil, xerrors.Errorf("failed to get metadata datastore: %w", err)
}
bds, err := lr.Datastore("/blocks")
bds, err := lr.Datastore("/chain")
if err != nil {
return nil, xerrors.Errorf("failed to get blocks datastore: %w", err)
}
bs := mybs{blockstore.NewIdStore(blockstore.NewBlockstore(bds))}
bs := mybs{blockstore.NewBlockstore(bds)}
ks, err := lr.KeyStore()
if err != nil {
@@ -141,7 +173,7 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
return nil, err
}
genm1, k1, err := seed.PreSeal(maddr1, abi.RegisteredProof_StackedDRG2KiBPoSt, 0, numSectors, m1temp, []byte("some randomness"), nil)
genm1, k1, err := seed.PreSeal(maddr1, abi.RegisteredSealProof_StackedDrg2KiBV1, 0, numSectors, m1temp, []byte("some randomness"), nil, true)
if err != nil {
return nil, err
}
@@ -153,7 +185,7 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
return nil, err
}
genm2, k2, err := seed.PreSeal(maddr2, abi.RegisteredProof_StackedDRG2KiBPoSt, 0, numSectors, m2temp, []byte("some randomness"), nil)
genm2, k2, err := seed.PreSeal(maddr2, abi.RegisteredSealProof_StackedDrg2KiBV1, 0, numSectors, m2temp, []byte("some randomness"), nil, true)
if err != nil {
return nil, err
}
@@ -173,12 +205,12 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
Accounts: []genesis.Actor{
{
Type: genesis.TAccount,
Balance: types.FromFil(40000),
Balance: types.FromFil(20_000_000),
Meta: (&genesis.AccountMeta{Owner: mk1}).ActorMeta(),
},
{
Type: genesis.TAccount,
Balance: types.FromFil(40000),
Balance: types.FromFil(20_000_000),
Meta: (&genesis.AccountMeta{Owner: mk2}).ActorMeta(),
},
{
@@ -191,8 +223,10 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
*genm1,
*genm2,
},
NetworkName: "",
Timestamp: uint64(time.Now().Add(-500 * build.BlockDelay * time.Second).Unix()),
VerifregRootKey: DefaultVerifregRootkeyActor,
RemainderAccount: DefaultRemainderAccountActor,
NetworkName: "",
Timestamp: uint64(build.Clock.Now().Add(-500 * time.Duration(build.BlockDelaySecs) * time.Second).Unix()),
}
genb, err := genesis2.MakeGenesisBlock(context.TODO(), bs, sys, tpl)
@@ -218,7 +252,11 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
miners := []address.Address{maddr1, maddr2}
beac := beacon.NewMockBeacon(time.Second)
beac := beacon.Schedule{{Start: 0, Beacon: beacon.NewMockBeacon(time.Second)}}
//beac, err := drand.NewDrandBeacon(tpl.Timestamp, build.BlockDelaySecs)
//if err != nil {
//return nil, xerrors.Errorf("creating drand beacon: %w", err)
//}
gen := &ChainGen{
bs: bs,
@@ -248,6 +286,10 @@ func NewGenerator() (*ChainGen, error) {
return NewGeneratorWithSectors(1)
}
func (cg *ChainGen) StateManager() *stmgr.StateManager {
return cg.sm
}
func (cg *ChainGen) SetStateManager(sm *stmgr.StateManager) {
cg.sm = sm
}
@@ -276,7 +318,8 @@ func (cg *ChainGen) GenesisCar() ([]byte, error) {
func CarWalkFunc(nd format.Node) (out []*format.Link, err error) {
for _, link := range nd.Links() {
if link.Cid.Prefix().MhType == uint64(commcid.FC_SEALED_V1) || link.Cid.Prefix().MhType == uint64(commcid.FC_UNSEALED_V1) {
pref := link.Cid.Prefix()
if pref.Codec == cid.FilCommitmentSealed || pref.Codec == cid.FilCommitmentUnsealed {
continue
}
out = append(out, link)
@@ -295,7 +338,7 @@ func (cg *ChainGen) nextBlockProof(ctx context.Context, pts *types.TipSet, m add
prev := mbi.PrevBeaconEntry
entries, err := beacon.BeaconEntriesForBlock(ctx, cg.beacon, round, prev)
entries, err := beacon.BeaconEntriesForBlock(ctx, cg.beacon, round, pts.Height(), prev)
if err != nil {
return nil, nil, nil, xerrors.Errorf("get beacon entries for block: %w", err)
}
@@ -315,7 +358,7 @@ func (cg *ChainGen) nextBlockProof(ctx context.Context, pts *types.TipSet, m add
return nil, nil, nil, xerrors.Errorf("failed to cbor marshal address: %w", err)
}
if len(entries) == 0 {
if round > build.UpgradeSmokeHeight {
buf.Write(pts.MinTicket().VRFProof)
}
@@ -354,16 +397,37 @@ func (cg *ChainGen) NextTipSet() (*MinedTipSet, error) {
return mts, nil
}
func (cg *ChainGen) NextTipSetFromMiners(base *types.TipSet, miners []address.Address) (*MinedTipSet, error) {
var blks []*types.FullBlock
func (cg *ChainGen) SetWinningPoStProver(m address.Address, wpp WinningPoStProver) {
cg.eppProvs[m] = wpp
}
msgs, err := cg.GetMessages(cg)
func (cg *ChainGen) NextTipSetFromMiners(base *types.TipSet, miners []address.Address) (*MinedTipSet, error) {
ms, err := cg.GetMessages(cg)
if err != nil {
return nil, xerrors.Errorf("get random messages: %w", err)
}
msgs := make([][]*types.SignedMessage, len(miners))
for i := range msgs {
msgs[i] = ms
}
fts, err := cg.NextTipSetFromMinersWithMessages(base, miners, msgs)
if err != nil {
return nil, err
}
return &MinedTipSet{
TipSet: fts,
Messages: ms,
}, nil
}
func (cg *ChainGen) NextTipSetFromMinersWithMessages(base *types.TipSet, miners []address.Address, msgs [][]*types.SignedMessage) (*store.FullTipSet, error) {
var blks []*types.FullBlock
for round := base.Height() + 1; len(blks) == 0; round++ {
for _, m := range miners {
for mi, m := range miners {
bvals, et, ticket, err := cg.nextBlockProof(context.TODO(), base, m, round)
if err != nil {
return nil, xerrors.Errorf("next block proof: %w", err)
@@ -376,7 +440,7 @@ func (cg *ChainGen) NextTipSetFromMiners(base *types.TipSet, miners []address.Ad
return nil, err
}
fblk, err := cg.makeBlock(base, m, ticket, et, bvals, round, wpost, msgs)
fblk, err := cg.makeBlock(base, m, ticket, et, bvals, round, wpost, msgs[mi])
if err != nil {
return nil, xerrors.Errorf("making a block for next tipset failed: %w", err)
}
@@ -390,23 +454,18 @@ func (cg *ChainGen) NextTipSetFromMiners(base *types.TipSet, miners []address.Ad
}
}
fts := store.NewFullTipSet(blks)
return &MinedTipSet{
TipSet: fts,
Messages: msgs,
}, nil
return store.NewFullTipSet(blks), nil
}
func (cg *ChainGen) makeBlock(parents *types.TipSet, m address.Address, vrfticket *types.Ticket,
eticket *types.ElectionProof, bvals []types.BeaconEntry, height abi.ChainEpoch,
wpost []abi.PoStProof, msgs []*types.SignedMessage) (*types.FullBlock, error) {
wpost []proof.PoStProof, msgs []*types.SignedMessage) (*types.FullBlock, error) {
var ts uint64
if cg.Timestamper != nil {
ts = cg.Timestamper(parents, height-parents.Height())
} else {
ts = parents.MinTimestamp() + uint64((height-parents.Height())*build.BlockDelay)
ts = parents.MinTimestamp() + uint64(height-parents.Height())*build.BlockDelaySecs
}
fblk, err := MinerCreateBlock(context.TODO(), cg.sm, cg.w, &api.BlockTemplate{
@@ -427,10 +486,11 @@ func (cg *ChainGen) makeBlock(parents *types.TipSet, m address.Address, vrfticke
return fblk, err
}
// This function is awkward. It's used to deal with messages made when
// ResyncBankerNonce is used for dealing with messages made when
// simulating forks
func (cg *ChainGen) ResyncBankerNonce(ts *types.TipSet) error {
act, err := cg.sm.GetActor(cg.banker, ts)
var act types.Actor
err := cg.sm.WithParentState(ts, cg.sm.WithActor(cg.banker, stmgr.GetActor(&act)))
if err != nil {
return err
}
@@ -460,8 +520,9 @@ func getRandomMessages(cg *ChainGen) ([]*types.SignedMessage, error) {
Method: 0,
GasLimit: 10000,
GasPrice: types.NewInt(0),
GasLimit: 100_000_000,
GasFeeCap: types.NewInt(0),
GasPremium: types.NewInt(0),
}
sig, err := cg.w.Sign(context.TODO(), cg.banker, msg.Cid().Bytes())
@@ -486,7 +547,8 @@ func (cg *ChainGen) YieldRepo() (repo.Repo, error) {
}
type MiningCheckAPI interface {
ChainGetRandomness(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
ChainGetRandomnessFromBeacon(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
MinerGetBaseInfo(context.Context, address.Address, abi.ChainEpoch, types.TipSetKey) (*api.MiningBaseInfo, error)
@@ -497,16 +559,25 @@ type mca struct {
w *wallet.Wallet
sm *stmgr.StateManager
pv ffiwrapper.Verifier
bcn beacon.RandomBeacon
bcn beacon.Schedule
}
func (mca mca) ChainGetRandomness(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) {
func (mca mca) ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) {
pts, err := mca.sm.ChainStore().LoadTipSet(tsk)
if err != nil {
return nil, xerrors.Errorf("loading tipset key: %w", err)
}
return mca.sm.ChainStore().GetRandomness(ctx, pts.Cids(), personalization, randEpoch, entropy)
return mca.sm.ChainStore().GetChainRandomness(ctx, pts.Cids(), personalization, randEpoch, entropy)
}
func (mca mca) ChainGetRandomnessFromBeacon(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) {
pts, err := mca.sm.ChainStore().LoadTipSet(tsk)
if err != nil {
return nil, xerrors.Errorf("loading tipset key: %w", err)
}
return mca.sm.ChainStore().GetBeaconRandomness(ctx, pts.Cids(), personalization, randEpoch, entropy)
}
func (mca mca) MinerGetBaseInfo(ctx context.Context, maddr address.Address, epoch abi.ChainEpoch, tsk types.TipSetKey) (*api.MiningBaseInfo, error) {
@@ -519,7 +590,7 @@ func (mca mca) WalletSign(ctx context.Context, a address.Address, v []byte) (*cr
type WinningPoStProver interface {
GenerateCandidates(context.Context, abi.PoStRandomness, uint64) ([]uint64, error)
ComputeProof(context.Context, []abi.SectorInfo, abi.PoStRandomness) ([]abi.PoStProof, error)
ComputeProof(context.Context, []proof.SectorInfo, abi.PoStRandomness) ([]proof.PoStProof, error)
}
type wppProvider struct{}
@@ -528,17 +599,8 @@ func (wpp *wppProvider) GenerateCandidates(ctx context.Context, _ abi.PoStRandom
return []uint64{0}, nil
}
func (wpp *wppProvider) ComputeProof(context.Context, []abi.SectorInfo, abi.PoStRandomness) ([]abi.PoStProof, error) {
return []abi.PoStProof{{
ProofBytes: []byte("valid proof"),
}}, nil
}
type ProofInput struct {
sectors []abi.SectorInfo
hvrf []byte
challengedSectors []uint64
vrfout []byte
func (wpp *wppProvider) ComputeProof(context.Context, []proof.SectorInfo, abi.PoStRandomness) ([]proof.PoStProof, error) {
return ValidWpostForTesting, nil
}
func IsRoundWinner(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch,
@@ -546,7 +608,7 @@ func IsRoundWinner(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch,
buf := new(bytes.Buffer)
if err := miner.MarshalCBOR(buf); err != nil {
return nil, xerrors.Errorf("failed to cbor marshal address: %w")
return nil, xerrors.Errorf("failed to cbor marshal address: %w", err)
}
electionRand, err := store.DrawRandomness(brand.Data, crypto.DomainSeparationTag_ElectionProofProduction, round, buf.Bytes())
@@ -559,12 +621,14 @@ func IsRoundWinner(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch,
return nil, xerrors.Errorf("failed to compute VRF: %w", err)
}
// TODO: wire in real power
if !types.IsTicketWinner(vrfout, mbi.MinerPower, mbi.NetworkPower) {
ep := &types.ElectionProof{VRFProof: vrfout}
j := ep.ComputeWinCount(mbi.MinerPower, mbi.NetworkPower)
ep.WinCount = j
if j < 1 {
return nil, nil
}
return &types.ElectionProof{VRFProof: vrfout}, nil
return ep, nil
}
type SignFunc func(context.Context, address.Address, []byte) (*crypto.Signature, error)
@@ -602,18 +666,18 @@ type genFakeVerifier struct{}
var _ ffiwrapper.Verifier = (*genFakeVerifier)(nil)
func (m genFakeVerifier) VerifySeal(svi abi.SealVerifyInfo) (bool, error) {
func (m genFakeVerifier) VerifySeal(svi proof.SealVerifyInfo) (bool, error) {
return true, nil
}
func (m genFakeVerifier) VerifyWinningPoSt(ctx context.Context, info abi.WinningPoStVerifyInfo) (bool, error) {
func (m genFakeVerifier) VerifyWinningPoSt(ctx context.Context, info proof.WinningPoStVerifyInfo) (bool, error) {
panic("not supported")
}
func (m genFakeVerifier) VerifyWindowPoSt(ctx context.Context, info abi.WindowPoStVerifyInfo) (bool, error) {
func (m genFakeVerifier) VerifyWindowPoSt(ctx context.Context, info proof.WindowPoStVerifyInfo) (bool, error) {
panic("not supported")
}
func (m genFakeVerifier) GenerateWinningPoStSectorChallenge(ctx context.Context, proof abi.RegisteredProof, id abi.ActorID, randomness abi.PoStRandomness, u uint64) ([]uint64, error) {
func (m genFakeVerifier) GenerateWinningPoStSectorChallenge(ctx context.Context, proof abi.RegisteredPoStProof, id abi.ActorID, randomness abi.PoStRandomness, u uint64) ([]uint64, error) {
panic("not supported")
}
+6 -6
View File
@@ -3,8 +3,8 @@ package gen
import (
"testing"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/power"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
@@ -14,8 +14,8 @@ import (
)
func init() {
miner.SupportedProofTypes = map[abi.RegisteredProof]struct{}{
abi.RegisteredProof_StackedDRG2KiBSeal: {},
miner.SupportedProofTypes = map[abi.RegisteredSealProof]struct{}{
abi.RegisteredSealProof_StackedDrg2KiBV1: {},
}
power.ConsensusMinerMinPower = big.NewInt(2048)
verifreg.MinVerifiedDealSize = big.NewInt(256)
@@ -39,8 +39,8 @@ func testGeneration(t testing.TB, n int, msgs int, sectors int) {
}
func TestChainGeneration(t *testing.T) {
testGeneration(t, 10, 20, 1)
testGeneration(t, 10, 20, 25)
t.Run("10-20-1", func(t *testing.T) { testGeneration(t, 10, 20, 1) })
t.Run("10-20-25", func(t *testing.T) { testGeneration(t, 10, 20, 25) })
}
func BenchmarkChainGeneration(b *testing.B) {
+41
View File
@@ -0,0 +1,41 @@
package genesis
import (
"encoding/hex"
blocks "github.com/ipfs/go-block-format"
"github.com/ipfs/go-cid"
"github.com/multiformats/go-multihash"
)
const genesisMultihashString = "1220107d821c25dc0735200249df94a8bebc9c8e489744f86a4ca8919e81f19dcd72"
const genesisBlockHex = "a5684461746574696d6573323031372d30352d30352030313a32373a3531674e6574776f726b6846696c65636f696e65546f6b656e6846696c65636f696e6c546f6b656e416d6f756e7473a36b546f74616c537570706c796d322c3030302c3030302c303030664d696e6572736d312c3430302c3030302c3030306c50726f746f636f6c4c616273a36b446576656c6f706d656e746b3330302c3030302c3030306b46756e6472616973696e676b3230302c3030302c3030306a466f756e646174696f6e6b3130302c3030302c303030674d657373616765784854686973206973207468652047656e6573697320426c6f636b206f66207468652046696c65636f696e20446563656e7472616c697a65642053746f72616765204e6574776f726b2e"
var cidBuilder = cid.V1Builder{Codec: cid.DagCBOR, MhType: multihash.SHA2_256}
func expectedCid() cid.Cid {
mh, err := multihash.FromHexString(genesisMultihashString)
if err != nil {
panic(err)
}
return cid.NewCidV1(cidBuilder.Codec, mh)
}
func getGenesisBlock() (blocks.Block, error) {
genesisBlockData, err := hex.DecodeString(genesisBlockHex)
if err != nil {
return nil, err
}
genesisCid, err := cidBuilder.Sum(genesisBlockData)
if err != nil {
return nil, err
}
block, err := blocks.NewBlockWithCid(genesisBlockData, genesisCid)
if err != nil {
return nil, err
}
return block, nil
}
+308 -93
View File
@@ -2,28 +2,37 @@ package genesis
import (
"context"
"crypto/rand"
"encoding/json"
"fmt"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/go-amt-ipld/v2"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/account"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
"github.com/filecoin-project/specs-actors/actors/runtime"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
logging "github.com/ipfs/go-log/v2"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/account"
"github.com/filecoin-project/specs-actors/actors/builtin/multisig"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
"github.com/filecoin-project/specs-actors/actors/util/adt"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/state"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/vm"
"github.com/filecoin-project/lotus/genesis"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
"github.com/filecoin-project/lotus/lib/sigs"
)
const AccountStart = 100
@@ -59,8 +68,15 @@ The process:
- power.CreateMiner, set msg value to PowerBalance
- market.AddFunds with correct value
- market.PublishDeals for related sectors
- Set precommits
- Commit presealed sectors
- Set network power in the power actor to what we'll have after genesis creation
- Recreate reward actor state with the right power
- For each precommitted sector
- Get deal weight
- Calculate QA Power
- Remove fake power from the power actor
- Calculate pledge
- Precommit
- Confirm valid
Data Types:
@@ -91,184 +107,354 @@ Genesis: {
*/
func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template genesis.Template) (*state.StateTree, error) {
func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template genesis.Template) (*state.StateTree, map[address.Address]address.Address, error) {
// Create empty state tree
cst := cbor.NewCborStore(bs)
_, err := cst.Put(context.TODO(), []struct{}{})
if err != nil {
return nil, xerrors.Errorf("putting empty object: %w", err)
return nil, nil, xerrors.Errorf("putting empty object: %w", err)
}
state, err := state.NewStateTree(cst)
if err != nil {
return nil, xerrors.Errorf("making new state tree: %w", err)
}
emptyobject, err := cst.Put(context.TODO(), []struct{}{})
if err != nil {
return nil, xerrors.Errorf("failed putting empty object: %w", err)
return nil, nil, xerrors.Errorf("making new state tree: %w", err)
}
// Create system actor
sysact, err := SetupSystemActor(bs)
if err != nil {
return nil, xerrors.Errorf("setup init actor: %w", err)
return nil, nil, xerrors.Errorf("setup init actor: %w", err)
}
if err := state.SetActor(builtin.SystemActorAddr, sysact); err != nil {
return nil, xerrors.Errorf("set init actor: %w", err)
return nil, nil, xerrors.Errorf("set init actor: %w", err)
}
// Create init actor
initact, err := SetupInitActor(bs, template.NetworkName, template.Accounts)
idStart, initact, keyIDs, err := SetupInitActor(bs, template.NetworkName, template.Accounts, template.VerifregRootKey)
if err != nil {
return nil, xerrors.Errorf("setup init actor: %w", err)
return nil, nil, xerrors.Errorf("setup init actor: %w", err)
}
if err := state.SetActor(builtin.InitActorAddr, initact); err != nil {
return nil, xerrors.Errorf("set init actor: %w", err)
return nil, nil, xerrors.Errorf("set init actor: %w", err)
}
// Setup reward
rewact, err := SetupRewardActor(bs)
// RewardActor's state is overrwritten by SetupStorageMiners
rewact, err := SetupRewardActor(bs, big.Zero())
if err != nil {
return nil, xerrors.Errorf("setup init actor: %w", err)
return nil, nil, xerrors.Errorf("setup init actor: %w", err)
}
err = state.SetActor(builtin.RewardActorAddr, rewact)
if err != nil {
return nil, xerrors.Errorf("set network account actor: %w", err)
return nil, nil, xerrors.Errorf("set network account actor: %w", err)
}
// Setup cron
cronact, err := SetupCronActor(bs)
if err != nil {
return nil, xerrors.Errorf("setup cron actor: %w", err)
return nil, nil, xerrors.Errorf("setup cron actor: %w", err)
}
if err := state.SetActor(builtin.CronActorAddr, cronact); err != nil {
return nil, xerrors.Errorf("set cron actor: %w", err)
return nil, nil, xerrors.Errorf("set cron actor: %w", err)
}
// Create empty power actor
spact, err := SetupStoragePowerActor(bs)
if err != nil {
return nil, xerrors.Errorf("setup storage market actor: %w", err)
return nil, nil, xerrors.Errorf("setup storage market actor: %w", err)
}
if err := state.SetActor(builtin.StoragePowerActorAddr, spact); err != nil {
return nil, xerrors.Errorf("set storage market actor: %w", err)
return nil, nil, xerrors.Errorf("set storage market actor: %w", err)
}
// Create empty market actor
marketact, err := SetupStorageMarketActor(bs)
if err != nil {
return nil, xerrors.Errorf("setup storage market actor: %w", err)
return nil, nil, xerrors.Errorf("setup storage market actor: %w", err)
}
if err := state.SetActor(builtin.StorageMarketActorAddr, marketact); err != nil {
return nil, xerrors.Errorf("set market actor: %w", err)
return nil, nil, xerrors.Errorf("set market actor: %w", err)
}
// Create verified registry
verifact, err := SetupVerifiedRegistryActor(bs)
if err != nil {
return nil, xerrors.Errorf("setup storage market actor: %w", err)
return nil, nil, xerrors.Errorf("setup storage market actor: %w", err)
}
if err := state.SetActor(builtin.VerifiedRegistryActorAddr, verifact); err != nil {
return nil, xerrors.Errorf("set market actor: %w", err)
return nil, nil, xerrors.Errorf("set market actor: %w", err)
}
burntRoot, err := cst.Put(ctx, &account.State{
Address: builtin.BurntFundsActorAddr,
})
if err != nil {
return nil, nil, xerrors.Errorf("failed to setup burnt funds actor state: %w", err)
}
// Setup burnt-funds
err = state.SetActor(builtin.BurntFundsActorAddr, &types.Actor{
Code: builtin.AccountActorCodeID,
Balance: types.NewInt(0),
Head: emptyobject,
Head: burntRoot,
})
if err != nil {
return nil, xerrors.Errorf("set burnt funds account actor: %w", err)
return nil, nil, xerrors.Errorf("set burnt funds account actor: %w", err)
}
// Create accounts
for id, info := range template.Accounts {
if info.Type != genesis.TAccount {
return nil, xerrors.New("unsupported account type") // TODO: msigs
for _, info := range template.Accounts {
switch info.Type {
case genesis.TAccount:
if err := createAccountActor(ctx, cst, state, info, keyIDs); err != nil {
return nil, nil, xerrors.Errorf("failed to create account actor: %w", err)
}
case genesis.TMultisig:
ida, err := address.NewIDAddress(uint64(idStart))
if err != nil {
return nil, nil, err
}
idStart++
if err := createMultisigAccount(ctx, bs, cst, state, ida, info, keyIDs); err != nil {
return nil, nil, err
}
default:
return nil, nil, xerrors.New("unsupported account type")
}
ida, err := address.NewIDAddress(uint64(AccountStart + id))
if err != nil {
return nil, err
}
var ainfo genesis.AccountMeta
if err := json.Unmarshal(info.Meta, &ainfo); err != nil {
return nil, xerrors.Errorf("unmarshaling account meta: %w", err)
}
st, err := cst.Put(ctx, &account.State{Address: ainfo.Owner})
if err != nil {
return nil, err
}
err = state.SetActor(ida, &types.Actor{
Code: builtin.AccountActorCodeID,
Balance: info.Balance,
Head: st,
})
if err != nil {
return nil, xerrors.Errorf("setting account from actmap: %w", err)
}
}
vregroot, err := address.NewIDAddress(80)
if err != nil {
return nil, err
return nil, nil, err
}
vrst, err := cst.Put(ctx, &account.State{Address: RootVerifierAddr})
if err = createMultisigAccount(ctx, bs, cst, state, vregroot, template.VerifregRootKey, keyIDs); err != nil {
return nil, nil, xerrors.Errorf("failed to set up verified registry signer: %w", err)
}
// Setup the first verifier as ID-address 81
// TODO: remove this
skBytes, err := sigs.Generate(crypto.SigTypeBLS)
if err != nil {
return nil, err
return nil, nil, xerrors.Errorf("creating random verifier secret key: %w", err)
}
err = state.SetActor(vregroot, &types.Actor{
verifierPk, err := sigs.ToPublic(crypto.SigTypeBLS, skBytes)
if err != nil {
return nil, nil, xerrors.Errorf("creating random verifier public key: %w", err)
}
verifierAd, err := address.NewBLSAddress(verifierPk)
if err != nil {
return nil, nil, xerrors.Errorf("creating random verifier address: %w", err)
}
verifierId, err := address.NewIDAddress(81)
if err != nil {
return nil, nil, err
}
verifierState, err := cst.Put(ctx, &account.State{Address: verifierAd})
if err != nil {
return nil, nil, err
}
err = state.SetActor(verifierId, &types.Actor{
Code: builtin.AccountActorCodeID,
Balance: types.NewInt(0),
Head: vrst,
Head: verifierState,
})
if err != nil {
return nil, xerrors.Errorf("setting account from actmap: %w", err)
return nil, nil, xerrors.Errorf("setting account from actmap: %w", err)
}
return state, nil
totalFilAllocated := big.Zero()
// flush as ForEach works on the HAMT
if _, err := state.Flush(ctx); err != nil {
return nil, nil, err
}
err = state.ForEach(func(addr address.Address, act *types.Actor) error {
totalFilAllocated = big.Add(totalFilAllocated, act.Balance)
return nil
})
if err != nil {
return nil, nil, xerrors.Errorf("summing account balances in state tree: %w", err)
}
totalFil := big.Mul(big.NewInt(int64(build.FilBase)), big.NewInt(int64(build.FilecoinPrecision)))
remainingFil := big.Sub(totalFil, totalFilAllocated)
if remainingFil.Sign() < 0 {
return nil, nil, xerrors.Errorf("somehow overallocated filecoin (allocated = %s)", types.FIL(totalFilAllocated))
}
remAccKey, err := address.NewIDAddress(90)
if err != nil {
return nil, nil, err
}
template.RemainderAccount.Balance = remainingFil
if err := createMultisigAccount(ctx, bs, cst, state, remAccKey, template.RemainderAccount, keyIDs); err != nil {
return nil, nil, xerrors.Errorf("failed to set up remainder account: %w", err)
}
return state, keyIDs, nil
}
func VerifyPreSealedData(ctx context.Context, cs *store.ChainStore, stateroot cid.Cid, template genesis.Template) (cid.Cid, error) {
func createAccountActor(ctx context.Context, cst cbor.IpldStore, state *state.StateTree, info genesis.Actor, keyIDs map[address.Address]address.Address) error {
var ainfo genesis.AccountMeta
if err := json.Unmarshal(info.Meta, &ainfo); err != nil {
return xerrors.Errorf("unmarshaling account meta: %w", err)
}
st, err := cst.Put(ctx, &account.State{Address: ainfo.Owner})
if err != nil {
return err
}
ida, ok := keyIDs[ainfo.Owner]
if !ok {
return fmt.Errorf("no registered ID for account actor: %s", ainfo.Owner)
}
err = state.SetActor(ida, &types.Actor{
Code: builtin.AccountActorCodeID,
Balance: info.Balance,
Head: st,
})
if err != nil {
return xerrors.Errorf("setting account from actmap: %w", err)
}
return nil
}
func createMultisigAccount(ctx context.Context, bs bstore.Blockstore, cst cbor.IpldStore, state *state.StateTree, ida address.Address, info genesis.Actor, keyIDs map[address.Address]address.Address) error {
if info.Type != genesis.TMultisig {
return fmt.Errorf("can only call createMultisigAccount with multisig Actor info")
}
var ainfo genesis.MultisigMeta
if err := json.Unmarshal(info.Meta, &ainfo); err != nil {
return xerrors.Errorf("unmarshaling account meta: %w", err)
}
pending, err := adt.MakeEmptyMap(adt.WrapStore(ctx, cst)).Root()
if err != nil {
return xerrors.Errorf("failed to create empty map: %v", err)
}
var signers []address.Address
for _, e := range ainfo.Signers {
idAddress, ok := keyIDs[e]
if !ok {
return fmt.Errorf("no registered key ID for signer: %s", e)
}
// Check if actor already exists
_, err := state.GetActor(e)
if err == nil {
signers = append(signers, idAddress)
continue
}
st, err := cst.Put(ctx, &account.State{Address: e})
if err != nil {
return err
}
err = state.SetActor(idAddress, &types.Actor{
Code: builtin.AccountActorCodeID,
Balance: types.NewInt(0),
Head: st,
})
if err != nil {
return xerrors.Errorf("setting account from actmap: %w", err)
}
signers = append(signers, idAddress)
}
st, err := cst.Put(ctx, &multisig.State{
Signers: signers,
NumApprovalsThreshold: uint64(ainfo.Threshold),
StartEpoch: abi.ChainEpoch(ainfo.VestingStart),
UnlockDuration: abi.ChainEpoch(ainfo.VestingDuration),
PendingTxns: pending,
InitialBalance: info.Balance,
})
if err != nil {
return err
}
err = state.SetActor(ida, &types.Actor{
Code: builtin.MultisigActorCodeID,
Balance: info.Balance,
Head: st,
})
if err != nil {
return xerrors.Errorf("setting account from actmap: %w", err)
}
return nil
}
func VerifyPreSealedData(ctx context.Context, cs *store.ChainStore, stateroot cid.Cid, template genesis.Template, keyIDs map[address.Address]address.Address) (cid.Cid, error) {
verifNeeds := make(map[address.Address]abi.PaddedPieceSize)
var sum abi.PaddedPieceSize
for _, m := range template.Miners {
for _, s := range m.Sectors {
amt := s.Deal.PieceSize
verifNeeds[s.Deal.Client] += amt
sum += amt
}
nwv := func(context.Context, abi.ChainEpoch) network.Version {
return build.NewestNetworkVersion
}
verifier, err := address.NewIDAddress(80)
if err != nil {
return cid.Undef, err
vmopt := vm.VMOpts{
StateBase: stateroot,
Epoch: 0,
Rand: &fakeRand{},
Bstore: cs.Blockstore(),
Syscalls: mkFakedSigSyscalls(cs.VMSys()),
CircSupplyCalc: nil,
NtwkVersion: nwv,
BaseFee: types.NewInt(0),
}
vm, err := vm.NewVM(stateroot, 0, &fakeRand{}, cs.Blockstore(), &fakedSigSyscalls{cs.VMSys()})
vm, err := vm.NewVM(&vmopt)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to create NewVM: %w", err)
}
_, err = doExecValue(ctx, vm, builtin.VerifiedRegistryActorAddr, RootVerifierAddr, types.NewInt(0), builtin.MethodsVerifiedRegistry.AddVerifier, mustEnc(&verifreg.AddVerifierParams{
for mi, m := range template.Miners {
for si, s := range m.Sectors {
if s.Deal.Provider != m.ID {
return cid.Undef, xerrors.Errorf("Sector %d in miner %d in template had mismatch in provider and miner ID: %s != %s", si, mi, s.Deal.Provider, m.ID)
}
amt := s.Deal.PieceSize
verifNeeds[keyIDs[s.Deal.Client]] += amt
sum += amt
}
}
verifregRoot, err := address.NewIDAddress(80)
if err != nil {
return cid.Undef, err
}
verifier, err := address.NewIDAddress(81)
if err != nil {
return cid.Undef, err
}
_, err = doExecValue(ctx, vm, builtin.VerifiedRegistryActorAddr, verifregRoot, types.NewInt(0), builtin.MethodsVerifiedRegistry.AddVerifier, mustEnc(&verifreg.AddVerifierParams{
Address: verifier,
Allowance: abi.NewStoragePower(int64(sum)), // eh, close enough
}))
if err != nil {
return cid.Undef, xerrors.Errorf("failed to failed to create verifier: %w", err)
return cid.Undef, xerrors.Errorf("failed to create verifier: %w", err)
}
for c, amt := range verifNeeds {
@@ -281,11 +467,16 @@ func VerifyPreSealedData(ctx context.Context, cs *store.ChainStore, stateroot ci
}
}
return vm.Flush(ctx)
st, err := vm.Flush(ctx)
if err != nil {
return cid.Cid{}, xerrors.Errorf("vm flush: %w", err)
}
return st, nil
}
func MakeGenesisBlock(ctx context.Context, bs bstore.Blockstore, sys runtime.Syscalls, template genesis.Template) (*GenesisBootstrap, error) {
st, err := MakeInitialStateTree(ctx, bs, template)
func MakeGenesisBlock(ctx context.Context, bs bstore.Blockstore, sys vm.SyscallBuilder, template genesis.Template) (*GenesisBootstrap, error) {
st, keyIDs, err := MakeInitialStateTree(ctx, bs, template)
if err != nil {
return nil, xerrors.Errorf("make initial state tree failed: %w", err)
}
@@ -299,19 +490,18 @@ func MakeGenesisBlock(ctx context.Context, bs bstore.Blockstore, sys runtime.Sys
cs := store.NewChainStore(bs, datastore.NewMapDatastore(), sys)
// Verify PreSealed Data
stateroot, err = VerifyPreSealedData(ctx, cs, stateroot, template)
stateroot, err = VerifyPreSealedData(ctx, cs, stateroot, template, keyIDs)
if err != nil {
return nil, xerrors.Errorf("failed to verify presealed data: %w", err)
}
stateroot, err = SetupStorageMiners(ctx, cs, stateroot, template.Miners)
if err != nil {
return nil, xerrors.Errorf("setup storage miners failed: %w", err)
return nil, xerrors.Errorf("setup miners failed: %w", err)
}
cst := cbor.NewCborStore(bs)
emptyroot, err := amt.FromArray(ctx, cst, nil)
store := adt.WrapStore(ctx, cbor.NewCborStore(bs))
emptyroot, err := adt.MakeEmptyArray(store).Root()
if err != nil {
return nil, xerrors.Errorf("amt build failed: %w", err)
}
@@ -330,14 +520,38 @@ func MakeGenesisBlock(ctx context.Context, bs bstore.Blockstore, sys runtime.Sys
log.Infof("Empty Genesis root: %s", emptyroot)
tickBuf := make([]byte, 32)
_, _ = rand.Read(tickBuf)
genesisticket := &types.Ticket{
VRFProof: []byte("vrf proof0000000vrf proof0000000"),
VRFProof: tickBuf,
}
filecoinGenesisCid, err := cid.Decode("bafyreiaqpwbbyjo4a42saasj36kkrpv4tsherf2e7bvezkert2a7dhonoi")
if err != nil {
return nil, xerrors.Errorf("failed to decode filecoin genesis block CID: %w", err)
}
if !expectedCid().Equals(filecoinGenesisCid) {
return nil, xerrors.Errorf("expectedCid != filecoinGenesisCid")
}
gblk, err := getGenesisBlock()
if err != nil {
return nil, xerrors.Errorf("failed to construct filecoin genesis block: %w", err)
}
if !filecoinGenesisCid.Equals(gblk.Cid()) {
return nil, xerrors.Errorf("filecoinGenesisCid != gblk.Cid")
}
if err := bs.Put(gblk); err != nil {
return nil, xerrors.Errorf("failed writing filecoin genesis block to blockstore: %w", err)
}
b := &types.BlockHeader{
Miner: builtin.SystemActorAddr,
Ticket: genesisticket,
Parents: []cid.Cid{},
Parents: []cid.Cid{filecoinGenesisCid},
Height: 0,
ParentWeight: types.NewInt(0),
ParentStateRoot: stateroot,
@@ -353,6 +567,7 @@ func MakeGenesisBlock(ctx context.Context, bs bstore.Blockstore, sys runtime.Sys
Data: make([]byte, 32),
},
},
ParentBaseFee: abi.NewTokenAmount(build.InitialBaseFee),
}
sb, err := b.ToStorageBlock()
+253 -98
View File
@@ -6,23 +6,29 @@ import (
"fmt"
"math/rand"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/lotus/chain/state"
"github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/sector-storage/ffiwrapper"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
"github.com/filecoin-project/specs-actors/actors/builtin/power"
"github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/filecoin-project/specs-actors/actors/builtin/reward"
"github.com/filecoin-project/specs-actors/actors/runtime"
"github.com/filecoin-project/lotus/chain/state"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/vm"
@@ -46,8 +52,35 @@ func (fss *fakedSigSyscalls) VerifySignature(signature crypto.Signature, signer
return nil
}
func mkFakedSigSyscalls(base vm.SyscallBuilder) vm.SyscallBuilder {
return func(ctx context.Context, cstate *state.StateTree, cst cbor.IpldStore) runtime.Syscalls {
return &fakedSigSyscalls{
base(ctx, cstate, cst),
}
}
}
func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid, miners []genesis.Miner) (cid.Cid, error) {
vm, err := vm.NewVM(sroot, 0, &fakeRand{}, cs.Blockstore(), &fakedSigSyscalls{cs.VMSys()})
csc := func(context.Context, abi.ChainEpoch, *state.StateTree) (abi.TokenAmount, error) {
return big.Zero(), nil
}
nwv := func(context.Context, abi.ChainEpoch) network.Version {
return build.NewestNetworkVersion
}
vmopt := &vm.VMOpts{
StateBase: sroot,
Epoch: 0,
Rand: &fakeRand{},
Bstore: cs.Blockstore(),
Syscalls: mkFakedSigSyscalls(cs.VMSys()),
CircSupplyCalc: csc,
NtwkVersion: nwv,
BaseFee: types.NewInt(0),
}
vm, err := vm.NewVM(vmopt)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to create NewVM: %w", err)
}
@@ -56,20 +89,29 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
return cid.Undef, xerrors.New("no genesis miners")
}
minerInfos := make([]struct {
maddr address.Address
presealExp abi.ChainEpoch
dealIDs []abi.DealID
}, len(miners))
for i, m := range miners {
// Create miner through power actor
i := i
m := m
spt, err := ffiwrapper.SealProofTypeFromSectorSize(m.SectorSize)
if err != nil {
return cid.Undef, err
}
var maddr address.Address
{
constructorParams := &power.CreateMinerParams{
Owner: m.Worker,
Worker: m.Worker,
Peer: m.PeerId,
Peer: []byte(m.PeerId),
SealProofType: spt,
}
@@ -88,49 +130,52 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
if ma.IDAddress != expma {
return cid.Undef, xerrors.Errorf("miner assigned wrong address: %s != %s", ma.IDAddress, expma)
}
maddr = ma.IDAddress
minerInfos[i].maddr = ma.IDAddress
err = vm.MutateState(ctx, minerInfos[i].maddr, func(cst cbor.IpldStore, st *miner.State) error {
maxPeriods := miner.MaxSectorExpirationExtension / miner.WPoStProvingPeriod
minerInfos[i].presealExp = (maxPeriods-1)*miner.WPoStProvingPeriod + st.ProvingPeriodStart - 1
return nil
})
if err != nil {
return cid.Undef, xerrors.Errorf("mutating state: %w", err)
}
}
// Add market funds
{
params := mustEnc(&maddr)
if m.MarketBalance.GreaterThan(big.Zero()) {
params := mustEnc(&minerInfos[i].maddr)
_, err := doExecValue(ctx, vm, builtin.StorageMarketActorAddr, m.Worker, m.MarketBalance, builtin.MethodsMarket.AddBalance, params)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to create genesis miner: %w", err)
}
}
{
params := mustEnc(&m.Worker)
_, err := doExecValue(ctx, vm, builtin.StorageMarketActorAddr, m.Worker, big.Zero(), builtin.MethodsMarket.AddBalance, params)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to create genesis miner: %w", err)
return cid.Undef, xerrors.Errorf("failed to create genesis miner (add balance): %w", err)
}
}
// Publish preseal deals
var dealIDs []abi.DealID
{
publish := func(params *market.PublishStorageDealsParams) error {
fmt.Printf("publishing %d storage deals on miner %s with worker %s\n", len(params.Deals), params.Deals[0].Proposal.Provider, m.Worker)
ret, err := doExecValue(ctx, vm, builtin.StorageMarketActorAddr, m.Worker, big.Zero(), builtin.MethodsMarket.PublishStorageDeals, mustEnc(params))
if err != nil {
return xerrors.Errorf("failed to create genesis miner: %w", err)
return xerrors.Errorf("failed to create genesis miner (publish deals): %w", err)
}
var ids market.PublishStorageDealsReturn
if err := ids.UnmarshalCBOR(bytes.NewReader(ret)); err != nil {
return xerrors.Errorf("unmarsahling publishStorageDeals result: %w", err)
}
dealIDs = append(dealIDs, ids.IDs...)
minerInfos[i].dealIDs = append(minerInfos[i].dealIDs, ids.IDs...)
return nil
}
params := &market.PublishStorageDealsParams{}
for _, preseal := range m.Sectors {
preseal.Deal.VerifiedDeal = true
preseal.Deal.EndEpoch = minerInfos[i].presealExp
params.Deals = append(params.Deals, market.ClientDealProposal{
Proposal: preseal.Deal,
ClientSignature: crypto.Signature{Type: crypto.SigTypeBLS}, // TODO: do we want to sign these? Or do we want to fake signatures for genesis setup?
@@ -151,94 +196,136 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
}
}
}
}
// Commit sectors
for pi, preseal := range m.Sectors {
// TODO: Maybe check seal (Can just be snark inputs, doesn't go into the genesis file)
// adjust total network power for equal pledge per sector
rawPow, qaPow := big.NewInt(0), big.NewInt(0)
{
for i, m := range miners {
for pi := range m.Sectors {
rawPow = types.BigAdd(rawPow, types.NewInt(uint64(m.SectorSize)))
// check deals, get dealWeight
var dealWeight market.VerifyDealsOnSectorProveCommitReturn
{
params := &market.VerifyDealsOnSectorProveCommitParams{
DealIDs: []abi.DealID{dealIDs[pi]},
SectorExpiry: preseal.Deal.EndEpoch,
}
ret, err := doExecValue(ctx, vm, builtin.StorageMarketActorAddr, maddr, big.Zero(), builtin.MethodsMarket.VerifyDealsOnSectorProveCommit, mustEnc(params))
dweight, err := dealWeight(ctx, vm, minerInfos[i].maddr, []abi.DealID{minerInfos[i].dealIDs[pi]}, 0, minerInfos[i].presealExp)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to verify preseal deals miner: %w", err)
}
if err := dealWeight.UnmarshalCBOR(bytes.NewReader(ret)); err != nil {
return cid.Undef, xerrors.Errorf("unmarshaling market onProveCommit result: %w", err)
}
}
// update power claims
{
err = vm.MutateState(ctx, builtin.StoragePowerActorAddr, func(cst cbor.IpldStore, st *power.State) error {
weight := &power.SectorStorageWeightDesc{
SectorSize: m.SectorSize,
Duration: preseal.Deal.Duration(),
DealWeight: dealWeight.DealWeight,
VerifiedDealWeight: dealWeight.VerifiedDealWeight,
}
qapower := power.QAPowerForWeight(weight)
err := st.AddToClaim(&state.AdtStore{cst}, maddr, types.NewInt(uint64(weight.SectorSize)), qapower)
if err != nil {
return xerrors.Errorf("add to claim: %w", err)
}
fmt.Println("Added weight to claim: ", st.TotalRawBytePower, st.TotalQualityAdjPower)
return nil
})
if err != nil {
return cid.Undef, xerrors.Errorf("register power claim in power actor: %w", err)
}
}
// Put sectors to miner sector sets
{
newSectorInfo := &miner.SectorOnChainInfo{
Info: miner.SectorPreCommitInfo{
RegisteredProof: preseal.ProofType,
SectorNumber: preseal.SectorID,
SealedCID: preseal.CommR,
SealRandEpoch: 0,
DealIDs: []abi.DealID{dealIDs[pi]},
Expiration: preseal.Deal.EndEpoch,
},
ActivationEpoch: 0,
DealWeight: dealWeight.DealWeight,
VerifiedDealWeight: dealWeight.VerifiedDealWeight,
return cid.Undef, xerrors.Errorf("getting deal weight: %w", err)
}
err = vm.MutateState(ctx, maddr, func(cst cbor.IpldStore, st *miner.State) error {
store := &state.AdtStore{cst}
sectorWeight := miner.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight.DealWeight, dweight.VerifiedDealWeight)
if err = st.PutSector(store, newSectorInfo); err != nil {
return xerrors.Errorf("failed to put sector: %v", err)
}
if err := st.AddNewSectors(newSectorInfo.Info.SectorNumber); err != nil {
return xerrors.Errorf("failed to add NewSector: %w", err)
}
return nil
})
if err != nil {
return cid.Cid{}, xerrors.Errorf("put to sset: %w", err)
}
qaPow = types.BigAdd(qaPow, sectorWeight)
}
}
err = vm.MutateState(ctx, builtin.StoragePowerActorAddr, func(cst cbor.IpldStore, st *power.State) error {
st.TotalQualityAdjPower = qaPow
st.TotalRawBytePower = rawPow
st.ThisEpochQualityAdjPower = qaPow
st.ThisEpochRawBytePower = rawPow
return nil
})
if err != nil {
return cid.Undef, xerrors.Errorf("mutating state: %w", err)
}
err = vm.MutateState(ctx, builtin.RewardActorAddr, func(sct cbor.IpldStore, st *reward.State) error {
*st = *reward.ConstructState(qaPow)
return nil
})
if err != nil {
return cid.Undef, xerrors.Errorf("mutating state: %w", err)
}
}
// TODO: to avoid division by zero, we set the initial power actor power to 1, this adjusts that back down so the accounting is accurate.
for i, m := range miners {
// Commit sectors
{
for pi, preseal := range m.Sectors {
params := &miner.SectorPreCommitInfo{
SealProof: preseal.ProofType,
SectorNumber: preseal.SectorID,
SealedCID: preseal.CommR,
SealRandEpoch: -1,
DealIDs: []abi.DealID{minerInfos[i].dealIDs[pi]},
Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally!
}
dweight, err := dealWeight(ctx, vm, minerInfos[i].maddr, params.DealIDs, 0, minerInfos[i].presealExp)
if err != nil {
return cid.Undef, xerrors.Errorf("getting deal weight: %w", err)
}
sectorWeight := miner.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight.DealWeight, dweight.VerifiedDealWeight)
// we've added fake power for this sector above, remove it now
err = vm.MutateState(ctx, builtin.StoragePowerActorAddr, func(cst cbor.IpldStore, st *power.State) error {
st.TotalQualityAdjPower = types.BigSub(st.TotalQualityAdjPower, sectorWeight) //nolint:scopelint
st.TotalRawBytePower = types.BigSub(st.TotalRawBytePower, types.NewInt(uint64(m.SectorSize)))
return nil
})
if err != nil {
return cid.Undef, xerrors.Errorf("removing fake power: %w", err)
}
epochReward, err := currentEpochBlockReward(ctx, vm, minerInfos[i].maddr)
if err != nil {
return cid.Undef, xerrors.Errorf("getting current epoch reward: %w", err)
}
tpow, err := currentTotalPower(ctx, vm, minerInfos[i].maddr)
if err != nil {
return cid.Undef, xerrors.Errorf("getting current total power: %w", err)
}
pcd := miner.PreCommitDepositForPower(epochReward.ThisEpochRewardSmoothed, tpow.QualityAdjPowerSmoothed, sectorWeight)
pledge := miner.InitialPledgeForPower(
sectorWeight,
epochReward.ThisEpochBaselinePower,
tpow.PledgeCollateral,
epochReward.ThisEpochRewardSmoothed,
tpow.QualityAdjPowerSmoothed,
circSupply(ctx, vm, minerInfos[i].maddr),
)
pledge = big.Add(pcd, pledge)
fmt.Println(types.FIL(pledge))
_, err = doExecValue(ctx, vm, minerInfos[i].maddr, m.Worker, pledge, builtin.MethodsMiner.PreCommitSector, mustEnc(params))
if err != nil {
return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err)
}
// Commit one-by-one, otherwise pledge math tends to explode
confirmParams := &builtin.ConfirmSectorProofsParams{
Sectors: []abi.SectorNumber{preseal.SectorID},
}
_, err = doExecValue(ctx, vm, minerInfos[i].maddr, builtin.StoragePowerActorAddr, big.Zero(), builtin.MethodsMiner.ConfirmSectorProofsValid, mustEnc(confirmParams))
if err != nil {
return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err)
}
}
}
}
// Sanity-check total network power
err = vm.MutateState(ctx, builtin.StoragePowerActorAddr, func(cst cbor.IpldStore, st *power.State) error {
st.TotalQualityAdjPower = big.Sub(st.TotalQualityAdjPower, big.NewInt(1))
if !st.TotalRawBytePower.Equals(rawPow) {
return xerrors.Errorf("st.TotalRawBytePower doesn't match previously calculated rawPow")
}
if !st.TotalQualityAdjPower.Equals(qaPow) {
return xerrors.Errorf("st.TotalQualityAdjPower doesn't match previously calculated qaPow")
}
return nil
})
if err != nil {
return cid.Undef, xerrors.Errorf("mutating state: %w", err)
}
// TODO: Should we re-ConstructState for the reward actor using rawPow as currRealizedPower here?
c, err := vm.Flush(ctx)
if err != nil {
@@ -250,8 +337,76 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
// TODO: copied from actors test harness, deduplicate or remove from here
type fakeRand struct{}
func (fr *fakeRand) GetRandomness(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) {
func (fr *fakeRand) GetChainRandomness(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) {
out := make([]byte, 32)
_, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out)
_, _ = rand.New(rand.NewSource(int64(randEpoch * 1000))).Read(out) //nolint
return out, nil
}
func (fr *fakeRand) GetBeaconRandomness(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) {
out := make([]byte, 32)
_, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out) //nolint
return out, nil
}
func currentTotalPower(ctx context.Context, vm *vm.VM, maddr address.Address) (*power.CurrentTotalPowerReturn, error) {
pwret, err := doExecValue(ctx, vm, builtin.StoragePowerActorAddr, maddr, big.Zero(), builtin.MethodsPower.CurrentTotalPower, nil)
if err != nil {
return nil, err
}
var pwr power.CurrentTotalPowerReturn
if err := pwr.UnmarshalCBOR(bytes.NewReader(pwret)); err != nil {
return nil, err
}
return &pwr, nil
}
func dealWeight(ctx context.Context, vm *vm.VM, maddr address.Address, dealIDs []abi.DealID, sectorStart, sectorExpiry abi.ChainEpoch) (market.VerifyDealsForActivationReturn, error) {
params := &market.VerifyDealsForActivationParams{
DealIDs: dealIDs,
SectorStart: sectorStart,
SectorExpiry: sectorExpiry,
}
var dealWeights market.VerifyDealsForActivationReturn
ret, err := doExecValue(ctx, vm,
builtin.StorageMarketActorAddr,
maddr,
abi.NewTokenAmount(0),
builtin.MethodsMarket.VerifyDealsForActivation,
mustEnc(params),
)
if err != nil {
return market.VerifyDealsForActivationReturn{}, err
}
if err := dealWeights.UnmarshalCBOR(bytes.NewReader(ret)); err != nil {
return market.VerifyDealsForActivationReturn{}, err
}
return dealWeights, nil
}
func currentEpochBlockReward(ctx context.Context, vm *vm.VM, maddr address.Address) (*reward.ThisEpochRewardReturn, error) {
rwret, err := doExecValue(ctx, vm, builtin.RewardActorAddr, maddr, big.Zero(), builtin.MethodsReward.ThisEpochReward, nil)
if err != nil {
return nil, err
}
var epochReward reward.ThisEpochRewardReturn
if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil {
return nil, err
}
return &epochReward, nil
}
func circSupply(ctx context.Context, vmi *vm.VM, maddr address.Address) abi.TokenAmount {
unsafeVM := &vm.UnsafeVM{VM: vmi}
rt := unsafeVM.MakeRuntime(ctx, &types.Message{
GasLimit: 1_000_000_000,
From: maddr,
}, maddr, 0, 0, 0)
return rt.TotalFilCircSupply()
}
+4 -2
View File
@@ -2,12 +2,14 @@ package genesis
import (
"context"
"github.com/filecoin-project/specs-actors/actors/builtin/system"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/specs-actors/actors/builtin"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupSystemActor(bs bstore.Blockstore) (*types.Actor, error) {
+94 -24
View File
@@ -5,64 +5,134 @@ import (
"encoding/json"
"fmt"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/util/adt"
init_ "github.com/filecoin-project/specs-actors/actors/builtin/init"
"github.com/ipfs/go-hamt-ipld"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/genesis"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesis.Actor) (*types.Actor, error) {
func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesis.Actor, rootVerifier genesis.Actor) (int64, *types.Actor, map[address.Address]address.Address, error) {
if len(initialActors) > MaxAccounts {
return nil, xerrors.New("too many initial actors")
return 0, nil, nil, xerrors.New("too many initial actors")
}
var ias init_.State
ias.NextID = MinerStart
ias.NetworkName = netname
cst := cbor.NewCborStore(bs)
amap := hamt.NewNode(cst, hamt.UseTreeBitWidth(5)) // TODO: use spec adt map
store := adt.WrapStore(context.TODO(), cbor.NewCborStore(bs))
amap := adt.MakeEmptyMap(store)
keyToId := map[address.Address]address.Address{}
counter := int64(AccountStart)
for _, a := range initialActors {
if a.Type == genesis.TMultisig {
var ainfo genesis.MultisigMeta
if err := json.Unmarshal(a.Meta, &ainfo); err != nil {
return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err)
}
for _, e := range ainfo.Signers {
if _, ok := keyToId[e]; ok {
continue
}
fmt.Printf("init set %s t0%d\n", e, counter)
value := cbg.CborInt(counter)
if err := amap.Put(abi.AddrKey(e), &value); err != nil {
return 0, nil, nil, err
}
counter = counter + 1
var err error
keyToId[e], err = address.NewIDAddress(uint64(value))
if err != nil {
return 0, nil, nil, err
}
}
// Need to add actors for all multisigs too
continue
}
for i, a := range initialActors {
if a.Type != genesis.TAccount {
return nil, xerrors.Errorf("unsupported account type: %s", a.Type) // TODO: Support msig (skip here)
return 0, nil, nil, xerrors.Errorf("unsupported account type: %s", a.Type)
}
var ainfo genesis.AccountMeta
if err := json.Unmarshal(a.Meta, &ainfo); err != nil {
return nil, xerrors.Errorf("unmarshaling account meta: %w", err)
return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err)
}
fmt.Printf("init set %s t0%d\n", ainfo.Owner, AccountStart+uint64(i))
fmt.Printf("init set %s t0%d\n", ainfo.Owner, counter)
if err := amap.Set(context.TODO(), string(ainfo.Owner.Bytes()), AccountStart+uint64(i)); err != nil {
return nil, err
value := cbg.CborInt(counter)
if err := amap.Put(abi.AddrKey(ainfo.Owner), &value); err != nil {
return 0, nil, nil, err
}
counter = counter + 1
var err error
keyToId[ainfo.Owner], err = address.NewIDAddress(uint64(value))
if err != nil {
return 0, nil, nil, err
}
}
if err := amap.Set(context.TODO(), string(RootVerifierAddr.Bytes()), 80); err != nil {
return nil, err
if rootVerifier.Type == genesis.TAccount {
var ainfo genesis.AccountMeta
if err := json.Unmarshal(rootVerifier.Meta, &ainfo); err != nil {
return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err)
}
value := cbg.CborInt(80)
if err := amap.Put(abi.AddrKey(ainfo.Owner), &value); err != nil {
return 0, nil, nil, err
}
} else if rootVerifier.Type == genesis.TMultisig {
var ainfo genesis.MultisigMeta
if err := json.Unmarshal(rootVerifier.Meta, &ainfo); err != nil {
return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err)
}
for _, e := range ainfo.Signers {
if _, ok := keyToId[e]; ok {
continue
}
fmt.Printf("init set %s t0%d\n", e, counter)
value := cbg.CborInt(counter)
if err := amap.Put(abi.AddrKey(e), &value); err != nil {
return 0, nil, nil, err
}
counter = counter + 1
var err error
keyToId[e], err = address.NewIDAddress(uint64(value))
if err != nil {
return 0, nil, nil, err
}
}
}
if err := amap.Flush(context.TODO()); err != nil {
return nil, err
}
amapcid, err := cst.Put(context.TODO(), amap)
amapaddr, err := amap.Root()
if err != nil {
return nil, err
return 0, nil, nil, err
}
ias.AddressMap = amapaddr
ias.AddressMap = amapcid
statecid, err := cst.Put(context.TODO(), &ias)
statecid, err := store.Put(store.Context(), &ias)
if err != nil {
return nil, err
return 0, nil, nil, err
}
act := &types.Actor{
@@ -70,5 +140,5 @@ func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesi
Head: statecid,
}
return act, nil
return counter, act, keyToId, nil
}
+8 -6
View File
@@ -3,19 +3,21 @@ package genesis
import (
"context"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/reward"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupRewardActor(bs bstore.Blockstore) (*types.Actor, error) {
func SetupRewardActor(bs bstore.Blockstore, qaPower big.Int) (*types.Actor, error) {
cst := cbor.NewCborStore(bs)
st := reward.ConstructState()
st.LastPerEpochReward = types.FromFil(100)
st := reward.ConstructState(qaPower)
hcid, err := cst.Put(context.TODO(), st)
if err != nil {
+1 -1
View File
@@ -5,10 +5,10 @@ import (
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/cron"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupCronActor(bs bstore.Blockstore) (*types.Actor, error) {
+17 -18
View File
@@ -2,38 +2,37 @@ package genesis
import (
"context"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/util/adt"
"github.com/filecoin-project/specs-actors/actors/builtin/power"
"github.com/ipfs/go-hamt-ipld"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupStoragePowerActor(bs bstore.Blockstore) (*types.Actor, error) {
ctx := context.TODO()
cst := cbor.NewCborStore(bs)
nd := hamt.NewNode(cst, hamt.UseTreeBitWidth(5))
emptyhamt, err := cst.Put(ctx, nd)
store := adt.WrapStore(context.TODO(), cbor.NewCborStore(bs))
emptyMap, err := adt.MakeEmptyMap(store).Root()
if err != nil {
return nil, err
}
sms := &power.State{
TotalRawBytePower: big.NewInt(0),
TotalQualityAdjPower: big.NewInt(1), // TODO: has to be 1 initially to avoid div by zero. Kinda annoying, should find a way to fix
TotalPledgeCollateral: big.NewInt(0),
MinerCount: 0,
CronEventQueue: emptyhamt,
LastEpochTick: 0,
Claims: emptyhamt,
NumMinersMeetingMinPower: 0,
multiMap, err := adt.AsMultimap(store, emptyMap)
if err != nil {
return nil, err
}
stcid, err := cst.Put(ctx, sms)
emptyMultiMap, err := multiMap.Root()
if err != nil {
return nil, err
}
sms := power.ConstructState(emptyMap, emptyMultiMap)
stcid, err := store.Put(store.Context(), sms)
if err != nil {
return nil, err
}
+6 -7
View File
@@ -2,32 +2,31 @@ package genesis
import (
"context"
"github.com/ipfs/go-hamt-ipld"
"github.com/filecoin-project/go-amt-ipld/v2"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
bstore "github.com/ipfs/go-ipfs-blockstore"
"github.com/filecoin-project/specs-actors/actors/util/adt"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupStorageMarketActor(bs bstore.Blockstore) (*types.Actor, error) {
cst := cbor.NewCborStore(bs)
store := adt.WrapStore(context.TODO(), cbor.NewCborStore(bs))
a, err := amt.NewAMT(cst).Flush(context.TODO())
a, err := adt.MakeEmptyArray(store).Root()
if err != nil {
return nil, err
}
h, err := cst.Put(context.TODO(), hamt.NewNode(cst, hamt.UseTreeBitWidth(5)))
h, err := adt.MakeEmptyMap(store).Root()
if err != nil {
return nil, err
}
sms := market.ConstructState(a, h, h)
stcid, err := cst.Put(context.TODO(), sms)
stcid, err := store.Put(store.Context(), sms)
if err != nil {
return nil, err
}
+5 -13
View File
@@ -4,27 +4,19 @@ import (
"context"
"github.com/filecoin-project/go-address"
"github.com/ipfs/go-hamt-ipld"
bstore "github.com/ipfs/go-ipfs-blockstore"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
"github.com/filecoin-project/specs-actors/actors/util/adt"
"github.com/filecoin-project/lotus/chain/types"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
var RootVerifierAddr address.Address
var RootVerifierID address.Address
func init() {
k, err := address.NewFromString("t3qfoulel6fy6gn3hjmbhpdpf6fs5aqjb5fkurhtwvgssizq4jey5nw4ptq5up6h7jk7frdvvobv52qzmgjinq")
if err != nil {
panic(err)
}
RootVerifierAddr = k
idk, err := address.NewFromString("t080")
if err != nil {
@@ -35,16 +27,16 @@ func init() {
}
func SetupVerifiedRegistryActor(bs bstore.Blockstore) (*types.Actor, error) {
cst := cbor.NewCborStore(bs)
store := adt.WrapStore(context.TODO(), cbor.NewCborStore(bs))
h, err := cst.Put(context.TODO(), hamt.NewNode(cst, hamt.UseTreeBitWidth(5)))
h, err := adt.MakeEmptyMap(store).Root()
if err != nil {
return nil, err
}
sms := verifreg.ConstructState(h, RootVerifierID)
stcid, err := cst.Put(context.TODO(), sms)
stcid, err := store.Put(store.Context(), sms)
if err != nil {
return nil, err
}
+2 -7
View File
@@ -4,7 +4,7 @@ import (
"context"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-state-types/abi"
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
@@ -21,14 +21,10 @@ func mustEnc(i cbg.CBORMarshaler) []byte {
return enc
}
func doExec(ctx context.Context, vm *vm.VM, to, from address.Address, method abi.MethodNum, params []byte) ([]byte, error) {
return doExecValue(ctx, vm, to, from, types.NewInt(0), method, params)
}
func doExecValue(ctx context.Context, vm *vm.VM, to, from address.Address, value types.BigInt, method abi.MethodNum, params []byte) ([]byte, error) {
act, err := vm.StateTree().GetActor(from)
if err != nil {
return nil, xerrors.Errorf("doExec failed to get from actor: %w", err)
return nil, xerrors.Errorf("doExec failed to get from actor (%s): %w", from, err)
}
ret, err := vm.ApplyImplicitMessage(ctx, &types.Message{
@@ -37,7 +33,6 @@ func doExecValue(ctx context.Context, vm *vm.VM, to, from address.Address, value
Method: method,
Params: params,
GasLimit: 1_000_000_000_000_000,
GasPrice: types.NewInt(0),
Value: value,
Nonce: act.Nonce,
})
+45 -19
View File
@@ -3,9 +3,8 @@ package gen
import (
"context"
bls "github.com/filecoin-project/filecoin-ffi"
amt "github.com/filecoin-project/go-amt-ipld/v2"
"github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/specs-actors/actors/util/adt"
cid "github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
cbg "github.com/whyrusleeping/cbor-gen"
@@ -17,6 +16,7 @@ import (
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/vm"
"github.com/filecoin-project/lotus/chain/wallet"
"github.com/filecoin-project/lotus/lib/sigs/bls"
)
func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w *wallet.Wallet, bt *api.BlockTemplate) (*types.FullBlock, error) {
@@ -78,17 +78,17 @@ func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w *wallet.Wal
}
}
bs := cbor.NewCborStore(sm.ChainStore().Blockstore())
blsmsgroot, err := amt.FromArray(ctx, bs, toIfArr(blsMsgCids))
store := sm.ChainStore().Store(ctx)
blsmsgroot, err := toArray(store, blsMsgCids)
if err != nil {
return nil, xerrors.Errorf("building bls amt: %w", err)
}
secpkmsgroot, err := amt.FromArray(ctx, bs, toIfArr(secpkMsgCids))
secpkmsgroot, err := toArray(store, secpkMsgCids)
if err != nil {
return nil, xerrors.Errorf("building secpk amt: %w", err)
}
mmcid, err := bs.Put(ctx, &types.MsgMeta{
mmcid, err := store.Put(store.Context(), &types.MsgMeta{
BlsMessages: blsmsgroot,
SecpkMessages: secpkmsgroot,
})
@@ -109,6 +109,12 @@ func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w *wallet.Wal
}
next.ParentWeight = pweight
baseFee, err := sm.ChainStore().ComputeBaseFee(ctx, pts)
if err != nil {
return nil, xerrors.Errorf("computing base fee: %w", err)
}
next.ParentBaseFee = baseFee
cst := cbor.NewCborStore(sm.ChainStore().Blockstore())
tree, err := state.LoadStateTree(cst, st)
if err != nil {
@@ -142,25 +148,45 @@ func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w *wallet.Wal
}
func aggregateSignatures(sigs []crypto.Signature) (*crypto.Signature, error) {
var blsSigs []bls.Signature
for _, s := range sigs {
var bsig bls.Signature
copy(bsig[:], s.Data)
blsSigs = append(blsSigs, bsig)
sigsS := make([][]byte, len(sigs))
for i := 0; i < len(sigs); i++ {
sigsS[i] = sigs[i].Data
}
aggSig := bls.Aggregate(blsSigs)
aggregator := new(bls.AggregateSignature).AggregateCompressed(sigsS)
if aggregator == nil {
if len(sigs) > 0 {
return nil, xerrors.Errorf("bls.Aggregate returned nil with %d signatures", len(sigs))
}
// Note: for blst this condition should not happen - nil should not
// be returned
return &crypto.Signature{
Type: crypto.SigTypeBLS,
Data: new(bls.Signature).Compress(),
}, nil
}
aggSigAff := aggregator.ToAffine()
if aggSigAff == nil {
return &crypto.Signature{
Type: crypto.SigTypeBLS,
Data: new(bls.Signature).Compress(),
}, nil
}
aggSig := aggSigAff.Compress()
return &crypto.Signature{
Type: crypto.SigTypeBLS,
Data: aggSig[:],
Data: aggSig,
}, nil
}
func toIfArr(cids []cid.Cid) []cbg.CBORMarshaler {
out := make([]cbg.CBORMarshaler, 0, len(cids))
for _, c := range cids {
func toArray(store adt.Store, cids []cid.Cid) (cid.Cid, error) {
arr := adt.MakeEmptyArray(store)
for i, c := range cids {
oc := cbg.CborCid(c)
out = append(out, &oc)
if err := arr.Set(uint64(i), &oc); err != nil {
return cid.Undef, err
}
}
return out
return arr.Root()
}
+112
View File
@@ -0,0 +1,112 @@
package slashfilter
import (
"fmt"
"golang.org/x/xerrors"
"github.com/ipfs/go-cid"
ds "github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/namespace"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/types"
)
type SlashFilter struct {
byEpoch ds.Datastore // double-fork mining faults, parent-grinding fault
byParents ds.Datastore // time-offset mining faults
}
func New(dstore ds.Batching) *SlashFilter {
return &SlashFilter{
byEpoch: namespace.Wrap(dstore, ds.NewKey("/slashfilter/epoch")),
byParents: namespace.Wrap(dstore, ds.NewKey("/slashfilter/parents")),
}
}
func (f *SlashFilter) MinedBlock(bh *types.BlockHeader, parentEpoch abi.ChainEpoch) error {
epochKey := ds.NewKey(fmt.Sprintf("/%s/%d", bh.Miner, bh.Height))
{
// double-fork mining (2 blocks at one epoch)
if err := checkFault(f.byEpoch, epochKey, bh, "double-fork mining faults"); err != nil {
return err
}
}
parentsKey := ds.NewKey(fmt.Sprintf("/%s/%x", bh.Miner, types.NewTipSetKey(bh.Parents...).Bytes()))
{
// time-offset mining faults (2 blocks with the same parents)
if err := checkFault(f.byParents, parentsKey, bh, "time-offset mining faults"); err != nil {
return err
}
}
{
// parent-grinding fault (didn't mine on top of our own block)
// First check if we have mined a block on the parent epoch
parentEpochKey := ds.NewKey(fmt.Sprintf("/%s/%d", bh.Miner, parentEpoch))
have, err := f.byEpoch.Has(parentEpochKey)
if err != nil {
return err
}
if have {
// If we had, make sure it's in our parent tipset
cidb, err := f.byEpoch.Get(parentEpochKey)
if err != nil {
return xerrors.Errorf("getting other block cid: %w", err)
}
_, parent, err := cid.CidFromBytes(cidb)
if err != nil {
return err
}
var found bool
for _, c := range bh.Parents {
if c.Equals(parent) {
found = true
}
}
if !found {
return xerrors.Errorf("produced block would trigger 'parent-grinding fault' consensus fault; miner: %s; bh: %s, expected parent: %s", bh.Miner, bh.Cid(), parent)
}
}
}
if err := f.byParents.Put(parentsKey, bh.Cid().Bytes()); err != nil {
return xerrors.Errorf("putting byEpoch entry: %w", err)
}
if err := f.byEpoch.Put(epochKey, bh.Cid().Bytes()); err != nil {
return xerrors.Errorf("putting byEpoch entry: %w", err)
}
return nil
}
func checkFault(t ds.Datastore, key ds.Key, bh *types.BlockHeader, faultType string) error {
fault, err := t.Has(key)
if err != nil {
return err
}
if fault {
cidb, err := t.Get(key)
if err != nil {
return xerrors.Errorf("getting other block cid: %w", err)
}
_, other, err := cid.CidFromBytes(cidb)
if err != nil {
return err
}
return xerrors.Errorf("produced block would trigger '%s' consensus fault; miner: %s; bh: %s, other: %s", faultType, bh.Miner, bh.Cid(), other)
}
return nil
}
+119 -36
View File
@@ -4,76 +4,159 @@ import (
"context"
"sync"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"go.uber.org/fx"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/ipfs/go-cid"
logging "github.com/ipfs/go-log"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/chain/actors"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/events"
"github.com/filecoin-project/lotus/chain/events/state"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/node/impl/full"
)
var log = logging.Logger("market_adapter")
type FundMgr struct {
sm *stmgr.StateManager
mpool full.MpoolAPI
// API is the dependencies need to run a fund manager
type API struct {
fx.In
lk sync.Mutex
full.ChainAPI
full.StateAPI
full.MpoolAPI
}
// FundMgr monitors available balances and adds funds when EnsureAvailable is called
type FundMgr struct {
api fundMgrAPI
lk sync.RWMutex
available map[address.Address]types.BigInt
}
func NewFundMgr(sm *stmgr.StateManager, mpool full.MpoolAPI) *FundMgr {
return &FundMgr{
sm: sm,
mpool: mpool,
// StartFundManager creates a new fund manager and sets up event hooks to manage state changes
func StartFundManager(lc fx.Lifecycle, api API) *FundMgr {
fm := newFundMgr(&api)
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
ev := events.NewEvents(ctx, &api)
preds := state.NewStatePredicates(&api)
dealDiffFn := preds.OnStorageMarketActorChanged(preds.OnBalanceChanged(preds.AvailableBalanceChangedForAddresses(fm.getAddresses)))
match := func(oldTs, newTs *types.TipSet) (bool, events.StateChange, error) {
return dealDiffFn(ctx, oldTs.Key(), newTs.Key())
}
return ev.StateChanged(fm.checkFunc, fm.stateChanged, fm.revert, 0, events.NoTimeout, match)
},
})
return fm
}
type fundMgrAPI interface {
StateMarketBalance(context.Context, address.Address, types.TipSetKey) (api.MarketBalance, error)
MpoolPushMessage(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error)
}
func newFundMgr(api fundMgrAPI) *FundMgr {
return &FundMgr{
api: api,
available: map[address.Address]types.BigInt{},
}
}
func (fm *FundMgr) EnsureAvailable(ctx context.Context, addr, wallet address.Address, amt types.BigInt) (cid.Cid, error) {
fm.lk.Lock()
avail, ok := fm.available[addr]
// checkFunc tells the events api to simply proceed (we always want to watch)
func (fm *FundMgr) checkFunc(ts *types.TipSet) (done bool, more bool, err error) {
return false, true, nil
}
// revert handles reverts to balances
func (fm *FundMgr) revert(ctx context.Context, ts *types.TipSet) error {
// TODO: Is it ok to just ignore this?
log.Warn("balance change reverted; TODO: actually handle this!")
return nil
}
// stateChanged handles balance changes monitored on the chain from one tipset to the next
func (fm *FundMgr) stateChanged(ts *types.TipSet, ts2 *types.TipSet, states events.StateChange, h abi.ChainEpoch) (more bool, err error) {
changedBalances, ok := states.(state.ChangedBalances)
if !ok {
bal, err := fm.sm.MarketBalance(ctx, addr, nil)
if err != nil {
fm.lk.Unlock()
return cid.Undef, err
panic("Expected state.ChangedBalances")
}
// overwrite our in memory cache with new values from chain (chain is canonical)
fm.lk.Lock()
for addr, balanceChange := range changedBalances {
if fm.available[addr].Int != nil {
log.Infof("State balance change recorded, prev: %s, new: %s", fm.available[addr].String(), balanceChange.To.String())
}
avail = types.BigSub(bal.Escrow, bal.Locked)
fm.available[addr] = balanceChange.To
}
fm.lk.Unlock()
return true, nil
}
func (fm *FundMgr) getAddresses() []address.Address {
fm.lk.RLock()
defer fm.lk.RUnlock()
addrs := make([]address.Address, 0, len(fm.available))
for addr := range fm.available {
addrs = append(addrs, addr)
}
return addrs
}
// EnsureAvailable looks at the available balance in escrow for a given
// address, and if less than the passed in amount, adds the difference
func (fm *FundMgr) EnsureAvailable(ctx context.Context, addr, wallet address.Address, amt types.BigInt) (cid.Cid, error) {
idAddr, err := fm.api.StateLookupID(ctx, addr, types.EmptyTSK)
if err != nil {
return cid.Undef, err
}
fm.lk.Lock()
bal, err := fm.api.StateMarketBalance(ctx, addr, types.EmptyTSK)
if err != nil {
fm.lk.Unlock()
return cid.Undef, err
}
toAdd := types.NewInt(0)
avail = types.BigSub(avail, amt)
if avail.LessThan(types.NewInt(0)) {
// TODO: some rules around adding more to avoid doing stuff on-chain
// all the time
toAdd = types.BigSub(toAdd, avail)
avail = types.NewInt(0)
}
fm.available[addr] = avail
stateAvail := types.BigSub(bal.Escrow, bal.Locked)
avail, ok := fm.available[idAddr]
if !ok {
avail = stateAvail
}
toAdd := types.BigSub(amt, avail)
if toAdd.LessThan(types.NewInt(0)) {
toAdd = types.NewInt(0)
}
fm.available[idAddr] = big.Add(avail, toAdd)
fm.lk.Unlock()
var err error
log.Infof("Funds operation w/ Expected Balance: %s, In State: %s, Requested: %s, Adding: %s", avail.String(), stateAvail.String(), amt.String(), toAdd.String())
if toAdd.LessThanEqual(big.Zero()) {
return cid.Undef, nil
}
params, err := actors.SerializeParams(&addr)
if err != nil {
return cid.Undef, err
}
smsg, err := fm.mpool.MpoolPushMessage(ctx, &types.Message{
To: builtin.StorageMarketActorAddr,
From: wallet,
Value: toAdd,
GasPrice: types.NewInt(0),
GasLimit: 1000000,
Method: builtin.MethodsMarket.AddBalance,
Params: params,
})
smsg, err := fm.api.MpoolPushMessage(ctx, &types.Message{
To: builtin.StorageMarketActorAddr,
From: wallet,
Value: toAdd,
Method: builtin.MethodsMarket.AddBalance,
Params: params,
}, nil)
if err != nil {
return cid.Undef, err
}
+188
View File
@@ -0,0 +1,188 @@
package market
import (
"context"
"errors"
"math/rand"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/specs-actors/actors/builtin"
tutils "github.com/filecoin-project/specs-actors/support/testing"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/chain/actors"
"github.com/filecoin-project/lotus/chain/types"
)
type fakeAPI struct {
returnedBalance api.MarketBalance
returnedBalanceErr error
signature crypto.Signature
receivedMessage *types.Message
pushMessageErr error
lookupIDErr error
}
func (fapi *fakeAPI) StateLookupID(_ context.Context, addr address.Address, _ types.TipSetKey) (address.Address, error) {
return addr, fapi.lookupIDErr
}
func (fapi *fakeAPI) StateMarketBalance(context.Context, address.Address, types.TipSetKey) (api.MarketBalance, error) {
return fapi.returnedBalance, fapi.returnedBalanceErr
}
func (fapi *fakeAPI) MpoolPushMessage(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec) (*types.SignedMessage, error) {
fapi.receivedMessage = msg
return &types.SignedMessage{
Message: *msg,
Signature: fapi.signature,
}, fapi.pushMessageErr
}
func addFundsMsg(toAdd abi.TokenAmount, addr address.Address, wallet address.Address) *types.Message {
params, _ := actors.SerializeParams(&addr)
return &types.Message{
To: builtin.StorageMarketActorAddr,
From: wallet,
Value: toAdd,
Method: builtin.MethodsMarket.AddBalance,
Params: params,
}
}
type expectedResult struct {
addAmt abi.TokenAmount
shouldAdd bool
err error
}
func TestAddFunds(t *testing.T) {
ctx := context.Background()
testCases := map[string]struct {
returnedBalanceErr error
returnedBalance api.MarketBalance
addAmounts []abi.TokenAmount
pushMessageErr error
expectedResults []expectedResult
lookupIDErr error
}{
"succeeds, trivial case": {
returnedBalance: api.MarketBalance{Escrow: abi.NewTokenAmount(0), Locked: abi.NewTokenAmount(0)},
addAmounts: []abi.TokenAmount{abi.NewTokenAmount(100)},
expectedResults: []expectedResult{
{
addAmt: abi.NewTokenAmount(100),
shouldAdd: true,
err: nil,
},
},
},
"succeeds, money already present": {
returnedBalance: api.MarketBalance{Escrow: abi.NewTokenAmount(150), Locked: abi.NewTokenAmount(50)},
addAmounts: []abi.TokenAmount{abi.NewTokenAmount(100)},
expectedResults: []expectedResult{
{
shouldAdd: false,
err: nil,
},
},
},
"succeeds, multiple adds": {
returnedBalance: api.MarketBalance{Escrow: abi.NewTokenAmount(150), Locked: abi.NewTokenAmount(50)},
addAmounts: []abi.TokenAmount{abi.NewTokenAmount(100), abi.NewTokenAmount(200), abi.NewTokenAmount(250), abi.NewTokenAmount(250)},
expectedResults: []expectedResult{
{
shouldAdd: false,
err: nil,
},
{
addAmt: abi.NewTokenAmount(100),
shouldAdd: true,
err: nil,
},
{
addAmt: abi.NewTokenAmount(50),
shouldAdd: true,
err: nil,
},
{
shouldAdd: false,
err: nil,
},
},
},
"error on market balance": {
returnedBalanceErr: errors.New("something went wrong"),
addAmounts: []abi.TokenAmount{abi.NewTokenAmount(100)},
expectedResults: []expectedResult{
{
err: errors.New("something went wrong"),
},
},
},
"error on push message": {
returnedBalance: api.MarketBalance{Escrow: abi.NewTokenAmount(0), Locked: abi.NewTokenAmount(0)},
pushMessageErr: errors.New("something went wrong"),
addAmounts: []abi.TokenAmount{abi.NewTokenAmount(100)},
expectedResults: []expectedResult{
{
err: errors.New("something went wrong"),
},
},
},
"error looking up address": {
lookupIDErr: errors.New("something went wrong"),
addAmounts: []abi.TokenAmount{abi.NewTokenAmount(100)},
expectedResults: []expectedResult{
{
err: errors.New("something went wrong"),
},
},
},
}
for testCase, data := range testCases {
//nolint:scopelint
t.Run(testCase, func(t *testing.T) {
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
sig := make([]byte, 100)
_, err := rand.Read(sig)
require.NoError(t, err)
fapi := &fakeAPI{
returnedBalance: data.returnedBalance,
returnedBalanceErr: data.returnedBalanceErr,
signature: crypto.Signature{
Type: crypto.SigTypeUnknown,
Data: sig,
},
pushMessageErr: data.pushMessageErr,
lookupIDErr: data.lookupIDErr,
}
fundMgr := newFundMgr(fapi)
addr := tutils.NewIDAddr(t, uint64(rand.Uint32()))
wallet := tutils.NewIDAddr(t, uint64(rand.Uint32()))
for i, amount := range data.addAmounts {
fapi.receivedMessage = nil
_, err := fundMgr.EnsureAvailable(ctx, addr, wallet, amount)
expected := data.expectedResults[i]
if expected.err == nil {
require.NoError(t, err)
if expected.shouldAdd {
expectedMessage := addFundsMsg(expected.addAmt, addr, wallet)
require.Equal(t, expectedMessage, fapi.receivedMessage)
} else {
require.Nil(t, fapi.receivedMessage)
}
} else {
require.EqualError(t, err, expected.err.Error())
}
}
})
}
}
+102
View File
@@ -0,0 +1,102 @@
package messagepool
import (
"math"
"sync"
)
var noWinnersProbCache []float64
var noWinnersProbOnce sync.Once
func noWinnersProb() []float64 {
noWinnersProbOnce.Do(func() {
poissPdf := func(x float64) float64 {
const Mu = 5
lg, _ := math.Lgamma(x + 1)
result := math.Exp((math.Log(Mu) * x) - lg - Mu)
return result
}
out := make([]float64, 0, MaxBlocks)
for i := 0; i < MaxBlocks; i++ {
out = append(out, poissPdf(float64(i)))
}
noWinnersProbCache = out
})
return noWinnersProbCache
}
var noWinnersProbAssumingCache []float64
var noWinnersProbAssumingOnce sync.Once
func noWinnersProbAssumingMoreThanOne() []float64 {
noWinnersProbAssumingOnce.Do(func() {
cond := math.Log(-1 + math.Exp(5))
poissPdf := func(x float64) float64 {
const Mu = 5
lg, _ := math.Lgamma(x + 1)
result := math.Exp((math.Log(Mu) * x) - lg - cond)
return result
}
out := make([]float64, 0, MaxBlocks)
for i := 0; i < MaxBlocks; i++ {
out = append(out, poissPdf(float64(i+1)))
}
noWinnersProbAssumingCache = out
})
return noWinnersProbAssumingCache
}
func binomialCoefficient(n, k float64) float64 {
if k > n {
return math.NaN()
}
r := 1.0
for d := 1.0; d <= k; d++ {
r *= n
r /= d
n--
}
return r
}
func (mp *MessagePool) blockProbabilities(tq float64) []float64 {
noWinners := noWinnersProbAssumingMoreThanOne()
p := 1 - tq
binoPdf := func(x, trials float64) float64 {
// based on https://github.com/atgjack/prob
if x > trials {
return 0
}
if p == 0 {
if x == 0 {
return 1.0
}
return 0.0
}
if p == 1 {
if x == trials {
return 1.0
}
return 0.0
}
coef := binomialCoefficient(trials, x)
pow := math.Pow(p, x) * math.Pow(1-p, trials-x)
if math.IsInf(coef, 0) {
return 0
}
return coef * pow
}
out := make([]float64, 0, MaxBlocks)
for place := 0; place < MaxBlocks; place++ {
var pPlace float64
for otherWinners, pCase := range noWinners {
pPlace += pCase * binoPdf(float64(place), float64(otherWinners))
}
out = append(out, pPlace)
}
return out
}

Some files were not shown because too many files have changed in this diff Show More