From cc233c6956827c6ab30582cdd30a27c175a29061 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Mon, 20 Apr 2020 09:53:19 -0700 Subject: [PATCH 01/38] add an lru caching blockstore --- lib/cachebs/cachebs.go | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 lib/cachebs/cachebs.go diff --git a/lib/cachebs/cachebs.go b/lib/cachebs/cachebs.go new file mode 100644 index 000000000..2c00afff2 --- /dev/null +++ b/lib/cachebs/cachebs.go @@ -0,0 +1,78 @@ +package cachebs + +import ( + "context" + + lru "github.com/hashicorp/golang-lru" + block "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + bstore "github.com/ipfs/go-ipfs-blockstore" + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("cachebs") + +type CacheBS struct { + cache *lru.ARCCache + bs bstore.Blockstore +} + +func NewBufferedBstore(base blockstore.Blockstore, size int) *CacheBS { + c, err := lru.NewARC(size) + if err != nil { + panic(err) + } + return &CacheBS{ + cache: c, + bs: base, + } +} + +var _ (bstore.Blockstore) = &CacheBS{} + +func (bs *CacheBS) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + return bs.bs.AllKeysChan(ctx) +} + +func (bs *CacheBS) DeleteBlock(c cid.Cid) error { + return bs.bs.DeleteBlock(c) +} + +func (bs *CacheBS) Get(c cid.Cid) (block.Block, error) { + v, ok := bs.cache.Get(c) + if ok { + return v.(block.Block), nil + } + + return bs.bs.Get(c) +} + +func (bs *CacheBS) GetSize(c cid.Cid) (int, error) { + return bs.bs.GetSize(c) +} + +func (bs *CacheBS) Put(blk block.Block) error { + bs.cache.Add(blk.Cid(), blk) + + return bs.bs.Put(blk) +} + +func (bs *CacheBS) Has(c cid.Cid) (bool, error) { + if bs.cache.Contains(c) { + return true, nil + } + + return bs.bs.Has(c) +} + +func (bs *CacheBS) HashOnRead(hor bool) { + bs.bs.HashOnRead(hor) +} + +func (bs *CacheBS) PutMany(blks []block.Block) error { + for _, blk := range blks { + bs.cache.Add(blk.Cid(), blk) + } + return bs.bs.PutMany(blks) +} From 94555ea8c103c5750f100223136d38467df83821 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Wed, 22 Apr 2020 12:04:03 -0700 Subject: [PATCH 02/38] delete block should delete from cache too --- lib/cachebs/cachebs.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/cachebs/cachebs.go b/lib/cachebs/cachebs.go index 2c00afff2..11152e7c5 100644 --- a/lib/cachebs/cachebs.go +++ b/lib/cachebs/cachebs.go @@ -36,6 +36,8 @@ func (bs *CacheBS) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { } func (bs *CacheBS) DeleteBlock(c cid.Cid) error { + bs.cache.Remove(c) + return bs.bs.DeleteBlock(c) } From bac1e3f9012918b3d4704a1a93e17e4553c4ecba Mon Sep 17 00:00:00 2001 From: Jeromy Date: Fri, 29 May 2020 15:15:59 -0700 Subject: [PATCH 03/38] put blocks in cache after get --- lib/cachebs/cachebs.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/cachebs/cachebs.go b/lib/cachebs/cachebs.go index 11152e7c5..5d997137d 100644 --- a/lib/cachebs/cachebs.go +++ b/lib/cachebs/cachebs.go @@ -47,7 +47,13 @@ func (bs *CacheBS) Get(c cid.Cid) (block.Block, error) { return v.(block.Block), nil } - return bs.bs.Get(c) + out, err := bs.bs.Get(c) + if err != nil { + return nil, err + } + + bs.cache.Add(c, out) + return out, nil } func (bs *CacheBS) GetSize(c cid.Cid) (int, error) { From 5b9baba9004329f9d24345ccfd5afb946bfc8fa3 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Jul 2020 18:38:59 +0800 Subject: [PATCH 04/38] fix issue 2304: ux improvements --- .circleci/config.yml | 8 +- .github/ISSUE_TEMPLATE/sealingfailed.md | 4 +- .gitignore | 15 +- Makefile | 116 ++--- cli/cmd.go | 2 +- cmd/lotus-fountain/site/wait.html | 2 +- cmd/lotus-seal-worker/main.go | 16 +- cmd/lotus-storage-miner/init.go | 8 +- cmd/lotus-storage-miner/main.go | 8 +- cmd/lotus-storage-miner/run.go | 6 +- cmd/lotus-storage-miner/storage.go | 2 +- documentation/en/.glossary.json | 2 +- documentation/en/api.md | 2 +- .../en/dev/WIP-arch-complementary-notes.md | 2 +- documentation/en/faqs.md | 2 +- documentation/en/local-dev-net.md | 4 +- documentation/en/miner-deals.md | 2 +- documentation/en/mining-lotus-seal-worker.md | 8 +- documentation/en/mining-troubleshooting.md | 6 +- documentation/en/mining.md | 16 +- documentation/en/setting-a-static-port.md | 2 +- .../en/storing-data-troubleshooting.md | 2 +- lotuspond/front/package-lock.json | 452 +++++++++--------- lotuspond/front/src/StorageNode.js | 2 +- lotuspond/main.go | 6 +- lotuspond/spawn.go | 10 +- .../{lotus-storage-miner => lotus-miner} | 2 +- scripts/build-bundle.sh | 2 +- scripts/deploy-bootstrapper.sh | 4 +- scripts/deploy-miner.sh | 4 +- scripts/deploy-node.sh | 8 +- scripts/dev/sminer-init | 2 +- scripts/devnet.bash | 30 +- scripts/init-network.sh | 8 +- ...watch.service => lotus-chainwatch.service} | 2 +- scripts/lotus-miner.service | 2 +- scripts/miner-mon.sh | 6 +- scripts/quick-network-join.bash | 28 +- scripts/setup-host.sh | 2 +- .../{lotus-storage-miner => lotus-miner} | 2 +- 40 files changed, 404 insertions(+), 403 deletions(-) rename scripts/bash-completion/{lotus-storage-miner => lotus-miner} (83%) rename scripts/{chainwatch.service => lotus-chainwatch.service} (87%) rename scripts/zsh-completion/{lotus-storage-miner => lotus-miner} (86%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0c4f29c87..54161a714 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -93,10 +93,10 @@ jobs: - store_artifacts: path: lotus - store_artifacts: - path: lotus-storage-miner + path: lotus-miner - store_artifacts: path: lotus-seal-worker - - run: mkdir linux && mv lotus lotus-storage-miner lotus-seal-worker linux/ + - run: mkdir linux && mv lotus lotus-miner lotus-seal-worker linux/ - persist_to_workspace: root: "." paths: @@ -223,10 +223,10 @@ jobs: - store_artifacts: path: lotus - store_artifacts: - path: lotus-storage-miner + path: lotus-miner - store_artifacts: path: lotus-seal-worker - - run: mkdir darwin && mv lotus lotus-storage-miner lotus-seal-worker darwin/ + - run: mkdir darwin && mv lotus lotus-miner lotus-seal-worker darwin/ - persist_to_workspace: root: "." paths: diff --git a/.github/ISSUE_TEMPLATE/sealingfailed.md b/.github/ISSUE_TEMPLATE/sealingfailed.md index d58664415..5355db10f 100644 --- a/.github/ISSUE_TEMPLATE/sealingfailed.md +++ b/.github/ISSUE_TEMPLATE/sealingfailed.md @@ -19,11 +19,11 @@ Including what commands you ran, and a description of your setup, is very helpfu **Sectors list** -The output of `./lotus-storage-miner sectors list`. +The output of `./lotus-miner sectors list`. **Sectors status** -The output of `./lotus-storage-miner sectors status --log ` for the failed sector(s). +The output of `./lotus-miner sectors status --log ` for the failed sector(s). **Lotus storage miner logs** diff --git a/.gitignore b/.gitignore index fce23289f..af1c1d5c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,21 @@ /lotus -/lotus-storage-miner +/lotus-miner /lotus-seal-worker /lotus-seed /lotus-health +/lotus-chainwatch /lotus-shed -/pond -/townhall -/fountain -/stats -/bench +/lotus-pond +/lotus-townhall +/lotus-fountain +/lotus-stats +/lotus-bench /bench.json /lotuspond/front/node_modules /lotuspond/front/build /cmd/lotus-townhall/townhall/node_modules /cmd/lotus-townhall/townhall/build +/cmd/lotus-townhall/townhall/package-lock.json extern/filecoin-ffi/rust/target **/*.a **/*.pc @@ -24,7 +26,6 @@ build/paramfetch.sh /vendor /blocks.dot /blocks.svg -/chainwatch /chainwatch.db /bundle /darwin diff --git a/Makefile b/Makefile index 4533cc4dc..88961b8f7 100644 --- a/Makefile +++ b/Makefile @@ -58,10 +58,10 @@ deps: $(BUILD_DEPS) .PHONY: deps debug: GOFLAGS+=-tags=debug -debug: lotus lotus-storage-miner lotus-seal-worker lotus-seed +debug: lotus lotus-miner lotus-seal-worker lotus-seed 2k: GOFLAGS+=-tags=2k -2k: lotus lotus-storage-miner lotus-seal-worker lotus-seed +2k: lotus lotus-miner lotus-seal-worker lotus-seed lotus: $(BUILD_DEPS) rm -f lotus @@ -71,12 +71,12 @@ lotus: $(BUILD_DEPS) .PHONY: lotus BINS+=lotus -lotus-storage-miner: $(BUILD_DEPS) - rm -f lotus-storage-miner - go build $(GOFLAGS) -o lotus-storage-miner ./cmd/lotus-storage-miner - go run github.com/GeertJohan/go.rice/rice append --exec lotus-storage-miner -i ./build -.PHONY: lotus-storage-miner -BINS+=lotus-storage-miner +lotus-miner: $(BUILD_DEPS) + rm -f lotus-miner + go build $(GOFLAGS) -o lotus-miner ./cmd/lotus-storage-miner + go run github.com/GeertJohan/go.rice/rice append --exec lotus-miner -i ./build +.PHONY: lotus-miner +BINS+=lotus-miner lotus-seal-worker: $(BUILD_DEPS) rm -f lotus-seal-worker @@ -92,7 +92,7 @@ lotus-shed: $(BUILD_DEPS) .PHONY: lotus-shed BINS+=lotus-shed -build: lotus lotus-storage-miner lotus-seal-worker +build: lotus lotus-miner lotus-seal-worker @[[ $$(type -P "lotus") ]] && echo "Caution: you have \ an existing lotus binary in your PATH. This may cause problems if you don't run 'sudo make install'" || true @@ -100,7 +100,7 @@ an existing lotus binary in your PATH. This may cause problems if you don't run install: install -C ./lotus /usr/local/bin/lotus - install -C ./lotus-storage-miner /usr/local/bin/lotus-storage-miner + install -C ./lotus-miner /usr/local/bin/lotus-miner install -C ./lotus-seal-worker /usr/local/bin/lotus-seal-worker install-services: install @@ -115,7 +115,7 @@ install-services: install clean-services: rm -f /usr/local/lib/systemd/system/lotus-daemon.service rm -f /usr/local/lib/systemd/system/lotus-miner.service - rm -f /usr/local/lib/systemd/system/chainwatch.service + rm -f /usr/local/lib/systemd/system/lotus-chainwatch.service systemctl daemon-reload # TOOLS @@ -134,68 +134,68 @@ benchmarks: @curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}" .PHONY: benchmarks -pond: 2k - go build -o pond ./lotuspond +lotus-pond: 2k + go build -o lotus-pond ./lotuspond (cd lotuspond/front && npm i && CI=false npm run build) -.PHONY: pond -BINS+=pond +.PHONY: lotus-pond +BINS+=lotus-pond -townhall: - rm -f townhall - go build -o townhall ./cmd/lotus-townhall +lotus-townhall: + rm -f lotus-townhall + go build -o lotus-townhall ./cmd/lotus-townhall (cd ./cmd/lotus-townhall/townhall && npm i && npm run build) - go run github.com/GeertJohan/go.rice/rice append --exec townhall -i ./cmd/lotus-townhall -i ./build -.PHONY: townhall -BINS+=townhall + go run github.com/GeertJohan/go.rice/rice append --exec lotus-townhall -i ./cmd/lotus-townhall -i ./build +.PHONY: lotus-townhall +BINS+=lotus-townhall -fountain: - rm -f fountain - go build -o fountain ./cmd/lotus-fountain - go run github.com/GeertJohan/go.rice/rice append --exec fountain -i ./cmd/lotus-fountain -i ./build -.PHONY: fountain -BINS+=fountain +lotus-fountain: + rm -f lotus-fountain + go build -o lotus-fountain ./cmd/lotus-fountain + go run github.com/GeertJohan/go.rice/rice append --exec lotus-fountain -i ./cmd/lotus-fountain -i ./build +.PHONY: lotus-fountain +BINS+=lotus-fountain -chainwatch: - rm -f chainwatch - go build -o chainwatch ./cmd/lotus-chainwatch - go run github.com/GeertJohan/go.rice/rice append --exec chainwatch -i ./cmd/lotus-chainwatch -i ./build -.PHONY: chainwatch -BINS+=chainwatch +lotus-chainwatch: + rm -f lotus-chainwatch + go build -o lotus-chainwatch ./cmd/lotus-chainwatch + go run github.com/GeertJohan/go.rice/rice append --exec lotus-chainwatch -i ./cmd/lotus-chainwatch -i ./build +.PHONY: lotus-chainwatch +BINS+=lotus-chainwatch install-chainwatch-service: chainwatch - install -C ./chainwatch /usr/local/bin/chainwatch - install -C -m 0644 ./scripts/chainwatch.service /usr/local/lib/systemd/system/chainwatch.service + mkdir -p /etc/lotus + install -C ./lotus-chainwatch /usr/local/bin/lotus-chainwatch + install -C -m 0644 ./scripts/lotus-chainwatch.service /usr/local/lib/systemd/system/lotus-chainwatch.service systemctl daemon-reload @echo @echo "chainwatch installed. Don't forget to 'systemctl enable chainwatch' for it to be enabled on startup." -bench: - rm -f bench - go build -o bench ./cmd/lotus-bench - go run github.com/GeertJohan/go.rice/rice append --exec bench -i ./build -.PHONY: bench -BINS+=bench +lotus-bench: + rm -f lotus-bench + go build -o lotus-bench ./cmd/lotus-bench + go run github.com/GeertJohan/go.rice/rice append --exec lotus-bench -i ./build +.PHONY: lotus-bench +BINS+=lotus-bench -stats: - rm -f stats - go build -o stats ./tools/stats - go run github.com/GeertJohan/go.rice/rice append --exec stats -i ./build -.PHONY: stats -BINS+=stats +lotus-stats: + rm -f lotus-stats + go build -o lotus-stats ./tools/stats + go run github.com/GeertJohan/go.rice/rice append --exec lotus-stats -i ./build +.PHONY: lotus-stats +BINS+=lotus-stats -health: +lotus-health: rm -f lotus-health go build -o lotus-health ./cmd/lotus-health go run github.com/GeertJohan/go.rice/rice append --exec lotus-health -i ./build +.PHONY: lotus-health +BINS+=lotus-health -.PHONY: health -BINS+=health +lotus-testground: + go build -tags lotus-testground -o /dev/null ./cmd/lotus -testground: - go build -tags testground -o /dev/null ./cmd/lotus - -.PHONY: testground -BINS+=testground +.PHONY: lotus-testground +BINS+=lotus-testground # MISC @@ -203,15 +203,15 @@ buildall: $(BINS) completions: ./scripts/make-completions.sh lotus - ./scripts/make-completions.sh lotus-storage-miner + ./scripts/make-completions.sh lotus-miner .PHONY: completions install-completions: mkdir -p /usr/share/bash-completion/completions /usr/local/share/zsh/site-functions/ install -C ./scripts/bash-completion/lotus /usr/share/bash-completion/completions/lotus - install -C ./scripts/bash-completion/lotus-storage-miner /usr/share/bash-completion/completions/lotus-storage-miner + install -C ./scripts/bash-completion/lotus-miner /usr/share/bash-completion/completions/lotus-miner install -C ./scripts/zsh-completion/lotus /usr/local/share/zsh/site-functions/_lotus - install -C ./scripts/zsh-completion/lotus-storage-miner /usr/local/share/zsh/site-functions/_lotus-storage-miner + install -C ./scripts/zsh-completion/lotus-miner /usr/local/share/zsh/site-functions/_lotus-miner clean: rm -rf $(CLEAN) $(BINS) diff --git a/cli/cmd.go b/cli/cmd.go index 83a1845fc..dd2c142b2 100644 --- a/cli/cmd.go +++ b/cli/cmd.go @@ -72,7 +72,7 @@ func flagForRepo(t repo.RepoType) string { case repo.FullNode: return "repo" case repo.StorageMiner: - return "storagerepo" + return "miner-repo" default: panic(fmt.Sprintf("Unknown repo type: %v", t)) } diff --git a/cmd/lotus-fountain/site/wait.html b/cmd/lotus-fountain/site/wait.html index ea2d64236..f6f0e2062 100644 --- a/cmd/lotus-fountain/site/wait.html +++ b/cmd/lotus-fountain/site/wait.html @@ -22,7 +22,7 @@ diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index ff45687f8..f0bcf5be0 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -36,7 +36,7 @@ import ( var log = logging.Logger("main") -const FlagStorageRepo = "workerrepo" +const FlagWorkerRepo = "workerrepo" func main() { lotuslog.SetupLogLevels() @@ -53,14 +53,14 @@ func main() { Version: build.UserVersion(), Flags: []cli.Flag{ &cli.StringFlag{ - Name: FlagStorageRepo, - EnvVars: []string{"WORKER_PATH"}, + Name: FlagWorkerRepo, + EnvVars: []string{"LOTUS_SEAL_WORKER_PATH"}, Value: "~/.lotusworker", // TODO: Consider XDG_DATA_HOME }, &cli.StringFlag{ - Name: "storagerepo", - EnvVars: []string{"LOTUS_STORAGE_PATH"}, - Value: "~/.lotusstorage", // TODO: Consider XDG_DATA_HOME + Name: "miner-repo", + EnvVars: []string{"LOTUS_MINER_PATH"}, + Value: "~/.lotusminer", // TODO: Consider XDG_DATA_HOME }, &cli.BoolFlag{ Name: "enable-gpu-proving", @@ -143,7 +143,7 @@ var runCmd = &cli.Command{ return err } if v.APIVersion != build.APIVersion { - return xerrors.Errorf("lotus-storage-miner API version doesn't match: local: ", api.Version{APIVersion: build.APIVersion}) + return xerrors.Errorf("lotus-miner API version doesn't match: local: ", api.Version{APIVersion: build.APIVersion}) } log.Infof("Remote version %s", v) @@ -186,7 +186,7 @@ var runCmd = &cli.Command{ // Open repo - repoPath := cctx.String(FlagStorageRepo) + repoPath := cctx.String(FlagWorkerRepo) r, err := repo.NewFS(repoPath) if err != nil { return err diff --git a/cmd/lotus-storage-miner/init.go b/cmd/lotus-storage-miner/init.go index 14972c69a..0e0c68ebb 100644 --- a/cmd/lotus-storage-miner/init.go +++ b/cmd/lotus-storage-miner/init.go @@ -151,7 +151,7 @@ var initCmd = &cli.Command{ log.Info("Checking if repo exists") - repoPath := cctx.String(FlagStorageRepo) + repoPath := cctx.String(FlagMinerRepo) r, err := repo.NewFS(repoPath) if err != nil { return err @@ -162,7 +162,7 @@ var initCmd = &cli.Command{ return err } if ok { - return xerrors.Errorf("repo at '%s' is already initialized", cctx.String(FlagStorageRepo)) + return xerrors.Errorf("repo at '%s' is already initialized", cctx.String(FlagMinerRepo)) } log.Info("Checking full node version") @@ -236,7 +236,7 @@ var initCmd = &cli.Command{ } if err := storageMinerInit(ctx, cctx, api, r, ssize, gasPrice); err != nil { - log.Errorf("Failed to initialize lotus-storage-miner: %+v", err) + log.Errorf("Failed to initialize lotus-miner: %+v", err) path, err := homedir.Expand(repoPath) if err != nil { return err @@ -249,7 +249,7 @@ var initCmd = &cli.Command{ } // TODO: Point to setting storage price, maybe do it interactively or something - log.Info("Storage miner successfully created, you can now start it with 'lotus-storage-miner run'") + log.Info("Storage miner successfully created, you can now start it with 'lotus-miner run'") return nil }, diff --git a/cmd/lotus-storage-miner/main.go b/cmd/lotus-storage-miner/main.go index ae8ea79e7..05bf63e72 100644 --- a/cmd/lotus-storage-miner/main.go +++ b/cmd/lotus-storage-miner/main.go @@ -20,7 +20,7 @@ import ( var log = logging.Logger("main") -const FlagStorageRepo = "storagerepo" +const FlagMinerRepo = "miner-repo" func main() { lotuslog.SetupLogLevels() @@ -61,7 +61,7 @@ func main() { } app := &cli.App{ - Name: "lotus-storage-miner", + Name: "lotus-miner", Usage: "Filecoin decentralized storage network storage miner", Version: build.UserVersion(), EnableBashCompletion: true, @@ -79,8 +79,8 @@ func main() { Value: "~/.lotus", // TODO: Consider XDG_DATA_HOME }, &cli.StringFlag{ - Name: FlagStorageRepo, - EnvVars: []string{"LOTUS_STORAGE_PATH"}, + Name: FlagMinerRepo, + EnvVars: []string{"LOTUS_MINER_PATH"}, Value: "~/.lotusstorage", // TODO: Consider XDG_DATA_HOME }, }, diff --git a/cmd/lotus-storage-miner/run.go b/cmd/lotus-storage-miner/run.go index 29634d17d..9bbd0f29b 100644 --- a/cmd/lotus-storage-miner/run.go +++ b/cmd/lotus-storage-miner/run.go @@ -86,8 +86,8 @@ var runCmd = &cli.Command{ } } - storageRepoPath := cctx.String(FlagStorageRepo) - r, err := repo.NewFS(storageRepoPath) + minerRepoPath := cctx.String(FlagMinerRepo) + r, err := repo.NewFS(minerRepoPath) if err != nil { return err } @@ -97,7 +97,7 @@ var runCmd = &cli.Command{ return err } if !ok { - return xerrors.Errorf("repo at '%s' is not initialized, run 'lotus-storage-miner init' to set it up", storageRepoPath) + return xerrors.Errorf("repo at '%s' is not initialized, run 'lotus-miner init' to set it up", minerRepoPath) } shutdownChan := make(chan struct{}) diff --git a/cmd/lotus-storage-miner/storage.go b/cmd/lotus-storage-miner/storage.go index 5abe6c889..0a5505b6a 100644 --- a/cmd/lotus-storage-miner/storage.go +++ b/cmd/lotus-storage-miner/storage.go @@ -278,7 +278,7 @@ var storageFindCmd = &cli.Command{ } if !cctx.Args().Present() { - return xerrors.New("Usage: lotus-storage-miner storage find [sector number]") + return xerrors.New("Usage: lotus-miner storage find [sector number]") } snum, err := strconv.ParseUint(cctx.Args().First(), 10, 64) diff --git a/documentation/en/.glossary.json b/documentation/en/.glossary.json index bdc43e319..93188eb0a 100644 --- a/documentation/en/.glossary.json +++ b/documentation/en/.glossary.json @@ -96,7 +96,7 @@ "value": "The Block Producer Miner's logic. It currently shares an interface and process with the Lotus Node. A Block Producer chooses which messages to include in a block and is rewarded according to each message’s gas price and consumption, forming a market." }, "lotus-storage-miner": { - "title": "Storage Miner (lotus-storage-miner)", + "title": "Storage Miner (lotus-miner)", "value": "The Storage Miner's logic. It has its own dedicated process. Contributes to the network through Sector commitments and Proofs of Spacetime to prove that it is storing the sectors it has commited to." }, "swarm-port": { diff --git a/documentation/en/api.md b/documentation/en/api.md index ed42ec325..5b5f01aee 100644 --- a/documentation/en/api.md +++ b/documentation/en/api.md @@ -72,7 +72,7 @@ To generate a JWT with custom permissions, use this command: lotus auth create-token --perm admin # Lotus Storage Miner -lotus-storage-miner auth create-token --perm admin +lotus-miner auth create-token --perm admin ``` ## What authorization level should I use? diff --git a/documentation/en/dev/WIP-arch-complementary-notes.md b/documentation/en/dev/WIP-arch-complementary-notes.md index 00bedb56a..013a7bbac 100644 --- a/documentation/en/dev/WIP-arch-complementary-notes.md +++ b/documentation/en/dev/WIP-arch-complementary-notes.md @@ -32,7 +32,7 @@ Gossip sub spec and some introduction. # Look at the constructor of a miner -Follow the `lotus-storage-miner` command to see how a miner is created, from the command to the message to the storage power logic. +Follow the `lotus-miner` command to see how a miner is created, from the command to the message to the storage power logic. # Directory structure so far, main structures seen, their relation diff --git a/documentation/en/faqs.md b/documentation/en/faqs.md index dd6610aeb..3157ab445 100644 --- a/documentation/en/faqs.md +++ b/documentation/en/faqs.md @@ -126,7 +126,7 @@ Community-contributed Docker and Docker Compose examples are available ### How can I run two miners on the same machine? You can do so by changing the storage path variable for the second miner, e.g., -`LOTUS_STORAGE_PATH=~/.lotusstorage2`. You will also need to make sure that no ports collide. +`LOTUS_MINER_PATH=~/.lotusstorage2`. You will also need to make sure that no ports collide. ### How do I setup my own local devnet? diff --git a/documentation/en/local-dev-net.md b/documentation/en/local-dev-net.md index e11d9b358..27d9efd13 100644 --- a/documentation/en/local-dev-net.md +++ b/documentation/en/local-dev-net.md @@ -34,13 +34,13 @@ Then, in another console, import the genesis miner key: Set up the genesis miner: ```sh -./lotus-storage-miner init --genesis-miner --actor=t01000 --sector-size=2KiB --pre-sealed-sectors=~/.genesis-sectors --pre-sealed-metadata=~/.genesis-sectors/pre-seal-t01000.json --nosync +./lotus-miner init --genesis-miner --actor=t01000 --sector-size=2KiB --pre-sealed-sectors=~/.genesis-sectors --pre-sealed-metadata=~/.genesis-sectors/pre-seal-t01000.json --nosync ``` Now, finally, start up the miner: ```sh -./lotus-storage-miner run --nosync +./lotus-miner run --nosync ``` If all went well, you will have your own local Lotus Devnet running. diff --git a/documentation/en/miner-deals.md b/documentation/en/miner-deals.md index 793479385..0aee0e1af 100644 --- a/documentation/en/miner-deals.md +++ b/documentation/en/miner-deals.md @@ -6,7 +6,7 @@ to install a Lotus node and sync to the top of the chain. ## Set up an ask ``` -lotus-storage-miner set-price +lotus-miner set-price ``` This command will set up your miner to accept deal proposals that meet the input price. diff --git a/documentation/en/mining-lotus-seal-worker.md b/documentation/en/mining-lotus-seal-worker.md index aba115661..30517e33c 100644 --- a/documentation/en/mining-lotus-seal-worker.md +++ b/documentation/en/mining-lotus-seal-worker.md @@ -20,9 +20,9 @@ make lotus-seal-worker ## Setting up the Storage Miner -First, you will need to ensure your `lotus-storage-miner`'s API is accessible over the network. +First, you will need to ensure your `lotus-miner`'s API is accessible over the network. -To do this, open up `~/.lotusstorage/config.toml` (Or if you manually set `LOTUS_STORAGE_PATH`, look under that directory) and look for the API field. +To do this, open up `~/.lotusstorage/config.toml` (Or if you manually set `LOTUS_MINER_PATH`, look under that directory) and look for the API field. Default config: @@ -52,10 +52,10 @@ lotus-seal-worker run --address 192.168.2.10:2345 Replace `192.168.2.10:2345` with the proper IP and port. -To check that the **Lotus Seal Worker** is connected to your **Lotus Storage Miner**, run `lotus-storage-miner workers list` and check that the remote worker count has increased. +To check that the **Lotus Seal Worker** is connected to your **Lotus Storage Miner**, run `lotus-miner workers list` and check that the remote worker count has increased. ```sh -why@computer ~/lotus> lotus-storage-miner workers list +why@computer ~/lotus> lotus-miner workers list Worker 0, host computer CPU: [ ] 0 core(s) in use RAM: [|||||||||||||||||| ] 28% 18.1 GiB/62.7 GiB diff --git a/documentation/en/mining-troubleshooting.md b/documentation/en/mining-troubleshooting.md index 561031c5d..5ea1c8e48 100644 --- a/documentation/en/mining-troubleshooting.md +++ b/documentation/en/mining-troubleshooting.md @@ -16,12 +16,12 @@ The **Bellman** lockfile is created to lock a GPU for a process. This bug can oc mining block failed: computing election proof: github.com/filecoin-project/lotus/miner.(*Miner).mineOne ``` -This bug occurs when the storage miner can't acquire the `bellman.lock`. To fix it you need to stop the `lotus-storage-miner` and remove `/tmp/bellman.lock`. +This bug occurs when the storage miner can't acquire the `bellman.lock`. To fix it you need to stop the `lotus-miner` and remove `/tmp/bellman.lock`. ## Error: Failed to get api endpoint ```sh -lotus-storage-miner info +lotus-miner info # WARN main lotus-storage-miner/main.go:73 failed to get api endpoint: (/Users/myrmidon/.lotusstorage) %!w(*errors.errorString=&{API not running (no endpoint)}): ``` @@ -38,7 +38,7 @@ If you see this, that means your computer is too slow and your blocks are not in ## Error: No space left on device ```sh -lotus-storage-miner sectors pledge +lotus-miner sectors pledge # No space left on device (os error 28) ``` diff --git a/documentation/en/mining.md b/documentation/en/mining.md index 3b1f5a8a3..da214b763 100644 --- a/documentation/en/mining.md +++ b/documentation/en/mining.md @@ -6,7 +6,7 @@ It is useful to [join the Testnet](https://docs.lotu.sh/en+join-testnet) prior t ## Note: Using the Lotus Storage Miner from China -If you are trying to use `lotus-storage-miner` from China. You should set this **environment variable** on your machine. +If you are trying to use `lotus-miner` from China. You should set this **environment variable** on your machine. ```sh IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/" @@ -43,13 +43,13 @@ New storage miners address is: In a CLI window, use the following command to start your miner: ```sh -lotus-storage-miner init --actor=ACTOR_VALUE_RECEIVED --owner=OWNER_VALUE_RECEIVED +lotus-miner init --actor=ACTOR_VALUE_RECEIVED --owner=OWNER_VALUE_RECEIVED ``` Example ```sh -lotus-storage-miner init --actor=t01424 --owner=t3spmep2xxsl33o4gxk7yjxcobyohzgj3vejzerug25iinbznpzob6a6kexcbeix73th6vjtzfq7boakfdtd6a +lotus-miner init --actor=t01424 --owner=t3spmep2xxsl33o4gxk7yjxcobyohzgj3vejzerug25iinbznpzob6a6kexcbeix73th6vjtzfq7boakfdtd6a ``` You will have to wait some time for this operation to complete. @@ -59,7 +59,7 @@ You will have to wait some time for this operation to complete. To mine: ```sh -lotus-storage-miner run +lotus-miner run ``` If you are downloading **Filecoin Proof Parameters**, the download can take some time. @@ -67,14 +67,14 @@ If you are downloading **Filecoin Proof Parameters**, the download can take some Get information about your miner: ```sh -lotus-storage-miner info +lotus-miner info # example: miner id `t0111` ``` **Seal** random data to start producing **PoSts**: ```sh -lotus-storage-miner sectors pledge +lotus-miner sectors pledge ``` - Warning: On Linux configurations, this command will write data to `$TMPDIR` which is not usually the largest partition. You should point the value to a larger partition if possible. @@ -94,8 +94,8 @@ lotus state sectors ### `FIL_PROOFS_MAXIMIZE_CACHING=1` Environment variable -This env var can be used with `lotus-storage-miner`, `lotus-seal-worker`, and `lotus-bench` to make the precommit1 step faster at the cost of some memory use (1x sector size) +This env var can be used with `lotus-miner`, `lotus-seal-worker`, and `lotus-bench` to make the precommit1 step faster at the cost of some memory use (1x sector size) ### `FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1` Environment variable -This env var can be used with `lotus-storage-miner`, `lotus-seal-worker`, and `lotus-bench` to enable experimental precommit2 GPU acceleration +This env var can be used with `lotus-miner`, `lotus-seal-worker`, and `lotus-bench` to enable experimental precommit2 GPU acceleration diff --git a/documentation/en/setting-a-static-port.md b/documentation/en/setting-a-static-port.md index 714f455b0..f6c716446 100644 --- a/documentation/en/setting-a-static-port.md +++ b/documentation/en/setting-a-static-port.md @@ -4,7 +4,7 @@ Depending on how your network is set up, you may need to set a static port to su ## Setup -To change the random **swarm port**, you may edit the `config.toml` file located under `$LOTUS_STORAGE_PATH`. The default location of this file is `$HOME/.lotusstorage`. +To change the random **swarm port**, you may edit the `config.toml` file located under `$LOTUS_MINER_PATH`. The default location of this file is `$HOME/.lotusstorage`. To change the port to `1347`: diff --git a/documentation/en/storing-data-troubleshooting.md b/documentation/en/storing-data-troubleshooting.md index 2f1a6b607..bf4f592f6 100644 --- a/documentation/en/storing-data-troubleshooting.md +++ b/documentation/en/storing-data-troubleshooting.md @@ -21,7 +21,7 @@ WARN main lotus/main.go:72 failed to start deal: computing commP failed: gene In order to retrieve a file, it must be sealed. Miners can check sealing progress with this command: ```sh -lotus-storage-miner sectors list +lotus-miner sectors list ``` When sealing is complete, `pSet: NO` will become `pSet: YES`. From now on the **Data CID** is [retrievable](https://docs.lotu.sh/en+retrieving-data) from the **Lotus Storage Miner**. diff --git a/lotuspond/front/package-lock.json b/lotuspond/front/package-lock.json index 8df204f2e..e688211d2 100644 --- a/lotuspond/front/package-lock.json +++ b/lotuspond/front/package-lock.json @@ -1663,7 +1663,7 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=" }, "@xtuc/long": { "version": "4.2.2", @@ -1767,7 +1767,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "requires": { "color-convert": "^1.9.0" } @@ -1775,7 +1775,7 @@ "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -1784,12 +1784,12 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "requires": { "sprintf-js": "~1.0.2" } @@ -1811,7 +1811,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" }, "arr-union": { "version": "3.1.0", @@ -1883,7 +1883,7 @@ "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", "requires": { "safer-buffer": "~2.1.0" } @@ -1891,7 +1891,7 @@ "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -1993,7 +1993,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" }, "autoprefixer": { "version": "9.6.1", @@ -2024,7 +2024,7 @@ "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=" }, "axobject-query": { "version": "2.0.2", @@ -2113,7 +2113,7 @@ "babel-extract-comments": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "integrity": "sha1-Cirt+BQX7TkbheGLRhTmk6A1GiE=", "requires": { "babylon": "^6.18.0" } @@ -2366,14 +2366,14 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" } } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" }, "balanced-match": { "version": "1.0.0", @@ -2383,7 +2383,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -2405,7 +2405,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -2413,7 +2413,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -2421,7 +2421,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2431,14 +2431,14 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, "base-x": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", - "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "integrity": "sha1-lMF4hzbaBl7bHWiAiGnjV8l3+nc=", "requires": { "safe-buffer": "^5.0.1" } @@ -2489,7 +2489,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=" }, "body-parser": { "version": "1.19.0", @@ -2566,7 +2566,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2575,7 +2575,7 @@ "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -2612,7 +2612,7 @@ "browser-resolve": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=", "requires": { "resolve": "1.1.7" }, @@ -2640,7 +2640,7 @@ "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -2650,7 +2650,7 @@ "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -2684,7 +2684,7 @@ "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "requires": { "pako": "~1.0.5" } @@ -2728,12 +2728,12 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=" }, "buffer-xor": { "version": "1.0.3", @@ -2774,7 +2774,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -2835,7 +2835,7 @@ "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", "requires": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -2879,7 +2879,7 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=" }, "chokidar": { "version": "2.1.6", @@ -3420,7 +3420,7 @@ "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -3439,7 +3439,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -3465,7 +3465,7 @@ "clean-css": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "integrity": "sha1-LUEe92uFabbQyEBo2r6FsKpeXBc=", "requires": { "source-map": "~0.6.0" }, @@ -3473,7 +3473,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" } } }, @@ -3558,7 +3558,7 @@ "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", "requires": { "color-name": "1.1.3" } @@ -3571,7 +3571,7 @@ "color-string": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -3593,7 +3593,7 @@ "common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + "integrity": "sha1-jjFT5ULUo56bEFVENK+q+YlWqTc=" }, "commondir": { "version": "1.0.1", @@ -3655,7 +3655,7 @@ "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3702,12 +3702,12 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=", "requires": { "safe-buffer": "~5.1.1" } @@ -3725,7 +3725,7 @@ "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -3786,7 +3786,7 @@ "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" @@ -3820,7 +3820,7 @@ "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -3839,7 +3839,7 @@ "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -3875,7 +3875,7 @@ "css-declaration-sorter": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", "requires": { "postcss": "^7.0.1", "timsort": "^0.3.0" @@ -3943,7 +3943,7 @@ "css-select": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "integrity": "sha1-q0OGzsnh9miFVWSxfDcztDsqXt4=", "requires": { "boolbase": "^1.0.0", "css-what": "^2.1.2", @@ -3954,7 +3954,7 @@ "css-select-base-adapter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=" }, "css-to-react-native": { "version": "2.3.1", @@ -4056,7 +4056,7 @@ "cssnano-util-raw-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", "requires": { "postcss": "^7.0.0" } @@ -4064,12 +4064,12 @@ "cssnano-util-same-parent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=" }, "csso": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=", "requires": { "css-tree": "1.0.0-alpha.29" }, @@ -4077,7 +4077,7 @@ "css-tree": { "version": "1.0.0-alpha.29", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "integrity": "sha1-P6nU7zFCy9HDAedmTB81K9gvWjk=", "requires": { "mdn-data": "~1.1.0", "source-map": "^0.5.3" @@ -4086,7 +4086,7 @@ "mdn-data": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + "integrity": "sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=" } } }, @@ -4196,7 +4196,7 @@ "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", "requires": { "object-keys": "^1.0.12" } @@ -4204,7 +4204,7 @@ "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -4213,7 +4213,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -4221,7 +4221,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -4229,7 +4229,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -4239,7 +4239,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, @@ -4314,7 +4314,7 @@ "detect-node": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=" }, "detect-port-alt": { "version": "1.1.6", @@ -4358,7 +4358,7 @@ "dir-glob": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=", "requires": { "arrify": "^1.0.1", "path-type": "^3.0.0" @@ -4372,7 +4372,7 @@ "dns-packet": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", "requires": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -4397,7 +4397,7 @@ "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", "requires": { "utila": "~0.4" } @@ -4414,7 +4414,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=" }, "domelementtype": { "version": "1.3.1", @@ -4440,7 +4440,7 @@ "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", "requires": { "dom-serializer": "0", "domelementtype": "1" @@ -4449,7 +4449,7 @@ "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", "requires": { "is-obj": "^1.0.0" } @@ -4567,7 +4567,7 @@ "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "requires": { "prr": "~1.0.1" } @@ -4575,7 +4575,7 @@ "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", "requires": { "is-arrayish": "^0.2.1" } @@ -4596,7 +4596,7 @@ "es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4713,7 +4713,7 @@ "eslint-import-resolver-node": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "integrity": "sha1-WPFfuDm40FdsqYBBNHaqskcttmo=", "requires": { "debug": "^2.6.9", "resolve": "^1.5.0" @@ -4722,7 +4722,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -5033,12 +5033,12 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=", "requires": { "estraverse": "^4.0.0" } @@ -5046,7 +5046,7 @@ "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "requires": { "estraverse": "^4.1.0" } @@ -5087,7 +5087,7 @@ "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -5134,7 +5134,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -5240,7 +5240,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" }, "extend-shallow": { "version": "3.0.2", @@ -5254,7 +5254,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "requires": { "is-plain-object": "^2.0.4" } @@ -5274,7 +5274,7 @@ "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -5305,7 +5305,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -5313,7 +5313,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -5321,7 +5321,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5331,7 +5331,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, @@ -5416,7 +5416,7 @@ "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=" }, "figures": { "version": "2.0.0", @@ -5446,7 +5446,7 @@ "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=" }, "fill-range": { "version": "4.0.0", @@ -5511,7 +5511,7 @@ "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", "requires": { "locate-path": "^3.0.0" } @@ -5606,7 +5606,7 @@ "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -5675,7 +5675,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" }, "functional-red-black-tree": { "version": "1.0.1", @@ -5880,7 +5880,7 @@ "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "requires": { "function-bind": "^1.1.1" } @@ -5960,12 +5960,12 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=" }, "history": { "version": "4.10.1", @@ -6024,7 +6024,7 @@ "html-comment-regex": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=" }, "html-encoding-sniffer": { "version": "1.0.2", @@ -6042,7 +6042,7 @@ "html-minifier": { "version": "3.5.21", "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", "requires": { "camel-case": "3.0.x", "clean-css": "4.2.x", @@ -6056,7 +6056,7 @@ "commander": { "version": "2.17.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=" } } }, @@ -6166,7 +6166,7 @@ "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -6240,7 +6240,7 @@ "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" @@ -6273,7 +6273,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" }, "inquirer": { "version": "6.5.0", @@ -6327,7 +6327,7 @@ "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { "loose-envify": "^1.0.0" } @@ -6335,7 +6335,7 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=" }, "ip": { "version": "1.1.5", @@ -6393,12 +6393,12 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=" }, "is-capitalized": { "version": "1.0.0", @@ -6452,7 +6452,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -6462,7 +6462,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } }, @@ -6520,7 +6520,7 @@ "is-path-in-cwd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", "requires": { "is-path-inside": "^1.0.0" } @@ -6536,7 +6536,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "requires": { "isobject": "^3.0.1" } @@ -6562,7 +6562,7 @@ "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=" }, "is-root": { "version": "2.0.0", @@ -6577,7 +6577,7 @@ "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", "requires": { "html-comment-regex": "^1.1.0" } @@ -6585,7 +6585,7 @@ "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=", "requires": { "has-symbols": "^1.0.0" } @@ -6598,7 +6598,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" }, "is-wsl": { "version": "1.1.0", @@ -7831,7 +7831,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=" }, "json-rpc-peer": { "version": "0.15.5", @@ -7874,7 +7874,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" }, "json-stable-stringify": { "version": "1.0.1", @@ -7973,7 +7973,7 @@ "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=" }, "kind-of": { "version": "3.2.2", @@ -7991,7 +7991,7 @@ "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "integrity": "sha1-l0LfDhDjz0blwDgcLekNOnotdVU=", "requires": { "lodash": "^4.17.5", "webpack-sources": "^1.1.0" @@ -8005,7 +8005,7 @@ "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", "requires": { "invert-kv": "^2.0.0" } @@ -8114,7 +8114,7 @@ "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -8180,7 +8180,7 @@ "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -8235,7 +8235,7 @@ "mamacro": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" + "integrity": "sha1-rSyVdhl8nxq/MI0Hh4Zb2XWj8+Q=" }, "map-age-cleaner": { "version": "0.1.3", @@ -8261,7 +8261,7 @@ "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -8345,7 +8345,7 @@ "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -8365,14 +8365,14 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -8399,7 +8399,7 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" }, "mini-create-react-context": { "version": "0.3.2", @@ -8424,7 +8424,7 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -8434,7 +8434,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "^1.1.7" } @@ -8447,7 +8447,7 @@ "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", "requires": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -8540,7 +8540,7 @@ "multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", "requires": { "dns-packet": "^1.3.1", "thunky": "^1.0.2" @@ -8611,7 +8611,7 @@ "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -8629,7 +8629,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, @@ -8651,12 +8651,12 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=" }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", "requires": { "lower-case": "^1.1.1" } @@ -8664,7 +8664,7 @@ "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -8790,7 +8790,7 @@ "normalize-url": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=" }, "npm-run-path": { "version": "2.0.2", @@ -8803,7 +8803,7 @@ "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", "requires": { "boolbase": "~1.0.0" } @@ -8826,7 +8826,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=" }, "object-assign": { "version": "4.1.1", @@ -8874,7 +8874,7 @@ "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -8924,7 +8924,7 @@ "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=" }, "on-finished": { "version": "2.3.0", @@ -8987,7 +8987,7 @@ "optimize-css-assets-webpack-plugin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "integrity": "sha1-nrUAcR01FltF5/1gui30DLPrkVk=", "requires": { "cssnano": "^4.1.0", "last-call-webpack-plugin": "^3.0.0" @@ -9009,7 +9009,7 @@ "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", "requires": { "url-parse": "^1.4.3" } @@ -9068,7 +9068,7 @@ "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", "requires": { "p-limit": "^2.0.0" } @@ -9076,7 +9076,7 @@ "p-map": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=" }, "p-reduce": { "version": "1.0.0", @@ -9166,7 +9166,7 @@ "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=" }, "path-dirname": { "version": "1.0.2", @@ -9196,7 +9196,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" }, "path-to-regexp": { "version": "0.1.7", @@ -9206,7 +9206,7 @@ "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", "requires": { "pify": "^3.0.0" } @@ -9214,7 +9214,7 @@ "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -9257,7 +9257,7 @@ "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", "requires": { "find-up": "^3.0.0" } @@ -9415,7 +9415,7 @@ "postcss-calc": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "integrity": "sha1-Ntd7qwI7Dsu5eJ2E3LI8SUEUVDY=", "requires": { "css-unit-converter": "^1.1.1", "postcss": "^7.0.5", @@ -9426,7 +9426,7 @@ "cssesc": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=" }, "postcss-selector-parser": { "version": "5.0.0", @@ -9502,7 +9502,7 @@ "postcss-convert-values": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" @@ -9588,7 +9588,7 @@ "postcss-discard-duplicates": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", "requires": { "postcss": "^7.0.0" } @@ -9596,7 +9596,7 @@ "postcss-discard-empty": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", "requires": { "postcss": "^7.0.0" } @@ -9604,7 +9604,7 @@ "postcss-discard-overridden": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", "requires": { "postcss": "^7.0.0" } @@ -9707,7 +9707,7 @@ "postcss-loader": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", "requires": { "loader-utils": "^1.1.0", "postcss": "^7.0.0", @@ -9770,7 +9770,7 @@ "postcss-minify-font-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" @@ -9881,7 +9881,7 @@ "postcss-normalize-charset": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", "requires": { "postcss": "^7.0.0" } @@ -9941,7 +9941,7 @@ "postcss-normalize-unicode": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", "requires": { "browserslist": "^4.0.0", "postcss": "^7.0.0", @@ -9951,7 +9951,7 @@ "postcss-normalize-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", "requires": { "is-absolute-url": "^2.0.0", "normalize-url": "^3.0.0", @@ -10106,7 +10106,7 @@ "postcss-safe-parser": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "integrity": "sha1-h1bZ5MNv3OLHKwkbvIyhdqsfzeo=", "requires": { "postcss": "^7.0.0" } @@ -10153,7 +10153,7 @@ "postcss-unique-selectors": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", "requires": { "alphanum-sort": "^1.0.0", "postcss": "^7.0.0", @@ -10163,7 +10163,7 @@ "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=" }, "postcss-values-parser": { "version": "2.0.1", @@ -10215,7 +10215,7 @@ "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=" }, "process": { "version": "0.11.10", @@ -10294,7 +10294,7 @@ "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -10307,7 +10307,7 @@ "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10316,7 +10316,7 @@ "pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -10326,7 +10326,7 @@ "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10337,7 +10337,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" }, "q": { "version": "1.5.1", @@ -10347,7 +10347,7 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=" }, "querystring": { "version": "0.2.0", @@ -10383,7 +10383,7 @@ "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -10713,7 +10713,7 @@ "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -10739,7 +10739,7 @@ "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=" }, "regenerate-unicode-properties": { "version": "8.1.0", @@ -10765,7 +10765,7 @@ "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -10874,7 +10874,7 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" }, "repeat-string": { "version": "1.6.1", @@ -10884,7 +10884,7 @@ "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -10916,7 +10916,7 @@ "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -11005,7 +11005,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" }, "rgb-regex": { "version": "1.0.1", @@ -11028,7 +11028,7 @@ "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -11111,7 +11111,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" }, "sane": { "version": "4.1.0", @@ -11132,7 +11132,7 @@ "sass-loader": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "integrity": "sha1-Fv1ROMuLQkv4p1lSihly1yqtBp0=", "requires": { "clone-deep": "^2.0.1", "loader-utils": "^1.0.1", @@ -11145,7 +11145,7 @@ "clone-deep": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "integrity": "sha1-ANs6Hhc2VnMNEYjD1qztbX6pdxM=", "requires": { "for-own": "^1.0.0", "is-plain-object": "^2.0.4", @@ -11164,7 +11164,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" }, "semver": { "version": "5.7.0", @@ -11174,7 +11174,7 @@ "shallow-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "integrity": "sha1-RIDNBuiC72iyrYij6lSDLixItXE=", "requires": { "is-extendable": "^0.1.1", "kind-of": "^5.0.0", @@ -11184,7 +11184,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } } @@ -11193,7 +11193,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" }, "saxes": { "version": "3.1.11", @@ -11215,7 +11215,7 @@ "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", "requires": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -11309,7 +11309,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -11338,7 +11338,7 @@ "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" } } }, @@ -11469,7 +11469,7 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=" } } }, @@ -11496,7 +11496,7 @@ "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -11511,7 +11511,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -11542,7 +11542,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -11560,7 +11560,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -11568,7 +11568,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -11576,7 +11576,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -11586,14 +11586,14 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" } } }, "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "requires": { "kind-of": "^3.2.0" } @@ -11601,7 +11601,7 @@ "sockjs": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=", "requires": { "faye-websocket": "^0.10.0", "uuid": "^3.0.1" @@ -11643,7 +11643,7 @@ "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=" }, "source-map": { "version": "0.5.7", @@ -11653,7 +11653,7 @@ "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -11695,12 +11695,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -11751,7 +11751,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "requires": { "extend-shallow": "^3.0.0" } @@ -11780,7 +11780,7 @@ "ssri": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", "requires": { "figgy-pudding": "^3.5.1" } @@ -11788,7 +11788,7 @@ "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=" }, "stack-utils": { "version": "1.0.2", @@ -11836,7 +11836,7 @@ "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -11845,7 +11845,7 @@ "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -11871,7 +11871,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -11888,7 +11888,7 @@ "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=", "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -11911,7 +11911,7 @@ "strip-comments": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "integrity": "sha1-grnEXn8FhzvuU/NxaK+TCqNoZ50=", "requires": { "babel-extract-comments": "^1.0.0", "babel-plugin-transform-object-rest-spread": "^6.26.0" @@ -12011,7 +12011,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "requires": { "has-flag": "^3.0.0" } @@ -12197,7 +12197,7 @@ "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", "requires": { "os-tmpdir": "~1.0.2" } @@ -12228,7 +12228,7 @@ "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -12364,12 +12364,12 @@ "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=" }, "unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", "requires": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" @@ -12409,7 +12409,7 @@ "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", "requires": { "unique-slug": "^2.0.0" } @@ -12425,7 +12425,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" }, "unpipe": { "version": "1.0.0", @@ -12486,7 +12486,7 @@ "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "requires": { "punycode": "^2.1.0" } @@ -12534,7 +12534,7 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" }, "util": { "version": "0.11.1", @@ -12559,7 +12559,7 @@ "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", "requires": { "define-properties": "^1.1.2", "object.getownpropertydescriptors": "^2.0.3" @@ -12583,7 +12583,7 @@ "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -12653,7 +12653,7 @@ "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", "requires": { "chokidar": "^2.0.2", "graceful-fs": "^4.1.2", @@ -12663,7 +12663,7 @@ "wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", "requires": { "minimalistic-assert": "^1.0.0" } @@ -12828,7 +12828,7 @@ "webpack-log": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" @@ -12873,7 +12873,7 @@ "websocket-extensions": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=" }, "whatwg-encoding": { "version": "1.0.5", @@ -12886,7 +12886,7 @@ "whatwg-fetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + "integrity": "sha1-/IBORYzEYACbGiuWa8iBfSV4rvs=" }, "whatwg-mimetype": { "version": "2.3.0", @@ -12906,7 +12906,7 @@ "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", "requires": { "isexe": "^2.0.0" } @@ -13184,7 +13184,7 @@ "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" + "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=" }, "xtend": { "version": "4.0.2", @@ -13209,7 +13209,7 @@ "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=" }, "yallist": { "version": "3.0.3", diff --git a/lotuspond/front/src/StorageNode.js b/lotuspond/front/src/StorageNode.js index c4895c2ea..8a4afc899 100644 --- a/lotuspond/front/src/StorageNode.js +++ b/lotuspond/front/src/StorageNode.js @@ -127,7 +127,7 @@ class StorageNode extends React.Component { runtime = (
v{this.state.version.Version}, {this.state.id.substr(-8)}, {this.state.peers} peers
-
Repo: LOTUS_STORAGE_PATH={this.props.node.Repo}
+
Repo: LOTUS_MINER_PATH={this.props.node.Repo}
{pledgeSector} {sealStaged}
diff --git a/lotuspond/main.go b/lotuspond/main.go index fee36d86a..1df35f4ba 100644 --- a/lotuspond/main.go +++ b/lotuspond/main.go @@ -45,9 +45,9 @@ var onCmd = &cli.Command{ "LOTUS_PATH=" + node.Repo, } } else { - cmd = exec.Command("./lotus-storage-miner") + cmd = exec.Command("./lotus-miner") cmd.Env = []string{ - "LOTUS_STORAGE_PATH=" + node.Repo, + "LOTUS_MINER_PATH=" + node.Repo, "LOTUS_PATH=" + node.FullNode, } } @@ -83,7 +83,7 @@ var shCmd = &cli.Command{ } } else { shcmd.Env = []string{ - "LOTUS_STORAGE_PATH=" + node.Repo, + "LOTUS_MINER_PATH=" + node.Repo, "LOTUS_PATH=" + node.FullNode, } } diff --git a/lotuspond/spawn.go b/lotuspond/spawn.go index ef0ebaeab..e28ac8753 100644 --- a/lotuspond/spawn.go +++ b/lotuspond/spawn.go @@ -176,10 +176,10 @@ func (api *api) SpawnStorage(fullNodeRepo string) (nodeInfo, error) { } id := atomic.AddInt32(&api.cmds, 1) - cmd := exec.Command("./lotus-storage-miner", initArgs...) + cmd := exec.Command("./lotus-miner", initArgs...) cmd.Stderr = io.MultiWriter(os.Stderr, errlogfile) cmd.Stdout = io.MultiWriter(os.Stdout, logfile) - cmd.Env = append(os.Environ(), "LOTUS_STORAGE_PATH="+dir, "LOTUS_PATH="+fullNodeRepo) + cmd.Env = append(os.Environ(), "LOTUS_MINER_PATH="+dir, "LOTUS_PATH="+fullNodeRepo) if err := cmd.Run(); err != nil { return nodeInfo{}, err } @@ -188,10 +188,10 @@ func (api *api) SpawnStorage(fullNodeRepo string) (nodeInfo, error) { mux := newWsMux() - cmd = exec.Command("./lotus-storage-miner", "run", "--api", fmt.Sprintf("%d", 2500+id), "--nosync") + cmd = exec.Command("./lotus-miner", "run", "--api", fmt.Sprintf("%d", 2500+id), "--nosync") cmd.Stderr = io.MultiWriter(os.Stderr, errlogfile, mux.errpw) cmd.Stdout = io.MultiWriter(os.Stdout, logfile, mux.outpw) - cmd.Env = append(os.Environ(), "LOTUS_STORAGE_PATH="+dir, "LOTUS_PATH="+fullNodeRepo) + cmd.Env = append(os.Environ(), "LOTUS_MINER_PATH="+dir, "LOTUS_PATH="+fullNodeRepo) if err := cmd.Start(); err != nil { return nodeInfo{}, err } @@ -248,7 +248,7 @@ func (api *api) RestartNode(id int32) (nodeInfo, error) { var cmd *exec.Cmd if nd.meta.Storage { - cmd = exec.Command("./lotus-storage-miner", "run", "--api", fmt.Sprintf("%d", 2500+id), "--nosync") + cmd = exec.Command("./lotus-miner", "run", "--api", fmt.Sprintf("%d", 2500+id), "--nosync") } else { cmd = exec.Command("./lotus", "daemon", "--api", fmt.Sprintf("%d", 2500+id)) } diff --git a/scripts/bash-completion/lotus-storage-miner b/scripts/bash-completion/lotus-miner similarity index 83% rename from scripts/bash-completion/lotus-storage-miner rename to scripts/bash-completion/lotus-miner index 10ee5b77f..df5cc01cc 100644 --- a/scripts/bash-completion/lotus-storage-miner +++ b/scripts/bash-completion/lotus-miner @@ -7,4 +7,4 @@ _cli_bash_autocomplete() { COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ); return 0; }; -complete -F _cli_bash_autocomplete lotus-storage-miner \ No newline at end of file +complete -F _cli_bash_autocomplete lotus-miner \ No newline at end of file diff --git a/scripts/build-bundle.sh b/scripts/build-bundle.sh index 16cab49d1..39fcfa0ed 100755 --- a/scripts/build-bundle.sh +++ b/scripts/build-bundle.sh @@ -20,7 +20,7 @@ pushd bundle BINARIES=( "lotus" - "lotus-storage-miner" + "lotus-miner" "lotus-seal-worker" ) diff --git a/scripts/deploy-bootstrapper.sh b/scripts/deploy-bootstrapper.sh index 98e2cd798..fe0924ae4 100755 --- a/scripts/deploy-bootstrapper.sh +++ b/scripts/deploy-bootstrapper.sh @@ -10,7 +10,7 @@ log "> Deploying bootstrap node $host" log "Stopping lotus daemon" ssh "$host" 'systemctl stop lotus-daemon' & -ssh "$host" 'systemctl stop lotus-storage-miner' & +ssh "$host" 'systemctl stop lotus-miner' & wait @@ -18,7 +18,7 @@ ssh "$host" 'rm -rf .lotus' & ssh "$host" 'rm -rf .lotusstorage' & scp -C lotus "${host}":/usr/local/bin/lotus & -scp -C lotus-storage-miner "${host}":/usr/local/bin/lotus-storage-miner & +scp -C lotus-miner "${host}":/usr/local/bin/lotus-miner & wait diff --git a/scripts/deploy-miner.sh b/scripts/deploy-miner.sh index b1603aca6..21db32924 100755 --- a/scripts/deploy-miner.sh +++ b/scripts/deploy-miner.sh @@ -14,5 +14,5 @@ echo "SYNC WAIT" sleep 30 ssh "$HOST" 'lotus sync wait' -ssh "$HOST" 'lotus-storage-miner init --owner=$(cat addr)' -ssh "$HOST" 'systemctl start lotus-storage-miner' & +ssh "$HOST" 'lotus-miner init --owner=$(cat addr)' +ssh "$HOST" 'systemctl start lotus-miner' & diff --git a/scripts/deploy-node.sh b/scripts/deploy-node.sh index 57856f945..41e8f4a17 100755 --- a/scripts/deploy-node.sh +++ b/scripts/deploy-node.sh @@ -11,7 +11,7 @@ HOST=$1 FILES_TO_SEND=( ./lotus - ./lotus-storage-miner + ./lotus-miner scripts/lotus-daemon.service scripts/louts-miner.service ) @@ -21,14 +21,14 @@ rsync -P "${FILES_TO_SEND[@]}" "$HOST:~/lotus-stage/" ssh "$HOST" 'bash -s' << 'EOF' set -euo pipefail -systemctl stop lotus-storage-miner +systemctl stop lotus-miner systemctl stop lotus-daemon mkdir -p .lotus .lotusstorage cd "$HOME/lotus-stage/" -cp -f lotus lotus-storage-miner /usr/local/bin +cp -f lotus lotus-miner /usr/local/bin cp -f lotus-daemon.service /etc/systemd/system/lotus-daemon.service -cp -f lotus-miner.service /etc/systemd/system/lotus-storage-miner.service +cp -f lotus-miner.service /etc/systemd/system/lotus-miner.service systemctl daemon-reload systemctl start lotus-daemon diff --git a/scripts/dev/sminer-init b/scripts/dev/sminer-init index 2f4a3f7af..767921511 100755 --- a/scripts/dev/sminer-init +++ b/scripts/dev/sminer-init @@ -7,4 +7,4 @@ export TRUST_PARAMS=1 tag=${TAG:-debug} go run -tags=$tag ./cmd/lotus wallet import ~/.genesis-sectors/pre-seal-t01000.key -go run -tags=$tag ./cmd/lotus-storage-miner init --actor=t01000 --genesis-miner --pre-sealed-sectors=~/.genesis-sectors --pre-sealed-metadata=~/.genesis-sectors/pre-seal-t01000.json +go run -tags=$tag ./cmd/lotus-miner init --actor=t01000 --genesis-miner --pre-sealed-sectors=~/.genesis-sectors --pre-sealed-metadata=~/.genesis-sectors/pre-seal-t01000.json diff --git a/scripts/devnet.bash b/scripts/devnet.bash index 4fe81eea4..c7fb7b814 100755 --- a/scripts/devnet.bash +++ b/scripts/devnet.bash @@ -42,8 +42,8 @@ SCRIPTDIR="\$( cd "\$( dirname "\${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" pushd \$SCRIPTDIR/../build pwd -env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean deps lotus lotus-storage-miner lotus-shed -cp lotus lotus-storage-miner lotus-shed ../bin/ +env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean deps lotus lotus-miner lotus-shed +cp lotus lotus-miner lotus-shed ../bin/ popd EOF @@ -51,13 +51,13 @@ EOF cat > "${BASEDIR}/scripts/env.fish" < "${BASEDIR}/scripts/env.bash" < "${BASEDIR}/scripts/create_miner.bash" < "${BASEDIR}/scripts/create_miner.bash" < "${BASEDIR}/scripts/pledge_sectors.bash" < ${PLEDGE_COUNT} )); then + if (( \$(lotus-miner sectors list | wc -l) > ${PLEDGE_COUNT} )); then break fi while true; do - state=\$(lotus-storage-miner sectors list | tail -n1 | awk '{print \$2}') + state=\$(lotus-miner sectors list | tail -n1 | awk '{print \$2}') if [ -z "\$state" ]; then break @@ -102,15 +102,15 @@ while true; do PreCommit1 | PreCommit2 | Packing | Unsealed | PreCommitting | Committing | CommitWait | FinalizeSector ) sleep 30 ;; WaitSeed | Proving ) break ;; * ) echo "Unknown Sector State: \$state" - lotus-storage-miner sectors status --log \$current + lotus-miner sectors status --log \$current break ;; esac done - lotus-storage-miner sectors pledge + lotus-miner sectors pledge while [ "\$current" == "\$sector" ]; do - sector=\$(lotus-storage-miner sectors list | tail -n1 | awk '{print \$1}' | tr -d ':') + sector=\$(lotus-miner sectors list | tail -n1 | awk '{print \$1}' | tr -d ':') sleep 5 done @@ -128,12 +128,12 @@ while true; do echo echo echo Storage Miner Info - lotus-storage-miner info + lotus-miner info echo echo echo Sector List - lotus-storage-miner sectors list | tail -n4 + lotus-miner sectors list | tail -n4 sleep 25 @@ -151,7 +151,7 @@ if [ "$BUILD" == "yes" ]; then bash "${BASEDIR}/scripts/build.bash" else cp ./lotus ${BASEDIR}/bin/ - cp ./lotus-storage-miner ${BASEDIR}/bin/ + cp ./lotus-miner ${BASEDIR}/bin/ cp ./lotus-seed ${BASEDIR}/bin/ cp ./lotus-shed ${BASEDIR}/bin/ fi @@ -186,7 +186,7 @@ export LOTUS_PATH="${BASEDIR}/.lotus" ${BASEDIR}/bin/lotus wait-api tmux send-keys -t $session:$wminer "${BASEDIR}/scripts/create_miner.bash" C-m -tmux send-keys -t $session:$wminer "lotus-storage-miner run --api 48020 --nosync 2>&1 | tee -a ${BASEDIR}/miner.log" C-m +tmux send-keys -t $session:$wminer "lotus-miner run --api 48020 --nosync 2>&1 | tee -a ${BASEDIR}/miner.log" C-m tmux send-keys -t $session:$wcli "${BASEDIR}/scripts/monitor.bash" C-m tmux send-keys -t $session:$wpleding "${BASEDIR}/scripts/pledge_sectors.bash" C-m diff --git a/scripts/init-network.sh b/scripts/init-network.sh index 3ca243c15..10693bb0e 100755 --- a/scripts/init-network.sh +++ b/scripts/init-network.sh @@ -86,12 +86,12 @@ mdt0111=$(mktemp -d) mdt0222=$(mktemp -d) mdt0333=$(mktemp -d) -env LOTUS_PATH="${ldt0111}" LOTUS_STORAGE_PATH="${mdt0111}" ./lotus-storage-miner init --genesis-miner --actor=t0111 --pre-sealed-sectors="${sdt0111}" --pre-sealed-metadata="${sdt0111}/pre-seal-t0111.json" --nosync=true --sector-size="${SECTOR_SIZE}" || true -env LOTUS_PATH="${ldt0111}" LOTUS_STORAGE_PATH="${mdt0111}" ./lotus-storage-miner run --nosync & +env LOTUS_PATH="${ldt0111}" LOTUS_MINER_PATH="${mdt0111}" ./lotus-miner init --genesis-miner --actor=t0111 --pre-sealed-sectors="${sdt0111}" --pre-sealed-metadata="${sdt0111}/pre-seal-t0111.json" --nosync=true --sector-size="${SECTOR_SIZE}" || true +env LOTUS_PATH="${ldt0111}" LOTUS_MINER_PATH="${mdt0111}" ./lotus-miner run --nosync & mpid=$! -env LOTUS_PATH="${ldt0222}" LOTUS_STORAGE_PATH="${mdt0222}" ./lotus-storage-miner init --actor=t0222 --pre-sealed-sectors="${sdt0222}" --pre-sealed-metadata="${sdt0222}/pre-seal-t0222.json" --nosync=true --sector-size="${SECTOR_SIZE}" || true -env LOTUS_PATH="${ldt0333}" LOTUS_STORAGE_PATH="${mdt0333}" ./lotus-storage-miner init --actor=t0333 --pre-sealed-sectors="${sdt0333}" --pre-sealed-metadata="${sdt0333}/pre-seal-t0333.json" --nosync=true --sector-size="${SECTOR_SIZE}" || true +env LOTUS_PATH="${ldt0222}" LOTUS_MINER_PATH="${mdt0222}" ./lotus-miner init --actor=t0222 --pre-sealed-sectors="${sdt0222}" --pre-sealed-metadata="${sdt0222}/pre-seal-t0222.json" --nosync=true --sector-size="${SECTOR_SIZE}" || true +env LOTUS_PATH="${ldt0333}" LOTUS_MINER_PATH="${mdt0333}" ./lotus-miner init --actor=t0333 --pre-sealed-sectors="${sdt0333}" --pre-sealed-metadata="${sdt0333}/pre-seal-t0333.json" --nosync=true --sector-size="${SECTOR_SIZE}" || true kill $mpid wait $mpid diff --git a/scripts/chainwatch.service b/scripts/lotus-chainwatch.service similarity index 87% rename from scripts/chainwatch.service rename to scripts/lotus-chainwatch.service index 74afee0e9..e121cb1d1 100644 --- a/scripts/chainwatch.service +++ b/scripts/lotus-chainwatch.service @@ -9,7 +9,7 @@ Environment=GOLOG_LOG_FMT="json" Environment=LOTUS_DB="" Environment=LOTUS_PATH="%h/.lotus" EnvironmentFile=-/etc/lotus/chainwatch.env -ExecStart=/usr/local/bin/chainwatch run +ExecStart=/usr/local/bin/lotus-chainwatch run [Install] WantedBy=multi-user.target diff --git a/scripts/lotus-miner.service b/scripts/lotus-miner.service index 3a460450f..b0da9121c 100644 --- a/scripts/lotus-miner.service +++ b/scripts/lotus-miner.service @@ -5,7 +5,7 @@ After=lotus-daemon.service Requires=lotus-daemon.service [Service] -ExecStart=/usr/local/bin/lotus-storage-miner run +ExecStart=/usr/local/bin/lotus-miner run Environment=GOLOG_FILE="/var/log/lotus/miner.log" Environment=GOLOG_LOG_FMT="json" diff --git a/scripts/miner-mon.sh b/scripts/miner-mon.sh index cf78660a7..6bd12e44a 100755 --- a/scripts/miner-mon.sh +++ b/scripts/miner-mon.sh @@ -9,15 +9,15 @@ tmux new-window -t $SESSION:1 -n 'Storage Miner' tmux split-window -h tmux select-pane -t 0 -tmux send-keys "watch -n1 './lotus-storage-miner info'" C-m +tmux send-keys "watch -n1 './lotus-miner info'" C-m tmux split-window -v tmux select-pane -t 1 -tmux send-keys "watch -n1 './lotus-storage-miner workers list'" C-m +tmux send-keys "watch -n1 './lotus-miner workers list'" C-m tmux select-pane -t 2 -tmux send-keys "watch -n1 './lotus-storage-miner storage list'" C-m +tmux send-keys "watch -n1 './lotus-miner storage list'" C-m tmux -2 attach-session -t $SESSION diff --git a/scripts/quick-network-join.bash b/scripts/quick-network-join.bash index 33e0069b2..9f2520f33 100755 --- a/scripts/quick-network-join.bash +++ b/scripts/quick-network-join.bash @@ -25,8 +25,8 @@ SCRIPTDIR="\$( cd "\$( dirname "\${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" pushd \$SCRIPTDIR/../build pwd -env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean deps lotus lotus-storage-miner lotus-shed -cp lotus lotus-storage-miner lotus-shed ../bin/ +env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean deps lotus lotus-miner lotus-shed +cp lotus lotus-miner lotus-shed ../bin/ popd EOF @@ -34,13 +34,13 @@ EOF cat > "${BASEDIR}/scripts/env.fish" < "${BASEDIR}/scripts/env.bash" < "${BASEDIR}/scripts/create_miner.bash" < "${BASEDIR}/scripts/pledge_sectors.bash" < ${PLEDGE_COUNT} )); then + if (( \$(lotus-miner sectors list | wc -l) > ${PLEDGE_COUNT} )); then break fi while true; do - state=\$(lotus-storage-miner sectors list | tail -n1 | awk '{print \$2}') + state=\$(lotus-miner sectors list | tail -n1 | awk '{print \$2}') if [ -z "\$state" ]; then break @@ -97,15 +97,15 @@ while true; do PreCommit1 | PreCommit2 | Packing | Unsealed | PreCommitting | Committing | CommitWait | FinalizeSector ) sleep 30 ;; WaitSeed | Proving ) break ;; * ) echo "Unknown Sector State: \$state" - lotus-storage-miner sectors status --log \$current + lotus-miner sectors status --log \$current break ;; esac done - lotus-storage-miner sectors pledge + lotus-miner sectors pledge while [ "\$current" == "\$sector" ]; do - sector=\$(lotus-storage-miner sectors list | tail -n1 | awk '{print \$1}' | tr -d ':') + sector=\$(lotus-miner sectors list | tail -n1 | awk '{print \$1}' | tr -d ':') sleep 5 done @@ -123,12 +123,12 @@ while true; do echo echo echo Storage Miner Info - lotus-storage-miner info + lotus-miner info echo echo echo Sector List - lotus-storage-miner sectors list | tail -n4 + lotus-miner sectors list | tail -n4 sleep 25 @@ -170,7 +170,7 @@ tmux send-keys -t $session:$wdaemon "lotus daemon --api 48010 daemon 2>&1 | tee sleep 30 tmux send-keys -t $session:$wminer "${BASEDIR}/scripts/create_miner.bash" C-m -tmux send-keys -t $session:$wminer "lotus-storage-miner run --api 48020 2>&1 | tee -a ${BASEDIR}/miner.log" C-m +tmux send-keys -t $session:$wminer "lotus-miner run --api 48020 2>&1 | tee -a ${BASEDIR}/miner.log" C-m tmux send-keys -t $session:$wcli "${BASEDIR}/scripts/monitor.bash" C-m tmux send-keys -t $session:$wpleding "${BASEDIR}/scripts/pledge_sectors.bash" C-m diff --git a/scripts/setup-host.sh b/scripts/setup-host.sh index bda0a2c98..fe36be8fa 100755 --- a/scripts/setup-host.sh +++ b/scripts/setup-host.sh @@ -3,4 +3,4 @@ HOST=$1 scp scripts/lotus-daemon.service "${HOST}:/etc/systemd/system/lotus-daemon.service" -scp scripts/lotus-miner.service "${HOST}:/etc/systemd/system/lotus-storage-miner.service" +scp scripts/lotus-miner.service "${HOST}:/etc/systemd/system/lotus-miner.service" diff --git a/scripts/zsh-completion/lotus-storage-miner b/scripts/zsh-completion/lotus-miner similarity index 86% rename from scripts/zsh-completion/lotus-storage-miner rename to scripts/zsh-completion/lotus-miner index 1ff14be3a..3e23749e6 100644 --- a/scripts/zsh-completion/lotus-storage-miner +++ b/scripts/zsh-completion/lotus-miner @@ -9,4 +9,4 @@ _cli_bash_autocomplete() { COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ); return 0; }; -complete -F _cli_bash_autocomplete lotus-storage-miner \ No newline at end of file +complete -F _cli_bash_autocomplete lotus-miner \ No newline at end of file From b2f94e4239a630094016d1b8f8324fa40db30d89 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 8 Jul 2020 18:53:04 +0800 Subject: [PATCH 05/38] update lotusstorage --- cmd/lotus-storage-miner/main.go | 2 +- documentation/en/api-scripting-support.md | 4 ++-- documentation/en/api.md | 6 +++--- documentation/en/dev-tools-pond-ui.md | 2 +- documentation/en/faqs.md | 4 ++-- documentation/en/mining-lotus-seal-worker.md | 2 +- documentation/en/mining-troubleshooting.md | 2 +- documentation/en/setting-a-static-port.md | 2 +- documentation/en/setup-troubleshooting.md | 2 +- scripts/deploy-bootstrapper.sh | 2 +- scripts/deploy-miner.sh | 2 +- scripts/deploy-node.sh | 2 +- scripts/dev/drop-local-repos | 2 +- scripts/devnet.bash | 8 ++++---- scripts/filebeat.yml | 2 +- scripts/quick-network-join.bash | 8 ++++---- 16 files changed, 26 insertions(+), 26 deletions(-) diff --git a/cmd/lotus-storage-miner/main.go b/cmd/lotus-storage-miner/main.go index 05bf63e72..acb4ac71a 100644 --- a/cmd/lotus-storage-miner/main.go +++ b/cmd/lotus-storage-miner/main.go @@ -81,7 +81,7 @@ func main() { &cli.StringFlag{ Name: FlagMinerRepo, EnvVars: []string{"LOTUS_MINER_PATH"}, - Value: "~/.lotusstorage", // TODO: Consider XDG_DATA_HOME + Value: "~/.lotusminer", // TODO: Consider XDG_DATA_HOME }, }, diff --git a/documentation/en/api-scripting-support.md b/documentation/en/api-scripting-support.md index 9d07aa3c8..0f39bbde3 100644 --- a/documentation/en/api-scripting-support.md +++ b/documentation/en/api-scripting-support.md @@ -21,5 +21,5 @@ You can also use `lotus auth api-info --perm admin` to quickly create _API_INFO - The **Lotus Node**'s `mutliaddr` is in `~/.lotus/api`. - The default token is in `~/.lotus/token`. -- The **Lotus Storage Miner**'s `multiaddr` is in `~/.lotusstorage/config`. -- The default token is in `~/.lotusstorage/token`. +- The **Lotus Storage Miner**'s `multiaddr` is in `~/.lotusminer/config`. +- The default token is in `~/.lotusminer/token`. diff --git a/documentation/en/api.md b/documentation/en/api.md index 5b5f01aee..af8cd4aed 100644 --- a/documentation/en/api.md +++ b/documentation/en/api.md @@ -46,7 +46,7 @@ If the request requires authorization, add an authorization header: ```sh curl -X POST \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer $(cat ~/.lotusstorage/token)" \ + -H "Authorization: Bearer $(cat ~/.lotusminer/token)" \ --data '{ "jsonrpc": "2.0", "method": "Filecoin.ChainHead", "params": [], "id": 3 }' \ 'http://127.0.0.1:1234/rpc/v0' ``` @@ -58,10 +58,10 @@ curl -X POST \ To authorize your request, you will need to include the **JWT** in a HTTP header, for example: ```sh --H "Authorization: Bearer $(cat ~/.lotusstorage/token)" +-H "Authorization: Bearer $(cat ~/.lotusminer/token)" ``` -Admin token is stored in `~/.lotus/token` for the **Lotus Node** or `~/.lotusstorage/token` for the **Lotus Storage Miner**. +Admin token is stored in `~/.lotus/token` for the **Lotus Node** or `~/.lotusminer/token` for the **Lotus Storage Miner**. ## How do I generate a token? diff --git a/documentation/en/dev-tools-pond-ui.md b/documentation/en/dev-tools-pond-ui.md index e5c992073..b75a53727 100644 --- a/documentation/en/dev-tools-pond-ui.md +++ b/documentation/en/dev-tools-pond-ui.md @@ -27,6 +27,6 @@ Don't leave Pond unattended for more than 10 hours, the web client will eventual ## Troubleshooting - Turn it off and on - Start at the top -- `rm -rf ~/.lotus ~/.lotusstorage/`, this command will delete chain sync data, stored wallets, and other configurations so be careful. +- `rm -rf ~/.lotus ~/.lotusminer/`, this command will delete chain sync data, stored wallets, and other configurations so be careful. - Verify you have the correct versions of dependencies - If stuck on a bad fork, try `lotus chain sethead --genesis` diff --git a/documentation/en/faqs.md b/documentation/en/faqs.md index 3157ab445..0f89f53c4 100644 --- a/documentation/en/faqs.md +++ b/documentation/en/faqs.md @@ -49,7 +49,7 @@ To update Lotus, follow the instructions [here](https://lotu.sh/en+updating-lotu ### How do I prepare a fresh installation of Lotus? Stop the Lotus daemon, and delete all related files, including sealed and chain data by -running `rm ~/.lotus ~/.lotusstorage`. +running `rm ~/.lotus ~/.lotusminer`. Then, install Lotus afresh by following the instructions found [here](https://docs.lotu.sh/en+getting-started). @@ -126,7 +126,7 @@ Community-contributed Docker and Docker Compose examples are available ### How can I run two miners on the same machine? You can do so by changing the storage path variable for the second miner, e.g., -`LOTUS_MINER_PATH=~/.lotusstorage2`. You will also need to make sure that no ports collide. +`LOTUS_MINER_PATH=~/.lotusminer2`. You will also need to make sure that no ports collide. ### How do I setup my own local devnet? diff --git a/documentation/en/mining-lotus-seal-worker.md b/documentation/en/mining-lotus-seal-worker.md index 30517e33c..58000d226 100644 --- a/documentation/en/mining-lotus-seal-worker.md +++ b/documentation/en/mining-lotus-seal-worker.md @@ -22,7 +22,7 @@ make lotus-seal-worker First, you will need to ensure your `lotus-miner`'s API is accessible over the network. -To do this, open up `~/.lotusstorage/config.toml` (Or if you manually set `LOTUS_MINER_PATH`, look under that directory) and look for the API field. +To do this, open up `~/.lotusminer/config.toml` (Or if you manually set `LOTUS_MINER_PATH`, look under that directory) and look for the API field. Default config: diff --git a/documentation/en/mining-troubleshooting.md b/documentation/en/mining-troubleshooting.md index 5ea1c8e48..62aa776ac 100644 --- a/documentation/en/mining-troubleshooting.md +++ b/documentation/en/mining-troubleshooting.md @@ -22,7 +22,7 @@ This bug occurs when the storage miner can't acquire the `bellman.lock`. To fix ```sh lotus-miner info -# WARN main lotus-storage-miner/main.go:73 failed to get api endpoint: (/Users/myrmidon/.lotusstorage) %!w(*errors.errorString=&{API not running (no endpoint)}): +# WARN main lotus-storage-miner/main.go:73 failed to get api endpoint: (/Users/myrmidon/.lotusminer) %!w(*errors.errorString=&{API not running (no endpoint)}): ``` If you see this, that means your **Lotus Storage Miner** isn't ready yet. You need to finish [syncing the chain](https://docs.lotu.sh/en+join-testnet). diff --git a/documentation/en/setting-a-static-port.md b/documentation/en/setting-a-static-port.md index f6c716446..7b4ed1c32 100644 --- a/documentation/en/setting-a-static-port.md +++ b/documentation/en/setting-a-static-port.md @@ -4,7 +4,7 @@ Depending on how your network is set up, you may need to set a static port to su ## Setup -To change the random **swarm port**, you may edit the `config.toml` file located under `$LOTUS_MINER_PATH`. The default location of this file is `$HOME/.lotusstorage`. +To change the random **swarm port**, you may edit the `config.toml` file located under `$LOTUS_MINER_PATH`. The default location of this file is `$HOME/.lotusminer`. To change the port to `1347`: diff --git a/documentation/en/setup-troubleshooting.md b/documentation/en/setup-troubleshooting.md index 8a23544d9..a1c78b51b 100644 --- a/documentation/en/setup-troubleshooting.md +++ b/documentation/en/setup-troubleshooting.md @@ -5,7 +5,7 @@ Here is a command that will delete your chain data, stored wallets, stored data and any miners you have set up: ```sh -rm -rf ~/.lotus ~/.lotusstorage +rm -rf ~/.lotus ~/.lotusminer ``` This command usually resolves any issues with running `lotus` but it is not always required for updates. We will share information about when resetting your chain data and miners is required for an update in the future. diff --git a/scripts/deploy-bootstrapper.sh b/scripts/deploy-bootstrapper.sh index fe0924ae4..3ca0d51a2 100755 --- a/scripts/deploy-bootstrapper.sh +++ b/scripts/deploy-bootstrapper.sh @@ -15,7 +15,7 @@ ssh "$host" 'systemctl stop lotus-miner' & wait ssh "$host" 'rm -rf .lotus' & -ssh "$host" 'rm -rf .lotusstorage' & +ssh "$host" 'rm -rf .lotusminer' & scp -C lotus "${host}":/usr/local/bin/lotus & scp -C lotus-miner "${host}":/usr/local/bin/lotus-miner & diff --git a/scripts/deploy-miner.sh b/scripts/deploy-miner.sh index 21db32924..5ce5069e4 100755 --- a/scripts/deploy-miner.sh +++ b/scripts/deploy-miner.sh @@ -2,7 +2,7 @@ HOST=$1 -ssh "$HOST" '[ -e ~/.lotusstorage/token ]' && exit 0 +ssh "$HOST" '[ -e ~/.lotusminer/token ]' && exit 0 ssh "$HOST" 'lotus wallet new bls > addr' ssh "$HOST" 'curl http://147.75.80.29:777/sendcoll?address=$(cat addr)' & diff --git a/scripts/deploy-node.sh b/scripts/deploy-node.sh index 41e8f4a17..fa6efa4d9 100755 --- a/scripts/deploy-node.sh +++ b/scripts/deploy-node.sh @@ -23,7 +23,7 @@ set -euo pipefail systemctl stop lotus-miner systemctl stop lotus-daemon -mkdir -p .lotus .lotusstorage +mkdir -p .lotus .lotusminer cd "$HOME/lotus-stage/" cp -f lotus lotus-miner /usr/local/bin diff --git a/scripts/dev/drop-local-repos b/scripts/dev/drop-local-repos index 939030bad..a0e7a5512 100755 --- a/scripts/dev/drop-local-repos +++ b/scripts/dev/drop-local-repos @@ -2,4 +2,4 @@ set -o xtrace -rm -rf ~/.lotus ~/.lotusstorage/ ~/.genesis-sectors ~/.lotusworker +rm -rf ~/.lotus ~/.lotusminer/ ~/.genesis-sectors ~/.lotusworker diff --git a/scripts/devnet.bash b/scripts/devnet.bash index c7fb7b814..96f0263bd 100755 --- a/scripts/devnet.bash +++ b/scripts/devnet.bash @@ -51,13 +51,13 @@ EOF cat > "${BASEDIR}/scripts/env.fish" < "${BASEDIR}/scripts/env.bash" < "${BASEDIR}/scripts/create_miner.bash" < "${BASEDIR}/scripts/pledge_sectors.bash" < diff --git a/scripts/quick-network-join.bash b/scripts/quick-network-join.bash index 9f2520f33..47527db75 100755 --- a/scripts/quick-network-join.bash +++ b/scripts/quick-network-join.bash @@ -34,13 +34,13 @@ EOF cat > "${BASEDIR}/scripts/env.fish" < "${BASEDIR}/scripts/env.bash" < "${BASEDIR}/scripts/create_miner.bash" < "${BASEDIR}/scripts/pledge_sectors.bash" < Date: Thu, 9 Jul 2020 11:04:45 +0800 Subject: [PATCH 06/38] Update lotus-seal-worker to lotus-worker --- .circleci/config.yml | 8 ++++---- .gitignore | 2 +- Makefile | 20 ++++++++++---------- cli/cmd.go | 2 +- cmd/lotus-seal-worker/main.go | 6 +++--- documentation/en/api-scripting-support.md | 2 +- documentation/en/mining-lotus-seal-worker.md | 12 ++++++------ documentation/en/mining.md | 4 ++-- scripts/build-bundle.sh | 2 +- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 54161a714..d88bbc9be 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -95,8 +95,8 @@ jobs: - store_artifacts: path: lotus-miner - store_artifacts: - path: lotus-seal-worker - - run: mkdir linux && mv lotus lotus-miner lotus-seal-worker linux/ + path: lotus-worker + - run: mkdir linux && mv lotus lotus-miner lotus-worker linux/ - persist_to_workspace: root: "." paths: @@ -225,8 +225,8 @@ jobs: - store_artifacts: path: lotus-miner - store_artifacts: - path: lotus-seal-worker - - run: mkdir darwin && mv lotus lotus-miner lotus-seal-worker darwin/ + path: lotus-worker + - run: mkdir darwin && mv lotus lotus-miner lotus-worker darwin/ - persist_to_workspace: root: "." paths: diff --git a/.gitignore b/.gitignore index af1c1d5c8..0424c1f24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /lotus /lotus-miner -/lotus-seal-worker +/lotus-worker /lotus-seed /lotus-health /lotus-chainwatch diff --git a/Makefile b/Makefile index 88961b8f7..1bb5e07eb 100644 --- a/Makefile +++ b/Makefile @@ -58,10 +58,10 @@ deps: $(BUILD_DEPS) .PHONY: deps debug: GOFLAGS+=-tags=debug -debug: lotus lotus-miner lotus-seal-worker lotus-seed +debug: lotus lotus-miner lotus-worker lotus-seed 2k: GOFLAGS+=-tags=2k -2k: lotus lotus-miner lotus-seal-worker lotus-seed +2k: lotus lotus-miner lotus-worker lotus-seed lotus: $(BUILD_DEPS) rm -f lotus @@ -78,12 +78,12 @@ lotus-miner: $(BUILD_DEPS) .PHONY: lotus-miner BINS+=lotus-miner -lotus-seal-worker: $(BUILD_DEPS) - rm -f lotus-seal-worker - go build $(GOFLAGS) -o lotus-seal-worker ./cmd/lotus-seal-worker - go run github.com/GeertJohan/go.rice/rice append --exec lotus-seal-worker -i ./build -.PHONY: lotus-seal-worker -BINS+=lotus-seal-worker +lotus-worker: $(BUILD_DEPS) + rm -f lotus-worker + go build $(GOFLAGS) -o lotus-worker ./cmd/lotus-seal-worker + go run github.com/GeertJohan/go.rice/rice append --exec lotus-worker -i ./build +.PHONY: lotus-worker +BINS+=lotus-worker lotus-shed: $(BUILD_DEPS) rm -f lotus-shed @@ -92,7 +92,7 @@ lotus-shed: $(BUILD_DEPS) .PHONY: lotus-shed BINS+=lotus-shed -build: lotus lotus-miner lotus-seal-worker +build: lotus lotus-miner lotus-worker @[[ $$(type -P "lotus") ]] && echo "Caution: you have \ an existing lotus binary in your PATH. This may cause problems if you don't run 'sudo make install'" || true @@ -101,7 +101,7 @@ an existing lotus binary in your PATH. This may cause problems if you don't run install: install -C ./lotus /usr/local/bin/lotus install -C ./lotus-miner /usr/local/bin/lotus-miner - install -C ./lotus-seal-worker /usr/local/bin/lotus-seal-worker + install -C ./lotus-worker /usr/local/bin/lotus-worker install-services: install mkdir -p /usr/local/lib/systemd/system diff --git a/cli/cmd.go b/cli/cmd.go index dd2c142b2..618173e87 100644 --- a/cli/cmd.go +++ b/cli/cmd.go @@ -83,7 +83,7 @@ func envForRepo(t repo.RepoType) string { case repo.FullNode: return "FULLNODE_API_INFO" case repo.StorageMiner: - return "STORAGE_API_INFO" + return "MINER_API_INFO" default: panic(fmt.Sprintf("Unknown repo type: %v", t)) } diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index f0bcf5be0..f49599f4c 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -36,7 +36,7 @@ import ( var log = logging.Logger("main") -const FlagWorkerRepo = "workerrepo" +const FlagWorkerRepo = "worker-repo" func main() { lotuslog.SetupLogLevels() @@ -48,13 +48,13 @@ func main() { } app := &cli.App{ - Name: "lotus-seal-worker", + Name: "lotus-worker", Usage: "Remote storage miner worker", Version: build.UserVersion(), Flags: []cli.Flag{ &cli.StringFlag{ Name: FlagWorkerRepo, - EnvVars: []string{"LOTUS_SEAL_WORKER_PATH"}, + EnvVars: []string{"LOTUS_WORKER_PATH"}, Value: "~/.lotusworker", // TODO: Consider XDG_DATA_HOME }, &cli.StringFlag{ diff --git a/documentation/en/api-scripting-support.md b/documentation/en/api-scripting-support.md index 0f39bbde3..8b674ee04 100644 --- a/documentation/en/api-scripting-support.md +++ b/documentation/en/api-scripting-support.md @@ -14,7 +14,7 @@ Using the [JWT you generated](https://lotu.sh/en+api#how-do-i-generate-a-token-1 FULLNODE_API_INFO="JWT_TOKEN:/ip4/127.0.0.1/tcp/1234/http" # Lotus Storage Miner -STORAGE_API_INFO="JWT_TOKEN:/ip4/127.0.0.1/tcp/2345/http" +MINER_API_INFO="JWT_TOKEN:/ip4/127.0.0.1/tcp/2345/http" ``` You can also use `lotus auth api-info --perm admin` to quickly create _API_INFO env vars diff --git a/documentation/en/mining-lotus-seal-worker.md b/documentation/en/mining-lotus-seal-worker.md index 58000d226..bbc57cc7d 100644 --- a/documentation/en/mining-lotus-seal-worker.md +++ b/documentation/en/mining-lotus-seal-worker.md @@ -4,7 +4,7 @@ The **Lotus Seal Worker** is an extra process that can offload heavy processing ## Note: Using the Lotus Seal Worker from China -If you are trying to use `lotus-seal-worker` from China. You should set this **environment variable** on your machine: +If you are trying to use `lotus-worker` from China. You should set this **environment variable** on your machine: ```sh IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/" @@ -12,10 +12,10 @@ IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/" ## Get Started -Make sure that the `lotus-seal-worker` is compiled and installed by running: +Make sure that the `lotus-worker` is compiled and installed by running: ```sh -make lotus-seal-worker +make lotus-worker ``` ## Setting up the Storage Miner @@ -42,12 +42,12 @@ Next, you will need to [create an authentication token](https://docs.lotu.sh/en+ ### Connect the Lotus Seal Worker -On the machine that will run `lotus-seal-worker`, set the `STORAGE_API_INFO` environment variable to `TOKEN:STORAGE_NODE_MULTIADDR`. Where `TOKEN` is the token we created above, and `STORAGE_NODE_MULTIADDR` is the `multiaddr` of the **Lotus Storage Miner** API that was set in `config.toml`. +On the machine that will run `lotus-worker`, set the `MINER_API_INFO` environment variable to `TOKEN:MINER_NODE_MULTIADDR`. Where `TOKEN` is the token we created above, and `NIMER_NODE_MULTIADDR` is the `multiaddr` of the **Lotus Storage Miner** API that was set in `config.toml`. Once this is set, run: ```sh -lotus-seal-worker run --address 192.168.2.10:2345 +lotus-worker run --address 192.168.2.10:2345 ``` Replace `192.168.2.10:2345` with the proper IP and port. @@ -77,5 +77,5 @@ To do so you have to first __disable all seal task types__ in the miner config. You can then run the storage miner on your local-loopback interface; ```sh -lotus-seal-worker run --address 127.0.0.1:2345 +lotus-worker run --address 127.0.0.1:2345 ``` \ No newline at end of file diff --git a/documentation/en/mining.md b/documentation/en/mining.md index da214b763..29a17191a 100644 --- a/documentation/en/mining.md +++ b/documentation/en/mining.md @@ -94,8 +94,8 @@ lotus state sectors ### `FIL_PROOFS_MAXIMIZE_CACHING=1` Environment variable -This env var can be used with `lotus-miner`, `lotus-seal-worker`, and `lotus-bench` to make the precommit1 step faster at the cost of some memory use (1x sector size) +This env var can be used with `lotus-miner`, `lotus-worker`, and `lotus-bench` to make the precommit1 step faster at the cost of some memory use (1x sector size) ### `FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1` Environment variable -This env var can be used with `lotus-miner`, `lotus-seal-worker`, and `lotus-bench` to enable experimental precommit2 GPU acceleration +This env var can be used with `lotus-miner`, `lotus-worker`, and `lotus-bench` to enable experimental precommit2 GPU acceleration diff --git a/scripts/build-bundle.sh b/scripts/build-bundle.sh index 39fcfa0ed..8e4d608d0 100755 --- a/scripts/build-bundle.sh +++ b/scripts/build-bundle.sh @@ -21,7 +21,7 @@ pushd bundle BINARIES=( "lotus" "lotus-miner" - "lotus-seal-worker" + "lotus-worker" ) export IPFS_PATH=`mktemp -d` From 973de3239fa6fd976c29b0d8e97a3bc773cce14c Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 10 Jul 2020 10:07:53 +0800 Subject: [PATCH 07/38] Update stats source path Co-authored-by: Anton Evangelatov --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1bb5e07eb..25dd777d6 100644 --- a/Makefile +++ b/Makefile @@ -179,7 +179,7 @@ BINS+=lotus-bench lotus-stats: rm -f lotus-stats - go build -o lotus-stats ./tools/stats + go build -o lotus-stats ./cmd/lotus-stats go run github.com/GeertJohan/go.rice/rice append --exec lotus-stats -i ./build .PHONY: lotus-stats BINS+=lotus-stats From 5dfb8c9474241602c1b11820ac62a5ddf5c16e7b Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 10 Jul 2020 20:18:09 +0800 Subject: [PATCH 08/38] add deprecation support --- Makefile | 9 ++++----- cli/auth.go | 4 ++++ cli/cmd.go | 28 +++++++++++++++++++++++++--- cmd/lotus-seal-worker/main.go | 10 ++++++++-- cmd/lotus-storage-miner/main.go | 7 ++++++- 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 25dd777d6..a1b6a0b93 100644 --- a/Makefile +++ b/Makefile @@ -191,11 +191,10 @@ lotus-health: .PHONY: lotus-health BINS+=lotus-health -lotus-testground: - go build -tags lotus-testground -o /dev/null ./cmd/lotus - -.PHONY: lotus-testground -BINS+=lotus-testground +testground: + go build -tags testground -o /dev/null ./cmd/lotus +.PHONY: testground +BINS+=testground # MISC diff --git a/cli/auth.go b/cli/auth.go index d59ac37a5..21bdb54b7 100644 --- a/cli/auth.go +++ b/cli/auth.go @@ -2,6 +2,7 @@ package cli import ( "fmt" + "os" "github.com/urfave/cli/v2" "golang.org/x/xerrors" @@ -126,6 +127,9 @@ var authApiInfoToken = &cli.Command{ } envVar := envForRepo(t) + if _, ok := os.LookupEnv(envForRepo(t)); !ok { + envVar = envForRepoDeprecation(t) + } // TODO: Log in audit log when it is implemented diff --git a/cli/cmd.go b/cli/cmd.go index 618173e87..69194b0d6 100644 --- a/cli/cmd.go +++ b/cli/cmd.go @@ -89,15 +89,37 @@ func envForRepo(t repo.RepoType) string { } } +// TODO remove after deprecation period +func envForRepoDeprecation(t repo.RepoType) string { + switch t { + case repo.FullNode: + return "FULLNODE_API_INFO" + case repo.StorageMiner: + return "STORAGE_API_INFO" + default: + panic(fmt.Sprintf("Unknown repo type: %v", t)) + } +} + func GetAPIInfo(ctx *cli.Context, t repo.RepoType) (APIInfo, error) { - if env, ok := os.LookupEnv(envForRepo(t)); ok { + envKey := envForRepo(t) + env, ok := os.LookupEnv(envKey) + if !ok { + // TODO remove after deprecation period + envKey = envForRepoDeprecation(t) + env, ok = os.LookupEnv(envKey) + if ok { + log.Warnf("Use deprecation env(%s) value, please use env(%s) instead.", envKey, envForRepo(t)) + } + } + if ok { sp := strings.SplitN(env, ":", 2) if len(sp) != 2 { - log.Warnf("invalid env(%s) value, missing token or address", envForRepo(t)) + log.Warnf("invalid env(%s) value, missing token or address", envKey) } else { ma, err := multiaddr.NewMultiaddr(sp[1]) if err != nil { - return APIInfo{}, xerrors.Errorf("could not parse multiaddr from env(%s): %w", envForRepo(t), err) + return APIInfo{}, xerrors.Errorf("could not parse multiaddr from env(%s): %w", envKey, err) } return APIInfo{ Addr: ma, diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index f49599f4c..2836ab84a 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -37,6 +37,8 @@ import ( var log = logging.Logger("main") const FlagWorkerRepo = "worker-repo" +// TODO remove after deprecation period +const FlagWorkerRepoDeprecation = "workerrepo" func main() { lotuslog.SetupLogLevels() @@ -54,13 +56,17 @@ func main() { Flags: []cli.Flag{ &cli.StringFlag{ Name: FlagWorkerRepo, - EnvVars: []string{"LOTUS_WORKER_PATH"}, + Aliases: []string{FlagWorkerRepoDeprecation}, + EnvVars: []string{"LOTUS_WORKER_PATH", "WORKER_PATH"}, Value: "~/.lotusworker", // TODO: Consider XDG_DATA_HOME + Usage: fmt.Sprintf("Specify worker repo path. flag %s and env WORKER_PATH are DEPRECATION, will REMOVE SOON", FlagWorkerRepoDeprecation), }, &cli.StringFlag{ Name: "miner-repo", - EnvVars: []string{"LOTUS_MINER_PATH"}, + Aliases: []string{"storagerepo"}, + EnvVars: []string{"LOTUS_MINER_PATH", "LOTUS_STORAGE_PATH"}, Value: "~/.lotusminer", // TODO: Consider XDG_DATA_HOME + Usage: fmt.Sprintf("Specify miner repo path. flag storagerepo and env LOTUS_STORAGE_PATH are DEPRECATION, will REMOVE SOON"), }, &cli.BoolFlag{ Name: "enable-gpu-proving", diff --git a/cmd/lotus-storage-miner/main.go b/cmd/lotus-storage-miner/main.go index acb4ac71a..fd2368500 100644 --- a/cmd/lotus-storage-miner/main.go +++ b/cmd/lotus-storage-miner/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "fmt" "os" logging "github.com/ipfs/go-log/v2" @@ -21,6 +22,8 @@ import ( var log = logging.Logger("main") const FlagMinerRepo = "miner-repo" +// TODO remove after deprecation period +const FlagMinerRepoDeprecation = "storagerepo" func main() { lotuslog.SetupLogLevels() @@ -80,8 +83,10 @@ func main() { }, &cli.StringFlag{ Name: FlagMinerRepo, - EnvVars: []string{"LOTUS_MINER_PATH"}, + Aliases: []string{FlagMinerRepoDeprecation}, + EnvVars: []string{"LOTUS_MINER_PATH", "LOTUS_STORAGE_PATH"}, Value: "~/.lotusminer", // TODO: Consider XDG_DATA_HOME + Usage: fmt.Sprintf("Specify miner repo path. flag(%s) and env(LOTUS_STORAGE_PATH) are DEPRECATION, will REMOVE SOON", FlagMinerRepoDeprecation), }, }, From 13de81b3b27926fd5db1e7334d540f8e6d72c774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Kripalani?= Date: Fri, 10 Jul 2020 15:43:14 +0100 Subject: [PATCH 09/38] introduce the ability to mock time. --- api/test/window_post.go | 16 ++++++----- build/clock.go | 10 +++++++ chain/beacon/beacon.go | 9 +++--- chain/beacon/drand/drand.go | 5 ++-- chain/block_receipt_tracker.go | 5 ++-- chain/blocksync/blocksync.go | 3 +- chain/blocksync/blocksync_client.go | 21 +++++++------- chain/events/events.go | 2 +- chain/gen/gen.go | 2 +- chain/messagepool/messagepool.go | 7 +++-- chain/metrics/consensus.go | 6 ++-- chain/sub/incoming.go | 12 ++++---- chain/sync.go | 8 +++--- chain/syncstate.go | 7 +++-- chain/vm/runtime.go | 5 ++-- chain/vm/vm.go | 5 ++-- cli/sync.go | 2 +- cmd/chain-noise/main.go | 3 +- go.mod | 1 + go.sum | 2 ++ journal/journal.go | 6 ++-- lib/increadtimeout/incrt.go | 8 +++--- lib/peermgr/peermgr.go | 3 +- miner/miner.go | 44 ++++++++++++++--------------- node/hello/hello.go | 13 +++++---- node/modules/testing/genesis.go | 4 +-- storage/miner.go | 4 +-- storage/wdpost_run.go | 2 +- storage/wdpost_sched.go | 3 +- tools/stats/metrics.go | 4 +-- tools/stats/rpc.go | 6 ++-- 31 files changed, 129 insertions(+), 99 deletions(-) create mode 100644 build/clock.go diff --git a/api/test/window_post.go b/api/test/window_post.go index dcf6fcebd..874bcadcf 100644 --- a/api/test/window_post.go +++ b/api/test/window_post.go @@ -4,6 +4,8 @@ import ( "context" "fmt" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/build" + "os" "strings" "testing" @@ -35,14 +37,14 @@ func TestPledgeSector(t *testing.T, b APIBuilder, blocktime time.Duration, nSect if err := miner.NetConnect(ctx, addrinfo); err != nil { t.Fatal(err) } - time.Sleep(time.Second) + build.Clock.Sleep(time.Second) mine := true done := make(chan struct{}) go func() { defer close(done) for mine { - time.Sleep(blocktime) + build.Clock.Sleep(blocktime) if err := sn[0].MineOne(ctx, func(bool, error) {}); err != nil { t.Error(err) } @@ -69,7 +71,7 @@ func pledgeSectors(t *testing.T, ctx context.Context, miner TestStorageNode, n i break } - time.Sleep(100 * time.Millisecond) + build.Clock.Sleep(100 * time.Millisecond) } fmt.Printf("All sectors is fsm\n") @@ -94,7 +96,7 @@ func pledgeSectors(t *testing.T, ctx context.Context, miner TestStorageNode, n i } } - time.Sleep(100 * time.Millisecond) + build.Clock.Sleep(100 * time.Millisecond) fmt.Printf("WaitSeal: %d\n", len(s)) } } @@ -115,14 +117,14 @@ func TestWindowPost(t *testing.T, b APIBuilder, blocktime time.Duration, nSector if err := miner.NetConnect(ctx, addrinfo); err != nil { t.Fatal(err) } - time.Sleep(time.Second) + build.Clock.Sleep(time.Second) mine := true done := make(chan struct{}) go func() { defer close(done) for mine { - time.Sleep(blocktime) + build.Clock.Sleep(blocktime) if err := sn[0].MineOne(ctx, func(bool, error) {}); err != nil { t.Error(err) } @@ -150,7 +152,7 @@ func TestWindowPost(t *testing.T, b APIBuilder, blocktime time.Duration, nSector if head.Height()%100 == 0 { fmt.Printf("@%d\n", head.Height()) } - time.Sleep(blocktime) + build.Clock.Sleep(blocktime) } p, err := client.StateMinerPower(ctx, maddr, types.EmptyTSK) diff --git a/build/clock.go b/build/clock.go new file mode 100644 index 000000000..5b1726720 --- /dev/null +++ b/build/clock.go @@ -0,0 +1,10 @@ +package build + +import "github.com/raulk/clock" + +// Clock is the global clock for the system. In standard builds, +// we use a real-time clock, which maps to the `time` package. +// +// Tests that need control of time can replace this variable with +// clock.NewMock(). +var Clock = clock.New() diff --git a/chain/beacon/beacon.go b/chain/beacon/beacon.go index 2be2e7f1c..7b998c04f 100644 --- a/chain/beacon/beacon.go +++ b/chain/beacon/beacon.go @@ -2,12 +2,13 @@ package beacon import ( "context" - "time" - "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/specs-actors/actors/abi" logging "github.com/ipfs/go-log" "golang.org/x/xerrors" + + "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/types" ) var log = logging.Logger("beacon") @@ -52,7 +53,7 @@ func ValidateBlockValues(b RandomBeacon, h *types.BlockHeader, prevEntry types.B } func BeaconEntriesForBlock(ctx context.Context, beacon RandomBeacon, round abi.ChainEpoch, prev types.BeaconEntry) ([]types.BeaconEntry, error) { - start := time.Now() + start := build.Clock.Now() maxRound := beacon.MaxBeaconRoundForEpoch(round, prev) if maxRound == prev.Round { @@ -81,7 +82,7 @@ func BeaconEntriesForBlock(ctx context.Context, beacon RandomBeacon, round abi.C } } - log.Debugw("fetching beacon entries", "took", time.Since(start), "numEntries", len(out)) + log.Debugw("fetching beacon entries", "took", build.Clock.Since(start), "numEntries", len(out)) reverse(out) return out, nil } diff --git a/chain/beacon/drand/drand.go b/chain/beacon/drand/drand.go index 00ff05f81..1b036bbf0 100644 --- a/chain/beacon/drand/drand.go +++ b/chain/beacon/drand/drand.go @@ -21,6 +21,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/beacon" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/modules/dtypes" @@ -131,7 +132,7 @@ func (db *DrandBeacon) Entry(ctx context.Context, round uint64) <-chan beacon.Re } go func() { - start := time.Now() + start := build.Clock.Now() log.Infow("start fetching randomness", "round", round) resp, err := db.client.Get(ctx, round) @@ -142,7 +143,7 @@ func (db *DrandBeacon) Entry(ctx context.Context, round uint64) <-chan beacon.Re br.Entry.Round = resp.Round() br.Entry.Data = resp.Signature() } - log.Infow("done fetching randomness", "round", round, "took", time.Since(start)) + log.Infow("done fetching randomness", "round", round, "took", build.Clock.Since(start)) out <- br close(out) }() diff --git a/chain/block_receipt_tracker.go b/chain/block_receipt_tracker.go index f182fd180..466adef9d 100644 --- a/chain/block_receipt_tracker.go +++ b/chain/block_receipt_tracker.go @@ -5,6 +5,7 @@ import ( "sync" "time" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/types" "github.com/hashicorp/golang-lru" peer "github.com/libp2p/go-libp2p-core/peer" @@ -37,14 +38,14 @@ func (brt *blockReceiptTracker) Add(p peer.ID, ts *types.TipSet) { if !ok { pset := &peerSet{ peers: map[peer.ID]time.Time{ - p: time.Now(), + p: build.Clock.Now(), }, } brt.cache.Add(ts.Key(), pset) return } - val.(*peerSet).peers[p] = time.Now() + val.(*peerSet).peers[p] = build.Clock.Now() } func (brt *blockReceiptTracker) GetPeers(ts *types.TipSet) []peer.ID { diff --git a/chain/blocksync/blocksync.go b/chain/blocksync/blocksync.go index a9251c419..53b9feeff 100644 --- a/chain/blocksync/blocksync.go +++ b/chain/blocksync/blocksync.go @@ -11,6 +11,7 @@ import ( cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/types" @@ -126,7 +127,7 @@ func (bss *BlockSyncService) HandleStream(s inet.Stream) { } writeDeadline := 60 * time.Second - _ = s.SetDeadline(time.Now().Add(writeDeadline)) + _ = s.SetDeadline(build.Clock.Now().Add(writeDeadline)) if err := cborutil.WriteCborRPC(s, resp); err != nil { log.Warnw("failed to write back response for handle stream", "err", err, "peer", s.Conn().RemotePeer()) return diff --git a/chain/blocksync/blocksync_client.go b/chain/blocksync/blocksync_client.go index daa4b6335..ac8bcc7a1 100644 --- a/chain/blocksync/blocksync_client.go +++ b/chain/blocksync/blocksync_client.go @@ -21,6 +21,7 @@ import ( "golang.org/x/xerrors" cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/types" incrt "github.com/filecoin-project/lotus/lib/increadtimeout" @@ -91,7 +92,7 @@ func (bs *BlockSync) GetBlocks(ctx context.Context, tsk types.TipSetKey, count i // randomize the first few peers so we don't always pick the same peer shufflePrefix(peers) - start := time.Now() + start := build.Clock.Now() var oerr error for _, p := range peers { @@ -117,7 +118,7 @@ func (bs *BlockSync) GetBlocks(ctx context.Context, tsk types.TipSetKey, count i if err != nil { return nil, xerrors.Errorf("success response from peer failed to process: %w", err) } - bs.syncPeers.logGlobalSuccess(time.Since(start)) + bs.syncPeers.logGlobalSuccess(build.Clock.Since(start)) bs.host.ConnManager().TagPeer(p, "bsync", 25) return resp, nil } @@ -197,7 +198,7 @@ func (bs *BlockSync) GetChainMessages(ctx context.Context, h *types.TipSet, coun } var err error - start := time.Now() + start := build.Clock.Now() for _, p := range peers { res, rerr := bs.sendRequestToPeer(ctx, p, req) @@ -208,7 +209,7 @@ func (bs *BlockSync) GetChainMessages(ctx context.Context, h *types.TipSet, coun } if res.Status == StatusOK { - bs.syncPeers.logGlobalSuccess(time.Since(start)) + bs.syncPeers.logGlobalSuccess(build.Clock.Since(start)) return res.Chain, nil } @@ -284,17 +285,17 @@ func (bs *BlockSync) fetchBlocksBlockSync(ctx context.Context, p peer.ID, req *B ctx, span := trace.StartSpan(ctx, "blockSyncFetch") defer span.End() - start := time.Now() + start := build.Clock.Now() s, err := bs.host.NewStream(inet.WithNoDial(ctx, "should already have connection"), p, BlockSyncProtocolID) if err != nil { bs.RemovePeer(p) return nil, xerrors.Errorf("failed to open stream to peer: %w", err) } - _ = s.SetWriteDeadline(time.Now().Add(5 * time.Second)) + _ = s.SetWriteDeadline(build.Clock.Now().Add(5 * time.Second)) if err := cborutil.WriteCborRPC(s, req); err != nil { _ = s.SetWriteDeadline(time.Time{}) - bs.syncPeers.logFailure(p, time.Since(start)) + bs.syncPeers.logFailure(p, build.Clock.Since(start)) return nil, err } _ = s.SetWriteDeadline(time.Time{}) @@ -302,7 +303,7 @@ func (bs *BlockSync) fetchBlocksBlockSync(ctx context.Context, p peer.ID, req *B var res BlockSyncResponse r := incrt.New(s, 50<<10, 5*time.Second) if err := cborutil.ReadCborRPC(bufio.NewReader(r), &res); err != nil { - bs.syncPeers.logFailure(p, time.Since(start)) + bs.syncPeers.logFailure(p, build.Clock.Since(start)) return nil, err } @@ -314,7 +315,7 @@ func (bs *BlockSync) fetchBlocksBlockSync(ctx context.Context, p peer.ID, req *B ) } - bs.syncPeers.logSuccess(p, time.Since(start)) + bs.syncPeers.logSuccess(p, build.Clock.Since(start)) return &res, nil } @@ -475,7 +476,7 @@ func (bpt *bsPeerTracker) addPeer(p peer.ID) { return } bpt.peers[p] = &peerStats{ - firstSeen: time.Now(), + firstSeen: build.Clock.Now(), } } diff --git a/chain/events/events.go b/chain/events/events.go index e11507795..4550fc98a 100644 --- a/chain/events/events.go +++ b/chain/events/events.go @@ -99,7 +99,7 @@ func (e *Events) listenHeadChanges(ctx context.Context) { log.Warnf("not restarting listenHeadChanges: context error: %s", ctx.Err()) return } - time.Sleep(time.Second) + build.Clock.Sleep(time.Second) log.Info("restarting listenHeadChanges") } } diff --git a/chain/gen/gen.go b/chain/gen/gen.go index 31d352ed4..3a0ac2187 100644 --- a/chain/gen/gen.go +++ b/chain/gen/gen.go @@ -196,7 +196,7 @@ func NewGeneratorWithSectors(numSectors int) (*ChainGen, error) { *genm2, }, NetworkName: "", - Timestamp: uint64(time.Now().Add(-500 * time.Duration(build.BlockDelaySecs) * time.Second).Unix()), + Timestamp: uint64(build.Clock.Now().Add(-500 * time.Duration(build.BlockDelaySecs) * time.Second).Unix()), } genb, err := genesis2.MakeGenesisBlock(context.TODO(), bs, sys, tpl) diff --git a/chain/messagepool/messagepool.go b/chain/messagepool/messagepool.go index b8ac55c59..2939dba13 100644 --- a/chain/messagepool/messagepool.go +++ b/chain/messagepool/messagepool.go @@ -23,12 +23,15 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/go-address" + "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/stmgr" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/lib/sigs" "github.com/filecoin-project/lotus/node/modules/dtypes" + + "github.com/raulk/clock" ) var log = logging.Logger("messagepool") @@ -66,7 +69,7 @@ type MessagePool struct { lk sync.Mutex closer chan struct{} - repubTk *time.Ticker + repubTk *clock.Ticker localAddrs map[address.Address]struct{} @@ -187,7 +190,7 @@ func New(api Provider, ds dtypes.MetadataDS, netName dtypes.NetworkName) (*Messa mp := &MessagePool{ closer: make(chan struct{}), - repubTk: time.NewTicker(time.Duration(build.BlockDelaySecs) * 10 * time.Second), + repubTk: build.Clock.Ticker(time.Duration(build.BlockDelaySecs) * 10 * time.Second), localAddrs: make(map[address.Address]struct{}), pending: make(map[address.Address]*msgSet), minGasPrice: types.NewInt(0), diff --git a/chain/metrics/consensus.go b/chain/metrics/consensus.go index bc7e019d2..7d19d5bd6 100644 --- a/chain/metrics/consensus.go +++ b/chain/metrics/consensus.go @@ -3,7 +3,6 @@ package metrics import ( "context" "encoding/json" - "time" "github.com/filecoin-project/specs-actors/actors/abi" "github.com/ipfs/go-cid" @@ -11,6 +10,7 @@ import ( pubsub "github.com/libp2p/go-libp2p-pubsub" "go.uber.org/fx" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/impl/full" "github.com/filecoin-project/lotus/node/modules/helpers" @@ -89,7 +89,7 @@ func sendHeadNotifs(ctx context.Context, ps *pubsub.PubSub, topic string, chain } // using unix nano time makes very sure we pick a nonce higher than previous restart - nonce := uint64(time.Now().UnixNano()) + nonce := uint64(build.Clock.Now().UnixNano()) for { select { @@ -107,7 +107,7 @@ func sendHeadNotifs(ctx context.Context, ps *pubsub.PubSub, topic string, chain Height: n.Val.Height(), Weight: w, NodeName: nickname, - Time: uint64(time.Now().UnixNano() / 1000_000), + Time: uint64(build.Clock.Now().UnixNano() / 1000_000), Nonce: nonce, } diff --git a/chain/sub/incoming.go b/chain/sub/incoming.go index 9dfc2d894..0db132562 100644 --- a/chain/sub/incoming.go +++ b/chain/sub/incoming.go @@ -61,7 +61,7 @@ func HandleIncomingBlocks(ctx context.Context, bsub *pubsub.Subscription, s *cha src := msg.GetFrom() go func() { - start := time.Now() + start := build.Clock.Now() log.Debug("about to fetch messages for block from pubsub") bmsgs, err := s.Bsync.FetchMessagesByCids(context.TODO(), blk.BlsMessages) if err != nil { @@ -75,9 +75,9 @@ func HandleIncomingBlocks(ctx context.Context, bsub *pubsub.Subscription, s *cha return } - took := time.Since(start) + took := build.Clock.Since(start) log.Infow("new block over pubsub", "cid", blk.Header.Cid(), "source", msg.GetFrom(), "msgfetch", took) - if delay := time.Now().Unix() - int64(blk.Header.Timestamp); delay > 5 { + if delay := build.Clock.Now().Unix() - int64(blk.Header.Timestamp); delay > 5 { log.Warnf("Received block with large delay %d from miner %s", delay, blk.Header.Miner) } @@ -142,9 +142,9 @@ func (bv *BlockValidator) flagPeer(p peer.ID) { func (bv *BlockValidator) Validate(ctx context.Context, pid peer.ID, msg *pubsub.Message) pubsub.ValidationResult { // track validation time - begin := time.Now() + begin := build.Clock.Now() defer func() { - log.Debugf("block validation time: %s", time.Since(begin)) + log.Debugf("block validation time: %s", build.Clock.Since(begin)) }() stats.Record(ctx, metrics.BlockReceived.M(1)) @@ -233,7 +233,7 @@ func (bv *BlockValidator) Validate(ctx context.Context, pid peer.ID, msg *pubsub func (bv *BlockValidator) isChainNearSynced() bool { ts := bv.chain.GetHeaviestTipSet() timestamp := ts.MinTimestamp() - now := time.Now().UnixNano() + now := build.Clock.Now().UnixNano() cutoff := uint64(now) - uint64(6*time.Hour) return timestamp > cutoff } diff --git a/chain/sync.go b/chain/sync.go index bcfa71267..df067f1e9 100644 --- a/chain/sync.go +++ b/chain/sync.go @@ -620,7 +620,7 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) (er return nil } - validationStart := time.Now() + validationStart := build.Clock.Now() defer func() { dur := time.Since(validationStart) durMilli := dur.Seconds() * float64(1000) @@ -665,12 +665,12 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) (er // fast checks first - now := uint64(time.Now().Unix()) + now := uint64(build.Clock.Now().Unix()) if h.Timestamp > now+build.AllowableClockDriftSecs { return xerrors.Errorf("block was from the future (now=%d, blk=%d): %w", now, h.Timestamp, ErrTemporal) } if h.Timestamp > now { - log.Warn("Got block from the future, but within threshold", h.Timestamp, time.Now().Unix()) + log.Warn("Got block from the future, but within threshold", h.Timestamp, build.Clock.Now().Unix()) } if h.Timestamp < baseTs.MinTimestamp()+(build.BlockDelaySecs*uint64(h.Height-baseTs.Height())) { @@ -1538,6 +1538,6 @@ func (syncer *Syncer) IsEpochBeyondCurrMax(epoch abi.ChainEpoch) bool { return false } - now := uint64(time.Now().Unix()) + now := uint64(build.Clock.Now().Unix()) return epoch > (abi.ChainEpoch((now-g.Timestamp)/build.BlockDelaySecs) + MaxHeightDrift) } diff --git a/chain/syncstate.go b/chain/syncstate.go index b213c7483..aaca88303 100644 --- a/chain/syncstate.go +++ b/chain/syncstate.go @@ -8,6 +8,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/types" ) @@ -48,7 +49,7 @@ func (ss *SyncerState) SetStage(v api.SyncStateStage) { defer ss.lk.Unlock() ss.Stage = v if v == api.StageSyncComplete { - ss.End = time.Now() + ss.End = build.Clock.Now() } } @@ -64,7 +65,7 @@ func (ss *SyncerState) Init(base, target *types.TipSet) { ss.Stage = api.StageHeaders ss.Height = 0 ss.Message = "" - ss.Start = time.Now() + ss.Start = build.Clock.Now() ss.End = time.Time{} } @@ -87,7 +88,7 @@ func (ss *SyncerState) Error(err error) { defer ss.lk.Unlock() ss.Message = err.Error() ss.Stage = api.StageSyncErrored - ss.End = time.Now() + ss.End = build.Clock.Now() } func (ss *SyncerState) Snapshot() SyncerState { diff --git a/chain/vm/runtime.go b/chain/vm/runtime.go index 67b1c9d9d..a160e8455 100644 --- a/chain/vm/runtime.go +++ b/chain/vm/runtime.go @@ -373,8 +373,7 @@ func (rt *Runtime) Send(to address.Address, method abi.MethodNum, m vmr.CBORMars } func (rt *Runtime) internalSend(from, to address.Address, method abi.MethodNum, value types.BigInt, params []byte) ([]byte, aerrors.ActorError) { - - start := time.Now() + start := build.Clock.Now() ctx, span := trace.StartSpan(rt.ctx, "vmc.Send") defer span.End() if span.IsRecordingEvents() { @@ -528,7 +527,7 @@ func (rt *Runtime) chargeGasInternal(gas GasCharge, skip int) aerrors.ActorError var callers [10]uintptr cout := gruntime.Callers(2+skip, callers[:]) - now := time.Now() + now := build.Clock.Now() if rt.lastGasCharge != nil { rt.lastGasCharge.TimeTaken = now.Sub(rt.lastGasChargeTime) } diff --git a/chain/vm/vm.go b/chain/vm/vm.go index 2b22fbf10..b46a9236b 100644 --- a/chain/vm/vm.go +++ b/chain/vm/vm.go @@ -28,6 +28,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/runtime" "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors/aerrors" "github.com/filecoin-project/lotus/chain/state" "github.com/filecoin-project/lotus/chain/types" @@ -285,7 +286,7 @@ func checkMessage(msg *types.Message) error { } func (vm *VM) ApplyImplicitMessage(ctx context.Context, msg *types.Message) (*ApplyRet, error) { - start := time.Now() + start := build.Clock.Now() ret, actorErr, rt := vm.send(ctx, msg, nil, nil, start) rt.finilizeGasTracing() return &ApplyRet{ @@ -302,7 +303,7 @@ func (vm *VM) ApplyImplicitMessage(ctx context.Context, msg *types.Message) (*Ap } func (vm *VM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet, error) { - start := time.Now() + start := build.Clock.Now() ctx, span := trace.StartSpan(ctx, "vm.ApplyMessage") defer span.End() msg := cmsg.VMMessage() diff --git a/cli/sync.go b/cli/sync.go index fbb69a870..57553a068 100644 --- a/cli/sync.go +++ b/cli/sync.go @@ -195,7 +195,7 @@ func SyncWait(ctx context.Context, napi api.FullNode) error { case <-ctx.Done(): fmt.Println("\nExit by user") return nil - case <-time.After(1 * time.Second): + case <-build.Clock.After(1 * time.Second): } } } diff --git a/cmd/chain-noise/main.go b/cmd/chain-noise/main.go index a1e92ee96..4a4a099d8 100644 --- a/cmd/chain-noise/main.go +++ b/cmd/chain-noise/main.go @@ -11,6 +11,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/types" lcli "github.com/filecoin-project/lotus/cli" @@ -68,7 +69,7 @@ func sendSmallFundsTxs(ctx context.Context, api api.FullNode, from address.Addre sendSet = append(sendSet, naddr) } - tick := time.NewTicker(time.Second / time.Duration(rate)) + tick := build.Clock.Ticker(time.Second / time.Duration(rate)) for { select { case <-tick.C: diff --git a/go.mod b/go.mod index aca92c57f..8a907eb6a 100644 --- a/go.mod +++ b/go.mod @@ -103,6 +103,7 @@ require ( github.com/multiformats/go-multibase v0.0.3 github.com/multiformats/go-multihash v0.0.13 github.com/opentracing/opentracing-go v1.1.0 + github.com/raulk/clock v1.1.0 github.com/stretchr/objx v0.2.0 // indirect github.com/stretchr/testify v1.6.1 github.com/syndtr/goleveldb v1.0.0 diff --git a/go.sum b/go.sum index e7e68404e..854069815 100644 --- a/go.sum +++ b/go.sum @@ -1221,6 +1221,8 @@ github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.1.0 h1:jhMy6QXfi3y2HEzFoyuCj40z4OZIIHHPtFyCMftmvKA= github.com/prometheus/procfs v0.1.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= +github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= diff --git a/journal/journal.go b/journal/journal.go index b664e8fa7..8d509d51c 100644 --- a/journal/journal.go +++ b/journal/journal.go @@ -10,6 +10,8 @@ import ( logging "github.com/ipfs/go-log" "golang.org/x/xerrors" + + "github.com/filecoin-project/lotus/build" ) func InitializeSystemJournal(dir string) error { @@ -103,7 +105,7 @@ func (fsj *fsJournal) rollJournalFile() error { fsj.fi.Close() } - nfi, err := os.Create(filepath.Join(fsj.journalDir, fmt.Sprintf("lotus-journal-%s.ndjson", time.Now().Format(time.RFC3339)))) + nfi, err := os.Create(filepath.Join(fsj.journalDir, fmt.Sprintf("lotus-journal-%s.ndjson", build.Clock.Now().Format(time.RFC3339)))) if err != nil { return xerrors.Errorf("failed to open journal file: %w", err) } @@ -130,7 +132,7 @@ func (fsj *fsJournal) runLoop() { func (fsj *fsJournal) AddEntry(system string, obj interface{}) { je := &JournalEntry{ System: system, - Timestamp: time.Now(), + Timestamp: build.Clock.Now(), Val: obj, } select { diff --git a/lib/increadtimeout/incrt.go b/lib/increadtimeout/incrt.go index 0b9c65d4d..dd5a05ff8 100644 --- a/lib/increadtimeout/incrt.go +++ b/lib/increadtimeout/incrt.go @@ -5,12 +5,12 @@ import ( "time" logging "github.com/ipfs/go-log/v2" + + "github.com/filecoin-project/lotus/build" ) var log = logging.Logger("incrt") -var now = time.Now - type ReaderDeadline interface { Read([]byte) (int, error) SetReadDeadline(time.Time) error @@ -45,7 +45,7 @@ func (err errNoWait) Timeout() bool { } func (crt *incrt) Read(buf []byte) (int, error) { - start := now() + start := build.Clock.Now() if crt.wait == 0 { return 0, errNoWait{} } @@ -59,7 +59,7 @@ func (crt *incrt) Read(buf []byte) (int, error) { _ = crt.rd.SetReadDeadline(time.Time{}) if err == nil { - dur := now().Sub(start) + dur := build.Clock.Now().Sub(start) crt.wait -= dur crt.wait += time.Duration(n) * crt.waitPerByte if crt.wait < 0 { diff --git a/lib/peermgr/peermgr.go b/lib/peermgr/peermgr.go index 490f2b229..d275be3d5 100644 --- a/lib/peermgr/peermgr.go +++ b/lib/peermgr/peermgr.go @@ -5,6 +5,7 @@ import ( "sync" "time" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/metrics" "github.com/filecoin-project/lotus/node/modules/dtypes" "go.opencensus.io/stats" @@ -107,7 +108,7 @@ func (pmgr *PeerMgr) Disconnect(p peer.ID) { } func (pmgr *PeerMgr) Run(ctx context.Context) { - tick := time.NewTicker(time.Second * 5) + tick := build.Clock.Ticker(time.Second * 5) for { select { case <-tick.C: diff --git a/miner/miner.go b/miner/miner.go index d81216be2..8c46be675 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -46,7 +46,7 @@ func NewMiner(api api.FullNode, epp gen.WinningPoStProver, addr address.Address) waitFunc: func(ctx context.Context, baseTime uint64) (func(bool, error), error) { // Wait around for half the block time in case other parents come in deadline := baseTime + build.PropagationDelaySecs - time.Sleep(time.Until(time.Unix(int64(deadline), 0))) + build.Clock.Sleep(build.Clock.Until(time.Unix(int64(deadline), 0))) return func(bool, error) {}, nil }, @@ -107,7 +107,7 @@ func (m *Miner) Stop(ctx context.Context) error { func (m *Miner) niceSleep(d time.Duration) bool { select { - case <-time.After(d): + case <-build.Clock.After(d): return true case <-m.stop: return false @@ -170,14 +170,14 @@ func (m *Miner) mine(ctx context.Context) { if b != nil { btime := time.Unix(int64(b.Header.Timestamp), 0) - if time.Now().Before(btime) { - if !m.niceSleep(time.Until(btime)) { + if build.Clock.Now().Before(btime) { + if !m.niceSleep(build.Clock.Until(btime)) { log.Warnf("received interrupt while waiting to broadcast block, will shutdown after block is sent out") - time.Sleep(time.Until(btime)) + build.Clock.Sleep(build.Clock.Until(btime)) } } else { log.Warnw("mined block in the past", "block-time", btime, - "time", time.Now(), "duration", time.Since(btime)) + "time", build.Clock.Now(), "duration", build.Clock.Since(btime)) } // TODO: should do better 'anti slash' protection here @@ -201,7 +201,7 @@ func (m *Miner) mine(ctx context.Context) { nextRound := time.Unix(int64(base.TipSet.MinTimestamp()+build.BlockDelaySecs*uint64(base.NullRounds))+int64(build.PropagationDelaySecs), 0) select { - case <-time.After(time.Until(nextRound)): + case <-build.Clock.After(build.Clock.Until(nextRound)): case <-m.stop: stopping := m.stopping m.stop = nil @@ -271,7 +271,7 @@ func (m *Miner) hasPower(ctx context.Context, addr address.Address, ts *types.Ti // 1. func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, error) { log.Debugw("attempting to mine a block", "tipset", types.LogCids(base.TipSet.Cids())) - start := time.Now() + start := build.Clock.Now() round := base.TipSet.Height() + base.NullRounds + 1 @@ -283,11 +283,11 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, return nil, nil } - tMBI := time.Now() + tMBI := build.Clock.Now() beaconPrev := mbi.PrevBeaconEntry - tDrand := time.Now() + tDrand := build.Clock.Now() bvals := mbi.BeaconEntries hasPower, err := m.hasPower(ctx, m.address, base.TipSet) @@ -299,9 +299,9 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, return nil, nil } - tPowercheck := time.Now() + tPowercheck := build.Clock.Now() - log.Infof("Time delta between now and our mining base: %ds (nulls: %d)", uint64(time.Now().Unix())-base.TipSet.MinTimestamp(), base.NullRounds) + log.Infof("Time delta between now and our mining base: %ds (nulls: %d)", uint64(build.Clock.Now().Unix())-base.TipSet.MinTimestamp(), base.NullRounds) rbase := beaconPrev if len(bvals) > 0 { @@ -322,7 +322,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, return nil, nil } - tTicket := time.Now() + tTicket := build.Clock.Now() buf := new(bytes.Buffer) if err := m.address.MarshalCBOR(buf); err != nil { @@ -336,7 +336,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, prand := abi.PoStRandomness(rand) - tSeed := time.Now() + tSeed := build.Clock.Now() postProof, err := m.epp.ComputeProof(ctx, mbi.Sectors, prand) if err != nil { @@ -349,7 +349,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, return nil, xerrors.Errorf("failed to get pending messages: %w", err) } - tPending := time.Now() + tPending := build.Clock.Now() // TODO: winning post proof b, err := m.createBlock(base, m.address, ticket, winner, bvals, postProof, pending) @@ -357,7 +357,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, return nil, xerrors.Errorf("failed to create block: %w", err) } - tCreateBlock := time.Now() + tCreateBlock := build.Clock.Now() dur := tCreateBlock.Sub(start) log.Infow("mined new block", "cid", b.Cid(), "height", b.Header.Height, "took", dur) if dur > time.Second*time.Duration(build.BlockDelaySecs) { @@ -502,7 +502,7 @@ func SelectMessages(ctx context.Context, al ActorLookup, ts *types.TipSet, msgs tooLowFundMsgs := 0 tooHighNonceMsgs := 0 - start := time.Now() + start := build.Clock.Now() vmValid := time.Duration(0) getbal := time.Duration(0) @@ -511,7 +511,7 @@ func SelectMessages(ctx context.Context, al ActorLookup, ts *types.TipSet, msgs }) for _, msg := range msgs { - vmstart := time.Now() + vmstart := build.Clock.Now() minGas := vm.PricelistByEpoch(ts.Height()).OnChainMessage(msg.ChainLength()) // TODO: really should be doing just msg.ChainLength() but the sync side of this code doesnt seem to have access to that if err := msg.VMMessage().ValidForBlockInclusion(minGas.Total()); err != nil { @@ -519,7 +519,7 @@ func SelectMessages(ctx context.Context, al ActorLookup, ts *types.TipSet, msgs continue } - vmValid += time.Since(vmstart) + vmValid += build.Clock.Since(vmstart) // TODO: this should be in some more general 'validate message' call if msg.Message.GasLimit > build.BlockGasLimit { @@ -534,7 +534,7 @@ func SelectMessages(ctx context.Context, al ActorLookup, ts *types.TipSet, msgs from := msg.Message.From - getBalStart := time.Now() + getBalStart := build.Clock.Now() if _, ok := inclNonces[from]; !ok { act, err := al(ctx, from, ts.Key()) if err != nil { @@ -545,7 +545,7 @@ func SelectMessages(ctx context.Context, al ActorLookup, ts *types.TipSet, msgs inclNonces[from] = act.Nonce inclBalances[from] = act.Balance } - getbal += time.Since(getBalStart) + getbal += build.Clock.Since(getBalStart) if inclBalances[from].LessThan(msg.Message.RequiredFunds()) { tooLowFundMsgs++ @@ -648,7 +648,7 @@ func SelectMessages(ctx context.Context, al ActorLookup, ts *types.TipSet, msgs log.Warnf("%d messages in mempool had too high nonce", tooHighNonceMsgs) } - sm := time.Now() + sm := build.Clock.Now() if sm.Sub(start) > time.Second { log.Warnw("SelectMessages took a long time", "duration", sm.Sub(start), diff --git a/node/hello/hello.go b/node/hello/hello.go index a2a5fbd4e..5f35faafc 100644 --- a/node/hello/hello.go +++ b/node/hello/hello.go @@ -15,6 +15,7 @@ import ( protocol "github.com/libp2p/go-libp2p-core/protocol" cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain" "github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/types" @@ -67,7 +68,7 @@ func (hs *Service) HandleStream(s inet.Stream) { _ = s.Conn().Close() return } - arrived := time.Now() + arrived := build.Clock.Now() log.Debugw("genesis from hello", "tipset", hmsg.HeaviestTipSet, @@ -82,7 +83,7 @@ func (hs *Service) HandleStream(s inet.Stream) { go func() { defer s.Close() //nolint:errcheck - sent := time.Now() + sent := build.Clock.Now() msg := &LatencyMessage{ TArrial: arrived.UnixNano(), TSent: sent.UnixNano(), @@ -99,7 +100,7 @@ func (hs *Service) HandleStream(s inet.Stream) { if len(protos) == 0 { log.Warn("other peer hasnt completed libp2p identify, waiting a bit") // TODO: this better - time.Sleep(time.Millisecond * 300) + build.Clock.Sleep(time.Millisecond * 300) } ts, err := hs.syncer.FetchTipSet(context.Background(), s.Conn().RemotePeer(), types.NewTipSetKey(hmsg.HeaviestTipSet...)) @@ -146,7 +147,7 @@ func (hs *Service) SayHello(ctx context.Context, pid peer.ID) error { } log.Debug("Sending hello message: ", hts.Cids(), hts.Height(), gen.Cid()) - t0 := time.Now() + t0 := build.Clock.Now() if err := cborutil.WriteCborRPC(s, hmsg); err != nil { return err } @@ -155,13 +156,13 @@ func (hs *Service) SayHello(ctx context.Context, pid peer.ID) error { defer s.Close() //nolint:errcheck lmsg := &LatencyMessage{} - _ = s.SetReadDeadline(time.Now().Add(10 * time.Second)) + _ = s.SetReadDeadline(build.Clock.Now().Add(10 * time.Second)) err := cborutil.ReadCborRPC(s, lmsg) if err != nil { log.Infow("reading latency message", "error", err) } - t3 := time.Now() + t3 := build.Clock.Now() lat := t3.Sub(t0) // add to peer tracker if hs.pmgr != nil { diff --git a/node/modules/testing/genesis.go b/node/modules/testing/genesis.go index 930c11fc8..41587ed72 100644 --- a/node/modules/testing/genesis.go +++ b/node/modules/testing/genesis.go @@ -7,7 +7,6 @@ import ( "io" "io/ioutil" "os" - "time" "github.com/ipfs/go-blockservice" "github.com/ipfs/go-cid" @@ -20,6 +19,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/runtime" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/gen" genesis2 "github.com/filecoin-project/lotus/chain/gen/genesis" "github.com/filecoin-project/lotus/chain/types" @@ -71,7 +71,7 @@ func MakeGenesis(outFile, genesisTemplate string) func(bs dtypes.ChainBlockstore } if template.Timestamp == 0 { - template.Timestamp = uint64(time.Now().Unix()) + template.Timestamp = uint64(build.Clock.Now().Unix()) } b, err := genesis2.MakeGenesisBlock(context.TODO(), bs, syscalls, template) diff --git a/storage/miner.go b/storage/miner.go index a0e2c9225..42a436988 100644 --- a/storage/miner.go +++ b/storage/miner.go @@ -167,7 +167,7 @@ func NewWinningPoStProver(api api.FullNode, prover storage.Prover, verifier ffiw var _ gen.WinningPoStProver = (*StorageWpp)(nil) func (wpp *StorageWpp) GenerateCandidates(ctx context.Context, randomness abi.PoStRandomness, eligibleSectorCount uint64) ([]uint64, error) { - start := time.Now() + start := build.Clock.Now() cds, err := wpp.verifier.GenerateWinningPoStSectorChallenge(ctx, wpp.winnRpt, wpp.miner, randomness, eligibleSectorCount) if err != nil { @@ -185,7 +185,7 @@ func (wpp *StorageWpp) ComputeProof(ctx context.Context, ssi []abi.SectorInfo, r log.Infof("Computing WinningPoSt ;%+v; %v", ssi, rand) - start := time.Now() + start := build.Clock.Now() proof, err := wpp.prover.GenerateWinningPoSt(ctx, wpp.miner, ssi, rand) if err != nil { return nil, err diff --git a/storage/wdpost_run.go b/storage/wdpost_run.go index f6ec64583..9f3919240 100644 --- a/storage/wdpost_run.go +++ b/storage/wdpost_run.go @@ -430,7 +430,7 @@ func (s *WindowPoStScheduler) runPost(ctx context.Context, di miner.DeadlineInfo snums = append(snums, si.SectorNumber) } - tsStart := time.Now() + tsStart := build.Clock.Now() log.Infow("generating windowPost", "sectors", len(ssi)) diff --git a/storage/wdpost_sched.go b/storage/wdpost_sched.go index 077209a4e..8e3221ef9 100644 --- a/storage/wdpost_sched.go +++ b/storage/wdpost_sched.go @@ -14,6 +14,7 @@ import ( "github.com/filecoin-project/specs-storage/storage" "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/types" ) @@ -85,7 +86,7 @@ func (s *WindowPoStScheduler) Run(ctx context.Context) { if err != nil { log.Errorf("ChainNotify error: %+v") - time.Sleep(10 * time.Second) + build.Clock.Sleep(10 * time.Second) continue } diff --git a/tools/stats/metrics.go b/tools/stats/metrics.go index 626363731..3abb4b13b 100644 --- a/tools/stats/metrics.go +++ b/tools/stats/metrics.go @@ -66,7 +66,7 @@ func NewInfluxWriteQueue(ctx context.Context, influx client.Client) *InfluxWrite for i := 0; i < maxRetries; i++ { if err := influx.Write(batch); err != nil { log.Warnw("Failed to write batch", "error", err) - time.Sleep(time.Second * 15) + build.Clock.Sleep(15 * time.Second) continue } @@ -104,7 +104,7 @@ func InfluxNewBatch() (client.BatchPoints, error) { } func NewPoint(name string, value interface{}) models.Point { - pt, _ := models.NewPoint(name, models.Tags{}, map[string]interface{}{"value": value}, time.Now()) + pt, _ := models.NewPoint(name, models.Tags{}, map[string]interface{}{"value": value}, build.Clock.Now()) return pt } diff --git a/tools/stats/rpc.go b/tools/stats/rpc.go index d053ff561..6b6cef283 100644 --- a/tools/stats/rpc.go +++ b/tools/stats/rpc.go @@ -52,7 +52,7 @@ sync_complete: select { case <-ctx.Done(): return ctx.Err() - case <-time.After(5 * time.Second): + case <-build.Clock.After(5 * time.Second): state, err := napi.SyncState(ctx) if err != nil { return err @@ -97,13 +97,13 @@ sync_complete: select { case <-ctx.Done(): return ctx.Err() - case <-time.After(5 * time.Second): + case <-build.Clock.After(5 * time.Second): head, err := napi.ChainHead(ctx) if err != nil { return err } - timestampDelta := time.Now().Unix() - int64(head.MinTimestamp()) + timestampDelta := build.Clock.Now().Unix() - int64(head.MinTimestamp()) log.Infow( "Waiting for reasonable head height", From e13a251cc8bc1cd9399a51a10f6ccd2fe752f221 Mon Sep 17 00:00:00 2001 From: frrist Date: Wed, 8 Jul 2020 18:13:27 -0700 Subject: [PATCH 10/38] feat: add deal state and proposal tracking to cw --- cmd/lotus-chainwatch/storage.go | 160 +++++++++++++++++++++++++++++++- cmd/lotus-chainwatch/sync.go | 76 ++++++++++++--- 2 files changed, 219 insertions(+), 17 deletions(-) diff --git a/cmd/lotus-chainwatch/storage.go b/cmd/lotus-chainwatch/storage.go index 8a4215bd2..c9e66a6c2 100644 --- a/cmd/lotus-chainwatch/storage.go +++ b/cmd/lotus-chainwatch/storage.go @@ -3,6 +3,7 @@ package main import ( "context" "database/sql" + "strconv" "sync" "time" @@ -330,8 +331,15 @@ create table if not exists miner_sectors_heads primary key (miner_id,miner_sectors_cid) ); - -create type miner_sector_event_type as enum ('ADDED', 'EXTENDED', 'EXPIRED', 'TERMINATED'); +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'miner_sector_event_type') THEN + CREATE TYPE miner_sector_event_type AS ENUM + ( + 'ADDED','EXTENDED', 'EXPIRED', 'TERMINATED' + ); + END IF; +END$$; create table if not exists miner_sector_events ( @@ -342,7 +350,46 @@ create table if not exists miner_sector_events constraint miner_sector_events_pk primary key (sector_id, event, miner_id, state_root) -) +); + +create table if not exists market_deal_proposals +( + deal_id bigint not null, + + state_root text not null, + + piece_cid text not null, + piece_size bigint not null, + verified_deal bool not null, + + client_id text not null, + provider_id text not null, + + start_epoch bigint not null, + end_epoch bigint not null, + storage_price_per_epoch text not null, + + provider_collateral text not null, + client_collateral text not null, + + constraint market_deal_proposal_pk + primary key (deal_id) +); + +create table if not exists market_deal_states +( + deal_id bigint not null, + + state_root text not null, + + sector_start_epoch bigint not null, + last_update_epoch bigint not null, + slash_epoch bigint not null, + + constraint market_deal_states_pk + primary key (deal_id) + +); /* create or replace function miner_tips(epoch bigint) @@ -852,7 +899,7 @@ func (st *storage) updateMinerSectors(minerTips map[types.TipSetKey][]*minerStat } for _, added := range changes.Added { - if _, err := eventStmt.Exec(miner.addr.String(), added.Info.SectorNumber, miner.stateroot.String(), "ADDED"); err != nil { + if _, err := eventStmt.Exec(added.Info.SectorNumber, "ADDED", miner.addr.String(), miner.stateroot.String()); err != nil { return err } } @@ -900,6 +947,111 @@ func (st *storage) updateMinerSectors(minerTips map[types.TipSetKey][]*minerStat return updateTx.Commit() } +func (st *storage) storeMarketActorDealStates(marketTips map[types.TipSetKey]*marketStateInfo, api api.FullNode) error { + tx, err := st.db.Begin() + if err != nil { + return err + } + if _, err := tx.Exec(`create temp table mds (like market_deal_states excluding constraints) on commit drop;`); err != nil { + return err + } + stmt, err := tx.Prepare(`copy mds (deal_id, state_root, sector_start_epoch, last_update_epoch, slash_epoch) from STDIN`) + if err != nil { + return err + } + for tskey, mt := range marketTips { + dealStates, err := api.StateMarketDeals(context.TODO(), tskey) + if err != nil { + return err + } + + for dealID, ds := range dealStates { + id, err := strconv.ParseUint(dealID, 10, 64) + if err != nil { + return err + } + + if _, err := stmt.Exec( + id, + mt.stateroot.String(), + ds.State.SectorStartEpoch, + ds.State.LastUpdatedEpoch, + ds.State.SlashEpoch, + ); err != nil { + return err + } + + } + } + if err := stmt.Close(); err != nil { + return err + } + + if _, err := tx.Exec(`insert into market_deal_states select * from mds on conflict do nothing`); err != nil { + return err + } + + return tx.Commit() + +} + +func (st *storage) storeMarketActorDealProposals(marketTips map[types.TipSetKey]*marketStateInfo, api api.FullNode) error { + tx, err := st.db.Begin() + if err != nil { + return err + } + + if _, err := tx.Exec(`create temp table mdp (like market_deal_proposals excluding constraints) on commit drop;`); err != nil { + return xerrors.Errorf("prep temp: %w", err) + } + + stmt, err := tx.Prepare(`copy mdp (deal_id, state_root, piece_cid, piece_size, verified_deal, client_id, provider_id, start_epoch, end_epoch, storage_price_per_epoch, provider_collateral, client_collateral) from STDIN`) + if err != nil { + return err + } + + for tskey, mt := range marketTips { + dealStates, err := api.StateMarketDeals(context.TODO(), tskey) + if err != nil { + return err + } + + for dealID, ds := range dealStates { + id, err := strconv.ParseUint(dealID, 10, 64) + if err != nil { + return err + } + + if _, err := stmt.Exec( + id, + mt.stateroot.String(), + ds.Proposal.PieceCID.String(), + ds.Proposal.PieceSize, + ds.Proposal.VerifiedDeal, + ds.Proposal.Client.String(), + ds.Proposal.Provider.String(), + ds.Proposal.StartEpoch, + ds.Proposal.EndEpoch, + ds.Proposal.StoragePricePerEpoch.String(), + ds.Proposal.ProviderCollateral.String(), + ds.Proposal.ClientCollateral.String(), + ); err != nil { + return err + } + + } + } + if err := stmt.Close(); err != nil { + return err + } + if _, err := tx.Exec(`insert into market_deal_proposals select * from mdp on conflict do nothing`); err != nil { + return err + } + + return tx.Commit() + +} + func (st *storage) storeHeaders(bhs map[cid.Cid]*types.BlockHeader, sync bool) error { st.headerLk.Lock() defer st.headerLk.Unlock() diff --git a/cmd/lotus-chainwatch/sync.go b/cmd/lotus-chainwatch/sync.go index 442fd9c0c..14b761ddb 100644 --- a/cmd/lotus-chainwatch/sync.go +++ b/cmd/lotus-chainwatch/sync.go @@ -6,6 +6,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/filecoin-project/specs-actors/actors/builtin/market" "math" "sync" "time" @@ -81,6 +82,20 @@ type minerStateInfo struct { psize uint64 } +type marketStateInfo struct { + // common + act types.Actor + stateroot cid.Cid + + // calculating changes + // calculating changes + tsKey types.TipSetKey + parentTsKey types.TipSetKey + + // market actor specific + state market.State +} + type actorInfo struct { stateroot cid.Cid tsKey types.TipSetKey @@ -313,23 +328,28 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. log.Infof("Getting actor change info") + // highly likely that the market actor will change at every epoch + marketActorChanges := make(map[types.TipSetKey]*marketStateInfo, len(changes)) + minerChanges := 0 for addr, m := range actors { for actor, c := range m { - // reward actor - if actor.Code == builtin.RewardActorCodeID { - rewardTips[c.tsKey] = &rewardStateInfo{ - stateroot: c.stateroot, - baselinePower: big.Zero(), - } + // only want actors with head change events + if _, found := headsSeen[actor.Head]; found { continue } + headsSeen[actor.Head] = struct{}{} - // miner actors with head change events - if actor.Code == builtin.StorageMinerActorCodeID { - if _, found := headsSeen[actor.Head]; found { - continue + switch actor.Code { + case builtin.StorageMarketActorCodeID: + marketActorChanges[c.tsKey] = &marketStateInfo{ + act: actor, + stateroot: c.stateroot, + tsKey: c.tsKey, + parentTsKey: c.parentTsKey, + state: market.State{}, } + case builtin.StorageMinerActorCodeID: minerChanges++ minerTips[c.tsKey] = append(minerTips[c.tsKey], &minerStateInfo{ @@ -346,10 +366,14 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. rawPower: big.Zero(), qalPower: big.Zero(), }) - - headsSeen[actor.Head] = struct{}{} + // reward actor + case builtin.RewardActorCodeID: + rewardTips[c.tsKey] = &rewardStateInfo{ + stateroot: c.stateroot, + baselinePower: big.Zero(), + } } - continue + } } @@ -435,6 +459,21 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. }) log.Infow("Completed Miner Processing", "duration", time.Since(minerProcessingStartedAt).String(), "processed", minerChanges) + log.Info("Getting market actor info") + // TODO: consider taking the min of the array length and using that for concurrency param, e.g: + // concurrency := math.Min(len(marketActorChanges), 50) + parmap.Par(50, parmap.MapArr(marketActorChanges), func(mrktInfo *marketStateInfo) { + astb, err := api.ChainReadObj(ctx, mrktInfo.act.Head) + if err != nil { + log.Error(err) + return + } + if err := mrktInfo.state.UnmarshalCBOR(bytes.NewReader(astb)); err != nil { + log.Error(err) + return + } + }) + log.Info("Getting receipts") receipts := fetchParentReceipts(ctx, api, toSync) @@ -496,6 +535,17 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. return } + log.Info("Storing market actor info") + if err := st.storeMarketActorDealProposals(marketActorChanges, api); err != nil { + log.Error(err) + return + } + + if err := st.storeMarketActorDealStates(marketActorChanges, api); err != nil { + log.Error(err) + return + } + log.Infof("Storing messages") if err := st.storeMessages(msgs); err != nil { From 1e2e62bad66f926048ddbaa4cd96bcb764114fdc Mon Sep 17 00:00:00 2001 From: frrist Date: Thu, 9 Jul 2020 10:49:02 -0700 Subject: [PATCH 11/38] polish: track unpadded piece size in deal prop --- cmd/lotus-chainwatch/storage.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/lotus-chainwatch/storage.go b/cmd/lotus-chainwatch/storage.go index c9e66a6c2..6efa3d86a 100644 --- a/cmd/lotus-chainwatch/storage.go +++ b/cmd/lotus-chainwatch/storage.go @@ -359,7 +359,8 @@ create table if not exists market_deal_proposals state_root text not null, piece_cid text not null, - piece_size bigint not null, + padded_piece_size bigint not null, + unpadded_piece_size bigint not null, verified_deal bool not null, client_id text not null, @@ -1005,7 +1006,7 @@ func (st *storage) storeMarketActorDealProposals(marketTips map[types.TipSetKey] return xerrors.Errorf("prep temp: %w", err) } - stmt, err := tx.Prepare(`copy mdp (deal_id, state_root, piece_cid, piece_size, verified_deal, client_id, provider_id, start_epoch, end_epoch, storage_price_per_epoch, provider_collateral, client_collateral) from STDIN`) + stmt, err := tx.Prepare(`copy mdp (deal_id, state_root, piece_cid, padded_piece_size, unpadded_piece_size, verified_deal, client_id, provider_id, start_epoch, end_epoch, storage_price_per_epoch, provider_collateral, client_collateral) from STDIN`) if err != nil { return err } @@ -1027,6 +1028,7 @@ func (st *storage) storeMarketActorDealProposals(marketTips map[types.TipSetKey] mt.stateroot.String(), ds.Proposal.PieceCID.String(), ds.Proposal.PieceSize, + ds.Proposal.PieceSize.Unpadded(), ds.Proposal.VerifiedDeal, ds.Proposal.Client.String(), ds.Proposal.Provider.String(), From f9d8b051f4c2894d5e08a06b412e00cf7f9160e2 Mon Sep 17 00:00:00 2001 From: frrist Date: Thu, 9 Jul 2020 14:18:19 -0700 Subject: [PATCH 12/38] polish: track tipset height for processing --- cmd/lotus-chainwatch/storage.go | 29 ++++++++++++++++------------- cmd/lotus-chainwatch/sync.go | 26 +++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/cmd/lotus-chainwatch/storage.go b/cmd/lotus-chainwatch/storage.go index 6efa3d86a..5b0f089a2 100644 --- a/cmd/lotus-chainwatch/storage.go +++ b/cmd/lotus-chainwatch/storage.go @@ -381,14 +381,14 @@ create table if not exists market_deal_states ( deal_id bigint not null, - state_root text not null, - sector_start_epoch bigint not null, last_update_epoch bigint not null, slash_epoch bigint not null, - + + state_root text not null, + constraint market_deal_states_pk - primary key (deal_id) + primary key (deal_id,sector_start_epoch,last_update_epoch,slash_epoch) ); @@ -948,7 +948,7 @@ func (st *storage) updateMinerSectors(minerTips map[types.TipSetKey][]*minerStat return updateTx.Commit() } -func (st *storage) storeMarketActorDealStates(marketTips map[types.TipSetKey]*marketStateInfo, api api.FullNode) error { +func (st *storage) storeMarketActorDealStates(marketTips map[types.TipSetKey]*marketStateInfo, tipHeights []tipsetKeyHeight, api api.FullNode) error { tx, err := st.db.Begin() if err != nil { return err @@ -956,12 +956,14 @@ func (st *storage) storeMarketActorDealStates(marketTips map[types.TipSetKey]*ma if _, err := tx.Exec(`create temp table mds (like market_deal_states excluding constraints) on commit drop;`); err != nil { return err } - stmt, err := tx.Prepare(`copy mds (deal_id, state_root, sector_start_epoch, last_update_epoch, slash_epoch) from STDIN`) + stmt, err := tx.Prepare(`copy mds (deal_id, sector_start_epoch, last_update_epoch, slash_epoch, state_root) from STDIN`) if err != nil { return err } - for tskey, mt := range marketTips { - dealStates, err := api.StateMarketDeals(context.TODO(), tskey) + for _, th := range tipHeights { + mt := marketTips[th.tsKey] + log.Infow("store deal state", "height", th.height, "tipset", th.tsKey, "minerTS", mt.tsKey) + dealStates, err := api.StateMarketDeals(context.TODO(), mt.tsKey) if err != nil { return err } @@ -974,10 +976,10 @@ func (st *storage) storeMarketActorDealStates(marketTips map[types.TipSetKey]*ma if _, err := stmt.Exec( id, - mt.stateroot.String(), ds.State.SectorStartEpoch, ds.State.LastUpdatedEpoch, ds.State.SlashEpoch, + mt.stateroot.String(), ); err != nil { return err } @@ -993,10 +995,9 @@ func (st *storage) storeMarketActorDealStates(marketTips map[types.TipSetKey]*ma } return tx.Commit() - } -func (st *storage) storeMarketActorDealProposals(marketTips map[types.TipSetKey]*marketStateInfo, api api.FullNode) error { +func (st *storage) storeMarketActorDealProposals(marketTips map[types.TipSetKey]*marketStateInfo, tipHeights []tipsetKeyHeight, api api.FullNode) error { tx, err := st.db.Begin() if err != nil { return err @@ -1011,8 +1012,10 @@ func (st *storage) storeMarketActorDealProposals(marketTips map[types.TipSetKey] return err } - for tskey, mt := range marketTips { - dealStates, err := api.StateMarketDeals(context.TODO(), tskey) + // insert in sorted order (lowest height -> highest height) since dealid is pk of table. + for _, th := range tipHeights { + mt := marketTips[th.tsKey] + dealStates, err := api.StateMarketDeals(context.TODO(), mt.tsKey) if err != nil { return err } diff --git a/cmd/lotus-chainwatch/sync.go b/cmd/lotus-chainwatch/sync.go index 14b761ddb..45dcde1b8 100644 --- a/cmd/lotus-chainwatch/sync.go +++ b/cmd/lotus-chainwatch/sync.go @@ -6,8 +6,8 @@ import ( "context" "encoding/json" "fmt" - "github.com/filecoin-project/specs-actors/actors/builtin/market" "math" + "sort" "sync" "time" @@ -19,6 +19,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/specs-actors/actors/abi/big" "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/specs-actors/actors/builtin/market" "github.com/filecoin-project/specs-actors/actors/builtin/miner" "github.com/filecoin-project/specs-actors/actors/builtin/power" "github.com/filecoin-project/specs-actors/actors/builtin/reward" @@ -103,6 +104,11 @@ type actorInfo struct { state string } +type tipsetKeyHeight struct { + height abi.ChainEpoch + tsKey types.TipSetKey +} + func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types.TipSet, maxBatch int) { var alk sync.Mutex @@ -184,6 +190,9 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. log.Infow("Starting Sync", "height", minH, "numBlocks", len(toSync), "maxBatch", maxBatch) + // relate tipset keys to height so they may be processed in ascending order. + var tipHeights []tipsetKeyHeight + tipsSeen := make(map[types.TipSetKey]struct{}) // map of addresses to changed actors var changes map[string]types.Actor // collect all actor state that has changes between block headers @@ -291,9 +300,20 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. parentTsKey: pts.Parents(), } addressToID[addr] = address.Undef + if _, ok := tipsSeen[pts.Key()]; !ok { + tipHeights = append(tipHeights, tipsetKeyHeight{ + height: pts.Height(), + tsKey: pts.Key(), + }) + } + tipsSeen[pts.Key()] = struct{}{} alk.Unlock() } }) + // sort tipHeights in ascending order. + sort.Slice(tipHeights, func(i, j int) bool { + return tipHeights[i].height < tipHeights[j].height + }) // map of tipset to reward state rewardTips := make(map[types.TipSetKey]*rewardStateInfo, len(changes)) @@ -536,12 +556,12 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types. } log.Info("Storing market actor info") - if err := st.storeMarketActorDealProposals(marketActorChanges, api); err != nil { + if err := st.storeMarketActorDealProposals(marketActorChanges, tipHeights, api); err != nil { log.Error(err) return } - if err := st.storeMarketActorDealStates(marketActorChanges, api); err != nil { + if err := st.storeMarketActorDealStates(marketActorChanges, tipHeights, api); err != nil { log.Error(err) return } From 14ec9a2068bba34873f8ddd45d01327347ec12a1 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 11 Jul 2020 16:55:13 +0800 Subject: [PATCH 13/38] update storage miner and seal worker document --- .github/ISSUE_TEMPLATE/sealingfailed.md | 4 ++-- api/api_storage.go | 2 +- api/client/client.go | 2 +- api/test/mining.go | 2 +- chain/gen/genesis/genesis.go | 2 +- cmd/lotus-fountain/main.go | 4 ++-- cmd/lotus-fountain/site/_miner.html | 6 +++--- cmd/lotus-fountain/site/wait.html | 8 ++++---- cmd/lotus-seal-worker/main.go | 2 +- cmd/lotus-storage-miner/info.go | 2 +- cmd/lotus-storage-miner/init.go | 18 +++++++++--------- cmd/lotus-storage-miner/main.go | 2 +- cmd/lotus-storage-miner/market.go | 6 +++--- cmd/lotus-storage-miner/run.go | 2 +- cmd/lotus-storage-miner/stop.go | 2 +- documentation/en/.glossary.json | 10 +++++----- documentation/en/.library.json | 6 +++--- documentation/en/api-scripting-support.md | 6 +++--- documentation/en/api.md | 8 ++++---- documentation/en/architecture.md | 2 +- documentation/en/dev-tools-pond-ui.md | 2 +- documentation/en/faqs.md | 6 +++--- documentation/en/getting-started.md | 8 ++++---- documentation/en/hardware-mining.md | 2 +- ...s-seal-worker.md => mining-lotus-worker.md} | 18 +++++++++--------- documentation/en/mining-troubleshooting.md | 4 ++-- documentation/en/mining.md | 6 +++--- documentation/en/retrieving-data.md | 2 +- documentation/en/setting-a-static-port.md | 2 +- .../en/storing-data-troubleshooting.md | 2 +- documentation/en/storing-data.md | 2 +- lotuspond/front/src/FullNode.js | 2 +- lotuspond/front/src/StorageNode.js | 2 +- lotuspond/front/src/StorageNodeInit.js | 2 +- node/builder.go | 4 ++-- node/config/def.go | 2 +- node/modules/dtypes/miner.go | 4 ++-- node/modules/dtypes/shutdown.go | 2 +- node/modules/storageminer.go | 2 +- scripts/devnet.bash | 2 +- scripts/lotus-miner.service | 2 +- scripts/miner-mon.sh | 2 +- scripts/quick-network-join.bash | 2 +- tools/dockers/docker-examples/README.md | 4 ++-- .../basic-miner-busybox/README.md | 2 +- 45 files changed, 92 insertions(+), 92 deletions(-) rename documentation/en/{mining-lotus-seal-worker.md => mining-lotus-worker.md} (74%) diff --git a/.github/ISSUE_TEMPLATE/sealingfailed.md b/.github/ISSUE_TEMPLATE/sealingfailed.md index 5355db10f..2084b8dd4 100644 --- a/.github/ISSUE_TEMPLATE/sealingfailed.md +++ b/.github/ISSUE_TEMPLATE/sealingfailed.md @@ -25,9 +25,9 @@ The output of `./lotus-miner sectors list`. The output of `./lotus-miner sectors status --log ` for the failed sector(s). -**Lotus storage miner logs** +**Lotus miner logs** -Please go through the logs of your storage miner, and include screenshots of any error-like messages you find. +Please go through the logs of your miner, and include screenshots of any error-like messages you find. **Version** diff --git a/api/api_storage.go b/api/api_storage.go index 6402de2b6..f06207cd2 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -16,7 +16,7 @@ import ( "github.com/filecoin-project/specs-actors/actors/abi" ) -// StorageMiner is a low-level interface to the Filecoin network storage miner node +// StorageMiner is a low-level interface to the Filecoin network miner node type StorageMiner interface { Common diff --git a/api/client/client.go b/api/client/client.go index 20bad2048..4029838fa 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -34,7 +34,7 @@ func NewFullNodeRPC(addr string, requestHeader http.Header) (api.FullNode, jsonr return &res, closer, err } -// NewStorageMinerRPC creates a new http jsonrpc client for storage miner +// NewStorageMinerRPC creates a new http jsonrpc client for miner func NewStorageMinerRPC(addr string, requestHeader http.Header) (api.StorageMiner, jsonrpc.ClientCloser, error) { var res apistruct.StorageMinerStruct closer, err := jsonrpc.NewMergeClient(addr, "Filecoin", diff --git a/api/test/mining.go b/api/test/mining.go index d2b56758e..dcbd59dd1 100644 --- a/api/test/mining.go +++ b/api/test/mining.go @@ -89,7 +89,7 @@ func TestDealMining(t *testing.T, b APIBuilder, blocktime time.Duration, carExpo ctx := context.Background() n, sn := b(t, 1, []StorageMiner{ {Full: 0, Preseal: PresealGenesis}, - {Full: 0, Preseal: 0}, // TODO: Add support for storage miners on non-first full node + {Full: 0, Preseal: 0}, // TODO: Add support for miners on non-first full node }) client := n[0].FullNode.(*impl.FullNodeAPI) provider := sn[1] diff --git a/chain/gen/genesis/genesis.go b/chain/gen/genesis/genesis.go index f1f9812f1..b5b9dfe28 100644 --- a/chain/gen/genesis/genesis.go +++ b/chain/gen/genesis/genesis.go @@ -312,7 +312,7 @@ func MakeGenesisBlock(ctx context.Context, bs bstore.Blockstore, sys runtime.Sys stateroot, err = SetupStorageMiners(ctx, cs, stateroot, template.Miners) if err != nil { - return nil, xerrors.Errorf("setup storage miners failed: %w", err) + return nil, xerrors.Errorf("setup miners failed: %w", err) } cst := cbor.NewCborStore(bs) diff --git a/cmd/lotus-fountain/main.go b/cmd/lotus-fountain/main.go index 9743f209f..b6f51f9c0 100644 --- a/cmd/lotus-fountain/main.go +++ b/cmd/lotus-fountain/main.go @@ -414,7 +414,7 @@ func (h *handler) msgwait(w http.ResponseWriter, r *http.Request) { if mw.Receipt.ExitCode != 0 { w.WriteHeader(400) - w.Write([]byte(xerrors.Errorf("create storage miner failed: exit code %d", mw.Receipt.ExitCode).Error())) + w.Write([]byte(xerrors.Errorf("create miner failed: exit code %d", mw.Receipt.ExitCode).Error())) return } w.WriteHeader(200) @@ -437,7 +437,7 @@ func (h *handler) msgwaitaddr(w http.ResponseWriter, r *http.Request) { if mw.Receipt.ExitCode != 0 { w.WriteHeader(400) - w.Write([]byte(xerrors.Errorf("create storage miner failed: exit code %d", mw.Receipt.ExitCode).Error())) + w.Write([]byte(xerrors.Errorf("create miner failed: exit code %d", mw.Receipt.ExitCode).Error())) return } w.WriteHeader(200) diff --git a/cmd/lotus-fountain/site/_miner.html b/cmd/lotus-fountain/site/_miner.html index d83f90d72..a0ee95628 100644 --- a/cmd/lotus-fountain/site/_miner.html +++ b/cmd/lotus-fountain/site/_miner.html @@ -1,14 +1,14 @@ - Creating Storage Miner - Lotus Fountain + Creating Miner - Lotus Fountain
- [CREATING STORAGE MINER] + [CREATING MINER]
@@ -26,7 +26,7 @@ Waiting for transaction on chain..
- When creating storage miner, DO NOT REFRESH THE PAGE, wait for it to load. This can take more than 5min. + When creating miner, DO NOT REFRESH THE PAGE, wait for it to load. This can take more than 5min.
If you don't have an owner/worker address, you can create it by following these instructions. diff --git a/cmd/lotus-fountain/site/wait.html b/cmd/lotus-fountain/site/wait.html index f6f0e2062..953db16a5 100644 --- a/cmd/lotus-fountain/site/wait.html +++ b/cmd/lotus-fountain/site/wait.html @@ -1,14 +1,14 @@ - Creating Storage Miner (wait) - Lotus Fountain + Creating Miner (wait) - Lotus Fountain
- [CREATING STORAGE MINER] + [CREATING MINER]
Gas Funds:    - WAIT @@ -17,10 +17,10 @@ Miner Actor:  - WAIT