Compare commits

..
1360 Commits
Author SHA1 Message Date
Łukasz Magiera 5324440f7d Merge pull request #5202 from filecoin-project/release/v1.3.0
Lotus version 1.3.0
2020-12-16 20:20:55 +01:00
Aayush Rajasekaran d04c01939d Lotus version 1.3.0 2020-12-16 00:34:34 -05:00
Aayush Rajasekaran f2aea11971 Merge pull request #5200 from filecoin-project/release/v1.3.0
Disable gas burning for window post messages
2020-12-16 00:23:50 -05:00
Steven Allen 1f754bdb78 disable gas burning for window post messages
While over-estimation fees and miner tips are still paid, gas is no longer burnt
for direct, successful window PoSt messages.

Usually, gas is burnt to prevent an attacker from spamming the network and to
allow clients to "price" messages (using the base fee cap) based on how urgently
they need them to be processed. However:

1. Window PoSt is already a "proof of work".
2. Miners need to submit WindowedPoSts on-time so all window post messages are urgent.
3. Work is already under way to move window post verification off-chain (making
it effectively free). This change simply introduces the "free" part a bit earlier.
2020-12-16 00:10:25 -05:00
Łukasz Magiera 46e5cc9317 Merge pull request #5197 from filecoin-project/fix/lock-propose
fix lock propose
2020-12-15 23:34:02 +01:00
whyrusleeping 6c6711e638 fix lock propose 2020-12-15 13:27:22 -08:00
Łukasz Magiera 3d52c087cc Merge pull request #5195 from filecoin-project/feat/v1.2.3-prep
v1.2.3 changelog, version bump
2020-12-15 20:06:39 +01:00
Łukasz Magiera 0d72d742b4 Merge pull request #5194 from filecoin-project/raulk/tvx-extract-tipset
tvx command to extract tipset vectors.
2020-12-15 19:53:10 +01:00
Łukasz Magiera 884e20f637 Merge pull request #5196 from filecoin-project/feat/shed-block-pubsub-id
lotus-shed blockmsgid command
2020-12-15 19:36:02 +01:00
vyzo 210216a94f lotus-shed blockmsgid command 2020-12-15 20:20:16 +02:00
Raúl Kripalani 2af1283c65 tvx exec: flag to fallback to API blockstore. 2020-12-15 17:44:56 +00:00
Łukasz Magiera d2b7e7b2ab v1.2.3 changelog, version bump 2020-12-15 18:39:50 +01:00
Raúl Kripalani 3fa51f08e1 fix lint error; stamp metadata on vector. 2020-12-15 17:08:49 +00:00
Raúl Kripalani 446b1cc883 tvx command to extract tipset vectors. 2020-12-15 16:56:01 +00:00
Łukasz Magiera 3c7f5f7629 Merge pull request #5189 from filecoin-project/fix/on-commit-ignore-failed-msgs
When waiting for deal commit messages, ignore unsuccessful messages
2020-12-14 12:57:27 +01:00
Dirk McCormick dc8ff27b36 fix: when waiting for deal commit messages, ignore unsuccessful messages 2020-12-14 12:30:52 +01:00
Łukasz Magiera 65b921c62c Merge pull request #5177 from filecoin-project/acautman-iosize
stores: Bigger copy buffer size
2020-12-10 22:28:47 +01:00
Łukasz Magiera c61f341b22 Merge pull request #5178 from filecoin-project/asr/ask-min-piece
Print MinPieceSize when querying ask
2020-12-10 22:27:48 +01:00
Aayush Rajasekaran e33f873df8 Print MinPieceSize when querying ask 2020-12-10 15:38:18 -05:00
Łukasz Magiera 46a5013dc1 stores: Simplify remote copy buf size logic 2020-12-10 20:54:42 +01:00
Łukasz Magiera 53a6c4eac6 Merge branch 'iosize' of github.com:acautman/lotus into acautman-iosize 2020-12-10 20:48:04 +01:00
Łukasz Magiera 2e154ef6d0 Merge pull request #5176 from filecoin-project/shaodan-miner-sectors-info
Shaodan miner sectors info
2020-12-10 20:09:15 +01:00
Łukasz Magiera 47346907dd docsgen: Add []abi.SectorNumber example 2020-12-10 20:00:48 +01:00
Łukasz Magiera 0cb2f51549 Merge pull request #5094 from filecoin-project/asr/verified-only
Allow miners to filter (un)verified deals
2020-12-10 19:48:22 +01:00
Łukasz Magiera 564b88af52 docsgen, lint 2020-12-10 19:36:02 +01:00
Łukasz Magiera d347e7ab8f Merge branch 'miner-sectors-info' of github.com:shaodan/lotus into shaodan-miner-sectors-info 2020-12-10 19:32:26 +01:00
Łukasz Magiera 46c7f047d4 Merge pull request #5166 from liyue201/patch-1
fix curSealing out of MaxSealingSectors limit
2020-12-10 19:18:30 +01:00
Łukasz Magiera 58729b7fd6 Merge pull request #5169 from filcloud/5141-mpoolpending
add mpoolpending from to filter
2020-12-10 17:31:48 +01:00
Łukasz Magiera 4767773d1b Merge pull request #5171 from filecoin-project/raulk/block-delay-metric
add metrics for delayed blocks.
2020-12-10 17:12:12 +01:00
Łukasz Magiera c9b489437d Merge pull request #5173 from filecoin-project/fix/mpool-push-untrusted
fix PushUntrusted publishing -- the message is local
2020-12-10 17:08:03 +01:00
vyzo e07059e73d fix PushUntrusted publishing -- the message is local 2020-12-10 17:26:41 +02:00
Raúl Kripalani 0570306bb6 add metrics for delayed blocks. 2020-12-10 14:52:05 +00:00
Frank 0f08da3272 add mpoolpending from to filter 2020-12-10 17:21:32 +08:00
caoao d4582fb32e write size according to RegisteredSealProof 2020-12-10 11:59:09 +08:00
stirlingx 3c50baaf5b fix curSealing out of MaxSealingSectors limit 2020-12-10 11:04:42 +08:00
Łukasz Magiera e1be89b442 Merge pull request #5159 from iand/fix/event-hang
fix(events): avoid potential hang when starting event listener
2020-12-09 19:40:02 +01:00
Łukasz Magiera 2ce5a29004 Merge pull request #5150 from filecoin-project/feat/list-deals-xfer-id
show data transfer ID in list-deals
2020-12-09 19:39:46 +01:00
Łukasz Magiera 39e73e1cb4 Merge pull request #5158 from wangyancun/master
Remove extra spaces
2020-12-09 19:31:38 +01:00
Łukasz Magiera bc9b5cb5fc Merge pull request #5160 from iand/fix/unlock-event-mutex
fix(events): unlock mutex before error returns
2020-12-09 19:25:07 +01:00
Łukasz Magiera 9990d440e9 Merge pull request #5162 from filecoin-project/ref/mpool
Small message pool refactors
2020-12-09 19:23:22 +01:00
Ian Davis c6f5214657 fix(events): unlock mutex before error returns 2020-12-09 13:37:56 +00:00
Ian Davis 696469aae7 fix: avoid potential hang when starting event listener
It was possible for NewEvents to never return, blocked on waiting for a WaitGroup to be done.
The call to Done was in a goroutine that could exit before reaching the Done call.

Replace the WaitGroup with a channel that is closed to signal that initialisation is complete.
Also, while we are waiting on the channel, wait on the context so we can exit clealy if the
context is canceled.
2020-12-09 11:29:48 +00:00
beck d3fa728894 Remove extra spaces 2020-12-09 19:22:21 +08:00
Jakub Sztandera 6ca5caef31 Refactor DefaultMessageSendSpec
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-12-08 20:51:27 +01:00
Jakub Sztandera 689b93dc0e messagepool: small refactor
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-12-08 20:07:13 +01:00
Dirk McCormick 72cb130e17 feat: show data transfer ID in list-deals 2020-12-08 15:23:26 +01:00
Łukasz Magiera a999e41677 Merge pull request #5072 from zgfzgf/feat-shed-cid
Feat shed cid
2020-12-08 10:23:04 +01:00
Łukasz Magiera 6b1c54162a Merge pull request #5112 from filecoin-project/feat/use-fund-manager-to-withdraw-market-funds
Use FundManager to withdraw funds, add MarketWithdraw API
2020-12-08 10:08:40 +01:00
Łukasz Magiera 5c37c9d8e9 Merge pull request #5118 from filcloud/keygen-outfile
add keygen outfile
2020-12-07 13:11:11 +01:00
Łukasz Magiera b7975dcd9a Merge pull request #5114 from filecoin-project/chore/update_sr2_stat_aggregation
Chore/update sr2 stat aggregation
2020-12-07 13:09:23 +01:00
Łukasz Magiera 3beebe5dc8 Merge pull request #5119 from filecoin-project/fix/ctl-address-lookup
miner: Fix control address lookup
2020-12-07 12:59:32 +01:00
Dan Shao d56170d70e Optimize sectors info loading 2020-12-07 13:42:37 +08:00
Peter Rabbitson d9e3cc0374 Add an extra filplus counter 2020-12-04 19:00:13 +01:00
Łukasz Magiera a5a72a41eb miner: Fix control address lookup 2020-12-04 17:02:23 +01:00
Peter Rabbitson 2514c96cff Count deals from sealed sectors only 2020-12-04 15:45:25 +01:00
Peter Rabbitson 88bd757024 Only count the first 10 copies of the same piece per project 2020-12-04 15:45:25 +01:00
Peter Rabbitson 1e6aa4b129 Only count phase2 deals ( start epoch 166560 ) 2020-12-04 15:45:25 +01:00
Frank daca99687c add keygen outfile 2020-12-04 18:39:35 +08:00
Ingar Shu 65abeb066d docs 2020-12-03 13:20:50 -08:00
Ingar Shu 13c8a235b6 Use FundManager to withdraw funds, add MarketWithdraw to API 2020-12-03 13:08:18 -08:00
Łukasz Magiera b13226bc2f Merge pull request #5111 from filecoin-project/fix/send-nonce-0
fix: send with declared nonce 0
2020-12-03 19:01:19 +01:00
Jakub Sztandera 07afd93443 fix: send with declared nonce 0
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-12-03 18:38:36 +01:00
Łukasz Magiera dc06d30f52 Merge pull request #5101 from filecoin-project/raulk/memory-watchdog
introduce memory watchdog; LOTUS_MAX_HEAP
2020-12-03 15:46:09 +01:00
Łukasz Magiera 90a31fde9f Merge pull request #5103 from filecoin-project/feat/miner-control-config
miner: Control address config for (pre)commits
2020-12-03 15:33:12 +01:00
Raúl Kripalani f9cbf6d526 watchdog: add LOTUS_DISABLE_WATCHDOG escape hatch. 2020-12-03 13:16:10 +00:00
Łukasz Magiera b190c3492a Merge pull request #5099 from zgfzgf/feat-chain-gen
delete repeat call func
2020-12-03 13:23:39 +01:00
Łukasz Magiera da5e1b319f Merge pull request #5098 from filecoin-project/feat/shed-ledger-show
shed: ledger show command
2020-12-03 13:22:06 +01:00
Łukasz Magiera ba7854d645 Merge pull request #5105 from filecoin-project/feat/log-insufficent-peers
sync: log a message when there aren't enough peers
2020-12-03 12:53:40 +01:00
Łukasz Magiera d844938a92 Merge pull request #5107 from zgfzgf/feat-miner-round
optimize code use existence var
2020-12-03 12:51:49 +01:00
Łukasz Magiera 58695dc1bc miner: fix tests 2020-12-03 12:37:11 +01:00
Łukasz Magiera 1502ca6460 storagefsm: Fix addr selection for commits 2020-12-03 12:30:41 +01:00
zgfzgf 178691e37f optimize code use existence var 2020-12-03 09:54:57 +08:00
Aayush Rajasekaran 93d26195f1 Merge pull request #5104 from filecoin-project/release/v1.2.2
Lotus version 1.2.2
2020-12-02 20:40:40 -05:00
Travis Person a584fcb935 sync: log a message when there aren't enough peers 2020-12-03 01:27:07 +00:00
Aayush Rajasekaran bf93dfbc3b Lotus version 1.2.2 2020-12-02 20:23:59 -05:00
Raúl Kripalani d033f8aab1 watchdog: remove silence period, reduce tick interval to 5 secs. 2020-12-02 22:31:57 +00:00
Raúl Kripalani e34a759889 avoid global ResourceConstraints. 2020-12-02 22:26:30 +00:00
Raúl Kripalani 2ef8acdfc8 back out index cache usage in badger blockstore. 2020-12-02 21:35:13 +00:00
Łukasz Magiera 562f5839b7 Fix lint 2020-12-02 22:01:09 +01:00
Łukasz Magiera c3a0feef96 miner: Improve default address config 2020-12-02 21:54:38 +01:00
Łukasz Magiera 2fd93a55ac plumb AddressSelector to stoage fsm 2020-12-02 21:47:54 +01:00
Łukasz Magiera 783971d2c8 docsgen, gofmt 2020-12-02 20:46:40 +01:00
Łukasz Magiera f74a1b70ab miner: Fix actor control list cli 2020-12-02 20:46:07 +01:00
Łukasz Magiera 7246ef273f miner: Control address config for (pre)commits 2020-12-02 19:58:00 +01:00
Raúl Kripalani e8a5e0d2fe integrate memory watchdog; impose limits on badger caches. 2020-12-02 16:40:28 +00:00
zgfzgf a415e49fdb delete repeat call func 2020-12-02 20:05:01 +08:00
Raúl Kripalani 655aea1018 Merge branch 'master' into raulk/badger-index-cache 2020-12-02 11:46:57 +00:00
Łukasz Magiera 9707c82285 shed: ledger show command 2020-12-02 10:37:17 +01:00
Aayush Rajasekaran 370817eb60 Allow miners to filter (un)verified deals 2020-12-02 01:32:34 -05:00
zgfzgf 97dd082585 change flag codec value raw to id and default value is id 2020-12-02 08:41:58 +08:00
Łukasz Magiera 3196b2cfd5 Merge pull request #5086 from filecoin-project/feat/better-sector-check
miner: Add slow mode to proving check
2020-12-02 01:03:48 +01:00
Łukasz Magiera 289ef910a0 fix imports, docsgen 2020-12-02 00:39:55 +01:00
Łukasz Magiera 95eaf13b5a sectorstorage: Fix tests 2020-12-02 00:36:32 +01:00
Łukasz Magiera c6f85886bf miner: Add slow mode to proving check 2020-12-02 00:32:14 +01:00
Łukasz Magiera b6046924b3 Merge pull request #5083 from filecoin-project/feat/miner-info-improvements
miner info cli improvements
2020-12-01 22:46:50 +01:00
Łukasz Magiera bc14d0820f fix lint 2020-12-01 20:00:55 +01:00
Łukasz Magiera 64e30808f8 miner info: Print control and spendable balances 2020-12-01 19:56:47 +01:00
Łukasz Magiera 28420b9eb0 miner info: Make balances line up better 2020-12-01 19:43:22 +01:00
Łukasz Magiera b28ed5887c gofmt 2020-12-01 19:23:43 +01:00
Łukasz Magiera 827ec75f5f miner info: Don't print random config values 2020-12-01 19:23:29 +01:00
Łukasz Magiera c31774b08e miner info: Cleanup balance printing 2020-12-01 19:22:57 +01:00
Łukasz Magiera be9f7b88b2 uint64 is too small 2020-12-01 19:15:39 +01:00
Łukasz Magiera 15c4793fe0 miner info: More cleanup 2020-12-01 19:15:20 +01:00
Łukasz Magiera 42cecbd879 miner info: Collapse sector size line 2020-12-01 19:01:08 +01:00
Łukasz Magiera 00e5ace818 Print basefee in miner info 2020-12-01 18:56:43 +01:00
Łukasz Magiera 82b5cb89cd Merge pull request #5061 from filecoin-project/fix/err-late-deals
Error out deals that are not activated by proposed deal start epoch
2020-12-01 17:02:06 +01:00
dirkmcandŁukasz Magiera b7436cd300 Update markets/storageadapter/ondealsectorcommitted.go
Co-authored-by: Łukasz Magiera <magik6k@users.noreply.github.com>
2020-12-01 16:48:48 +01:00
zgfzgf 715c32ff77 add flag codec 2020-12-01 22:53:24 +08:00
Dirk McCormick 44d929c084 fix: increase proposed deal start epoch for CLI test 2020-12-01 15:31:05 +01:00
Łukasz Magiera 4b1d6bfcca Merge pull request #5079 from zgfzgf/feat-shed-commp
add commp-to-cid base64 decode
2020-12-01 15:11:23 +01:00
Łukasz Magiera 614f45dcfb Merge pull request #5041 from filecoin-project/feat/5013
Sector check command
2020-12-01 14:59:01 +01:00
Łukasz Magiera 354b5af55a Merge pull request #5032 from filecoin-project/fix/cancel-transfer
Cancel transfer cancels storage deal
2020-12-01 14:57:58 +01:00
Łukasz Magiera fc5120621b Merge pull request #5080 from filecoin-project/feat/enable-stack-with-gas-tracing
Enable Callers tracing when GasTracing is enabled
2020-12-01 14:56:41 +01:00
Łukasz Magiera c4a6b94b9c Merge pull request #5023 from filecoin-project/feat/worker-set-task-types
worker: Support setting task types at runtime
2020-12-01 14:51:07 +01:00
Łukasz Magieraanddirkmc 054327b72a wdpost: Update comment
Co-authored-by: dirkmc <dirkmdev@gmail.com>
2020-12-01 14:50:51 +01:00
Dirk McCormick cb044f83a7 fix: ensure deal start is far enough in future for tests 2020-12-01 14:25:48 +01:00
Jakub Sztandera f1291f137c Enable Callers tracing when GasTracing is enabled
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-12-01 13:53:30 +01:00
Dirk McCormick 6bbb8ecafc refactor: simplify deal start epoch timeout handling 2020-12-01 12:40:02 +01:00
zgfzgf ec08e27af2 add base64 decode 2020-12-01 19:36:01 +08:00
Dirk McCormick c5a8b7076c feat: go-fil-markets v1.0.9 2020-12-01 11:58:28 +01:00
Łukasz Magiera 4d019f16e4 Merge pull request #5074 from filecoin-project/fix/deal-verified-helptext
Fix helptext for verified-deal default in client deal
2020-12-01 11:54:41 +01:00
Dirk McCormick ceea03cd40 fix: client test list-deals parsing 2020-12-01 11:48:14 +01:00
Łukasz Magiera 32065f551e Fix helptext for verified-deal default in client deal 2020-12-01 11:41:21 +01:00
Dirk McCormick 7bab281449 feat: go-data-transfer v1.2.2 / go-fil-markets v1.0.8 2020-12-01 11:12:41 +01:00
zgfzgf a8cdb8adc7 add abi Cid 2020-12-01 17:16:41 +08:00
Łukasz Magiera 2be9836196 Merge pull request #5068 from filecoin-project/zen/ledger-sign-print
Ledger signature verification
2020-12-01 09:59:36 +01:00
zgfzgf 0439e95aa3 add encoding flag 2020-12-01 16:50:53 +08:00
ZenGround0 2e5843a0ee Filecoin signature serialization 2020-11-30 23:14:21 -05:00
ZenGround0 751568a4dd Print hex 2020-11-30 22:50:41 -05:00
Łukasz Magiera 6dea0a6281 worker: fix math-related issue 2020-11-30 23:19:16 +01:00
Łukasz Magiera a4f3758f4c worker api: better grouping 2020-11-30 23:16:30 +01:00
Łukasz Magiera 3e143cac4b Merge pull request #5060 from filecoin-project/feat/listasks-ping
client list-asks --by-ping
2020-11-30 23:14:53 +01:00
Łukasz Magiera 0386cc5d48 Merge pull request #5059 from filecoin-project/feat/mpool-replace-opt-limit
Make --gas-limit optional in mpool replace cli
2020-11-30 20:07:09 +01:00
Dirk McCormick e02a366419 feat: error out deals that are not activated by proposed deal start epoch 2020-11-30 15:27:40 +01:00
Łukasz Magiera d15ef9ac9b Merge pull request #5036 from filecoin-project/feat/shed-rpc-args
shed rpc: Allow calling with args
2020-11-30 14:33:52 +01:00
Łukasz Magiera 70732ac423 Fix lint 2020-11-30 14:26:42 +01:00
Łukasz Magiera b18bc90dbc client list-asks --by-ping 2020-11-30 14:20:05 +01:00
Łukasz Magiera 8382977e21 Merge pull request #5037 from filecoin-project/fix/chainstr-tipset-leak
Fix chainstore tipset leak
2020-11-30 14:17:28 +01:00
Łukasz Magiera f4913c19b1 Make --gas-limit optional in mpool replace cli 2020-11-30 12:41:50 +01:00
Łukasz Magiera 660ac26dd9 Merge pull request #5035 from filecoin-project/feat/mpool-stat-gas
Print gas limit sum in mpool stat
2020-11-27 20:05:03 +01:00
Jakub Sztandera 65d50c76d6 bonus: fix WalletSign using t0 addresses in WalletSignMessage
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-27 17:19:41 +01:00
Łukasz Magiera e8d2560581 Fix tests 2020-11-27 16:47:48 +01:00
Łukasz Magiera dc7c7608df docsgen 2020-11-27 16:37:06 +01:00
Łukasz Magiera 13a5b7f539 Merge pull request #5029 from GFZRZK/GFZRZK/patch/fix_ambiguous_display
fix: start a new line in print miner-info to avoid ambiguous display
2020-11-27 16:17:25 +01:00
Łukasz Magiera 0c1592f2d3 Merge pull request #5025 from filecoin-project/feat/accounting-tool
add a tooling to make filecoin accounting a little easier
2020-11-27 16:11:25 +01:00
Łukasz Magiera 61485beb22 fix lint 2020-11-27 16:02:01 +01:00
Łukasz Magiera 01ad4c0514 shed rpc: Allow calling with args 2020-11-27 15:57:00 +01:00
Łukasz Magiera 09b9dfc3ce Print gas limit sum in mpool stat 2020-11-27 15:55:59 +01:00
Dirk McCormick c66e594046 fix: cancel transfer cancels storage deal 2020-11-27 15:37:22 +01:00
wangchao 9ade05b33b fix: start a new line in print miner-info to avoid ambiguous display 2020-11-27 15:14:58 +08:00
Jakub Sztandera 13ff98416f Fix cs.tipsets being unbounded
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-26 23:37:59 +01:00
whyrusleeping 4f675b76ad add a tooling to make filecoin accounting a little easier 2020-11-26 13:46:19 -08:00
Łukasz Magiera a6658a858f Fix tests 2020-11-26 19:59:15 +01:00
Łukasz Magiera bfb5bad124 docsgen 2020-11-26 17:34:58 +01:00
Łukasz Magiera 3672053ae9 worker: Support setting task types at runtime 2020-11-26 17:33:34 +01:00
Łukasz Magiera 4dfec7b232 worker: Sort tasks in info 2020-11-26 16:37:11 +01:00
Łukasz Magiera 23c7728edb worker: Print task types in info 2020-11-26 16:34:51 +01:00
Łukasz Magiera aa278443d3 Merge pull request #5008 from filecoin-project/fix/worker-remote
worker: More robust remote checks
2020-11-26 16:29:51 +01:00
Łukasz Magiera 42173e29d6 Merge pull request #5019 from zgfzgf/fix-wallet-default-delete
fix wallet delete address where address is default
2020-11-26 16:10:39 +01:00
zgfzgf 32c159fa3a fix lint check 2020-11-26 21:36:40 +08:00
zgfzgf fad250058d fix wallet delete address where address is default 2020-11-26 20:55:29 +08:00
Łukasz Magiera 2304ea0077 Merge pull request #5016 from filecoin-project/fix/fsm-rm-unceroverable
storagefsm: Add missing planners
2020-11-26 12:22:48 +01:00
Łukasz Magiera 6df0340136 Merge pull request #4945 from filecoin-project/feat/deal-await-precommit
markets - separate watching for pre-commit from prove-commit
2020-11-26 12:22:00 +01:00
Łukasz Magiera 41d370557f Merge remote-tracking branch 'origin/master' into feat/deal-await-precommit 2020-11-26 12:09:52 +01:00
Łukasz Magiera dfb769c505 Merge pull request #5015 from filecoin-project/deps/jsonrpc-v0.1.2
Update go-jsonrpc to v0.1.2
2020-11-26 12:03:35 +01:00
Łukasz Magiera b916ac83cb Merge pull request #5002 from zgfzgf/fix-wallet-deadlock
fix wallet dead lock
2020-11-26 12:03:12 +01:00
Łukasz Magiera 74f040f9d5 storagefsm: Add SubmitCommit to toStatState switch 2020-11-26 12:02:35 +01:00
Łukasz Magiera fcec665267 Merge remote-tracking branch 'origin/master' into feat/deal-await-precommit 2020-11-26 11:51:36 +01:00
Łukasz Magiera 506624f509 Update go-jsonrpc to v0.1.2 2020-11-26 11:42:31 +01:00
Łukasz Magiera 1f9ca1958e Merge pull request #5005 from filecoin-project/feat/miner-slow-winpost-log
miner: log winningPoSt duration separately
2020-11-26 11:25:02 +01:00
Łukasz Magiera 91259c29d4 Merge pull request #4996 from filecoin-project/feat/configure-graphsync
Configure simultaneous requests
2020-11-26 11:24:39 +01:00
Łukasz Magiera e2278ebe6a Merge pull request #5007 from filecoin-project/fix/fsm-new-retry
storagefsm: Improve new deal sector logic
2020-11-26 11:19:25 +01:00
Łukasz Magiera eeb38fa649 storagefsm: Test fsmPlanners map 2020-11-26 10:58:07 +01:00
Łukasz Magiera ba87cb4fa9 storagefsm: Add missing planners 2020-11-26 10:57:47 +01:00
Łukasz Magiera 65653a1747 storagefsm: Add GetTicket to some maps 2020-11-26 10:53:31 +01:00
s1m0n21 663b3f4f21 add a sector check command 2020-11-26 15:02:43 +08:00
Jakub Sztandera d15d9b0fb9 Merge pull request #5010 from filecoin-project/fix/inspec-not-found
Fix actor not found in chain inspect-usage
2020-11-25 20:57:26 +01:00
Jakub Sztandera 86e25e7969 Fix actor not found in chain inspect-usage
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-25 20:04:27 +01:00
Łukasz Magiera 2e544e3e6a configure SimultaneousTransfers in node/builder 2020-11-25 19:57:38 +01:00
Łukasz Magiera 7904f135ff Merge pull request #4998 from filecoin-project/asr/json-deal
Default StartDealParams's fast retrieval field to true over JSON
2020-11-25 19:32:30 +01:00
Łukasz Magiera 89493fe2b8 storagefsm: newDealSector review 2020-11-25 18:55:58 +01:00
Łukasz Magiera 23bf3349d7 worker: More robust remote checks 2020-11-25 17:05:45 +01:00
Łukasz Magiera 6166204bac storagefsm: Improve new deal sector logic 2020-11-25 16:40:04 +01:00
Dirk McCormick 97a76a4b9a feat: update to go-graphsync v0.5.1 2020-11-25 13:18:41 +01:00
Łukasz Magiera f1948d54f0 miner: log winningPoSt duration separately 2020-11-25 11:05:06 +01:00
Dirk McCormick cd7580e6d8 refactor: no need to check for prove-commit from OnDealSectorPreCommitted 2020-11-25 10:39:42 +01:00
zgfzgf 15aa8e5253 fix wallet dead lock 2020-11-25 12:58:17 +08:00
Aayush Rajasekaran 0c7962ce5f Default StartDealParams's fast retrieval field to true when JSON unmarshalling 2020-11-24 18:13:13 -05:00
hannahhoward 694834e8d5 feat(graphsync): configure simultaneous requests
allow configuration of the number of simultaneous requests graphsync will process at once
2020-11-24 14:32:30 -08:00
hannahhoward 47a4128311 feat(markets): update to tagged go-fil-markets 2020-11-24 13:26:14 -08:00
Dirk McCormick 239e180683 feat: markets - separate watching for pre-commit from prove-commit 2020-11-24 13:24:41 -08:00
Łukasz Magiera 25070314ce Merge pull request #4989 from filecoin-project/graphsync-scale-measurements
add .sec scale to measurements; humanize for metric tags
2020-11-24 19:56:18 +01:00
Łukasz Magiera 214f46bc88 Merge pull request #4876 from filecoin-project/fix/miner-ticket-loop
storagefsm: Fix expired ticket retry loop
2020-11-24 19:54:41 +01:00
Łukasz Magiera a63ef1dcd5 Merge pull request #4984 from yaohcn/fix-log-warn
fix log format
2020-11-24 18:01:56 +01:00
Łukasz Magiera 5ed79fa73e Merge pull request #4987 from zgfzgf/feat-batch-verify-seal-print
update index to sectorNumber
2020-11-24 17:55:34 +01:00
Anton Evangelatov 2e85b42665 add .sec scale to measurements; humanize for metric tags 2020-11-24 17:52:37 +01:00
Łukasz Magiera eb2be69ace events: use %v to log errors 2020-11-24 17:51:19 +01:00
Łukasz Magiera 9cef300535 Merge pull request #4971 from filecoin-project/chore/new_sr2_deal_rollup_cmd
New SR-specific lotus-shed cmd
2020-11-24 17:50:10 +01:00
Łukasz Magiera 5f28c12f2e Merge pull request #4923 from filecoin-project/schomatis/fix/update-rpc-max-request-size
Update JSON RPC server to enforce a maximum request size
2020-11-24 17:45:47 +01:00
Łukasz Magiera f850d77f1e Merge pull request #4904 from filecoin-project/asr/genesis-remainder
Setup remainder msig signers when parsing genesis template
2020-11-24 17:06:17 +01:00
Łukasz Magiera 7c831101f3 Merge pull request #4727 from filecoin-project/nonsense/integrate-testplans-to-lotus
move testground/lotus-soup testplan from oni to lotus
2020-11-24 17:05:29 +01:00
Lucas Molas 8b8449faee update jsonrpc with max req size 2020-11-24 16:46:35 +01:00
Łukasz Magiera fe92a6e2d4 Merge pull request #4024 from zgfzgf/sector-sched
modify for unsafe
2020-11-24 16:19:17 +01:00
zgfzgf 1f9c0f8040 update index to sectorNumber 2020-11-24 20:27:35 +08:00
yaohcn 7c0b6f41d8 fix log format 2020-11-24 19:09:48 +08:00
Łukasz Magiera bb25eb980d Merge pull request #4980 from filecoin-project/feat/add-data-transfer-logging-to-miner
Add logging on data-transfer to miner
2020-11-23 22:20:14 +01:00
hannahhoward afec58f780 feat(markets): add logging on data-transfer to miner 2020-11-23 12:43:30 -08:00
Anton Evangelatov 52da5acc96 go mod replace lotus with ../../ 2020-11-23 20:43:18 +01:00
Anton Evangelatov fd640864cb Merge branch 'master' into nonsense/integrate-testplans-to-lotus 2020-11-23 20:20:44 +01:00
Anton Evangelatov 3f151351aa trigger testplans only on merge to master 2020-11-23 20:04:24 +01:00
Anton Evangelatov 844c0a3527 bump docker golang version to 1.15:buster 2020-11-23 20:00:20 +01:00
Łukasz Magiera 83b1009837 storagefsm: check getticket precommit expication correctly 2020-11-23 19:12:54 +01:00
Łukasz Magiera 85e592bbe2 storagefsm: Retry pushing messages when out-of-funds 2020-11-23 19:03:31 +01:00
Łukasz Magiera e2a6b99144 storagefsm: Fix expired ticket retry loop 2020-11-23 19:03:31 +01:00
Łukasz Magiera be2a5942fb Merge pull request #4082 from leviok/fix-nil-pointer
fix nil pointer in StateSectorPreCommitInfo
2020-11-23 18:58:32 +01:00
Łukasz Magiera ffa96389bc Merge pull request #4976 from filcloud/fix-get-sector
fix get sector bug
2020-11-23 18:58:04 +01:00
Peter Rabbitson a145819004 More linter... 2020-11-23 18:46:59 +01:00
Łukasz Magiera 0e39e760e5 Merge pull request #4929 from filecoin-project/feat/update-markets-commp-extraction
Remove all temp file generation for deals
2020-11-23 18:43:00 +01:00
zlhwdsz 721120fc60 fix get sector nil pointer bug 2020-11-24 00:00:14 +08:00
Dirk McCormick 3634ca50ca fix: sector-storage tests 2020-11-23 16:09:57 +01:00
Dirk McCormick c965696586 fix: ffiwrapper sealer test 2020-11-23 14:21:46 +01:00
Łukasz Magiera 53c39b1176 Merge pull request #4973 from shaodan/fix-workerid-format
Format workerID as string
2020-11-23 14:08:15 +01:00
Łukasz Magiera 7e2d05cfd7 Merge pull request #4975 from filecoin-project/feat/data-transfer-logging
add data transfer logging
2020-11-23 14:07:47 +01:00
Łukasz Magiera f601d1bf6b Merge pull request #4974 from zgfzgf/feat-readme-go
readme update golang version from 1.14.7 to 1.15.5
2020-11-23 13:23:29 +01:00
Łukasz Magiera 6ce14132cc Merge pull request #4956 from fireflyblock/bugfix/devnet-script
bugfix: fixup devnet script
2020-11-23 13:08:06 +01:00
zgfzgf c13ade3fbf Downgrade duplicate nonce logs to debug (#4933)
* add messagepool duplicate nonce print info

* update log.Info to log.debug and go fmt

* recover the grouping of imports

* update print from info to debug

* print format %w to %s
2020-11-23 13:03:41 +01:00
Łukasz Magiera 7d540905ac Don't return nil in StateSectorPreCommitInfo 2020-11-23 12:14:49 +01:00
Dirk McCormick 4a8df0c3fa feat: add data transfer logging 2020-11-23 10:31:39 +01:00
zgfzgf 2d2ebdcc4b readme update golang version 2020-11-23 16:15:17 +08:00
Dan Shao f3838a47c7 Format workerID as string 2020-11-23 15:07:50 +08:00
Peter Rabbitson e7f3554c62 The linter is *so* dumb:
- There is no way for me to check the error on defer ...Close(), why even ask?
- A sort function does not suffer arbitrary aliasing

Everything is terrible...
2020-11-23 06:51:52 +01:00
Peter Rabbitson 2609342356 New SR-specific lotus-shed cmd 2020-11-23 05:41:14 +00:00
leviok 9fe3649dd2 correct it 2020-11-23 11:08:21 +08:00
leviok 9b199f0476 fix nil pointer 2020-11-23 11:08:21 +08:00
zgfzgf b6893b0a3f solve merage problem 2020-11-22 16:15:30 +08:00
urugang 69bfe7b7a8 bugfix: fixup devnet script 2020-11-22 00:11:39 +08:00
hannahhoward 218f7c2c5d feat(markets): update markets, extract commp 2020-11-20 13:29:14 -08:00
Łukasz Magiera 375b7a1c4c Merge pull request #4305 from zgfzgf/fix-lotus-bench
Fix lotus bench error
2020-11-20 19:22:22 +01:00
Łukasz Magiera 3113b15217 Merge pull request #4754 from filecoin-project/fix/issue-92
emit events for peer disconnections and act upon them in the blocksync tracker
2020-11-20 18:45:35 +01:00
Łukasz Magiera 34bca28416 Merge pull request #4943 from zgfzgf/fix-policy-v7-len
change typeV7 make len
2020-11-20 18:11:19 +01:00
Łukasz Magiera 99972c9e34 Merge pull request #4924 from s1m0n21/master
Remove unused key
2020-11-20 17:02:25 +01:00
Łukasz Magiera 91a3d1d34a Merge pull request #4919 from zgfzgf/fix-incoming-validateblock-record
bug:replace with func recordFailure
2020-11-20 16:57:07 +01:00
Łukasz Magiera 71dfc2e338 Merge pull request #4916 from filecoin-project/feat/go-fil-markets-1.0.5
upgrade to go-fil-markets 1.0.5
2020-11-20 16:50:12 +01:00
Łukasz Magiera e9fae0425f Merge pull request #4915 from filecoin-project/asr/predicate-message
Improve error for ActorsVersionPredicate
2020-11-20 16:49:51 +01:00
Łukasz Magiera 17597fdd8f Merge pull request #4914 from filecoin-project/asr/version-cli
CLI to get network version
2020-11-20 16:47:35 +01:00
Łukasz Magiera 9613acd46b Merge pull request #4913 from zgfzgf/feat-forks-schedule
optimize code UpgradeTapeHeight and go fmt
2020-11-20 16:45:09 +01:00
Łukasz Magiera 4b507f5be1 Merge pull request #4911 from filecoin-project/asr/seed-old
Use version0 when pre-sealing
2020-11-20 16:41:14 +01:00
Łukasz Magiera 8508cdc00b Merge pull request #4910 from zgfzgf/fix-makefile
add go main version
2020-11-20 16:40:48 +01:00
Łukasz Magiera 4483d94db3 Merge pull request #4902 from GFZRZK/GFZRZK/patch/remove_unuseful_code_in_newstorageask
just return storedask.NewStoredAsk to reduce unuseful code
2020-11-20 16:28:03 +01:00
Łukasz Magiera 94763c2aaa Merge pull request #4849 from filecoin-project/feat/conngater
Connection Gater support
2020-11-20 16:25:02 +01:00
zgfzgf d033042d6b update code 2020-11-20 23:20:26 +08:00
Łukasz Magiera 54637d5093 Merge pull request #4767 from zgfzgf/feat-print-multiple-blocks
print multiple blocks from miner cid
2020-11-20 16:14:37 +01:00
zgfzgf 7d4bc90d42 solve merge conflicts 2020-11-20 22:34:15 +08:00
Łukasz Magiera a13690dcf1 Merge pull request #4909 from zgfzgf/fix-go-mod
update go from 1.14 to 1.15
2020-11-20 15:28:12 +01:00
Łukasz Magiera f0eac01a3c Merge remote-tracking branch 'origin/master' into nonsense/integrate-testplans-to-lotus 2020-11-20 15:22:10 +01:00
vyzo ef444676c2 combine add and remove evts and use a single emitter
to reduce likelihood of races
2020-11-20 16:15:44 +02:00
Łukasz Magiera 853f9da457 Merge pull request #4583 from filecoin-project/fix/tvx-msg-cid
tvx extract: make it work with secp messages.
2020-11-20 15:13:06 +01:00
Raúl Kripalani bb9d2b5af4 finish comment. 2020-11-20 14:05:50 +00:00
vyzo 7aec500384 emit event for peer disconnectionsa and act upon them in the blocksync peer tracker 2020-11-20 15:58:27 +02:00
Łukasz Magiera b10b6fdd11 Merge pull request #4355 from filecoin-project/shed/post-find
Shed/post find
2020-11-20 14:52:42 +01:00
Łukasz Magiera 2d9123a618 Merge pull request #4140 from filecoin-project/feat/mutex-fraction
Add options to set BlockProfileRate and MutexProfileFraction
2020-11-20 14:22:58 +01:00
Łukasz Magiera 96f004032b Merge pull request #4217 from filecoin-project/fix/post-smaller-feecap
Set lower feecap on PoSt messages with low balance
2020-11-20 13:15:48 +01:00
zgfzgf 463a647118 change typeV7 make len 2020-11-20 17:24:52 +08:00
Aayush Rajasekaran df66f48f64 Merge pull request #4937 from filecoin-project/asr/changelog
Lotus version 1.2.1
2020-11-20 00:02:42 -05:00
Aayush Rajasekaran 89ffd368b8 Lotus version 1.2.1 2020-11-19 23:47:46 -05:00
Raúl Kripalani 44040f0f3f badger options: enable IndexCache and CompactL0OnClose. 2020-11-20 00:33:43 +00:00
Łukasz Magiera 1999156d06 wdpost: always pick least-bad address 2020-11-19 20:59:54 +01:00
Łukasz Magiera b4fa099257 wdpost: fix TestWDPostDoPost 2020-11-19 18:57:43 +01:00
Łukasz Magiera b7a282decc wdpost: fix build 2020-11-19 18:30:53 +01:00
Łukasz Magiera 9f807f4aeb storageminer: Simplify AddressFor 2020-11-19 18:02:20 +01:00
Łukasz Magiera 16dbbadddf Set lower feecap on PoSt messages with low balance 2020-11-19 18:02:20 +01:00
Łukasz Magiera 648f02cbd6 Merge pull request #4922 from filecoin-project/raulk/fix-fresh-blockstore
fix blockstore directory not created automatically.
2020-11-19 17:11:48 +01:00
Łukasz Magiera 880204045b Merge pull request #4918 from ppiaas/master
WindowPoStScheduler.checkSectors() delete useless judgment
2020-11-19 17:09:37 +01:00
Łukasz Magiera 9d2208e0e8 fix lint 2020-11-19 17:08:14 +01:00
Raúl Kripalani 55061ae6fb fix blockstore directory not created automatically. 2020-11-19 15:55:02 +00:00
S1M0N21 2b611b3a99 Remove unused key 2020-11-19 23:48:28 +08:00
zgfzgf de9cef62f7 replace code with func 2020-11-19 20:46:40 +08:00
15ho ba56d02a1c fix: WindowPoStScheduler.checkSectors() delete useless judgment 2020-11-19 19:48:32 +08:00
Dirk McCormick e7b8511622 feat: upgrade to go-fil-markets 1.0.5 2020-11-19 10:16:49 +01:00
Aayush Rajasekaran b1afa2022b Improve error for ActorsVersionPredicate 2020-11-19 02:27:35 -05:00
Aayush Rajasekaran 3737a8f3cc CLI to get network version 2020-11-19 02:24:32 -05:00
zgfzgf 7b39c3a907 optimize code UpgradeTapeHeight and go fmt 2020-11-19 14:47:13 +08:00
Aayush Rajasekaran 62d20f2191 Use version0 when pre-sealing 2020-11-18 23:10:05 -05:00
zgfzgf e9664a997e add go main version 2020-11-19 10:11:35 +08:00
zgfzgf 6d1bac7f70 update go from 1.14 to 1.15 2020-11-19 08:54:02 +08:00
Łukasz Magiera dc3d17c9ea Merge pull request #4871 from filecoin-project/release/v1.2.0
v1.2.0 staging branch
2020-11-18 23:01:41 +01:00
Aayush Rajasekaran e061a8d163 Lotus version 1.2.0 2020-11-18 15:41:55 -05:00
Łukasz Magiera 9f34f98368 Merge pull request #4889 from filecoin-project/asr/callico-epoch
Set Calico epoch
2020-11-18 20:47:28 +01:00
Łukasz Magiera 226efe28e5 Merge pull request #4905 from filecoin-project/feat/max-block-size
cap maximum number of messages per block in selection
2020-11-18 16:38:19 +01:00
vyzo 452c85de98 cap maximum number of messages per block in selection 2020-11-18 12:25:26 +02:00
Łukasz Magiera 09c996d572 Merge pull request #4903 from filecoin-project/asr/delete-fix
Tweak handling of bad beneficaries in DeleteActor
2020-11-18 11:09:39 +01:00
Aayush Rajasekaran adee4b2a5e Setup remainder msig signers when parsing genesis template 2020-11-18 02:56:30 -05:00
Aayush Rajasekaran 322f34c6c6 Tweak handling of bad beneficaries in DeleteActor 2020-11-18 01:52:46 -05:00
wangchao 49f8590578 just return storedask.NewStoredAsk to reduce unuseful code 2020-11-18 13:53:48 +08:00
Aayush Rajasekaran 016f5e44c0 Set Calico epoch 2020-11-17 21:13:43 -05:00
Łukasz Magiera 9305947547 Merge branch 'IPFSMain-Official-break-loop-when-found-warm-up-sector' 2020-11-18 02:04:01 +01:00
Łukasz Magiera b92ce76a78 gofmt 2020-11-18 02:03:52 +01:00
Łukasz Magiera 379100b470 Merge branch 'break-loop-when-found-warm-up-sector' of github.com:IPFSMain-Official/lotus into IPFSMain-Official-break-loop-when-found-warm-up-sector 2020-11-18 02:03:43 +01:00
Aayush Rajasekaran 8575f5518c Merge branch 'master' into release/v1.2.0 2020-11-17 19:49:46 -05:00
Łukasz Magiera 707f9e31df Merge pull request #4897 from filecoin-project/asr/blockstore-update
Update to ipfs-blockstore 1.0.3
2020-11-18 01:49:27 +01:00
Aayush Rajasekaran 52d34c8a5e Update to ipfs-blockstore 1.0.3 2020-11-17 19:43:20 -05:00
Aayush Rajasekaran 68a16afeda Merge branch 'master' into release/v1.2.0 2020-11-17 19:40:05 -05:00
Łukasz Magiera 50146fb9b9 Merge pull request #4872 from filecoin-project/raulk/fix-blockstore-import
fix badger double open on daemon --import-snapshot; chainstore lifecycle
2020-11-18 01:36:16 +01:00
Łukasz Magiera c5470ee17e Merge pull request #4830 from filecoin-project/time/vm-flush
Gas Balancing
2020-11-18 01:34:08 +01:00
Łukasz Magiera 00335878ab Merge pull request #4712 from filecoin-project/fix/commitfailed-checks
Check (pre)commit receipt before other checks in failed states
2020-11-18 01:26:02 +01:00
Aayush Rajasekaran 4982de89b2 Fix chaos 2020-11-17 19:18:57 -05:00
Łukasz Magiera 9328d98f84 Merge pull request #3171 from filecoin-project/feat/max-block-size-sanity-check
add sanity check for maximum block size
2020-11-18 00:49:35 +01:00
Łukasz Magiera 3536ec9f85 Merge pull request #4879 from filecoin-project/fix/4833
Fix MaxSealingSectrosForDeals getting reset to 0
2020-11-17 23:41:22 +01:00
vyzo 8191654089 track oversize block errors in metrics 2020-11-17 17:18:49 -05:00
vyzo e23170d194 add sanitcy check for maximum block size 2020-11-17 17:18:49 -05:00
Jakub Sztandera e7549dbf2c Merge pull request #4896 from filecoin-project/upg/go
Update go to 1.15.5
2020-11-17 21:35:13 +01:00
Łukasz Magiera 65202668af Merge pull request #4890 from filecoin-project/feat/worker-error-codes
Add error codes to worker return
2020-11-17 21:29:42 +01:00
Jakub Sztandera 51e93feb9a Update go to 1.15.5
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 21:20:33 +01:00
Łukasz Magiera c8d985b5c7 Merge pull request #4885 from filecoin-project/asr/worker-key
Speed up worker key retrieval
2020-11-17 20:57:35 +01:00
Jakub Sztandera 7ce4e5342b Upgrade actors to v2.3.2
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:43:32 +01:00
Jakub Sztandera f580892e9e Disable gas tracing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:34 +01:00
Aayush Rajasekaran 080a1165ee create vm-flush key
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:34 +01:00
Jakub Sztandera 1413d6d4b7 Adjust gas values
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:34 +01:00
Jakub Sztandera 9b64dba4a1 Add background flushing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:34 +01:00
Jakub Sztandera f9771c67fb Fix gas multi error in virtual gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:34 +01:00
Jakub Sztandera 238174cfca Adapt virtual gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:33 +01:00
Jakub Sztandera f130cd6fca Adjust virtual gas
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:33 +01:00
Jakub Sztandera 336aa95ab5 Add metrics for VM flush duration and obj count
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-17 20:41:33 +01:00
Aayush Rajasekaran c40c513508 Merge pull request #4862 from filecoin-project/asr/circ-supply
Modify vesting schedule post-calico
2020-11-17 13:32:55 -05:00
Łukasz Magiera bfbdbc04ba docgen 2020-11-17 16:38:37 +01:00
Łukasz Magiera b242d69805 Make storiface.CallError json-friendly 2020-11-17 16:28:41 +01:00
Łukasz Magiera b8853aa4d5 Add error codes to worker return 2020-11-17 16:17:55 +01:00
Łukasz Magiera fe448e706d Merge pull request #4874 from filecoin-project/feat/update-markets-fix-cid-recording
Fix cid recording issue
2020-11-17 14:39:47 +01:00
Łukasz Magiera 193630f7b6 Merge pull request #4884 from filecoin-project/asr/api-version
Bump API versions to 1.0.0
2020-11-17 12:51:31 +01:00
Łukasz Magiera c597c43724 Bump API versions to 1.0.0 2020-11-17 12:04:06 +01:00
Łukasz Magiera 425ad9c5fa Merge pull request #4888 from filecoin-project/asr/zero-address
Avoid sending messages to the zero BLS address
2020-11-17 11:57:47 +01:00
Łukasz Magiera 693bbee953 Merge pull request #4873 from filecoin-project/feat/sdr-upgrade
Support seal proof type switching
2020-11-17 10:57:28 +01:00
Aayush Rajasekaran 92b765bd21 Merge pull request #4783 from filecoin-project/asr/1.2.0
Small consensus-critical fixes in 1.2.0
2020-11-17 01:44:33 -05:00
Aayush Rajasekaran 7838752352 Avoid sending messages to the zero BLS address 2020-11-17 01:42:11 -05:00
Aayush Rajasekaran 596b31fb9e Speed up worker key retrieval 2020-11-17 00:53:26 -05:00
Aayush Rajasekaran 2219bff1c9 SerializeParams should return ErrSerialization 2020-11-17 00:28:27 -05:00
Aayush Rajasekaran 5c791cd93b Check parent runtime allowInternal when making a new Runtime 2020-11-17 00:22:50 -05:00
Aayush Rajasekaran ce9146916a fix: actor method params deserialization error exit code 2020-11-17 00:22:50 -05:00
Aayush Rajasekaran dff88b63b2 fix: guard against self beneficiary when deleting actor 2020-11-17 00:22:50 -05:00
hannahhoward a2abeef727 feat(markets): upgrade to fix cid recording issue 2020-11-16 17:57:57 -08:00
Łukasz Magiera dd9682f2be Fix MaxSealingSectrosForDeals getting reset to 0 2020-11-17 00:28:49 +01:00
Łukasz Magiera a152d98af8 Merge pull request #4875 from filecoin-project/frrist/fix-init-pred
Fix init actor address map diffing
2020-11-17 00:20:18 +01:00
Raúl Kripalani 27c0ce4a3a fix lint. 2020-11-16 22:39:08 +00:00
Raúl Kripalani 0c6072a1a0 chainstore lifecycle: close via Close() instead of context. 2020-11-16 22:28:59 +00:00
frrist d25e5d1c08 polish: add DeffAddressMap method to init wrapper
- replace logic in predicates
2020-11-16 11:45:25 -08:00
Łukasz Magiera e0ade92b29 Fix lint warnings 2020-11-16 19:20:18 +01:00
Łukasz Magiera 8db9c19e1c mod tidy 2020-11-16 19:19:17 +01:00
Łukasz Magiera bc05618fd1 docsgen 2020-11-16 19:19:03 +01:00
Łukasz Magiera 444239a643 update ffi 2020-11-16 19:17:07 +01:00
Steven Allen bead8ac38e use the miner's proof type when proposing storage deals 2020-11-16 19:04:17 +01:00
Steven Allen 638900f97f Remove static proof type configuration from market subsystem
Instead, use proof type from miner actor. This will, in turn, use the upgraded
proof type if/when it's switched at runtime.

TODO: Consider making this some form of config option instead?
2020-11-16 19:04:17 +01:00
Steven Allen d8afd71f4c add a test to demonstrate SDR upgrade while committing sectors 2020-11-16 19:04:17 +01:00
Steven Allen 869867e92e fix compile 2020-11-16 19:04:17 +01:00
Steven Allen 508375a55c Upgrade seal proof version in miner info after the upgrade.
This is terrible, but we don't (currently) update this in the miner info.

Q: Maybe we should delay this by a few epochs? Some pre-commits could fail if we
get a reorg.
2020-11-16 19:04:17 +01:00
Steven Allen 1f91e7267d correctly set seal proof types from tests 2020-11-16 19:04:17 +01:00
Steven Allen c8ff58aae1 add basic calico test 2020-11-16 19:04:17 +01:00
Steven Allen 4f33c91f81 fix calico upgrade logic 2020-11-16 19:04:17 +01:00
Steven Allen 423ff0631d fix genesis 2020-11-16 19:04:17 +01:00
Steven Allen 948ee53080 add upgrade height where SDR is required 2020-11-16 19:04:13 +01:00
Łukasz Magiera 4d8327c29a Fix miners with no sectors in node tests 2020-11-16 19:03:30 +01:00
Łukasz Magiera cd0cb1407d update ffi 2020-11-16 19:03:30 +01:00
Łukasz Magiera 915c5e0fdd Get most tests to pass 2020-11-16 19:03:30 +01:00
Łukasz Magiera 2a7e4af5ee Fix lotus-miner/lotus-worker build 2020-11-16 19:03:30 +01:00
Steven Allen 931979809f get lotus building 2020-11-16 19:03:30 +01:00
Steven Allen 584907269a make sector-storage compile 2020-11-16 19:03:30 +01:00
Steven Allen 05db5ce426 load proof types in window post logic
This is going to be inefficient, but it should be fine in practice.
2020-11-16 19:03:30 +01:00
Steven Allen 219c695967 fix storage adapter miner 2020-11-16 19:03:30 +01:00
Steven Allen 4544d2118e fix lotus seed for proof api changes 2020-11-16 19:03:30 +01:00
Steven Allen d7c2c073a3 update specs-storage to fix build 2020-11-16 19:03:30 +01:00
Łukasz Magiera 6bea9dd178 Making sealing logic work with multiple seal proof types 2020-11-16 19:03:30 +01:00
Łukasz Magiera 0a169357f7 docgen 2020-11-16 17:52:55 +01:00
Raúl Kripalani b13a41a44d go mod tidy. 2020-11-16 16:30:17 +00:00
Łukasz Magiera 470538b082 Merge pull request #4770 from filecoin-project/fix/winpost-sset
Don't use terminated sectors for winning PoSt
2020-11-16 17:16:08 +01:00
Raúl Kripalani bac51dd4e3 daemon --import-snapshot: force head silently, without triggering reorg. 2020-11-16 16:03:47 +00:00
Raúl Kripalani d7b4f92f1f add context to ChainStore. 2020-11-16 15:52:19 +00:00
Raúl Kripalani 87d6daf745 fix blockstore double open issue on --import-snapshot.
Fixes https://github.com/filecoin-project/lotus/issues/4850.
2020-11-16 15:21:47 +00:00
Łukasz Magiera 49d3bb9497 Merge pull request #4851 from filecoin-project/fix/daemon-test-mode-restart
Truncate genesis file before generating
2020-11-16 16:13:33 +01:00
Łukasz Magiera d4f6e1ddb4 Merge pull request #4853 from filecoin-project/feat/print-consensus-fault
Print Consensus Faults in miner info
2020-11-16 15:55:37 +01:00
刘林欣 b63687795d break loop when found warm up sector 2020-11-16 17:51:02 +08:00
Aayush Rajasekaran 96d56ec096 Modify vesting schedule post-calico 2020-11-15 19:27:45 -05:00
Aayush Rajasekaran 6d0b3978b9 Merge branch 'master' into release/v1.2.0 2020-11-15 19:03:18 -05:00
Jakub Sztandera afe6c51016 Merge pull request #4813 from filecoin-project/chore/blockstore_nits
Chore/blockstore nits
2020-11-15 19:52:10 +01:00
Jakub Sztandera 09be3f0a01 Merge pull request #4855 from filecoin-project/fix/bitswap-start-panic
chore(dep): update bitswap to fix an initialization race that could panic
2020-11-14 16:50:27 +01:00
Aayush Rajasekaran 6667220a27 Merge pull request #4748 from zgfzgf/fix-chain-decode-params
add chain base64 decode params
2020-11-13 18:54:03 -05:00
Aayush Rajasekaran 1af1ceb1e0 Merge pull request #3646 from filecoin-project/feat/delayed-pubsub-subscribe
delayed pubsub subscribe for messages topic
2020-11-13 17:44:32 -05:00
Steven Allen ae76711ab4 chore(dep): update bitswap to fix an initialization race that could panic
In rare cases, if bitswap receives a message before it finishes starting up, it
could panic. This release fixes that.
2020-11-13 14:11:29 -08:00
Jakub Sztandera fe339d46eb Print Consensus Faults in miner info
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-13 21:21:24 +01:00
vyzo 91e2530e11 remove dtypes dependency from api; move NetBlockList type to api/types.go 2020-11-13 21:11:17 +02:00
Dirk McCormick f9fc601567 fix: truncate genesis file before generating 2020-11-13 17:30:12 +01:00
vyzo 2b68ba5f1d fix command name 2020-11-13 14:43:18 +02:00
vyzo 4b187b85eb close existing connections that match the filters when adding rules to the connection gater 2020-11-13 14:38:13 +02:00
vyzo b8884adaf1 implement connection gating cli 2020-11-13 14:27:44 +02:00
vyzo b71f069854 implement connection gater API 2020-11-13 13:59:38 +02:00
vyzo 5a0b9f4197 connectiong gater API scaffolding 2020-11-13 12:17:48 +02:00
vyzo 4b1d1b6540 connection gater for libp2p host 2020-11-13 11:44:29 +02:00
Aayush Rajasekaran 15fe726e65 Correct CHANGELOG 2020-11-13 04:24:35 -05:00
Aayush Rajasekaran 17c2c0d1c8 Merge pull request #4845 from filecoin-project/asr/changelog
Lotus version 1.1.3
2020-11-13 04:23:21 -05:00
Aayush Rajasekaran 2971dd4317 Lotus version 1.1.3 2020-11-13 04:09:48 -05:00
Łukasz Magiera 6742a74260 Merge pull request #4814 from filecoin-project/feat/rw-close
update libp2p for stream interface changes
2020-11-13 00:23:29 +01:00
Łukasz Magiera 41af94f1b7 Merge pull request #4835 from filecoin-project/feat/fast-pred-wrap
predicates: Fast StateGetActor wrapper
2020-11-13 00:07:27 +01:00
Łukasz Magiera 6bb67f2fe9 Merge pull request #4834 from filecoin-project/feat/sector-gc
miner: Basic storage cleanup command
2020-11-13 00:03:17 +01:00
Łukasz Magiera 961a25298b predicates: Fast StateGetActor wrapper 2020-11-12 23:45:06 +01:00
Steven Allen 5f1737379a update libp2p for stream interface changes 2020-11-12 13:57:19 -08:00
Łukasz Magiera c5c0185943 miner: Basic storage cleanup command 2020-11-12 21:27:16 +01:00
Łukasz Magiera 8fdb9148e4 Merge pull request #4832 from filecoin-project/fix/logging-quieter
drop a few logs down to debug
2020-11-12 20:57:35 +01:00
Łukasz Magiera d3d5f8d7f0 Merge branch 'master' into fix/logging-quieter 2020-11-12 20:45:41 +01:00
Łukasz Magiera 99031bae17 Merge pull request #4709 from filecoin-project/feat/mute-logs
Make some logs quieter
2020-11-12 20:40:10 +01:00
Łukasz Magiera 56373b0d46 Merge pull request #4817 from filecoin-project/feat/docsgen-miner
docsgen: Support miner/worker
2020-11-12 20:31:48 +01:00
whyrusleeping 7921f8d713 drop a few logs down to debug 2020-11-12 11:25:22 -08:00
Łukasz Magiera 6d3e59e047 Merge pull request #4824 from filecoin-project/feat/winpost-warmup
miner: Winning PoSt Warmup
2020-11-12 20:23:07 +01:00
Łukasz Magiera 63f13977ce Make docsgen more deterministic 2020-11-12 20:18:39 +01:00
Łukasz Magiera 408183c7a6 docsgen: Fix CI 2020-11-12 20:15:57 +01:00
Łukasz Magiera 11b041224e fsm: Allow manually resurrecting removed sectors 2020-11-12 19:37:54 +01:00
Łukasz Magiera 36b78b1891 Merge pull request #4831 from filecoin-project/feat/miner-storagelistsectors
miner: Storage list sectors command
2020-11-12 19:26:01 +01:00
Łukasz Magiera a6d061d0f6 Merge pull request #4827 from filecoin-project/fix/startup-migration-crash
Fix: dont crash on startup if funds migration fails
2020-11-12 19:17:21 +01:00
Łukasz Magiera bf547112de miner: Storage list sectors command 2020-11-12 19:11:58 +01:00
Aayush Rajasekaran 5d9c79811f Update to actors v2.3.0
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-12 18:49:11 +01:00
Łukasz Magiera 28ffa8ca06 Merge pull request #4819 from liyue201/master
Delete the duplicate output
2020-11-12 18:13:51 +01:00
Łukasz Magiera 55240b3e07 Merge pull request #4826 from filecoin-project/test/stop-mining
Stop mining at the end of tests
2020-11-12 17:40:13 +01:00
Łukasz Magiera 697a0a3b95 Merge pull request #4825 from filecoin-project/test/fund-mgr-panic
test for FundManager panic to ensure it is fixed
2020-11-12 17:39:30 +01:00
Dirk McCormick 26e12e6f6a fix: dont crash on startup if funds migration fails 2020-11-12 17:15:05 +01:00
Dirk McCormick 0e3e449bf8 test: stop mining at the end of tests 2020-11-12 16:23:46 +01:00
Dirk McCormick f3922e7485 test: for FundManager panic to ensure it is fixed 2020-11-12 15:35:43 +01:00
Łukasz Magiera fb05bb7f07 miner: Winning PoSt Warmup 2020-11-12 15:34:16 +01:00
stirlingx 8246149544 Delete unnecessary output 2020-11-12 18:59:36 +08:00
Łukasz Magiera d525acdeda Merge pull request #4797 from zgfzgf/fix-2k-chain-syn
2k sync BootstrapPeerThreshold
2020-11-12 10:33:04 +01:00
Łukasz Magiera 2f0075752d docsgen: generate miner/worker docs 2020-11-12 10:31:12 +01:00
Łukasz Magiera 8409e155d4 docsgen: Support miner/worker structs 2020-11-12 10:29:42 +01:00
Aayush Rajasekaran 3a3986320c Merge pull request #4804 from filecoin-project/feat/storage-retwait-cleanup
Expand sched-diag; Command to abort sealing calls
2020-11-12 02:11:15 -05:00
Aayush Rajasekaran 498477da04 Nit: ArgsUsage param rename 2020-11-12 02:04:55 -05:00
Peter Rabbitson 29817b6617 Remove all Chain GC wrappings/types
There is no practical way to do GC against the chainstore given the current
state of affairs: remove all GC-related types for the time being.
2020-11-12 06:49:53 +01:00
Peter Rabbitson 7be7a9b5e3 Stop referring to github.com/ipfs/go-ipfs-blockstore outside of lib 2020-11-12 06:01:35 +01:00
Jakub Sztandera a389622ac6 Merge pull request #4811 from filecoin-project/raulk/badger-ctx-tests
badger blockstore: minor improvements
2020-11-12 03:55:31 +01:00
Raúl Kripalani 72547f9ec3 badger tests: fix fd leak. 2020-11-11 23:12:57 +00:00
Raúl Kripalani 04a866121e badger/AllKeysChan(): respect context. 2020-11-11 23:12:16 +00:00
Travis Person f4df58ed0f Merge pull request #4810 from filecoin-project/fix/lotus-stats-flags
lotus-stats: fix influx flags
2020-11-11 14:36:37 -08:00
Aayush Rajasekaran bc7eaee6d3 Merge pull request #4808 from filecoin-project/fix/fund-mgr-panic
Fix panic in FundManager
2020-11-11 16:43:13 -05:00
Travis Person ff7bdb5140 lotus-stats: fix influx flags 2020-11-11 21:17:36 +00:00
Dirk McCormick 6184d228c1 fix: panic in FundManager 2020-11-11 20:32:26 +01:00
Łukasz Magiera 8ac495723e gofmt 2020-11-11 17:42:23 +01:00
Łukasz Magiera 09f9f871a3 Create a command to abort sealing calls 2020-11-11 17:39:12 +01:00
Łukasz Magiera 2a3d930933 Hide ret-done tasks in sealing jobs by default 2020-11-11 16:48:04 +01:00
Łukasz Magiera bd71bf2379 Expand sched-diag 2020-11-11 16:47:44 +01:00
Łukasz Magiera 6f593d53d0 Merge pull request #4795 from liyue201/master
Modify printf format
2020-11-11 16:03:26 +01:00
Łukasz Magiera d1e4211f4b Merge pull request #4803 from filecoin-project/fix/paych-mgr-ctx-cancel-race
Fix race in paych manager when req context is cancelled
2020-11-11 15:58:16 +01:00
Dirk McCormick 9745f676ed fix: race in paych manager when req context is cancelled 2020-11-11 14:40:48 +01:00
Aayush Rajasekaran 90dd39d581 Merge pull request #4787 from filecoin-project/refactor/fund-mgr-integ
refactor: integrate new FundManager
2020-11-11 03:58:59 -05:00
Dirk McCormick 9011e88f9f fix: go mod tidy 2020-11-11 09:45:32 +01:00
Dirk McCormick 0e20a65a0b feat: upgrade markets to v1.0.4 2020-11-11 09:41:27 +01:00
Aayush Rajasekaran 28c4a2d8fa Merge pull request #4798 from filecoin-project/asr/address-update
Update to latest go-address
2020-11-11 03:39:02 -05:00
Dirk McCormick ea810ac806 fix: order of addresses in storage adapter reserve funds 2020-11-11 08:59:14 +01:00
zgfzgf 11ed015dca update BootstrapPeerThreshold = 1 2020-11-11 14:44:35 +08:00
Aayush Rajasekaran 029c516cbc Update to latest go-address 2020-11-11 00:46:02 -05:00
zgfzgf c6b9e4951f add testground BootstrapPeerThreshold 2020-11-11 13:20:59 +08:00
hannahhoward ebd6b0da49 fix(deps): update to tagged go-graphsync 2020-11-10 21:18:29 -08:00
hannahhoward cceb74a66e docs(apidocs): update for new funcs 2020-11-10 21:11:05 -08:00
hannahhoward 9f7204ee26 feat(builder): finish new FundManager setup
Finish setup of new FundManager and provide a migration for previously reserved funds
2020-11-10 21:11:05 -08:00
Dirk McCormick 0d243bb824 refactor: integrate new FundManager 2020-11-10 21:11:05 -08:00
Aayush Rajasekaran e53b0ef068 Merge pull request #4736 from filecoin-project/refactor/fund-mgr
Refactor FundManager
2020-11-10 23:36:56 -05:00
zgfzgf 1301fd6ddb 2k sync BootstrapPeerThreshold 2020-11-11 12:20:31 +08:00
Dirk McCormick 0101436933 fix: flaky TestFundManagerWithdrawalLimit test 2020-11-10 19:44:26 -08:00
Dirk McCormick 0e0ffc9c10 refactor: remove FundManager.Wait 2020-11-10 19:44:26 -08:00
Dirk McCormick a51a62cb42 fix: batch withdrawal requests by wallet 2020-11-10 19:44:26 -08:00
Dirk McCormick 86c204d8a8 refactor: improve FundManager naming and docs 2020-11-10 19:44:26 -08:00
Dirk McCormick 1182927fe5 refactor: add wallet param to FundManager methods 2020-11-10 19:44:26 -08:00
Dirk McCormick 4d3cd7dcb8 refactor: FundManager 2020-11-10 19:44:26 -08:00
stirlingx 8b889139e9 Modify printf format 2020-11-11 10:39:13 +08:00
Aayush Rajasekaran 1323dbddfe Merge pull request #4793 from filecoin-project/asr/bitfield-update
Update to latest go-bitfield
2020-11-10 20:36:08 -05:00
Aayush Rajasekaran c02341c85f Merge pull request #4788 from filecoin-project/feat/client-dealstats
Add client deal-stats CLI
2020-11-10 18:09:58 -05:00
Aayush Rajasekaran 735c04f999 Merge pull request #4681 from filecoin-project/badger-viewable
move to native badger blockstore; leverage zero-copy View() to deserialize in-place
2020-11-10 18:08:12 -05:00
Raúl Kripalani bc6965c86f skip callers in badger log for useful line info. 2020-11-10 22:50:53 +00:00
Aayush Rajasekaran 075297d8ad Update to latest go-bitfield 2020-11-10 17:43:50 -05:00
Raúl Kripalani 8f5847b8e3 fix condition. 2020-11-10 22:34:13 +00:00
Łukasz Magiera ab7ee2f8a9 Merge pull request #4730 from filecoin-project/feat/deal-id-change-in-sector-committed
Handle deal id changes in OnDealSectorCommitted
2020-11-10 22:18:28 +01:00
Łukasz Magiera 18aa97f962 Merge pull request #4779 from filecoin-project/feat/work-track-hostname
storage: Track worker hostnames with work
2020-11-10 20:38:44 +01:00
Łukasz Magiera 2ae0edc4df Merge pull request #4688 from filecoin-project/feat/head-change-coalscer
head change coalescer
2020-11-10 19:40:54 +01:00
Łukasz Magiera 89632416ba Merge pull request #4786 from zgfzgf/fix-sectors-cmd-list
cmd sectors commitIDs len debug
2020-11-10 19:18:17 +01:00
Łukasz Magiera 61fa94617d Merge pull request #4778 from filecoin-project/fix/miner-fixes
Fix scheduler lockups after storage is freed
2020-11-10 19:17:10 +01:00
Raúl Kripalani 659ceaabdd fix comment. 2020-11-10 17:51:11 +00:00
Raúl Kripalani d79ff24014 remove benchmark. 2020-11-10 17:50:21 +00:00
Łukasz Magiera 1df7318450 Merge pull request #4785 from strahe/fix/fast-connect-bootstrappers
async connect to bootstrappers
2020-11-10 17:45:06 +01:00
Łukasz Magiera 60debfb0a6 Add client deal-stats CLI 2020-11-10 17:33:05 +01:00
Raúl Kripalani 379dd02fb6 upgrade dependencies. 2020-11-10 16:32:23 +00:00
Raúl Kripalani 339391ecfb Revert "(to be reverted) add debug.PrintStack."
This reverts commit f8c3756ac0.
2020-11-10 16:08:41 +00:00
Raúl Kripalani 38c404e04e vm: construct CBOR store properly. 2020-11-10 15:49:33 +00:00
Raúl Kripalani f8c3756ac0 (to be reverted) add debug.PrintStack. 2020-11-10 15:22:17 +00:00
Raúl Kripalani 360194b29b fix comment. 2020-11-10 15:02:55 +00:00
Raúl Kripalani af7236f7e7 migrate direct usages blockstore.{Get=>View}. 2020-11-10 13:35:36 +00:00
Raúl Kripalani 6d78de95a1 remove unused and misleading cachebs store. 2020-11-10 13:34:56 +00:00
Raúl Kripalani 577476b8fe import Viewable non-terminal blockstores. 2020-11-10 13:16:24 +00:00
Raúl Kripalani 54bf7c99d7 add the viewable trait to our gazillion blockstores. 2020-11-10 12:40:32 +00:00
少爷 e340996919 delete new context 2020-11-10 17:40:48 +08:00
zgfzgf f5401317c9 cmd sectors commitIDs len 2020-11-10 17:37:36 +08:00
少爷 de2637b4fa async connect to bootstrappers 2020-11-10 17:23:46 +08:00
hannahhoward ea726c9f17 feat(markets): update to 1.0.1
update to tagged 1.0.1 release & also fix lint error
2020-11-09 20:02:02 -08:00
hannahhoward 314dda08e8 fix(markets): correct deal equality check
correct comparison of deal equality (a strict == is not enough)
2020-11-09 19:23:58 -08:00
hannahhoward b010ac21d3 style(lint): fix lint issues 2020-11-09 18:48:28 -08:00
hannahhoward 7519bdde42 feat(markets): check deal equality
in OnDealSectorCommitted, verify that deals looked up match the deal proposals which were made
2020-11-09 18:48:28 -08:00
hannahhoward 09a0d6e607 style(lint): fix lint issues 2020-11-09 18:48:28 -08:00
hannahhoward a3e93554e5 refactor(markets): refactor OnDealSectorCommitted
extract OnDealSectorCommitted from adapters and test
2020-11-09 18:48:28 -08:00
hannahhoward d2acc78787 feat(markets): handle deal ID changes
make OnDealSectorCommitted handle changes to deal ids
2020-11-09 18:48:28 -08:00
Lucas Molas 3ec25cbece restrict parse fil string length (#4780) 2020-11-09 22:12:32 -03:00
Łukasz Magiera 5caa277261 storage: Track abandoned work more correctly 2020-11-09 23:38:20 +01:00
Łukasz Magiera f819e71d12 storage: Separate returned jobs in jobs cli 2020-11-09 23:13:29 +01:00
Łukasz Magiera 27a9dd3bbb storage: Track worker hostnames with work 2020-11-09 23:09:04 +01:00
Łukasz Magiera 5b8f555221 sched: Update after tasks finish preparing 2020-11-09 21:44:28 +01:00
Łukasz Magiera fbc05fa5a8 stores: Report storage changes quickly 2020-11-09 21:43:52 +01:00
Łukasz Magiera 95d9084899 Merge pull request #4765 from zgfzgf/feat-sealing-garbage
optimize pledge sector
2020-11-09 21:06:33 +01:00
Łukasz Magiera f31383516e Merge pull request #4769 from zgfzgf/feat-storage-work-returntype
optimize code replace strings with constants
2020-11-09 21:05:23 +01:00
Łukasz Magiera 82e88a3239 Merge pull request #4775 from filecoin-project/fix/pond
Make pond work again
2020-11-09 21:03:58 +01:00
Łukasz Magiera 3a3270b37c nv7 upgrade: Don't use terminated sectors for winning PoSt 2020-11-09 18:52:10 +01:00
Łukasz Magiera 290414e935 wallet: Don't return null from WalletList 2020-11-09 18:42:43 +01:00
Łukasz Magiera e1122404d1 pond: Fix MpoolPushMessage call 2020-11-09 18:42:22 +01:00
vyzo 185653f85a improve coalescing 2020-11-09 13:35:42 +02:00
Łukasz Magiera 72a3b41315 Merge pull request #4764 from filecoin-project/asr/specs-update
Update to actors v2.3.0
2020-11-09 10:27:30 +01:00
zgfzgf 5bcc6339b4 optimize code replace strings with constants 2020-11-09 16:21:16 +08:00
zgfzgf 8c8396af59 print multiple blocks from miner 2020-11-09 10:57:36 +08:00
Aayush Rajasekaran 7b8158b1af Update to actors v2.3.0 2020-11-08 16:00:22 -05:00
zgfzgf 3665f90795 optimize pledge sector 2020-11-08 16:24:50 +08:00
Whyrusleeping f225b7b928 Merge pull request #4758 from filecoin-project/steb/update-yamux
update yamux
2020-11-06 13:34:11 -08:00
Steven Allen 4a3ff8ff9e update yamux
This new release:

* Ensures we send window updates on-time to avoid sawtooth bandwidth utilization.
* Limits the number of outgoing pings to 1 (no need to send any more at a time).
* Limits the number of buffered pongs to 32 (there should never be more than 1,
  maybe 2, at a time).
* Fast-tracks outgoing pings so they don't get stuck behind large queued writes.
2020-11-06 12:51:50 -08:00
vyzo 378d7a1ad9 stupid linter 2020-11-06 22:26:47 +02:00
vyzo 9a76c648f1 unit test for head change coalescer 2020-11-06 22:26:47 +02:00
vyzo 6660f81363 minimize coalesce delay for tests 2020-11-06 22:26:47 +02:00
vyzo 84c9d1dbb7 hook head change coalescer to mpool 2020-11-06 22:26:24 +02:00
vyzo 08aab1c48a make Close satisfy io.Closer 2020-11-06 22:26:24 +02:00
vyzo 9149ae2164 godoc and final dispatch when closing the coalescer 2020-11-06 22:26:24 +02:00
vyzo ec13c5f80d coalesce both reverts and applys in the same manner 2020-11-06 22:26:24 +02:00
vyzo 4058f5642f head change coalescer 2020-11-06 22:26:24 +02:00
Łukasz Magiera 48bdf79b5b Merge pull request #4756 from filecoin-project/feat/upgr-bitfield
Update go-bitfield
2020-11-06 21:18:47 +01:00
Anton Evangelatov bf500711b3 update Dockerfiles; integrate lotus-soup and graphsync in Lotus CI; update go.mod and references 2020-11-06 21:04:11 +01:00
Anton Evangelatov f7f5a27ebf remove oni submodule 2020-11-06 21:03:56 +01:00
Anton Evangelatov 1f678c17d3 merge filecoin-project/oni subtree in testplans/ 2020-11-06 21:02:06 +01:00
Jakub Sztandera 5a34e5b2bf Merge pull request #4599 from filecoin-project/feat/sync-manager-redux
rewrite sync manager
2020-11-06 21:01:26 +01:00
Raúl Kripalani 3577300aee Merge branch 'master' into badger-viewable 2020-11-06 19:34:25 +00:00
Jakub Sztandera 258cc0067b Update go-bitfield v0.2.2
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-06 20:16:05 +01:00
Raúl Kripalani 0b2a02c8ea remove redundant import. 2020-11-06 18:57:04 +00:00
Raúl Kripalani 7c442e1a98 godocs. 2020-11-06 18:55:13 +00:00
Raúl Kripalani 85e37e4b70 make the value log loading mode mmap, to leverage zero-copy access. 2020-11-06 18:39:08 +00:00
Raúl Kripalani de4a0725f3 rename files. 2020-11-06 18:32:44 +00:00
Łukasz Magiera 426c2e8c2b Merge pull request #4717 from filecoin-project/feat/optional-chain-bitswap
Optional chain Bitswap
2020-11-06 16:49:39 +01:00
Łukasz Magiera db1159414f Merge pull request #4734 from filecoin-project/asr/devnet-kumquat
Run kumquat upgrade on devnets
2020-11-06 16:48:29 +01:00
Łukasz Magiera 6bb8521a55 Merge pull request #4719 from filecoin-project/frrist/msig-diffing
polish: add msig pendingtxn diffing and comp
2020-11-06 16:47:29 +01:00
Łukasz Magiera 3c9e438a68 Merge pull request #4617 from filecoin-project/termination-penalty
Add `termination-estimate` to get an estimation for how much a termination penalty will be
2020-11-06 16:44:44 +01:00
Łukasz Magiera 2f9d19c42c Merge pull request #4726 from filecoin-project/feat/shed-id-cid
shed: Util for creating ID CIDs
2020-11-06 16:03:45 +01:00
Łukasz Magiera ee9df63221 shed: Util for creating ID CIDs 2020-11-06 15:42:09 +01:00
Łukasz Magiera 2076abf0c1 Merge pull request #4745 from filcloud/reward-data-type
match data type for reward state api
2020-11-06 15:29:38 +01:00
Łukasz Magiera 273da38bdd Merge pull request #4739 from filecoin-project/feat/gas-estim-limit-ts
Use TSK passed to GasEstimateGasLimit
2020-11-06 11:59:55 +01:00
zgfzgf d98e989417 chain decode params encoding 2020-11-06 15:02:08 +08:00
zgfzgf 7f47bf452a add chain base64 decode params 2020-11-06 13:36:24 +08:00
Frank a3f5d0f590 match data type for reward state api 2020-11-06 11:06:57 +08:00
Jakub Sztandera 94438bf3cd Use TSK passed to GasEstimateGasLimit
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-05 21:14:38 +01:00
Travis Person df7f13d069 Merge pull request #4718 from filecoin-project/feat/stats-update
Update lotus-stats with a richer cli
2020-11-05 11:55:31 -08:00
Raúl Kripalani 8befc0c1f5 export metrics from bench. 2020-11-05 19:09:47 +00:00
vyzo dab20efc99 add env var controlling msgs sync epochs 2020-11-05 18:09:04 +02:00
vyzo 0e40a04975 nicer check using Time objects 2020-11-05 18:08:52 +02:00
vyzo c6cd699f0d fix nearsync check 2020-11-05 18:08:35 +02:00
vyzo 3306bdec29 fix tests 2020-11-05 18:08:13 +02:00
vyzo 32b7797394 only subscribe to messages topic if we are synced within 10 epochs 2020-11-05 18:08:13 +02:00
Raúl Kripalani b1aa43741a remove file that sneaked in. 2020-11-05 13:34:41 +00:00
Jakub Sztandera c966054bf6 Merge pull request #4728 from filecoin-project/feat/storage-gas-multi-conf
Move gas multiplier as property of pricelist
2020-11-05 13:41:44 +01:00
Aayush Rajasekaran 105f0fd49a Run kumquat upgrade on devnets 2020-11-05 04:21:03 -05:00
Jakub Sztandera fe95d19e29 Move gas multiplier as property of pricelist
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-04 20:13:17 +01:00
Jakub Sztandera 2a294f048a Merge pull request #4713 from filecoin-project/fix/gitmodules
Fix .gitmodules
2020-11-04 19:58:37 +01:00
Travis Person bd4322f56f Update lotus-stats with a richer cli
This updates lotus stats to use urfave instead of the golang flags
package. This brings with it some common features from other lotus tools
such as the use of the `FULLNODE_API_INFO` env and other parts of the
lotus cli package.

This also includes the latest dashboard.
2020-11-04 18:06:17 +00:00
Raúl Kripalani a411342f0c export more metrics. 2020-11-04 17:09:01 +00:00
Raúl Kripalani 370ef93db6 chainstore: new ForceHeadSilent to support benchmarks. 2020-11-04 14:39:01 +00:00
frrist 7d540fc0d8 polish: add msig pendingtxn diffing and comp 2020-11-03 17:25:53 -08:00
Raúl Kripalani fd1439f284 fix lint. 2020-11-03 22:49:55 +00:00
Łukasz Magiera a1e1b03ca4 Optionally allow bitswap for chainstore 2020-11-03 23:44:44 +01:00
Raúl Kripalani 87ce2f774d lotus-bench: write separate profiles for import and validation. 2020-11-03 22:40:21 +00:00
Łukasz Magiera 9deda06ec6 Merge pull request #4710 from filecoin-project/feat/https-gh-blst
Use https for blst submodule
2020-11-03 23:05:42 +01:00
Łukasz Magiera b0824ada15 bufbs: Get from write blockstore first 2020-11-03 23:02:01 +01:00
Raúl Kripalani 5487356370 fix lint errors. 2020-11-03 21:23:41 +00:00
Jakub Sztandera 97a06444f2 Fix .gitmodules
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-03 20:21:55 +01:00
Raúl Kripalani 809111336a Merge branch 'master' into badger-viewable 2020-11-03 18:29:10 +00:00
Raúl Kripalani 18418128c3 lotus-bench: make start tipset walkback start from end tipset. 2020-11-03 18:15:59 +00:00
Raúl Kripalani 581ac5b019 lotus-bench: add ability to specify tipsets. 2020-11-03 18:11:43 +00:00
Łukasz Magiera cde0e58e39 Check (pre)commit receipt before other checks in failed states 2020-11-03 18:47:29 +01:00
Raúl Kripalani 842c8ca056 improve lotus-bench; support running validation on a store without a CAR. 2020-11-03 17:35:31 +00:00
Łukasz Magiera fe4298674f Use https for blst submodule 2020-11-03 15:51:33 +01:00
zgfzgf 3e7efad0fd modify lint error 2020-11-03 21:28:01 +08:00
Łukasz Magiera 9270ac6358 Make some logs quieter 2020-11-03 13:28:41 +01:00
Łukasz Magiera d421274dcd Merge pull request #4619 from filecoin-project/feat/fix-memory-leaks-data-transfer
Fix memory leaks in data transfer
2020-11-03 13:06:09 +01:00
zgfzgf 3c2cd506ec modify merge lotus-bench 2020-11-03 19:56:04 +08:00
Łukasz Magiera 1df02d5a93 Merge pull request #4691 from filecoin-project/fix/metrics
fix metrics wiring.
2020-11-03 11:50:43 +01:00
Łukasz Magiera fdd90e036f Merge pull request #4697 from filecoin-project/asr/rename-builtins
Rename builtin actor generators
2020-11-03 11:47:55 +01:00
Łukasz Magiera 761c9ee2b6 Merge pull request #4699 from blockchain-lib/master
struct name incorrect
2020-11-03 11:47:18 +01:00
Łukasz Magiera c215615da3 Merge pull request #4704 from zgfzgf/fix-runtime-gas-print
modify runtime gasUsed printf
2020-11-03 11:46:26 +01:00
Łukasz Magiera b7b6252048 Merge pull request #4705 from filecoin-project/asr/delete-default
Correctly delete the default wallet address
2020-11-03 11:44:25 +01:00
Łukasz Magiera 6d27531663 Merge pull request #4630 from filecoin-project/feat/new-blst
feat: integrate new optional blst backend and verification optimizations from proofs
2020-11-03 11:43:12 +01:00
Łukasz Magiera 3c44407c57 circle: Fix lotus-soup build 2020-11-03 11:29:54 +01:00
Łukasz Magiera bfa04da572 Merge pull request #4692 from filecoin-project/feat/shed-rpc
sched: Interactive RPC Shell
2020-11-03 11:24:05 +01:00
Łukasz Magiera e547710c6d Merge pull request #4696 from filecoin-project/feat/optim-heaviest-sync
Call GetHeaviestTipSet() only once when syncing
2020-11-03 11:23:23 +01:00
dignifiedquire 5c3055219c update filecoin-ffi to master 2020-11-03 11:02:58 +01:00
Aayush Rajasekaran 46619fbb8d Correctly delete the default wallet address 2020-11-03 03:00:18 -05:00
zgfzgf 4d9c90ed4a modify runtime gasUsed printf 2020-11-03 15:46:35 +08:00
hannahhoward af1743f9f3 fix(datatransfer): update with memory leak fixes 2020-11-02 17:25:02 -08:00
stirlingx b5d2f01993 Update selector_task.go 2020-11-03 09:20:48 +08:00
Aayush Rajasekaran af8cc3d29f Rename builtin actor generators 2020-11-02 18:42:30 -05:00
Jakub Sztandera e68f69b63b Call GetHeaviestTipSet() only once when syncing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-11-02 22:56:26 +01:00
Łukasz Magiera a4cf6fa715 sched: Interactive RPC Shell 2020-11-02 20:38:15 +01:00
Raúl Kripalani 656ece06e5 fix metrics wiring.
Some components like go-ds-measure, go-ipfs-blockstore and go-bitswap
expose metrics via ipfs/go-metrics-interface, but Lotus never injects
the Prometheus exporter (ipfs/go-metrics-prometheus). Therefore, those
metrics never surface in instrumentation.

Instead, Lotus uses OpenCensus directly.

This commit injects the Prometheus exporter for go-metrics-interface, and
instructs the OpenCensus Prometheus exporter to use the DefaultRegistry.

This has the effect of exposing blending the metrics of both metrics
libraries.

With this patch, the datastore, cache utilisation, and bitswap metrics
are now exported via the /debug/metrics endpoint.

This commit also fixes an issue where the metrics scope was empty, making
go-metrics-interface default to "<no-scope>". Angle brackets are inadmissible
characters for Prometheus, so it was refusing to export the affected metrics.
(These were the ARC cache metrics.)
2020-11-02 17:56:49 +00:00
dignifiedquire 1d17d61dbc update filecoin-ffi 2020-11-02 17:05:52 +01:00
dignifiedquire d457b7a5e3 update filecoin-ffi 2020-11-02 17:05:52 +01:00
dignifiedquire 398a831701 update blst and filecoin-ffi 2020-11-02 17:05:52 +01:00
dignifiedquire 61fa03b1ad use supranation/blst@0.2.0 directly 2020-11-02 17:05:52 +01:00
dignifiedquire 56980ffc1f remove extern/fil-blst 2020-11-02 17:05:52 +01:00
Raúl Kripalani d1ebf3c769 introduce non-pooled StorageKey method. 2020-11-02 13:32:07 +00:00
Raúl Kripalani 7facdf63c9 support legacy keying: base32 multihashes *sigh*. 2020-11-02 12:55:56 +00:00
Raúl Kripalani f4e13ffd80 actually register prometheus gauge. 2020-11-01 20:01:57 +00:00
Raúl Kripalani 44e34d9606 lotus-bench: native badger SyncWrites=false. 2020-11-01 19:54:47 +00:00
Raúl Kripalani 35ccd73a86 lotus-bench: improve for observability. 2020-11-01 19:52:53 +00:00
Raúl Kripalani aece624d1c lotus-bench: add support for native badger blockstore. 2020-11-01 18:54:35 +00:00
Raúl Kripalani c2355b18f9 write heap and allocs profile in lotus-bench. 2020-11-01 18:00:08 +00:00
Raúl Kripalani 634467d24b go mod tidy. 2020-11-01 17:38:38 +00:00
Raúl Kripalani 0b8a21ee16 badger: restore prev. max table size (64MiB; default). 2020-11-01 17:26:37 +00:00
Raúl Kripalani 72e573d98d fix lint. 2020-11-01 17:09:14 +00:00
Raúl Kripalani 5a98660d1b make repo.Blockstore() idempotent; wrap in IDStore. 2020-11-01 16:56:20 +00:00
Raúl Kripalani d8d85373f5 fix lotus-shed datastore commands. 2020-11-01 13:50:41 +00:00
Raúl Kripalani a16d7f221e Merge branch 'master' into badger-viewable 2020-11-01 13:10:56 +00:00
Raúl Kripalani 95f512aa69 update/add dependencies. 2020-11-01 13:05:07 +00:00
Raúl Kripalani 099c4b5e1d migrate repo.Datastore(/chain) to repo.Blockstore(). 2020-11-01 13:03:21 +00:00
Raúl Kripalani 9437136f84 fixup. 2020-11-01 13:01:38 +00:00
Raúl Kripalani d2e2322fd2 make the lotus node use the new native badger blockstore. 2020-11-01 13:01:26 +00:00
Raúl Kripalani ce27b13076 add a native badger blockstore with View() method. 2020-11-01 12:55:49 +00:00
Łukasz Magiera a5c05f87f1 Merge pull request #4105 from filecoin-project/asr/decode-params
Add a StateDecodeParams method
2020-10-31 01:05:50 +01:00
Łukasz Magiera 7cba0b25fd Merge pull request #4618 from filecoin-project/4360
Add miner available balance and power info to state minor info
2020-10-31 01:03:39 +01:00
Łukasz Magiera 978192233d Merge pull request #4498 from filecoin-project/feat/try-election
Add election run-dummy command
2020-10-31 01:02:25 +01:00
Łukasz Magiera c6a8efff7d Merge pull request #4623 from filecoin-project/feat/cache-deal-state-matcher
Cache deal states for most recent old/new tipset
2020-10-31 01:00:11 +01:00
Łukasz Magiera 0f8dadadf5 Merge pull request #4664 from filecoin-project/refactor/events-api-call-matcher
Simplify chain event Called API
2020-10-31 00:48:45 +01:00
Łukasz Magiera 862c5b61a4 Merge pull request #4628 from filecoin-project/frrist/power-claims-changed
polish: add ClaimsChanged and DiffClaims method to power shim
2020-10-31 00:30:03 +01:00
Łukasz Magiera 6fcdf3c7ed Merge pull request #4615 from filecoin-project/feat/worker-pause
worker: Commands to pause/resume task processing
2020-10-31 00:26:37 +01:00
Łukasz Magiera 8eae921cbf Merge pull request #4633 from filecoin-project/steb/rick-roll
keep retrying the proof until we run out of sectors to skip
2020-10-31 00:15:04 +01:00
Łukasz Magiera 5a7863d21a Merge pull request #4626 from filecoin-project/fix/drand-peerid-loop
bootstrap: don't return early when one drand resolution fails
2020-10-30 23:53:11 +01:00
Steven Allen 077bc83f7f explicitly abort PoSt on context cancellation 2020-10-30 14:00:54 -07:00
Jakub Sztandera 22742a9ba0 bootstrap: don't return early when one drand resolution fails
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-30 21:58:17 +01:00
Łukasz Magiera 3b16faddad Merge pull request #4652 from filecoin-project/feat/default-max-fee-cfg
Config for default max gas fee
2020-10-30 21:35:10 +01:00
Łukasz Magiera 094ea3fe97 Merge pull request #4666 from filecoin-project/fix/sched-issues
Fix worker reenabling, handle multiple restarts in worker
2020-10-30 21:34:07 +01:00
Steven Allen 6985af5e88 keep retrying the proof until we run out of sectors to skip
If we have a bunch of corrupted but not missing sectors on disk, we may need to
retry many times before we get a proof to pass. Simply giving up doesn't help anyone.
2020-10-30 13:21:34 -07:00
Łukasz Magiera 6cdbf5216e Merge pull request #4629 from filecoin-project/fix/badger-lsm-trsh
Reduce badger ValueTreshold to 128
2020-10-30 21:10:18 +01:00
Łukasz Magiera f380d6be43 Merge pull request #4651 from filecoin-project/feat/prep-for-gasb
Prep for gas balancing
2020-10-30 20:18:03 +01:00
Łukasz Magiera fb492d9acb Merge pull request #4662 from filecoin-project/feat/force-sched-cli
Debug flag to force running sealing scheduler
2020-10-30 20:15:49 +01:00
Łukasz Magiera a7ff906e17 Merge pull request #4669 from filecoin-project/feat/minerinfo-sync
Add sync status to miner info command
2020-10-30 20:15:01 +01:00
Łukasz Magiera 696a6867dd Merge pull request #4668 from filecoin-project/fix/mpool-pricing
Fix messagepool accounting
2020-10-30 20:14:33 +01:00
vyzo 12f6119739 don't include messages that drop the balance below zero 2020-10-30 20:56:33 +02:00
Łukasz Magiera 885c6c94d3 Add sync status to miner info command 2020-10-30 19:39:31 +01:00
Jakub Sztandera 8afceee7a9 Fix messagepool accounting
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-30 19:21:25 +01:00
vyzo d6e2c80608 if noone is working pick the last worker in sync wait 2020-10-30 19:45:59 +02:00
jennijuju 2f4582147a Add termination-estimate to get an estimation for how much a termination penalty will be:
- Usage example: `./lotus-shed sectors termation-estimate 5 8 10`.
2020-10-30 13:34:03 -04:00
Łukasz Magiera 69e44ebf07 sched: re-register worker windows after re-enabling correctly 2020-10-30 18:32:59 +01:00
Łukasz Magiera f90a387f96 sched: Print worker UUIDs in shed-diag correctly 2020-10-30 18:32:16 +01:00
vyzo 5dcf339840 fix sync wait cli 2020-10-30 19:28:32 +02:00
Łukasz Magiera 774e2ecebf sched: Fix worker reenabling 2020-10-30 18:01:37 +01:00
Łukasz Magiera af1d45d969 worker: Handle multiple manager restarts while waiting for tasks 2020-10-30 18:00:48 +01:00
Dirk McCormick 79a8ff04fd refactor: simplify chain event Called API 2020-10-30 14:00:32 +01:00
Łukasz Magiera 7fbb868513 Debug flag to force running sealing scheduler 2020-10-30 11:07:35 +01:00
vyzo f6ecff0e26 check recent syncs in selectSyncTarget/selectDeferredSyncTarget 2020-10-30 07:50:26 +02:00
Aayush Rajasekaran 5ff42505e8 Add a StateDecodeParams method 2020-10-29 22:04:33 -04:00
Łukasz Magiera c3d00b0ac6 Merge pull request #4650 from jsign/jsign/offlinemode
make IPFS online mode configurable
2020-10-29 22:24:58 +01:00
Łukasz Magiera ae7889f830 Config for default max gas fee 2020-10-29 20:50:11 +01:00
Jakub Sztandera d8d9291402 Prep for gas balancing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-29 20:34:48 +01:00
Łukasz Magiera 7d02cd6679 Merge pull request #4649 from filecoin-project/feat/sectorslist-utils
miner sectors list: flags for events/seal time
2020-10-29 19:55:16 +01:00
Ignacio Hagopian 7d0f279353 make IPFS online mode configurable
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-10-29 15:16:45 -03:00
Łukasz Magiera ad9a5acb7f miner sectors list: flags for events/seal time 2020-10-29 19:10:20 +01:00
vyzo 8d25fd39cf set BootstrapPeerThreshold to 1 for tests 2020-10-29 19:32:09 +02:00
Łukasz Magiera ee814fb48e Merge pull request #4643 from filecoin-project/fix/fsm-ticket-loop
storagefsm: Fix GetTicket loop when the sector is already precommitted
2020-10-29 18:25:14 +01:00
vyzo 57234d8ef3 fix spelling in comment to satisfy linter
this is ridiculous; since when do linters apply spellchecking on comments???
2020-10-29 19:13:45 +02:00
vyzo 47830efbf5 set BootstrapPeerThreshold to 4, add env variable to override 2020-10-29 19:08:58 +02:00
Łukasz Magiera dc5d6316c9 Merge pull request #4645 from filecoin-project/fix/miner-restart-edgecase
sectorstorage: Fix manager restart edge-case
2020-10-29 18:07:18 +01:00
vyzo a650641813 transition out of initial sync only if sync finishes within 15min 2020-10-29 17:27:13 +02:00
vyzo 8702ff8b7e rename initialSync to initialSyncDone 2020-10-29 17:12:47 +02:00
Łukasz Magiera c6b03ce62b sectorstorage: Missing unlock in waitWork 2020-10-29 15:18:51 +01:00
Łukasz Magiera ea5bb5cdab sectorstorage: Fix manager restart edge-case 2020-10-29 12:14:21 +01:00
Łukasz Magiera e168f7a917 cli: miner-info review 2020-10-29 10:33:08 +01:00
Łukasz Magiera 33459f1b36 storagefsm: Fix GetTicket loop when the sector is already precommitted 2020-10-29 10:26:02 +01:00
Łukasz Magiera f0f75e2d2c Merge pull request #4627 from karalabe/fix-gpu-usage-tracking
extern/sector-storage: fix GPU usage overwrite bug
2020-10-29 10:13:54 +01:00
vyzo a26420f6e8 add missing return for deferrals during initial sync 2020-10-29 09:40:41 +02:00
Jakub Sztandera ae905bd056 Fix closing
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-29 01:05:31 +01:00
frrist 7b8dae92d9 feat: add power actor claim diff method 2020-10-28 16:52:52 -07:00
jennijuju c80e8cb7d3 Add miner available balance and power info to state minor info 2020-10-28 19:04:03 -04:00
Jakub Sztandera a2c66dd102 make linter happy
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-28 23:30:28 +01:00
Jakub Sztandera 0297be4b9a Add lotus-shed datastore rewrite command
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-28 23:24:45 +01:00
Jakub Sztandera ecc1d94b3a Reduce badger ValueTreshold to 128
It should significntly size of the LSM index, and thus increase the
performance with bigger datastores

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-28 22:17:01 +01:00
Łukasz Magiera 553408d573 worker: Commands to pause/resume task processing 2020-10-28 22:10:17 +01:00
frrist e33cc5ee12 polish: add ClaimsChanged method to power shim 2020-10-28 13:56:02 -07:00
Łukasz Magiera 32ea060e99 Merge pull request #3618 from filecoin-project/feat/async-restartable-workers
Track sealing processes across lotus-miner restarts
2020-10-28 21:55:45 +01:00
Jakub Sztandera ad905fc310 Expose WorkerID
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-28 20:22:07 +01:00
Péter Szilágyi 5f657b4333 extern/sector-storage: fix GPU usage overwrite bug 2020-10-28 20:52:33 +02:00
Łukasz Magiera 704bef5dfc Merge pull request #4613 from filecoin-project/feat/proofs-5.2.3-1
Update FFI
2020-10-28 17:37:22 +01:00
Dirk McCormick f79652c28c feat: cache deal states for most recent old/new tipset 2020-10-28 16:55:48 +01:00
Jakub Sztandera e575b5fe8a Add error if weights are the same
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-28 16:53:13 +01:00
Łukasz Magiera da7ecc1527 Fix flaky sealing manager tests 2020-10-28 16:15:17 +01:00
Łukasz Magiera 86f9abda0d circle: Install hwloc 2020-10-28 15:46:57 +01:00
Łukasz Magiera 4475b9ac05 Use filecoin-ffi master 2020-10-28 15:31:15 +01:00
Łukasz Magiera 4100f6eead fix TestWDPostDoPost 2020-10-28 15:23:21 +01:00
Łukasz Magiera ed2f81da2f sched: Fix tests 2020-10-28 14:34:28 +01:00
Łukasz Magiera 4cf00b8b42 worker_local: address review 2020-10-28 14:29:17 +01:00
Łukasz Magiera 96c5ff7e7f sched: use more letters for variables 2020-10-28 14:23:38 +01:00
Łukasz Magiera 8731fe9112 sched: split worker handling into more funcs 2020-10-28 14:14:50 +01:00
Łukasz Magiera 84b567c790 sched: move worker funcs to a separate file 2020-10-28 13:39:28 +01:00
vyzo ba2512655e track last few worker states for debug purposes 2020-10-28 14:08:06 +02:00
vyzo 6266bae1d3 log worker spawning from initial sync deferrals 2020-10-28 11:44:16 +02:00
vyzo 188d1649d3 stop the ticker when done with it 2020-10-28 11:41:40 +02:00
vyzo 9ddf7bbd15 better handling of initial sync 2020-10-28 11:36:34 +02:00
vyzo 469666de82 limit max active sync workers 2020-10-28 10:33:22 +02:00
vyzo fc1ac3e752 simplify circular buffer code
we don't care about order of checks!
2020-10-28 00:02:08 +02:00
vyzo ab7a66b90d track recently synced tipsets to avoid unnecessary worker spawning 2020-10-27 23:48:31 +02:00
Jakub Sztandera 2b82e5a118 Fix tipset coalescing in case of repeated blocks
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-27 21:23:16 +01:00
Jakub Sztandera 16d2cb6309 Add flag to coalesce Tipsets in pending queue
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-27 18:00:34 +01:00
Łukasz Magiera 413643a712 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-27 16:56:29 +01:00
Łukasz Magiera 843c0719e0 Update FFI 2020-10-27 15:37:11 +01:00
Łukasz Magiera 3d02dba5dc Merge pull request #4609 from filecoin-project/fix/flaky-testMiningReal
Fix flaky testMiningReal
2020-10-27 14:27:52 +01:00
Łukasz Magiera efc8d90bc1 Fix flaky testMiningReal 2020-10-27 12:19:12 +01:00
Łukasz Magiera 1db69acbc0 Merge pull request #4608 from filecoin-project/fix/flaky-TestCLIDealFlow
Fix flaky TestCLIDealFlow
2020-10-27 12:07:02 +01:00
Dirk McCormick c0f6f834b7 fix: flaky TestCLIDealFlow 2020-10-27 11:07:54 +01:00
Łukasz Magiera 8c60069bb8 Merge pull request #4535 from filecoin-project/feat/clientdeal-cache-commd
client deal: Cache CommD when creating multiple deals
2020-10-27 03:58:25 +01:00
Łukasz Magiera e1da874258 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-27 03:31:07 +01:00
Łukasz Magiera 616e0e8eb5 Merge pull request #4569 from filecoin-project/feat/client-deal-size-cli
Expose ClientDealSize via CLI
2020-10-27 03:28:31 +01:00
Steven Allen 89f6da14bc Merge pull request #4513 from filecoin-project/steb/feat-change-worker-key
Add commands to change the worker key
2020-10-26 18:41:04 -07:00
Steven Allen 832c0998e4 validate that block propagation works after a worker key change 2020-10-26 18:16:25 -07:00
Steven Allen 0d06f8fa2b Add commands to change the worker key 2020-10-26 18:16:24 -07:00
Whyrusleeping 2b6bc7d59a Merge pull request #4604 from filecoin-project/frrist/miner-shim-info-equal
polish: add Equals method to MinerInfo shim
2020-10-26 17:54:30 -07:00
frrist 0d384050fa polish: add Equals method to MinerInfo shim 2020-10-26 14:45:02 -07:00
Ingar Shu 8141f7b6a6 Expose ClientDealSize API via client stat CLI 2020-10-26 11:28:01 -07:00
Jakub Sztandera cced3bf9ee Randomize seed
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-26 17:44:55 +01:00
Jakub Sztandera ea6afe84db Add election run-dummy command
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-26 17:44:51 +01:00
Łukasz Magiera 382dcf9a37 Merge pull request #4600 from filecoin-project/fix/sector-list-less-sracy
Make EarlyExpiration in sectors list less scary
2020-10-26 16:17:20 +01:00
Łukasz Magiera 8923524f6a Make EarlyExpiration in sectors list less scary 2020-10-26 15:33:15 +01:00
Łukasz Magiera 31a474a1ca Move CommPWriter to lib/ 2020-10-26 15:16:28 +01:00
Łukasz Magiera 1afd3a41cb Merge pull request #4595 from GFZRZK/GFZRZK/bugfix/fix_workerkey_error_in_wdpost_setsender
worker key should change when set sender found key not equal with the value on chain
2020-10-26 14:55:48 +01:00
Łukasz Magiera 5a6195feb6 Merge pull request #4598 from filecoin-project/refactor/paych-cli-test
refactor: share code between CLI tests
2020-10-26 14:51:03 +01:00
vyzo 2fd0d430c8 set BootstrapPeerThreshold to 1, to mimic old code
which incidentally fixes tests
2020-10-26 15:49:24 +02:00
vyzo f055681972 fix test 2020-10-26 15:43:22 +02:00
Dirk McCormick 1fefcc2b46 refactor: simplify cli test RunCmd 2020-10-26 14:26:46 +01:00
vyzo c0a039ee11 fix logging 2020-10-26 15:19:09 +02:00
Łukasz Magiera 09f1d00733 Merge pull request #4533 from filecoin-project/msig-inspect-jen
Updated msig inspect:
2020-10-26 14:11:21 +01:00
vyzo f26385d0c6 use weight as the sync target selector 2020-10-26 14:51:26 +02:00
Dirk McCormick b097a5fb0c refactor: share code between CLI tests 2020-10-26 13:50:07 +01:00
vyzo af53b72eb8 fix typo 2020-10-26 14:36:34 +02:00
Łukasz Magiera a37c372d06 Merge pull request #4572 from filecoin-project/feat/data-transfer-utils
Flesh out data transfer features
2020-10-26 13:29:26 +01:00
Łukasz Magiera 8fe7db107a Merge pull request #4584 from jsign/jsign/chffi
update filecoin-ffi in go mod
2020-10-26 13:17:19 +01:00
vyzo 5d34b7d618 rewrite sync manager 2020-10-26 14:11:19 +02:00
Łukasz Magiera 43b492204c Merge pull request #4597 from filecoin-project/fix/paych-mgr-add-funds-race
fix race in paych manager add funds
2020-10-26 13:09:47 +01:00
Łukasz Magiera ce9cce921d Merge pull request #4589 from cerblue/cerblue
Do not fail wallet delete because of pre-existing trashed key
2020-10-26 12:47:23 +01:00
Dirk McCormick 5ed57d34f0 fix: race in paych manager add funds 2020-10-26 11:09:56 +01:00
wangchao e65aa4cf17 worker key should change when set sender found key not equal with the value on chain 2020-10-26 15:20:09 +08:00
Jinsub Moon bfbf6a2711 Do not fail wallet delete because of pre-existing trashed key 2020-10-25 06:25:28 +00:00
Ignacio Hagopian 6b76371d64 update filecoin-ffi
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
2020-10-24 17:15:44 -03:00
Raúl Kripalani cdfa869ea6 tvx extract: make it work with secp messages.
Unfortunately ChainGetMessage returns a *types.Message, which in
the case of secp messages is lacking the signature. The signature
is part of the input to calculate the CID on secp messages. Therefore,
calling `.Cid()` on the result of ChainGetMessage for this kind of
message will lead to an incorrect CID.

tvx was relying on that call to return the correct CID. Since this is
not the case (and this is a footgun that needs to be corrected, ideally
together with the *types.{,Signed}Message duality mess), I'm replacing
the comparison.
2020-10-24 20:16:14 +01:00
Łukasz Magiera d4cdc6d334 Merge pull request #4580 from filecoin-project/asr/changelog
Lotus version 1.1.2
2020-10-24 12:37:40 +02:00
Aayush Rajasekaran 7b3f1c2b85 Lotus version 1.1.2 2020-10-24 06:33:31 -04:00
Łukasz Magiera 9972f19240 Merge pull request #4579 from filecoin-project/steb/worker-key-change-runtime
Handle worker key changes correctly in runtime
2020-10-24 12:28:01 +02:00
Steven Allen f23034305f Handle worker key changes correctly in runtime 2020-10-24 02:57:17 -07:00
Aayush Rajasekaran 2663d6c3cb Merge pull request #4574 from filecoin-project/asr/changelog
Lotus version 1.1.1
2020-10-24 00:24:26 -04:00
Aayush Rajasekaran 8b8d81e767 Lotus version 1.1.1 2020-10-24 00:22:20 -04:00
Aayush Rajasekaran d43bc79050 Merge pull request #4573 from filecoin-project/steb/remove-worker-key-cache
Fetch worker key from correct block on sync
2020-10-23 23:59:43 -04:00
Steven Allen 06af2fb52b Remove the worker key cache and use the correct worker key
We need to use the worker key from the lookback tipset state. We can't
reasonably maintain this cache, unfortunately (unless we kept some form of
"per-height" cache).
2020-10-23 19:40:05 -07:00
Steven Allen 8bb69f1e9c Use pre-computed parent state root for lookback info
There's no need to call TipSetState and recompute it.
2020-10-23 19:40:01 -07:00
hannahhoward b98b2d4310 docs(docsgen): update api docs 2020-10-23 18:35:01 -07:00
jennijuju f05b03f02c Updated msig inspect:
- Show account address of signer if the id address is corresponding to  an account address.
- When a message receiver is a new account, do not lookup method name.
2020-10-23 17:40:51 -04:00
Łukasz Magiera 4d87473053 Fix lint 2020-10-23 23:31:18 +02:00
Łukasz Magiera 660236b224 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-23 23:25:35 +02:00
Łukasz Magiera 194f56377e Merge pull request #4565 from filecoin-project/feat/shed-msg-decode
shed: Commad to decode messages
2020-10-23 22:35:24 +02:00
Łukasz Magiera 2023615f55 Merge pull request #4563 from filecoin-project/steb/post-lookback
Use older randomness for the PoSt commit on specs-actors version 2
2020-10-23 22:21:51 +02:00
Łukasz Magiera de2cbfa8a9 client deal: Cache CommD when creating multiple deals 2020-10-23 22:20:17 +02:00
Łukasz Magiera 067de4508b shed: Commad to decode messages 2020-10-23 22:17:46 +02:00
Łukasz Magiera 74bf4c5e71 Merge pull request #4556 from filecoin-project/fix/marketwithdraw-miner
Make wallet market withdraw usable with miner addresses
2020-10-23 22:15:28 +02:00
Jakub Sztandera 099bb2cbaa Merge pull request #4561 from filecoin-project/fix/timedbs-flaky
Fix flaky TestTimedBSSimple
2020-10-23 22:14:32 +02:00
Łukasz Magiera e395559f75 Merge pull request #4564 from filecoin-project/fix/chain-import-flake
Fix flaky TestChainExportImportFull
2020-10-23 22:00:03 +02:00
Łukasz Magiera b7b6ab779a Make wallet market withdraw usable with miner addresses 2020-10-23 21:54:41 +02:00
Steven Allen 109b326ae2 Use older randomness for the PoSt commit on specs-actors version 2
After the upgrade, we're allowed to use randomness up to the challenge epoch.
This safe-guards us against very large reorgs where a miner computes a PoSt very
quickly.
2020-10-23 12:45:11 -07:00
Jakub Sztandera c7e6c8eacc Fix flaky TestChainExportImportFull
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 21:45:08 +02:00
Jakub Sztandera 9fbd2a50ff Fix lint
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 20:50:17 +02:00
Jakub Sztandera ea69386519 Fix flaky TestTimedBSSimple
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 20:46:06 +02:00
Łukasz Magiera 8124fe98c7 Merge pull request #4559 from filecoin-project/fix/beyond-genesis
Fix random test failures
2020-10-23 19:52:10 +02:00
Jakub Sztandera 16a911bc39 Fix random test failures
If block 1 was a null block then blockSet would include genesis which
would lead to us trying to load parent of a genesis block.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 19:33:30 +02:00
Łukasz Magiera c81db5a21c Merge pull request #4420 from filecoin-project/deps/drand-v1.2.0
Chore: update drand to v1.2.0
2020-10-23 18:25:00 +02:00
Łukasz Magiera dbcba6477e Merge pull request #4263 from filecoin-project/feat/lite-market-client
lite-mode - market storage and retrieval clients
2020-10-23 17:23:06 +02:00
Łukasz Magiera 36816fb4f3 Fix list-asks, deals with non-genesis miners in lite-mode 2020-10-23 17:08:21 +02:00
Łukasz Magiera 1ec8252412 Merge pull request #4497 from filecoin-project/feat/lite-market-client-cli
lotus-lite: CLI tests for `lotus client` commands
2020-10-23 16:18:23 +02:00
Łukasz Magiera 91fae36b86 Merge pull request #4554 from filecoin-project/tvx-simulate-2
tvx simulate command; tvx extract --ignore-sanity-checks
2020-10-23 15:58:22 +02:00
Łukasz Magiera 623ffebe62 Merge pull request #4555 from filecoin-project/feat/walletlist-id-market
wallet list: Add market balance and ID address flags
2020-10-23 15:35:03 +02:00
Dirk McCormick 906286fdbe feat: lite-mode - CLI tests for lotus client commands 2020-10-23 15:02:49 +02:00
Dirk McCormick 92942d44d1 feat: lite-mode - market storage and retrieval clients 2020-10-23 15:02:26 +02:00
Łukasz Magiera 9caa6ae69c wallet list: Add market balance and ID address flags 2020-10-23 14:42:19 +02:00
Raúl Kripalani 39d9150175 fix tvx init. 2020-10-23 13:30:04 +01:00
Raúl Kripalani 5301c416bc tvx extract: --ignore-sanity-checks flag. 2020-10-23 10:47:22 +01:00
Raúl Kripalani 92395745d3 tvx simulate: execute raw message against height. 2020-10-23 10:46:32 +01:00
Łukasz Magiera 7d9e8f9d92 Merge pull request #4524 from filecoin-project/feat/withdraw-market-funds-cli
Add a market WithdrawBalance CLI
2020-10-23 11:33:38 +02:00
Łukasz Magiera 6842c03399 wallet cli: rename withdraw-market-funds -> market withdraw 2020-10-23 11:17:03 +02:00
Łukasz Magiera 2c3d80494f Merge pull request #4538 from filecoin-project/steb/test-cleanup-proofs
Cleanup test initialization and always validate VRFs in tests
2020-10-23 10:53:54 +02:00
Steven Allen 2cf770cc91 Merge pull request #4539 from filecoin-project/steb/fix-worker-key-lookback
Use the correct lookback for the worker key when creating blocks
2020-10-22 21:10:25 -07:00
Jakub Sztandera bfdb74bfee Merge pull request #4541 from filecoin-project/feat/maybe-fix-something
Fix chain sync stopping to sync
2020-10-23 02:10:43 +02:00
Jakub Sztandera 580a2f4dc6 Add option to join by common parents
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 01:35:26 +02:00
Jakub Sztandera c8fe21c1ef PopRelated aggretates the bucket
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 01:18:13 +02:00
Steven Allen 59cfabf8a4 don't resolve the worker key twice 2020-10-22 15:48:09 -07:00
Jakub Sztandera 810feee5a1 PopRelated should pop all
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 00:39:08 +02:00
Jakub Sztandera 24fc7d4cbd Add reproduction test and fix the issue
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 00:34:04 +02:00
Jakub Sztandera 5edfc527b0 More than one bucket
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-23 00:34:03 +02:00
Jakub Sztandera febc28f83f Add log and Insert
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-22 23:39:54 +02:00
hannahhoward 98297cef4d feat(data-transfer): fill in utils 2020-10-22 13:40:26 -07:00
Łukasz Magiera 0289c39850 Merge pull request #4516 from filecoin-project/feat/api-request-metrics-wrapper
Feat/api request metrics wrapper
2020-10-22 21:40:47 +02:00
Łukasz Magiera 29e334de54 Merge pull request #4511 from filecoin-project/steb/generalize-window-post
Manage sectors by size instead of proof type.
2020-10-22 21:27:48 +02:00
Łukasz Magiera f9723ca3c1 Merge pull request #4521 from filecoin-project/feat/fix-shed-ledger-list
Fix lotus-shed ledger list
2020-10-22 19:59:18 +02:00
Łukasz Magiera c17e8e778d Merge pull request #4526 from filecoin-project/wallet-4464
Delete wallet from local wallet cache
2020-10-22 19:50:01 +02:00
Łukasz Magiera b2510e5fc5 Merge pull request #4508 from filecoin-project/fix/actor-not-found-mininig-base
MinerGetBaseInfo: if miner is not found in lookback, check current
2020-10-22 19:45:43 +02:00
Łukasz Magiera 6c800bd0e3 Merge pull request #4501 from filecoin-project/feat/gateway-oni-needs
add some methods that oni needs
2020-10-22 19:44:47 +02:00
Łukasz Magiera 88ac85b6ae Merge pull request #4500 from filecoin-project/fix/mpool-push-atomicity
make push and addLocal atomic
2020-10-22 19:43:52 +02:00
Łukasz Magiera 6bdf9935bf Merge pull request #4475 from filecoin-project/fix/miner-init-createworker
miner: fix init --create-worker-key
2020-10-22 18:55:25 +02:00
Łukasz Magiera 29cda82eac Merge pull request #4449 from austinabell/austin/confcircsupplyfix
Fix circ supply default in conformance
2020-10-22 18:53:10 +02:00
Steven Allen b05613445e Sign blocks with the worker key from the correct lookback epoch 2020-10-22 09:26:58 -07:00
Steven Allen defeba5576 Fix lookback for worker key when computing ticket
We need to compute the ticket based on our worker key from the lookback epoch,
not the current epoch.
2020-10-22 09:26:58 -07:00
Steven Allen 4a550d12d4 Always validate VRFs, even when insecure post validation is enabled
We always generate them, we might as well validate them.
2020-10-22 09:19:46 -07:00
Steven Allen 70c39fe78c Fix global test options
Set BELLMAN_NO_GPU on init.
Set InsecurePoStValidation once in an obvious place.
2020-10-22 09:19:46 -07:00
Łukasz Magiera 6fc8550c19 Merge pull request #4314 from filecoin-project/feat/lotus-pcr-block-list
Add block list to pcr
2020-10-22 17:59:23 +02:00
Łukasz Magiera 6b9a4c4a34 Merge pull request #4536 from filecoin-project/zgfzgf-fix-chain-export
Small chain export optimization
2020-10-22 17:35:58 +02:00
Łukasz Magiera 041762a34f Merge pull request #4383 from filecoin-project/steb/actor-v2-imports
Remove most v0 actor imports
2020-10-22 17:17:56 +02:00
Łukasz Magiera 25c4a1bd8d Merge pull request #4523 from filecoin-project/misc/remove-log-sync
heaviestTipSet reurning nil is a ok
2020-10-22 17:16:02 +02:00
Łukasz Magiera 05b459e4c5 Merge pull request #4379 from zgfzgf/feat-mining
optimize mining code
2020-10-22 16:12:40 +02:00
Łukasz Magiera 1665d61c89 Merge pull request #4339 from filecoin-project/shed/borked-cmd
Shed/borked cmd
2020-10-22 16:10:05 +02:00
Łukasz Magiera 9a58763a4e shed: Rename the command to frozen-miners 2020-10-22 16:07:42 +02:00
ZenGround0 f9707ba344 add borked inspection command
hook up new command

Fix head call

Debug internal error

Debug moa

Debug 0

Fix 0

Fix 1

Better print

Don't ignore error
2020-10-22 16:03:11 +02:00
Łukasz Magiera ae04f3029b chain: Add more robust test for ChainExport 2020-10-22 16:01:11 +02:00
Łukasz Magiera 40872e9d90 Merge branch 'fix-chain-export' of github.com:zgfzgf/lotus into zgfzgf-fix-chain-export 2020-10-22 15:56:42 +02:00
Łukasz Magiera ee8d8bf5e5 pcr: Fix lint 2020-10-22 15:42:46 +02:00
Łukasz Magiera b85bf82d00 Merge pull request #4318 from filecoin-project/asr/shed-won-power
Add a shed util to determine % of power that has won a block
2020-10-22 15:40:55 +02:00
Travis Person 6fb3dafa95 lotus-pcr: add blocklist 2020-10-22 15:35:01 +02:00
Łukasz Magiera f5960df544 Merge pull request #4313 from filecoin-project/fix/pcr-basefee
Look at block base fee for PCR
2020-10-22 15:32:01 +02:00
Łukasz Magiera 93227bfd4d Merge pull request #4302 from filecoin-project/feat/import-bench-ds-measure
add measure datastore wrapper around bench chain datastore
2020-10-22 15:16:31 +02:00
Łukasz Magiera 0832d5a7d5 bench: Fix lint warnings 2020-10-22 15:00:31 +02:00
whyrusleeping 602d2b8ad5 record datastore metrics after successful run 2020-10-22 14:57:06 +02:00
Jakub Sztandera 0341944350 Inject prometheus
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-22 14:57:05 +02:00
whyrusleeping 00d1e6b549 add measure datastore wrapper around bench chain datastore 2020-10-22 14:57:04 +02:00
Łukasz Magiera 9c17ac5bde Merge branch 'hunjixin-hunjixin/feat/batchmsg' into master 2020-10-22 14:46:23 +02:00
Łukasz Magiera 90ce1c018e docsgen 2020-10-22 14:46:10 +02:00
Łukasz Magiera 618fed75fe Merge branch 'hunjixin/feat/batchmsg' of github.com:hunjixin/lotus into hunjixin-hunjixin/feat/batchmsg 2020-10-22 14:45:33 +02:00
Łukasz Magiera ef9eea470c Merge branch 'animesh2049-animesh2049/status-api' into master 2020-10-22 14:16:15 +02:00
Łukasz Magiera 9d9da1a3e8 docsgen 2020-10-22 14:15:11 +02:00
Łukasz Magiera 7c16f2182c Merge branch 'animesh2049/status-api' of github.com:animesh2049/lotus into animesh2049-animesh2049/status-api 2020-10-22 14:14:50 +02:00
Will Scott 9dc9bf5eb0 go mod tidy 2020-10-21 19:49:38 -07:00
Will Scott 035a762358 update drand to v1.2.1
* stop autowatching
* set user-agent
2020-10-21 16:49:59 -07:00
jennijuju 7f98be2920 Delete wallet from local wallet cache 2020-10-21 17:53:26 -04:00
Ingar Shu 7bdc7aa527 Add a market WithdrawBalance CLI 2020-10-21 14:09:39 -07:00
Jakub Sztandera 5c9c08ef85 heaviestTipSet reurning nil is a ok
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-21 22:16:01 +02:00
Steven Allen 5e23933757 fix import of v0 for test
We're still on actors v0 in this test.
2020-10-21 12:18:38 -07:00
Steven Allen 9d15a08d27 correctly mark new actors as "important" 2020-10-21 12:18:38 -07:00
Steven Allen 0c2ec04c09 use upgrade schedule from node when getting the network name
It doesn't matter now, but may in the future.
2020-10-21 12:18:38 -07:00
Steven Allen 30bda0b4c4 set network name everywhere 2020-10-21 12:18:38 -07:00
Steven Allen 710ac9d544 use the correct network version in genesis
1. Version 0 upgrades happen _after_ genesis.
2. Get rid of UseNewestNetwork. It's not useful and quite dangerous.
2020-10-21 12:18:38 -07:00
Steven Allen bcabe7b3b5 migrate methods to abstracted methods
Method numbers never change anyways. At worst, we'll deprecate old methods and
have to explicitly import them from the correct actors version to use them.
2020-10-21 12:18:37 -07:00
Steven Allen 4e730b5ec8 port to v2 imports 2020-10-21 12:16:23 -07:00
Jakub Sztandera f0d966a595 Fix lotus-shed ledger list
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-21 19:40:51 +02:00
Łukasz Magiera 8cad245f80 Merge pull request #4512 from filecoin-project/feat/disable-bloom
Disable blockstore bloom filter
2020-10-21 17:27:33 +02:00
lanzafame 7cbd4d49c3 gofmt 2020-10-21 18:39:57 +10:00
lanzafame 7a33d5bb34 register all apis with metric wrapper 2020-10-21 18:37:50 +10:00
lanzafame 3e767ca5c8 wrap api in metrics proxy 2020-10-21 18:27:13 +10:00
Łukasz Magiera c767399fc6 Merge pull request #4504 from filecoin-project/feat/clientdeal-miner-picker
Miner finder for interactive client deal CLI
2020-10-21 05:46:07 +02:00
Jakub Sztandera 3a46c15c4a Disable blockstore bloom filter
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-21 04:22:49 +02:00
Steven Allen 00dcb1bce9 Manage sectors by size instead of proof type.
* We may have multiple sectors with the same size and different proof types, but all these management functions stay the same.
* This simplifies PoSt logic.
2020-10-20 18:30:56 -07:00
Aayush Rajasekaran 420ec18c5b Merge pull request #4509 from filecoin-project/asr/changelog
Lotus version 1.1.0
2020-10-20 18:35:12 -04:00
Aayush Rajasekaran d78dd42ed4 Lotus version 1.1.0 2020-10-20 18:30:41 -04:00
Aayush Rajasekaran 547c01f5ff Merge pull request #4506 from filecoin-project/release/1.1.0
Introduce Network version 6
2020-10-20 18:29:49 -04:00
Aayush Rajasekaran 75eb644108 Merge pull request #4507 from filecoin-project/lotus-shed-terminate-1475
Add a terminate sectors command to lotus-shed
2020-10-20 18:28:09 -04:00
jennijuju ee5dcbc1d8 Add wait message 2020-10-20 18:26:17 -04:00
Aayush Rajasekaran 7f46ad19ac VM: Enforce a call depth limit 2020-10-20 18:19:50 -04:00
Jakub Sztandera 6530431995 MinerGetBaseInfo: if miner is not found in lookback, check current
If miner is found in current state, just return nil base info as miner
cannot mine if he is not found in the lookback.

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-20 23:54:35 +02:00
Steven Allen ed1645109a Add lotus storage miner API support to lotus-shed 2020-10-20 17:38:15 -04:00
jennijuju 277d3e9ab4 Add terminate sectors based on 1475's #4433 implementation in lotus-shed:
-  Moving the cmd to lotus-shed so that miners can use this right away without waiting for fsm changes.- Note: this should only be used when the miner is 100% sure that they want to terminate the sector on chain and they will be lose the power and pay a big one-time termination penalty for the sectors.
- Only live sectors can be terminated.
- To use, run `./lotus-shed sectors terminate --really-do-it=true sectorNum1 sectorNum2`.
- A message will be sent and after the message is landed on chain, miner can run `lotus-miner sectors status --on-chain-info <terminated sector number>`, and check Expiration Info at the bottom. Both `OnTime` and `Early` are 0 indicates the sector is terminated.
2020-10-20 17:38:09 -04:00
Aayush Rajasekaran 556f92a823 Update to actors v2.2.0 at PostLiftoff epoch 2020-10-20 17:23:35 -04:00
Aayush Rajasekaran ef32449309 Merge pull request #4505 from filecoin-project/feat/markets-1.0.0
Update markets v1.0.0
2020-10-20 17:22:57 -04:00
hannahhoward e08032da93 feat(markets): update markets v1.0.0 2020-10-20 13:56:13 -07:00
Łukasz Magiera dc40469cb3 Miner finder for interactive client deal CLI 2020-10-20 21:54:39 +02:00
whyrusleeping abc3e783ff bump lookback cap to 24 hours 2020-10-20 10:09:21 -07:00
whyrusleeping 6bc56c549a add some methods that oni needs 2020-10-20 10:04:51 -07:00
vyzo 580980d149 make push and addLocal atomic 2020-10-20 19:13:17 +03:00
Łukasz Magiera c779e4e8ee Merge pull request #4496 from filecoin-project/ci/address-flaky-tests
circle: Run tests for some subsystems separately
2020-10-20 14:18:54 +02:00
Łukasz Magiera ee0078f7c1 make: Drop npm calls from buildall 2020-10-20 13:48:32 +02:00
Łukasz Magiera da044d8b00 Merge pull request #4486 from filecoin-project/feat/better-sync-logs
add some extra logging to try and debug sync issues
2020-10-20 13:29:20 +02:00
Łukasz Magiera 09e92f98ff circle: Run tests for some subsystems separately 2020-10-20 13:11:53 +02:00
Łukasz Magiera 0dbf10ce69 Merge pull request #4491 from filecoin-project/one-liner
Add a comment to BlockMessages to address #4446.
2020-10-20 12:49:37 +02:00
jennijuju e7a68dba58 Add a comment to BlockMessages to address #4446. 2020-10-20 02:28:43 -04:00
whyrusleeping 608010c35d add some extra logging to try and debug sync issues 2020-10-19 19:09:49 -07:00
Łukasz Magiera 869d71446d miner: fix init --create-worker-key 2020-10-19 16:08:46 +02:00
Łukasz Magiera 268d29222a docsgen 2020-10-18 20:10:39 +02:00
Łukasz Magiera 1a10f95973 worker: Better miner connectivity check on startup 2020-10-18 19:53:23 +02:00
Łukasz Magiera 8c86ea6b75 localworker: Try very hard to get ruselts to manager 2020-10-18 19:45:11 +02:00
Łukasz Magiera dbb421c4f7 localworker: Use better context for calling returnFunc 2020-10-18 19:32:43 +02:00
Łukasz Magiera 879aa9512d worker: Use miner session for connectivity check 2020-10-18 17:56:29 +02:00
Łukasz Magiera cf4dfa3a05 worker: Use http rpc for miner API 2020-10-18 13:59:38 +02:00
Łukasz Magiera f933e1d2b7 miner cli: Update to uuid worker IDs 2020-10-18 13:03:17 +02:00
Łukasz Magiera 8d06cca073 sched: Handle workers using sessions instead of connections 2020-10-18 12:36:06 +02:00
Łukasz Magiera 7ac5dc55d0 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-17 13:45:11 +02:00
Łukasz Magiera 68be28ca6d Add Session API 2020-10-17 12:53:42 +02:00
austinabell 70e2170e3e Fix circ supply default in conformance 2020-10-16 21:14:36 -04:00
Anton Evangelatov a8430088b2 --metadata cmd options for testground (#275)
* refactor user field

* upgrade sdk-go
2020-10-16 20:33:02 +02:00
Hector Sanjuan 925606ff26 Chore: update drand to v1.2.0 2020-10-15 12:02:12 +02:00
Anton Evangelatov 881e37ec02 upgrade go-sdk (#274) 2020-10-14 16:51:07 +02:00
Anton Evangelatov 194c9d6e07 upgrade go-sdk (#273) 2020-10-14 15:46:06 +02:00
Aayush Rajasekaran 2613e837a9 Bugfix: Eligible miners should be computed based on start tipset, not end tipset 2020-10-14 03:01:41 -04:00
zgfzgf 51aca86e98 optimize mining code 2020-10-14 08:44:42 +08:00
Łukasz Magiera b74a3229f8 fsm: process expired-ticket sectors 2020-10-13 21:35:41 +02:00
Łukasz Magiera 71b3b9075d Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-13 21:33:21 +02:00
Travis Person 20c57fcd0e lotus-shed: post-find use lookback 2020-10-13 19:00:37 +00:00
Łukasz MagieraandSteven Allen fbe76d0fa1 Update lotus with wallet changes (#271)
* update oni for specs-actors v2 upgrade

https://github.com/filecoin-project/lotus/pull/3936

* Update lotus with wallet changes

Co-authored-by: Steven Allen <steven@stebalien.com>
2020-10-13 18:42:23 +02:00
ZenGround0 619ee1e6f9 add comma 2020-10-13 00:49:32 -04:00
ZenGround0 0e88f32d66 Fix bug and add flag 2020-10-13 00:47:43 -04:00
ZenGround0 546614455f Fix print 2020-10-13 00:38:15 -04:00
ZenGround0 0b9499a00f withpower flag 2020-10-13 00:29:43 -04:00
ZenGround0 448ca6e43c less verbose 2020-10-13 00:17:09 -04:00
ZenGround0 c9955c0635 verbose flag 2020-10-12 23:59:30 -04:00
ZenGround0 768d2db114 Tipset traversal for speed 2020-10-12 23:53:14 -04:00
ZenGround0 79d94c4771 Hook up cmd 2020-10-12 23:09:40 -04:00
ZenGround0 a3e26233b2 Add postfind 2020-10-12 23:00:29 -04:00
zgfzgf b7726c4ca8 optimize walkSnapshot recurseLinks 2020-10-12 16:44:39 +08:00
Aayush Rajasekaran bae3b7d594 add a shed util to determine % of power that has won a block 2020-10-11 19:05:54 -04:00
Jakub Sztandera a36ec27230 Look at block base fee
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-11 21:14:51 +02:00
zgfzgf bc1f18b73a lotus bench optimize 2020-10-11 18:55:12 +08:00
Anton Evangelatov cc8a0f8022 fix deals stress tests (#265) 2020-10-11 12:38:59 +02:00
zgfzgf c3a405eac7 add lotus bench print 2020-10-11 18:26:27 +08:00
zgfzgf e4209d86f6 lotus bench add ticket-preimage 2020-10-11 17:20:55 +08:00
zgfzgf fcb9dea501 add sum sealing time 2020-10-11 16:31:39 +08:00
zgfzgf c810b157cf lotus bench delete ix 2020-10-11 11:39:27 +08:00
zgfzgf c458f6e826 lotus bench replace abi.SectorID with sid 2020-10-11 11:25:19 +08:00
zgfzgf c99e223cb1 lotus bench change and add print 2020-10-11 10:48:09 +08:00
zgfzgf 5c27d6aeee lotus-bench UnsealPiece SectorID.Number error 2020-10-11 10:12:06 +08:00
Animesh 4832cad1f1 sanity fix 2020-10-09 10:18:32 +05:30
Animesh 5930bf6d93 minor fix 2020-10-09 10:00:53 +05:30
Animesh d37389162e Add docs 2020-10-09 09:55:38 +05:30
Anton Evangelatov 1a64caaa4d record point for every fetch (#269) 2020-10-08 20:43:46 +02:00
Łukasz Magiera 0de3051821 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-08 13:10:41 +02:00
hunjixin 0f53eca883 add batch api for push messages 2020-10-08 10:04:43 +08:00
Anton Evangelatov 4cc1fcb37b graphsync - add composition for k8s (#267) 2020-10-08 01:08:30 +02:00
Raúl Kripalani 44af7e43b6 remove tvx and corpus from this repo; spun off elsewhere. (#268) 2020-10-07 19:24:46 +01:00
Animesh 673de6aeb6 Add perm tag to ClientGetDealStatus 2020-10-07 12:35:42 +05:30
Animesh bf959e45fb Add api for getting status given a code 2020-10-07 11:43:30 +05:30
Animesh ce247bcab3 Add api for getting status given a code 2020-10-07 10:27:51 +05:30
Anton Evangelatov 2a6e05b776 fix type on subscription channel (#264) 2020-10-07 00:30:58 +02:00
Steven Allen fe1ef154cf chore: update lotus to latest next (#266)
This completes the lotus upgrade dance.
2020-10-07 00:14:28 +02:00
Anton Evangelatov 6b3ffdbd3d fix lotus-soup/deals-e2e test case (#262) 2020-10-06 16:40:23 +02:00
Steven Allen 0017ea8fd0 update oni for specs-actors v2 upgrade (#263)
https://github.com/filecoin-project/lotus/pull/3936
2020-10-06 14:13:03 +02:00
Raúl Kripalani a5b57068d4 Merge pull request #252 from filecoin-project/graphsync 2020-10-05 13:58:27 +01:00
Łukasz Magiera 921d78f820 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-04 10:39:55 +02:00
Jakub Sztandera 6b5f8a6b1d Add options to set BlockProfileRate and MutexProfileFraction
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-10-02 19:06:41 +02:00
Łukasz Magiera 5932f28519 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-10-01 02:39:48 +02:00
Łukasz Magiera 79d2ddf24f Review 2020-09-30 21:18:12 +02:00
Łukasz Magiera 2cfe22d4e5 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-30 20:48:16 +02:00
Łukasz Magiera e3ee4e4718 Fix lint errors 2020-09-30 20:24:03 +02:00
Łukasz Magiera 2d16af6ee6 sectorstorage: Fix TestRedoPC1 2020-09-30 19:18:38 +02:00
Łukasz Magiera 4f97d9637e Fix storage-fsm tests 2020-09-30 19:11:58 +02:00
Łukasz Magiera c228598098 sectorstorage: Variable scopes are really hard 2020-09-30 18:16:07 +02:00
Łukasz Magiera a783bf9b8b storagefsm: Handle PC2 with missing replica 2020-09-30 17:53:15 +02:00
Łukasz Magiera 54fdd6ba5a sectorstorage: Variable scopes are hard 2020-09-30 17:48:48 +02:00
Łukasz Magiera 6ddea62d09 shed: gofmt 2020-09-30 17:26:24 +02:00
Łukasz Magiera 6855284d88 sectorstorage: Cancel non-running work in case of abort in sched 2020-09-30 17:26:09 +02:00
Łukasz Magiera 46a5beafe4 shed: Datastore utils 2020-09-30 17:25:33 +02:00
Łukasz Magiera 0f2dcf28b1 fsm: Reuse tickets in PC1 on retry 2020-09-29 10:07:49 +02:00
Raúl Kripalani bc7f20e179 Merge pull request #261 from filecoin-project/refactor-tvx 2020-09-28 22:00:28 +01:00
Łukasz Magiera 1e6a69f8aa localworker: Don't mark calls as returned when returning fails 2020-09-28 22:10:02 +02:00
Łukasz Magiera 9bd2537971 stores: Fix error printing in http handler 2020-09-28 22:06:03 +02:00
Łukasz Magiera bf554d0e43 worker: Redeclare storage early on reconnect 2020-09-28 21:11:25 +02:00
Łukasz Magiera 810c767200 worker: Redeclare storage on reconnect 2020-09-28 21:06:49 +02:00
Łukasz Magiera 4ba7af6061 worker: Mark return methods as retry-safe 2020-09-28 20:46:44 +02:00
Łukasz Magiera 86cf3c835e worker: Reconnect correctly 2020-09-28 18:30:45 +02:00
Łukasz Magiera 9e7d6823b1 sectorstorage: Cleanup callToWork mapping after work is done 2020-09-28 13:34:45 +02:00
Łukasz Magiera aa7090df49 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-28 12:55:57 +02:00
Łukasz Magiera a9d1ca4d83 Change order in miner sectors list 2020-09-28 12:08:09 +02:00
Raúl Kripalani 400af0d2fa wip accessed-cids retention. 2020-09-27 12:43:28 +01:00
Raúl Kripalani 41ab87e904 wip 2020-09-27 12:02:34 +01:00
Łukasz Magiera cf71f034dc Merge remote-tracking branch 'origin/dev' into feat/async-restartable-workers 2020-09-26 12:35:32 +02:00
zgfzgf 1a7aea1906 modify error 2020-09-25 22:59:21 +08:00
zgfzgf 3207bc4704 optimize trySched 2020-09-25 22:41:29 +08:00
zgfzgf 60e950015c modify for unsafe 2020-09-25 22:13:27 +08:00
hannahhoward 08fc0b7aec feat(graphsync): add comptability check between versions 2020-09-24 16:34:49 -07:00
Łukasz Magiera a8fcb86c10 miner allinfo: Don't fail if sector status fails 2020-09-24 22:17:20 +02:00
Raúl Kripalani 48b7945714 add circleci job for building tvx. 2020-09-24 14:08:44 +01:00
Raúl Kripalani c507f409a5 remove driver from tvx; use lotus driver. 2020-09-24 14:06:34 +01:00
Raúl Kripalani 72537b6614 Merge branch 'master' into refactor-tvx 2020-09-24 12:31:58 +01:00
Raúl Kripalani c839c5721c combine #260 and #246. 2020-09-24 12:31:03 +01:00
Łukasz Magiera 04ee53e061 sectorstorage: Show task type of ret-wait jobs 2020-09-24 11:55:11 +02:00
Łukasz Magiera f57652524c Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-23 22:31:27 +02:00
Łukasz Magiera d817dceb05 Show lost calls in sealing jobs cli 2020-09-23 19:26:35 +02:00
Łukasz Magiera c17f0d7e61 sectorstorage: Fix panic in returnResult 2020-09-23 17:37:05 +02:00
Łukasz Magiera 3003789288 worker: Use a real datastore for keeping track of calls 2020-09-23 16:12:15 +02:00
Łukasz Magiera 86c222ab58 sectorstorage: fix work tracking 2020-09-23 14:56:50 +02:00
Anton Evangelatov f21ca8591c trigger more test plans on CI (#258) 2020-09-23 12:46:45 +01:00
Łukasz Magiera ce6b92484f Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-23 11:31:21 +02:00
Will 80619fa8a0 Merge pull request #259 from filecoin-project/generalextraction-updated-deps
chore: update deps
2020-09-22 21:49:40 -07:00
Steven Allen 9a0d5cd739 update for lotus/actors network upgrade changes 2020-09-22 18:37:22 -07:00
Łukasz Magiera 6185e157e9 sectorstorage: calltracker: work around cbor-gen bytearray len limit 2020-09-23 00:29:10 +02:00
Łukasz Magiera 04ad1791b0 localworker: Fix contexts 2020-09-23 00:10:36 +02:00
Łukasz Magiera bb5cc06677 Fix workid param hash 2020-09-22 23:33:13 +02:00
Łukasz Magiera 706f4f2ef5 worker: Don't die with the connection 2020-09-22 18:36:44 +02:00
Alan Shaw 36b8a017bd chore: update deps 2020-09-22 11:56:32 +01:00
Łukasz Magiera b8865fb182 workers: Mark on-restart-failed returned tasks as returned 2020-09-22 01:00:28 +02:00
Łukasz Magiera 03c3d8bdb3 workers: Return unfinished tasks on restart 2020-09-22 00:52:33 +02:00
Łukasz Magiera aa5bd7bc17 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-21 22:36:16 +02:00
Anton Evangelatov 1c9257d537 nightly/hourly job to run testground testplans (#253)
* schedule a job every 5min.

* upgrade FFI again

* download testground with supervisor; run async job

* fixup
2020-09-17 18:22:09 +02:00
Anton Evangelatov ea56e56ec1 fix routing policy (#257) 2020-09-17 18:04:11 +02:00
Łukasz Magiera 17680fff55 gofmt 2020-09-17 00:35:57 +02:00
Łukasz Magiera d9d644b27f sectorstorage: handle restarting manager, test that 2020-09-17 00:35:09 +02:00
Łukasz Magiera 5e09581256 sectorstorage: get new work tracker to run 2020-09-16 22:33:58 +02:00
Will Scott ed7423b2b5 don't include not-yet-accessed blocks in car generation 2020-09-16 12:22:38 -07:00
Will Scott 77a956cda4 Merge branch 'master' of github.com:filecoin-project/oni into generalextraction 2020-09-16 10:39:50 -07:00
Will Scott a9253837ac checkpoint 2020-09-16 10:39:37 -07:00
Anton Evangelatov 63f903a3fb clone fil-blst in extra for the local:docker runner (#256) 2020-09-16 17:30:03 +02:00
Anton Evangelatov f702ce331a enable paych tests (#255)
* enable paych tests

* use new APIs and values
2020-09-16 17:29:37 +02:00
Łukasz Magiera b1361aaf8b sectorstorage: wip manager work tracker 2020-09-16 17:08:05 +02:00
Anton Evangelatov 8b7e7d438c upgrade lotus to master, and sync filecoin-ffi versions (#254)
* upgrade lotus to master, and sync filecoin-ffi versions

* git submodule for filecoin-project/fil-blst

* go mod tidy

* try docker golang executor
2020-09-16 14:52:51 +02:00
Anton Evangelatov 097d82535d upgrade lotus-soup (drand, lotus, stop/resume drand) (#249)
* wip

* commit with fewer error messages

* reduce headlag from 3 to 1

* fixes for params

* add composition for local:docker

* revert drand-halt plan

* initial monitor of miner power and chain epochs

* revert params to be same as filecoin mainnet

* increase timeout for drand resuming from 30sec to 120sec.

* increase log level

* upgrade lotus to v0.6.1

* upgrade drand to v1.1.1

* increase prepare node timeout from 1 min to 3 min

* upgrade drand to master. increase timeouts for prepare drand node

* nil the stmgr.ForksAtHeight map

* modify starting/stopping of drand within testplan

* increase drand outage to 45min. so that we miss windows

* upgrade proof parameters in docker images

* revert in-complete changes

* use correct runtime debug image
2020-09-16 12:51:23 +02:00
Łukasz Magiera 03cf6cca40 Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-15 17:47:03 +02:00
Will Scott 20a0f7ac68 flip to test-vectors schema 2020-09-14 12:50:50 -07:00
Will Scott 6cff57ab43 Merge branch 'master' of github.com:filecoin-project/oni into generalextraction 2020-09-14 12:35:28 -07:00
Łukasz Magiera e9d25e5919 More fixes 2020-09-14 20:28:47 +02:00
Łukasz Magiera 381a6cdfac Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-14 19:11:50 +02:00
Łukasz Magiera 1ebca8f732 more working code 2020-09-14 19:09:01 +02:00
Raúl Kripalani 172204c933 increase chunk size; change composition. 2020-09-11 23:42:09 +01:00
Raúl Kripalani 77000db747 wip; add concurrency; make it work. 2020-09-11 22:36:38 +01:00
Raúl Kripalani 6563a68ae2 wip graphsync stress test. 2020-09-11 00:22:59 +01:00
Anton Evangelatov d9bcdfe61b Update README.md (#251) 2020-09-10 20:13:34 +02:00
Łukasz Magiera 5f08fe7ead Merge remote-tracking branch 'origin/master' into feat/async-restartable-workers 2020-09-10 17:30:54 +02:00
Anton Evangelatov d3f6657032 Update README.md (#250) 2020-09-10 15:31:42 +02:00
Łukasz Magiera 554570f884 docsgen 2020-09-07 17:57:23 +02:00
Łukasz Magiera 231a9e4051 Fix sealing sched tests 2020-09-07 17:55:31 +02:00
Łukasz Magiera 9e6f974f3c storage: Fix build 2020-09-07 16:12:55 +02:00
Łukasz Magiera 06e3852cef storage: Integrate async workers in sealing manager 2020-09-07 12:20:50 +02:00
Łukasz Magiera 5d73943929 storage: Fix import cycle 2020-09-06 18:54:00 +02:00
Łukasz Magiera 159ce13f5e Async worker API 2020-09-06 18:47:16 +02:00
Will Scott ed12b83b4e Expand extraction / replay to
* allow preceeding messages
* use `stateCall` rather than state replay
* work on state root CID rather than tipset
2020-08-28 13:41:16 -07:00
dirkmc 6be293e848 payment channels tests improvements (#245)
* fix: payment channels tests

* fix: paych - signal to miners to stop mining when clients are done

* fix: go mod tidy
2020-08-28 13:36:20 +01:00
Alan Shaw 9cebb09a5f docs: add @willscott and @alanshaw to the team (#244)
Hooray \o/!
2020-08-26 11:15:36 +01:00
dirkmc f6f3ffc254 docs: remove reference to testground oni branch in README (#243) 2020-08-26 11:07:08 +01:00
Raúl Kripalani 497bda21b2 transfer builders and scripts to filecoin-project/test-vectors. (#242) 2020-08-16 20:36:49 +01:00
Raúl Kripalani 6164d16f19 migrate multisig suite. (#241) 2020-08-16 19:27:53 +01:00
Raúl Kripalani 328cd14897 migrate transfer suite. (#240) 2020-08-16 13:47:21 +01:00
Raúl Kripalani 6954e6cb0e migrate actor creation suite. (#239) 2020-08-16 13:40:02 +01:00
Raúl Kripalani ad17dc227c upgrade test vectors to latest lotus (#238) 2020-08-16 00:03:58 +01:00
Raúl Kripalani 955b445723 generator: stamp vectors with generation data; omitempty. (#237) 2020-08-14 21:30:50 +01:00
Raúl Kripalani b2adc12287 rm suite_messages_nested.go. (#236) 2020-08-14 19:48:09 +01:00
Anton Evangelatov 0afeed6108 nested and paych suites in generator format (#235) 2020-08-14 19:40:26 +01:00
Anton Evangelatov b2c2a7b5d0 nested test suite (#231) 2020-08-14 19:34:02 +02:00
Raúl Kripalani acbb80920b generator; single main() entrypoint for each suite. (#232) 2020-08-14 18:25:35 +01:00
Alan Shaw 9ba87d4613 refactor: switch to base64 encoding for binary data (#233) 2020-08-14 19:05:29 +02:00
Raúl KripalaniandAnton Evangelatov 99f466e35e test vector builder API + partial migration of suites (#229)
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-08-14 13:51:43 +01:00
Anton Evangelatov ffe3019561 messages/nested suite (#215)
* wip

* print out failing test

* missing account in state

* enable puppet test

* add missing preroot

* add puppet actor to lvm

* refactor getting post root and serialize of test vector (#217)
2020-08-10 16:38:34 +02:00
Alan Shaw 47f0ef0eae test: port chain validation multisig test suite (#216) 2020-08-07 16:45:52 +01:00
Alan Shaw be5bd41640 feat: add test name to test vector meta (#214)
So we can more easily distinguish between test vectors.
2020-08-07 15:36:00 +01:00
Anton Evangelatov de62012a7f add messages/transfer suite (#213) 2020-08-07 16:25:58 +02:00
Alan Shaw a793824d2c feat: test driver automatically records applied messages in test vector (#212)
The `TestDriver` now records applied messages in it's `TestVector` whenever an `Apply*` method is called. This removes the need for manual message serialization and recording in the tests.
2020-08-07 15:12:38 +01:00
Alan Shaw 52cf367a92 feat: add MustMarshalJSON for more DRY outputting (#211)
Small change to make encoding and printing the test vector output a bit more succinct.
2020-08-07 14:09:10 +01:00
Alan Shaw 81ea0ec5f3 refactor: add default TestVector to TestDriver (#208)
This PR adds a `TestVector` to the `TestDriver` so that test driver methods that apply messages can be recorded in the test vector.

refs #194
2020-08-07 13:47:16 +01:00
Anton Evangelatov 7d118e1b12 fix two disabled tests (#207) 2020-08-06 18:57:15 +02:00
Raúl Kripalani fd35438a30 schema: add message receipts + description and comments informational fields (#209) 2020-08-06 17:20:17 +01:00
Raúl Kripalani 8203a5d2c3 various fixes: warn on predicted nonce mismatch, randomness length, add missing mocked verification calls (#199)
* warn when extracting a message from a tipset that contains
  more leading messages from the same sender, as this leads to
  nonce misalignment.
* fix mocked randomness being too short (must be 32 bytes).
* mock some further verification syscalls.
2020-08-06 10:43:10 +01:00
Anton Evangelatov 9c8ced1fc6 input from stdin functionality for exec-lotus ; initial test suites in ci (#196) 2020-08-05 20:59:57 +02:00
Anton Evangelatov f97c9e08c0 upgrade lotus-soup to use latest commit from next branch (#193) 2020-08-05 19:51:25 +02:00
Anton Evangelatov 8a59bf7c45 build tvx as part of ci (#192) 2020-08-05 19:45:57 +02:00
5353210814 generate test-vectors based on tests from chain-validation project (#181)
* Read a subset of filecoin state over the full node API

* wip

* import export wip

* extract actors from message

* generate car for any state

* library for providing a pruned statetree

* test vector schema draft + example 'message' class test vector.

* message => messages test vector class.

* fixup

* wip

* use lb.NewBlockstore with ID

* fixup lotus-soup, and generate

* fix deals

* magic params

* work on schema / export of test vector

* fixup

* wip deserialise state tree

* pass at building a test case from a message

* progress loading / serializing

* recreation of ipld nodes

* generation of vector creates json

* kick off tvx tool.

* wip

* wip

* retain init actor state.

* initial test with printed out state

* remove testing.T, but keep require and assert libraries

* wip refactor state tree plucking.

* simplified

* removed factories

* remove builder.Build ; remove interface - use concrete iface

* comment out validateState

* remove Validator

* remove TestDriverBuilder

* remove client

* remove box

* remove gen

* remove factories

* remove KeyManager interfafce

* moved stuff around

* remove ValidationConfig

* extract randomness

* extract config and key_manager

* extract statewrapper

* extract applier

* rename factories to various

* flatten chain-validation package

* initial marshal of test vector

* do not require schema package

* fixup

* run all messages tests

* better names

* run all messages tests

* remove Indent setting from JSON encoder for now

* refactor, and actually running successfully ;-)

* remove irrelevant files; rename extract-msg command.

* remove root CID from state_tree object in schema.

* add tvx/lotus package; adjust .gitignore.

* tidy up command flag management.

* add comment.

* remove validateState and trackState

* remove xerrors

* remove NewVM

* remove commented out RootCID sets

* enable more tests

* add all `message_application` tests

* delete all.json

* update Message struct

* fix message serialization

* support multiple messages

* gofmt

* remove custom Message and SignedMessage types

* update tests with gzip and adhere to new schema for compressed CAR

* improved iface for Marshal

* update Validation

* remove test-suites and utils

* better names for chain. methods

* go mod tidy

* remove top-level dummyT

Co-authored-by: Will Scott <will@cypherpunk.email>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
2020-08-05 19:40:09 +02:00
Anton Evangelatov 17f0b4a2e1 support multiple messages /1 (#185)
* support multiple messages

* update corpus/schema.json

* fix required
2020-08-05 17:00:14 +02:00
Raúl Kripalani 163721651a dedup state tree CARs from test vectors. (#187) 2020-08-05 15:52:57 +01:00
b7e3b4ff77 unified tvx tool; end-to-end MVP for extracting+running msg-class vectors (#177)
Co-authored-by: Will Scott <will@cypherpunk.email>
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-08-05 13:20:13 +01:00
Anton Evangelatov 62a9982b76 fix lotus-soup deals baseline test (#172)
* fix lotus-soup deals baseline test

* remove comment

* go mod tidy
2020-07-30 16:22:43 +02:00
Anton Evangelatov 42ef5d3460 fix deps (#171) 2020-07-29 15:12:51 +02:00
Raúl Kripalani 700a121ccd add workstream labels. (#161) 2020-07-27 19:05:28 +01:00
Raúl Kripalani 0dc490979f readme: explain batch-run of randomized test cases. (#159) 2020-07-27 15:36:23 +01:00
0d0fc2d433 randomized network params & batch runner (#142)
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
2020-07-27 14:58:27 +01:00
Anton Evangelatov 7af5ab5445 slashing/termination from failed windowed post + fast retrieval benchmarks (#95) 2020-07-27 13:57:01 +02:00
Anton Evangelatov 510f6bb830 upgrading to current version of next (#156) 2020-07-21 13:39:36 +02:00
Anton Evangelatov e0e4432703 upgrade to next and retrieval signature (#151)
* upgrade to next and retrieval signature

* upgrade buildbase image and bump up lotus version

* update extra/filecoin-ffi

* note on dependencies

* set expected seal delay
2020-07-17 14:28:52 +02:00
Lucas Molas 48a2161306 readme: update submodule command (#141) 2020-07-10 14:22:56 +02:00
Anton Evangelatov 2c3d473193 descriptive composition file names (#133) 2020-07-10 13:48:52 +02:00
Anton Evangelatov a50cdda7a5 improved readme - lotus-soup (#136) 2020-07-09 19:09:32 +02:00
Anton Evangelatov 58558f2e1d one more zero (#139) 2020-07-09 18:42:49 +02:00
Anton Evangelatov 36c722731b fix balance (#138) 2020-07-09 18:31:57 +02:00
Anton Evangelatov 1cf77d2172 baseline composition 5 clients 1 miner local:docker (#137) 2020-07-09 18:25:41 +02:00
Anton Evangelatov 5d40607cf9 move compositions to _compositions (#132) 2020-07-09 16:42:22 +02:00
Anton Evangelatov 4caecf34ae print auth token ; set seal delay ; disable permissioned api proxies ; bump balances (#122)
* print auth token ; set seal delay

* disable permissioned proxy /2 (#123)

* bump up balances (#124)

* upgrade go.mod to use latest lotus next

* make compiler happy due to change in APIs

* fix k8s compositions to use natural time mining

* add note for balances
2020-07-09 15:57:18 +02:00
Anton EvangelatovandRaúl Kripalani f20b25a123 improve readme with instructions on how to run test cases (#129)
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
2020-07-09 14:41:27 +01:00
Yusef Napora f19148d765 Merge pull request #114 from filecoin-project/attofil
Attofil
2020-07-08 11:20:42 -04:00
Anton Evangelatov 6e45d6b68d Merge pull request #117 from filecoin-project/consistent-compositions
consistent compositions
2020-07-08 17:15:21 +02:00
Raúl Kripalani 3e06729877 readme: add links to testing topics labels. 2020-07-08 15:59:29 +01:00
Raúl Kripalani b6994b9615 add hint/needs-scoring label. 2020-07-08 15:28:37 +01:00
Yusef Napora 4227f2d9dc rename attoFil -> filToAttoFil 2020-07-08 10:25:50 -04:00
Raúl Kripalani 3dbea4b0b7 Update test-scenario-request.md 2020-07-08 15:05:21 +01:00
Raúl Kripalani 31af5419a2 Delete system-process.md 2020-07-08 15:05:01 +01:00
Raúl Kripalani 0efcf1b622 add topic/deals label. 2020-07-08 14:05:36 +01:00
Anton Evangelatov a1166d6fdb consistent compositions 2020-07-08 14:50:07 +02:00
Raúl Kripalani ac5fc72347 add some of @raulk's notes. 2020-07-08 13:29:39 +01:00
Raúl Kripalani 97a17bd587 fix labels. 2020-07-08 13:01:30 +01:00
Raúl Kripalani daee5ab1d3 update labels with topics. 2020-07-08 12:49:17 +01:00
Raúl Kripalani 645da2b749 readme: add testing topics covered by Oni. 2020-07-08 12:18:48 +01:00
Yusef Napora 4926a788c1 fix max fil check 2020-07-07 17:24:13 -04:00
Yusef Napora 735c1ecc2a update param type in manifest 2020-07-07 17:10:06 -04:00
Yusef Napora 8a2a5e7e85 allow fractional balance parameters 2020-07-07 17:03:05 -04:00
Raúl Kripalani 6a45211a00 Merge pull request #109 from filecoin-project/plan/payments 2020-07-07 17:51:25 +01:00
Raúl Kripalani f46375a50a rename ClientAddressesMsg#Peer{=>Net}Addr. 2020-07-07 17:38:15 +01:00
Raúl Kripalani 69332e1189 sanity check: make sure proof parameters are present; add Makefile for easy download. 2020-07-07 17:37:07 +01:00
Raúl Kripalani 6eb5e24988 move global var setting to init.go. 2020-07-07 17:37:07 +01:00
Raúl Kripalani cb3697cb5a make composition.toml use local:exec; mine in present. 2020-07-07 17:37:07 +01:00
Raúl Kripalani 5aac474737 Update DELVING.md 2020-07-07 16:54:55 +01:00
Raúl KripalaniandAnton Evangelatov 99b6bb324d fix exposed_ports in composition.
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-07-07 14:25:39 +01:00
Raúl Kripalani 5d1d7335b0 WIP payments channels stress test (blocked). 2020-07-07 14:08:51 +01:00
Anton Evangelatov e899da0063 Merge pull request #81 from filecoin-project/plan/deal-stress-test
Basic deal stress test
2020-07-07 13:42:07 +02:00
Anton Evangelatov 0df9b57d48 revert runtime image to v2 2020-07-07 13:21:05 +02:00
Anton Evangelatov e244f8d3b2 delete original dashboard 2020-07-07 13:19:51 +02:00
Anton Evangelatov c77cd13c97 improved dashboards 2020-07-07 13:19:24 +02:00
Yusef Napora 300d401686 Merge pull request #104 from filecoin-project/fix/sync-mining
retry sync mining on error
2020-07-06 17:00:24 -04:00
Yusef NaporaandAnton Evangelatov 8a4b6473f4 fix exposed port syntax
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-07-06 16:58:59 -04:00
Yusef Napora 00cc982bcb panic if we fail to mine 100x in a row 2020-07-06 16:10:53 -04:00
Anton Evangelatov 4dea3f41a2 use lotus master 2020-07-06 19:28:19 +02:00
Anton Evangelatov 1c9b867593 ERROR -> WARN ; bump up block delay and propagation delay 2020-07-06 19:27:18 +02:00
Anton Evangelatov 920e6f5049 add missing %s 2020-07-06 19:18:52 +02:00
Anton Evangelatov 00d837d454 add 2 panels for counters 2020-07-06 19:14:53 +02:00
Anton Evangelatov 733f2aa87f fixes 2020-07-06 18:24:11 +02:00
Yusef Napora 2ca9e9f937 loop and retry if mining a block fails 2020-07-06 12:09:53 -04:00
Anton Evangelatov dd3d04fed2 add basic timers 2020-07-06 17:49:42 +02:00
Anton Evangelatov 4ce21af7de go mod tidy 2020-07-06 17:07:21 +02:00
Anton Evangelatov db383b6a8b Merged with master (so that we get blockchain stats) 2020-07-06 17:06:44 +02:00
Anton Evangelatov b906c492a2 Merge pull request #85 from filecoin-project/dashboard-panels-lotus-metrics
add panels for metrics from lotus ; collect stats about chain
2020-07-06 16:58:09 +02:00
Raúl Kripalani 8d5a8b0927 make the testkit friends with local:exec. (#105) 2020-07-06 15:47:17 +01:00
Anton Evangelatov 887bf0511f fix signature for NewTestMiner 2020-07-06 13:49:27 +02:00
Anton Evangelatov f529f3b14d move ffi forward 2020-07-06 13:35:01 +02:00
Anton Evangelatov 75b842b430 upgrade lotus 2020-07-06 13:25:38 +02:00
Anton Evangelatov 1289bca9d8 merged master 2020-07-06 13:16:40 +02:00
Anton Evangelatov e7271cfd0b Merge pull request #103 from filecoin-project/upgrade-lotus
upgrade lotus and plans to use buildbase:v4
2020-07-06 13:14:47 +02:00
Anton Evangelatov f4568fc819 Merge pull request #102 from filecoin-project/upgrade-ffi
upgrade buildbase to v4
2020-07-06 13:14:23 +02:00
vyzo f062b55cfc gomod: update go-fil-markets for panic fix cherry-pick 2020-07-06 13:46:32 +03:00
Anton Evangelatov f7715ab1ba bump filecoin-ffi to 6a143 2020-07-03 21:36:57 +02:00
Anton Evangelatov 84cf7d8c14 revert specs-actors 2020-07-03 21:32:27 +02:00
Anton Evangelatov cd3dbf615f remove sleep 2020-07-03 21:29:04 +02:00
Anton Evangelatov 7a5f1390d1 revert build flags 2020-07-03 21:28:40 +02:00
Anton Evangelatov 027b80f5af revert soup main.go 2020-07-03 21:27:47 +02:00
Anton Evangelatov 89e413dba7 revert composition 2020-07-03 21:26:58 +02:00
Anton Evangelatov 9027161453 remove composition 2020-07-03 21:26:18 +02:00
Anton Evangelatov 20b4375f25 upgrade lotus to master 2020-07-03 21:24:31 +02:00
Anton Evangelatov aa90a8a989 upgrade lotus 2020-07-03 20:57:57 +02:00
Anton Evangelatov eadb49c56d works 2020-07-03 20:48:26 +02:00
Anton Evangelatov 9148b0f865 lotus at 3db96653 2020-07-03 20:35:53 +02:00
Anton Evangelatov 3aacb7c377 remove stats 2020-07-03 20:31:18 +02:00
Anton Evangelatov 1beb8faa26 upgrade buildbase to v4 2020-07-03 20:11:14 +02:00
Anton Evangelatov 8708f31c45 wip 2020-07-03 20:06:10 +02:00
vyzo d867f0c04e set the PropagationDelay to 2 2020-07-03 19:50:28 +03:00
Anton Evangelatov 84bc071179 wip 2020-07-03 15:38:19 +02:00
Anton Evangelatov 7258ad00f4 Merge pull request #99 from filecoin-project/docs/delving
initial DELVING.md document.
2020-07-03 15:30:27 +02:00
Raúl Kripalani 483a98fc8c Update test-scenario-request.md 2020-07-03 14:19:32 +01:00
Anton Evangelatov c3a13240ab add lsm commands 2020-07-03 14:26:32 +02:00
Anton Evangelatov a223f80992 commands for cluster:k8s ; automating setting up of envs 2020-07-03 14:24:10 +02:00
Raúl Kripalani 06e5c42541 add instruction on submitting issues upstream. 2020-07-03 12:28:09 +01:00
Raúl Kripalani 2ed7540dfb initial DELVING.md document. 2020-07-03 12:15:58 +01:00
vyzo 26ad4dabd1 Merge branch 'master' into plan/deal-stress-test 2020-07-03 13:04:49 +03:00
vyzo 6c14fdaca7 Merge pull request #97 from filecoin-project/fix/connect-miners
connect miners in a full mesh.
2020-07-03 13:03:30 +03:00
vyzo 91d389330e compositions for natural time mining in deal stress tests 2020-07-03 12:57:11 +03:00
vyzo 62f1e47bd1 expose rpc ports 2020-07-03 12:54:09 +03:00
vyzo 2b6c1e0187 add delay before starting deals 2020-07-03 12:20:16 +03:00
vyzo faeee03dd1 gomod: update lotus@master 2020-07-03 09:41:04 +03:00
Raúl Kripalani 7e63197e97 connect miners in a full mesh. 2020-07-02 22:49:59 +01:00
vyzo 65cc1a4c01 add testground build tag to circle ci 2020-07-02 18:53:51 +03:00
vyzo b6c830c254 Merge branch 'master' into plan/deal-stress-test 2020-07-02 18:52:25 +03:00
vyzo 19ce23e907 initialize block delay to its minimum value of 1 2020-07-02 18:44:13 +03:00
vyzo 122926ad49 add testground build selector to compositions 2020-07-02 18:38:57 +03:00
Anton Evangelatov 01d6554a00 Merge pull request #94 from filecoin-project/listen-to-all-ifaces
listen to all ifaces when exposing internal apis
2020-07-02 15:27:21 +02:00
Anton Evangelatov 22005d642f listen to all ifaces when exposing internal apis 2020-07-02 15:20:04 +02:00
Anton Evangelatov b601fd12f7 Merge pull request #90 from filecoin-project/hook-up-miner-rpc-apis
export both apis for miners
2020-07-02 14:20:10 +02:00
Anton Evangelatov 740741b129 add mining_mode to deals-e2e test case 2020-07-02 14:13:39 +02:00
Anton Evangelatov 6d0c0b4323 Merge pull request #92 from filecoin-project/rm-lotus-testground
remove deprecated lotus-testground.
2020-07-02 13:24:06 +02:00
Anton Evangelatov 1623917bc4 Merge branch 'master' into hook-up-miner-rpc-apis 2020-07-02 13:21:08 +02:00
vyzo 9c6b6e61fe remove duplicate miner addrs collection 2020-07-02 13:23:26 +03:00
vyzo bcd3e79557 Merge branch 'master' into plan/deal-stress-test 2020-07-02 12:50:49 +03:00
vyzo fee13a6daf rename test case to deals-stress-test 2020-07-02 12:49:27 +03:00
Raúl Kripalani 619f3fd60b update runtime image to v2. 2020-07-01 19:48:23 +01:00
Raúl Kripalani 4eb2218cf3 Update FFI and Lotus versions (#89) 2020-07-01 19:36:46 +01:00
Raúl Kripalani 45f20b8505 remove lotus-testground from CircleCI. 2020-07-01 19:20:36 +01:00
Raúl Kripalani 561b10a62b remove deprecated lotus-testground. 2020-07-01 19:11:36 +01:00
Yusef Napora e66d439cb4 Merge pull request #91 from filecoin-project/fix/drand-suspend
fix drand merge mess
2020-07-01 14:06:16 -04:00
Yusef Napora 83313ead4f fix drand merge mess 2020-07-01 13:57:27 -04:00
Anton Evangelatov e6bc6aafdf resolve merge conflicts 2020-07-01 19:40:48 +02:00
Anton Evangelatov c7f95280e4 update params for ports 2020-07-01 19:39:17 +02:00
Yusef Napora 459cd657d3 Merge pull request #70 from filecoin-project/plan/drand-halting
plan: drand halting
2020-07-01 13:06:14 -04:00
Yusef Napora ea6dbc912b merge origin/master into plan/drand-halting 2020-07-01 12:59:22 -04:00
Yusef Napora a8841a8b76 merge testkit into plan/drand-halting 2020-07-01 12:54:46 -04:00
Anton Evangelatov 167a30fcb9 export both apis for miners 2020-07-01 18:54:20 +02:00
Raúl Kripalani 274b07f50a Merge branch 'master' into plan/deal-stress-test 2020-07-01 17:38:56 +01:00
Raúl Kripalani e7488209c8 refactor soup: assemble testkit; separate test case logic from node templates. (#88) 2020-07-01 17:29:09 +01:00
Yusef Napora 11bde71b92 fix log message 2020-07-01 12:09:58 -04:00
Yusef Napora cecdb0c896 halt drand during lotus chain sync 2020-07-01 12:09:58 -04:00
Yusef Napora 4cd197cb13 wait for drand chain to catchup in Resume 2020-07-01 12:09:58 -04:00
Yusef Napora 72426d21fb use latest sdk-go 2020-07-01 12:09:58 -04:00
Yusef Napora 4ac2de1ee5 add genesis_timestamp_offset to drand-halting testcase 2020-07-01 12:09:10 -04:00
Yusef Napora e14b716643 add suspend_events param to manifest 2020-07-01 12:09:10 -04:00
Yusef Napora f0c636f243 enable go build cache 2020-07-01 12:09:10 -04:00
Yusef Napora 8aef427fd8 implement halting as state machine 2020-07-01 12:09:10 -04:00
Yusef Napora 6c4e83f8a2 use global params in drand compositions 2020-07-01 12:06:50 -04:00
Yusef Napora 04311d6c1a fix rebase cruft 2020-07-01 12:06:50 -04:00
Yusef Napora 9cb809ac60 add DebugSpew helper 2020-07-01 12:05:45 -04:00
Yusef Napora 79b0472924 set gossipRelay field 2020-07-01 12:04:19 -04:00
Yusef Napora 818bdd49b8 fix default log level 2020-07-01 12:04:19 -04:00
Yusef Napora 8ec4eb8030 fix log level in drand-halting 2020-07-01 12:04:19 -04:00
Yusef Napora 45068f601a use testground selector 2020-07-01 12:04:19 -04:00
Yusef Napora 406bd5da84 define new test case for drand-halting 2020-07-01 12:04:19 -04:00
Yusef Napora 0b386f21d5 refactor drand node and implement halting 2020-07-01 12:02:40 -04:00
Yusef Napora 8469f67a38 set drand_period=1s 2020-07-01 11:57:36 -04:00
Anton Evangelatov e01b887bc8 wip 2020-07-01 11:57:36 -04:00
Raúl Kripalani de6d927914 go mod tidy. 2020-07-01 14:54:59 +01:00
Raúl Kripalani e5d6751b09 rename testkit.{Run=>Handle}DefaultRole. 2020-07-01 14:53:34 +01:00
Raúl Kripalani 81f8451a23 iterate on testkit library. 2020-07-01 14:41:38 +01:00
Raúl Kripalani 436fe158c9 form testkit; separate test case logic from node templates. 2020-07-01 13:13:17 +01:00
Raúl Kripalani 7f3716504b refactor lotus recipes to make them more manageable. (#86)
- Each role now has its own file (role_*.go).
- Options have their own file (lotus_opts.go).
- Sync service constructions have their own file (sync.go).
- Utilities are functionally grouped in files ({deals,retrieval}.go).
2020-06-30 23:02:01 +01:00
Anton Evangelatov 035bf8b7db Merge pull request #82 from filecoin-project/sector-analysis-tools 2020-06-30 18:07:03 +02:00
Anton Evangelatov af582aff02 register and export lotus metrics (#84) 2020-06-30 18:02:02 +02:00
Anton Evangelatov 46beab3cf1 fixup 2020-06-30 17:59:42 +02:00
Anton Evangelatov 0a9af6ad5c extract startServer 2020-06-30 17:53:27 +02:00
Anton Evangelatov e3d2d2e7c1 extract withApiEndpoint 2020-06-30 17:50:21 +02:00
vyzo 903b1ea914 more logging for serial execution 2020-06-30 16:05:23 +03:00
Anton Evangelatov b62878c260 upgrade go-sdk 2020-06-30 14:47:09 +02:00
Anton Evangelatov 63bce1a426 extract starting of rpc servers 2020-06-30 13:56:24 +02:00
Anton Evangelatov 954ad1f396 fixup 2020-06-30 13:31:50 +02:00
Anton Evangelatov 33e60df301 resolved merge conflicts 2020-06-30 13:23:02 +02:00
Anton Evangelatov 204714a01f wip 2020-06-30 13:20:10 +02:00
Anton Evangelatov eec5c23671 working client rpc 2020-06-30 13:18:02 +02:00
vyzo 4595ded0d3 manifest and composition for deal stress test 2020-06-30 14:07:00 +03:00
vyzo 36f82ab9fe deal stress test 2020-06-30 13:57:54 +03:00
vyzo 62f63a29b5 remove useless error argument from retrieveData 2020-06-30 13:56:37 +03:00
vyzo 24730e158b Merge pull request #76 from filecoin-project/feat/mine-natural-time
Option to mine in natural time
2020-06-29 20:24:19 +03:00
vyzo 6b44e6d0d8 update composition-natural.toml 2020-06-29 20:06:38 +03:00
vyzo 79246e6ee9 record shutting down message in a more pertinent place 2020-06-29 20:05:44 +03:00
vyzo cced69e496 add composition for natural time test 2020-06-29 20:05:44 +03:00
vyzo da85855a6b option to turn on natural time mining 2020-06-29 20:05:43 +03:00
Anton Evangelatov 6c8abeb067 Merge pull request #78 from filecoin-project/fix-compositions
fix compositions
2020-06-29 19:04:08 +02:00
Anton Evangelatov b3b89b2072 Merge pull request #77 from filecoin-project/seq-num-for-all-miners
get seq num based on role, not based on group
2020-06-29 19:02:25 +02:00
Anton Evangelatov 05e5c42f33 fix compositions 2020-06-29 19:00:18 +02:00
Anton Evangelatov b47641f1c2 introduce 2 groups of miners 2020-06-29 18:48:10 +02:00
Anton Evangelatov 22ac7debb9 fixup 2020-06-29 18:42:05 +02:00
Anton Evangelatov 50b9a7f212 get seq num based on role, not based on group 2020-06-29 18:38:28 +02:00
vyzo ea2935e4d7 Merge pull request #75 from filecoin-project/synchronise-miners
sync miners
2020-06-29 19:01:49 +03:00
Anton Evangelatov 0ec247de8c fix broken counter 2020-06-29 17:21:50 +02:00
Anton Evangelatov c4347c0485 wip 2020-06-29 17:10:31 +02:00
Anton Evangelatov 909c12c6b4 sync miners 2020-06-29 17:06:04 +02:00
Anton Evangelatov 222d718ccd wip 2020-06-29 14:57:55 +02:00
Anton Evangelatov 666023f804 Merge pull request #72 from filecoin-project/basic-metrics
basic metrics to baseline tests
2020-06-29 13:41:50 +02:00
Anton Evangelatov 38132cdb94 go-sdk from master 2020-06-26 23:44:04 +02:00
Anton Evangelatov ba645cfbea better dashboard 2020-06-26 23:12:03 +02:00
Anton Evangelatov 2b9a6d8574 better dashboard 2020-06-26 22:56:43 +02:00
Anton Evangelatov 0d908c18b4 who mined block 2020-06-26 22:07:49 +02:00
Anton Evangelatov 0487d60d0e better metrics 2020-06-26 18:56:09 +02:00
Anton Evangelatov 018406b50c better dashboard 2020-06-26 18:27:23 +02:00
Anton Evangelatov e388d96073 metric for offer 2020-06-26 18:19:40 +02:00
Anton Evangelatov 5fa2c1c410 more compositions 2020-06-26 18:18:44 +02:00
Anton Evangelatov f91364fb3e extract common vars 2020-06-26 17:00:13 +02:00
Anton Evangelatov 943d9a27ec update dashboard data source 2020-06-26 17:00:13 +02:00
Anton Evangelatov 3ff084b720 baseline test dashboard 2020-06-26 17:00:13 +02:00
Anton Evangelatov d7631fb997 basic timers and counters 2020-06-26 17:00:13 +02:00
vyzo 2256a7237c Merge pull request #74 from filecoin-project/bug-fixes
A couple of bug fixes
2020-06-26 17:50:53 +03:00
vyzo b7403fd93c fix mining termination race condition 2020-06-26 17:44:40 +03:00
vyzo 3d5f58c8b8 sort preseals by miner GroupSeq 2020-06-26 17:30:44 +03:00
vyzo f7af27f1d2 fix miner synchronization 2020-06-26 17:27:10 +03:00
vyzo 119defc5e7 Merge pull request #71 from filecoin-project/pubsub-tracer
Pubsub tracing
2020-06-26 17:20:55 +03:00
vyzo 2a8333e0e4 gomod: update go-libp2p-pubsub-tracer@master 2020-06-26 17:16:50 +03:00
vyzo 95c3229f89 Merge branch 'pubsub-tracer' of github.com:filecoin-project/oni into pubsub-tracer 2020-06-26 14:12:58 +03:00
vyzo 909e0e401f define enable_pubsub_tracer in manifest.toml 2020-06-26 14:12:22 +03:00
vyzo b1159b657d log close errors with RecordMessage 2020-06-26 14:10:39 +03:00
vyzoandAnton Evangelatov 30a6361a8f fix typo
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-06-26 14:06:45 +03:00
vyzo eb65f1e441 output the tracer logs under TestOutputPath 2020-06-26 13:14:28 +03:00
vyzo a612b77cee simplify code by removing extraneous conversion to multiaddr
just Cast to verify correctness and panic if something is wrong
2020-06-26 12:16:36 +03:00
vyzo 16149b9198 add composition with pubsub tracing 2020-06-26 12:05:08 +03:00
vyzo 00f137ba3e add pubsub-tracer role to baseline 2020-06-26 12:04:20 +03:00
vyzo 71503cce8b add pubsub tracer config to scaffolding 2020-06-26 11:58:56 +03:00
vyzo 1c2af85b20 pubsub tracer role 2020-06-26 11:49:24 +03:00
vyzo 3ff9045178 gomod: import go-libp2p-pubsub-tracer@feat/traced-lib and go-libp2p 2020-06-26 11:49:14 +03:00
Yusef Napora c66dfe1c03 Merge pull request #53 from filecoin-project/feat/drand-setup
initial drand setup
2020-06-25 13:07:26 -04:00
Yusef Napora 19f0aa75eb rm resources block from drand composition 2020-06-25 13:01:46 -04:00
Yusef Napora 8b0f6c355c read from sub.Done() 2020-06-25 13:00:55 -04:00
Yusef Napora 3cbf5efddd use temp dir for drand state 2020-06-25 12:38:40 -04:00
Yusef Napora fda66f5bd9 move drand to common_roles & fix mock randomness override 2020-06-25 12:18:08 -04:00
Yusef Napora 3f15146c19 add composition with mock randomness 2020-06-25 12:18:08 -04:00
Anton Evangelatov f11d726ddc Merge pull request #65 from filecoin-project/move-rolling-build-config-to-composition
move rolling build config to composition file, not manifest
2020-06-25 17:48:18 +02:00
Yusef Napora 75ff8d0689 add random_beacon_type param, default to mock randomness 2020-06-25 11:35:55 -04:00
Yusef Napora e225a644f4 run drand gossip relays alongside each drand node 2020-06-25 11:35:55 -04:00
Yusef Napora 4a337785b5 rebase drand setup onto master 2020-06-25 11:35:55 -04:00
vyzo 1230430c94 Merge pull request #66 from filecoin-project/plan/common-roles
extract common roles for bootstrapper and miner
2020-06-25 18:35:39 +03:00
vyzo b0c3963506 extract common roles for bootstrapper and miner 2020-06-25 18:29:01 +03:00
Anton Evangelatov 050a0c1000 add bzr to buildbase 2020-06-25 15:36:30 +02:00
Anton Evangelatov 8588cce4d5 move rolling build config to composition file, not manifest 2020-06-25 15:24:53 +02:00
Anton Evangelatov fa224271a1 Merge pull request #57 from filecoin-project/basic-deal-flow
baseline test: basic deal flow
2020-06-25 14:39:17 +02:00
Anton Evangelatov 7898451236 min 100ms between blocks 2020-06-25 14:37:59 +02:00
Anton Evangelatov 67b1bb6178 better default for k8s composition 2020-06-25 14:30:02 +02:00
vyzo 548ee4a206 Merge pull request #64 from filecoin-project/basic-deal-flow-api
Basic deal flow: use the full node api
2020-06-25 15:29:44 +03:00
vyzo 0c00b8b2ab use temporary file instead of hardcoding /tmp/data for deal data 2020-06-25 15:27:11 +03:00
vyzo 889b440bb1 use the full node api instead of breaking abstraction barriers 2020-06-25 15:14:27 +03:00
vyzo 6f298b929e Merge pull request #63 from filecoin-project/basic-deal-flow-cleanup
Basic deal flow: some clean up and multi client/miner test readiness
2020-06-25 14:50:30 +03:00
vyzo 1eeeff82d1 use a single context for miner 2020-06-25 14:26:43 +03:00
vyzo b476bc86ce synchronize all miners to mine next block 2020-06-25 14:16:04 +03:00
vyzo 58923fe2ff some baseline cleanup
1. Miners wait for all client's signal to stop mining
2. Miners don't care about client addresses
3. Moved collect methods to node.go
2020-06-25 14:10:00 +03:00
vyzo 5cccc81abf keep log level at WARN so that we see what's happening in the system 2020-06-25 13:52:02 +03:00
Anton Evangelatov 831cd2e71d move init to node.go 2020-06-25 12:33:52 +02:00
Anton Evangelatov 9f9c30d406 speed up block mining 2020-06-25 12:21:14 +02:00
Raúl Kripalani 1cb087c99e update issue templates + labels. 2020-06-25 11:14:49 +01:00
Anton Evangelatov ae3fcca543 barrier for stop mining, instead of sleep 2020-06-25 12:00:56 +02:00
Anton Evangelatov 801a4f79b9 completed deal 2020-06-24 18:15:52 +02:00
Anton Evangelatov 98bc576888 insecure post validation 2020-06-24 17:39:37 +02:00
Anton Evangelatov bb758854fb move init to main, add more logging 2020-06-24 16:46:12 +02:00
Anton Evangelatov f460d24f65 fixup 2020-06-24 16:12:10 +02:00
Anton Evangelatov b026160c5c mine longer 2020-06-24 15:48:15 +02:00
Anton Evangelatov fe842823a9 mine more blocks 2020-06-24 15:45:32 +02:00
Anton Evangelatov 65dff05008 bump up balances 2020-06-24 15:42:34 +02:00
Anton Evangelatov d4f883c1b0 connect miner node to its full node??? 2020-06-24 15:40:30 +02:00
Anton Evangelatov e8f037cac8 broken mining and deal sealing 2020-06-24 15:29:27 +02:00
Anton Evangelatov cca568112d start deal, need to add mining 2020-06-24 15:16:10 +02:00
Anton Evangelatov db19764130 generate random data, start deal 2020-06-24 15:10:05 +02:00
Anton Evangelatov 2379ff1740 composition for k8s, better error logging on collect addrs 2020-06-24 14:50:06 +02:00
Anton Evangelatov f6da7679b8 connect client to miner; fix topic bug 2020-06-24 14:40:29 +02:00
Anton Evangelatov b0d0a7a04a improvements 2020-06-24 14:34:19 +02:00
Anton Evangelatov f1181ce9c2 broadcast addrs, and connect miner and client 2020-06-24 14:34:19 +02:00
Anton Evangelatov e9402da131 fix ignored barrier (#58) 2020-06-24 14:33:31 +02:00
vyzo 04a945531c Merge pull request #56 from filecoin-project/extract-subscriptions-and-check-for-errors
extract subscriptions for balances, genesis and preseals
2020-06-24 15:07:12 +03:00
Anton Evangelatov ebd0e85d65 extract subscriptions 2020-06-24 13:10:35 +02:00
vyzo 2bfbc6a314 Merge pull request #55 from filecoin-project/fix/bug
use the role map, luke!
2020-06-24 14:07:21 +03:00
vyzo 0e924edf0e use the role map, luke! 2020-06-24 14:02:20 +03:00
vyzoandAnton Evangelatov 448bbf3710 generic test plan scaffolding, with baseline plan (#39)
* test plan scaffolding

* generify the testplan role dispatch

* manifest.toml

* initial go.mod and go.sum

* correct name

* gomod: update from build

* node construction in scaffolding

* fix test runner return type

* remove offending comments

* add initial composition, and fix context bug

* debug lines

* check errors from node construction

* specify Repo after Online option

* add power/proof type initialization code

* fix baseline composition

* use new docker-images (build/run) introduced in the #48 PR

* upgrade go-sdk to master (#51)

* fix types for run.InvokeMap

* fix miner actor sequence address

* explictly specify listen address for nodes on the data network

* make a separate full node for the miner

* initialize the wallet for the full node before creating the storage node

* go mod tidy

* also set the listen address for the miner node

* circleci to build the soup testplan

* extract topics

* test runner: pass the role map to doRun for generic runner

* use a wrapper TestEnvironment to encapsulate the runenv and initCtx

* embed RunEnv and InitContext into TestEnvironment for better ergonomics

* remove empty import

* extract stateReady

Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
2020-06-24 12:52:23 +02:00
Raúl Kripalani 1907fe2a91 update team in README.md. 2020-06-23 20:00:14 +01:00
Anton Evangelatov 021c0386f8 add circleci build job (#52) 2020-06-23 19:59:39 +01:00
Yusef Napora f72616981e Merge pull request #43 from filecoin-project/feat/composer
Add "composer" configuration UI
2020-06-23 11:20:47 -04:00
Anton Evangelatov 6eddd62a73 handle get_host_ip on macos 2020-06-23 10:02:05 -04:00
Anton Evangelatov 306efa66c7 random fixes 2020-06-23 10:02:05 -04:00
Yusef Napora 0bfaa46ce7 add readme 2020-06-23 10:02:05 -04:00
Yusef Napora 91b9cdfae5 make sure each group gets its own param objects 2020-06-23 10:02:05 -04:00
Yusef Napora 6f12d797d2 stringify test params 2020-06-23 10:02:05 -04:00
Yusef Napora 86a4d6f607 allow renaming groups via ui 2020-06-23 10:02:05 -04:00
Yusef Napora a60a4c507a fix groups for existing compositions 2020-06-23 10:02:05 -04:00
Yusef Napora 7bbde459f3 refactor groups ui 2020-06-23 10:02:05 -04:00
Yusef Napora 4a961401fc set default builder & runner from manifest 2020-06-23 10:02:05 -04:00
Yusef Napora 9eab4cfa0d new composition flow working e2e, some rough edges 2020-06-23 10:02:05 -04:00
Yusef Napora 92409c321c skip docker build if SKIP_BUILD is set 2020-06-23 10:02:05 -04:00
Yusef Napora 9e348c049b test runner working in docker 2020-06-23 10:02:05 -04:00
Yusef Napora c9dbf908b5 build testground and copy to run image 2020-06-23 10:02:05 -04:00
Yusef Napora 202cdda358 update global config with manifest 2020-06-23 10:02:05 -04:00
Yusef Napora 6eae66728b create new composition or load existing 2020-06-23 10:02:05 -04:00
Yusef Napora e262320348 launch panel server from docker 2020-06-23 10:02:05 -04:00
Yusef Napora 9323fd896a wip, jupyter in docker 2020-06-23 10:02:00 -04:00
Raúl Kripalani f29141b855 simplify the docker build base and runtime images + remove the go.rice trickery (#48)
* adjust the prototype for building oni test plans.

- We no longer clone the entire lotus codebase.
- We only clone and build the ffi module in the build image.
- The runtime image no longer builds the ffi module.
- The runtime image uses go-paramfetch to fetch the parameters
  (which are not expected to change).
- We use filecoin-project/lotus#2097 to not have to deal with
  go.rice trickery for things we don't actually need to use.

* add filecoin-ffi submodule (commit ca281af); fix replace directive.

* remove stale file.

* tag build base images.

* fix build.sh.

* delete filecoin-ffi submodule from root.

* add filecoin-ffi submodule under extra/filecoin-ffi.

* adjust everything to use extra sources TG feature.
2020-06-23 15:20:47 +02:00
Anton Evangelatov 6f8706818d move docker images (#47) 2020-06-22 19:14:45 +02:00
Anton Evangelatov 512915b4c9 use runtime image for lotus testplans (#35)
* use runtime image

* no need to compile with `make 2k`

* use new go-sdk /2 (#36)

* use new go-sdk

* use custom runtime image (#38)

* improve runtime image

* remove redundant runners

* enable go build cache

* remove replace lotus directive

* add git clone for lotus as part of manifest.toml

* use base build image

* compile `lotus-testground` on `current master` from Lotus (#41)

* automated scripts to build/push base build and runtime images

* go mod tidy and new version of lotus in manifest

* fix types

* fix storage miner (#42)

* fix storage miner

* update runtime image to ubuntu
2020-06-22 17:17:42 +02:00
Anton Evangelatov c176f24d05 correct commit (#34) 2020-06-18 15:52:29 +02:00
Anton Evangelatov 087e60299b Merge pull request #30 from filecoin-project/lotus-testground-initial
testplan instantiating lotus nodes in-memory
2020-06-18 14:54:44 +02:00
Anton Evangelatov 73c5153ef1 lock version for lotus, that testplan compiles with 2020-06-18 14:05:11 +02:00
Anton Evangelatov 2863b5a8c6 remove Dockerfile 2020-06-17 19:05:30 +02:00
Anton Evangelatov 1b92795d93 remove Makefile 2020-06-17 19:05:00 +02:00
Anton Evangelatov 3cc6fb6c6e compile and run lotus net with docker:go 2020-06-17 19:02:04 +02:00
Anton Evangelatov 3ca1593919 build with docker:generic 2020-06-17 18:17:28 +02:00
Anton Evangelatov 6f4599be9a initial commit 2020-06-17 16:36:11 +02:00
Raúl Kripalani 4b6a677b57 test scenario request issue template: fix markup. 2020-06-11 14:44:30 +01:00
Raúl Kripalani 6e9dbf4c18 Add "Test scenario request" issue template 2020-06-11 14:42:27 +01:00
Raúl Kripalani 3d891e26dd add declarative labels to repo. (#6) 2020-06-11 13:17:16 +01:00
Raúl Kripalani 139f7f6322 add a notes folder. 2020-06-11 11:02:41 +01:00
Rob Matarangas a5e4bf63c5 Delete label-syncer.yml 2020-06-10 16:29:07 -07:00
Rob Matarangas 2af3fd4a8c Merge pull request #3 from filecoin-project/Robmat05-patch-2
insert discomfort labels.yml
2020-06-10 16:01:34 -07:00
Rob Matarangas 69ae58f7ba Create labels.yml 2020-06-10 16:00:35 -07:00
Rob Matarangas 7e7b19b904 Merge pull request #2 from filecoin-project/Robmat05-patch-1
Create label-syncer.yml
2020-06-10 15:37:49 -07:00
Rob Matarangas f4e6231358 Create label-syncer.yml
Installing Labeler workflow
2020-06-10 15:37:32 -07:00
Raúl Kripalani 0c909251aa Update README.md 2020-06-10 21:04:31 +01:00
Raúl Kripalani 2ef46a3165 Initial commit 2020-06-09 14:19:25 +01:00
472 changed files with 45091 additions and 7847 deletions
+63 -11
View File
@@ -5,7 +5,7 @@ orbs:
executors:
golang:
docker:
- image: circleci/golang:1.14.6
- image: circleci/golang:1.15.5
resource_class: 2xlarge
ubuntu:
docker:
@@ -34,7 +34,7 @@ commands:
condition: << parameters.linux >>
steps:
- run: sudo apt-get update
- run: sudo apt-get install ocl-icd-opencl-dev
- run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
- run: git submodule sync
- run: git submodule update --init
download-params:
@@ -188,6 +188,14 @@ jobs:
command: |
bash <(curl -s https://codecov.io/bash)
test-chain:
<<: *test
test-node:
<<: *test
test-storage:
<<: *test
test-cli:
<<: *test
test-short:
<<: *test
test-window-post:
@@ -256,22 +264,44 @@ jobs:
path: /tmp/test-artifacts/conformance-coverage.html
build-lotus-soup:
description: |
Compile `lotus-soup` Testground test plan using the current version of Lotus.
Compile `lotus-soup` Testground test plan
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 .
command: pushd testplans/lotus-soup && go build -tags=testground .
trigger-testplans:
description: |
Trigger `lotus-soup` test cases on TaaS
parameters:
<<: *test-params
executor: << parameters.executor >>
steps:
- install-deps
- prepare
- run:
name: "download testground"
command: wget https://gist.github.com/nonsense/5fbf3167cac79945f658771aed32fc44/raw/2e17eb0debf7ec6bdf027c1bdafc2c92dd97273b/testground-d3e9603 -O ~/testground-cli && chmod +x ~/testground-cli
- run:
name: "prepare .env.toml"
command: pushd testplans/lotus-soup && mkdir -p $HOME/testground && cp env-ci.toml $HOME/testground/.env.toml && echo 'endpoint="https://ci.testground.ipfs.team"' >> $HOME/testground/.env.toml && echo 'user="circleci"' >> $HOME/testground/.env.toml
- run:
name: "prepare testground home dir"
command: mkdir -p $HOME/testground/plans && mv testplans/lotus-soup testplans/graphsync $HOME/testground/plans/
- run:
name: "trigger deals baseline testplan on taas"
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/baseline-k8s-3-1.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
- run:
name: "trigger payment channel stress testplan on taas"
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/paych-stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
- run:
name: "trigger graphsync testplan on taas"
command: ~/testground-cli run composition -f $HOME/testground/plans/graphsync/_compositions/stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
build-macos:
@@ -286,8 +316,8 @@ jobs:
- run:
name: Install go
command: |
curl -O https://dl.google.com/go/go1.14.2.darwin-amd64.pkg && \
sudo installer -pkg go1.14.2.darwin-amd64.pkg -target /
curl -O https://dl.google.com/go/go1.15.5.darwin-amd64.pkg && \
sudo installer -pkg go1.15.5.darwin-amd64.pkg -target /
- run:
name: Install pkg-config
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config
@@ -351,6 +381,7 @@ jobs:
steps:
- install-deps
- prepare
- run: make deps
- run: make docsgen
- run: git --no-pager diff
- run: git --no-pager diff --quiet
@@ -428,6 +459,22 @@ workflows:
- test:
codecov-upload: true
test-suite-name: full
- test-chain:
codecov-upload: true
test-suite-name: chain
packages: "./chain/..."
- test-node:
codecov-upload: true
test-suite-name: node
packages: "./node/..."
- test-storage:
codecov-upload: true
test-suite-name: storage
packages: "./storage/... ./extern/..."
- test-cli:
codecov-upload: true
test-suite-name: cli
packages: "./cli/... ./cmd/... ./api/..."
- test-window-post:
go-test-flags: "-run=TestWindowedPost"
winpost-test: "1"
@@ -448,6 +495,11 @@ workflows:
packages: "./conformance"
vectors-branch: master
- build-lotus-soup
- trigger-testplans:
filters:
branches:
only:
- master
- build-debug
- build-all:
requires:
+1
View File
@@ -13,6 +13,7 @@
/lotus-gateway
/lotus-pcr
/lotus-wallet
/lotus-keygen
/bench.json
/lotuspond/front/node_modules
/lotuspond/front/build
+4 -8
View File
@@ -1,16 +1,12 @@
[submodule "extern/filecoin-ffi"]
path = extern/filecoin-ffi
url = https://github.com/filecoin-project/filecoin-ffi.git
branch = master
[submodule "extern/serialization-vectors"]
path = extern/serialization-vectors
url = https://github.com/filecoin-project/serialization-vectors
url = https://github.com/filecoin-project/serialization-vectors.git
[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
[submodule "extern/blst"]
path = extern/blst
url = https://github.com/supranational/blst.git
+359
View File
@@ -1,5 +1,364 @@
# Lotus changelog
# 1.3.0 / 2020-12-16
This is a mandatory release of Lotus that introduces the third post-liftoff upgrade to the Filecoin network. The network upgrade occurs at height 343200, before which time all nodes must have updated to this release (or later). The change that breaks consensus is an implementation of FIP-0009(https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0009.md).
## Changes
- Disable gas burning for window post messages (https://github.com/filecoin-project/lotus/pull/5200)
- fix lock propose (https://github.com/filecoin-project/lotus/pull/5197)
# 1.2.3 / 2020-12-15
This is an optional Lotus release that introduces many performance improvements, bugfixes, and UX improvements.
## Changes
- When waiting for deal commit messages, ignore unsuccessful messages (https://github.com/filecoin-project/lotus/pull/5189)
- Bigger copy buffer size for stores (https://github.com/filecoin-project/lotus/pull/5177)
- Print MinPieceSize when querying ask (https://github.com/filecoin-project/lotus/pull/5178)
- Optimize miner info & sectors list loading (https://github.com/filecoin-project/lotus/pull/5176)
- Allow miners to filter (un)verified deals (https://github.com/filecoin-project/lotus/pull/5094)
- Fix curSealing out of MaxSealingSectors limit (https://github.com/filecoin-project/lotus/pull/5166)
- Add mpool pending from / to filter (https://github.com/filecoin-project/lotus/pull/5169)
- Add metrics for delayed blocks (https://github.com/filecoin-project/lotus/pull/5171)
- Fix PushUntrusted publishing -- the message is local (https://github.com/filecoin-project/lotus/pull/5173)
- Avoid potential hang in events API when starting event listener (https://github.com/filecoin-project/lotus/pull/5159)
- Show data transfer ID in list-deals (https://github.com/filecoin-project/lotus/pull/5150)
- Fix events API mutex locking (https://github.com/filecoin-project/lotus/pull/5160)
- Message pool refactors (https://github.com/filecoin-project/lotus/pull/5162)
- Fix lotus-shed cid output (https://github.com/filecoin-project/lotus/pull/5072)
- Use FundManager to withdraw funds, add MarketWithdraw API (https://github.com/filecoin-project/lotus/pull/5112)
- Add keygen outfile (https://github.com/filecoin-project/lotus/pull/5118)
- Update sr2 stat aggregation (https://github.com/filecoin-project/lotus/pull/5114)
- Fix miner control address lookup (https://github.com/filecoin-project/lotus/pull/5119)
- Fix send with declared nonce 0 (https://github.com/filecoin-project/lotus/pull/5111)
- Introduce memory watchdog; LOTUS_MAX_HEAP (https://github.com/filecoin-project/lotus/pull/5101)
- Miner control address config for (pre)commits (https://github.com/filecoin-project/lotus/pull/5103)
- Delete repeated call func (https://github.com/filecoin-project/lotus/pull/5099)
- lotus-shed ledger show command (https://github.com/filecoin-project/lotus/pull/5098)
- Log a message when there aren't enough peers for sync (https://github.com/filecoin-project/lotus/pull/5105)
- Miner code cleanup (https://github.com/filecoin-project/lotus/pull/5107)
# 1.2.2 / 2020-12-03
This is an optional Lotus release that introduces various improvements to the mining logic and deal-making workflow, as well as several new UX features.
## Changes
- Set lower feecap on PoSt messages with low balance (https://github.com/filecoin-project/lotus/pull/4217)
- Add options to set BlockProfileRate and MutexProfileFraction (https://github.com/filecoin-project/lotus/pull/4140)
- Shed/post find (https://github.com/filecoin-project/lotus/pull/4355)
- tvx extract: make it work with secp messages.(https://github.com/filecoin-project/lotus/pull/4583)
- update go from 1.14 to 1.15 (https://github.com/filecoin-project/lotus/pull/4909)
- print multiple blocks from miner cid (https://github.com/filecoin-project/lotus/pull/4767)
- Connection Gater support (https://github.com/filecoin-project/lotus/pull/4849)
- just return storedask.NewStoredAsk to reduce unuseful code (https://github.com/filecoin-project/lotus/pull/4902)
- add go main version (https://github.com/filecoin-project/lotus/pull/4910)
- Use version0 when pre-sealing (https://github.com/filecoin-project/lotus/pull/4911)
- optimize code UpgradeTapeHeight and go fmt (https://github.com/filecoin-project/lotus/pull/4913)
- CLI to get network version (https://github.com/filecoin-project/lotus/pull/4914)
- Improve error for ActorsVersionPredicate (https://github.com/filecoin-project/lotus/pull/4915)
- upgrade to go-fil-markets 1.0.5 (https://github.com/filecoin-project/lotus/pull/4916)
- bug:replace with func recordFailure (https://github.com/filecoin-project/lotus/pull/4919)
- Remove unused key (https://github.com/filecoin-project/lotus/pull/4924)
- change typeV7 make len (https://github.com/filecoin-project/lotus/pull/4943)
- emit events for peer disconnections and act upon them in the blocksync tracker (https://github.com/filecoin-project/lotus/pull/4754)
- Fix lotus bench error (https://github.com/filecoin-project/lotus/pull/4305)
- Reduce badger ValueTreshold to 128 (https://github.com/filecoin-project/lotus/pull/4629)
- Downgrade duplicate nonce logs to debug (https://github.com/filecoin-project/lotus/pull/4933)
- readme update golang version from 1.14.7 to 1.15.5 (https://github.com/filecoin-project/lotus/pull/4974)
- add data transfer logging (https://github.com/filecoin-project/lotus/pull/4975)
- Remove all temp file generation for deals (https://github.com/filecoin-project/lotus/pull/4929)
- fix get sector bug (https://github.com/filecoin-project/lotus/pull/4976)
- fix nil pointer in StateSectorPreCommitInfo (https://github.com/filecoin-project/lotus/pull/4082)
- Add logging on data-transfer to miner (https://github.com/filecoin-project/lotus/pull/4980)
- bugfix: fixup devnet script (https://github.com/filecoin-project/lotus/pull/4956)
- modify for unsafe (https://github.com/filecoin-project/lotus/pull/4024)
- move testground/lotus-soup testplan from oni to lotus (https://github.com/filecoin-project/lotus/pull/4727)
- Setup remainder msig signers when parsing genesis template (https://github.com/filecoin-project/lotus/pull/4904)
- Update JSON RPC server to enforce a maximum request size (https://github.com/filecoin-project/lotus/pull/4923)
- New SR-specific lotus-shed cmd (https://github.com/filecoin-project/lotus/pull/4971)
- update index to sectorNumber (https://github.com/filecoin-project/lotus/pull/4987)
- storagefsm: Fix expired ticket retry loop (https://github.com/filecoin-project/lotus/pull/4876)
- add .sec scale to measurements; humanize for metric tags (https://github.com/filecoin-project/lotus/pull/4989)
- Support seal proof type switching (https://github.com/filecoin-project/lotus/pull/4873)
- fix log format (https://github.com/filecoin-project/lotus/pull/4984)
- Format workerID as string (https://github.com/filecoin-project/lotus/pull/4973)
- miner: Winning PoSt Warmup (https://github.com/filecoin-project/lotus/pull/4824)
- Default StartDealParams's fast retrieval field to true over JSON (https://github.com/filecoin-project/lotus/pull/4998)
- Fix actor not found in chain inspect-usage (https://github.com/filecoin-project/lotus/pull/5010)
- storagefsm: Improve new deal sector logic (https://github.com/filecoin-project/lotus/pull/5007)
- Configure simultaneous requests (https://github.com/filecoin-project/lotus/pull/4996)
- miner: log winningPoSt duration separately (https://github.com/filecoin-project/lotus/pull/5005)
- fix wallet dead lock (https://github.com/filecoin-project/lotus/pull/5002)
- Update go-jsonrpc to v0.1.2 (https://github.com/filecoin-project/lotus/pull/5015)
- markets - separate watching for pre-commit from prove-commit (https://github.com/filecoin-project/lotus/pull/4945)
- storagefsm: Add missing planners (https://github.com/filecoin-project/lotus/pull/5016)
- fix wallet delete address where address is default (https://github.com/filecoin-project/lotus/pull/5019)
- worker: More robust remote checks (https://github.com/filecoin-project/lotus/pull/5008)
- Add new booststrappers (https://github.com/filecoin-project/lotus/pull/4007)
- add a tooling to make filecoin accounting a little easier (https://github.com/filecoin-project/lotus/pull/5025)
- fix: start a new line in print miner-info to avoid ambiguous display (https://github.com/filecoin-project/lotus/pull/5029)
- Print gas limit sum in mpool stat (https://github.com/filecoin-project/lotus/pull/5035)
- Fix chainstore tipset leak (https://github.com/filecoin-project/lotus/pull/5037)
- shed rpc: Allow calling with args (https://github.com/filecoin-project/lotus/pull/5036)
- Make --gas-limit optional in mpool replace cli (https://github.com/filecoin-project/lotus/pull/5059)
- client list-asks --by-ping (https://github.com/filecoin-project/lotus/pull/5060)
- Ledger signature verification (https://github.com/filecoin-project/lotus/pull/5068)
- Fix helptext for verified-deal default in client deal (https://github.com/filecoin-project/lotus/pull/5074)
- worker: Support setting task types at runtime (https://github.com/filecoin-project/lotus/pull/5023)
- Enable Callers tracing when GasTracing is enabled (https://github.com/filecoin-project/lotus/pull/5080)
- Cancel transfer cancels storage deal (https://github.com/filecoin-project/lotus/pull/5032)
- Sector check command (https://github.com/filecoin-project/lotus/pull/5041)
- add commp-to-cid base64 decode (https://github.com/filecoin-project/lotus/pull/5079)
- miner info cli improvements (https://github.com/filecoin-project/lotus/pull/5083)
- miner: Add slow mode to proving check (https://github.com/filecoin-project/lotus/pull/5086)
- Error out deals that are not activated by proposed deal start epoch (https://github.com/filecoin-project/lotus/pull/5061)
# 1.2.1 / 2020-11-20
This is a very small release of Lotus that fixes an issue users are experiencing when importing snapshots. There is no need to upgrade unless you experience an issue with creating a new datastore directory in the Lotus repo.
## Changes
- fix blockstore directory not created automatically (https://github.com/filecoin-project/lotus/pull/4922)
- WindowPoStScheduler.checkSectors() delete useless judgment (https://github.com/filecoin-project/lotus/pull/4918)
# 1.2.0 / 2020-11-18
This is a mandatory release of Lotus that introduces the second post-liftoff upgrade to the Filecoin network. The network upgrade occurs at height 265200, before which time all nodes must have updated to this release (or later). This release also bumps the required version of Go to 1.15.
The changes that break consensus are:
- Upgrading to sepcs-actors 2.3.2 (https://github.com/filecoin-project/specs-actors/releases/tag/v2.3.2)
- Introducing proofs v5.4.0 (https://github.com/filecoin-project/rust-fil-proofs/releases/tag/storage-proofs-v5.4.0), and switching between the proof types (https://github.com/filecoin-project/lotus/pull/4873)
- Don't use terminated sectors for winning PoSt (https://github.com/filecoin-project/lotus/pull/4770)
- Various small VM-level edge-case handling (https://github.com/filecoin-project/lotus/pull/4783)
- Correction of the VM circulating supply calculation (https://github.com/filecoin-project/lotus/pull/4862)
- Retuning gas costs (https://github.com/filecoin-project/lotus/pull/4830)
- Avoid sending messages to the zero BLS address (https://github.com/filecoin-project/lotus/pull/4888)
## Other Changes
- delayed pubsub subscribe for messages topic (https://github.com/filecoin-project/lotus/pull/3646)
- add chain base64 decode params (https://github.com/filecoin-project/lotus/pull/4748)
- chore(dep): update bitswap to fix an initialization race that could panic (https://github.com/filecoin-project/lotus/pull/4855)
- Chore/blockstore nits (https://github.com/filecoin-project/lotus/pull/4813)
- Print Consensus Faults in miner info (https://github.com/filecoin-project/lotus/pull/4853)
- Truncate genesis file before generating (https://github.com/filecoin-project/lotus/pull/4851)
- miner: Winning PoSt Warmup (https://github.com/filecoin-project/lotus/pull/4824)
- Fix init actor address map diffing (https://github.com/filecoin-project/lotus/pull/4875)
- Bump API versions to 1.0.0 (https://github.com/filecoin-project/lotus/pull/4884)
- Fix cid recording issue (https://github.com/filecoin-project/lotus/pull/4874)
- Speed up worker key retrieval (https://github.com/filecoin-project/lotus/pull/4885)
- Add error codes to worker return (https://github.com/filecoin-project/lotus/pull/4890)
- Update go to 1.15.5 (https://github.com/filecoin-project/lotus/pull/4896)
- Fix MaxSealingSectrosForDeals getting reset to 0 (https://github.com/filecoin-project/lotus/pull/4879)
- add sanity check for maximum block size (https://github.com/filecoin-project/lotus/pull/3171)
- Check (pre)commit receipt before other checks in failed states (https://github.com/filecoin-project/lotus/pull/4712)
- fix badger double open on daemon --import-snapshot; chainstore lifecycle (https://github.com/filecoin-project/lotus/pull/4872)
- Update to ipfs-blockstore 1.0.3 (https://github.com/filecoin-project/lotus/pull/4897)
- break loop when found warm up sector (https://github.com/filecoin-project/lotus/pull/4869)
- Tweak handling of bad beneficaries in DeleteActor (https://github.com/filecoin-project/lotus/pull/4903)
- cap maximum number of messages per block in selection (https://github.com/filecoin-project/lotus/pull/4905)
- Set Calico epoch (https://github.com/filecoin-project/lotus/pull/4889)
# 1.1.3 / 2020-11-13
This is an optional release of Lotus that upgrades Lotus dependencies, and includes many performance enhancements, bugfixes, and UX improvements.
## Highlights
- Refactored much of the miner code (https://github.com/filecoin-project/lotus/pull/3618), improving its recovery from restarts and overall sector success rate
- Updated [proofs](https://github.com/filecoin-project/rust-fil-proofs) to v5.3.0, which brings significant performance improvements
- Updated [markets](https://github.com/filecoin-project/go-fil-markets/releases/tag/v1.0.4) to v1.0.4, which reduces failures due to reorgs (https://github.com/filecoin-project/lotus/pull/4730) and uses the newly refactored fund manager (https://github.com/filecoin-project/lotus/pull/4736)
## Changes
#### Core Lotus
- polish: add Equals method to MinerInfo shim (https://github.com/filecoin-project/lotus/pull/4604)
- Fix messagepool accounting (https://github.com/filecoin-project/lotus/pull/4668)
- Prep for gas balancing (https://github.com/filecoin-project/lotus/pull/4651)
- Reduce badger ValueThreshold to 128 (https://github.com/filecoin-project/lotus/pull/4629)
- Config for default max gas fee (https://github.com/filecoin-project/lotus/pull/4652)
- bootstrap: don't return early when one drand resolution fails (https://github.com/filecoin-project/lotus/pull/4626)
- polish: add ClaimsChanged and DiffClaims method to power shim (https://github.com/filecoin-project/lotus/pull/4628)
- Simplify chain event Called API (https://github.com/filecoin-project/lotus/pull/4664)
- Cache deal states for most recent old/new tipset (https://github.com/filecoin-project/lotus/pull/4623)
- Add miner available balance and power info to state miner info (https://github.com/filecoin-project/lotus/pull/4618)
- Call GetHeaviestTipSet() only once when syncing (https://github.com/filecoin-project/lotus/pull/4696)
- modify runtime gasUsed printf (https://github.com/filecoin-project/lotus/pull/4704)
- Rename builtin actor generators (https://github.com/filecoin-project/lotus/pull/4697)
- Move gas multiplier as property of pricelist (https://github.com/filecoin-project/lotus/pull/4728)
- polish: add msig pendingtxn diffing and comp (https://github.com/filecoin-project/lotus/pull/4719)
- Optional chain Bitswap (https://github.com/filecoin-project/lotus/pull/4717)
- rewrite sync manager (https://github.com/filecoin-project/lotus/pull/4599)
- async connect to bootstrappers (https://github.com/filecoin-project/lotus/pull/4785)
- head change coalescer (https://github.com/filecoin-project/lotus/pull/4688)
- move to native badger blockstore; leverage zero-copy View() to deserialize in-place (https://github.com/filecoin-project/lotus/pull/4681)
- badger blockstore: minor improvements (https://github.com/filecoin-project/lotus/pull/4811)
- Do not fail wallet delete because of pre-existing trashed key (https://github.com/filecoin-project/lotus/pull/4589)
- Correctly delete the default wallet address (https://github.com/filecoin-project/lotus/pull/4705)
- Reduce badger ValueTreshold to 128 (https://github.com/filecoin-project/lotus/pull/4629)
- predicates: Fast StateGetActor wrapper (https://github.com/filecoin-project/lotus/pull/4835)
#### Mining
- worker key should change when set sender found key not equal with the value on chain (https://github.com/filecoin-project/lotus/pull/4595)
- extern/sector-storage: fix GPU usage overwrite bug (https://github.com/filecoin-project/lotus/pull/4627)
- sectorstorage: Fix manager restart edge-case (https://github.com/filecoin-project/lotus/pull/4645)
- storagefsm: Fix GetTicket loop when the sector is already precommitted (https://github.com/filecoin-project/lotus/pull/4643)
- Debug flag to force running sealing scheduler (https://github.com/filecoin-project/lotus/pull/4662)
- Fix worker reenabling, handle multiple restarts in worker (https://github.com/filecoin-project/lotus/pull/4666)
- keep retrying the proof until we run out of sectors to skip (https://github.com/filecoin-project/lotus/pull/4633)
- worker: Commands to pause/resume task processing (https://github.com/filecoin-project/lotus/pull/4615)
- struct name incorrect (https://github.com/filecoin-project/lotus/pull/4699)
- optimize code replace strings with constants (https://github.com/filecoin-project/lotus/pull/4769)
- optimize pledge sector (https://github.com/filecoin-project/lotus/pull/4765)
- Track sealing processes across lotus-miner restarts (https://github.com/filecoin-project/lotus/pull/3618)
- Fix scheduler lockups after storage is freed (https://github.com/filecoin-project/lotus/pull/4778)
- storage: Track worker hostnames with work (https://github.com/filecoin-project/lotus/pull/4779)
- Expand sched-diag; Command to abort sealing calls (https://github.com/filecoin-project/lotus/pull/4804)
- miner: Winning PoSt Warmup (https://github.com/filecoin-project/lotus/pull/4824)
- docsgen: Support miner/worker (https://github.com/filecoin-project/lotus/pull/4817)
- miner: Basic storage cleanup command (https://github.com/filecoin-project/lotus/pull/4834)
#### Markets and Data Transfer
- Flesh out data transfer features (https://github.com/filecoin-project/lotus/pull/4572)
- Fix memory leaks in data transfer (https://github.com/filecoin-project/lotus/pull/4619)
- Handle deal id changes in OnDealSectorCommitted (https://github.com/filecoin-project/lotus/pull/4730)
- Refactor FundManager (https://github.com/filecoin-project/lotus/pull/4736)
- refactor: integrate new FundManager (https://github.com/filecoin-project/lotus/pull/4787)
- Fix race in paych manager when req context is cancelled (https://github.com/filecoin-project/lotus/pull/4803)
- fix race in paych manager add funds (https://github.com/filecoin-project/lotus/pull/4597)
- Fix panic in FundManager (https://github.com/filecoin-project/lotus/pull/4808)
- Fix: dont crash on startup if funds migration fails (https://github.com/filecoin-project/lotus/pull/4827)
#### UX
- Make EarlyExpiration in sectors list less scary (https://github.com/filecoin-project/lotus/pull/4600)
- Add commands to change the worker key (https://github.com/filecoin-project/lotus/pull/4513)
- Expose ClientDealSize via CLI (https://github.com/filecoin-project/lotus/pull/4569)
- client deal: Cache CommD when creating multiple deals (https://github.com/filecoin-project/lotus/pull/4535)
- miner sectors list: flags for events/seal time (https://github.com/filecoin-project/lotus/pull/4649)
- make IPFS online mode configurable (https://github.com/filecoin-project/lotus/pull/4650)
- Add sync status to miner info command (https://github.com/filecoin-project/lotus/pull/4669)
- Add a StateDecodeParams method (https://github.com/filecoin-project/lotus/pull/4105)
- sched: Interactive RPC Shell (https://github.com/filecoin-project/lotus/pull/4692)
- Add api for getting status given a code (https://github.com/filecoin-project/lotus/pull/4210)
- Update lotus-stats with a richer cli (https://github.com/filecoin-project/lotus/pull/4718)
- Use TSK passed to GasEstimateGasLimit (https://github.com/filecoin-project/lotus/pull/4739)
- match data type for reward state api (https://github.com/filecoin-project/lotus/pull/4745)
- Add `termination-estimate` to get an estimation for how much a termination penalty will be (https://github.com/filecoin-project/lotus/pull/4617)
- Restrict `ParseFIL` input length (https://github.com/filecoin-project/lotus/pull/4780)
- cmd sectors commitIDs len debug (https://github.com/filecoin-project/lotus/pull/4786)
- Add client deal-stats CLI (https://github.com/filecoin-project/lotus/pull/4788)
- Modify printf format (https://github.com/filecoin-project/lotus/pull/4795)
- Updated msig inspect (https://github.com/filecoin-project/lotus/pull/4533)
- Delete the duplicate output (https://github.com/filecoin-project/lotus/pull/4819)
- miner: Storage list sectors command (https://github.com/filecoin-project/lotus/pull/4831)
- drop a few logs down to debug (https://github.com/filecoin-project/lotus/pull/4832)
#### Testing and Tooling
- refactor: share code between CLI tests (https://github.com/filecoin-project/lotus/pull/4598)
- Fix flaky TestCLIDealFlow (https://github.com/filecoin-project/lotus/pull/4608)
- Fix flaky testMiningReal (https://github.com/filecoin-project/lotus/pull/4609)
- Add election run-dummy command (https://github.com/filecoin-project/lotus/pull/4498)
- Fix .gitmodules (https://github.com/filecoin-project/lotus/pull/4713)
- fix metrics wiring.(https://github.com/filecoin-project/lotus/pull/4691)
- shed: Util for creating ID CIDs (https://github.com/filecoin-project/lotus/pull/4726)
- Run kumquat upgrade on devnets (https://github.com/filecoin-project/lotus/pull/4734)
- Make pond work again (https://github.com/filecoin-project/lotus/pull/4775)
- lotus-stats: fix influx flags (https://github.com/filecoin-project/lotus/pull/4810)
- 2k sync BootstrapPeerThreshold (https://github.com/filecoin-project/lotus/pull/4797)
- test for FundManager panic to ensure it is fixed (https://github.com/filecoin-project/lotus/pull/4825)
- Stop mining at the end of tests (https://github.com/filecoin-project/lotus/pull/4826)
- Make some logs quieter (https://github.com/filecoin-project/lotus/pull/4709)
#### Dependencies
- update filecoin-ffi in go mod (https://github.com/filecoin-project/lotus/pull/4584)
- Update FFI (https://github.com/filecoin-project/lotus/pull/4613)
- feat: integrate new optional blst backend and verification optimizations from proofs (https://github.com/filecoin-project/lotus/pull/4630)
- Use https for blst submodule (https://github.com/filecoin-project/lotus/pull/4710)
- Update go-bitfield (https://github.com/filecoin-project/lotus/pull/4756)
- Update Yamux (https://github.com/filecoin-project/lotus/pull/4758)
- Update to latest go-bitfield (https://github.com/filecoin-project/lotus/pull/4793)
- Update to latest go-address (https://github.com/filecoin-project/lotus/pull/4798)
- update libp2p for stream interface changes (https://github.com/filecoin-project/lotus/pull/4814)
# 1.1.2 / 2020-10-24
This is a patch release of Lotus that builds on the fixes involving worker keys that was introduced in v1.1.1. Miners and node operators should update to this release as soon as possible in order to ensure their blocks are propagated and validated.
## Changes
- Handle worker key changes correctly in runtime (https://github.com/filecoin-project/lotus/pull/4579)
# 1.1.1 / 2020-10-24
This is a patch release of Lotus that addresses some issues caused by when miners change their worker keys. Miners and node operators should update to this release as soon as possible, especially any miner who has changed their worker key recently.
## Changes
- Miner finder for interactive client deal CLI (https://github.com/filecoin-project/lotus/pull/4504)
- Disable blockstore bloom filter (https://github.com/filecoin-project/lotus/pull/4512)
- Add api for getting status given a code (https://github.com/filecoin-project/lotus/pull/4210)
- add batch api for push messages (https://github.com/filecoin-project/lotus/pull/4236)
- add measure datastore wrapper around bench chain datastore (https://github.com/filecoin-project/lotus/pull/4302)
- Look at block base fee for PCR (https://github.com/filecoin-project/lotus/pull/4313)
- Add a shed util to determine % of power that has won a block (https://github.com/filecoin-project/lotus/pull/4318)
- Shed/borked cmd (https://github.com/filecoin-project/lotus/pull/4339)
- optimize mining code (https://github.com/filecoin-project/lotus/pull/4379)
- heaviestTipSet reurning nil is a ok (https://github.com/filecoin-project/lotus/pull/4523)
- Remove most v0 actor imports (https://github.com/filecoin-project/lotus/pull/4383)
- Small chain export optimization (https://github.com/filecoin-project/lotus/pull/4536)
- Add block list to pcr (https://github.com/filecoin-project/lotus/pull/4314)
- Fix circ supply default in conformance (https://github.com/filecoin-project/lotus/pull/4449)
- miner: fix init --create-worker-key (https://github.com/filecoin-project/lotus/pull/4475)
- make push and addLocal atomic (https://github.com/filecoin-project/lotus/pull/4500)
- add some methods that oni needs (https://github.com/filecoin-project/lotus/pull/4501)
- MinerGetBaseInfo: if miner is not found in lookback, check current (https://github.com/filecoin-project/lotus/pull/4508)
- Delete wallet from local wallet cache (https://github.com/filecoin-project/lotus/pull/4526)
- Fix lotus-shed ledger list (https://github.com/filecoin-project/lotus/pull/4521)
- Manage sectors by size instead of proof type (https://github.com/filecoin-project/lotus/pull/4511)
- Feat/api request metrics wrapper (https://github.com/filecoin-project/lotus/pull/4516)
- Fix chain sync stopping to sync (https://github.com/filecoin-project/lotus/pull/4541)
- Use the correct lookback for the worker key when creating blocks (https://github.com/filecoin-project/lotus/pull/4539)
- Cleanup test initialization and always validate VRFs in tests (https://github.com/filecoin-project/lotus/pull/4538)
- Add a market WithdrawBalance CLI (https://github.com/filecoin-project/lotus/pull/4524)
- wallet list: Add market balance and ID address flags (https://github.com/filecoin-project/lotus/pull/4555)
- tvx simulate command; tvx extract --ignore-sanity-checks (https://github.com/filecoin-project/lotus/pull/4554)
- lotus-lite: CLI tests for `lotus client` commands (https://github.com/filecoin-project/lotus/pull/4497)
- lite-mode - market storage and retrieval clients (https://github.com/filecoin-project/lotus/pull/4263)
- Chore: update drand to v1.2.0 (https://github.com/filecoin-project/lotus/pull/4420)
- Fix random test failures (https://github.com/filecoin-project/lotus/pull/4559)
- Fix flaky TestTimedBSSimple (https://github.com/filecoin-project/lotus/pull/4561)
- Make wallet market withdraw usable with miner addresses (https://github.com/filecoin-project/lotus/pull/4556)
- Fix flaky TestChainExportImportFull (https://github.com/filecoin-project/lotus/pull/4564)
- Use older randomness for the PoSt commit on specs-actors version 2 (https://github.com/filecoin-project/lotus/pull/4563)
- shed: Commad to decode messages (https://github.com/filecoin-project/lotus/pull/4565)
- Fetch worker key from correct block on sync (https://github.com/filecoin-project/lotus/pull/4573)
# 1.1.0 / 2020-10-20
This is a mandatory release that introduces the first post-liftoff upgrade to the Filecoin network. The changes that break consensus are an upgrade to specs-actors v2.2.0 at epoch 170000.
## Changes
- Introduce Network version 6 (https://github.com/filecoin-project/lotus/pull/4506)
- Update markets v1.0.0 (https://github.com/filecoin-project/lotus/pull/4505)
- Add some extra logging to try and debug sync issues (https://github.com/filecoin-project/lotus/pull/4486)
- Circle: Run tests for some subsystems separately (https://github.com/filecoin-project/lotus/pull/4496)
- Add a terminate sectors command to lotus-shed (https://github.com/filecoin-project/lotus/pull/4507)
- Add a comment to BlockMessages to address #4446 (https://github.com/filecoin-project/lotus/pull/4491)
# 1.0.0 / 2020-10-19
It's 1.0.0! This is an optional release of Lotus that introduces some UX improvements to the 0.10 series.
+29 -9
View File
@@ -5,10 +5,10 @@ all: build
unexport GOFLAGS
GOVERSION:=$(shell go version | cut -d' ' -f 3 | cut -d. -f 2)
ifeq ($(shell expr $(GOVERSION) \< 14), 1)
$(warning Your Golang version is go 1.$(GOVERSION))
$(error Update Golang to version $(shell grep '^go' go.mod))
GOVERSION:=$(shell go version | cut -d' ' -f 3 | sed 's/^go//' | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
ifeq ($(shell expr $(GOVERSION) \< 1015005), 1)
$(warning Your Golang version is go$(shell expr $(GOVERSION) / 1000000).$(shell expr $(GOVERSION) % 1000000 / 1000).$(shell expr $(GOVERSION) % 1000))
$(error Update Golang to version to at least 1.15.5)
endif
# git modules that need to be loaded
@@ -133,18 +133,30 @@ benchmarks:
lotus-pond: 2k
go build -o lotus-pond ./lotuspond
(cd lotuspond/front && npm i && CI=false npm run build)
.PHONY: lotus-pond
BINS+=lotus-pond
lotus-pond-front:
(cd lotuspond/front && npm i && CI=false npm run build)
.PHONY: lotus-pond-front
lotus-pond-app: lotus-pond-front lotus-pond
.PHONY: lotus-pond-app
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 lotus-townhall -i ./cmd/lotus-townhall -i ./build
.PHONY: lotus-townhall
BINS+=lotus-townhall
lotus-townhall-front:
(cd ./cmd/lotus-townhall/townhall && npm i && npm run build)
.PHONY: lotus-townhall-front
lotus-townhall-app: lotus-touch lotus-townhall-front
go run github.com/GeertJohan/go.rice/rice append --exec lotus-townhall -i ./cmd/lotus-townhall -i ./build
.PHONY: lotus-townhall-app
lotus-fountain:
rm -f lotus-fountain
go build -o lotus-fountain ./cmd/lotus-fountain
@@ -167,7 +179,7 @@ BINS+=lotus-bench
lotus-stats:
rm -f lotus-stats
go build -o lotus-stats ./cmd/lotus-stats
go build $(GOFLAGS) -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
@@ -192,6 +204,12 @@ lotus-wallet:
.PHONY: lotus-wallet
BINS+=lotus-wallet
lotus-keygen:
rm -f lotus-keygen
go build -o lotus-keygen ./cmd/lotus-keygen
.PHONY: lotus-keygen
BINS+=lotus-keygen
testground:
go build -tags testground -o /dev/null ./cmd/lotus
.PHONY: testground
@@ -292,7 +310,9 @@ method-gen:
gen: type-gen method-gen
docsgen:
go run ./api/docgen > documentation/en/api-methods.md
go run ./api/docgen "api/api_full.go" "FullNode" > documentation/en/api-methods.md
go run ./api/docgen "api/api_storage.go" "StorageMiner" > documentation/en/api-methods-miner.md
go run ./api/docgen "api/api_worker.go" "WorkerAPI" > documentation/en/api-methods-worker.md
print-%:
@echo $*=$($*)
+1 -1
View File
@@ -10,7 +10,7 @@
<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>
<a href=""><img src="https://img.shields.io/badge/golang-%3E%3D1.15.5-blue.svg" /></a>
<br>
</p>
+10
View File
@@ -4,6 +4,8 @@ import (
"context"
"fmt"
"github.com/google/uuid"
"github.com/filecoin-project/go-jsonrpc/auth"
metrics "github.com/libp2p/go-libp2p-core/metrics"
"github.com/libp2p/go-libp2p-core/network"
@@ -44,6 +46,11 @@ type Common interface {
// usage and current rate per protocol
NetBandwidthStatsByProtocol(ctx context.Context) (map[protocol.ID]metrics.Stats, error)
// ConnectionGater API
NetBlockAdd(ctx context.Context, acl NetBlockList) error
NetBlockRemove(ctx context.Context, acl NetBlockList) error
NetBlockList(ctx context.Context) (NetBlockList, error)
// MethodGroup: Common
// ID returns peerID of libp2p node backing this API
@@ -58,6 +65,9 @@ type Common interface {
// trigger graceful shutdown
Shutdown(context.Context) error
// Session returns a random UUID of api provider session
Session(context.Context) (uuid.UUID, error)
Closing(context.Context) (<-chan struct{}, error)
}
+56 -4
View File
@@ -2,6 +2,7 @@ package api
import (
"context"
"encoding/json"
"fmt"
"time"
@@ -207,6 +208,15 @@ type FullNode interface {
// based on current chain conditions
MpoolPushMessage(ctx context.Context, msg *types.Message, spec *MessageSendSpec) (*types.SignedMessage, error)
// MpoolBatchPush batch pushes a signed message to mempool.
MpoolBatchPush(context.Context, []*types.SignedMessage) ([]cid.Cid, error)
// MpoolBatchPushUntrusted batch pushes a signed message to mempool from untrusted sources.
MpoolBatchPushUntrusted(context.Context, []*types.SignedMessage) ([]cid.Cid, error)
// MpoolBatchPushMessage batch pushes a unsigned message to mempool.
MpoolBatchPushMessage(context.Context, []*types.Message, *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)
@@ -277,6 +287,8 @@ type FullNode interface {
ClientListDeals(ctx context.Context) ([]DealInfo, error)
// ClientGetDealUpdates returns the status of updated deals
ClientGetDealUpdates(ctx context.Context) (<-chan DealInfo, error)
// ClientGetDealStatus returns status given a code
ClientGetDealStatus(ctx context.Context, statusCode uint64) (string, error)
// ClientHasLocal indicates whether a certain CID is locally stored.
ClientHasLocal(ctx context.Context, root cid.Cid) (bool, error)
// ClientFindData identifies peers that have a certain file, and returns QueryOffers (one per peer).
@@ -290,6 +302,8 @@ type FullNode interface {
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.StorageAsk, error)
// ClientCalcCommP calculates the CommP and data size of the specified CID
ClientDealPieceCID(ctx context.Context, root cid.Cid) (DataCIDSize, 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.
@@ -301,6 +315,8 @@ type FullNode interface {
ClientDataTransferUpdates(ctx context.Context) (<-chan DataTransferChannel, error)
// ClientRestartDataTransfer attempts to restart a data transfer with the given transfer ID and other peer
ClientRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error
// ClientCancelDataTransfer cancels a data transfer with the given transfer ID and other peer
ClientCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) 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
@@ -329,6 +345,8 @@ type FullNode interface {
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 *MessageMatch, tsk types.TipSetKey, toht abi.ChainEpoch) ([]cid.Cid, error)
// StateDecodeParams attempts to decode the provided params, based on the recipient actor address and method number.
StateDecodeParams(ctx context.Context, toAddr address.Address, method abi.MethodNum, params []byte, tsk types.TipSetKey) (interface{}, error)
// StateNetworkName returns the name of the network the node is synced to
StateNetworkName(context.Context) (dtypes.NetworkName, error)
@@ -359,6 +377,8 @@ type FullNode interface {
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)
// StateMinerSectorAllocated checks if a sector is allocated
StateMinerSectorAllocated(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (bool, error)
// StateSectorPreCommitInfo returns the PreCommit info for the specified miner's sector
StateSectorPreCommitInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error)
// StateSectorGetInfo returns the on-chain info for the specified miner's sector. Returns null in case the sector info isn't found
@@ -495,8 +515,12 @@ type FullNode interface {
// along with the address removal.
MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error)
MarketEnsureAvailable(context.Context, address.Address, address.Address, types.BigInt) (cid.Cid, error)
// MarketFreeBalance
// MarketReserveFunds reserves funds for a deal
MarketReserveFunds(ctx context.Context, wallet address.Address, addr address.Address, amt types.BigInt) (cid.Cid, error)
// MarketReleaseFunds releases funds reserved by MarketReserveFunds
MarketReleaseFunds(ctx context.Context, addr address.Address, amt types.BigInt) error
// MarketWithdraw withdraws unlocked funds from the market actor
MarketWithdraw(ctx context.Context, wallet, addr address.Address, amt types.BigInt) (cid.Cid, error)
// MethodGroup: Paych
// The Paych methods are for interacting with and managing payment channels
@@ -570,6 +594,9 @@ type DealInfo struct {
CreationTime time.Time
Verified bool
TransferChannelID *datatransfer.ChannelID
DataTransfer *DataTransferChannel
}
type MsgLookup struct {
@@ -591,6 +618,8 @@ type MsgGasCost struct {
TotalCost abi.TokenAmount
}
// BlsMessages[x].cid = Cids[x]
// SecpkMessages[y].cid = Cids[BlsMessages.length + y]
type BlockMessages struct {
BlsMessages []*types.Message
SecpkMessages []*types.SignedMessage
@@ -762,14 +791,31 @@ type StartDealParams struct {
VerifiedDeal bool
}
func (s *StartDealParams) UnmarshalJSON(raw []byte) (err error) {
type sdpAlias StartDealParams
sdp := sdpAlias{
FastRetrieval: true,
}
if err := json.Unmarshal(raw, &sdp); err != nil {
return err
}
*s = StartDealParams(sdp)
return nil
}
type IpldObject struct {
Cid cid.Cid
Obj interface{}
}
type ActiveSync struct {
Base *types.TipSet
Target *types.TipSet
WorkerID uint64
Base *types.TipSet
Target *types.TipSet
Stage SyncStateStage
Height abi.ChainEpoch
@@ -874,6 +920,12 @@ type DataSize struct {
PieceSize abi.PaddedPieceSize
}
type DataCIDSize struct {
PayloadSize int64
PieceSize abi.PaddedPieceSize
PieceCID cid.Cid
}
type CommPRet struct {
Root cid.Cid
Size abi.UnpaddedPieceSize
+20 -1
View File
@@ -3,24 +3,43 @@ package api
import (
"context"
"github.com/ipfs/go-cid"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/dline"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
"github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid"
)
type GatewayAPI interface {
ChainHasObj(context.Context, cid.Cid) (bool, error)
ChainHead(ctx context.Context) (*types.TipSet, error)
ChainGetBlockMessages(context.Context, cid.Cid) (*BlockMessages, error)
ChainGetMessage(ctx context.Context, mc cid.Cid) (*types.Message, error)
ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error)
ChainGetTipSetByHeight(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error)
ChainNotify(context.Context) (<-chan []*HeadChange, error)
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (DealCollateralBounds, error)
StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error)
StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (MarketBalance, error)
StateMarketStorageDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*MarketDeal, error)
StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (miner.MinerInfo, error)
StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error)
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error)
StateNetworkVersion(context.Context, types.TipSetKey) (network.Version, error)
StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error)
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error)
StateWaitMsg(ctx context.Context, msg cid.Cid, confidence uint64) (*MsgLookup, error)
}
+40 -3
View File
@@ -5,13 +5,18 @@ import (
"context"
"time"
"github.com/google/uuid"
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/filecoin-project/go-address"
datatransfer "github.com/filecoin-project/go-data-transfer"
"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/go-state-types/abi"
"github.com/filecoin-project/specs-storage/storage"
"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"
@@ -25,6 +30,7 @@ type StorageMiner interface {
ActorAddress(context.Context) (address.Address, error)
ActorSectorSize(context.Context, address.Address) (abi.SectorSize, error)
ActorAddressConfig(ctx context.Context) (AddressConfig, error)
MiningBase(context.Context) (*types.TipSet, error)
@@ -37,6 +43,12 @@ type StorageMiner interface {
// List all staged sectors
SectorsList(context.Context) ([]abi.SectorNumber, error)
// Get summary info of sectors
SectorsSummary(ctx context.Context) (map[SectorState]int, error)
// List sectors in particular states
SectorsListInStates(context.Context, []SectorState) ([]abi.SectorNumber, error)
SectorsRefs(context.Context) (map[string][]SealedRef, error)
// SectorStartSealing can be called on sectors in Empty or WaitDeals states
@@ -62,11 +74,13 @@ type StorageMiner interface {
// 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)
WorkerStats(context.Context) (map[uuid.UUID]storiface.WorkerStats, error)
WorkerJobs(context.Context) (map[uuid.UUID][]storiface.WorkerJob, error)
storiface.WorkerReturn
// SealingSchedDiag dumps internal sealing scheduler state
SealingSchedDiag(context.Context) (interface{}, error)
SealingSchedDiag(ctx context.Context, doSched bool) (interface{}, error)
SealingAbort(ctx context.Context, call storiface.CallID) error
stores.SectorIndex
@@ -81,6 +95,10 @@ type StorageMiner interface {
MarketGetRetrievalAsk(ctx context.Context) (*retrievalmarket.Ask, error)
MarketListDataTransfers(ctx context.Context) ([]DataTransferChannel, error)
MarketDataTransferUpdates(ctx context.Context) (<-chan DataTransferChannel, error)
// MinerRestartDataTransfer attempts to restart a data transfer with the given transfer ID and other peer
MarketRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error
// ClientCancelDataTransfer cancels a data transfer with the given transfer ID and other peer
MarketCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error
DealsImportData(ctx context.Context, dealPropCid cid.Cid, file string) error
DealsList(ctx context.Context) ([]MarketDeal, error)
@@ -94,6 +112,10 @@ type StorageMiner interface {
DealsSetConsiderOfflineStorageDeals(context.Context, bool) error
DealsConsiderOfflineRetrievalDeals(context.Context) (bool, error)
DealsSetConsiderOfflineRetrievalDeals(context.Context, bool) error
DealsConsiderVerifiedStorageDeals(context.Context) (bool, error)
DealsSetConsiderVerifiedStorageDeals(context.Context, bool) error
DealsConsiderUnverifiedStorageDeals(context.Context) (bool, error)
DealsSetConsiderUnverifiedStorageDeals(context.Context, bool) error
StorageAddLocal(ctx context.Context, path string) error
@@ -107,6 +129,8 @@ type StorageMiner interface {
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
// the path specified when calling CreateBackup is within the base path
CreateBackup(ctx context.Context, fpath string) error
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, expensive bool) (map[abi.SectorNumber]string, error)
}
type SealRes struct {
@@ -186,3 +210,16 @@ func (st *SealSeed) Equals(ost *SealSeed) bool {
}
type SectorState string
type AddrUse int
const (
PreCommitAddr AddrUse = iota
CommitAddr
PoStAddr
)
type AddressConfig struct {
PreCommitControl []address.Address
CommitControl []address.Address
}
+20 -11
View File
@@ -2,15 +2,13 @@ package api
import (
"context"
"io"
"github.com/ipfs/go-cid"
"github.com/google/uuid"
"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"
)
@@ -23,18 +21,29 @@ 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)
storiface.WorkerCalls
storage.Sealer
TaskDisable(ctx context.Context, tt sealtasks.TaskType) error
TaskEnable(ctx context.Context, tt sealtasks.TaskType) 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)
// Storage / Other
Remove(ctx context.Context, sector abi.SectorID) error
StorageAddLocal(ctx context.Context, path string) error
Fetch(context.Context, abi.SectorID, stores.SectorFileType, stores.PathType, stores.AcquireMode) error
// SetEnabled marks the worker as enabled/disabled. Not that this setting
// may take a few seconds to propagate to task scheduler
SetEnabled(ctx context.Context, enabled bool) error
Closing(context.Context) (<-chan struct{}, error)
Enabled(ctx context.Context) (bool, error)
// WaitQuiet blocks until there are no tasks running
WaitQuiet(ctx context.Context) error
// returns a random UUID of worker session, generated randomly when worker
// process starts
ProcessSession(context.Context) (uuid.UUID, error)
// Like ProcessSession, but returns an error when worker is disabled
Session(context.Context) (uuid.UUID, error)
}
+386 -101
View File
@@ -5,8 +5,7 @@ import (
"io"
"time"
stnetwork "github.com/filecoin-project/go-state-types/network"
"github.com/google/uuid"
"github.com/ipfs/go-cid"
metrics "github.com/libp2p/go-libp2p-core/metrics"
"github.com/libp2p/go-libp2p-core/network"
@@ -25,6 +24,7 @@ import (
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/go-state-types/dline"
stnetwork "github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/lotus/extern/sector-storage/fsutil"
"github.com/filecoin-project/lotus/extern/sector-storage/sealtasks"
"github.com/filecoin-project/lotus/extern/sector-storage/stores"
@@ -60,6 +60,9 @@ type CommonStruct struct {
NetBandwidthStatsByPeer func(ctx context.Context) (map[string]metrics.Stats, error) `perm:"read"`
NetBandwidthStatsByProtocol func(ctx context.Context) (map[protocol.ID]metrics.Stats, error) `perm:"read"`
NetAgentVersion func(ctx context.Context, p peer.ID) (string, error) `perm:"read"`
NetBlockAdd func(ctx context.Context, acl api.NetBlockList) error `perm:"admin"`
NetBlockRemove func(ctx context.Context, acl api.NetBlockList) error `perm:"admin"`
NetBlockList func(ctx context.Context) (api.NetBlockList, error) `perm:"read"`
ID func(context.Context) (peer.ID, error) `perm:"read"`
Version func(context.Context) (api.Version, error) `perm:"read"`
@@ -68,6 +71,7 @@ type CommonStruct struct {
LogSetLevel func(context.Context, string, string) error `perm:"write"`
Shutdown func(context.Context) error `perm:"admin"`
Session func(context.Context) (uuid.UUID, error) `perm:"read"`
Closing func(context.Context) (<-chan struct{}, error) `perm:"read"`
}
}
@@ -131,6 +135,10 @@ type FullNodeStruct struct {
MpoolGetNonce func(context.Context, address.Address) (uint64, error) `perm:"read"`
MpoolSub func(context.Context) (<-chan api.MpoolUpdate, error) `perm:"read"`
MpoolBatchPush func(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
MpoolBatchPushUntrusted func(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
MpoolBatchPushMessage func(ctx context.Context, msgs []*types.Message, spec *api.MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"`
MinerGetBaseInfo func(context.Context, address.Address, abi.ChainEpoch, types.TipSetKey) (*api.MiningBaseInfo, error) `perm:"read"`
MinerCreateBlock func(context.Context, *api.BlockTemplate) (*types.BlockMsg, error) `perm:"write"`
@@ -156,17 +164,20 @@ type FullNodeStruct struct {
ClientMinerQueryOffer func(ctx context.Context, miner address.Address, root cid.Cid, piece *cid.Cid) (api.QueryOffer, error) `perm:"read"`
ClientStartDeal func(ctx context.Context, params *api.StartDealParams) (*cid.Cid, error) `perm:"admin"`
ClientGetDealInfo func(context.Context, cid.Cid) (*api.DealInfo, error) `perm:"read"`
ClientGetDealStatus func(context.Context, uint64) (string, error) `perm:"read"`
ClientListDeals func(ctx context.Context) ([]api.DealInfo, error) `perm:"write"`
ClientGetDealUpdates func(ctx context.Context) (<-chan api.DealInfo, error) `perm:"read"`
ClientRetrieve func(ctx context.Context, order api.RetrievalOrder, ref *api.FileRef) error `perm:"admin"`
ClientRetrieveWithEvents func(ctx context.Context, order api.RetrievalOrder, ref *api.FileRef) (<-chan marketevents.RetrievalEvent, error) `perm:"admin"`
ClientQueryAsk func(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.StorageAsk, error) `perm:"read"`
ClientDealPieceCID func(ctx context.Context, root cid.Cid) (api.DataCIDSize, error) `perm:"read"`
ClientCalcCommP func(ctx context.Context, inpath string) (*api.CommPRet, error) `perm:"read"`
ClientGenCar func(ctx context.Context, ref api.FileRef, outpath string) error `perm:"write"`
ClientDealSize func(ctx context.Context, root cid.Cid) (api.DataSize, error) `perm:"read"`
ClientListDataTransfers func(ctx context.Context) ([]api.DataTransferChannel, error) `perm:"write"`
ClientDataTransferUpdates func(ctx context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"`
ClientRestartDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"write"`
ClientCancelDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"write"`
ClientRetrieveTryRestartInsufficientFunds func(ctx context.Context, paymentChannel address.Address) error `perm:"write"`
StateNetworkName func(context.Context) (dtypes.NetworkName, error) `perm:"read"`
@@ -183,6 +194,7 @@ type FullNodeStruct struct {
StateMinerPreCommitDepositForPower func(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) `perm:"read"`
StateMinerInitialPledgeCollateral func(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) `perm:"read"`
StateMinerAvailableBalance func(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) `perm:"read"`
StateMinerSectorAllocated func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (bool, error) `perm:"read"`
StateSectorPreCommitInfo func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"`
StateSectorGetInfo func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"`
StateSectorExpiration func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorExpiration, error) `perm:"read"`
@@ -206,6 +218,7 @@ type FullNodeStruct struct {
StateGetReceipt func(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error) `perm:"read"`
StateMinerSectorCount func(context.Context, address.Address, types.TipSetKey) (api.MinerSectors, error) `perm:"read"`
StateListMessages func(ctx context.Context, match *api.MessageMatch, tsk types.TipSetKey, toht abi.ChainEpoch) ([]cid.Cid, error) `perm:"read"`
StateDecodeParams func(context.Context, address.Address, abi.MethodNum, []byte, types.TipSetKey) (interface{}, error) `perm:"read"`
StateCompute func(context.Context, abi.ChainEpoch, []*types.Message, types.TipSetKey) (*api.ComputeStateOutput, error) `perm:"read"`
StateVerifierStatus func(context.Context, address.Address, types.TipSetKey) (*abi.StoragePower, error) `perm:"read"`
StateVerifiedClientStatus func(context.Context, address.Address, types.TipSetKey) (*abi.StoragePower, error) `perm:"read"`
@@ -231,7 +244,9 @@ type FullNodeStruct struct {
MsigSwapCancel func(context.Context, address.Address, address.Address, uint64, address.Address, address.Address) (cid.Cid, error) `perm:"sign"`
MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) `perm:"sign"`
MarketEnsureAvailable func(context.Context, address.Address, address.Address, types.BigInt) (cid.Cid, error) `perm:"sign"`
MarketReserveFunds func(ctx context.Context, wallet address.Address, addr address.Address, amt types.BigInt) (cid.Cid, error) `perm:"sign"`
MarketReleaseFunds func(ctx context.Context, addr address.Address, amt types.BigInt) error `perm:"sign"`
MarketWithdraw func(ctx context.Context, wallet, addr address.Address, amt types.BigInt) (cid.Cid, error) `perm:"sign"`
PaychGet func(ctx context.Context, from, to address.Address, amt types.BigInt) (*api.ChannelInfo, error) `perm:"sign"`
PaychGetWaitReady func(context.Context, cid.Cid) (address.Address, error) `perm:"sign"`
@@ -263,8 +278,9 @@ type StorageMinerStruct struct {
CommonStruct
Internal struct {
ActorAddress func(context.Context) (address.Address, error) `perm:"read"`
ActorSectorSize func(context.Context, address.Address) (abi.SectorSize, error) `perm:"read"`
ActorAddress func(context.Context) (address.Address, error) `perm:"read"`
ActorSectorSize func(context.Context, address.Address) (abi.SectorSize, error) `perm:"read"`
ActorAddressConfig func(ctx context.Context) (api.AddressConfig, error) `perm:"read"`
MiningBase func(context.Context) (*types.TipSet, error) `perm:"read"`
@@ -279,11 +295,15 @@ type StorageMinerStruct struct {
MarketGetRetrievalAsk func(ctx context.Context) (*retrievalmarket.Ask, error) `perm:"read"`
MarketListDataTransfers func(ctx context.Context) ([]api.DataTransferChannel, error) `perm:"write"`
MarketDataTransferUpdates func(ctx context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"`
MarketRestartDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"read"`
MarketCancelDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"read"`
PledgeSector func(context.Context) error `perm:"write"`
SectorsStatus func(ctx context.Context, sid abi.SectorNumber, showOnChainInfo bool) (api.SectorInfo, error) `perm:"read"`
SectorsList func(context.Context) ([]abi.SectorNumber, error) `perm:"read"`
SectorsListInStates func(context.Context, []api.SectorState) ([]abi.SectorNumber, error) `perm:"read"`
SectorsSummary func(ctx context.Context) (map[api.SectorState]int, error) `perm:"read"`
SectorsRefs func(context.Context) (map[string][]api.SealedRef, error) `perm:"read"`
SectorStartSealing func(context.Context, abi.SectorNumber) error `perm:"write"`
SectorSetSealDelay func(context.Context, time.Duration) error `perm:"write"`
@@ -294,37 +314,54 @@ type StorageMinerStruct struct {
SectorRemove func(context.Context, abi.SectorNumber) error `perm:"admin"`
SectorMarkForUpgrade func(ctx context.Context, id abi.SectorNumber) error `perm:"admin"`
WorkerConnect func(context.Context, string) error `perm:"admin"` // TODO: worker perm
WorkerStats func(context.Context) (map[uint64]storiface.WorkerStats, error) `perm:"admin"`
WorkerJobs func(context.Context) (map[uint64][]storiface.WorkerJob, error) `perm:"admin"`
WorkerConnect func(context.Context, string) error `perm:"admin" retry:"true"` // TODO: worker perm
WorkerStats func(context.Context) (map[uuid.UUID]storiface.WorkerStats, error) `perm:"admin"`
WorkerJobs func(context.Context) (map[uuid.UUID][]storiface.WorkerJob, error) `perm:"admin"`
SealingSchedDiag func(context.Context) (interface{}, error) `perm:"admin"`
ReturnAddPiece func(ctx context.Context, callID storiface.CallID, pi abi.PieceInfo, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnSealPreCommit1 func(ctx context.Context, callID storiface.CallID, p1o storage.PreCommit1Out, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnSealPreCommit2 func(ctx context.Context, callID storiface.CallID, sealed storage.SectorCids, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnSealCommit1 func(ctx context.Context, callID storiface.CallID, out storage.Commit1Out, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnSealCommit2 func(ctx context.Context, callID storiface.CallID, proof storage.Proof, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnFinalizeSector func(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnReleaseUnsealed func(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnMoveStorage func(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnUnsealPiece func(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnReadPiece func(ctx context.Context, callID storiface.CallID, ok bool, err *storiface.CallError) error `perm:"admin" retry:"true"`
ReturnFetch func(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error `perm:"admin" retry:"true"`
StorageList func(context.Context) (map[stores.ID][]stores.Decl, error) `perm:"admin"`
StorageLocal func(context.Context) (map[stores.ID]string, error) `perm:"admin"`
StorageStat func(context.Context, stores.ID) (fsutil.FsStat, error) `perm:"admin"`
StorageAttach func(context.Context, stores.StorageInfo, fsutil.FsStat) error `perm:"admin"`
StorageDeclareSector func(context.Context, stores.ID, abi.SectorID, stores.SectorFileType, bool) error `perm:"admin"`
StorageDropSector func(context.Context, stores.ID, abi.SectorID, stores.SectorFileType) error `perm:"admin"`
StorageFindSector func(context.Context, abi.SectorID, stores.SectorFileType, abi.RegisteredSealProof, bool) ([]stores.SectorStorageInfo, error) `perm:"admin"`
StorageInfo func(context.Context, stores.ID) (stores.StorageInfo, error) `perm:"admin"`
StorageBestAlloc func(ctx context.Context, allocate stores.SectorFileType, spt abi.RegisteredSealProof, sealing stores.PathType) ([]stores.StorageInfo, error) `perm:"admin"`
StorageReportHealth func(ctx context.Context, id stores.ID, report stores.HealthReport) error `perm:"admin"`
StorageLock func(ctx context.Context, sector abi.SectorID, read stores.SectorFileType, write stores.SectorFileType) error `perm:"admin"`
StorageTryLock func(ctx context.Context, sector abi.SectorID, read stores.SectorFileType, write stores.SectorFileType) (bool, error) `perm:"admin"`
SealingSchedDiag func(context.Context, bool) (interface{}, error) `perm:"admin"`
SealingAbort func(ctx context.Context, call storiface.CallID) error `perm:"admin"`
DealsImportData func(ctx context.Context, dealPropCid cid.Cid, file string) error `perm:"write"`
DealsList func(ctx context.Context) ([]api.MarketDeal, error) `perm:"read"`
DealsConsiderOnlineStorageDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOnlineStorageDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderOnlineRetrievalDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOnlineRetrievalDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderOfflineStorageDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOfflineStorageDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderOfflineRetrievalDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOfflineRetrievalDeals func(context.Context, bool) error `perm:"admin"`
DealsPieceCidBlocklist func(context.Context) ([]cid.Cid, error) `perm:"read"`
DealsSetPieceCidBlocklist func(context.Context, []cid.Cid) error `perm:"admin"`
StorageList func(context.Context) (map[stores.ID][]stores.Decl, error) `perm:"admin"`
StorageLocal func(context.Context) (map[stores.ID]string, error) `perm:"admin"`
StorageStat func(context.Context, stores.ID) (fsutil.FsStat, error) `perm:"admin"`
StorageAttach func(context.Context, stores.StorageInfo, fsutil.FsStat) error `perm:"admin"`
StorageDeclareSector func(context.Context, stores.ID, abi.SectorID, storiface.SectorFileType, bool) error `perm:"admin"`
StorageDropSector func(context.Context, stores.ID, abi.SectorID, storiface.SectorFileType) error `perm:"admin"`
StorageFindSector func(context.Context, abi.SectorID, storiface.SectorFileType, abi.SectorSize, bool) ([]stores.SectorStorageInfo, error) `perm:"admin"`
StorageInfo func(context.Context, stores.ID) (stores.StorageInfo, error) `perm:"admin"`
StorageBestAlloc func(ctx context.Context, allocate storiface.SectorFileType, ssize abi.SectorSize, sealing storiface.PathType) ([]stores.StorageInfo, error) `perm:"admin"`
StorageReportHealth func(ctx context.Context, id stores.ID, report stores.HealthReport) error `perm:"admin"`
StorageLock func(ctx context.Context, sector abi.SectorID, read storiface.SectorFileType, write storiface.SectorFileType) error `perm:"admin"`
StorageTryLock func(ctx context.Context, sector abi.SectorID, read storiface.SectorFileType, write storiface.SectorFileType) (bool, error) `perm:"admin"`
DealsImportData func(ctx context.Context, dealPropCid cid.Cid, file string) error `perm:"write"`
DealsList func(ctx context.Context) ([]api.MarketDeal, error) `perm:"read"`
DealsConsiderOnlineStorageDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOnlineStorageDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderOnlineRetrievalDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOnlineRetrievalDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderOfflineStorageDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOfflineStorageDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderOfflineRetrievalDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderOfflineRetrievalDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderVerifiedStorageDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderVerifiedStorageDeals func(context.Context, bool) error `perm:"admin"`
DealsConsiderUnverifiedStorageDeals func(context.Context) (bool, error) `perm:"read"`
DealsSetConsiderUnverifiedStorageDeals func(context.Context, bool) error `perm:"admin"`
DealsPieceCidBlocklist func(context.Context) ([]cid.Cid, error) `perm:"read"`
DealsSetPieceCidBlocklist func(context.Context, []cid.Cid) error `perm:"admin"`
StorageAddLocal func(ctx context.Context, path string) error `perm:"admin"`
@@ -334,6 +371,8 @@ type StorageMinerStruct struct {
PiecesGetCIDInfo func(ctx context.Context, payloadCid cid.Cid) (*piecestore.CIDInfo, error) `perm:"read"`
CreateBackup func(ctx context.Context, fpath string) error `perm:"admin"`
CheckProvable func(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, expensive bool) (map[abi.SectorNumber]string, error) `perm:"admin"`
}
}
@@ -347,42 +386,63 @@ type WorkerStruct struct {
Paths func(context.Context) ([]stores.StoragePath, error) `perm:"admin"`
Info func(context.Context) (storiface.WorkerInfo, error) `perm:"admin"`
AddPiece func(ctx context.Context, sector abi.SectorID, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage.Data) (abi.PieceInfo, error) `perm:"admin"`
SealPreCommit1 func(ctx context.Context, sector abi.SectorID, ticket abi.SealRandomness, pieces []abi.PieceInfo) (storage.PreCommit1Out, error) `perm:"admin"`
SealPreCommit2 func(context.Context, abi.SectorID, storage.PreCommit1Out) (cids storage.SectorCids, err error) `perm:"admin"`
SealCommit1 func(ctx context.Context, sector abi.SectorID, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storage.SectorCids) (storage.Commit1Out, error) `perm:"admin"`
SealCommit2 func(context.Context, abi.SectorID, storage.Commit1Out) (storage.Proof, error) `perm:"admin"`
FinalizeSector func(context.Context, abi.SectorID, []storage.Range) error `perm:"admin"`
ReleaseUnsealed func(ctx context.Context, sector abi.SectorID, safeToFree []storage.Range) error `perm:"admin"`
Remove func(ctx context.Context, sector abi.SectorID) error `perm:"admin"`
MoveStorage func(ctx context.Context, sector abi.SectorID, types stores.SectorFileType) error `perm:"admin"`
StorageAddLocal func(ctx context.Context, path string) error `perm:"admin"`
AddPiece func(ctx context.Context, sector storage.SectorRef, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage.Data) (storiface.CallID, error) `perm:"admin"`
SealPreCommit1 func(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, pieces []abi.PieceInfo) (storiface.CallID, error) `perm:"admin"`
SealPreCommit2 func(ctx context.Context, sector storage.SectorRef, pc1o storage.PreCommit1Out) (storiface.CallID, error) `perm:"admin"`
SealCommit1 func(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storage.SectorCids) (storiface.CallID, error) `perm:"admin"`
SealCommit2 func(ctx context.Context, sector storage.SectorRef, c1o storage.Commit1Out) (storiface.CallID, error) `perm:"admin"`
FinalizeSector func(ctx context.Context, sector storage.SectorRef, keepUnsealed []storage.Range) (storiface.CallID, error) `perm:"admin"`
ReleaseUnsealed func(ctx context.Context, sector storage.SectorRef, safeToFree []storage.Range) (storiface.CallID, error) `perm:"admin"`
MoveStorage func(ctx context.Context, sector storage.SectorRef, types storiface.SectorFileType) (storiface.CallID, error) `perm:"admin"`
UnsealPiece func(context.Context, storage.SectorRef, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) (storiface.CallID, error) `perm:"admin"`
ReadPiece func(context.Context, io.Writer, storage.SectorRef, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize) (storiface.CallID, error) `perm:"admin"`
Fetch func(context.Context, storage.SectorRef, storiface.SectorFileType, storiface.PathType, storiface.AcquireMode) (storiface.CallID, error) `perm:"admin"`
UnsealPiece func(context.Context, abi.SectorID, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) error `perm:"admin"`
ReadPiece func(context.Context, io.Writer, abi.SectorID, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize) (bool, error) `perm:"admin"`
TaskDisable func(ctx context.Context, tt sealtasks.TaskType) error `perm:"admin"`
TaskEnable func(ctx context.Context, tt sealtasks.TaskType) error `perm:"admin"`
Fetch func(context.Context, abi.SectorID, stores.SectorFileType, stores.PathType, stores.AcquireMode) error `perm:"admin"`
Remove func(ctx context.Context, sector abi.SectorID) error `perm:"admin"`
StorageAddLocal func(ctx context.Context, path string) error `perm:"admin"`
Closing func(context.Context) (<-chan struct{}, error) `perm:"admin"`
SetEnabled func(ctx context.Context, enabled bool) error `perm:"admin"`
Enabled func(ctx context.Context) (bool, error) `perm:"admin"`
WaitQuiet func(ctx context.Context) error `perm:"admin"`
ProcessSession func(context.Context) (uuid.UUID, error) `perm:"admin"`
Session func(context.Context) (uuid.UUID, error) `perm:"admin"`
}
}
type GatewayStruct struct {
Internal struct {
// TODO: does the gateway need perms?
ChainHasObj func(context.Context, cid.Cid) (bool, error)
ChainGetTipSet func(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error)
ChainGetTipSetByHeight func(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error)
ChainHead func(ctx context.Context) (*types.TipSet, error)
ChainReadObj func(context.Context, cid.Cid) ([]byte, error)
GasEstimateMessageGas func(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
MpoolPush func(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
MsigGetAvailableBalance func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
MsigGetVested func(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
StateAccountKey func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
StateGetActor func(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
StateLookupID func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
StateWaitMsg func(ctx context.Context, msg cid.Cid, confidence uint64) (*api.MsgLookup, error)
ChainGetBlockMessages func(ctx context.Context, c cid.Cid) (*api.BlockMessages, error)
ChainGetMessage func(ctx context.Context, mc cid.Cid) (*types.Message, error)
ChainGetTipSet func(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error)
ChainGetTipSetByHeight func(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error)
ChainHasObj func(context.Context, cid.Cid) (bool, error)
ChainHead func(ctx context.Context) (*types.TipSet, error)
ChainNotify func(ctx context.Context) (<-chan []*api.HeadChange, error)
ChainReadObj func(context.Context, cid.Cid) ([]byte, error)
GasEstimateMessageGas func(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
MpoolPush func(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
MsigGetAvailableBalance func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
MsigGetVested func(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
StateAccountKey func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
StateDealProviderCollateralBounds func(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (api.DealCollateralBounds, error)
StateGetActor func(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
StateGetReceipt func(ctx context.Context, c cid.Cid, tsk types.TipSetKey) (*types.MessageReceipt, error)
StateLookupID func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
StateListMiners func(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error)
StateMinerInfo func(ctx context.Context, actor address.Address, tsk types.TipSetKey) (miner.MinerInfo, error)
StateMinerProvingDeadline func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error)
StateMinerPower func(context.Context, address.Address, types.TipSetKey) (*api.MinerPower, error)
StateMarketBalance func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (api.MarketBalance, error)
StateMarketStorageDeal func(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*api.MarketDeal, error)
StateNetworkVersion func(ctx context.Context, tsk types.TipSetKey) (stnetwork.Version, error)
StateSectorGetInfo func(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error)
StateVerifiedClientStatus func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error)
StateWaitMsg func(ctx context.Context, msg cid.Cid, confidence uint64) (*api.MsgLookup, error)
}
}
@@ -452,6 +512,18 @@ func (c *CommonStruct) NetBandwidthStatsByProtocol(ctx context.Context) (map[pro
return c.Internal.NetBandwidthStatsByProtocol(ctx)
}
func (c *CommonStruct) NetBlockAdd(ctx context.Context, acl api.NetBlockList) error {
return c.Internal.NetBlockAdd(ctx, acl)
}
func (c *CommonStruct) NetBlockRemove(ctx context.Context, acl api.NetBlockList) error {
return c.Internal.NetBlockRemove(ctx, acl)
}
func (c *CommonStruct) NetBlockList(ctx context.Context) (api.NetBlockList, error) {
return c.Internal.NetBlockList(ctx)
}
func (c *CommonStruct) NetAgentVersion(ctx context.Context, p peer.ID) (string, error) {
return c.Internal.NetAgentVersion(ctx, p)
}
@@ -478,6 +550,10 @@ func (c *CommonStruct) Shutdown(ctx context.Context) error {
return c.Internal.Shutdown(ctx)
}
func (c *CommonStruct) Session(ctx context.Context) (uuid.UUID, error) {
return c.Internal.Session(ctx)
}
func (c *CommonStruct) Closing(ctx context.Context) (<-chan struct{}, error) {
return c.Internal.Closing(ctx)
}
@@ -516,6 +592,10 @@ func (c *FullNodeStruct) ClientGetDealInfo(ctx context.Context, deal cid.Cid) (*
return c.Internal.ClientGetDealInfo(ctx, deal)
}
func (c *FullNodeStruct) ClientGetDealStatus(ctx context.Context, statusCode uint64) (string, error) {
return c.Internal.ClientGetDealStatus(ctx, statusCode)
}
func (c *FullNodeStruct) ClientListDeals(ctx context.Context) ([]api.DealInfo, error) {
return c.Internal.ClientListDeals(ctx)
}
@@ -535,6 +615,11 @@ func (c *FullNodeStruct) ClientRetrieveWithEvents(ctx context.Context, order api
func (c *FullNodeStruct) ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.StorageAsk, error) {
return c.Internal.ClientQueryAsk(ctx, p, miner)
}
func (c *FullNodeStruct) ClientDealPieceCID(ctx context.Context, root cid.Cid) (api.DataCIDSize, error) {
return c.Internal.ClientDealPieceCID(ctx, root)
}
func (c *FullNodeStruct) ClientCalcCommP(ctx context.Context, inpath string) (*api.CommPRet, error) {
return c.Internal.ClientCalcCommP(ctx, inpath)
}
@@ -559,6 +644,10 @@ func (c *FullNodeStruct) ClientRestartDataTransfer(ctx context.Context, transfer
return c.Internal.ClientRestartDataTransfer(ctx, transferID, otherPeer, isInitiator)
}
func (c *FullNodeStruct) ClientCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error {
return c.Internal.ClientCancelDataTransfer(ctx, transferID, otherPeer, isInitiator)
}
func (c *FullNodeStruct) ClientRetrieveTryRestartInsufficientFunds(ctx context.Context, paymentChannel address.Address) error {
return c.Internal.ClientRetrieveTryRestartInsufficientFunds(ctx, paymentChannel)
}
@@ -611,6 +700,18 @@ func (c *FullNodeStruct) MpoolPushMessage(ctx context.Context, msg *types.Messag
return c.Internal.MpoolPushMessage(ctx, msg, spec)
}
func (c *FullNodeStruct) MpoolBatchPush(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) {
return c.Internal.MpoolBatchPush(ctx, smsgs)
}
func (c *FullNodeStruct) MpoolBatchPushUntrusted(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) {
return c.Internal.MpoolBatchPushUntrusted(ctx, smsgs)
}
func (c *FullNodeStruct) MpoolBatchPushMessage(ctx context.Context, msgs []*types.Message, spec *api.MessageSendSpec) ([]*types.SignedMessage, error) {
return c.Internal.MpoolBatchPushMessage(ctx, msgs, spec)
}
func (c *FullNodeStruct) MpoolSub(ctx context.Context) (<-chan api.MpoolUpdate, error) {
return c.Internal.MpoolSub(ctx)
}
@@ -859,6 +960,10 @@ func (c *FullNodeStruct) StateMinerAvailableBalance(ctx context.Context, maddr a
return c.Internal.StateMinerAvailableBalance(ctx, maddr, tsk)
}
func (c *FullNodeStruct) StateMinerSectorAllocated(ctx context.Context, maddr address.Address, s abi.SectorNumber, tsk types.TipSetKey) (bool, error) {
return c.Internal.StateMinerSectorAllocated(ctx, maddr, s, tsk)
}
func (c *FullNodeStruct) StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) {
return c.Internal.StateSectorPreCommitInfo(ctx, maddr, n, tsk)
}
@@ -947,6 +1052,10 @@ func (c *FullNodeStruct) StateListMessages(ctx context.Context, match *api.Messa
return c.Internal.StateListMessages(ctx, match, tsk, toht)
}
func (c *FullNodeStruct) StateDecodeParams(ctx context.Context, toAddr address.Address, method abi.MethodNum, params []byte, tsk types.TipSetKey) (interface{}, error) {
return c.Internal.StateDecodeParams(ctx, toAddr, method, params, tsk)
}
func (c *FullNodeStruct) StateCompute(ctx context.Context, height abi.ChainEpoch, msgs []*types.Message, tsk types.TipSetKey) (*api.ComputeStateOutput, error) {
return c.Internal.StateCompute(ctx, height, msgs, tsk)
}
@@ -1039,8 +1148,16 @@ func (c *FullNodeStruct) MsigRemoveSigner(ctx context.Context, msig address.Addr
return c.Internal.MsigRemoveSigner(ctx, msig, proposer, toRemove, decrease)
}
func (c *FullNodeStruct) MarketEnsureAvailable(ctx context.Context, addr, wallet address.Address, amt types.BigInt) (cid.Cid, error) {
return c.Internal.MarketEnsureAvailable(ctx, addr, wallet, amt)
func (c *FullNodeStruct) MarketReserveFunds(ctx context.Context, wallet address.Address, addr address.Address, amt types.BigInt) (cid.Cid, error) {
return c.Internal.MarketReserveFunds(ctx, wallet, addr, amt)
}
func (c *FullNodeStruct) MarketReleaseFunds(ctx context.Context, addr address.Address, amt types.BigInt) error {
return c.Internal.MarketReleaseFunds(ctx, addr, amt)
}
func (c *FullNodeStruct) MarketWithdraw(ctx context.Context, wallet, addr address.Address, amt types.BigInt) (cid.Cid, error) {
return c.Internal.MarketWithdraw(ctx, wallet, addr, amt)
}
func (c *FullNodeStruct) PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt) (*api.ChannelInfo, error) {
@@ -1125,6 +1242,10 @@ func (c *StorageMinerStruct) ActorSectorSize(ctx context.Context, addr address.A
return c.Internal.ActorSectorSize(ctx, addr)
}
func (c *StorageMinerStruct) ActorAddressConfig(ctx context.Context) (api.AddressConfig, error) {
return c.Internal.ActorAddressConfig(ctx)
}
func (c *StorageMinerStruct) PledgeSector(ctx context.Context) error {
return c.Internal.PledgeSector(ctx)
}
@@ -1139,6 +1260,14 @@ func (c *StorageMinerStruct) SectorsList(ctx context.Context) ([]abi.SectorNumbe
return c.Internal.SectorsList(ctx)
}
func (c *StorageMinerStruct) SectorsListInStates(ctx context.Context, states []api.SectorState) ([]abi.SectorNumber, error) {
return c.Internal.SectorsListInStates(ctx, states)
}
func (c *StorageMinerStruct) SectorsSummary(ctx context.Context) (map[api.SectorState]int, error) {
return c.Internal.SectorsSummary(ctx)
}
func (c *StorageMinerStruct) SectorsRefs(ctx context.Context) (map[string][]api.SealedRef, error) {
return c.Internal.SectorsRefs(ctx)
}
@@ -1179,32 +1308,80 @@ func (c *StorageMinerStruct) WorkerConnect(ctx context.Context, url string) erro
return c.Internal.WorkerConnect(ctx, url)
}
func (c *StorageMinerStruct) WorkerStats(ctx context.Context) (map[uint64]storiface.WorkerStats, error) {
func (c *StorageMinerStruct) WorkerStats(ctx context.Context) (map[uuid.UUID]storiface.WorkerStats, error) {
return c.Internal.WorkerStats(ctx)
}
func (c *StorageMinerStruct) WorkerJobs(ctx context.Context) (map[uint64][]storiface.WorkerJob, error) {
func (c *StorageMinerStruct) WorkerJobs(ctx context.Context) (map[uuid.UUID][]storiface.WorkerJob, error) {
return c.Internal.WorkerJobs(ctx)
}
func (c *StorageMinerStruct) SealingSchedDiag(ctx context.Context) (interface{}, error) {
return c.Internal.SealingSchedDiag(ctx)
func (c *StorageMinerStruct) ReturnAddPiece(ctx context.Context, callID storiface.CallID, pi abi.PieceInfo, err *storiface.CallError) error {
return c.Internal.ReturnAddPiece(ctx, callID, pi, err)
}
func (c *StorageMinerStruct) ReturnSealPreCommit1(ctx context.Context, callID storiface.CallID, p1o storage.PreCommit1Out, err *storiface.CallError) error {
return c.Internal.ReturnSealPreCommit1(ctx, callID, p1o, err)
}
func (c *StorageMinerStruct) ReturnSealPreCommit2(ctx context.Context, callID storiface.CallID, sealed storage.SectorCids, err *storiface.CallError) error {
return c.Internal.ReturnSealPreCommit2(ctx, callID, sealed, err)
}
func (c *StorageMinerStruct) ReturnSealCommit1(ctx context.Context, callID storiface.CallID, out storage.Commit1Out, err *storiface.CallError) error {
return c.Internal.ReturnSealCommit1(ctx, callID, out, err)
}
func (c *StorageMinerStruct) ReturnSealCommit2(ctx context.Context, callID storiface.CallID, proof storage.Proof, err *storiface.CallError) error {
return c.Internal.ReturnSealCommit2(ctx, callID, proof, err)
}
func (c *StorageMinerStruct) ReturnFinalizeSector(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error {
return c.Internal.ReturnFinalizeSector(ctx, callID, err)
}
func (c *StorageMinerStruct) ReturnReleaseUnsealed(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error {
return c.Internal.ReturnReleaseUnsealed(ctx, callID, err)
}
func (c *StorageMinerStruct) ReturnMoveStorage(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error {
return c.Internal.ReturnMoveStorage(ctx, callID, err)
}
func (c *StorageMinerStruct) ReturnUnsealPiece(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error {
return c.Internal.ReturnUnsealPiece(ctx, callID, err)
}
func (c *StorageMinerStruct) ReturnReadPiece(ctx context.Context, callID storiface.CallID, ok bool, err *storiface.CallError) error {
return c.Internal.ReturnReadPiece(ctx, callID, ok, err)
}
func (c *StorageMinerStruct) ReturnFetch(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error {
return c.Internal.ReturnFetch(ctx, callID, err)
}
func (c *StorageMinerStruct) SealingSchedDiag(ctx context.Context, doSched bool) (interface{}, error) {
return c.Internal.SealingSchedDiag(ctx, doSched)
}
func (c *StorageMinerStruct) SealingAbort(ctx context.Context, call storiface.CallID) error {
return c.Internal.SealingAbort(ctx, call)
}
func (c *StorageMinerStruct) StorageAttach(ctx context.Context, si stores.StorageInfo, st fsutil.FsStat) error {
return c.Internal.StorageAttach(ctx, si, st)
}
func (c *StorageMinerStruct) StorageDeclareSector(ctx context.Context, storageId stores.ID, s abi.SectorID, ft stores.SectorFileType, primary bool) error {
func (c *StorageMinerStruct) StorageDeclareSector(ctx context.Context, storageId stores.ID, s abi.SectorID, ft storiface.SectorFileType, primary bool) error {
return c.Internal.StorageDeclareSector(ctx, storageId, s, ft, primary)
}
func (c *StorageMinerStruct) StorageDropSector(ctx context.Context, storageId stores.ID, s abi.SectorID, ft stores.SectorFileType) error {
func (c *StorageMinerStruct) StorageDropSector(ctx context.Context, storageId stores.ID, s abi.SectorID, ft storiface.SectorFileType) error {
return c.Internal.StorageDropSector(ctx, storageId, s, ft)
}
func (c *StorageMinerStruct) StorageFindSector(ctx context.Context, si abi.SectorID, types stores.SectorFileType, spt abi.RegisteredSealProof, allowFetch bool) ([]stores.SectorStorageInfo, error) {
return c.Internal.StorageFindSector(ctx, si, types, spt, allowFetch)
func (c *StorageMinerStruct) StorageFindSector(ctx context.Context, si abi.SectorID, types storiface.SectorFileType, ssize abi.SectorSize, allowFetch bool) ([]stores.SectorStorageInfo, error) {
return c.Internal.StorageFindSector(ctx, si, types, ssize, allowFetch)
}
func (c *StorageMinerStruct) StorageList(ctx context.Context) (map[stores.ID][]stores.Decl, error) {
@@ -1223,19 +1400,19 @@ func (c *StorageMinerStruct) StorageInfo(ctx context.Context, id stores.ID) (sto
return c.Internal.StorageInfo(ctx, id)
}
func (c *StorageMinerStruct) StorageBestAlloc(ctx context.Context, allocate stores.SectorFileType, spt abi.RegisteredSealProof, pt stores.PathType) ([]stores.StorageInfo, error) {
return c.Internal.StorageBestAlloc(ctx, allocate, spt, pt)
func (c *StorageMinerStruct) StorageBestAlloc(ctx context.Context, allocate storiface.SectorFileType, ssize abi.SectorSize, pt storiface.PathType) ([]stores.StorageInfo, error) {
return c.Internal.StorageBestAlloc(ctx, allocate, ssize, pt)
}
func (c *StorageMinerStruct) StorageReportHealth(ctx context.Context, id stores.ID, report stores.HealthReport) error {
return c.Internal.StorageReportHealth(ctx, id, report)
}
func (c *StorageMinerStruct) StorageLock(ctx context.Context, sector abi.SectorID, read stores.SectorFileType, write stores.SectorFileType) error {
func (c *StorageMinerStruct) StorageLock(ctx context.Context, sector abi.SectorID, read storiface.SectorFileType, write storiface.SectorFileType) error {
return c.Internal.StorageLock(ctx, sector, read, write)
}
func (c *StorageMinerStruct) StorageTryLock(ctx context.Context, sector abi.SectorID, read stores.SectorFileType, write stores.SectorFileType) (bool, error) {
func (c *StorageMinerStruct) StorageTryLock(ctx context.Context, sector abi.SectorID, read storiface.SectorFileType, write storiface.SectorFileType) (bool, error) {
return c.Internal.StorageTryLock(ctx, sector, read, write)
}
@@ -1283,6 +1460,14 @@ func (c *StorageMinerStruct) MarketDataTransferUpdates(ctx context.Context) (<-c
return c.Internal.MarketDataTransferUpdates(ctx)
}
func (c *StorageMinerStruct) MarketRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error {
return c.Internal.MarketRestartDataTransfer(ctx, transferID, otherPeer, isInitiator)
}
func (c *StorageMinerStruct) MarketCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error {
return c.Internal.MarketCancelDataTransfer(ctx, transferID, otherPeer, isInitiator)
}
func (c *StorageMinerStruct) DealsImportData(ctx context.Context, dealPropCid cid.Cid, file string) error {
return c.Internal.DealsImportData(ctx, dealPropCid, file)
}
@@ -1331,6 +1516,22 @@ func (c *StorageMinerStruct) DealsSetConsiderOfflineRetrievalDeals(ctx context.C
return c.Internal.DealsSetConsiderOfflineRetrievalDeals(ctx, b)
}
func (c *StorageMinerStruct) DealsConsiderVerifiedStorageDeals(ctx context.Context) (bool, error) {
return c.Internal.DealsConsiderVerifiedStorageDeals(ctx)
}
func (c *StorageMinerStruct) DealsSetConsiderVerifiedStorageDeals(ctx context.Context, b bool) error {
return c.Internal.DealsSetConsiderVerifiedStorageDeals(ctx, b)
}
func (c *StorageMinerStruct) DealsConsiderUnverifiedStorageDeals(ctx context.Context) (bool, error) {
return c.Internal.DealsConsiderUnverifiedStorageDeals(ctx)
}
func (c *StorageMinerStruct) DealsSetConsiderUnverifiedStorageDeals(ctx context.Context, b bool) error {
return c.Internal.DealsSetConsiderUnverifiedStorageDeals(ctx, b)
}
func (c *StorageMinerStruct) StorageAddLocal(ctx context.Context, path string) error {
return c.Internal.StorageAddLocal(ctx, path)
}
@@ -1355,6 +1556,10 @@ func (c *StorageMinerStruct) CreateBackup(ctx context.Context, fpath string) err
return c.Internal.CreateBackup(ctx, fpath)
}
func (c *StorageMinerStruct) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storage.SectorRef, expensive bool) (map[abi.SectorNumber]string, error) {
return c.Internal.CheckProvable(ctx, pp, sectors, expensive)
}
// WorkerStruct
func (w *WorkerStruct) Version(ctx context.Context) (build.Version, error) {
@@ -1373,60 +1578,100 @@ func (w *WorkerStruct) Info(ctx context.Context) (storiface.WorkerInfo, error) {
return w.Internal.Info(ctx)
}
func (w *WorkerStruct) AddPiece(ctx context.Context, sector abi.SectorID, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage.Data) (abi.PieceInfo, error) {
func (w *WorkerStruct) AddPiece(ctx context.Context, sector storage.SectorRef, pieceSizes []abi.UnpaddedPieceSize, newPieceSize abi.UnpaddedPieceSize, pieceData storage.Data) (storiface.CallID, error) {
return w.Internal.AddPiece(ctx, sector, pieceSizes, newPieceSize, pieceData)
}
func (w *WorkerStruct) SealPreCommit1(ctx context.Context, sector abi.SectorID, ticket abi.SealRandomness, pieces []abi.PieceInfo) (storage.PreCommit1Out, error) {
func (w *WorkerStruct) SealPreCommit1(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, pieces []abi.PieceInfo) (storiface.CallID, error) {
return w.Internal.SealPreCommit1(ctx, sector, ticket, pieces)
}
func (w *WorkerStruct) SealPreCommit2(ctx context.Context, sector abi.SectorID, p1o storage.PreCommit1Out) (storage.SectorCids, error) {
return w.Internal.SealPreCommit2(ctx, sector, p1o)
func (w *WorkerStruct) SealPreCommit2(ctx context.Context, sector storage.SectorRef, pc1o storage.PreCommit1Out) (storiface.CallID, error) {
return w.Internal.SealPreCommit2(ctx, sector, pc1o)
}
func (w *WorkerStruct) SealCommit1(ctx context.Context, sector abi.SectorID, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storage.SectorCids) (storage.Commit1Out, error) {
func (w *WorkerStruct) SealCommit1(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storage.SectorCids) (storiface.CallID, error) {
return w.Internal.SealCommit1(ctx, sector, ticket, seed, pieces, cids)
}
func (w *WorkerStruct) SealCommit2(ctx context.Context, sector abi.SectorID, c1o storage.Commit1Out) (storage.Proof, error) {
func (w *WorkerStruct) SealCommit2(ctx context.Context, sector storage.SectorRef, c1o storage.Commit1Out) (storiface.CallID, error) {
return w.Internal.SealCommit2(ctx, sector, c1o)
}
func (w *WorkerStruct) FinalizeSector(ctx context.Context, sector abi.SectorID, keepUnsealed []storage.Range) error {
func (w *WorkerStruct) FinalizeSector(ctx context.Context, sector storage.SectorRef, keepUnsealed []storage.Range) (storiface.CallID, error) {
return w.Internal.FinalizeSector(ctx, sector, keepUnsealed)
}
func (w *WorkerStruct) ReleaseUnsealed(ctx context.Context, sector abi.SectorID, safeToFree []storage.Range) error {
func (w *WorkerStruct) ReleaseUnsealed(ctx context.Context, sector storage.SectorRef, safeToFree []storage.Range) (storiface.CallID, error) {
return w.Internal.ReleaseUnsealed(ctx, sector, safeToFree)
}
func (w *WorkerStruct) MoveStorage(ctx context.Context, sector storage.SectorRef, types storiface.SectorFileType) (storiface.CallID, error) {
return w.Internal.MoveStorage(ctx, sector, types)
}
func (w *WorkerStruct) UnsealPiece(ctx context.Context, sector storage.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize, ticket abi.SealRandomness, c cid.Cid) (storiface.CallID, error) {
return w.Internal.UnsealPiece(ctx, sector, offset, size, ticket, c)
}
func (w *WorkerStruct) ReadPiece(ctx context.Context, sink io.Writer, sector storage.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (storiface.CallID, error) {
return w.Internal.ReadPiece(ctx, sink, sector, offset, size)
}
func (w *WorkerStruct) Fetch(ctx context.Context, id storage.SectorRef, fileType storiface.SectorFileType, ptype storiface.PathType, am storiface.AcquireMode) (storiface.CallID, error) {
return w.Internal.Fetch(ctx, id, fileType, ptype, am)
}
func (w *WorkerStruct) TaskDisable(ctx context.Context, tt sealtasks.TaskType) error {
return w.Internal.TaskDisable(ctx, tt)
}
func (w *WorkerStruct) TaskEnable(ctx context.Context, tt sealtasks.TaskType) error {
return w.Internal.TaskEnable(ctx, tt)
}
func (w *WorkerStruct) Remove(ctx context.Context, sector abi.SectorID) error {
return w.Internal.Remove(ctx, sector)
}
func (w *WorkerStruct) MoveStorage(ctx context.Context, sector abi.SectorID, types stores.SectorFileType) error {
return w.Internal.MoveStorage(ctx, sector, types)
}
func (w *WorkerStruct) StorageAddLocal(ctx context.Context, path string) error {
return w.Internal.StorageAddLocal(ctx, path)
}
func (w *WorkerStruct) UnsealPiece(ctx context.Context, id abi.SectorID, index storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize, randomness abi.SealRandomness, c cid.Cid) error {
return w.Internal.UnsealPiece(ctx, id, index, size, randomness, c)
func (w *WorkerStruct) SetEnabled(ctx context.Context, enabled bool) error {
return w.Internal.SetEnabled(ctx, enabled)
}
func (w *WorkerStruct) ReadPiece(ctx context.Context, writer io.Writer, id abi.SectorID, index storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (bool, error) {
return w.Internal.ReadPiece(ctx, writer, id, index, size)
func (w *WorkerStruct) Enabled(ctx context.Context) (bool, error) {
return w.Internal.Enabled(ctx)
}
func (w *WorkerStruct) Fetch(ctx context.Context, id abi.SectorID, fileType stores.SectorFileType, ptype stores.PathType, am stores.AcquireMode) error {
return w.Internal.Fetch(ctx, id, fileType, ptype, am)
func (w *WorkerStruct) WaitQuiet(ctx context.Context) error {
return w.Internal.WaitQuiet(ctx)
}
func (w *WorkerStruct) Closing(ctx context.Context) (<-chan struct{}, error) {
return w.Internal.Closing(ctx)
func (w *WorkerStruct) ProcessSession(ctx context.Context) (uuid.UUID, error) {
return w.Internal.ProcessSession(ctx)
}
func (w *WorkerStruct) Session(ctx context.Context) (uuid.UUID, error) {
return w.Internal.Session(ctx)
}
func (g GatewayStruct) ChainGetBlockMessages(ctx context.Context, c cid.Cid) (*api.BlockMessages, error) {
return g.Internal.ChainGetBlockMessages(ctx, c)
}
func (g GatewayStruct) ChainGetMessage(ctx context.Context, mc cid.Cid) (*types.Message, error) {
return g.Internal.ChainGetMessage(ctx, mc)
}
func (g GatewayStruct) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) {
return g.Internal.ChainGetTipSet(ctx, tsk)
}
func (g GatewayStruct) ChainGetTipSetByHeight(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) {
return g.Internal.ChainGetTipSetByHeight(ctx, h, tsk)
}
func (g GatewayStruct) ChainHasObj(ctx context.Context, c cid.Cid) (bool, error) {
@@ -1437,12 +1682,8 @@ func (g GatewayStruct) ChainHead(ctx context.Context) (*types.TipSet, error) {
return g.Internal.ChainHead(ctx)
}
func (g GatewayStruct) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) {
return g.Internal.ChainGetTipSet(ctx, tsk)
}
func (g GatewayStruct) ChainGetTipSetByHeight(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) {
return g.Internal.ChainGetTipSetByHeight(ctx, h, tsk)
func (g GatewayStruct) ChainNotify(ctx context.Context) (<-chan []*api.HeadChange, error) {
return g.Internal.ChainNotify(ctx)
}
func (g GatewayStruct) ChainReadObj(ctx context.Context, c cid.Cid) ([]byte, error) {
@@ -1469,14 +1710,58 @@ func (g GatewayStruct) StateAccountKey(ctx context.Context, addr address.Address
return g.Internal.StateAccountKey(ctx, addr, tsk)
}
func (g GatewayStruct) StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (api.DealCollateralBounds, error) {
return g.Internal.StateDealProviderCollateralBounds(ctx, size, verified, tsk)
}
func (g GatewayStruct) StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) {
return g.Internal.StateGetActor(ctx, actor, ts)
}
func (g GatewayStruct) StateGetReceipt(ctx context.Context, c cid.Cid, tsk types.TipSetKey) (*types.MessageReceipt, error) {
return g.Internal.StateGetReceipt(ctx, c, tsk)
}
func (g GatewayStruct) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) {
return g.Internal.StateLookupID(ctx, addr, tsk)
}
func (g GatewayStruct) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) {
return g.Internal.StateListMiners(ctx, tsk)
}
func (g GatewayStruct) StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (api.MarketBalance, error) {
return g.Internal.StateMarketBalance(ctx, addr, tsk)
}
func (g GatewayStruct) StateMarketStorageDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*api.MarketDeal, error) {
return g.Internal.StateMarketStorageDeal(ctx, dealId, tsk)
}
func (g GatewayStruct) StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (miner.MinerInfo, error) {
return g.Internal.StateMinerInfo(ctx, actor, tsk)
}
func (g GatewayStruct) StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error) {
return g.Internal.StateMinerProvingDeadline(ctx, addr, tsk)
}
func (g GatewayStruct) StateMinerPower(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*api.MinerPower, error) {
return g.Internal.StateMinerPower(ctx, addr, tsk)
}
func (g GatewayStruct) StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (stnetwork.Version, error) {
return g.Internal.StateNetworkVersion(ctx, tsk)
}
func (g GatewayStruct) StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error) {
return g.Internal.StateSectorGetInfo(ctx, maddr, n, tsk)
}
func (g GatewayStruct) StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) {
return g.Internal.StateVerifiedClientStatus(ctx, addr, tsk)
}
func (g GatewayStruct) StateWaitMsg(ctx context.Context, msg cid.Cid, confidence uint64) (*api.MsgLookup, error) {
return g.Internal.StateWaitMsg(ctx, msg, confidence)
}
+130 -28
View File
@@ -6,12 +6,14 @@ import (
"go/ast"
"go/parser"
"go/token"
"os"
"reflect"
"sort"
"strings"
"time"
"unicode"
"github.com/google/uuid"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-filestore"
metrics "github.com/libp2p/go-libp2p-core/metrics"
@@ -24,6 +26,7 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
datatransfer "github.com/filecoin-project/go-data-transfer"
filestore2 "github.com/filecoin-project/go-fil-markets/filestore"
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
"github.com/filecoin-project/go-jsonrpc/auth"
"github.com/filecoin-project/go-multistore"
@@ -36,6 +39,10 @@ import (
"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/extern/sector-storage/sealtasks"
"github.com/filecoin-project/lotus/extern/sector-storage/stores"
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
@@ -83,7 +90,7 @@ func init() {
addExample(&pid)
addExample(bitfield.NewFromSet([]uint64{5}))
addExample(abi.RegisteredSealProof_StackedDrg32GiBV1)
addExample(abi.RegisteredSealProof_StackedDrg32GiBV1_1)
addExample(abi.RegisteredPoStProof_StackedDrgWindow32GiBV1)
addExample(abi.ChainEpoch(10101))
addExample(crypto.SigTypeBLS)
@@ -117,17 +124,17 @@ func init() {
addExample(network.ReachabilityPublic)
addExample(build.NewestNetworkVersion)
addExample(&types.ExecutionTrace{
Msg: exampleValue(reflect.TypeOf(&types.Message{}), nil).(*types.Message),
MsgRct: exampleValue(reflect.TypeOf(&types.MessageReceipt{}), nil).(*types.MessageReceipt),
Msg: exampleValue("init", reflect.TypeOf(&types.Message{}), nil).(*types.Message),
MsgRct: exampleValue("init", reflect.TypeOf(&types.MessageReceipt{}), nil).(*types.MessageReceipt),
})
addExample(map[string]types.Actor{
"t01236": exampleValue(reflect.TypeOf(types.Actor{}), nil).(types.Actor),
"t01236": exampleValue("init", reflect.TypeOf(types.Actor{}), nil).(types.Actor),
})
addExample(map[string]api.MarketDeal{
"t026363": exampleValue(reflect.TypeOf(api.MarketDeal{}), nil).(api.MarketDeal),
"t026363": exampleValue("init", reflect.TypeOf(api.MarketDeal{}), nil).(api.MarketDeal),
})
addExample(map[string]api.MarketBalance{
"t026363": exampleValue(reflect.TypeOf(api.MarketBalance{}), nil).(api.MarketBalance),
"t026363": exampleValue("init", reflect.TypeOf(api.MarketBalance{}), nil).(api.MarketBalance),
})
addExample(map[string]*pubsub.TopicScoreSnapshot{
"/blocks": {
@@ -162,9 +169,89 @@ func init() {
// because reflect.TypeOf(maddr) returns the concrete type...
ExampleValues[reflect.TypeOf(struct{ A multiaddr.Multiaddr }{}).Field(0).Type] = maddr
// miner specific
addExample(filestore2.Path(".lotusminer/fstmp123"))
si := multistore.StoreID(12)
addExample(&si)
addExample(retrievalmarket.DealID(5))
addExample(abi.ActorID(1000))
addExample(map[string][]api.SealedRef{
"98000": {
api.SealedRef{
SectorID: 100,
Offset: 10 << 20,
Size: 1 << 20,
},
},
})
addExample(api.SectorState(sealing.Proving))
addExample(stores.ID("76f1988b-ef30-4d7e-b3ec-9a627f4ba5a8"))
addExample(storiface.FTUnsealed)
addExample(storiface.PathSealing)
addExample(map[stores.ID][]stores.Decl{
"76f1988b-ef30-4d7e-b3ec-9a627f4ba5a8": {
{
SectorID: abi.SectorID{Miner: 1000, Number: 100},
SectorFileType: storiface.FTSealed,
},
},
})
addExample(map[stores.ID]string{
"76f1988b-ef30-4d7e-b3ec-9a627f4ba5a8": "/data/path",
})
addExample(map[uuid.UUID][]storiface.WorkerJob{
uuid.MustParse("ef8d99a2-6865-4189-8ffa-9fef0f806eee"): {
{
ID: storiface.CallID{
Sector: abi.SectorID{Miner: 1000, Number: 100},
ID: uuid.MustParse("76081ba0-61bd-45a5-bc08-af05f1c26e5d"),
},
Sector: abi.SectorID{Miner: 1000, Number: 100},
Task: sealtasks.TTPreCommit2,
RunWait: 0,
Start: time.Unix(1605172927, 0).UTC(),
Hostname: "host",
},
},
})
addExample(map[uuid.UUID]storiface.WorkerStats{
uuid.MustParse("ef8d99a2-6865-4189-8ffa-9fef0f806eee"): {
Info: storiface.WorkerInfo{
Hostname: "host",
Resources: storiface.WorkerResources{
MemPhysical: 256 << 30,
MemSwap: 120 << 30,
MemReserved: 2 << 30,
CPUs: 64,
GPUs: []string{"aGPU 1337"},
},
},
Enabled: true,
MemUsedMin: 0,
MemUsedMax: 0,
GpuUsed: false,
CpuUse: 0,
},
})
addExample(storiface.ErrorCode(0))
addExample(map[abi.SectorNumber]string{
123: "can't acquire read lock",
})
addExample(map[api.SectorState]int{
api.SectorState(sealing.Proving): 120,
})
addExample([]abi.SectorNumber{123, 124})
// worker specific
addExample(storiface.AcquireMove)
addExample(storiface.UnpaddedByteIndex(abi.PaddedPieceSize(1 << 20).Unpadded()))
addExample(map[sealtasks.TaskType]struct{}{
sealtasks.TTPreCommit2: {},
})
addExample(sealtasks.TTCommit2)
}
func exampleValue(t, parent reflect.Type) interface{} {
func exampleValue(method string, t, parent reflect.Type) interface{} {
v, ok := ExampleValues[t]
if ok {
return v
@@ -173,25 +260,25 @@ func exampleValue(t, parent reflect.Type) interface{} {
switch t.Kind() {
case reflect.Slice:
out := reflect.New(t).Elem()
reflect.Append(out, reflect.ValueOf(exampleValue(t.Elem(), t)))
reflect.Append(out, reflect.ValueOf(exampleValue(method, t.Elem(), t)))
return out.Interface()
case reflect.Chan:
return exampleValue(t.Elem(), nil)
return exampleValue(method, t.Elem(), nil)
case reflect.Struct:
es := exampleStruct(t, parent)
es := exampleStruct(method, 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)))
out.Index(i).Set(reflect.ValueOf(exampleValue(method, t.Elem(), t)))
}
return out.Interface()
case reflect.Ptr:
if t.Elem().Kind() == reflect.Struct {
es := exampleStruct(t.Elem(), t)
es := exampleStruct(method, t.Elem(), t)
//ExampleValues[t] = es
return es
}
@@ -199,10 +286,10 @@ func exampleValue(t, parent reflect.Type) interface{} {
return struct{}{}
}
panic(fmt.Sprintf("No example value for type: %s", t))
panic(fmt.Sprintf("No example value for type: %s (method '%s')", t, method))
}
func exampleStruct(t, parent reflect.Type) interface{} {
func exampleStruct(method string, t, parent reflect.Type) interface{} {
ns := reflect.New(t)
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
@@ -210,7 +297,7 @@ func exampleStruct(t, parent reflect.Type) interface{} {
continue
}
if strings.Title(f.Name) == f.Name {
ns.Elem().Field(i).Set(reflect.ValueOf(exampleValue(f.Type, t)))
ns.Elem().Field(i).Set(reflect.ValueOf(exampleValue(method, f.Type, t)))
}
}
@@ -218,6 +305,7 @@ func exampleStruct(t, parent reflect.Type) interface{} {
}
type Visitor struct {
Root string
Methods map[string]ast.Node
}
@@ -227,7 +315,7 @@ func (v *Visitor) Visit(node ast.Node) ast.Visitor {
return v
}
if st.Name.Name != "FullNode" {
if st.Name.Name != v.Root {
return nil
}
@@ -243,7 +331,7 @@ func (v *Visitor) Visit(node ast.Node) ast.Visitor {
const noComment = "There are not yet any comments for this method."
func parseApiASTInfo() (map[string]string, map[string]string) { //nolint:golint
func parseApiASTInfo(apiFile, iface string) (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 {
@@ -252,11 +340,11 @@ func parseApiASTInfo() (map[string]string, map[string]string) { //nolint:golint
ap := pkgs["api"]
f := ap.Files["api/api_full.go"]
f := ap.Files[apiFile]
cmap := ast.NewCommentMap(fset, f, f.Comments)
v := &Visitor{make(map[string]ast.Node)}
v := &Visitor{iface, make(map[string]ast.Node)}
ast.Walk(v, pkgs["api"])
groupDocs := make(map[string]string)
@@ -312,13 +400,30 @@ func methodGroupFromName(mn string) string {
}
func main() {
comments, groupComments := parseApiASTInfo()
comments, groupComments := parseApiASTInfo(os.Args[1], os.Args[2])
groups := make(map[string]*MethodGroup)
var api struct{ api.FullNode }
t := reflect.TypeOf(api)
var t reflect.Type
var permStruct, commonPermStruct reflect.Type
switch os.Args[2] {
case "FullNode":
t = reflect.TypeOf(new(struct{ api.FullNode })).Elem()
permStruct = reflect.TypeOf(apistruct.FullNodeStruct{}.Internal)
commonPermStruct = reflect.TypeOf(apistruct.CommonStruct{}.Internal)
case "StorageMiner":
t = reflect.TypeOf(new(struct{ api.StorageMiner })).Elem()
permStruct = reflect.TypeOf(apistruct.StorageMinerStruct{}.Internal)
commonPermStruct = reflect.TypeOf(apistruct.CommonStruct{}.Internal)
case "WorkerAPI":
t = reflect.TypeOf(new(struct{ api.WorkerAPI })).Elem()
permStruct = reflect.TypeOf(apistruct.WorkerStruct{}.Internal)
commonPermStruct = reflect.TypeOf(apistruct.WorkerStruct{}.Internal)
default:
panic("unknown type")
}
for i := 0; i < t.NumMethod(); i++ {
m := t.Method(i)
@@ -336,7 +441,7 @@ func main() {
ft := m.Func.Type()
for j := 2; j < ft.NumIn(); j++ {
inp := ft.In(j)
args = append(args, exampleValue(inp, nil))
args = append(args, exampleValue(m.Name, inp, nil))
}
v, err := json.MarshalIndent(args, "", " ")
@@ -344,7 +449,7 @@ func main() {
panic(err)
}
outv := exampleValue(ft.Out(0), nil)
outv := exampleValue(m.Name, ft.Out(0), nil)
ov, err := json.MarshalIndent(outv, "", " ")
if err != nil {
@@ -377,9 +482,6 @@ func main() {
}
}
permStruct := reflect.TypeOf(apistruct.FullNodeStruct{}.Internal)
commonPermStruct := reflect.TypeOf(apistruct.CommonStruct{}.Internal)
for _, g := range groupslice {
g := g
fmt.Printf("## %s\n", g.GroupName)
+6 -1
View File
@@ -37,7 +37,12 @@ func (bm *BlockMiner) MineBlocks() {
go func() {
defer close(bm.done)
for atomic.LoadInt64(&bm.mine) == 1 {
time.Sleep(bm.blocktime)
select {
case <-bm.ctx.Done():
return
case <-time.After(bm.blocktime):
}
nulls := atomic.SwapInt64(&bm.nulls, 0)
if err := bm.miner.MineOne(bm.ctx, miner.MineReq{
InjectNulls: abi.ChainEpoch(nulls),
+2 -5
View File
@@ -3,7 +3,6 @@ package test
import (
"context"
"fmt"
"os"
"sync/atomic"
"testing"
"time"
@@ -17,8 +16,6 @@ import (
)
func TestCCUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
for _, height := range []abi.ChainEpoch{
1, // before
162, // while sealing
@@ -34,7 +31,7 @@ func TestCCUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration) {
func testCCUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration, upgradeHeight abi.ChainEpoch) {
ctx := context.Background()
n, sn := b(t, []FullNodeOpts{FullNodeWithUpgradeAt(upgradeHeight)}, OneMiner)
n, sn := b(t, []FullNodeOpts{FullNodeWithActorsV2At(upgradeHeight)}, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
@@ -92,7 +89,7 @@ func testCCUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration, upgradeH
t.Fatal(err)
}
makeDeal(t, ctx, 6, client, miner, false, false)
MakeDeal(t, ctx, 6, client, miner, false, false, 0)
// Validate upgrade
+44 -39
View File
@@ -12,19 +12,18 @@ import (
"testing"
"time"
"github.com/filecoin-project/go-state-types/abi"
"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"
@@ -34,18 +33,7 @@ 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, fastRet bool) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
func TestDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, carExport, fastRet bool, startEpoch abi.ChainEpoch) {
ctx := context.Background()
n, sn := b(t, OneFull, OneMiner)
@@ -74,15 +62,14 @@ func TestDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, carExport
}
}()
makeDeal(t, ctx, 6, client, miner, carExport, fastRet)
MakeDeal(t, ctx, 6, client, miner, carExport, fastRet, startEpoch)
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")
func TestDoubleDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, startEpoch abi.ChainEpoch) {
ctx := context.Background()
n, sn := b(t, OneFull, OneMiner)
@@ -112,27 +99,24 @@ func TestDoubleDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration) {
}
}()
makeDeal(t, ctx, 6, client, miner, false, false)
makeDeal(t, ctx, 7, client, miner, false, false)
MakeDeal(t, ctx, 6, client, miner, false, false, startEpoch)
MakeDeal(t, ctx, 7, client, miner, false, false, startEpoch)
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, fastRet bool) {
data := make([]byte, 1600)
rand.New(rand.NewSource(int64(rseed))).Read(data)
r := bytes.NewReader(data)
fcid, err := client.ClientImportLocal(ctx, r)
func MakeDeal(t *testing.T, ctx context.Context, rseed int, client api.FullNode, miner TestStorageNode, carExport, fastRet bool, startEpoch abi.ChainEpoch) {
res, data, err := CreateClientFile(ctx, client, rseed)
if err != nil {
t.Fatal(err)
}
fcid := res.Root
fmt.Println("FILE CID: ", fcid)
deal := startDeal(t, ctx, miner, client, fcid, fastRet)
deal := startDeal(t, ctx, miner, client, fcid, fastRet, startEpoch)
// TODO: this sleep is only necessary because deals don't immediately get logged in the dealstore, we should fix this
time.Sleep(time.Second)
@@ -145,8 +129,29 @@ func makeDeal(t *testing.T, ctx context.Context, rseed int, client *impl.FullNod
testRetrieval(t, ctx, client, fcid, &info.PieceCID, carExport, data)
}
func TestFastRetrievalDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
func CreateClientFile(ctx context.Context, client api.FullNode, rseed int) (*api.ImportRes, []byte, error) {
data := make([]byte, 1600)
rand.New(rand.NewSource(int64(rseed))).Read(data)
dir, err := ioutil.TempDir(os.TempDir(), "test-make-deal-")
if err != nil {
return nil, nil, err
}
path := filepath.Join(dir, "sourcefile.dat")
err = ioutil.WriteFile(path, data, 0644)
if err != nil {
return nil, nil, err
}
res, err := client.ClientImport(ctx, api.FileRef{Path: path})
if err != nil {
return nil, nil, err
}
return res, data, nil
}
func TestFastRetrievalDealFlow(t *testing.T, b APIBuilder, blocktime time.Duration, startEpoch abi.ChainEpoch) {
ctx := context.Background()
n, sn := b(t, OneFull, OneMiner)
@@ -186,7 +191,7 @@ func TestFastRetrievalDealFlow(t *testing.T, b APIBuilder, blocktime time.Durati
fmt.Println("FILE CID: ", fcid)
deal := startDeal(t, ctx, miner, client, fcid, true)
deal := startDeal(t, ctx, miner, client, fcid, true, startEpoch)
waitDealPublished(t, ctx, miner, deal)
fmt.Println("deal published, retrieving")
@@ -200,8 +205,7 @@ func TestFastRetrievalDealFlow(t *testing.T, b APIBuilder, blocktime time.Durati
<-done
}
func TestSenondDealRetrieval(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
func TestSecondDealRetrieval(t *testing.T, b APIBuilder, blocktime time.Duration) {
ctx := context.Background()
n, sn := b(t, OneFull, OneMiner)
@@ -250,13 +254,13 @@ func TestSenondDealRetrieval(t *testing.T, b APIBuilder, blocktime time.Duration
t.Fatal(err)
}
deal1 := startDeal(t, ctx, miner, client, fcid1, true)
deal1 := startDeal(t, ctx, miner, client, fcid1, true, 0)
// 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)
deal2 := startDeal(t, ctx, miner, client, fcid2, true, 0)
time.Sleep(time.Second)
waitDealSealed(t, ctx, miner, client, deal2, false)
@@ -276,7 +280,7 @@ func TestSenondDealRetrieval(t *testing.T, b APIBuilder, blocktime time.Duration
<-done
}
func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client *impl.FullNodeAPI, fcid cid.Cid, fastRet bool) *cid.Cid {
func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client api.FullNode, fcid cid.Cid, fastRet bool, startEpoch abi.ChainEpoch) *cid.Cid {
maddr, err := miner.ActorAddress(ctx)
if err != nil {
t.Fatal(err)
@@ -294,6 +298,7 @@ func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client
Wallet: addr,
Miner: maddr,
EpochPrice: types.NewInt(1000000),
DealStartEpoch: startEpoch,
MinBlocksDuration: uint64(build.MinDealDuration),
FastRetrieval: fastRet,
})
@@ -303,7 +308,7 @@ func startDeal(t *testing.T, ctx context.Context, miner TestStorageNode, client
return deal
}
func waitDealSealed(t *testing.T, ctx context.Context, miner TestStorageNode, client *impl.FullNodeAPI, deal *cid.Cid, noseal bool) {
func waitDealSealed(t *testing.T, ctx context.Context, miner TestStorageNode, client api.FullNode, deal *cid.Cid, noseal bool) {
loop:
for {
di, err := client.ClientGetDealInfo(ctx, *deal)
@@ -311,7 +316,7 @@ loop:
t.Fatal(err)
}
switch di.State {
case storagemarket.StorageDealSealing:
case storagemarket.StorageDealAwaitingPreCommit, storagemarket.StorageDealSealing:
if noseal {
return
}
@@ -351,7 +356,7 @@ func waitDealPublished(t *testing.T, ctx context.Context, miner TestStorageNode,
t.Fatal("deal failed")
case storagemarket.StorageDealError:
t.Fatal("deal errored", di.Message)
case storagemarket.StorageDealFinalizing, storagemarket.StorageDealSealing, storagemarket.StorageDealActive:
case storagemarket.StorageDealFinalizing, storagemarket.StorageDealAwaitingPreCommit, storagemarket.StorageDealSealing, storagemarket.StorageDealActive:
fmt.Println("COMPLETE", di)
return
}
@@ -376,7 +381,7 @@ func startSealingWaiting(t *testing.T, ctx context.Context, miner TestStorageNod
}
}
func testRetrieval(t *testing.T, ctx context.Context, client *impl.FullNodeAPI, fcid cid.Cid, piece *cid.Cid, carExport bool, data []byte) {
func testRetrieval(t *testing.T, ctx context.Context, client api.FullNode, fcid cid.Cid, piece *cid.Cid, carExport bool, data []byte) {
offers, err := client.ClientFindData(ctx, fcid, piece)
if err != nil {
t.Fatal(err)
+6 -12
View File
@@ -5,7 +5,6 @@ import (
"context"
"fmt"
"math/rand"
"os"
"sync/atomic"
"testing"
"time"
@@ -59,14 +58,11 @@ func (ts *testSuite) testMiningReal(t *testing.T) {
newHeads, err := api.ChainNotify(ctx)
require.NoError(t, err)
initHead := (<-newHeads)[0]
if initHead.Val.Height() != 2 {
<-newHeads
}
at := (<-newHeads)[0].Val.Height()
h1, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(2), h1.Height())
require.Equal(t, int64(at), int64(h1.Height()))
MineUntilBlock(ctx, t, apis[0], sn[0], nil)
require.NoError(t, err)
@@ -75,21 +71,19 @@ func (ts *testSuite) testMiningReal(t *testing.T) {
h2, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(3), h2.Height())
require.Greater(t, int64(h2.Height()), int64(h1.Height()))
MineUntilBlock(ctx, t, apis[0], sn[0], nil)
require.NoError(t, err)
<-newHeads
h2, err = api.ChainHead(ctx)
h3, err := api.ChainHead(ctx)
require.NoError(t, err)
require.Equal(t, abi.ChainEpoch(4), h2.Height())
require.Greater(t, int64(h3.Height()), int64(h2.Height()))
}
func TestDealMining(t *testing.T, b APIBuilder, blocktime time.Duration, carExport bool) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
// test making a deal with a fresh miner, and see if it starts to mine
ctx := context.Background()
@@ -192,7 +186,7 @@ func TestDealMining(t *testing.T, b APIBuilder, blocktime time.Duration, carExpo
}
}()
deal := startDeal(t, ctx, provider, client, fcid, false)
deal := startDeal(t, ctx, provider, client, fcid, false, 0)
// TODO: this sleep is only necessary because deals don't immediately get logged in the dealstore, we should fix this
time.Sleep(time.Second)
+4 -8
View File
@@ -3,14 +3,10 @@ package test
import (
"context"
"fmt"
"os"
"sync/atomic"
"testing"
"time"
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/ipfs/go-cid"
@@ -22,15 +18,15 @@ import (
"github.com/filecoin-project/lotus/api/apibstore"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/actors/adt"
"github.com/filecoin-project/lotus/chain/actors/builtin"
"github.com/filecoin-project/lotus/chain/actors/builtin/paych"
"github.com/filecoin-project/lotus/chain/actors/policy"
"github.com/filecoin-project/lotus/chain/events"
"github.com/filecoin-project/lotus/chain/events/state"
"github.com/filecoin-project/lotus/chain/types"
)
func TestPaymentChannels(t *testing.T, b APIBuilder, blocktime time.Duration) {
_ = os.Setenv("BELLMAN_NO_GPU", "1")
ctx := context.Background()
n, sn := b(t, TwoFull, OneMiner)
@@ -227,7 +223,7 @@ func TestPaymentChannels(t *testing.T, b APIBuilder, blocktime time.Duration) {
}
// wait for the settlement period to pass before collecting
waitForBlocks(ctx, t, bm, paymentReceiver, receiverAddr, paych0.SettleDelay)
waitForBlocks(ctx, t, bm, paymentReceiver, receiverAddr, policy.PaychSettleDelay)
creatorPreCollectBalance, err := paymentCreator.WalletBalance(ctx, createrAddr)
if err != nil {
@@ -283,7 +279,7 @@ func waitForBlocks(ctx context.Context, t *testing.T, bm *BlockMiner, paymentRec
// Add a real block
m, err := paymentReceiver.MpoolPushMessage(ctx, &types.Message{
To: builtin0.BurntFundsActorAddr,
To: builtin.BurntFundsActorAddr,
From: receiverAddr,
Value: types.NewInt(0),
}, nil)
+37 -1
View File
@@ -2,12 +2,15 @@ package test
import (
"context"
"fmt"
"os"
"testing"
"time"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/types"
logging "github.com/ipfs/go-log/v2"
"github.com/multiformats/go-multiaddr"
"github.com/stretchr/testify/assert"
@@ -22,6 +25,15 @@ import (
"github.com/filecoin-project/lotus/node"
)
func init() {
logging.SetAllLoggers(logging.LevelInfo)
err := os.Setenv("BELLMAN_NO_GPU", "1")
if err != nil {
panic(fmt.Sprintf("failed to set BELLMAN_NO_GPU env variable: %s", err))
}
build.InsecurePoStValidation = true
}
type TestNode struct {
api.FullNode
// ListenAddr is the address on which an API server is listening, if an
@@ -97,7 +109,7 @@ var OneMiner = []StorageMiner{{Full: 0, Preseal: PresealGenesis}}
var OneFull = DefaultFullOpts(1)
var TwoFull = DefaultFullOpts(2)
var FullNodeWithUpgradeAt = func(upgradeHeight abi.ChainEpoch) FullNodeOpts {
var FullNodeWithActorsV2At = func(upgradeHeight abi.ChainEpoch) FullNodeOpts {
return FullNodeOpts{
Opts: func(nodes []TestNode) node.Option {
return node.Override(new(stmgr.UpgradeSchedule), stmgr.UpgradeSchedule{{
@@ -110,6 +122,30 @@ var FullNodeWithUpgradeAt = func(upgradeHeight abi.ChainEpoch) FullNodeOpts {
}
}
var FullNodeWithSDRAt = func(calico, persian abi.ChainEpoch) FullNodeOpts {
return FullNodeOpts{
Opts: func(nodes []TestNode) node.Option {
return node.Override(new(stmgr.UpgradeSchedule), stmgr.UpgradeSchedule{{
Network: network.Version6,
Height: 1,
Migration: stmgr.UpgradeActorsV2,
}, {
Network: network.Version7,
Height: calico,
Migration: stmgr.UpgradeCalico,
}, {
Network: network.Version8,
Height: persian,
}})
},
}
}
var MineNext = miner.MineReq{
InjectNulls: 0,
Done: func(bool, abi.ChainEpoch, error) {},
}
func (ts *testSuite) testVersion(t *testing.T) {
build.RunningNodeType = build.NodeFull
+100 -14
View File
@@ -3,19 +3,22 @@ package test
import (
"context"
"fmt"
"sort"
"sync/atomic"
"os"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
"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/network"
"github.com/filecoin-project/lotus/extern/sector-storage/mock"
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
"github.com/filecoin-project/specs-storage/storage"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
@@ -24,11 +27,88 @@ import (
"github.com/filecoin-project/lotus/node/impl"
)
func init() {
err := os.Setenv("BELLMAN_NO_GPU", "1")
func TestSDRUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
n, sn := b(t, []FullNodeOpts{FullNodeWithSDRAt(500, 1000)}, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
addrinfo, err := client.NetAddrsListen(ctx)
if err != nil {
panic(fmt.Sprintf("failed to set BELLMAN_NO_GPU env variable: %s", err))
t.Fatal(err)
}
if err := miner.NetConnect(ctx, addrinfo); err != nil {
t.Fatal(err)
}
build.Clock.Sleep(time.Second)
pledge := make(chan struct{})
mine := int64(1)
done := make(chan struct{})
go func() {
defer close(done)
round := 0
for atomic.LoadInt64(&mine) != 0 {
build.Clock.Sleep(blocktime)
if err := sn[0].MineOne(ctx, bminer.MineReq{Done: func(bool, abi.ChainEpoch, error) {
}}); err != nil {
t.Error(err)
}
// 3 sealing rounds: before, during after.
if round >= 3 {
continue
}
head, err := client.ChainHead(ctx)
assert.NoError(t, err)
// rounds happen every 100 blocks, with a 50 block offset.
if head.Height() >= abi.ChainEpoch(round*500+50) {
round++
pledge <- struct{}{}
ver, err := client.StateNetworkVersion(ctx, head.Key())
assert.NoError(t, err)
switch round {
case 1:
assert.Equal(t, network.Version6, ver)
case 2:
assert.Equal(t, network.Version7, ver)
case 3:
assert.Equal(t, network.Version8, ver)
}
}
}
}()
// before.
pledgeSectors(t, ctx, miner, 9, 0, pledge)
s, err := miner.SectorsList(ctx)
require.NoError(t, err)
sort.Slice(s, func(i, j int) bool {
return s[i] < s[j]
})
for i, id := range s {
info, err := miner.SectorsStatus(ctx, id, true)
require.NoError(t, err)
expectProof := abi.RegisteredSealProof_StackedDrg2KiBV1
if i >= 3 {
// after
expectProof = abi.RegisteredSealProof_StackedDrg2KiBV1_1
}
assert.Equal(t, expectProof, info.SealProof, "sector %d, id %d", i, id)
}
atomic.StoreInt64(&mine, 0)
<-done
}
func TestPledgeSector(t *testing.T, b APIBuilder, blocktime time.Duration, nSectors int) {
@@ -71,11 +151,13 @@ func TestPledgeSector(t *testing.T, b APIBuilder, blocktime time.Duration, nSect
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
log.Errorf("WAIT")
}
log.Errorf("PLEDGING %d", i)
err := miner.PledgeSector(ctx)
require.NoError(t, err)
}
for {
@@ -134,7 +216,7 @@ func testWindowPostUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration,
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
n, sn := b(t, []FullNodeOpts{FullNodeWithUpgradeAt(upgradeHeight)}, OneMiner)
n, sn := b(t, []FullNodeOpts{FullNodeWithActorsV2At(upgradeHeight)}, OneMiner)
client := n[0].FullNode.(*impl.FullNodeAPI)
miner := sn[0]
@@ -217,15 +299,17 @@ func testWindowPostUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration,
// Drop the partition
err = secs.ForEach(func(sid uint64) error {
return miner.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).MarkCorrupted(abi.SectorID{
Miner: abi.ActorID(mid),
Number: abi.SectorNumber(sid),
return miner.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).MarkCorrupted(storage.SectorRef{
ID: abi.SectorID{
Miner: abi.ActorID(mid),
Number: abi.SectorNumber(sid),
},
}, true)
})
require.NoError(t, err)
}
var s abi.SectorID
var s storage.SectorRef
// Drop 1 sectors from deadline 3 partition 0
{
@@ -246,9 +330,11 @@ func testWindowPostUpgrade(t *testing.T, b APIBuilder, blocktime time.Duration,
require.NoError(t, err)
fmt.Println("the sectors", all)
s = abi.SectorID{
Miner: abi.ActorID(mid),
Number: abi.SectorNumber(sn),
s = storage.SectorRef{
ID: abi.SectorID{
Miner: abi.ActorID(mid),
Number: abi.SectorNumber(sn),
},
}
err = miner.StorageMiner.(*impl.StorageMinerAPI).IStorageMgr.(*mock.SectorMgr).MarkFailed(s, true)
+6 -14
View File
@@ -6,7 +6,6 @@ import (
datatransfer "github.com/filecoin-project/go-data-transfer"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/build"
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p-core/peer"
@@ -51,19 +50,6 @@ 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
@@ -107,3 +93,9 @@ func NewDataTransferChannel(hostID peer.ID, channelState datatransfer.ChannelSta
}
return channel
}
type NetBlockList struct {
Peers []peer.ID
IPAddrs []string
IPSubnets []string
}
+7 -1
View File
@@ -7,7 +7,6 @@ import (
"os"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/actors/policy"
)
@@ -22,6 +21,11 @@ const UpgradeTapeHeight = -4
var UpgradeActorsV2Height = abi.ChainEpoch(10)
var UpgradeLiftoffHeight = abi.ChainEpoch(-5)
const UpgradeKumquatHeight = 15
const UpgradeCalicoHeight = 20
const UpgradePersianHeight = 25
const UpgradeClausHeight = 30
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
0: DrandMainnet,
}
@@ -51,3 +55,5 @@ const SlashablePowerDelay = 20
// Epochs
const InteractivePoRepConfidence = 6
const BootstrapPeerThreshold = 1
+13 -7
View File
@@ -11,8 +11,7 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/actors/policy"
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
)
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
@@ -37,12 +36,16 @@ const UpgradeTapeHeight = 140760
// We still have upgrades and state changes to do, but can happen after signaling timing here.
const UpgradeLiftoffHeight = 148888
const UpgradeKumquatHeight = 170000
const UpgradeCalicoHeight = 265200
const UpgradePersianHeight = UpgradeCalicoHeight + (builtin2.EpochsInHour * 60)
// 2020-12-22T02:00:00Z
const UpgradeClausHeight = 343200
func init() {
policy.SetConsensusMinerMinPower(abi.NewStoragePower(10 << 40))
policy.SetSupportedProofTypes(
abi.RegisteredSealProof_StackedDrg32GiBV1,
abi.RegisteredSealProof_StackedDrg64GiBV1,
)
if os.Getenv("LOTUS_USE_TEST_ADDRESSES") != "1" {
SetAddressNetwork(address.Mainnet)
@@ -55,6 +58,9 @@ func init() {
Devnet = false
}
const BlockDelaySecs = uint64(builtin0.EpochDurationSeconds)
const BlockDelaySecs = uint64(builtin2.EpochDurationSeconds)
const PropagationDelaySecs = uint64(6)
// BootstrapPeerThreshold is the minimum number peers we need to track for a sync worker to start
const BootstrapPeerThreshold = 4
+9 -31
View File
@@ -1,36 +1,13 @@
package build
import (
"sort"
"github.com/filecoin-project/go-address"
"github.com/libp2p/go-libp2p-core/protocol"
"github.com/filecoin-project/go-state-types/abi"
miner0 "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(miner0.SupportedProofTypes))
for spt := range miner0.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) }
@@ -39,14 +16,15 @@ 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 && UpgradeActorsV2Height <= 0 {
return true
}
return false
}
func SetAddressNetwork(n address.Network) {
address.CurrentNetwork = n
}
func MustParseAddress(addr string) address.Address {
ret, err := address.NewFromString(addr)
if err != nil {
panic(err)
}
return ret
}
+10 -7
View File
@@ -7,12 +7,12 @@ import (
"os"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/chain/actors/policy"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/builtin"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
"github.com/filecoin-project/lotus/chain/actors/policy"
)
// /////
@@ -25,14 +25,14 @@ const UnixfsLinksPerLevel = 1024
// Consensus / Network
const AllowableClockDriftSecs = uint64(1)
const NewestNetworkVersion = network.Version5
const NewestNetworkVersion = network.Version8
const ActorUpgradeNetworkVersion = network.Version4
// Epochs
const ForkLengthThreshold = Finality
// Blocks (e)
var BlocksPerEpoch = uint64(builtin.ExpectedLeadersPerEpoch)
var BlocksPerEpoch = uint64(builtin2.ExpectedLeadersPerEpoch)
// Epochs
const Finality = policy.ChainFinality
@@ -61,6 +61,9 @@ const TicketRandomnessLookback = abi.ChainEpoch(1)
const AddressMainnetEnvVar = "_mainnet_"
// the 'f' prefix doesn't matter
var ZeroAddress = MustParseAddress("f3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a")
// /////
// Devnet settings
@@ -116,4 +119,4 @@ const PackingEfficiencyDenom = 5
// Actor consts
// TODO: Pull from actors when its made not private
var MinDealDuration = abi.ChainEpoch(180 * builtin.EpochsInDay)
var MinDealDuration = abi.ChainEpoch(180 * builtin2.EpochsInDay)
+14 -6
View File
@@ -12,7 +12,8 @@ import (
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/specs-actors/actors/builtin"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
"github.com/filecoin-project/lotus/chain/actors/policy"
)
@@ -21,14 +22,14 @@ var (
UnixfsChunkSize = uint64(1 << 20)
UnixfsLinksPerLevel = 1024
BlocksPerEpoch = uint64(builtin.ExpectedLeadersPerEpoch)
BlocksPerEpoch = uint64(builtin2.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)
BlockDelaySecs = uint64(builtin2.EpochDurationSeconds)
PropagationDelaySecs = uint64(6)
AllowableClockDriftSecs = uint64(1)
@@ -72,7 +73,7 @@ var (
// Actor consts
// TODO: Pull from actors when its made not private
MinDealDuration = abi.ChainEpoch(180 * builtin.EpochsInDay)
MinDealDuration = abi.ChainEpoch(180 * builtin2.EpochsInDay)
PackingEfficiencyNum int64 = 4
PackingEfficiencyDenom int64 = 5
@@ -86,13 +87,20 @@ var (
UpgradeTapeHeight abi.ChainEpoch = -4
UpgradeActorsV2Height abi.ChainEpoch = 10
UpgradeLiftoffHeight abi.ChainEpoch = -5
UpgradeKumquatHeight abi.ChainEpoch = -6
UpgradeCalicoHeight abi.ChainEpoch = -7
UpgradePersianHeight abi.ChainEpoch = -8
UpgradeClausHeight abi.ChainEpoch = -9
DrandSchedule = map[abi.ChainEpoch]DrandEnum{
0: DrandMainnet,
}
NewestNetworkVersion = network.Version5
NewestNetworkVersion = network.Version8
ActorUpgradeNetworkVersion = network.Version4
Devnet = true
Devnet = true
ZeroAddress = MustParseAddress("f3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a")
)
const BootstrapPeerThreshold = 1
+4 -4
View File
@@ -29,7 +29,7 @@ func buildType() string {
}
// BuildVersion is the local build version, set by build system
const BuildVersion = "1.0.0"
const BuildVersion = "1.3.0"
func UserVersion() string {
return BuildVersion + buildType() + CurrentCommit
@@ -83,9 +83,9 @@ func VersionForType(nodeType NodeType) (Version, error) {
// semver versions of the rpc api exposed
var (
FullAPIVersion = newVer(0, 17, 0)
MinerAPIVersion = newVer(0, 15, 0)
WorkerAPIVersion = newVer(0, 15, 0)
FullAPIVersion = newVer(1, 0, 0)
MinerAPIVersion = newVer(1, 0, 0)
WorkerAPIVersion = newVer(1, 0, 0)
)
//nolint:varcheck,deadcode
+37 -36
View File
@@ -12,8 +12,9 @@ import (
typegen "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-actors/actors/runtime"
adt0 "github.com/filecoin-project/specs-actors/actors/util/adt"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt"
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
@@ -22,24 +23,24 @@ func TestDiffAdtArray(t *testing.T) {
ctxstoreA := newContextStore()
ctxstoreB := newContextStore()
arrA := adt0.MakeEmptyArray(ctxstoreA)
arrB := adt0.MakeEmptyArray(ctxstoreB)
arrA := adt2.MakeEmptyArray(ctxstoreA)
arrB := adt2.MakeEmptyArray(ctxstoreB)
require.NoError(t, arrA.Set(0, runtime.CBORBytes([]byte{0}))) // delete
require.NoError(t, arrA.Set(0, builtin2.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(1, builtin2.CBORBytes([]byte{0}))) // modify
require.NoError(t, arrB.Set(1, builtin2.CBORBytes([]byte{1})))
require.NoError(t, arrA.Set(2, runtime.CBORBytes([]byte{1}))) // delete
require.NoError(t, arrA.Set(2, builtin2.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(3, builtin2.CBORBytes([]byte{0}))) // noop
require.NoError(t, arrB.Set(3, builtin2.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, arrA.Set(4, builtin2.CBORBytes([]byte{0}))) // modify
require.NoError(t, arrB.Set(4, builtin2.CBORBytes([]byte{6})))
require.NoError(t, arrB.Set(5, runtime.CBORBytes{8})) // add
require.NoError(t, arrB.Set(6, runtime.CBORBytes{9})) // add
require.NoError(t, arrB.Set(5, builtin2.CBORBytes{8})) // add
require.NoError(t, arrB.Set(6, builtin2.CBORBytes{9})) // add
changes := new(TestDiffArray)
@@ -76,24 +77,24 @@ func TestDiffAdtMap(t *testing.T) {
ctxstoreA := newContextStore()
ctxstoreB := newContextStore()
mapA := adt0.MakeEmptyMap(ctxstoreA)
mapB := adt0.MakeEmptyMap(ctxstoreB)
mapA := adt2.MakeEmptyMap(ctxstoreA)
mapB := adt2.MakeEmptyMap(ctxstoreB)
require.NoError(t, mapA.Put(abi.UIntKey(0), runtime.CBORBytes([]byte{0}))) // delete
require.NoError(t, mapA.Put(abi.UIntKey(0), builtin2.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(1), builtin2.CBORBytes([]byte{0}))) // modify
require.NoError(t, mapB.Put(abi.UIntKey(1), builtin2.CBORBytes([]byte{1})))
require.NoError(t, mapA.Put(abi.UIntKey(2), runtime.CBORBytes([]byte{1}))) // delete
require.NoError(t, mapA.Put(abi.UIntKey(2), builtin2.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(3), builtin2.CBORBytes([]byte{0}))) // noop
require.NoError(t, mapB.Put(abi.UIntKey(3), builtin2.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, mapA.Put(abi.UIntKey(4), builtin2.CBORBytes([]byte{0}))) // modify
require.NoError(t, mapB.Put(abi.UIntKey(4), builtin2.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
require.NoError(t, mapB.Put(abi.UIntKey(5), builtin2.CBORBytes{8})) // add
require.NoError(t, mapB.Put(abi.UIntKey(6), builtin2.CBORBytes{9})) // add
changes := new(TestDiffMap)
@@ -144,7 +145,7 @@ func (t *TestDiffMap) AsKey(key string) (abi.Keyer, error) {
}
func (t *TestDiffMap) Add(key string, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
v := new(builtin2.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
@@ -161,13 +162,13 @@ func (t *TestDiffMap) Add(key string, val *typegen.Deferred) error {
}
func (t *TestDiffMap) Modify(key string, from, to *typegen.Deferred) error {
vFrom := new(runtime.CBORBytes)
vFrom := new(builtin2.CBORBytes)
err := vFrom.UnmarshalCBOR(bytes.NewReader(from.Raw))
if err != nil {
return err
}
vTo := new(runtime.CBORBytes)
vTo := new(builtin2.CBORBytes)
err = vTo.UnmarshalCBOR(bytes.NewReader(to.Raw))
if err != nil {
return err
@@ -194,7 +195,7 @@ func (t *TestDiffMap) Modify(key string, from, to *typegen.Deferred) error {
}
func (t *TestDiffMap) Remove(key string, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
v := new(builtin2.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
@@ -212,7 +213,7 @@ func (t *TestDiffMap) Remove(key string, val *typegen.Deferred) error {
type adtMapDiffResult struct {
key uint64
val runtime.CBORBytes
val builtin2.CBORBytes
}
type TestAdtMapDiffModified struct {
@@ -222,7 +223,7 @@ type TestAdtMapDiffModified struct {
type adtArrayDiffResult struct {
key uint64
val runtime.CBORBytes
val builtin2.CBORBytes
}
type TestDiffArray struct {
@@ -239,7 +240,7 @@ type TestAdtArrayDiffModified struct {
}
func (t *TestDiffArray) Add(key uint64, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
v := new(builtin2.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
@@ -252,13 +253,13 @@ func (t *TestDiffArray) Add(key uint64, val *typegen.Deferred) error {
}
func (t *TestDiffArray) Modify(key uint64, from, to *typegen.Deferred) error {
vFrom := new(runtime.CBORBytes)
vFrom := new(builtin2.CBORBytes)
err := vFrom.UnmarshalCBOR(bytes.NewReader(from.Raw))
if err != nil {
return err
}
vTo := new(runtime.CBORBytes)
vTo := new(builtin2.CBORBytes)
err = vTo.UnmarshalCBOR(bytes.NewReader(to.Raw))
if err != nil {
return err
@@ -280,7 +281,7 @@ func (t *TestDiffArray) Modify(key uint64, from, to *typegen.Deferred) error {
}
func (t *TestDiffArray) Remove(key uint64, val *typegen.Deferred) error {
v := new(runtime.CBORBytes)
v := new(builtin2.CBORBytes)
err := v.UnmarshalCBOR(bytes.NewReader(val.Raw))
if err != nil {
return err
+2
View File
@@ -24,6 +24,8 @@ func init() {
})
}
var Methods = builtin2.MethodsAccount
func Load(store adt.Store, act *types.Actor) (State, error) {
switch act.Code {
case builtin0.AccountActorCodeID:
+15
View File
@@ -27,6 +27,21 @@ var SaftAddress = makeAddress("t0122")
var ReserveAddress = makeAddress("t090")
var RootVerifierAddress = makeAddress("t080")
var (
ExpectedLeadersPerEpoch = builtin0.ExpectedLeadersPerEpoch
)
const (
EpochDurationSeconds = builtin0.EpochDurationSeconds
EpochsInDay = builtin0.EpochsInDay
SecondsInDay = builtin0.SecondsInDay
)
const (
MethodSend = builtin2.MethodSend
MethodConstructor = builtin2.MethodConstructor
)
// TODO: Why does actors have 2 different versions of this?
type SectorInfo = proof0.SectorInfo
type PoStProof = proof0.PoStProof
+10
View File
@@ -0,0 +1,10 @@
package cron
import (
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
)
var (
Address = builtin2.CronActorAddr
Methods = builtin2.MethodsCron
)
+152
View File
@@ -0,0 +1,152 @@
package init
import (
"bytes"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
typegen "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/lotus/chain/actors/adt"
)
func DiffAddressMap(pre, cur State) (*AddressMapChanges, error) {
prem, err := pre.addressMap()
if err != nil {
return nil, err
}
curm, err := cur.addressMap()
if err != nil {
return nil, err
}
preRoot, err := prem.Root()
if err != nil {
return nil, err
}
curRoot, err := curm.Root()
if err != nil {
return nil, err
}
results := new(AddressMapChanges)
// no change.
if curRoot.Equals(preRoot) {
return results, nil
}
err = adt.DiffAdtMap(prem, curm, &addressMapDiffer{results, pre, cur})
if err != nil {
return nil, err
}
return results, nil
}
type addressMapDiffer struct {
Results *AddressMapChanges
pre, adter State
}
type AddressMapChanges struct {
Added []AddressPair
Modified []AddressChange
Removed []AddressPair
}
func (i *addressMapDiffer) 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 *addressMapDiffer) 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.Results.Added = append(i.Results.Added, AddressPair{
ID: idAddr,
PK: pkAddr,
})
return nil
}
func (i *addressMapDiffer) 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.Results.Modified = append(i.Results.Modified, AddressChange{
From: AddressPair{
ID: fromIDAddr,
PK: pkAddr,
},
To: AddressPair{
ID: toIDAddr,
PK: pkAddr,
},
})
return nil
}
func (i *addressMapDiffer) 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.Results.Removed = append(i.Results.Removed, AddressPair{
ID: idAddr,
PK: pkAddr,
})
return nil
}
type AddressChange struct {
From AddressPair
To AddressPair
}
type AddressPair struct {
ID address.Address
PK address.Address
}
+6 -1
View File
@@ -26,7 +26,10 @@ func init() {
})
}
var Address = builtin0.InitActorAddr
var (
Address = builtin2.InitActorAddr
Methods = builtin2.MethodsInit
)
func Load(store adt.Store, act *types.Actor) (State, error) {
switch act.Code {
@@ -54,4 +57,6 @@ type State interface {
// Sets the network's name. This should only be used on upgrade/fork.
SetNetworkName(name string) error
addressMap() (adt.Map, error)
}
+4
View File
@@ -79,3 +79,7 @@ func (s *state0) Remove(addrs ...address.Address) (err error) {
s.State.AddressMap = amr
return nil
}
func (s *state0) addressMap() (adt.Map, error) {
return adt0.AsMap(s.store, s.AddressMap)
}
+4
View File
@@ -79,3 +79,7 @@ func (s *state2) Remove(addrs ...address.Address) (err error) {
s.State.AddressMap = amr
return nil
}
func (s *state2) addressMap() (adt.Map, error) {
return adt2.AsMap(s.store, s.AddressMap)
}
+5 -1
View File
@@ -27,7 +27,10 @@ func init() {
})
}
var Address = builtin0.StorageMarketActorAddr
var (
Address = builtin2.StorageMarketActorAddr
Methods = builtin2.MethodsMarket
)
func Load(store adt.Store, act *types.Actor) (st State, err error) {
switch act.Code {
@@ -78,6 +81,7 @@ type DealProposals interface {
type PublishStorageDealsParams = market0.PublishStorageDealsParams
type PublishStorageDealsReturn = market0.PublishStorageDealsReturn
type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams
type WithdrawBalanceParams = market0.WithdrawBalanceParams
type ClientDealProposal = market0.ClientDealProposal
+3
View File
@@ -31,6 +31,8 @@ func init() {
})
}
var Methods = builtin2.MethodsMiner
// Unchanged between v0 and v2 actors
var WPoStProvingPeriod = miner0.WPoStProvingPeriod
var WPoStPeriodDeadlines = miner0.WPoStPeriodDeadlines
@@ -75,6 +77,7 @@ type State interface {
DeadlinesChanged(State) (bool, error)
Info() (MinerInfo, error)
MinerInfoChanged(State) (bool, error)
DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error)
+41
View File
@@ -4,6 +4,8 @@ import (
"golang.org/x/xerrors"
"github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/network"
)
func AllPartSectors(mas State, sget func(Partition) (bitfield.BitField, error)) (bitfield.BitField, error) {
@@ -26,3 +28,42 @@ func AllPartSectors(mas State, sget func(Partition) (bitfield.BitField, error))
return bitfield.MultiMerge(parts...)
}
// SealProofTypeFromSectorSize returns preferred seal proof type for creating
// new miner actors and new sectors
func SealProofTypeFromSectorSize(ssize abi.SectorSize, nv network.Version) (abi.RegisteredSealProof, error) {
switch {
case nv < network.Version7:
switch ssize {
case 2 << 10:
return abi.RegisteredSealProof_StackedDrg2KiBV1, nil
case 8 << 20:
return abi.RegisteredSealProof_StackedDrg8MiBV1, nil
case 512 << 20:
return abi.RegisteredSealProof_StackedDrg512MiBV1, nil
case 32 << 30:
return abi.RegisteredSealProof_StackedDrg32GiBV1, nil
case 64 << 30:
return abi.RegisteredSealProof_StackedDrg64GiBV1, nil
default:
return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize)
}
case nv >= network.Version7:
switch ssize {
case 2 << 10:
return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil
case 8 << 20:
return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil
case 512 << 20:
return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil
case 32 << 30:
return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil
case 64 << 30:
return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil
default:
return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize)
}
}
return 0, xerrors.Errorf("unsupported network version")
}
+9
View File
@@ -277,6 +277,15 @@ func (s *state0) DeadlinesChanged(other State) (bool, error) {
return !s.State.Deadlines.Equals(other0.Deadlines), nil
}
func (s *state0) MinerInfoChanged(other State) (bool, error) {
other0, ok := other.(*state0)
if !ok {
// treat an upgrade as a change, always
return true, nil
}
return !s.State.Info.Equals(other0.State.Info), nil
}
func (s *state0) Info() (MinerInfo, error) {
info, err := s.State.GetInfo(s.store)
if err != nil {
+9
View File
@@ -276,6 +276,15 @@ func (s *state2) DeadlinesChanged(other State) (bool, error) {
return !s.State.Deadlines.Equals(other2.Deadlines), nil
}
func (s *state2) MinerInfoChanged(other State) (bool, error) {
other0, ok := other.(*state2)
if !ok {
// treat an upgrade as a change, always
return true, nil
}
return !s.State.Info.Equals(other0.State.Info), nil
}
func (s *state2) Info() (MinerInfo, error) {
info, err := s.State.GetInfo(s.store)
if err != nil {
+134
View File
@@ -0,0 +1,134 @@
package multisig
import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
cbg "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/lotus/chain/actors/adt"
)
type PendingTransactionChanges struct {
Added []TransactionChange
Modified []TransactionModification
Removed []TransactionChange
}
type TransactionChange struct {
TxID int64
Tx Transaction
}
type TransactionModification struct {
TxID int64
From Transaction
To Transaction
}
func DiffPendingTransactions(pre, cur State) (*PendingTransactionChanges, error) {
results := new(PendingTransactionChanges)
if changed, err := pre.PendingTxnChanged(cur); err != nil {
return nil, err
} else if !changed { // if nothing has changed then return an empty result and bail.
return results, nil
}
pret, err := pre.transactions()
if err != nil {
return nil, err
}
curt, err := cur.transactions()
if err != nil {
return nil, err
}
if err := adt.DiffAdtMap(pret, curt, &transactionDiffer{results, pre, cur}); err != nil {
return nil, err
}
return results, nil
}
type transactionDiffer struct {
Results *PendingTransactionChanges
pre, after State
}
func (t *transactionDiffer) AsKey(key string) (abi.Keyer, error) {
txID, err := abi.ParseIntKey(key)
if err != nil {
return nil, err
}
return abi.IntKey(txID), nil
}
func (t *transactionDiffer) Add(key string, val *cbg.Deferred) error {
txID, err := abi.ParseIntKey(key)
if err != nil {
return err
}
tx, err := t.after.decodeTransaction(val)
if err != nil {
return err
}
t.Results.Added = append(t.Results.Added, TransactionChange{
TxID: txID,
Tx: tx,
})
return nil
}
func (t *transactionDiffer) Modify(key string, from, to *cbg.Deferred) error {
txID, err := abi.ParseIntKey(key)
if err != nil {
return err
}
txFrom, err := t.pre.decodeTransaction(from)
if err != nil {
return err
}
txTo, err := t.after.decodeTransaction(to)
if err != nil {
return err
}
if approvalsChanged(txFrom.Approved, txTo.Approved) {
t.Results.Modified = append(t.Results.Modified, TransactionModification{
TxID: txID,
From: txFrom,
To: txTo,
})
}
return nil
}
func approvalsChanged(from, to []address.Address) bool {
if len(from) != len(to) {
return true
}
for idx := range from {
if from[idx] != to[idx] {
return true
}
}
return false
}
func (t *transactionDiffer) Remove(key string, val *cbg.Deferred) error {
txID, err := abi.ParseIntKey(key)
if err != nil {
return err
}
tx, err := t.pre.decodeTransaction(val)
if err != nil {
return err
}
t.Results.Removed = append(t.Results.Removed, TransactionChange{
TxID: txID,
Tx: tx,
})
return nil
}
+3
View File
@@ -9,12 +9,15 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig"
"github.com/filecoin-project/lotus/chain/actors"
"github.com/filecoin-project/lotus/chain/types"
)
var Methods = builtin2.MethodsMultisig
func Message(version actors.Version, from address.Address) MessageBuilder {
switch version {
case actors.Version0:
+5
View File
@@ -1,6 +1,7 @@
package multisig
import (
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
@@ -47,6 +48,10 @@ type State interface {
Signers() ([]address.Address, error)
ForEachPendingTxn(func(id int64, txn Transaction) error) error
PendingTxnChanged(State) (bool, error)
transactions() (adt.Map, error)
decodeTransaction(val *cbg.Deferred) (Transaction, error)
}
type Transaction = msig0.Transaction
+24
View File
@@ -1,17 +1,20 @@
package multisig
import (
"bytes"
"encoding/binary"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/actors/adt"
msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
adt0 "github.com/filecoin-project/specs-actors/actors/util/adt"
multisig0 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig"
)
var _ State = (*state0)(nil)
@@ -68,3 +71,24 @@ func (s *state0) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err
return cb(txid, (Transaction)(out))
})
}
func (s *state0) PendingTxnChanged(other State) (bool, error) {
other0, ok := other.(*state0)
if !ok {
// treat an upgrade as a change, always
return true, nil
}
return !s.State.PendingTxns.Equals(other0.PendingTxns), nil
}
func (s *state0) transactions() (adt.Map, error) {
return adt0.AsMap(s.store, s.PendingTxns)
}
func (s *state0) decodeTransaction(val *cbg.Deferred) (Transaction, error) {
var tx multisig0.Transaction
if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil {
return Transaction{}, err
}
return tx, nil
}
+23
View File
@@ -1,11 +1,13 @@
package multisig
import (
"bytes"
"encoding/binary"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/actors/adt"
@@ -68,3 +70,24 @@ func (s *state2) ForEachPendingTxn(cb func(id int64, txn Transaction) error) err
return cb(txid, (Transaction)(out))
})
}
func (s *state2) PendingTxnChanged(other State) (bool, error) {
other2, ok := other.(*state2)
if !ok {
// treat an upgrade as a change, always
return true, nil
}
return !s.State.PendingTxns.Equals(other2.PendingTxns), nil
}
func (s *state2) transactions() (adt.Map, error) {
return adt2.AsMap(s.store, s.PendingTxns)
}
func (s *state2) decodeTransaction(val *cbg.Deferred) (Transaction, error) {
var tx msig2.Transaction
if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil {
return Transaction{}, err
}
return tx, nil
}
+4
View File
@@ -7,8 +7,12 @@ import (
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/chain/actors"
"github.com/filecoin-project/lotus/chain/types"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
)
var Methods = builtin2.MethodsPaych
func Message(version actors.Version, from address.Address) MessageBuilder {
switch version {
case actors.Version0:
+117
View File
@@ -0,0 +1,117 @@
package power
import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
cbg "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/lotus/chain/actors/adt"
)
type ClaimChanges struct {
Added []ClaimInfo
Modified []ClaimModification
Removed []ClaimInfo
}
type ClaimModification struct {
Miner address.Address
From Claim
To Claim
}
type ClaimInfo struct {
Miner address.Address
Claim Claim
}
func DiffClaims(pre, cur State) (*ClaimChanges, error) {
results := new(ClaimChanges)
prec, err := pre.claims()
if err != nil {
return nil, err
}
curc, err := cur.claims()
if err != nil {
return nil, err
}
if err := adt.DiffAdtMap(prec, curc, &claimDiffer{results, pre, cur}); err != nil {
return nil, err
}
return results, nil
}
type claimDiffer struct {
Results *ClaimChanges
pre, after State
}
func (c *claimDiffer) AsKey(key string) (abi.Keyer, error) {
addr, err := address.NewFromBytes([]byte(key))
if err != nil {
return nil, err
}
return abi.AddrKey(addr), nil
}
func (c *claimDiffer) Add(key string, val *cbg.Deferred) error {
ci, err := c.after.decodeClaim(val)
if err != nil {
return err
}
addr, err := address.NewFromBytes([]byte(key))
if err != nil {
return err
}
c.Results.Added = append(c.Results.Added, ClaimInfo{
Miner: addr,
Claim: ci,
})
return nil
}
func (c *claimDiffer) Modify(key string, from, to *cbg.Deferred) error {
ciFrom, err := c.pre.decodeClaim(from)
if err != nil {
return err
}
ciTo, err := c.after.decodeClaim(to)
if err != nil {
return err
}
addr, err := address.NewFromBytes([]byte(key))
if err != nil {
return err
}
if ciFrom != ciTo {
c.Results.Modified = append(c.Results.Modified, ClaimModification{
Miner: addr,
From: ciFrom,
To: ciTo,
})
}
return nil
}
func (c *claimDiffer) Remove(key string, val *cbg.Deferred) error {
ci, err := c.after.decodeClaim(val)
if err != nil {
return err
}
addr, err := address.NewFromBytes([]byte(key))
if err != nil {
return err
}
c.Results.Removed = append(c.Results.Removed, ClaimInfo{
Miner: addr,
Claim: ci,
})
return nil
}
+18 -1
View File
@@ -2,7 +2,9 @@ package power
import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/big"
"github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-state-types/abi"
@@ -25,7 +27,10 @@ func init() {
})
}
var Address = builtin0.StoragePowerActorAddr
var (
Address = builtin2.StoragePowerActorAddr
Methods = builtin2.MethodsPower
)
func Load(store adt.Store, act *types.Actor) (st State, err error) {
switch act.Code {
@@ -52,6 +57,11 @@ type State interface {
MinerNominalPowerMeetsConsensusMinimum(address.Address) (bool, error)
ListAllMiners() ([]address.Address, error)
ForEachClaim(func(miner address.Address, claim Claim) error) error
ClaimsChanged(State) (bool, error)
// Diff helpers. Used by Diff* functions internally.
claims() (adt.Map, error)
decodeClaim(*cbg.Deferred) (Claim, error)
}
type Claim struct {
@@ -61,3 +71,10 @@ type Claim struct {
// Sum of quality adjusted power for a miner's sectors.
QualityAdjPower abi.StoragePower
}
func AddClaims(a Claim, b Claim) Claim {
return Claim{
RawBytePower: big.Add(a.RawBytePower, b.RawBytePower),
QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower),
}
}
+28
View File
@@ -1,9 +1,12 @@
package power
import (
"bytes"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/lotus/chain/actors/adt"
"github.com/filecoin-project/lotus/chain/actors/builtin"
@@ -115,3 +118,28 @@ func (s *state0) ForEachClaim(cb func(miner address.Address, claim Claim) error)
})
})
}
func (s *state0) ClaimsChanged(other State) (bool, error) {
other0, ok := other.(*state0)
if !ok {
// treat an upgrade as a change, always
return true, nil
}
return !s.State.Claims.Equals(other0.State.Claims), nil
}
func (s *state0) claims() (adt.Map, error) {
return adt0.AsMap(s.store, s.Claims)
}
func (s *state0) decodeClaim(val *cbg.Deferred) (Claim, error) {
var ci power0.Claim
if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil {
return Claim{}, err
}
return fromV0Claim(ci), nil
}
func fromV0Claim(v0 power0.Claim) Claim {
return (Claim)(v0)
}
+31
View File
@@ -1,9 +1,12 @@
package power
import (
"bytes"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen"
"github.com/filecoin-project/lotus/chain/actors/adt"
"github.com/filecoin-project/lotus/chain/actors/builtin"
@@ -115,3 +118,31 @@ func (s *state2) ForEachClaim(cb func(miner address.Address, claim Claim) error)
})
})
}
func (s *state2) ClaimsChanged(other State) (bool, error) {
other2, ok := other.(*state2)
if !ok {
// treat an upgrade as a change, always
return true, nil
}
return !s.State.Claims.Equals(other2.State.Claims), nil
}
func (s *state2) claims() (adt.Map, error) {
return adt2.AsMap(s.store, s.Claims)
}
func (s *state2) decodeClaim(val *cbg.Deferred) (Claim, error) {
var ci power2.Claim
if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil {
return Claim{}, err
}
return fromV2Claim(ci), nil
}
func fromV2Claim(v2 power2.Claim) Claim {
return Claim{
RawBytePower: v2.RawBytePower,
QualityAdjPower: v2.QualityAdjPower,
}
}
+4 -1
View File
@@ -24,7 +24,10 @@ func init() {
})
}
var Address = builtin0.RewardActorAddr
var (
Address = builtin2.RewardActorAddr
Methods = builtin2.MethodsReward
)
func Load(store adt.Store, act *types.Actor) (st State, err error) {
switch act.Code {
+3 -3
View File
@@ -28,7 +28,7 @@ type state2 struct {
store adt.Store
}
func (s *state2) ThisEpochReward() (abi.StoragePower, error) {
func (s *state2) ThisEpochReward() (abi.TokenAmount, error) {
return s.State.ThisEpochReward, nil
}
@@ -55,11 +55,11 @@ func (s *state2) EffectiveNetworkTime() (abi.ChainEpoch, error) {
return s.State.EffectiveNetworkTime, nil
}
func (s *state2) CumsumBaseline() (abi.StoragePower, error) {
func (s *state2) CumsumBaseline() (reward2.Spacetime, error) {
return s.State.CumsumBaseline, nil
}
func (s *state2) CumsumRealized() (abi.StoragePower, error) {
func (s *state2) CumsumRealized() (reward2.Spacetime, error) {
return s.State.CumsumRealized, nil
}
+4 -1
View File
@@ -24,7 +24,10 @@ func init() {
})
}
var Address = builtin0.VerifiedRegistryActorAddr
var (
Address = builtin2.VerifiedRegistryActorAddr
Methods = builtin2.MethodsVerifiedRegistry
)
func Load(store adt.Store, act *types.Actor) (State, error) {
switch act.Code {
+3 -1
View File
@@ -3,6 +3,8 @@ package actors
import (
"bytes"
"github.com/filecoin-project/go-state-types/exitcode"
"github.com/filecoin-project/lotus/chain/actors/aerrors"
cbg "github.com/whyrusleeping/cbor-gen"
)
@@ -11,7 +13,7 @@ func SerializeParams(i cbg.CBORMarshaler) ([]byte, aerrors.ActorError) {
buf := new(bytes.Buffer)
if err := i.MarshalCBOR(buf); err != nil {
// TODO: shouldnt this be a fatal error?
return nil, aerrors.Absorb(err, 1, "failed to encode parameter")
return nil, aerrors.Absorb(err, exitcode.ErrSerialization, "failed to encode parameter")
}
return buf.Bytes(), nil
}
+51 -8
View File
@@ -1,6 +1,8 @@
package policy
import (
"sort"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/lotus/chain/actors"
@@ -11,33 +13,42 @@ import (
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market"
miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner"
paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych"
verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg"
)
const (
ChainFinality = miner0.ChainFinality
SealRandomnessLookback = ChainFinality
PaychSettleDelay = paych2.SettleDelay
)
// SetSupportedProofTypes sets supported proof types, across all actor versions.
// This should only be used for testing.
func SetSupportedProofTypes(types ...abi.RegisteredSealProof) {
newTypes := make(map[abi.RegisteredSealProof]struct{}, len(types))
for _, t := range types {
newTypes[t] = struct{}{}
}
// Set for all miner versions.
miner0.SupportedProofTypes = newTypes
miner2.SupportedProofTypes = newTypes
miner0.SupportedProofTypes = make(map[abi.RegisteredSealProof]struct{}, len(types))
miner2.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types))
miner2.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2)
miner2.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
AddSupportedProofTypes(types...)
}
// AddSupportedProofTypes sets supported proof types, across all actor versions.
// This should only be used for testing.
func AddSupportedProofTypes(types ...abi.RegisteredSealProof) {
for _, t := range types {
if t >= abi.RegisteredSealProof_StackedDrg2KiBV1_1 {
panic("must specify v1 proof types only")
}
// Set for all miner versions.
miner0.SupportedProofTypes[t] = struct{}{}
miner2.SupportedProofTypes[t] = struct{}{}
miner2.PreCommitSealProofTypesV0[t] = struct{}{}
miner2.PreCommitSealProofTypesV7[t] = struct{}{}
miner2.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
miner2.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
}
}
@@ -114,3 +125,35 @@ func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch {
return ChainFinality
}
func GetMaxSectorExpirationExtension() abi.ChainEpoch {
return miner0.MaxSectorExpirationExtension
}
// TODO: we'll probably need to abstract over this better in the future.
func GetMaxPoStPartitions(p abi.RegisteredPoStProof) (int, error) {
sectorsPerPart, err := builtin2.PoStProofWindowPoStPartitionSectors(p)
if err != nil {
return 0, err
}
return int(miner2.AddressedSectorsMax / sectorsPerPart), nil
}
func GetDefaultSectorSize() abi.SectorSize {
// supported sector sizes are the same across versions.
szs := make([]abi.SectorSize, 0, len(miner2.PreCommitSealProofTypesV8))
for spt := range miner2.PreCommitSealProofTypesV8 {
ss, err := spt.SectorSize()
if err != nil {
panic(err)
}
szs = append(szs, ss)
}
sort.Slice(szs, func(i, j int) bool {
return szs[i] < szs[j]
})
return szs[0]
}
+21 -1
View File
@@ -6,9 +6,13 @@ import (
"github.com/stretchr/testify/require"
"github.com/filecoin-project/go-state-types/abi"
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner"
paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych"
verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner"
paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych"
verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg"
)
@@ -40,11 +44,27 @@ func TestSupportedProofTypes(t *testing.T) {
// Tests assumptions about policies being the same between actor versions.
func TestAssumptions(t *testing.T) {
require.EqualValues(t, miner0.SupportedProofTypes, miner2.SupportedProofTypes)
require.EqualValues(t, miner0.SupportedProofTypes, miner2.PreCommitSealProofTypesV0)
require.Equal(t, miner0.PreCommitChallengeDelay, miner2.PreCommitChallengeDelay)
require.Equal(t, miner0.MaxSectorExpirationExtension, miner2.MaxSectorExpirationExtension)
require.Equal(t, miner0.ChainFinality, miner2.ChainFinality)
require.Equal(t, miner0.WPoStChallengeWindow, miner2.WPoStChallengeWindow)
require.Equal(t, miner0.WPoStProvingPeriod, miner2.WPoStProvingPeriod)
require.Equal(t, miner0.WPoStPeriodDeadlines, miner2.WPoStPeriodDeadlines)
require.Equal(t, miner0.AddressedSectorsMax, miner2.AddressedSectorsMax)
require.Equal(t, paych0.SettleDelay, paych2.SettleDelay)
require.True(t, verifreg0.MinVerifiedDealSize.Equals(verifreg2.MinVerifiedDealSize))
}
func TestPartitionSizes(t *testing.T) {
for _, p := range abi.SealProofInfos {
sizeNew, err := builtin2.PoStProofWindowPoStPartitionSectors(p.WindowPoStProof)
require.NoError(t, err)
sizeOld, err := builtin0.PoStProofWindowPoStPartitionSectors(p.WindowPoStProof)
if err != nil {
// new proof type.
continue
}
require.Equal(t, sizeOld, sizeNew)
}
}
+1 -1
View File
@@ -18,7 +18,7 @@ func VersionForNetwork(version network.Version) Version {
switch version {
case network.Version0, network.Version1, network.Version2, network.Version3:
return Version0
case network.Version4, network.Version5:
case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8:
return Version2
default:
panic(fmt.Sprintf("unsupported network version %d", version))
+6 -1
View File
@@ -65,6 +65,11 @@ type DrandBeacon struct {
localCache map[uint64]types.BeaconEntry
}
// DrandHTTPClient interface overrides the user agent used by drand
type DrandHTTPClient interface {
SetUserAgent(string)
}
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")
@@ -84,6 +89,7 @@ func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes
if err != nil {
return nil, xerrors.Errorf("could not create http drand client: %w", err)
}
hc.(DrandHTTPClient).SetUserAgent("drand-client-lotus/" + build.BuildVersion)
clients = append(clients, hc)
}
@@ -92,7 +98,6 @@ func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes
dclient.WithChainInfo(drandChain),
dclient.WithCacheSize(1024),
dclient.WithLogger(dlogger),
dclient.WithAutoWatch(),
}
if ps != nil {
+26 -15
View File
@@ -20,8 +20,10 @@ import (
var log = logging.Logger("events")
// 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
type (
HeightHandler func(ctx context.Context, ts *types.TipSet, curH abi.ChainEpoch) error
RevertHandler func(ctx context.Context, ts *types.TipSet) error
)
type heightHandler struct {
confidence int
@@ -48,7 +50,7 @@ type Events struct {
tsc *tipSetCache
lk sync.Mutex
ready sync.WaitGroup
ready chan struct{}
readyOnce sync.Once
heightEvents
@@ -76,15 +78,16 @@ func NewEvents(ctx context.Context, api eventAPI) *Events {
},
hcEvents: newHCEvents(ctx, api, tsc, uint64(gcConfidence)),
ready: make(chan struct{}),
}
e.ready.Add(1)
go e.listenHeadChanges(ctx)
e.ready.Wait()
// TODO: cleanup/gc goroutine
// Wait for the first tipset to be seen or bail if shutting down
select {
case <-e.ready:
case <-ctx.Done():
}
return e
}
@@ -111,13 +114,21 @@ func (e *Events) listenHeadChangesOnce(ctx context.Context) error {
notifs, err := e.api.ChainNotify(ctx)
if err != nil {
// TODO: retry
// Retry is handled by caller
return xerrors.Errorf("listenHeadChanges ChainNotify call failed: %w", err)
}
cur, ok := <-notifs // TODO: timeout?
if !ok {
return xerrors.Errorf("notification channel closed")
var cur []*api.HeadChange
var ok bool
// Wait for first tipset or bail
select {
case cur, ok = <-notifs:
if !ok {
return xerrors.Errorf("notification channel closed")
}
case <-ctx.Done():
return ctx.Err()
}
if len(cur) != 1 {
@@ -129,13 +140,13 @@ func (e *Events) listenHeadChangesOnce(ctx context.Context) error {
}
if err := e.tsc.add(cur[0].Val); err != nil {
log.Warn("tsc.add: adding current tipset failed: %w", err)
log.Warnf("tsc.add: adding current tipset failed: %v", err)
}
e.readyOnce.Do(func() {
e.lastTs = cur[0].Val
e.ready.Done()
// Signal that we have seen first tipset
close(e.ready)
})
for notif := range notifs {
+13 -22
View File
@@ -459,7 +459,7 @@ type messageEvents struct {
hcAPI headChangeAPI
lk sync.RWMutex
matchers map[triggerID][]MsgMatchFunc
matchers map[triggerID]MsgMatchFunc
}
func newMessageEvents(ctx context.Context, hcAPI headChangeAPI, cs eventAPI) messageEvents {
@@ -467,7 +467,7 @@ func newMessageEvents(ctx context.Context, hcAPI headChangeAPI, cs eventAPI) mes
ctx: ctx,
cs: cs,
hcAPI: hcAPI,
matchers: map[triggerID][]MsgMatchFunc{},
matchers: make(map[triggerID]MsgMatchFunc),
}
}
@@ -482,32 +482,23 @@ func (me *messageEvents) checkNewCalls(ts *types.TipSet) (map[triggerID]eventDat
me.lk.RLock()
defer me.lk.RUnlock()
// For each message in the tipset
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
}
// Run each trigger's matcher against the message
for tid, matchFn := range me.matchers {
matched, err := matchFn(msg)
if err != nil {
log.Errorf("event matcher failed: %s", err)
continue
}
// If there was a match, include the message in the results for the
// trigger
if matched {
res[tid] = msg
if once {
break
}
}
}
})
@@ -555,7 +546,7 @@ func (me *messageEvents) messagesForTs(ts *types.TipSet, consume func(*types.Mes
// `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)
type MsgMatchFunc func(msg *types.Message) (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.
@@ -607,7 +598,7 @@ func (me *messageEvents) Called(check CheckFunc, msgHnd MsgHandler, rev RevertHa
me.lk.Lock()
defer me.lk.Unlock()
me.matchers[id] = append(me.matchers[id], mf)
me.matchers[id] = mf
return nil
}
+2
View File
@@ -153,6 +153,7 @@ func (e *heightEvents) ChainAt(hnd HeightHandler, rev RevertHandler, confidence
best, err := e.tsc.best()
if err != nil {
e.lk.Unlock()
return xerrors.Errorf("error getting best tipset: %w", err)
}
@@ -177,6 +178,7 @@ func (e *heightEvents) ChainAt(hnd HeightHandler, rev RevertHandler, confidence
e.lk.Lock()
best, err = e.tsc.best()
if err != nil {
e.lk.Unlock()
return xerrors.Errorf("error getting best tipset: %w", err)
}
bestH = best.Height()
+3 -3
View File
@@ -572,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) (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
func matchAddrMethod(to address.Address, m abi.MethodNum) func(msg *types.Message) (matched bool, err error) {
return func(msg *types.Message) (matched bool, err error) {
return to == msg.To && m == msg.Method, nil
}
}
+34
View File
@@ -0,0 +1,34 @@
package state
import (
"context"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/chain/types"
)
type FastChainApiAPI interface {
ChainAPI
ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error)
}
type fastAPI struct {
FastChainApiAPI
}
func WrapFastAPI(api FastChainApiAPI) ChainAPI {
return &fastAPI{
api,
}
}
func (a *fastAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) {
ts, err := a.FastChainApiAPI.ChainGetTipSet(ctx, tsk)
if err != nil {
return nil, err
}
return a.FastChainApiAPI.StateGetActor(ctx, actor, ts.Parents())
}
+69
View File
@@ -0,0 +1,69 @@
package test
import (
"context"
"sync"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/lib/blockstore"
"github.com/ipfs/go-cid"
"golang.org/x/xerrors"
)
type MockAPI struct {
bs blockstore.Blockstore
lk sync.Mutex
ts map[types.TipSetKey]*types.Actor
stateGetActorCalled int
}
func NewMockAPI(bs blockstore.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) {
m.lk.Lock()
defer m.lk.Unlock()
m.stateGetActorCalled++
return m.ts[tsk], nil
}
func (m *MockAPI) StateGetActorCallCount() int {
m.lk.Lock()
defer m.lk.Unlock()
return m.stateGetActorCalled
}
func (m *MockAPI) ResetCallCounts() {
m.lk.Lock()
defer m.lk.Unlock()
m.stateGetActorCalled = 0
}
func (m *MockAPI) SetActor(tsk types.TipSetKey, act *types.Actor) {
m.lk.Lock()
defer m.lk.Unlock()
m.ts[tsk] = act
}
+32
View File
@@ -0,0 +1,32 @@
package test
import (
"context"
"testing"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
"github.com/filecoin-project/specs-actors/v2/actors/builtin/market"
"github.com/filecoin-project/specs-actors/v2/actors/util/adt"
"github.com/stretchr/testify/require"
)
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
}
+27
View File
@@ -0,0 +1,27 @@
package test
import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid"
)
var dummyCid cid.Cid
func init() {
dummyCid, _ = cid.Parse("bafkqaaa")
}
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,
}})
}
+2 -166
View File
@@ -1,7 +1,6 @@
package state
import (
"bytes"
"context"
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
@@ -10,7 +9,6 @@ import (
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
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/actors/adt"
@@ -419,179 +417,17 @@ type AddressPair struct {
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) {
addressChanges := &InitActorAddressChanges{
Added: []AddressPair{},
Modified: []AddressChange{},
Removed: []AddressPair{},
}
err = oldState.ForEachActor(func(oldId abi.ActorID, oldAddress address.Address) error {
oldIdAddress, err := address.NewIDAddress(uint64(oldId))
if err != nil {
return err
}
newIdAddress, found, err := newState.ResolveAddress(oldAddress)
if err != nil {
return err
}
if !found {
addressChanges.Removed = append(addressChanges.Removed, AddressPair{
ID: oldIdAddress,
PK: oldAddress,
})
}
if oldIdAddress != newIdAddress {
addressChanges.Modified = append(addressChanges.Modified, AddressChange{
From: AddressPair{
ID: oldIdAddress,
PK: oldAddress,
},
To: AddressPair{
ID: newIdAddress,
PK: oldAddress,
},
})
}
return nil
})
addressChanges, err := init_.DiffAddressMap(oldState, newState)
if err != nil {
return false, nil, err
}
err = newState.ForEachActor(func(newId abi.ActorID, newAddress address.Address) error {
newIdAddress, err := address.NewIDAddress(uint64(newId))
if err != nil {
return err
}
_, found, err := newState.ResolveAddress(newAddress)
if err != nil {
return err
}
if !found {
addressChanges.Added = append(addressChanges.Added, AddressPair{
ID: newIdAddress,
PK: newAddress,
})
}
return nil
})
if err != nil {
return false, nil, err
}
if len(addressChanges.Added)+len(addressChanges.Removed)+len(addressChanges.Modified) == 0 {
if len(addressChanges.Added)+len(addressChanges.Modified)+len(addressChanges.Removed) == 0 {
return false, nil, nil
}
return true, addressChanges, nil
}
}
+78 -131
View File
@@ -4,28 +4,26 @@ import (
"context"
"testing"
test "github.com/filecoin-project/lotus/chain/events/state/mock"
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
"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/stretchr/testify/require"
"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"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market"
miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner"
adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt"
tutils "github.com/filecoin-project/specs-actors/v2/support/testing"
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
market0 "github.com/filecoin-project/specs-actors/actors/builtin/market"
miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner"
"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"
)
@@ -36,60 +34,27 @@ 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))
store := adt2.WrapStore(ctx, cbornode.NewCborStore(bs))
oldDeal1 := &market0.DealState{
oldDeal1 := &market2.DealState{
SectorStartEpoch: 1,
LastUpdatedEpoch: 2,
SlashEpoch: 0,
}
oldDeal2 := &market0.DealState{
oldDeal2 := &market2.DealState{
SectorStartEpoch: 4,
LastUpdatedEpoch: 5,
SlashEpoch: 0,
}
oldDeals := map[abi.DealID]*market0.DealState{
oldDeals := map[abi.DealID]*market2.DealState{
abi.DealID(1): oldDeal1,
abi.DealID(2): oldDeal2,
}
oldProp1 := &market0.DealProposal{
oldProp1 := &market2.DealProposal{
PieceCID: dummyCid,
PieceSize: 0,
VerifiedDeal: false,
@@ -101,7 +66,7 @@ func TestMarketPredicates(t *testing.T) {
ProviderCollateral: big.Zero(),
ClientCollateral: big.Zero(),
}
oldProp2 := &market0.DealProposal{
oldProp2 := &market2.DealProposal{
PieceCID: dummyCid,
PieceSize: 0,
VerifiedDeal: false,
@@ -113,7 +78,7 @@ func TestMarketPredicates(t *testing.T) {
ProviderCollateral: big.Zero(),
ClientCollateral: big.Zero(),
}
oldProps := map[abi.DealID]*market0.DealProposal{
oldProps := map[abi.DealID]*market2.DealProposal{
abi.DealID(1): oldProp1,
abi.DealID(2): oldProp2,
}
@@ -127,7 +92,7 @@ func TestMarketPredicates(t *testing.T) {
oldStateC := createMarketState(ctx, t, store, oldDeals, oldProps, oldBalances)
newDeal1 := &market0.DealState{
newDeal1 := &market2.DealState{
SectorStartEpoch: 1,
LastUpdatedEpoch: 3,
SlashEpoch: 0,
@@ -136,19 +101,19 @@ func TestMarketPredicates(t *testing.T) {
// deal 2 removed
// added
newDeal3 := &market0.DealState{
newDeal3 := &market2.DealState{
SectorStartEpoch: 1,
LastUpdatedEpoch: 2,
SlashEpoch: 3,
}
newDeals := map[abi.DealID]*market0.DealState{
newDeals := map[abi.DealID]*market2.DealState{
abi.DealID(1): newDeal1,
// deal 2 was removed
abi.DealID(3): newDeal3,
}
// added
newProp3 := &market0.DealProposal{
newProp3 := &market2.DealProposal{
PieceCID: dummyCid,
PieceSize: 0,
VerifiedDeal: false,
@@ -160,7 +125,7 @@ func TestMarketPredicates(t *testing.T) {
ProviderCollateral: big.Zero(),
ClientCollateral: big.Zero(),
}
newProps := map[abi.DealID]*market0.DealProposal{
newProps := map[abi.DealID]*market2.DealProposal{
abi.DealID(1): oldProp1, // 1 was persisted
// prop 2 was removed
abi.DealID(3): newProp3, // new
@@ -177,14 +142,14 @@ func TestMarketPredicates(t *testing.T) {
minerAddr, err := address.NewFromString("t00")
require.NoError(t, err)
oldState, err := mockTipset(minerAddr, 1)
oldState, err := test.MockTipset(minerAddr, 1)
require.NoError(t, err)
newState, err := mockTipset(minerAddr, 2)
newState, err := test.MockTipset(minerAddr, 2)
require.NoError(t, err)
api := newMockAPI(bs)
api.setActor(oldState.Key(), &types.Actor{Code: builtin0.StorageMarketActorCodeID, Head: oldStateC})
api.setActor(newState.Key(), &types.Actor{Code: builtin0.StorageMarketActorCodeID, Head: newStateC})
api := test.NewMockAPI(bs)
api.SetActor(oldState.Key(), &types.Actor{Code: builtin2.StorageMarketActorCodeID, Head: oldStateC})
api.SetActor(newState.Key(), &types.Actor{Code: builtin2.StorageMarketActorCodeID, Head: newStateC})
t.Run("deal ID predicate", func(t *testing.T) {
preds := NewStatePredicates(api)
@@ -239,11 +204,11 @@ func TestMarketPredicates(t *testing.T) {
t.Fatal("No state change so this should not be called")
return false, nil, nil
})
marketState0 := createEmptyMarketState(t, store)
marketState0 := test.CreateEmptyMarketState(t, store)
marketCid, err := store.Put(ctx, marketState0)
require.NoError(t, err)
marketState, err := market.Load(store, &types.Actor{
Code: builtin0.StorageMarketActorCodeID,
Code: builtin2.StorageMarketActorCodeID,
Head: marketCid,
})
require.NoError(t, err)
@@ -352,11 +317,11 @@ func TestMarketPredicates(t *testing.T) {
t.Fatal("No state change so this should not be called")
return false, nil, nil
})
marketState0 := createEmptyMarketState(t, store)
marketState0 := test.CreateEmptyMarketState(t, store)
marketCid, err := store.Put(ctx, marketState0)
require.NoError(t, err)
marketState, err := market.Load(store, &types.Actor{
Code: builtin0.StorageMarketActorCodeID,
Code: builtin2.StorageMarketActorCodeID,
Head: marketCid,
})
require.NoError(t, err)
@@ -370,7 +335,7 @@ func TestMarketPredicates(t *testing.T) {
func TestMinerSectorChange(t *testing.T) {
ctx := context.Background()
bs := bstore.NewTemporarySync()
store := adt.WrapStore(ctx, cbornode.NewCborStore(bs))
store := adt2.WrapStore(ctx, cbornode.NewCborStore(bs))
nextID := uint64(0)
nextIDAddrF := func() address.Address {
@@ -379,12 +344,12 @@ func TestMinerSectorChange(t *testing.T) {
}
owner, worker := nextIDAddrF(), nextIDAddrF()
si0 := newSectorOnChainInfo(0, tutils.MakeCID("0", &miner0.SealedCIDPrefix), big.NewInt(0), abi.ChainEpoch(0), abi.ChainEpoch(10))
si1 := newSectorOnChainInfo(1, tutils.MakeCID("1", &miner0.SealedCIDPrefix), big.NewInt(1), abi.ChainEpoch(1), abi.ChainEpoch(11))
si2 := newSectorOnChainInfo(2, tutils.MakeCID("2", &miner0.SealedCIDPrefix), big.NewInt(2), abi.ChainEpoch(2), abi.ChainEpoch(11))
si0 := newSectorOnChainInfo(0, tutils.MakeCID("0", &miner2.SealedCIDPrefix), big.NewInt(0), abi.ChainEpoch(0), abi.ChainEpoch(10))
si1 := newSectorOnChainInfo(1, tutils.MakeCID("1", &miner2.SealedCIDPrefix), big.NewInt(1), abi.ChainEpoch(1), abi.ChainEpoch(11))
si2 := newSectorOnChainInfo(2, tutils.MakeCID("2", &miner2.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", &miner0.SealedCIDPrefix), big.NewInt(3), abi.ChainEpoch(3), abi.ChainEpoch(12))
si3 := newSectorOnChainInfo(3, tutils.MakeCID("3", &miner2.SealedCIDPrefix), big.NewInt(3), abi.ChainEpoch(3), abi.ChainEpoch(12))
// 0 delete
// 1 extend
// 2 same
@@ -394,14 +359,14 @@ func TestMinerSectorChange(t *testing.T) {
newMinerC := createMinerState(ctx, t, store, owner, worker, []miner.SectorOnChainInfo{si1Ext, si2, si3})
minerAddr := nextIDAddrF()
oldState, err := mockTipset(minerAddr, 1)
oldState, err := test.MockTipset(minerAddr, 1)
require.NoError(t, err)
newState, err := mockTipset(minerAddr, 2)
newState, err := test.MockTipset(minerAddr, 2)
require.NoError(t, err)
api := newMockAPI(bs)
api.setActor(oldState.Key(), &types.Actor{Head: oldMinerC, Code: builtin0.StorageMinerActorCodeID})
api.setActor(newState.Key(), &types.Actor{Head: newMinerC, Code: builtin0.StorageMinerActorCodeID})
api := test.NewMockAPI(bs)
api.SetActor(oldState.Key(), &types.Actor{Head: oldMinerC, Code: builtin2.StorageMinerActorCodeID})
api.SetActor(newState.Key(), &types.Actor{Head: newMinerC, Code: builtin2.StorageMinerActorCodeID})
preds := NewStatePredicates(api)
@@ -449,29 +414,16 @@ func TestMinerSectorChange(t *testing.T) {
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]*market0.DealState, props map[abi.DealID]*market0.DealProposal, balances map[address.Address]balance) cid.Cid {
dealRootCid := createDealAMT(ctx, t, store, deals)
func createMarketState(ctx context.Context, t *testing.T, store adt2.Store, deals map[abi.DealID]*market2.DealState, props map[abi.DealID]*market2.DealProposal, balances map[address.Address]balance) cid.Cid {
dealRootCid := test.CreateDealAMT(ctx, t, store, deals)
propRootCid := createProposalAMT(ctx, t, store, props)
balancesCids := createBalanceTable(ctx, t, store, balances)
state := createEmptyMarketState(t, store)
state := test.CreateEmptyMarketState(t, store)
state.States = dealRootCid
state.Proposals = propRootCid
state.EscrowTable = balancesCids[0]
@@ -482,27 +434,8 @@ func createMarketState(ctx context.Context, t *testing.T, store adt.Store, deals
return stateC
}
func createEmptyMarketState(t *testing.T, store adt.Store) *market0.State {
emptyArrayCid, err := adt.MakeEmptyArray(store).Root()
require.NoError(t, err)
emptyMap, err := adt.MakeEmptyMap(store).Root()
require.NoError(t, err)
return market0.ConstructState(emptyArrayCid, emptyMap, emptyMap)
}
func createDealAMT(ctx context.Context, t *testing.T, store adt.Store, deals map[abi.DealID]*market0.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]*market0.DealProposal) cid.Cid {
root := adt.MakeEmptyArray(store)
func createProposalAMT(ctx context.Context, t *testing.T, store adt2.Store, props map[abi.DealID]*market2.DealProposal) cid.Cid {
root := adt2.MakeEmptyArray(store)
for dealID, prop := range props {
err := root.Set(uint64(dealID), prop)
require.NoError(t, err)
@@ -512,16 +445,16 @@ func createProposalAMT(ctx context.Context, t *testing.T, store adt.Store, props
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)
func createBalanceTable(ctx context.Context, t *testing.T, store adt2.Store, balances map[address.Address]balance) [2]cid.Cid {
escrowMapRoot := adt2.MakeEmptyMap(store)
escrowMapRootCid, err := escrowMapRoot.Root()
require.NoError(t, err)
escrowRoot, err := adt.AsBalanceTable(store, escrowMapRootCid)
escrowRoot, err := adt2.AsBalanceTable(store, escrowMapRootCid)
require.NoError(t, err)
lockedMapRoot := adt.MakeEmptyMap(store)
lockedMapRoot := adt2.MakeEmptyMap(store)
lockedMapRootCid, err := lockedMapRoot.Root()
require.NoError(t, err)
lockedRoot, err := adt.AsBalanceTable(store, lockedMapRootCid)
lockedRoot, err := adt2.AsBalanceTable(store, lockedMapRootCid)
require.NoError(t, err)
for addr, balance := range balances {
@@ -538,7 +471,7 @@ func createBalanceTable(ctx context.Context, t *testing.T, store adt.Store, bala
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 {
func createMinerState(ctx context.Context, t *testing.T, store adt2.Store, owner, worker address.Address, sectors []miner.SectorOnChainInfo) cid.Cid {
rootCid := createSectorsAMT(ctx, t, store, sectors)
state := createEmptyMinerState(ctx, t, store, owner, worker)
@@ -549,20 +482,20 @@ func createMinerState(ctx context.Context, t *testing.T, store adt.Store, owner,
return stateC
}
func createEmptyMinerState(ctx context.Context, t *testing.T, store adt.Store, owner, worker address.Address) *miner0.State {
emptyArrayCid, err := adt.MakeEmptyArray(store).Root()
func createEmptyMinerState(ctx context.Context, t *testing.T, store adt2.Store, owner, worker address.Address) *miner2.State {
emptyArrayCid, err := adt2.MakeEmptyArray(store).Root()
require.NoError(t, err)
emptyMap, err := adt.MakeEmptyMap(store).Root()
emptyMap, err := adt2.MakeEmptyMap(store).Root()
require.NoError(t, err)
emptyDeadline, err := store.Put(store.Context(), miner0.ConstructDeadline(emptyArrayCid))
emptyDeadline, err := store.Put(store.Context(), miner2.ConstructDeadline(emptyArrayCid))
require.NoError(t, err)
emptyVestingFunds := miner0.ConstructVestingFunds()
emptyVestingFunds := miner2.ConstructVestingFunds()
emptyVestingFundsCid, err := store.Put(store.Context(), emptyVestingFunds)
require.NoError(t, err)
emptyDeadlines := miner0.ConstructDeadlines(emptyDeadline)
emptyDeadlines := miner2.ConstructDeadlines(emptyDeadline)
emptyDeadlinesCid, err := store.Put(store.Context(), emptyDeadlines)
require.NoError(t, err)
@@ -572,16 +505,30 @@ func createEmptyMinerState(ctx context.Context, t *testing.T, store adt.Store, o
emptyBitfieldCid, err := store.Put(store.Context(), emptyBitfield)
require.NoError(t, err)
state, err := miner0.ConstructState(minerInfo, 123, emptyBitfieldCid, emptyArrayCid, emptyMap, emptyDeadlinesCid, emptyVestingFundsCid)
state, err := miner2.ConstructState(minerInfo, 123, 4, 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)
func createSectorsAMT(ctx context.Context, t *testing.T, store adt2.Store, sectors []miner.SectorOnChainInfo) cid.Cid {
root := adt2.MakeEmptyArray(store)
for _, sector := range sectors {
sector := (miner0.SectorOnChainInfo)(sector)
sector := miner2.SectorOnChainInfo{
SectorNumber: sector.SectorNumber,
SealProof: sector.SealProof,
SealedCID: sector.SealedCID,
DealIDs: sector.DealIDs,
Activation: sector.Activation,
Expiration: sector.Expiration,
DealWeight: sector.DealWeight,
VerifiedDealWeight: sector.VerifiedDealWeight,
InitialPledge: sector.InitialPledge,
ExpectedDayReward: sector.ExpectedDayReward,
ExpectedStoragePledge: sector.ExpectedStoragePledge,
ReplacedSectorAge: 0,
ReplacedDayReward: big.NewInt(0),
}
err := root.Set(uint64(sector.SectorNumber), &sector)
require.NoError(t, err)
}
@@ -614,8 +561,8 @@ const (
)
// returns a unique SectorPreCommitInfo with each invocation with SectorNumber set to `sectorNo`.
func newSectorPreCommitInfo(sectorNo abi.SectorNumber, sealed cid.Cid, expiration abi.ChainEpoch) *miner0.SectorPreCommitInfo {
return &miner0.SectorPreCommitInfo{
func newSectorPreCommitInfo(sectorNo abi.SectorNumber, sealed cid.Cid, expiration abi.ChainEpoch) *miner2.SectorPreCommitInfo {
return &miner2.SectorPreCommitInfo{
SealProof: abi.RegisteredSealProof_StackedDrg32GiBV1,
SectorNumber: sectorNo,
SealedCID: sealed,
@@ -625,7 +572,7 @@ func newSectorPreCommitInfo(sectorNo abi.SectorNumber, sealed cid.Cid, expiratio
}
}
func dealEquality(expected market0.DealState, actual market.DealState) bool {
func dealEquality(expected market2.DealState, actual market.DealState) bool {
return expected.LastUpdatedEpoch == actual.LastUpdatedEpoch &&
expected.SectorStartEpoch == actual.SectorStartEpoch &&
expected.SlashEpoch == actual.SlashEpoch
+3 -3
View File
@@ -34,11 +34,11 @@ func (me *messageEvents) CheckMsg(ctx context.Context, smsg types.ChainMsg, hnd
}
func (me *messageEvents) MatchMsg(inmsg *types.Message) MsgMatchFunc {
return func(msg *types.Message) (matchOnce bool, matched bool, err error) {
return func(msg *types.Message) (matched bool, err error) {
if msg.From == inmsg.From && msg.Nonce == inmsg.Nonce && !inmsg.Equals(msg) {
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 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 true, inmsg.Equals(msg), nil
return inmsg.Equals(msg), nil
}
}
+1 -6
View File
@@ -7,7 +7,6 @@ import (
"math/rand"
"time"
"github.com/libp2p/go-libp2p-core/helpers"
"github.com/libp2p/go-libp2p-core/host"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/peer"
@@ -412,11 +411,7 @@ func (c *client) sendRequestToPeer(ctx context.Context, peer peer.ID, req *Reque
return nil, xerrors.Errorf("failed to open stream to peer: %w", err)
}
defer func() {
// Note: this will become just stream.Close once we've completed the go-libp2p migration to
// go-libp2p-core 0.7.0
go helpers.FullClose(stream) //nolint:errcheck
}()
defer stream.Close() //nolint:errcheck
// Write request.
_ = stream.SetWriteDeadline(time.Now().Add(WriteReqDeadline))
+10 -4
View File
@@ -38,20 +38,26 @@ func newPeerTracker(lc fx.Lifecycle, h host.Host, pmgr *peermgr.PeerMgr) *bsPeer
pmgr: pmgr,
}
sub, err := h.EventBus().Subscribe(new(peermgr.NewFilPeer))
evtSub, err := h.EventBus().Subscribe(new(peermgr.FilPeerEvt))
if err != nil {
panic(err)
}
go func() {
for newPeer := range sub.Out() {
bsPt.addPeer(newPeer.(peermgr.NewFilPeer).Id)
for evt := range evtSub.Out() {
pEvt := evt.(peermgr.FilPeerEvt)
switch pEvt.Type {
case peermgr.AddFilPeerEvt:
bsPt.addPeer(pEvt.ID)
case peermgr.RemoveFilPeerEvt:
bsPt.removePeer(pEvt.ID)
}
}
}()
lc.Append(fx.Hook{
OnStop: func(ctx context.Context) error {
return sub.Close()
return evtSub.Close()
},
})
+2 -5
View File
@@ -15,7 +15,6 @@ import (
"github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p-core/helpers"
inet "github.com/libp2p/go-libp2p-core/network"
)
@@ -40,16 +39,14 @@ func (s *server) HandleStream(stream inet.Stream) {
ctx, span := trace.StartSpan(context.Background(), "chainxchg.HandleStream")
defer span.End()
// Note: this will become just stream.Close once we've completed the go-libp2p migration to
// go-libp2p-core 0.7.0
defer helpers.FullClose(stream) //nolint:errcheck
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",
log.Debugw("block sync request",
"start", req.Head, "len", req.Length)
resp, err := s.processRequest(ctx, &req)
+25 -22
View File
@@ -4,17 +4,16 @@ import (
"bytes"
"context"
"fmt"
"io"
"io/ioutil"
"sync/atomic"
"time"
"github.com/filecoin-project/specs-actors/actors/runtime/proof"
"github.com/google/uuid"
"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/google/uuid"
block "github.com/ipfs/go-block-format"
"github.com/ipfs/go-blockservice"
"github.com/ipfs/go-cid"
@@ -26,6 +25,8 @@ import (
"go.opencensus.io/trace"
"golang.org/x/xerrors"
proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/actors/policy"
@@ -50,7 +51,7 @@ const msgsPerBlock = 20
//nolint:deadcode,varcheck
var log = logging.Logger("gen")
var ValidWpostForTesting = []proof.PoStProof{{
var ValidWpostForTesting = []proof2.PoStProof{{
ProofBytes: []byte("valid proof"),
}}
@@ -138,12 +139,20 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
return nil, xerrors.Errorf("failed to get metadata datastore: %w", err)
}
bds, err := lr.Datastore("/chain")
bs, err := lr.Blockstore(repo.BlockstoreChain)
if err != nil {
return nil, xerrors.Errorf("failed to get blocks datastore: %w", err)
return nil, err
}
bs := mybs{blockstore.NewBlockstore(bds)}
defer func() {
if c, ok := bs.(io.Closer); ok {
if err := c.Close(); err != nil {
log.Warnf("failed to close blockstore: %s", err)
}
}
}()
bs = mybs{bs}
ks, err := lr.KeyStore()
if err != nil {
@@ -236,7 +245,7 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) {
return nil, xerrors.Errorf("make genesis block failed: %w", err)
}
cs := store.NewChainStore(bs, ds, sys, j)
cs := store.NewChainStore(bs, bs, ds, sys, j)
genfb := &types.FullBlock{Header: genb.Genesis}
gents := store.NewFullTipSet([]*types.FullBlock{genfb})
@@ -338,14 +347,8 @@ func (cg *ChainGen) nextBlockProof(ctx context.Context, pts *types.TipSet, m add
return nil, nil, nil, xerrors.Errorf("get miner base info: %w", err)
}
prev := mbi.PrevBeaconEntry
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)
}
rbase := prev
entries := mbi.BeaconEntries
rbase := mbi.PrevBeaconEntry
if len(entries) > 0 {
rbase = entries[len(entries)-1]
}
@@ -467,7 +470,7 @@ func (cg *ChainGen) NextTipSetFromMinersWithMessages(base *types.TipSet, miners
func (cg *ChainGen) makeBlock(parents *types.TipSet, m address.Address, vrfticket *types.Ticket,
eticket *types.ElectionProof, bvals []types.BeaconEntry, height abi.ChainEpoch,
wpost []proof.PoStProof, msgs []*types.SignedMessage) (*types.FullBlock, error) {
wpost []proof2.PoStProof, msgs []*types.SignedMessage) (*types.FullBlock, error) {
var ts uint64
if cg.Timestamper != nil {
@@ -605,7 +608,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, []proof.SectorInfo, abi.PoStRandomness) ([]proof.PoStProof, error)
ComputeProof(context.Context, []proof2.SectorInfo, abi.PoStRandomness) ([]proof2.PoStProof, error)
}
type wppProvider struct{}
@@ -614,7 +617,7 @@ func (wpp *wppProvider) GenerateCandidates(ctx context.Context, _ abi.PoStRandom
return []uint64{0}, nil
}
func (wpp *wppProvider) ComputeProof(context.Context, []proof.SectorInfo, abi.PoStRandomness) ([]proof.PoStProof, error) {
func (wpp *wppProvider) ComputeProof(context.Context, []proof2.SectorInfo, abi.PoStRandomness) ([]proof2.PoStProof, error) {
return ValidWpostForTesting, nil
}
@@ -681,15 +684,15 @@ type genFakeVerifier struct{}
var _ ffiwrapper.Verifier = (*genFakeVerifier)(nil)
func (m genFakeVerifier) VerifySeal(svi proof.SealVerifyInfo) (bool, error) {
func (m genFakeVerifier) VerifySeal(svi proof2.SealVerifyInfo) (bool, error) {
return true, nil
}
func (m genFakeVerifier) VerifyWinningPoSt(ctx context.Context, info proof.WinningPoStVerifyInfo) (bool, error) {
func (m genFakeVerifier) VerifyWinningPoSt(ctx context.Context, info proof2.WinningPoStVerifyInfo) (bool, error) {
panic("not supported")
}
func (m genFakeVerifier) VerifyWindowPoSt(ctx context.Context, info proof.WindowPoStVerifyInfo) (bool, error) {
func (m genFakeVerifier) VerifyWindowPoSt(ctx context.Context, info proof2.WindowPoStVerifyInfo) (bool, error) {
panic("not supported")
}
@@ -21,7 +21,7 @@ import (
bstore "github.com/filecoin-project/lotus/lib/blockstore"
)
func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesis.Actor, rootVerifier genesis.Actor) (int64, *types.Actor, map[address.Address]address.Address, error) {
func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesis.Actor, rootVerifier genesis.Actor, remainder genesis.Actor) (int64, *types.Actor, map[address.Address]address.Address, error) {
if len(initialActors) > MaxAccounts {
return 0, nil, nil, xerrors.New("too many initial actors")
}
@@ -90,6 +90,33 @@ func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesi
}
}
setupMsig := func(meta json.RawMessage) error {
var ainfo genesis.MultisigMeta
if err := json.Unmarshal(meta, &ainfo); err != nil {
return 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 err
}
counter = counter + 1
var err error
keyToId[e], err = address.NewIDAddress(uint64(value))
if err != nil {
return err
}
}
return nil
}
if rootVerifier.Type == genesis.TAccount {
var ainfo genesis.AccountMeta
if err := json.Unmarshal(rootVerifier.Meta, &ainfo); err != nil {
@@ -100,28 +127,15 @@ func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesi
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)
err := setupMsig(rootVerifier.Meta)
if err != nil {
return 0, nil, nil, xerrors.Errorf("setting up root verifier msig: %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
}
}
err := setupMsig(remainder.Meta)
if err != nil {
return 0, nil, nil, xerrors.Errorf("setting up remainder msig: %w", err)
}
amapaddr, err := amap.Root()
+2 -2
View File
@@ -134,7 +134,7 @@ func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template ge
// Create init actor
idStart, initact, keyIDs, err := SetupInitActor(bs, template.NetworkName, template.Accounts, template.VerifregRootKey)
idStart, initact, keyIDs, err := SetupInitActor(bs, template.NetworkName, template.Accounts, template.VerifregRootKey, template.RemainderAccount)
if err != nil {
return nil, nil, xerrors.Errorf("setup init actor: %w", err)
}
@@ -482,7 +482,7 @@ func MakeGenesisBlock(ctx context.Context, j journal.Journal, bs bstore.Blocksto
}
// temp chainstore
cs := store.NewChainStore(bs, datastore.NewMapDatastore(), sys, j)
cs := store.NewChainStore(bs, bs, datastore.NewMapDatastore(), sys, j)
// Verify PreSealed Data
stateroot, err = VerifyPreSealedData(ctx, cs, stateroot, template, keyIDs)
+16 -17
View File
@@ -23,12 +23,11 @@ import (
"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"
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner"
power0 "github.com/filecoin-project/specs-actors/actors/builtin/power"
reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward"
"github.com/filecoin-project/specs-actors/actors/runtime"
runtime2 "github.com/filecoin-project/specs-actors/v2/actors/runtime"
"github.com/filecoin-project/lotus/chain/state"
"github.com/filecoin-project/lotus/chain/store"
@@ -47,7 +46,7 @@ func MinerAddress(genesisIndex uint64) address.Address {
}
type fakedSigSyscalls struct {
runtime.Syscalls
runtime2.Syscalls
}
func (fss *fakedSigSyscalls) VerifySignature(signature crypto.Signature, signer address.Address, plaintext []byte) error {
@@ -55,9 +54,9 @@ func (fss *fakedSigSyscalls) VerifySignature(signature crypto.Signature, signer
}
func mkFakedSigSyscalls(base vm.SyscallBuilder) vm.SyscallBuilder {
return func(ctx context.Context, cstate *state.StateTree, cst cbor.IpldStore) runtime.Syscalls {
return func(ctx context.Context, rt *vm.Runtime) runtime2.Syscalls {
return &fakedSigSyscalls{
base(ctx, cstate, cst),
base(ctx, rt),
}
}
}
@@ -100,7 +99,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
i := i
m := m
spt, err := ffiwrapper.SealProofTypeFromSectorSize(m.SectorSize)
spt, err := miner.SealProofTypeFromSectorSize(m.SectorSize, GenesisNetworkVersion)
if err != nil {
return cid.Undef, err
}
@@ -114,7 +113,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
}
params := mustEnc(constructorParams)
rval, err := doExecValue(ctx, vm, power.Address, m.Owner, m.PowerBalance, builtin.MethodsPower.CreateMiner, params)
rval, err := doExecValue(ctx, vm, power.Address, m.Owner, m.PowerBalance, builtin0.MethodsPower.CreateMiner, params)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to create genesis miner: %w", err)
}
@@ -146,7 +145,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
if m.MarketBalance.GreaterThan(big.Zero()) {
params := mustEnc(&minerInfos[i].maddr)
_, err := doExecValue(ctx, vm, market.Address, m.Worker, m.MarketBalance, builtin.MethodsMarket.AddBalance, params)
_, err := doExecValue(ctx, vm, market.Address, m.Worker, m.MarketBalance, builtin0.MethodsMarket.AddBalance, params)
if err != nil {
return cid.Undef, xerrors.Errorf("failed to create genesis miner (add balance): %w", err)
}
@@ -158,7 +157,7 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
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, market.Address, m.Worker, big.Zero(), builtin.MethodsMarket.PublishStorageDeals, mustEnc(params))
ret, err := doExecValue(ctx, vm, market.Address, m.Worker, big.Zero(), builtin0.MethodsMarket.PublishStorageDeals, mustEnc(params))
if err != nil {
return xerrors.Errorf("failed to create genesis miner (publish deals): %w", err)
}
@@ -290,17 +289,17 @@ func SetupStorageMiners(ctx context.Context, cs *store.ChainStore, sroot cid.Cid
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))
_, err = doExecValue(ctx, vm, minerInfos[i].maddr, m.Worker, pledge, builtin0.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{
confirmParams := &builtin0.ConfirmSectorProofsParams{
Sectors: []abi.SectorNumber{preseal.SectorID},
}
_, err = doExecValue(ctx, vm, minerInfos[i].maddr, power.Address, big.Zero(), builtin.MethodsMiner.ConfirmSectorProofsValid, mustEnc(confirmParams))
_, err = doExecValue(ctx, vm, minerInfos[i].maddr, power.Address, big.Zero(), builtin0.MethodsMiner.ConfirmSectorProofsValid, mustEnc(confirmParams))
if err != nil {
return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err)
}
@@ -349,7 +348,7 @@ func (fr *fakeRand) GetBeaconRandomness(ctx context.Context, personalization cry
}
func currentTotalPower(ctx context.Context, vm *vm.VM, maddr address.Address) (*power0.CurrentTotalPowerReturn, error) {
pwret, err := doExecValue(ctx, vm, power.Address, maddr, big.Zero(), builtin.MethodsPower.CurrentTotalPower, nil)
pwret, err := doExecValue(ctx, vm, power.Address, maddr, big.Zero(), builtin0.MethodsPower.CurrentTotalPower, nil)
if err != nil {
return nil, err
}
@@ -373,7 +372,7 @@ func dealWeight(ctx context.Context, vm *vm.VM, maddr address.Address, dealIDs [
market.Address,
maddr,
abi.NewTokenAmount(0),
builtin.MethodsMarket.VerifyDealsForActivation,
builtin0.MethodsMarket.VerifyDealsForActivation,
mustEnc(params),
)
if err != nil {
@@ -387,7 +386,7 @@ func dealWeight(ctx context.Context, vm *vm.VM, maddr address.Address, dealIDs [
}
func currentEpochBlockReward(ctx context.Context, vm *vm.VM, maddr address.Address) (*reward0.ThisEpochRewardReturn, error) {
rwret, err := doExecValue(ctx, vm, reward.Address, maddr, big.Zero(), builtin.MethodsReward.ThisEpochReward, nil)
rwret, err := doExecValue(ctx, vm, reward.Address, maddr, big.Zero(), builtin0.MethodsReward.ThisEpochReward, nil)
if err != nil {
return nil, err
}
@@ -405,7 +404,7 @@ func circSupply(ctx context.Context, vmi *vm.VM, maddr address.Address) abi.Toke
rt := unsafeVM.MakeRuntime(ctx, &types.Message{
GasLimit: 1_000_000_000,
From: maddr,
}, maddr, 0, 0, 0)
})
return rt.TotalFilCircSupply()
}
+21 -6
View File
@@ -50,12 +50,27 @@ func doExecValue(ctx context.Context, vm *vm.VM, to, from address.Address, value
return ret.Return, nil
}
var GenesisNetworkVersion = func() network.Version { // TODO: Get from build/
if build.UseNewestNetwork() { // TODO: Get from build/
return build.NewestNetworkVersion // TODO: Get from build/
} // TODO: Get from build/
return network.Version1 // TODO: Get from build/
}() // TODO: Get from build/
// TODO: Get from build
// TODO: make a list/schedule of these.
var GenesisNetworkVersion = func() network.Version {
// returns the version _before_ the first upgrade.
if build.UpgradeBreezeHeight >= 0 {
return network.Version0
}
if build.UpgradeSmokeHeight >= 0 {
return network.Version1
}
if build.UpgradeIgnitionHeight >= 0 {
return network.Version2
}
if build.UpgradeActorsV2Height >= 0 {
return network.Version3
}
if build.UpgradeLiftoffHeight >= 0 {
return network.Version3
}
return build.ActorUpgradeNetworkVersion - 1 // genesis requires actors v0.
}()
func genesisNetworkVersion(context.Context, abi.ChainEpoch) network.Version { // TODO: Get from build/
return GenesisNetworkVersion // TODO: Get from build/
+10 -19
View File
@@ -4,17 +4,14 @@ import (
"context"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/specs-actors/actors/util/adt"
blockadt "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"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/chain/state"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/vm"
"github.com/filecoin-project/lotus/lib/sigs/bls"
)
@@ -30,7 +27,12 @@ func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w api.WalletA
return nil, xerrors.Errorf("failed to load tipset state: %w", err)
}
worker, err := stmgr.GetMinerWorkerRaw(ctx, sm, st, bt.Miner)
_, lbst, err := stmgr.GetLookbackTipSetForRound(ctx, sm, pts, bt.Epoch)
if err != nil {
return nil, xerrors.Errorf("getting lookback miner actor state: %w", err)
}
worker, err := stmgr.GetMinerWorkerRaw(ctx, sm, lbst, bt.Miner)
if err != nil {
return nil, xerrors.Errorf("failed to get miner worker: %w", err)
}
@@ -114,23 +116,12 @@ func MinerCreateBlock(ctx context.Context, sm *stmgr.StateManager, w api.WalletA
}
next.ParentBaseFee = baseFee
cst := cbor.NewCborStore(sm.ChainStore().Blockstore())
tree, err := state.LoadStateTree(cst, st)
if err != nil {
return nil, xerrors.Errorf("failed to load state tree: %w", err)
}
waddr, err := vm.ResolveToKeyAddr(tree, cst, worker)
if err != nil {
return nil, xerrors.Errorf("failed to resolve miner address to key address: %w", err)
}
nosigbytes, err := next.SigningBytes()
if err != nil {
return nil, xerrors.Errorf("failed to get signing bytes for block: %w", err)
}
sig, err := w.WalletSign(ctx, waddr, nosigbytes, api.MsgMeta{
sig, err := w.WalletSign(ctx, worker, nosigbytes, api.MsgMeta{
Type: api.MTBlock,
})
if err != nil {
@@ -181,8 +172,8 @@ func aggregateSignatures(sigs []crypto.Signature) (*crypto.Signature, error) {
}, nil
}
func toArray(store adt.Store, cids []cid.Cid) (cid.Cid, error) {
arr := adt.MakeEmptyArray(store)
func toArray(store blockadt.Store, cids []cid.Cid) (cid.Cid, error) {
arr := blockadt.MakeEmptyArray(store)
for i, c := range cids {
oc := cbg.CborCid(c)
if err := arr.Set(uint64(i), &oc); err != nil {
+112
View File
@@ -0,0 +1,112 @@
// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
package market
import (
"fmt"
"io"
cbg "github.com/whyrusleeping/cbor-gen"
xerrors "golang.org/x/xerrors"
)
var _ = xerrors.Errorf
var lengthBufFundedAddressState = []byte{131}
func (t *FundedAddressState) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write(lengthBufFundedAddressState); err != nil {
return err
}
scratch := make([]byte, 9)
// t.Addr (address.Address) (struct)
if err := t.Addr.MarshalCBOR(w); err != nil {
return err
}
// t.AmtReserved (big.Int) (struct)
if err := t.AmtReserved.MarshalCBOR(w); err != nil {
return err
}
// t.MsgCid (cid.Cid) (struct)
if t.MsgCid == nil {
if _, err := w.Write(cbg.CborNull); err != nil {
return err
}
} else {
if err := cbg.WriteCidBuf(scratch, w, *t.MsgCid); err != nil {
return xerrors.Errorf("failed to write cid field t.MsgCid: %w", err)
}
}
return nil
}
func (t *FundedAddressState) UnmarshalCBOR(r io.Reader) error {
*t = FundedAddressState{}
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 != 3 {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.Addr (address.Address) (struct)
{
if err := t.Addr.UnmarshalCBOR(br); err != nil {
return xerrors.Errorf("unmarshaling t.Addr: %w", err)
}
}
// t.AmtReserved (big.Int) (struct)
{
if err := t.AmtReserved.UnmarshalCBOR(br); err != nil {
return xerrors.Errorf("unmarshaling t.AmtReserved: %w", err)
}
}
// t.MsgCid (cid.Cid) (struct)
{
b, err := br.ReadByte()
if err != nil {
return err
}
if b != cbg.CborNull[0] {
if err := br.UnreadByte(); err != nil {
return err
}
c, err := cbg.ReadCid(br)
if err != nil {
return xerrors.Errorf("failed to read cid field t.MsgCid: %w", err)
}
t.MsgCid = &c
}
}
return nil
}
+707
View File
@@ -0,0 +1,707 @@
package market
import (
"context"
"sync"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/actors"
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/node/impl/full"
"github.com/filecoin-project/lotus/node/modules/dtypes"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
logging "github.com/ipfs/go-log"
"go.uber.org/fx"
"golang.org/x/xerrors"
)
var log = logging.Logger("market_adapter")
// API is the fx dependencies need to run a fund manager
type FundManagerAPI struct {
fx.In
full.StateAPI
full.MpoolAPI
}
// fundManagerAPI is the specific methods called by the FundManager
// (used by the tests)
type fundManagerAPI interface {
MpoolPushMessage(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)
StateMarketBalance(context.Context, address.Address, types.TipSetKey) (api.MarketBalance, error)
StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64) (*api.MsgLookup, error)
}
// FundManager keeps track of funds in a set of addresses
type FundManager struct {
ctx context.Context
shutdown context.CancelFunc
api fundManagerAPI
str *Store
lk sync.Mutex
fundedAddrs map[address.Address]*fundedAddress
}
func NewFundManager(lc fx.Lifecycle, api FundManagerAPI, ds dtypes.MetadataDS) *FundManager {
fm := newFundManager(&api, ds)
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
return fm.Start()
},
OnStop: func(ctx context.Context) error {
fm.Stop()
return nil
},
})
return fm
}
// newFundManager is used by the tests
func newFundManager(api fundManagerAPI, ds datastore.Batching) *FundManager {
ctx, cancel := context.WithCancel(context.Background())
return &FundManager{
ctx: ctx,
shutdown: cancel,
api: api,
str: newStore(ds),
fundedAddrs: make(map[address.Address]*fundedAddress),
}
}
func (fm *FundManager) Stop() {
fm.shutdown()
}
func (fm *FundManager) Start() error {
fm.lk.Lock()
defer fm.lk.Unlock()
// TODO:
// To save memory:
// - in State() only load addresses with in-progress messages
// - load the others just-in-time from getFundedAddress
// - delete(fm.fundedAddrs, addr) when the queue has been processed
return fm.str.forEach(func(state *FundedAddressState) {
fa := newFundedAddress(fm, state.Addr)
fa.state = state
fm.fundedAddrs[fa.state.Addr] = fa
fa.start()
})
}
// Creates a fundedAddress if it doesn't already exist, and returns it
func (fm *FundManager) getFundedAddress(addr address.Address) *fundedAddress {
fm.lk.Lock()
defer fm.lk.Unlock()
fa, ok := fm.fundedAddrs[addr]
if !ok {
fa = newFundedAddress(fm, addr)
fm.fundedAddrs[addr] = fa
}
return fa
}
// Reserve adds amt to `reserved`. If there are not enough available funds for
// the address, submits a message on chain to top up available funds.
// Returns the cid of the message that was submitted on chain, or cid.Undef if
// the required funds were already available.
func (fm *FundManager) Reserve(ctx context.Context, wallet, addr address.Address, amt abi.TokenAmount) (cid.Cid, error) {
return fm.getFundedAddress(addr).reserve(ctx, wallet, amt)
}
// Subtract from `reserved`.
func (fm *FundManager) Release(addr address.Address, amt abi.TokenAmount) error {
return fm.getFundedAddress(addr).release(amt)
}
// Withdraw unreserved funds. Only succeeds if there are enough unreserved
// funds for the address.
// Returns the cid of the message that was submitted on chain.
func (fm *FundManager) Withdraw(ctx context.Context, wallet, addr address.Address, amt abi.TokenAmount) (cid.Cid, error) {
return fm.getFundedAddress(addr).withdraw(ctx, wallet, amt)
}
// FundedAddressState keeps track of the state of an address with funds in the
// datastore
type FundedAddressState struct {
Addr address.Address
// AmtReserved is the amount that must be kept in the address (cannot be
// withdrawn)
AmtReserved abi.TokenAmount
// MsgCid is the cid of an in-progress on-chain message
MsgCid *cid.Cid
}
// fundedAddress keeps track of the state and request queues for a
// particular address
type fundedAddress struct {
ctx context.Context
env *fundManagerEnvironment
str *Store
lk sync.Mutex
state *FundedAddressState
// Note: These request queues are ephemeral, they are not saved to store
reservations []*fundRequest
releases []*fundRequest
withdrawals []*fundRequest
// Used by the tests
onProcessStartListener func() bool
}
func newFundedAddress(fm *FundManager, addr address.Address) *fundedAddress {
return &fundedAddress{
ctx: fm.ctx,
env: &fundManagerEnvironment{api: fm.api},
str: fm.str,
state: &FundedAddressState{
Addr: addr,
AmtReserved: abi.NewTokenAmount(0),
},
}
}
// If there is an in-progress on-chain message, don't submit any more messages
// on chain until it completes
func (a *fundedAddress) start() {
a.lk.Lock()
defer a.lk.Unlock()
if a.state.MsgCid != nil {
a.debugf("restart: wait for %s", a.state.MsgCid)
a.startWaitForResults(*a.state.MsgCid)
}
}
func (a *fundedAddress) reserve(ctx context.Context, wallet address.Address, amt abi.TokenAmount) (cid.Cid, error) {
return a.requestAndWait(ctx, wallet, amt, &a.reservations)
}
func (a *fundedAddress) release(amt abi.TokenAmount) error {
_, err := a.requestAndWait(context.Background(), address.Undef, amt, &a.releases)
return err
}
func (a *fundedAddress) withdraw(ctx context.Context, wallet address.Address, amt abi.TokenAmount) (cid.Cid, error) {
return a.requestAndWait(ctx, wallet, amt, &a.withdrawals)
}
func (a *fundedAddress) requestAndWait(ctx context.Context, wallet address.Address, amt abi.TokenAmount, reqs *[]*fundRequest) (cid.Cid, error) {
// Create a request and add it to the request queue
req := newFundRequest(ctx, wallet, amt)
a.lk.Lock()
*reqs = append(*reqs, req)
a.lk.Unlock()
// Process the queue
go a.process()
// Wait for the results
select {
case <-ctx.Done():
return cid.Undef, ctx.Err()
case r := <-req.Result:
return r.msgCid, r.err
}
}
// Used by the tests
func (a *fundedAddress) onProcessStart(fn func() bool) {
a.lk.Lock()
defer a.lk.Unlock()
a.onProcessStartListener = fn
}
// Process queued requests
func (a *fundedAddress) process() {
a.lk.Lock()
defer a.lk.Unlock()
// Used by the tests
if a.onProcessStartListener != nil {
done := a.onProcessStartListener()
if !done {
return
}
a.onProcessStartListener = nil
}
// Check if we're still waiting for the response to a message
if a.state.MsgCid != nil {
return
}
// Check if there's anything to do
haveReservations := len(a.reservations) > 0 || len(a.releases) > 0
haveWithdrawals := len(a.withdrawals) > 0
if !haveReservations && !haveWithdrawals {
return
}
// Process reservations / releases
if haveReservations {
res, err := a.processReservations(a.reservations, a.releases)
if err == nil {
a.applyStateChange(res.msgCid, res.amtReserved)
}
a.reservations = filterOutProcessedReqs(a.reservations)
a.releases = filterOutProcessedReqs(a.releases)
}
// If there was no message sent on chain by adding reservations, and all
// reservations have completed processing, process withdrawals
if haveWithdrawals && a.state.MsgCid == nil && len(a.reservations) == 0 {
withdrawalCid, err := a.processWithdrawals(a.withdrawals)
if err == nil && withdrawalCid != cid.Undef {
a.applyStateChange(&withdrawalCid, types.EmptyInt)
}
a.withdrawals = filterOutProcessedReqs(a.withdrawals)
}
// If a message was sent on-chain
if a.state.MsgCid != nil {
// Start waiting for results of message (async)
a.startWaitForResults(*a.state.MsgCid)
}
// Process any remaining queued requests
go a.process()
}
// Filter out completed requests
func filterOutProcessedReqs(reqs []*fundRequest) []*fundRequest {
filtered := make([]*fundRequest, 0, len(reqs))
for _, req := range reqs {
if !req.Completed() {
filtered = append(filtered, req)
}
}
return filtered
}
// Apply the results of processing queues and save to the datastore
func (a *fundedAddress) applyStateChange(msgCid *cid.Cid, amtReserved abi.TokenAmount) {
a.state.MsgCid = msgCid
if !amtReserved.Nil() {
a.state.AmtReserved = amtReserved
}
a.saveState()
}
// Clear the pending message cid so that a new message can be sent
func (a *fundedAddress) clearWaitState() {
a.state.MsgCid = nil
a.saveState()
}
// Save state to datastore
func (a *fundedAddress) saveState() {
// Not much we can do if saving to the datastore fails, just log
err := a.str.save(a.state)
if err != nil {
log.Errorf("saving state to store for addr %s: %w", a.state.Addr, err)
}
}
// The result of processing the reservation / release queues
type processResult struct {
// Requests that completed without adding funds
covered []*fundRequest
// Requests that added funds
added []*fundRequest
// The new reserved amount
amtReserved abi.TokenAmount
// The message cid, if a message was submitted on-chain
msgCid *cid.Cid
}
// process reservations and releases, and return the resulting changes to state
func (a *fundedAddress) processReservations(reservations []*fundRequest, releases []*fundRequest) (pr *processResult, prerr error) {
// When the function returns
defer func() {
// If there's an error, mark all requests as errored
if prerr != nil {
for _, req := range append(reservations, releases...) {
req.Complete(cid.Undef, prerr)
}
return
}
// Complete all release requests
for _, req := range releases {
req.Complete(cid.Undef, nil)
}
// Complete all requests that were covered by released amounts
for _, req := range pr.covered {
req.Complete(cid.Undef, nil)
}
// If a message was sent
if pr.msgCid != nil {
// Complete all add funds requests
for _, req := range pr.added {
req.Complete(*pr.msgCid, nil)
}
}
}()
// Split reservations into those that are covered by released amounts,
// and those to add to the reserved amount.
// Note that we process requests from the same wallet in batches. So some
// requests may not be included in covered if they don't match the first
// covered request's wallet. These will be processed on a subsequent
// invocation of processReservations.
toCancel, toAdd, reservedDelta := splitReservations(reservations, releases)
// Apply the reserved delta to the reserved amount
reserved := types.BigAdd(a.state.AmtReserved, reservedDelta)
if reserved.LessThan(abi.NewTokenAmount(0)) {
reserved = abi.NewTokenAmount(0)
}
res := &processResult{
amtReserved: reserved,
covered: toCancel,
}
// Work out the amount to add to the balance
amtToAdd := abi.NewTokenAmount(0)
if len(toAdd) > 0 && reserved.GreaterThan(abi.NewTokenAmount(0)) {
// Get available funds for address
avail, err := a.env.AvailableFunds(a.ctx, a.state.Addr)
if err != nil {
return res, err
}
// amount to add = new reserved amount - available
amtToAdd = types.BigSub(reserved, avail)
a.debugf("reserved %d - avail %d = to add %d", reserved, avail, amtToAdd)
}
// If there's nothing to add to the balance, bail out
if amtToAdd.LessThanEqual(abi.NewTokenAmount(0)) {
res.covered = append(res.covered, toAdd...)
return res, nil
}
// Add funds to address
a.debugf("add funds %d", amtToAdd)
addFundsCid, err := a.env.AddFunds(a.ctx, toAdd[0].Wallet, a.state.Addr, amtToAdd)
if err != nil {
return res, err
}
// Mark reservation requests as complete
res.added = toAdd
// Save the message CID to state
res.msgCid = &addFundsCid
return res, nil
}
// Split reservations into those that are under the total release amount
// (covered) and those that exceed it (to add).
// Note that we process requests from the same wallet in batches. So some
// requests may not be included in covered if they don't match the first
// covered request's wallet.
func splitReservations(reservations []*fundRequest, releases []*fundRequest) ([]*fundRequest, []*fundRequest, abi.TokenAmount) {
toCancel := make([]*fundRequest, 0, len(reservations))
toAdd := make([]*fundRequest, 0, len(reservations))
toAddAmt := abi.NewTokenAmount(0)
// Sum release amounts
releaseAmt := abi.NewTokenAmount(0)
for _, req := range releases {
releaseAmt = types.BigAdd(releaseAmt, req.Amount())
}
// We only want to combine requests that come from the same wallet
batchWallet := address.Undef
for _, req := range reservations {
amt := req.Amount()
// If the amount to add to the reserve is cancelled out by a release
if amt.LessThanEqual(releaseAmt) {
// Cancel the request and update the release total
releaseAmt = types.BigSub(releaseAmt, amt)
toCancel = append(toCancel, req)
continue
}
// The amount to add is greater that the release total so we want
// to send an add funds request
// The first time the wallet will be undefined
if batchWallet == address.Undef {
batchWallet = req.Wallet
}
// If this request's wallet is the same as the batch wallet,
// the requests will be combined
if batchWallet == req.Wallet {
delta := types.BigSub(amt, releaseAmt)
toAddAmt = types.BigAdd(toAddAmt, delta)
releaseAmt = abi.NewTokenAmount(0)
toAdd = append(toAdd, req)
}
}
// The change in the reserved amount is "amount to add" - "amount to release"
reservedDelta := types.BigSub(toAddAmt, releaseAmt)
return toCancel, toAdd, reservedDelta
}
// process withdrawal queue
func (a *fundedAddress) processWithdrawals(withdrawals []*fundRequest) (msgCid cid.Cid, prerr error) {
// If there's an error, mark all withdrawal requests as errored
defer func() {
if prerr != nil {
for _, req := range withdrawals {
req.Complete(cid.Undef, prerr)
}
}
}()
// Get the net available balance
avail, err := a.env.AvailableFunds(a.ctx, a.state.Addr)
if err != nil {
return cid.Undef, err
}
netAvail := types.BigSub(avail, a.state.AmtReserved)
// Fit as many withdrawals as possible into the available balance, and fail
// the rest
withdrawalAmt := abi.NewTokenAmount(0)
allowedAmt := abi.NewTokenAmount(0)
allowed := make([]*fundRequest, 0, len(withdrawals))
var batchWallet address.Address
for _, req := range withdrawals {
amt := req.Amount()
if amt.IsZero() {
// If the context for the request was cancelled, bail out
req.Complete(cid.Undef, err)
continue
}
// If the amount would exceed the available amount, complete the
// request with an error
newWithdrawalAmt := types.BigAdd(withdrawalAmt, amt)
if newWithdrawalAmt.GreaterThan(netAvail) {
err := xerrors.Errorf("insufficient funds for withdrawal of %d", amt)
a.debugf("%s", err)
req.Complete(cid.Undef, err)
continue
}
// If this is the first allowed withdrawal request in this batch, save
// its wallet address
if batchWallet == address.Undef {
batchWallet = req.Wallet
}
// If the request wallet doesn't match the batch wallet, bail out
// (the withdrawal will be processed after the current batch has
// completed)
if req.Wallet != batchWallet {
continue
}
// Include this withdrawal request in the batch
withdrawalAmt = newWithdrawalAmt
a.debugf("withdraw %d", amt)
allowed = append(allowed, req)
allowedAmt = types.BigAdd(allowedAmt, amt)
}
// Check if there is anything to withdraw.
// Note that if the context for a request is cancelled,
// req.Amount() returns zero
if allowedAmt.Equals(abi.NewTokenAmount(0)) {
// Mark allowed requests as complete
for _, req := range allowed {
req.Complete(cid.Undef, nil)
}
return cid.Undef, nil
}
// Withdraw funds
a.debugf("withdraw funds %d", allowedAmt)
withdrawFundsCid, err := a.env.WithdrawFunds(a.ctx, allowed[0].Wallet, a.state.Addr, allowedAmt)
if err != nil {
return cid.Undef, err
}
// Mark allowed requests as complete
for _, req := range allowed {
req.Complete(withdrawFundsCid, nil)
}
// Save the message CID to state
return withdrawFundsCid, nil
}
// asynchonously wait for results of message
func (a *fundedAddress) startWaitForResults(msgCid cid.Cid) {
go func() {
err := a.env.WaitMsg(a.ctx, msgCid)
if err != nil {
// We don't really care about the results here, we're just waiting
// so as to only process one on-chain message at a time
log.Errorf("waiting for results of message %s for addr %s: %w", msgCid, a.state.Addr, err)
}
a.lk.Lock()
a.debugf("complete wait")
a.clearWaitState()
a.lk.Unlock()
a.process()
}()
}
func (a *fundedAddress) debugf(args ...interface{}) {
fmtStr := args[0].(string)
args = args[1:]
log.Debugf(a.state.Addr.String()+": "+fmtStr, args...)
}
// The result of a fund request
type reqResult struct {
msgCid cid.Cid
err error
}
// A request to change funds
type fundRequest struct {
ctx context.Context
amt abi.TokenAmount
completed chan struct{}
Wallet address.Address
Result chan reqResult
}
func newFundRequest(ctx context.Context, wallet address.Address, amt abi.TokenAmount) *fundRequest {
return &fundRequest{
ctx: ctx,
amt: amt,
Wallet: wallet,
Result: make(chan reqResult),
completed: make(chan struct{}),
}
}
// Amount returns zero if the context has expired
func (frp *fundRequest) Amount() abi.TokenAmount {
if frp.ctx.Err() != nil {
return abi.NewTokenAmount(0)
}
return frp.amt
}
// Complete is called with the message CID when the funds request has been
// started or with the error if there was an error
func (frp *fundRequest) Complete(msgCid cid.Cid, err error) {
select {
case <-frp.completed:
case <-frp.ctx.Done():
case frp.Result <- reqResult{msgCid: msgCid, err: err}:
}
close(frp.completed)
}
// Completed indicates if Complete has already been called
func (frp *fundRequest) Completed() bool {
select {
case <-frp.completed:
return true
default:
return false
}
}
// fundManagerEnvironment simplifies some API calls
type fundManagerEnvironment struct {
api fundManagerAPI
}
func (env *fundManagerEnvironment) AvailableFunds(ctx context.Context, addr address.Address) (abi.TokenAmount, error) {
bal, err := env.api.StateMarketBalance(ctx, addr, types.EmptyTSK)
if err != nil {
return abi.NewTokenAmount(0), err
}
return types.BigSub(bal.Escrow, bal.Locked), nil
}
func (env *fundManagerEnvironment) AddFunds(
ctx context.Context,
wallet address.Address,
addr address.Address,
amt abi.TokenAmount,
) (cid.Cid, error) {
params, err := actors.SerializeParams(&addr)
if err != nil {
return cid.Undef, err
}
smsg, aerr := env.api.MpoolPushMessage(ctx, &types.Message{
To: market.Address,
From: wallet,
Value: amt,
Method: market.Methods.AddBalance,
Params: params,
}, nil)
if aerr != nil {
return cid.Undef, aerr
}
return smsg.Cid(), nil
}
func (env *fundManagerEnvironment) WithdrawFunds(
ctx context.Context,
wallet address.Address,
addr address.Address,
amt abi.TokenAmount,
) (cid.Cid, error) {
params, err := actors.SerializeParams(&market.WithdrawBalanceParams{
ProviderOrClientAddress: addr,
Amount: amt,
})
if err != nil {
return cid.Undef, xerrors.Errorf("serializing params: %w", err)
}
smsg, aerr := env.api.MpoolPushMessage(ctx, &types.Message{
To: market.Address,
From: wallet,
Value: types.NewInt(0),
Method: market.Methods.WithdrawBalance,
Params: params,
}, nil)
if aerr != nil {
return cid.Undef, aerr
}
return smsg.Cid(), nil
}
func (env *fundManagerEnvironment) WaitMsg(ctx context.Context, c cid.Cid) error {
_, err := env.api.StateWaitMsg(ctx, c, build.MessageConfidence)
return err
}
+820
View File
@@ -0,0 +1,820 @@
package market
import (
"bytes"
"context"
"sync"
"testing"
"time"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/wallet"
tutils "github.com/filecoin-project/specs-actors/v2/support/testing"
"github.com/ipfs/go-cid"
ds "github.com/ipfs/go-datastore"
ds_sync "github.com/ipfs/go-datastore/sync"
"github.com/stretchr/testify/require"
)
// TestFundManagerBasic verifies that the basic fund manager operations work
func TestFundManagerBasic(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
// Reserve 10
// balance: 0 -> 10
// reserved: 0 -> 10
amt := abi.NewTokenAmount(10)
sentinel, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
msg := s.mockApi.getSentMessage(sentinel)
checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, amt)
s.mockApi.completeMsg(sentinel)
// Reserve 7
// balance: 10 -> 17
// reserved: 10 -> 17
amt = abi.NewTokenAmount(7)
sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
msg = s.mockApi.getSentMessage(sentinel)
checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, amt)
s.mockApi.completeMsg(sentinel)
// Release 5
// balance: 17
// reserved: 17 -> 12
amt = abi.NewTokenAmount(5)
err = s.fm.Release(s.acctAddr, amt)
require.NoError(t, err)
// Withdraw 2
// balance: 17 -> 15
// reserved: 12
amt = abi.NewTokenAmount(2)
sentinel, err = s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
msg = s.mockApi.getSentMessage(sentinel)
checkWithdrawMessageFields(t, msg, s.walletAddr, s.acctAddr, amt)
s.mockApi.completeMsg(sentinel)
// Reserve 3
// balance: 15
// reserved: 12 -> 15
// Note: reserved (15) is <= balance (15) so should not send on-chain
// message
msgCount := s.mockApi.messageCount()
amt = abi.NewTokenAmount(3)
sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
require.Equal(t, msgCount, s.mockApi.messageCount())
require.Equal(t, sentinel, cid.Undef)
// Reserve 1
// balance: 15 -> 16
// reserved: 15 -> 16
// Note: reserved (16) is above balance (15) so *should* send on-chain
// message to top up balance
amt = abi.NewTokenAmount(1)
topUp := abi.NewTokenAmount(1)
sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
s.mockApi.completeMsg(sentinel)
msg = s.mockApi.getSentMessage(sentinel)
checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, topUp)
// Withdraw 1
// balance: 16
// reserved: 16
// Note: Expect failure because there is no available balance to withdraw:
// balance - reserved = 16 - 16 = 0
amt = abi.NewTokenAmount(1)
sentinel, err = s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt)
require.Error(t, err)
}
// TestFundManagerParallel verifies that operations can be run in parallel
func TestFundManagerParallel(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
// Reserve 10
amt := abi.NewTokenAmount(10)
sentinelReserve10, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
// Wait until all the subsequent requests are queued up
queueReady := make(chan struct{})
fa := s.fm.getFundedAddress(s.acctAddr)
fa.onProcessStart(func() bool {
if len(fa.withdrawals) == 1 && len(fa.reservations) == 2 && len(fa.releases) == 1 {
close(queueReady)
return true
}
return false
})
// Withdraw 5 (should not run until after reserves / releases)
withdrawReady := make(chan error)
go func() {
amt = abi.NewTokenAmount(5)
_, err := s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt)
withdrawReady <- err
}()
reserveSentinels := make(chan cid.Cid)
// Reserve 3
go func() {
amt := abi.NewTokenAmount(3)
sentinelReserve3, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
reserveSentinels <- sentinelReserve3
}()
// Reserve 5
go func() {
amt := abi.NewTokenAmount(5)
sentinelReserve5, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
reserveSentinels <- sentinelReserve5
}()
// Release 2
go func() {
amt := abi.NewTokenAmount(2)
err = s.fm.Release(s.acctAddr, amt)
require.NoError(t, err)
}()
// Everything is queued up
<-queueReady
// Complete the "Reserve 10" message
s.mockApi.completeMsg(sentinelReserve10)
msg := s.mockApi.getSentMessage(sentinelReserve10)
checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, abi.NewTokenAmount(10))
// The other requests should now be combined and be submitted on-chain as
// a single message
rs1 := <-reserveSentinels
rs2 := <-reserveSentinels
require.Equal(t, rs1, rs2)
// Withdraw should not have been called yet, because reserve / release
// requests run first
select {
case <-withdrawReady:
require.Fail(t, "Withdraw should run after reserve / release")
default:
}
// Complete the message
s.mockApi.completeMsg(rs1)
msg = s.mockApi.getSentMessage(rs1)
// "Reserve 3" +3
// "Reserve 5" +5
// "Release 2" -2
// Result: 6
checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, abi.NewTokenAmount(6))
// Expect withdraw to fail because not enough available funds
err = <-withdrawReady
require.Error(t, err)
}
// TestFundManagerReserveByWallet verifies that reserve requests are grouped by wallet
func TestFundManagerReserveByWallet(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
walletAddrA, err := s.wllt.WalletNew(context.Background(), types.KTSecp256k1)
require.NoError(t, err)
walletAddrB, err := s.wllt.WalletNew(context.Background(), types.KTSecp256k1)
require.NoError(t, err)
// Wait until all the reservation requests are queued up
walletAQueuedUp := make(chan struct{})
queueReady := make(chan struct{})
fa := s.fm.getFundedAddress(s.acctAddr)
fa.onProcessStart(func() bool {
if len(fa.reservations) == 1 {
close(walletAQueuedUp)
}
if len(fa.reservations) == 3 {
close(queueReady)
return true
}
return false
})
type reserveResult struct {
ws cid.Cid
err error
}
results := make(chan *reserveResult)
amtA1 := abi.NewTokenAmount(1)
go func() {
// Wallet A: Reserve 1
sentinelA1, err := s.fm.Reserve(s.ctx, walletAddrA, s.acctAddr, amtA1)
results <- &reserveResult{
ws: sentinelA1,
err: err,
}
}()
amtB1 := abi.NewTokenAmount(2)
amtB2 := abi.NewTokenAmount(3)
go func() {
// Wait for reservation for wallet A to be queued up
<-walletAQueuedUp
// Wallet B: Reserve 2
go func() {
sentinelB1, err := s.fm.Reserve(s.ctx, walletAddrB, s.acctAddr, amtB1)
results <- &reserveResult{
ws: sentinelB1,
err: err,
}
}()
// Wallet B: Reserve 3
sentinelB2, err := s.fm.Reserve(s.ctx, walletAddrB, s.acctAddr, amtB2)
results <- &reserveResult{
ws: sentinelB2,
err: err,
}
}()
// All reservation requests are queued up
<-queueReady
resA := <-results
sentinelA1 := resA.ws
// Should send to wallet A
msg := s.mockApi.getSentMessage(sentinelA1)
checkAddMessageFields(t, msg, walletAddrA, s.acctAddr, amtA1)
// Complete wallet A message
s.mockApi.completeMsg(sentinelA1)
resB1 := <-results
resB2 := <-results
require.NoError(t, resB1.err)
require.NoError(t, resB2.err)
sentinelB1 := resB1.ws
sentinelB2 := resB2.ws
// Should send different message to wallet B
require.NotEqual(t, sentinelA1, sentinelB1)
// Should be single message combining amount 1 and 2
require.Equal(t, sentinelB1, sentinelB2)
msg = s.mockApi.getSentMessage(sentinelB1)
checkAddMessageFields(t, msg, walletAddrB, s.acctAddr, types.BigAdd(amtB1, amtB2))
}
// TestFundManagerWithdrawal verifies that as many withdraw operations as
// possible are processed
func TestFundManagerWithdrawalLimit(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
// Reserve 10
amt := abi.NewTokenAmount(10)
sentinelReserve10, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
// Complete the "Reserve 10" message
s.mockApi.completeMsg(sentinelReserve10)
// Release 10
err = s.fm.Release(s.acctAddr, amt)
require.NoError(t, err)
// Queue up withdraw requests
queueReady := make(chan struct{})
fa := s.fm.getFundedAddress(s.acctAddr)
withdrawalReqTotal := 3
withdrawalReqEnqueued := 0
withdrawalReqQueue := make(chan func(), withdrawalReqTotal)
fa.onProcessStart(func() bool {
// If a new withdrawal request was enqueued
if len(fa.withdrawals) > withdrawalReqEnqueued {
withdrawalReqEnqueued++
// Pop the next request and run it
select {
case fn := <-withdrawalReqQueue:
go fn()
default:
}
}
// Once all the requests have arrived, we're ready to process the queue
if withdrawalReqEnqueued == withdrawalReqTotal {
close(queueReady)
return true
}
return false
})
type withdrawResult struct {
reqIndex int
ws cid.Cid
err error
}
withdrawRes := make(chan *withdrawResult)
// Queue up three "Withdraw 5" requests
enqueuedCount := 0
for i := 0; i < withdrawalReqTotal; i++ {
withdrawalReqQueue <- func() {
idx := enqueuedCount
enqueuedCount++
amt := abi.NewTokenAmount(5)
ws, err := s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt)
withdrawRes <- &withdrawResult{reqIndex: idx, ws: ws, err: err}
}
}
// Start the first request
fn := <-withdrawalReqQueue
go fn()
// All withdrawal requests are queued up and ready to be processed
<-queueReady
// Organize results in request order
results := make([]*withdrawResult, withdrawalReqTotal)
for i := 0; i < 3; i++ {
res := <-withdrawRes
results[res.reqIndex] = res
}
// Available 10
// Withdraw 5
// Expect Success
require.NoError(t, results[0].err)
// Available 5
// Withdraw 5
// Expect Success
require.NoError(t, results[1].err)
// Available 0
// Withdraw 5
// Expect FAIL
require.Error(t, results[2].err)
// Expect withdrawal requests that fit under reserved amount to be combined
// into a single message on-chain
require.Equal(t, results[0].ws, results[1].ws)
}
// TestFundManagerWithdrawByWallet verifies that withdraw requests are grouped by wallet
func TestFundManagerWithdrawByWallet(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
walletAddrA, err := s.wllt.WalletNew(context.Background(), types.KTSecp256k1)
require.NoError(t, err)
walletAddrB, err := s.wllt.WalletNew(context.Background(), types.KTSecp256k1)
require.NoError(t, err)
// Reserve 10
reserveAmt := abi.NewTokenAmount(10)
sentinelReserve, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, reserveAmt)
require.NoError(t, err)
s.mockApi.completeMsg(sentinelReserve)
time.Sleep(10 * time.Millisecond)
// Release 10
err = s.fm.Release(s.acctAddr, reserveAmt)
require.NoError(t, err)
type withdrawResult struct {
ws cid.Cid
err error
}
results := make(chan *withdrawResult)
// Wait until withdrawals are queued up
walletAQueuedUp := make(chan struct{})
queueReady := make(chan struct{})
withdrawalCount := 0
fa := s.fm.getFundedAddress(s.acctAddr)
fa.onProcessStart(func() bool {
if len(fa.withdrawals) == withdrawalCount {
return false
}
withdrawalCount = len(fa.withdrawals)
if withdrawalCount == 1 {
close(walletAQueuedUp)
} else if withdrawalCount == 3 {
close(queueReady)
return true
}
return false
})
amtA1 := abi.NewTokenAmount(1)
go func() {
// Wallet A: Withdraw 1
sentinelA1, err := s.fm.Withdraw(s.ctx, walletAddrA, s.acctAddr, amtA1)
results <- &withdrawResult{
ws: sentinelA1,
err: err,
}
}()
amtB1 := abi.NewTokenAmount(2)
amtB2 := abi.NewTokenAmount(3)
go func() {
// Wait until withdraw for wallet A is queued up
<-walletAQueuedUp
// Wallet B: Withdraw 2
go func() {
sentinelB1, err := s.fm.Withdraw(s.ctx, walletAddrB, s.acctAddr, amtB1)
results <- &withdrawResult{
ws: sentinelB1,
err: err,
}
}()
// Wallet B: Withdraw 3
sentinelB2, err := s.fm.Withdraw(s.ctx, walletAddrB, s.acctAddr, amtB2)
results <- &withdrawResult{
ws: sentinelB2,
err: err,
}
}()
// Withdrawals are queued up
<-queueReady
// Should withdraw from wallet A first
resA1 := <-results
sentinelA1 := resA1.ws
msg := s.mockApi.getSentMessage(sentinelA1)
checkWithdrawMessageFields(t, msg, walletAddrA, s.acctAddr, amtA1)
// Complete wallet A message
s.mockApi.completeMsg(sentinelA1)
resB1 := <-results
resB2 := <-results
require.NoError(t, resB1.err)
require.NoError(t, resB2.err)
sentinelB1 := resB1.ws
sentinelB2 := resB2.ws
// Should send different message for wallet B from wallet A
require.NotEqual(t, sentinelA1, sentinelB1)
// Should be single message combining amount 1 and 2
require.Equal(t, sentinelB1, sentinelB2)
msg = s.mockApi.getSentMessage(sentinelB1)
checkWithdrawMessageFields(t, msg, walletAddrB, s.acctAddr, types.BigAdd(amtB1, amtB2))
}
// TestFundManagerRestart verifies that waiting for incomplete requests resumes
// on restart
func TestFundManagerRestart(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
acctAddr2 := tutils.NewActorAddr(t, "addr2")
// Address 1: Reserve 10
amt := abi.NewTokenAmount(10)
sentinelAddr1, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
msg := s.mockApi.getSentMessage(sentinelAddr1)
checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, amt)
// Address 2: Reserve 7
amt2 := abi.NewTokenAmount(7)
sentinelAddr2Res7, err := s.fm.Reserve(s.ctx, s.walletAddr, acctAddr2, amt2)
require.NoError(t, err)
msg2 := s.mockApi.getSentMessage(sentinelAddr2Res7)
checkAddMessageFields(t, msg2, s.walletAddr, acctAddr2, amt2)
// Complete "Address 1: Reserve 10"
s.mockApi.completeMsg(sentinelAddr1)
// Give the completed state a moment to be stored before restart
time.Sleep(time.Millisecond * 10)
// Restart
mockApiAfter := s.mockApi
fmAfter := newFundManager(mockApiAfter, s.ds)
err = fmAfter.Start()
require.NoError(t, err)
amt3 := abi.NewTokenAmount(9)
reserveSentinel := make(chan cid.Cid)
go func() {
// Address 2: Reserve 9
sentinel3, err := fmAfter.Reserve(s.ctx, s.walletAddr, acctAddr2, amt3)
require.NoError(t, err)
reserveSentinel <- sentinel3
}()
// Expect no message to be sent, because still waiting for previous
// message "Address 2: Reserve 7" to complete on-chain
select {
case <-reserveSentinel:
require.Fail(t, "Expected no message to be sent")
case <-time.After(10 * time.Millisecond):
}
// Complete "Address 2: Reserve 7"
mockApiAfter.completeMsg(sentinelAddr2Res7)
// Expect waiting message to now be sent
sentinel3 := <-reserveSentinel
msg3 := mockApiAfter.getSentMessage(sentinel3)
checkAddMessageFields(t, msg3, s.walletAddr, acctAddr2, amt3)
}
// TestFundManagerReleaseAfterPublish verifies that release is successful in
// the following scenario:
// 1. Deal A adds 5 to addr1: reserved 0 -> 5 available 0 -> 5
// 2. Deal B adds 7 to addr1: reserved 5 -> 12 available 5 -> 12
// 3. Deal B completes, reducing addr1 by 7: reserved 12 available 12 -> 5
// 4. Deal A releases 5 from addr1: reserved 12 -> 7 available 5
func TestFundManagerReleaseAfterPublish(t *testing.T) {
s := setup(t)
defer s.fm.Stop()
// Deal A: Reserve 5
// balance: 0 -> 5
// reserved: 0 -> 5
amt := abi.NewTokenAmount(5)
sentinel, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
s.mockApi.completeMsg(sentinel)
// Deal B: Reserve 7
// balance: 5 -> 12
// reserved: 5 -> 12
amt = abi.NewTokenAmount(7)
sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt)
require.NoError(t, err)
s.mockApi.completeMsg(sentinel)
// Deal B: Publish (removes Deal B amount from balance)
// balance: 12 -> 5
// reserved: 12
amt = abi.NewTokenAmount(7)
s.mockApi.publish(s.acctAddr, amt)
// Deal A: Release 5
// balance: 5
// reserved: 12 -> 7
amt = abi.NewTokenAmount(5)
err = s.fm.Release(s.acctAddr, amt)
require.NoError(t, err)
// Deal B: Release 7
// balance: 5
// reserved: 12 -> 7
amt = abi.NewTokenAmount(5)
err = s.fm.Release(s.acctAddr, amt)
require.NoError(t, err)
}
type scaffold struct {
ctx context.Context
ds *ds_sync.MutexDatastore
wllt *wallet.LocalWallet
walletAddr address.Address
acctAddr address.Address
mockApi *mockFundManagerAPI
fm *FundManager
}
func setup(t *testing.T) *scaffold {
ctx := context.Background()
wllt, err := wallet.NewWallet(wallet.NewMemKeyStore())
if err != nil {
t.Fatal(err)
}
walletAddr, err := wllt.WalletNew(context.Background(), types.KTSecp256k1)
if err != nil {
t.Fatal(err)
}
acctAddr := tutils.NewActorAddr(t, "addr")
mockApi := newMockFundManagerAPI(walletAddr)
dstore := ds_sync.MutexWrap(ds.NewMapDatastore())
fm := newFundManager(mockApi, dstore)
return &scaffold{
ctx: ctx,
ds: dstore,
wllt: wllt,
walletAddr: walletAddr,
acctAddr: acctAddr,
mockApi: mockApi,
fm: fm,
}
}
func checkAddMessageFields(t *testing.T, msg *types.Message, from address.Address, to address.Address, amt abi.TokenAmount) {
require.Equal(t, from, msg.From)
require.Equal(t, market.Address, msg.To)
require.Equal(t, amt, msg.Value)
var paramsTo address.Address
err := paramsTo.UnmarshalCBOR(bytes.NewReader(msg.Params))
require.NoError(t, err)
require.Equal(t, to, paramsTo)
}
func checkWithdrawMessageFields(t *testing.T, msg *types.Message, from address.Address, addr address.Address, amt abi.TokenAmount) {
require.Equal(t, from, msg.From)
require.Equal(t, market.Address, msg.To)
require.Equal(t, abi.NewTokenAmount(0), msg.Value)
var params market.WithdrawBalanceParams
err := params.UnmarshalCBOR(bytes.NewReader(msg.Params))
require.NoError(t, err)
require.Equal(t, addr, params.ProviderOrClientAddress)
require.Equal(t, amt, params.Amount)
}
type sentMsg struct {
msg *types.SignedMessage
ready chan struct{}
}
type mockFundManagerAPI struct {
wallet address.Address
lk sync.Mutex
escrow map[address.Address]abi.TokenAmount
sentMsgs map[cid.Cid]*sentMsg
completedMsgs map[cid.Cid]struct{}
waitingFor map[cid.Cid]chan struct{}
}
func newMockFundManagerAPI(wallet address.Address) *mockFundManagerAPI {
return &mockFundManagerAPI{
wallet: wallet,
escrow: make(map[address.Address]abi.TokenAmount),
sentMsgs: make(map[cid.Cid]*sentMsg),
completedMsgs: make(map[cid.Cid]struct{}),
waitingFor: make(map[cid.Cid]chan struct{}),
}
}
func (mapi *mockFundManagerAPI) MpoolPushMessage(ctx context.Context, message *types.Message, spec *api.MessageSendSpec) (*types.SignedMessage, error) {
mapi.lk.Lock()
defer mapi.lk.Unlock()
smsg := &types.SignedMessage{Message: *message}
mapi.sentMsgs[smsg.Cid()] = &sentMsg{msg: smsg, ready: make(chan struct{})}
return smsg, nil
}
func (mapi *mockFundManagerAPI) getSentMessage(c cid.Cid) *types.Message {
mapi.lk.Lock()
defer mapi.lk.Unlock()
for i := 0; i < 1000; i++ {
if pending, ok := mapi.sentMsgs[c]; ok {
return &pending.msg.Message
}
time.Sleep(time.Millisecond)
}
panic("expected message to be sent")
}
func (mapi *mockFundManagerAPI) messageCount() int {
mapi.lk.Lock()
defer mapi.lk.Unlock()
return len(mapi.sentMsgs)
}
func (mapi *mockFundManagerAPI) completeMsg(msgCid cid.Cid) {
mapi.lk.Lock()
pmsg, ok := mapi.sentMsgs[msgCid]
if ok {
if pmsg.msg.Message.Method == market.Methods.AddBalance {
var escrowAcct address.Address
err := escrowAcct.UnmarshalCBOR(bytes.NewReader(pmsg.msg.Message.Params))
if err != nil {
panic(err)
}
escrow := mapi.getEscrow(escrowAcct)
before := escrow
escrow = types.BigAdd(escrow, pmsg.msg.Message.Value)
mapi.escrow[escrowAcct] = escrow
log.Debugf("%s: escrow %d -> %d", escrowAcct, before, escrow)
} else {
var params market.WithdrawBalanceParams
err := params.UnmarshalCBOR(bytes.NewReader(pmsg.msg.Message.Params))
if err != nil {
panic(err)
}
escrowAcct := params.ProviderOrClientAddress
escrow := mapi.getEscrow(escrowAcct)
before := escrow
escrow = types.BigSub(escrow, params.Amount)
mapi.escrow[escrowAcct] = escrow
log.Debugf("%s: escrow %d -> %d", escrowAcct, before, escrow)
}
}
mapi.completedMsgs[msgCid] = struct{}{}
ready, ok := mapi.waitingFor[msgCid]
mapi.lk.Unlock()
if ok {
close(ready)
}
}
func (mapi *mockFundManagerAPI) StateMarketBalance(ctx context.Context, a address.Address, key types.TipSetKey) (api.MarketBalance, error) {
mapi.lk.Lock()
defer mapi.lk.Unlock()
return api.MarketBalance{
Locked: abi.NewTokenAmount(0),
Escrow: mapi.getEscrow(a),
}, nil
}
func (mapi *mockFundManagerAPI) getEscrow(a address.Address) abi.TokenAmount {
escrow := mapi.escrow[a]
if escrow.Nil() {
return abi.NewTokenAmount(0)
}
return escrow
}
func (mapi *mockFundManagerAPI) publish(addr address.Address, amt abi.TokenAmount) {
mapi.lk.Lock()
defer mapi.lk.Unlock()
escrow := mapi.escrow[addr]
if escrow.Nil() {
return
}
escrow = types.BigSub(escrow, amt)
if escrow.LessThan(abi.NewTokenAmount(0)) {
escrow = abi.NewTokenAmount(0)
}
mapi.escrow[addr] = escrow
}
func (mapi *mockFundManagerAPI) StateWaitMsg(ctx context.Context, c cid.Cid, confidence uint64) (*api.MsgLookup, error) {
res := &api.MsgLookup{
Message: c,
Receipt: types.MessageReceipt{
ExitCode: 0,
Return: nil,
},
}
ready := make(chan struct{})
mapi.lk.Lock()
_, ok := mapi.completedMsgs[c]
if !ok {
mapi.waitingFor[c] = ready
}
mapi.lk.Unlock()
if !ok {
select {
case <-ctx.Done():
case <-ready:
}
}
return res, nil
}
-168
View File
@@ -1,168 +0,0 @@
package market
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/actors/builtin/market"
"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")
// API is the dependencies need to run a fund manager
type API struct {
fx.In
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
}
// 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{},
}
}
// 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 {
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())
}
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()
defer fm.lk.Unlock()
bal, err := fm.api.StateMarketBalance(ctx, addr, types.EmptyTSK)
if err != nil {
return cid.Undef, err
}
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)
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 {
fm.available[idAddr] = avail
return cid.Undef, err
}
smsg, err := fm.api.MpoolPushMessage(ctx, &types.Message{
To: market.Address,
From: wallet,
Value: toAdd,
Method: builtin.MethodsMarket.AddBalance,
Params: params,
}, nil)
if err != nil {
fm.available[idAddr] = avail
return cid.Undef, err
}
return smsg.Cid(), nil
}
-199
View File
@@ -1,199 +0,0 @@
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/actors/builtin/market"
"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: market.Address,
From: wallet,
Value: toAdd,
Method: builtin.MethodsMarket.AddBalance,
Params: params,
}
}
type expectedResult struct {
addAmt abi.TokenAmount
shouldAdd bool
err error
cachedAvailable abi.TokenAmount
}
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,
cachedAvailable: abi.NewTokenAmount(100),
},
},
},
"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,
cachedAvailable: abi.NewTokenAmount(200),
},
{
addAmt: abi.NewTokenAmount(50),
shouldAdd: true,
err: nil,
cachedAvailable: abi.NewTokenAmount(250),
},
{
shouldAdd: false,
err: nil,
cachedAvailable: abi.NewTokenAmount(250),
},
},
},
"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"),
cachedAvailable: abi.NewTokenAmount(0),
},
},
},
"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())
}
if !expected.cachedAvailable.Nil() {
require.Equal(t, expected.cachedAvailable, fundMgr.available[addr])
}
}
})
}
}
+90
View File
@@ -0,0 +1,90 @@
package market
import (
"bytes"
cborrpc "github.com/filecoin-project/go-cbor-util"
"github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/namespace"
dsq "github.com/ipfs/go-datastore/query"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
const dsKeyAddr = "Addr"
type Store struct {
ds datastore.Batching
}
func newStore(ds dtypes.MetadataDS) *Store {
ds = namespace.Wrap(ds, datastore.NewKey("/fundmgr/"))
return &Store{
ds: ds,
}
}
// save the state to the datastore
func (ps *Store) save(state *FundedAddressState) error {
k := dskeyForAddr(state.Addr)
b, err := cborrpc.Dump(state)
if err != nil {
return err
}
return ps.ds.Put(k, b)
}
// get the state for the given address
func (ps *Store) get(addr address.Address) (*FundedAddressState, error) {
k := dskeyForAddr(addr)
data, err := ps.ds.Get(k)
if err != nil {
return nil, err
}
var state FundedAddressState
err = cborrpc.ReadCborRPC(bytes.NewReader(data), &state)
if err != nil {
return nil, err
}
return &state, nil
}
// forEach calls iter with each address in the datastore
func (ps *Store) forEach(iter func(*FundedAddressState)) error {
res, err := ps.ds.Query(dsq.Query{Prefix: dsKeyAddr})
if err != nil {
return err
}
defer res.Close() //nolint:errcheck
for {
res, ok := res.NextSync()
if !ok {
break
}
if res.Error != nil {
return err
}
var stored FundedAddressState
if err := stored.UnmarshalCBOR(bytes.NewReader(res.Value)); err != nil {
return err
}
iter(&stored)
}
return nil
}
// The datastore key used to identify the address state
func dskeyForAddr(addr address.Address) datastore.Key {
return datastore.KeyWithNamespaces([]string{dsKeyAddr, addr.String()})
}
+2 -1
View File
@@ -6,6 +6,7 @@ import (
"github.com/ipfs/go-cid"
"golang.org/x/xerrors"
"github.com/filecoin-project/lotus/chain/actors/builtin"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/go-address"
@@ -68,7 +69,7 @@ func failedGuess(msg *types.SignedMessage) int64 {
func GuessGasUsed(ctx context.Context, tsk types.TipSetKey, msg *types.SignedMessage, al ActorLookup) (int64, error) {
// MethodSend is the same in all versions.
if msg.Message.Method == builtin0.MethodSend {
if msg.Message.Method == builtin.MethodSend {
switch msg.Message.From.Protocol() {
case address.BLS:
return 1298450, nil
+68 -39
View File
@@ -59,8 +59,6 @@ var MaxUntrustedActorPendingMessages = 10
var MaxNonceGap = uint64(4)
var DefaultMaxFee = abi.TokenAmount(types.MustParseFIL("0.007"))
var (
ErrMessageTooBig = errors.New("message too big")
@@ -183,9 +181,28 @@ func ComputeMinRBF(curPrem abi.TokenAmount) abi.TokenAmount {
return types.BigAdd(minPrice, types.NewInt(1))
}
func CapGasFee(msg *types.Message, maxFee abi.TokenAmount) {
func CapGasFee(mff dtypes.DefaultMaxFeeFunc, msg *types.Message, sendSepc *api.MessageSendSpec) {
var maxFee abi.TokenAmount
if sendSepc != nil {
maxFee = sendSepc.MaxFee
}
if maxFee.Int == nil || maxFee.Equals(big.Zero()) {
mf, err := mff()
if err != nil {
log.Errorf("failed to get default max gas fee: %+v", err)
mf = big.Zero()
}
maxFee = mf
}
if maxFee.Equals(big.Zero()) {
maxFee = DefaultMaxFee
mf, err := mff()
if err != nil {
log.Errorf("failed to get default max gas fee: %+v", err)
mf = big.Zero()
}
maxFee = mf
}
gl := types.NewInt(uint64(msg.GasLimit))
@@ -236,10 +253,13 @@ func (ms *msgSet) add(m *types.SignedMessage, mp *MessagePool, strict, untrusted
// check if RBF passes
minPrice := ComputeMinRBF(exms.Message.GasPremium)
if types.BigCmp(m.Message.GasPremium, minPrice) >= 0 {
log.Infow("add with RBF", "oldpremium", exms.Message.GasPremium,
log.Debugw("add with RBF", "oldpremium", exms.Message.GasPremium,
"newpremium", m.Message.GasPremium, "addr", m.Message.From, "nonce", m.Message.Nonce)
} else {
log.Info("add with duplicate nonce")
log.Debugf("add with duplicate nonce. message from %s with nonce %d already in mpool,"+
" increase GasPremium to %s from %s to trigger replace by fee: %s",
m.Message.From, m.Message.Nonce, minPrice, m.Message.GasPremium,
ErrRBFTooLowPremium)
return false, xerrors.Errorf("message from %s with nonce %d already in mpool,"+
" increase GasPremium to %s from %s to trigger replace by fee: %w",
m.Message.From, m.Message.Nonce, minPrice, m.Message.GasPremium,
@@ -260,7 +280,7 @@ func (ms *msgSet) add(m *types.SignedMessage, mp *MessagePool, strict, untrusted
}
if strict && nonceGap {
log.Warnf("adding nonce-gapped message from %s (nonce: %d, nextNonce: %d)",
log.Debugf("adding nonce-gapped message from %s (nonce: %d, nextNonce: %d)",
m.Message.From, m.Message.Nonce, nextNonce)
}
@@ -432,9 +452,14 @@ func (mp *MessagePool) runLoop() {
}
}
func (mp *MessagePool) addLocal(m *types.SignedMessage, msgb []byte) error {
func (mp *MessagePool) addLocal(m *types.SignedMessage) error {
mp.localAddrs[m.Message.From] = struct{}{}
msgb, err := m.Serialize()
if err != nil {
return xerrors.Errorf("error serializing message: %w", err)
}
if err := mp.localMsgs.Put(datastore.NewKey(string(m.Cid().Bytes())), msgb); err != nil {
return xerrors.Errorf("persisting local message: %w", err)
}
@@ -456,7 +481,7 @@ func (mp *MessagePool) verifyMsgBeforeAdd(m *types.SignedMessage, curTs *types.T
epoch := curTs.Height()
minGas := vm.PricelistByEpoch(epoch).OnChainMessage(m.ChainLength())
if err := m.VMMessage().ValidForBlockInclusion(minGas.Total()); err != nil {
if err := m.VMMessage().ValidForBlockInclusion(minGas.Total(), build.NewestNetworkVersion); err != nil {
return false, xerrors.Errorf("message will not be included in a block: %w", err)
}
@@ -507,11 +532,6 @@ func (mp *MessagePool) Push(m *types.SignedMessage) (cid.Cid, error) {
<-mp.addSema
}()
msgb, err := m.Serialize()
if err != nil {
return cid.Undef, err
}
mp.curTsLk.Lock()
publish, err := mp.addTs(m, mp.curTs, true, false)
if err != nil {
@@ -520,18 +540,19 @@ func (mp *MessagePool) Push(m *types.SignedMessage) (cid.Cid, error) {
}
mp.curTsLk.Unlock()
mp.lk.Lock()
if err := mp.addLocal(m, msgb); err != nil {
mp.lk.Unlock()
return cid.Undef, err
}
mp.lk.Unlock()
if publish {
msgb, err := m.Serialize()
if err != nil {
return cid.Undef, xerrors.Errorf("error serializing message: %w", err)
}
err = mp.api.PubSubPublish(build.MessagesTopic(mp.netName), msgb)
if err != nil {
return cid.Undef, xerrors.Errorf("error publishing message: %w", err)
}
}
return m.Cid(), err
return m.Cid(), nil
}
func (mp *MessagePool) checkMessage(m *types.SignedMessage) error {
@@ -541,7 +562,7 @@ func (mp *MessagePool) checkMessage(m *types.SignedMessage) error {
}
// Perform syntactic validation, minGas=0 as we check the actual mingas before we add it
if err := m.Message.ValidForBlockInclusion(0); err != nil {
if err := m.Message.ValidForBlockInclusion(0, build.NewestNetworkVersion); err != nil {
return xerrors.Errorf("message not valid for block inclusion: %w", err)
}
@@ -670,7 +691,19 @@ func (mp *MessagePool) addTs(m *types.SignedMessage, curTs *types.TipSet, local,
return false, err
}
return publish, mp.addLocked(m, !local, untrusted)
err = mp.addLocked(m, !local, untrusted)
if err != nil {
return false, err
}
if local {
err = mp.addLocal(m)
if err != nil {
return false, xerrors.Errorf("error persisting local message: %w", err)
}
}
return publish, nil
}
func (mp *MessagePool) addLoaded(m *types.SignedMessage) error {
@@ -837,31 +870,27 @@ func (mp *MessagePool) PushUntrusted(m *types.SignedMessage) (cid.Cid, error) {
<-mp.addSema
}()
msgb, err := m.Serialize()
if err != nil {
return cid.Undef, err
}
mp.curTsLk.Lock()
publish, err := mp.addTs(m, mp.curTs, false, true)
publish, err := mp.addTs(m, mp.curTs, true, true)
if err != nil {
mp.curTsLk.Unlock()
return cid.Undef, err
}
mp.curTsLk.Unlock()
mp.lk.Lock()
if err := mp.addLocal(m, msgb); err != nil {
mp.lk.Unlock()
return cid.Undef, err
}
mp.lk.Unlock()
if publish {
msgb, err := m.Serialize()
if err != nil {
return cid.Undef, xerrors.Errorf("error serializing message: %w", err)
}
err = mp.api.PubSubPublish(build.MessagesTopic(mp.netName), msgb)
if err != nil {
return cid.Undef, xerrors.Errorf("error publishing message: %w", err)
}
}
return m.Cid(), err
return m.Cid(), nil
}
func (mp *MessagePool) Remove(from address.Address, nonce uint64, applied bool) {
@@ -1206,7 +1235,7 @@ func (mp *MessagePool) MessagesForBlocks(blks []*types.BlockHeader) ([]*types.Si
if smsg != nil {
out = append(out, smsg)
} else {
log.Warnf("could not recover signature for bls message %s", msg.Cid())
log.Debugf("could not recover signature for bls message %s", msg.Cid())
}
}
}
+11 -9
View File
@@ -8,16 +8,18 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
logging "github.com/ipfs/go-log/v2"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
"github.com/filecoin-project/lotus/chain/messagepool/gasguess"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/types/mock"
"github.com/filecoin-project/lotus/chain/wallet"
_ "github.com/filecoin-project/lotus/lib/sigs/bls"
_ "github.com/filecoin-project/lotus/lib/sigs/secp"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
logging "github.com/ipfs/go-log/v2"
)
func init() {
@@ -142,7 +144,7 @@ func (tma *testMpoolAPI) GetActorAfter(addr address.Address, ts *types.TipSet) (
}
return &types.Actor{
Code: builtin.StorageMarketActorCodeID,
Code: builtin2.StorageMarketActorCodeID,
Nonce: nonce,
Balance: balance,
}, nil
@@ -449,7 +451,7 @@ func TestLoadLocal(t *testing.T) {
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
msgs := make(map[cid.Cid]struct{})
for i := 0; i < 10; i++ {
m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1))
@@ -521,7 +523,7 @@ func TestClearAll(t *testing.T) {
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
for i := 0; i < 10; i++ {
m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1))
_, err := mp.Push(m)
@@ -576,7 +578,7 @@ func TestClearNonLocal(t *testing.T) {
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
for i := 0; i < 10; i++ {
m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1))
_, err := mp.Push(m)
@@ -642,7 +644,7 @@ func TestUpdates(t *testing.T) {
t.Fatal(err)
}
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
+15 -1
View File
@@ -2,6 +2,7 @@ package messagepool
import (
"context"
"time"
"github.com/ipfs/go-cid"
pubsub "github.com/libp2p/go-libp2p-pubsub"
@@ -9,9 +10,16 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/store"
"github.com/filecoin-project/lotus/chain/types"
)
var (
HeadChangeCoalesceMinDelay = 2 * time.Second
HeadChangeCoalesceMaxDelay = 6 * time.Second
HeadChangeCoalesceMergeInterval = time.Second
)
type Provider interface {
SubscribeHeadChanges(func(rev, app []*types.TipSet) error) *types.TipSet
PutMessage(m types.ChainMsg) (cid.Cid, error)
@@ -34,7 +42,13 @@ func NewProvider(sm *stmgr.StateManager, ps *pubsub.PubSub) Provider {
}
func (mpp *mpoolProvider) SubscribeHeadChanges(cb func(rev, app []*types.TipSet) error) *types.TipSet {
mpp.sm.ChainStore().SubscribeHeadChanges(cb)
mpp.sm.ChainStore().SubscribeHeadChanges(
store.WrapHeadChangeCoalescer(
cb,
HeadChangeCoalesceMinDelay,
HeadChangeCoalesceMaxDelay,
HeadChangeCoalesceMergeInterval,
))
return mpp.sm.ChainStore().GetHeaviestTipSet()
}
+2 -2
View File
@@ -100,7 +100,7 @@ loop:
// check the baseFee lower bound -- only republish messages that can be included in the chain
// within the next 20 blocks.
for _, m := range chain.msgs {
if !allowNegativeChains(ts.Height()) && m.Message.GasFeeCap.LessThan(baseFeeLowerBound) {
if m.Message.GasFeeCap.LessThan(baseFeeLowerBound) {
chain.Invalidate()
continue loop
}
@@ -115,7 +115,7 @@ loop:
// we can't fit the current chain but there is gas to spare
// trim it and push it down
chain.Trim(gasLimit, mp, baseFee, true)
chain.Trim(gasLimit, mp, baseFee)
for j := i; j < len(chains)-1; j++ {
if chains[j].Before(chains[j+1]) {
break
+5 -3
View File
@@ -5,11 +5,13 @@ import (
"testing"
"time"
"github.com/ipfs/go-datastore"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
"github.com/filecoin-project/lotus/chain/messagepool/gasguess"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/wallet"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/ipfs/go-datastore"
)
func TestRepubMessages(t *testing.T) {
@@ -48,7 +50,7 @@ func TestRepubMessages(t *testing.T) {
t.Fatal(err)
}
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
+37 -31
View File
@@ -10,8 +10,8 @@ import (
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
tbig "github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/messagepool/gasguess"
"github.com/filecoin-project/lotus/chain/types"
@@ -20,11 +20,7 @@ import (
var bigBlockGasLimit = big.NewInt(build.BlockGasLimit)
// this is *temporary* mutilation until we have implemented uncapped miner penalties -- it will go
// away in the next fork.
func allowNegativeChains(epoch abi.ChainEpoch) bool {
return epoch < build.UpgradeBreezeHeight+5
}
var MaxBlockMessages = 16000
const MaxBlocks = 15
@@ -42,7 +38,7 @@ type msgChain struct {
prev *msgChain
}
func (mp *MessagePool) SelectMessages(ts *types.TipSet, tq float64) ([]*types.SignedMessage, error) {
func (mp *MessagePool) SelectMessages(ts *types.TipSet, tq float64) (msgs []*types.SignedMessage, err error) {
mp.curTsLk.Lock()
defer mp.curTsLk.Unlock()
@@ -53,10 +49,20 @@ func (mp *MessagePool) SelectMessages(ts *types.TipSet, tq float64) ([]*types.Si
// than any other block, then we don't bother with optimal selection because the
// first block will always have higher effective performance
if tq > 0.84 {
return mp.selectMessagesGreedy(mp.curTs, ts)
msgs, err = mp.selectMessagesGreedy(mp.curTs, ts)
} else {
msgs, err = mp.selectMessagesOptimal(mp.curTs, ts, tq)
}
return mp.selectMessagesOptimal(mp.curTs, ts, tq)
if err != nil {
return nil, err
}
if len(msgs) > MaxBlockMessages {
msgs = msgs[:MaxBlockMessages]
}
return msgs, nil
}
func (mp *MessagePool) selectMessagesOptimal(curTs, ts *types.TipSet, tq float64) ([]*types.SignedMessage, error) {
@@ -108,7 +114,7 @@ func (mp *MessagePool) selectMessagesOptimal(curTs, ts *types.TipSet, tq float64
return chains[i].Before(chains[j])
})
if !allowNegativeChains(curTs.Height()) && len(chains) != 0 && chains[0].gasPerf < 0 {
if len(chains) != 0 && chains[0].gasPerf < 0 {
log.Warnw("all messages in mpool have non-positive gas performance", "bestGasPerf", chains[0].gasPerf)
return result, nil
}
@@ -161,7 +167,7 @@ func (mp *MessagePool) selectMessagesOptimal(curTs, ts *types.TipSet, tq float64
last := len(chains)
for i, chain := range chains {
// did we run out of performing chains?
if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
break
}
@@ -227,7 +233,7 @@ tailLoop:
for gasLimit >= minGas && last < len(chains) {
// trim if necessary
if chains[last].gasLimit > gasLimit {
chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains(curTs.Height()))
chains[last].Trim(gasLimit, mp, baseFee)
}
// push down if it hasn't been invalidated
@@ -253,7 +259,7 @@ tailLoop:
}
// if gasPerf < 0 we have no more profitable chains
if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
break tailLoop
}
@@ -294,7 +300,7 @@ tailLoop:
}
// dependencies fit, just trim it
chain.Trim(gasLimit-depGasLimit, mp, baseFee, allowNegativeChains(curTs.Height()))
chain.Trim(gasLimit-depGasLimit, mp, baseFee)
last += i
continue tailLoop
}
@@ -327,7 +333,7 @@ tailLoop:
}
// is it negative?
if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
continue
}
@@ -349,7 +355,7 @@ tailLoop:
// do they fit as is? if it doesn't, trim to make it fit if possible
if chainGasLimit > gasLimit {
chain.Trim(gasLimit-depGasLimit, mp, baseFee, allowNegativeChains(curTs.Height()))
chain.Trim(gasLimit-depGasLimit, mp, baseFee)
if !chain.valid {
continue
@@ -432,7 +438,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S
return chains[i].Before(chains[j])
})
if !allowNegativeChains(curTs.Height()) && len(chains) != 0 && chains[0].gasPerf < 0 {
if len(chains) != 0 && chains[0].gasPerf < 0 {
log.Warnw("all messages in mpool have non-positive gas performance", "bestGasPerf", chains[0].gasPerf)
return result, nil
}
@@ -443,7 +449,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S
last := len(chains)
for i, chain := range chains {
// did we run out of performing chains?
if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
break
}
@@ -472,7 +478,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S
tailLoop:
for gasLimit >= minGas && last < len(chains) {
// trim
chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains(curTs.Height()))
chains[last].Trim(gasLimit, mp, baseFee)
// push down if it hasn't been invalidated
if chains[last].valid {
@@ -492,7 +498,7 @@ tailLoop:
}
// if gasPerf < 0 we have no more profitable chains
if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
break tailLoop
}
@@ -554,7 +560,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui
return chains[i].Before(chains[j])
})
if !allowNegativeChains(ts.Height()) && len(chains) != 0 && chains[0].gasPerf < 0 {
if len(chains) != 0 && chains[0].gasPerf < 0 {
log.Warnw("all priority messages in mpool have negative gas performance", "bestGasPerf", chains[0].gasPerf)
return nil, gasLimit
}
@@ -562,7 +568,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui
// 3. Merge chains until the block limit, as long as they have non-negative gas performance
last := len(chains)
for i, chain := range chains {
if !allowNegativeChains(ts.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
break
}
@@ -580,7 +586,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui
tailLoop:
for gasLimit >= minGas && last < len(chains) {
// trim, discarding negative performing messages
chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains(ts.Height()))
chains[last].Trim(gasLimit, mp, baseFee)
// push down if it hasn't been invalidated
if chains[last].valid {
@@ -600,7 +606,7 @@ tailLoop:
}
// if gasPerf < 0 we have no more profitable chains
if !allowNegativeChains(ts.Height()) && chain.gasPerf < 0 {
if chain.gasPerf < 0 {
break tailLoop
}
@@ -676,6 +682,10 @@ func (*MessagePool) getGasReward(msg *types.SignedMessage, baseFee types.BigInt)
}
gasReward := tbig.Mul(maxPremium, types.NewInt(uint64(msg.Message.GasLimit)))
if gasReward.Sign() == -1 {
// penalty multiplier
gasReward = tbig.Mul(gasReward, types.NewInt(3))
}
return gasReward.Int
}
@@ -751,11 +761,7 @@ func (mp *MessagePool) createMessageChains(actor address.Address, mset map[uint6
balance = new(big.Int).Sub(balance, required)
value := m.Message.Value.Int
if balance.Cmp(value) >= 0 {
// Note: we only account for the value if the balance doesn't drop below 0
// otherwise the message will fail and the miner can reap the gas rewards
balance = new(big.Int).Sub(balance, value)
}
balance = new(big.Int).Sub(balance, value)
gasReward := mp.getGasReward(m, baseFee)
rewards = append(rewards, gasReward)
@@ -858,9 +864,9 @@ func (mc *msgChain) Before(other *msgChain) bool {
(mc.gasPerf == other.gasPerf && mc.gasReward.Cmp(other.gasReward) > 0)
}
func (mc *msgChain) Trim(gasLimit int64, mp *MessagePool, baseFee types.BigInt, allowNegative bool) {
func (mc *msgChain) Trim(gasLimit int64, mp *MessagePool, baseFee types.BigInt) {
i := len(mc.msgs) - 1
for i >= 0 && (mc.gasLimit > gasLimit || (!allowNegative && mc.gasPerf < 0)) {
for i >= 0 && (mc.gasLimit > gasLimit || mc.gasPerf < 0) {
gasReward := mp.getGasReward(mc.msgs[i], baseFee)
mc.gasReward = new(big.Int).Sub(mc.gasReward, gasReward)
mc.gasLimit -= mc.msgs[i].Message.GasLimit
+19 -17
View File
@@ -13,17 +13,18 @@ import (
"sort"
"testing"
"github.com/filecoin-project/go-address"
"github.com/ipfs/go-cid"
"github.com/ipfs/go-datastore"
logging "github.com/ipfs/go-log"
"github.com/filecoin-project/go-address"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/messagepool/gasguess"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/types/mock"
"github.com/filecoin-project/lotus/chain/wallet"
"github.com/filecoin-project/specs-actors/actors/builtin"
"github.com/filecoin-project/lotus/api"
_ "github.com/filecoin-project/lotus/lib/sigs/bls"
@@ -94,7 +95,7 @@ func TestMessageChains(t *testing.T) {
block := tma.nextBlock()
ts := mock.TipSet(block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
@@ -332,7 +333,7 @@ func TestMessageChainSkipping(t *testing.T) {
block := tma.nextBlock()
ts := mock.TipSet(block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
baseFee := types.NewInt(0)
tma.setBalance(a1, 1) // in FIL
@@ -409,7 +410,7 @@ func TestBasicMessageSelection(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -553,7 +554,7 @@ func TestMessageSelectionTrimming(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -616,7 +617,7 @@ func TestPriorityMessageSelection(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -695,7 +696,7 @@ func TestPriorityMessageSelection2(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -735,8 +736,6 @@ func TestPriorityMessageSelection2(t *testing.T) {
}
func TestPriorityMessageSelection3(t *testing.T) {
t.Skip("reenable after removing allow negative")
mp, tma := makeTestMpool()
// the actors
@@ -764,7 +763,7 @@ func TestPriorityMessageSelection3(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -861,7 +860,7 @@ func TestOptimalMessageSelection1(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -928,7 +927,7 @@ func TestOptimalMessageSelection2(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
tma.setBalance(a1, 1) // in FIL
tma.setBalance(a2, 1) // in FIL
@@ -1006,7 +1005,7 @@ func TestOptimalMessageSelection3(t *testing.T) {
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
for _, a := range actors {
tma.setBalance(a, 1) // in FIL
@@ -1086,7 +1085,7 @@ func testCompetitiveMessageSelection(t *testing.T, rng *rand.Rand, getPremium fu
ts := mock.TipSet(block)
tma.applyBlock(t, block)
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin.StorageMarketActorCodeID, M: 2}]
gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}]
baseFee := types.NewInt(0)
for _, a := range actors {
@@ -1240,6 +1239,9 @@ func TestCompetitiveMessageSelectionExp(t *testing.T) {
}
func TestCompetitiveMessageSelectionZipf(t *testing.T) {
if testing.Short() {
t.Skip("skipping in short mode")
}
var capacityBoost, rewardBoost, tqReward float64
seeds := []int64{1947, 1976, 2020, 2100, 10000, 143324, 432432, 131, 32, 45}
for _, seed := range seeds {
@@ -1267,9 +1269,9 @@ func TestGasReward(t *testing.T) {
GasReward int64
}{
{Premium: 100, FeeCap: 200, BaseFee: 100, GasReward: 100},
{Premium: 100, FeeCap: 200, BaseFee: 210, GasReward: -10},
{Premium: 100, FeeCap: 200, BaseFee: 210, GasReward: -10 * 3},
{Premium: 200, FeeCap: 250, BaseFee: 210, GasReward: 40},
{Premium: 200, FeeCap: 250, BaseFee: 2000, GasReward: -1750},
{Premium: 200, FeeCap: 250, BaseFee: 2000, GasReward: -1750 * 3},
}
mp := new(MessagePool)
+14 -14
View File
@@ -10,7 +10,7 @@ import (
address "github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/specs-actors/actors/builtin"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/types"
@@ -18,7 +18,7 @@ import (
func BenchmarkStateTreeSet(b *testing.B) {
cst := cbor.NewMemCborStore()
st, err := NewStateTree(cst, VersionForNetwork(build.NewestNetworkVersion))
st, err := NewStateTree(cst, types.StateTreeVersion1)
if err != nil {
b.Fatal(err)
}
@@ -33,8 +33,8 @@ func BenchmarkStateTreeSet(b *testing.B) {
}
err = st.SetActor(a, &types.Actor{
Balance: types.NewInt(1258812523),
Code: builtin.StorageMinerActorCodeID,
Head: builtin.AccountActorCodeID,
Code: builtin2.StorageMinerActorCodeID,
Head: builtin2.AccountActorCodeID,
Nonce: uint64(i),
})
if err != nil {
@@ -60,8 +60,8 @@ func BenchmarkStateTreeSetFlush(b *testing.B) {
}
err = st.SetActor(a, &types.Actor{
Balance: types.NewInt(1258812523),
Code: builtin.StorageMinerActorCodeID,
Head: builtin.AccountActorCodeID,
Code: builtin2.StorageMinerActorCodeID,
Head: builtin2.AccountActorCodeID,
Nonce: uint64(i),
})
if err != nil {
@@ -183,8 +183,8 @@ func BenchmarkStateTree10kGetActor(b *testing.B) {
}
err = st.SetActor(a, &types.Actor{
Balance: types.NewInt(1258812523 + uint64(i)),
Code: builtin.StorageMinerActorCodeID,
Head: builtin.AccountActorCodeID,
Code: builtin2.StorageMinerActorCodeID,
Head: builtin2.AccountActorCodeID,
Nonce: uint64(i),
})
if err != nil {
@@ -226,8 +226,8 @@ func TestSetCache(t *testing.T) {
act := &types.Actor{
Balance: types.NewInt(0),
Code: builtin.StorageMinerActorCodeID,
Head: builtin.AccountActorCodeID,
Code: builtin2.StorageMinerActorCodeID,
Head: builtin2.AccountActorCodeID,
Nonce: 0,
}
@@ -270,7 +270,7 @@ func TestSnapshots(t *testing.T) {
t.Fatal(err)
}
if err := st.SetActor(addrs[0], &types.Actor{Code: builtin.AccountActorCodeID, Head: builtin.AccountActorCodeID, Balance: types.NewInt(55)}); err != nil {
if err := st.SetActor(addrs[0], &types.Actor{Code: builtin2.AccountActorCodeID, Head: builtin2.AccountActorCodeID, Balance: types.NewInt(55)}); err != nil {
t.Fatal(err)
}
@@ -279,7 +279,7 @@ func TestSnapshots(t *testing.T) {
t.Fatal(err)
}
if err := st.SetActor(addrs[1], &types.Actor{Code: builtin.AccountActorCodeID, Head: builtin.AccountActorCodeID, Balance: types.NewInt(77)}); err != nil {
if err := st.SetActor(addrs[1], &types.Actor{Code: builtin2.AccountActorCodeID, Head: builtin2.AccountActorCodeID, Balance: types.NewInt(77)}); err != nil {
t.Fatal(err)
}
@@ -290,7 +290,7 @@ func TestSnapshots(t *testing.T) {
}
// more operations in top level call...
if err := st.SetActor(addrs[2], &types.Actor{Code: builtin.AccountActorCodeID, Head: builtin.AccountActorCodeID, Balance: types.NewInt(123)}); err != nil {
if err := st.SetActor(addrs[2], &types.Actor{Code: builtin2.AccountActorCodeID, Head: builtin2.AccountActorCodeID, Balance: types.NewInt(123)}); err != nil {
t.Fatal(err)
}
@@ -299,7 +299,7 @@ func TestSnapshots(t *testing.T) {
t.Fatal(err)
}
if err := st.SetActor(addrs[3], &types.Actor{Code: builtin.AccountActorCodeID, Head: builtin.AccountActorCodeID, Balance: types.NewInt(5)}); err != nil {
if err := st.SetActor(addrs[3], &types.Actor{Code: builtin2.AccountActorCodeID, Head: builtin2.AccountActorCodeID, Balance: types.NewInt(5)}); err != nil {
t.Fatal(err)
}
+2
View File
@@ -64,6 +64,7 @@ func (sm *StateManager) Call(ctx context.Context, msg *types.Message, ts *types.
CircSupplyCalc: sm.GetVMCirculatingSupply,
NtwkVersion: sm.GetNtwkVersion,
BaseFee: types.NewInt(0),
LookbackState: LookbackStateGetterForTipset(sm, ts),
}
vmi, err := sm.newVM(ctx, vmopt)
@@ -178,6 +179,7 @@ func (sm *StateManager) CallWithGas(ctx context.Context, msg *types.Message, pri
CircSupplyCalc: sm.GetVMCirculatingSupply,
NtwkVersion: sm.GetNtwkVersion,
BaseFee: ts.Blocks()[0].ParentBaseFee,
LookbackState: LookbackStateGetterForTipset(sm, ts),
}
vmi, err := sm.newVM(ctx, vmopt)
if err != nil {

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