Merge branch 'master' into adlrocha/cns-iface-master
This commit is contained in:
commit
0f92bced9d
@ -5,6 +5,7 @@ orbs:
|
|||||||
executors:
|
executors:
|
||||||
golang:
|
golang:
|
||||||
docker:
|
docker:
|
||||||
|
# Must match GO_VERSION_MIN in project root
|
||||||
- image: cimg/go:1.18.1
|
- image: cimg/go:1.18.1
|
||||||
resource_class: 2xlarge
|
resource_class: 2xlarge
|
||||||
ubuntu:
|
ubuntu:
|
||||||
@ -22,11 +23,6 @@ executors:
|
|||||||
|
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
install-deps:
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install python-is-python3
|
|
||||||
prepare:
|
prepare:
|
||||||
parameters:
|
parameters:
|
||||||
linux:
|
linux:
|
||||||
@ -40,19 +36,29 @@ commands:
|
|||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- git_fetch_all_tags
|
- git_fetch_all_tags
|
||||||
- checkout
|
|
||||||
- when:
|
- when:
|
||||||
condition: << parameters.linux >>
|
condition: <<parameters.linux>>
|
||||||
steps:
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Check Go Version
|
||||||
|
command: |
|
||||||
|
v=`go version | { read _ _ v _; echo ${v#go}; }`
|
||||||
|
if [[ $v != `cat GO_VERSION_MIN` ]]; then
|
||||||
|
echo "GO_VERSION_MIN file does not match the go version being used."
|
||||||
|
echo "Please update image to cimg/go:`cat GO_VERSION_MIN` or update GO_VERSION_MIN to $v."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
- run: sudo apt-get update
|
- run: sudo apt-get update
|
||||||
- run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
|
- run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
|
||||||
|
- run: sudo apt-get install python-is-python3
|
||||||
|
|
||||||
- when:
|
- when:
|
||||||
condition: <<parameters.darwin>>
|
condition: <<parameters.darwin>>
|
||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
name: Install Go
|
name: Install Go
|
||||||
command: |
|
command: |
|
||||||
curl https://dl.google.com/go/go1.18.1.darwin-amd64.pkg -o /tmp/go.pkg && \
|
curl https://dl.google.com/go/go`cat GO_VERSION_MIN`.darwin-amd64.pkg -o /tmp/go.pkg && \
|
||||||
sudo installer -pkg /tmp/go.pkg -target /
|
sudo installer -pkg /tmp/go.pkg -target /
|
||||||
- run:
|
- run:
|
||||||
name: Export Go
|
name: Export Go
|
||||||
@ -60,21 +66,12 @@ commands:
|
|||||||
echo 'export GOPATH="${HOME}/go"' >> $BASH_ENV
|
echo 'export GOPATH="${HOME}/go"' >> $BASH_ENV
|
||||||
- run: go version
|
- run: go version
|
||||||
- run:
|
- run:
|
||||||
name: Install pkg-config, goreleaser, and sha512sum
|
name: Install dependencies with Homebrew
|
||||||
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config goreleaser/tap/goreleaser coreutils
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config coreutils jq hwloc
|
||||||
- run:
|
- run:
|
||||||
name: Install Rust
|
name: Install Rust
|
||||||
command: |
|
command: |
|
||||||
curl https://sh.rustup.rs -sSf | sh -s -- -y
|
curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||||
- run:
|
|
||||||
name: Install hwloc
|
|
||||||
command: |
|
|
||||||
mkdir ~/hwloc
|
|
||||||
curl --location https://download.open-mpi.org/release/hwloc/v2.4/hwloc-2.4.1.tar.gz --output ~/hwloc/hwloc-2.4.1.tar.gz
|
|
||||||
cd ~/hwloc
|
|
||||||
tar -xvzpf hwloc-2.4.1.tar.gz
|
|
||||||
cd hwloc-2.4.1
|
|
||||||
./configure && make && sudo make install
|
|
||||||
- run: git submodule sync
|
- run: git submodule sync
|
||||||
- run: git submodule update --init
|
- run: git submodule update --init
|
||||||
download-params:
|
download-params:
|
||||||
@ -94,28 +91,13 @@ commands:
|
|||||||
install_ipfs:
|
install_ipfs:
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
apt update
|
curl -O https://dist.ipfs.tech/kubo/v0.16.0/kubo_v0.16.0_linux-amd64.tar.gz
|
||||||
apt install -y wget
|
tar -xvzf kubo_v0.16.0_linux-amd64.tar.gz
|
||||||
wget https://github.com/ipfs/go-ipfs/releases/download/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz
|
|
||||||
wget https://github.com/ipfs/go-ipfs/releases/download/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz.sha512
|
|
||||||
if [ "$(sha512sum go-ipfs_v0.12.2_linux-amd64.tar.gz)" != "$(cat go-ipfs_v0.12.2_linux-amd64.tar.gz.sha512)" ]
|
|
||||||
then
|
|
||||||
echo "ipfs failed checksum check"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
tar -xf go-ipfs_v0.12.2_linux-amd64.tar.gz
|
|
||||||
mv go-ipfs/ipfs /usr/local/bin/ipfs
|
|
||||||
chmod +x /usr/local/bin/ipfs
|
|
||||||
install_ipfs_macos:
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
curl -O https://dist.ipfs.io/kubo/v0.14.0/kubo_v0.14.0_darwin-amd64.tar.gz
|
|
||||||
tar -xvzf kubo_v0.14.0_darwin-amd64.tar.gz
|
|
||||||
pushd kubo
|
pushd kubo
|
||||||
sudo bash install.sh
|
sudo bash install.sh
|
||||||
popd
|
popd
|
||||||
rm -rf kubo/
|
rm -rf kubo
|
||||||
rm kubo_v0.14.0_darwin-amd64.tar.gz
|
rm kubo_v0.16.0_linux-amd64.tar.gz
|
||||||
git_fetch_all_tags:
|
git_fetch_all_tags:
|
||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
@ -146,7 +128,6 @@ jobs:
|
|||||||
mod-tidy-check:
|
mod-tidy-check:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: go mod tidy -v
|
- run: go mod tidy -v
|
||||||
- run:
|
- run:
|
||||||
@ -154,34 +135,9 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
git --no-pager diff go.mod go.sum
|
git --no-pager diff go.mod go.sum
|
||||||
git --no-pager diff --quiet go.mod go.sum
|
git --no-pager diff --quiet go.mod go.sum
|
||||||
build-linux:
|
|
||||||
executor: golang
|
|
||||||
steps:
|
|
||||||
- install-deps
|
|
||||||
- prepare
|
|
||||||
- run: sudo apt-get update
|
|
||||||
- run: sudo apt-get install npm
|
|
||||||
- run:
|
|
||||||
command: make buildall
|
|
||||||
- run:
|
|
||||||
name: check tag and version output match
|
|
||||||
command: ./scripts/version-check.sh ./lotus
|
|
||||||
- store_artifacts:
|
|
||||||
path: lotus
|
|
||||||
- store_artifacts:
|
|
||||||
path: lotus-miner
|
|
||||||
- store_artifacts:
|
|
||||||
path: lotus-worker
|
|
||||||
- run: mkdir linux && mv lotus lotus-miner lotus-worker linux/
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
build-debug:
|
build-debug:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make debug
|
command: make debug
|
||||||
@ -214,7 +170,6 @@ jobs:
|
|||||||
description: gotestsum format. https://github.com/gotestyourself/gotestsum#format
|
description: gotestsum format. https://github.com/gotestyourself/gotestsum#format
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make deps lotus
|
command: make deps lotus
|
||||||
@ -258,7 +213,6 @@ jobs:
|
|||||||
submodule is used.
|
submodule is used.
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make deps lotus
|
command: make deps lotus
|
||||||
@ -301,36 +255,6 @@ jobs:
|
|||||||
path: /tmp/test-reports
|
path: /tmp/test-reports
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: /tmp/test-artifacts/conformance-coverage.html
|
path: /tmp/test-artifacts/conformance-coverage.html
|
||||||
build-ntwk-calibration:
|
|
||||||
description: |
|
|
||||||
Compile lotus binaries for the calibration network
|
|
||||||
parameters:
|
|
||||||
<<: *test-params
|
|
||||||
executor: << parameters.executor >>
|
|
||||||
steps:
|
|
||||||
- install-deps
|
|
||||||
- prepare
|
|
||||||
- run: make calibnet
|
|
||||||
- run: mkdir linux-calibrationnet && mv lotus lotus-miner lotus-worker linux-calibrationnet
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- linux-calibrationnet
|
|
||||||
build-ntwk-butterfly:
|
|
||||||
description: |
|
|
||||||
Compile lotus binaries for the butterfly network
|
|
||||||
parameters:
|
|
||||||
<<: *test-params
|
|
||||||
executor: << parameters.executor >>
|
|
||||||
steps:
|
|
||||||
- install-deps
|
|
||||||
- prepare
|
|
||||||
- run: make butterflynet
|
|
||||||
- run: mkdir linux-butterflynet && mv lotus lotus-miner lotus-worker linux-butterflynet
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- linux-butterflynet
|
|
||||||
build-lotus-soup:
|
build-lotus-soup:
|
||||||
description: |
|
description: |
|
||||||
Compile `lotus-soup` Testground test plan
|
Compile `lotus-soup` Testground test plan
|
||||||
@ -338,7 +262,6 @@ jobs:
|
|||||||
<<: *test-params
|
<<: *test-params
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: cd extern/filecoin-ffi && make
|
- run: cd extern/filecoin-ffi && make
|
||||||
- run:
|
- run:
|
||||||
@ -354,7 +277,6 @@ jobs:
|
|||||||
<<: *test-params
|
<<: *test-params
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
name: "download testground"
|
name: "download testground"
|
||||||
@ -374,48 +296,104 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: "trigger payment channel stress testplan on taas"
|
name: "trigger payment channel stress testplan on taas"
|
||||||
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/paych-stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
|
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/paych-stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
|
||||||
build-macos:
|
|
||||||
|
build-linux-amd64:
|
||||||
|
executor: golang
|
||||||
|
steps:
|
||||||
|
- prepare
|
||||||
|
- run: make lotus lotus-miner lotus-worker
|
||||||
|
- run:
|
||||||
|
name: check tag and version output match
|
||||||
|
command: ./scripts/version-check.sh ./lotus
|
||||||
|
- run: |
|
||||||
|
mkdir -p /tmp/workspace/linux_amd64_v1 && \
|
||||||
|
mv lotus lotus-miner lotus-worker /tmp/workspace/linux_amd64_v1/
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/workspace
|
||||||
|
paths:
|
||||||
|
- linux_amd64_v1
|
||||||
|
|
||||||
|
build-darwin-amd64:
|
||||||
description: build darwin lotus binary
|
description: build darwin lotus binary
|
||||||
parameters:
|
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
||||||
publish:
|
|
||||||
default: false
|
|
||||||
description: publish github release and homebrew?
|
|
||||||
type: boolean
|
|
||||||
macos:
|
macos:
|
||||||
xcode: "13.4.1"
|
xcode: "13.4.1"
|
||||||
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
|
||||||
steps:
|
steps:
|
||||||
- prepare:
|
- prepare:
|
||||||
linux: false
|
linux: false
|
||||||
darwin: true
|
darwin: true
|
||||||
- install_ipfs_macos
|
- run: make lotus lotus-miner lotus-worker
|
||||||
- restore_cache:
|
- run:
|
||||||
name: restore cargo cache
|
name: check tag and version output match
|
||||||
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
|
command: ./scripts/version-check.sh ./lotus
|
||||||
|
- run: |
|
||||||
|
mkdir -p /tmp/workspace/darwin_amd64_v1 && \
|
||||||
|
mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_amd64_v1/
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/workspace
|
||||||
|
paths:
|
||||||
|
- darwin_amd64_v1
|
||||||
|
|
||||||
|
build-darwin-arm64:
|
||||||
|
description: self-hosted m1 runner
|
||||||
|
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
||||||
|
machine: true
|
||||||
|
resource_class: filecoin-project/self-hosted-m1
|
||||||
|
steps:
|
||||||
|
- run: echo 'export PATH=/opt/homebrew/bin:"$PATH"' >> "$BASH_ENV"
|
||||||
|
- prepare:
|
||||||
|
linux: false
|
||||||
|
darwin: true
|
||||||
|
- run: |
|
||||||
|
export CPATH=$(brew --prefix)/include
|
||||||
|
export LIBRARY_PATH=$(brew --prefix)/lib
|
||||||
|
make lotus lotus-miner lotus-worker
|
||||||
|
- run:
|
||||||
|
name: check tag and version output match
|
||||||
|
command: ./scripts/version-check.sh ./lotus
|
||||||
|
- run: |
|
||||||
|
mkdir -p /tmp/workspace/darwin_arm64 && \
|
||||||
|
mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_arm64/
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/workspace
|
||||||
|
paths:
|
||||||
|
- darwin_arm64
|
||||||
|
- run:
|
||||||
|
command: make clean
|
||||||
|
when: always
|
||||||
|
- run:
|
||||||
|
name: cleanup homebrew
|
||||||
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew uninstall pkg-config coreutils jq hwloc
|
||||||
|
when: always
|
||||||
|
|
||||||
|
release:
|
||||||
|
executor: golang
|
||||||
|
parameters:
|
||||||
|
dry-run:
|
||||||
|
default: false
|
||||||
|
description: should this release actually publish it's artifacts?
|
||||||
|
type: boolean
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: |
|
||||||
|
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install goreleaser-pro
|
||||||
|
- install_ipfs
|
||||||
|
- attach_workspace:
|
||||||
|
at: /tmp/workspace
|
||||||
- when:
|
- when:
|
||||||
condition: << parameters.publish >>
|
condition: << parameters.dry-run >>
|
||||||
steps:
|
steps:
|
||||||
- run: goreleaser release --rm-dist
|
- run: goreleaser release --rm-dist --snapshot --debug
|
||||||
- run: ./scripts/generate-checksums.sh
|
- run: ./scripts/generate-checksums.sh
|
||||||
- run: ./scripts/publish-checksums.sh
|
|
||||||
- when:
|
- when:
|
||||||
condition:
|
condition:
|
||||||
not: << parameters.publish >>
|
not: << parameters.dry-run >>
|
||||||
steps:
|
steps:
|
||||||
- run: goreleaser release --rm-dist --snapshot
|
- run: goreleaser release --rm-dist --debug
|
||||||
- run: ./scripts/generate-checksums.sh
|
- run: ./scripts/generate-checksums.sh
|
||||||
- store_artifacts:
|
- run: ./scripts/publish-checksums.sh
|
||||||
path: dist
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- dist
|
|
||||||
- save_cache:
|
|
||||||
name: save cargo cache
|
|
||||||
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
|
|
||||||
paths:
|
|
||||||
- "~/.rustup"
|
|
||||||
- "~/.cargo"
|
|
||||||
|
|
||||||
build-appimage:
|
build-appimage:
|
||||||
machine:
|
machine:
|
||||||
@ -423,11 +401,12 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: "."
|
at: /tmp/workspace
|
||||||
- run:
|
- run:
|
||||||
name: Update Go
|
name: Update Go
|
||||||
command: |
|
command: |
|
||||||
curl -L https://golang.org/dl/go1.18.1.linux-amd64.tar.gz -o /tmp/go.tar.gz && \
|
sudo rm -rf /usr/local/go && \
|
||||||
|
curl -L https://golang.org/dl/go`cat GO_VERSION_MIN`.linux-amd64.tar.gz -o /tmp/go.tar.gz && \
|
||||||
sudo tar -C /usr/local -xvf /tmp/go.tar.gz
|
sudo tar -C /usr/local -xvf /tmp/go.tar.gz
|
||||||
- run: go version
|
- run: go version
|
||||||
- run:
|
- run:
|
||||||
@ -457,13 +436,11 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml
|
sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml
|
||||||
make appimage
|
make appimage
|
||||||
- run:
|
- run: |
|
||||||
name: prepare workspace
|
mkdir -p /tmp/workspace/appimage && \
|
||||||
command: |
|
mv Lotus-*.AppImage /tmp/workspace/appimage/
|
||||||
mkdir appimage
|
|
||||||
mv Lotus-*.AppImage appimage
|
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
root: "."
|
root: /tmp/workspace
|
||||||
paths:
|
paths:
|
||||||
- appimage
|
- appimage
|
||||||
|
|
||||||
@ -471,7 +448,6 @@ jobs:
|
|||||||
gofmt:
|
gofmt:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: "! go fmt ./... 2>&1 | read"
|
command: "! go fmt ./... 2>&1 | read"
|
||||||
@ -479,7 +455,6 @@ jobs:
|
|||||||
gen-check:
|
gen-check:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: make deps
|
- run: make deps
|
||||||
- run: go install golang.org/x/tools/cmd/goimports
|
- run: go install golang.org/x/tools/cmd/goimports
|
||||||
@ -494,7 +469,6 @@ jobs:
|
|||||||
docs-check:
|
docs-check:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: go install golang.org/x/tools/cmd/goimports
|
- run: go install golang.org/x/tools/cmd/goimports
|
||||||
- run: zcat build/openrpc/full.json.gz | jq > ../pre-openrpc-full
|
- run: zcat build/openrpc/full.json.gz | jq > ../pre-openrpc-full
|
||||||
@ -531,7 +505,6 @@ jobs:
|
|||||||
Arguments to pass to golangci-lint
|
Arguments to pass to golangci-lint
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make deps
|
command: make deps
|
||||||
@ -559,13 +532,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
name: Install git jq curl
|
name: Install git jq curl
|
||||||
command: apt update && apt install -y git jq curl
|
command: apt update && apt install -y git jq curl sudo
|
||||||
- checkout
|
- checkout
|
||||||
- git_fetch_all_tags
|
- git_fetch_all_tags
|
||||||
- checkout
|
- checkout
|
||||||
- install_ipfs
|
- install_ipfs
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: "."
|
at: /tmp/workspace
|
||||||
- when:
|
- when:
|
||||||
condition: << parameters.linux >>
|
condition: << parameters.linux >>
|
||||||
steps:
|
steps:
|
||||||
@ -740,8 +713,6 @@ jobs:
|
|||||||
name: packer
|
name: packer
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- attach_workspace:
|
|
||||||
at: "."
|
|
||||||
- packer_build:
|
- packer_build:
|
||||||
template: tools/packer/lotus-snap.pkr.hcl
|
template: tools/packer/lotus-snap.pkr.hcl
|
||||||
publish-dockerhub:
|
publish-dockerhub:
|
||||||
@ -885,6 +856,11 @@ workflows:
|
|||||||
suite: itest-deals_publish
|
suite: itest-deals_publish
|
||||||
target: "./itests/deals_publish_test.go"
|
target: "./itests/deals_publish_test.go"
|
||||||
|
|
||||||
|
- test:
|
||||||
|
name: test-itest-deals_remote_retrieval
|
||||||
|
suite: itest-deals_remote_retrieval
|
||||||
|
target: "./itests/deals_remote_retrieval_test.go"
|
||||||
|
|
||||||
- test:
|
- test:
|
||||||
name: test-itest-deals_retry_deal_no_funds
|
name: test-itest-deals_retry_deal_no_funds
|
||||||
suite: itest-deals_retry_deal_no_funds
|
suite: itest-deals_retry_deal_no_funds
|
||||||
@ -930,11 +906,21 @@ workflows:
|
|||||||
suite: itest-mempool
|
suite: itest-mempool
|
||||||
target: "./itests/mempool_test.go"
|
target: "./itests/mempool_test.go"
|
||||||
|
|
||||||
|
- test:
|
||||||
|
name: test-itest-migration_nv17
|
||||||
|
suite: itest-migration_nv17
|
||||||
|
target: "./itests/migration_nv17_test.go"
|
||||||
|
|
||||||
- test:
|
- test:
|
||||||
name: test-itest-mpool_msg_uuid
|
name: test-itest-mpool_msg_uuid
|
||||||
suite: itest-mpool_msg_uuid
|
suite: itest-mpool_msg_uuid
|
||||||
target: "./itests/mpool_msg_uuid_test.go"
|
target: "./itests/mpool_msg_uuid_test.go"
|
||||||
|
|
||||||
|
- test:
|
||||||
|
name: test-itest-mpool_push_with_uuid
|
||||||
|
suite: itest-mpool_push_with_uuid
|
||||||
|
target: "./itests/mpool_push_with_uuid_test.go"
|
||||||
|
|
||||||
- test:
|
- test:
|
||||||
name: test-itest-multisig
|
name: test-itest-multisig
|
||||||
suite: itest-multisig
|
suite: itest-multisig
|
||||||
@ -970,6 +956,21 @@ workflows:
|
|||||||
suite: itest-paych_cli
|
suite: itest-paych_cli
|
||||||
target: "./itests/paych_cli_test.go"
|
target: "./itests/paych_cli_test.go"
|
||||||
|
|
||||||
|
- test:
|
||||||
|
name: test-itest-pending_deal_allocation
|
||||||
|
suite: itest-pending_deal_allocation
|
||||||
|
target: "./itests/pending_deal_allocation_test.go"
|
||||||
|
|
||||||
|
- test:
|
||||||
|
name: test-itest-raft_messagesigner
|
||||||
|
suite: itest-raft_messagesigner
|
||||||
|
target: "./itests/raft_messagesigner_test.go"
|
||||||
|
|
||||||
|
- test:
|
||||||
|
name: test-itest-remove_verifreg_datacap
|
||||||
|
suite: itest-remove_verifreg_datacap
|
||||||
|
target: "./itests/remove_verifreg_datacap_test.go"
|
||||||
|
|
||||||
- test:
|
- test:
|
||||||
name: test-itest-sdr_upgrade
|
name: test-itest-sdr_upgrade
|
||||||
suite: itest-sdr_upgrade
|
suite: itest-sdr_upgrade
|
||||||
@ -1110,41 +1111,12 @@ workflows:
|
|||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
- build-debug
|
- build-debug
|
||||||
- build-linux:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
- build-ntwk-calibration:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
- build-ntwk-butterfly:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
- build-lotus-soup
|
- build-lotus-soup
|
||||||
- build-macos:
|
|
||||||
name: publish-macos
|
release:
|
||||||
publish: true
|
jobs:
|
||||||
filters:
|
- build-linux-amd64:
|
||||||
branches:
|
name: "Build ( linux / amd64 )"
|
||||||
ignore:
|
|
||||||
- /.*/
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+$/
|
|
||||||
- build-macos:
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+-rc\d+$/
|
|
||||||
- build-appimage:
|
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
@ -1152,11 +1124,32 @@ workflows:
|
|||||||
tags:
|
tags:
|
||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
- publish:
|
- build-darwin-amd64:
|
||||||
name: publish-linux
|
name: "Build ( darwin / amd64 )"
|
||||||
linux: true
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- build-darwin-arm64:
|
||||||
|
name: "Build ( darwin / arm64 )"
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- release:
|
||||||
|
name: "Release"
|
||||||
|
context:
|
||||||
|
- filecoin-goreleaser-key
|
||||||
requires:
|
requires:
|
||||||
- build-linux
|
- "Build ( darwin / amd64 )"
|
||||||
|
- "Build ( linux / amd64 )"
|
||||||
|
- "Build ( darwin / arm64 )"
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
ignore:
|
ignore:
|
||||||
@ -1164,11 +1157,33 @@ workflows:
|
|||||||
tags:
|
tags:
|
||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- release:
|
||||||
|
name: "Release (dry-run)"
|
||||||
|
context:
|
||||||
|
- filecoin-goreleaser-key
|
||||||
|
dry-run: true
|
||||||
|
requires:
|
||||||
|
- "Build ( darwin / amd64 )"
|
||||||
|
- "Build ( linux / amd64 )"
|
||||||
|
- "Build ( darwin / arm64 )"
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- build-appimage:
|
||||||
|
name: "Build AppImage"
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
- publish:
|
- publish:
|
||||||
name: publish-appimage
|
name: "Publish AppImage"
|
||||||
appimage: true
|
appimage: true
|
||||||
requires:
|
requires:
|
||||||
- build-appimage
|
- "Build AppImage"
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
ignore:
|
ignore:
|
||||||
@ -1177,14 +1192,14 @@ workflows:
|
|||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
- build-and-push-image:
|
- build-and-push-image:
|
||||||
name: build-and-push/lotus-all-in-one
|
name: "Publish ECR (lotus-all-in-one)"
|
||||||
dockerfile: Dockerfile.lotus
|
dockerfile: Dockerfile.lotus
|
||||||
path: .
|
path: .
|
||||||
repo: lotus-dev
|
repo: lotus-dev
|
||||||
tag: '${CIRCLE_SHA1:0:8}'
|
tag: '${CIRCLE_SHA1:0:8}'
|
||||||
target: lotus-all-in-one
|
target: lotus-all-in-one
|
||||||
- build-and-push-image:
|
- build-and-push-image:
|
||||||
name: build-and-push/lotus-test
|
name: "Publish ECR (lotus-test)"
|
||||||
dockerfile: Dockerfile.lotus
|
dockerfile: Dockerfile.lotus
|
||||||
path: .
|
path: .
|
||||||
repo: lotus-test
|
repo: lotus-test
|
||||||
@ -1235,7 +1250,7 @@ workflows:
|
|||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+-rc\d+$/
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
||||||
- publish-dockerhub:
|
- publish-dockerhub:
|
||||||
name: publish-dockerhub
|
name: "Publish Dockerhub (stable)"
|
||||||
tag: stable
|
tag: stable
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
@ -1243,7 +1258,17 @@ workflows:
|
|||||||
- /.*/
|
- /.*/
|
||||||
tags:
|
tags:
|
||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+$/
|
||||||
|
- publish-dockerhub:
|
||||||
|
name: "Publish Dockerhub (candidate)"
|
||||||
|
tag: candidate
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore:
|
||||||
|
- /.*/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
||||||
|
|
||||||
nightly:
|
nightly:
|
||||||
triggers:
|
triggers:
|
||||||
|
@ -5,6 +5,7 @@ orbs:
|
|||||||
executors:
|
executors:
|
||||||
golang:
|
golang:
|
||||||
docker:
|
docker:
|
||||||
|
# Must match GO_VERSION_MIN in project root
|
||||||
- image: cimg/go:1.18.1
|
- image: cimg/go:1.18.1
|
||||||
resource_class: 2xlarge
|
resource_class: 2xlarge
|
||||||
ubuntu:
|
ubuntu:
|
||||||
@ -22,11 +23,6 @@ executors:
|
|||||||
|
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
install-deps:
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install python-is-python3
|
|
||||||
prepare:
|
prepare:
|
||||||
parameters:
|
parameters:
|
||||||
linux:
|
linux:
|
||||||
@ -40,19 +36,29 @@ commands:
|
|||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- git_fetch_all_tags
|
- git_fetch_all_tags
|
||||||
- checkout
|
|
||||||
- when:
|
- when:
|
||||||
condition: << parameters.linux >>
|
condition: <<parameters.linux>>
|
||||||
steps:
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Check Go Version
|
||||||
|
command: |
|
||||||
|
v=`go version | { read _ _ v _; echo ${v#go}; }`
|
||||||
|
if [["[[ $v != `cat GO_VERSION_MIN` ]]"]]; then
|
||||||
|
echo "GO_VERSION_MIN file does not match the go version being used."
|
||||||
|
echo "Please update image to cimg/go:`cat GO_VERSION_MIN` or update GO_VERSION_MIN to $v."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
- run: sudo apt-get update
|
- run: sudo apt-get update
|
||||||
- run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
|
- run: sudo apt-get install ocl-icd-opencl-dev libhwloc-dev
|
||||||
|
- run: sudo apt-get install python-is-python3
|
||||||
|
|
||||||
- when:
|
- when:
|
||||||
condition: <<parameters.darwin>>
|
condition: <<parameters.darwin>>
|
||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
name: Install Go
|
name: Install Go
|
||||||
command: |
|
command: |
|
||||||
curl https://dl.google.com/go/go1.18.1.darwin-amd64.pkg -o /tmp/go.pkg && \
|
curl https://dl.google.com/go/go`cat GO_VERSION_MIN`.darwin-amd64.pkg -o /tmp/go.pkg && \
|
||||||
sudo installer -pkg /tmp/go.pkg -target /
|
sudo installer -pkg /tmp/go.pkg -target /
|
||||||
- run:
|
- run:
|
||||||
name: Export Go
|
name: Export Go
|
||||||
@ -60,21 +66,12 @@ commands:
|
|||||||
echo 'export GOPATH="${HOME}/go"' >> $BASH_ENV
|
echo 'export GOPATH="${HOME}/go"' >> $BASH_ENV
|
||||||
- run: go version
|
- run: go version
|
||||||
- run:
|
- run:
|
||||||
name: Install pkg-config, goreleaser, and sha512sum
|
name: Install dependencies with Homebrew
|
||||||
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config goreleaser/tap/goreleaser coreutils
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config coreutils jq hwloc
|
||||||
- run:
|
- run:
|
||||||
name: Install Rust
|
name: Install Rust
|
||||||
command: |
|
command: |
|
||||||
curl https://sh.rustup.rs -sSf | sh -s -- -y
|
curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||||
- run:
|
|
||||||
name: Install hwloc
|
|
||||||
command: |
|
|
||||||
mkdir ~/hwloc
|
|
||||||
curl --location https://download.open-mpi.org/release/hwloc/v2.4/hwloc-2.4.1.tar.gz --output ~/hwloc/hwloc-2.4.1.tar.gz
|
|
||||||
cd ~/hwloc
|
|
||||||
tar -xvzpf hwloc-2.4.1.tar.gz
|
|
||||||
cd hwloc-2.4.1
|
|
||||||
./configure && make && sudo make install
|
|
||||||
- run: git submodule sync
|
- run: git submodule sync
|
||||||
- run: git submodule update --init
|
- run: git submodule update --init
|
||||||
download-params:
|
download-params:
|
||||||
@ -94,28 +91,13 @@ commands:
|
|||||||
install_ipfs:
|
install_ipfs:
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
apt update
|
curl -O https://dist.ipfs.tech/kubo/v0.16.0/kubo_v0.16.0_linux-amd64.tar.gz
|
||||||
apt install -y wget
|
tar -xvzf kubo_v0.16.0_linux-amd64.tar.gz
|
||||||
wget https://github.com/ipfs/go-ipfs/releases/download/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz
|
|
||||||
wget https://github.com/ipfs/go-ipfs/releases/download/v0.12.2/go-ipfs_v0.12.2_linux-amd64.tar.gz.sha512
|
|
||||||
if [ "$(sha512sum go-ipfs_v0.12.2_linux-amd64.tar.gz)" != "$(cat go-ipfs_v0.12.2_linux-amd64.tar.gz.sha512)" ]
|
|
||||||
then
|
|
||||||
echo "ipfs failed checksum check"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
tar -xf go-ipfs_v0.12.2_linux-amd64.tar.gz
|
|
||||||
mv go-ipfs/ipfs /usr/local/bin/ipfs
|
|
||||||
chmod +x /usr/local/bin/ipfs
|
|
||||||
install_ipfs_macos:
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
curl -O https://dist.ipfs.io/kubo/v0.14.0/kubo_v0.14.0_darwin-amd64.tar.gz
|
|
||||||
tar -xvzf kubo_v0.14.0_darwin-amd64.tar.gz
|
|
||||||
pushd kubo
|
pushd kubo
|
||||||
sudo bash install.sh
|
sudo bash install.sh
|
||||||
popd
|
popd
|
||||||
rm -rf kubo/
|
rm -rf kubo
|
||||||
rm kubo_v0.14.0_darwin-amd64.tar.gz
|
rm kubo_v0.16.0_linux-amd64.tar.gz
|
||||||
git_fetch_all_tags:
|
git_fetch_all_tags:
|
||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
@ -146,7 +128,6 @@ jobs:
|
|||||||
mod-tidy-check:
|
mod-tidy-check:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: go mod tidy -v
|
- run: go mod tidy -v
|
||||||
- run:
|
- run:
|
||||||
@ -154,34 +135,9 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
git --no-pager diff go.mod go.sum
|
git --no-pager diff go.mod go.sum
|
||||||
git --no-pager diff --quiet go.mod go.sum
|
git --no-pager diff --quiet go.mod go.sum
|
||||||
build-linux:
|
|
||||||
executor: golang
|
|
||||||
steps:
|
|
||||||
- install-deps
|
|
||||||
- prepare
|
|
||||||
- run: sudo apt-get update
|
|
||||||
- run: sudo apt-get install npm
|
|
||||||
- run:
|
|
||||||
command: make buildall
|
|
||||||
- run:
|
|
||||||
name: check tag and version output match
|
|
||||||
command: ./scripts/version-check.sh ./lotus
|
|
||||||
- store_artifacts:
|
|
||||||
path: lotus
|
|
||||||
- store_artifacts:
|
|
||||||
path: lotus-miner
|
|
||||||
- store_artifacts:
|
|
||||||
path: lotus-worker
|
|
||||||
- run: mkdir linux && mv lotus lotus-miner lotus-worker linux/
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
build-debug:
|
build-debug:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make debug
|
command: make debug
|
||||||
@ -214,7 +170,6 @@ jobs:
|
|||||||
description: gotestsum format. https://github.com/gotestyourself/gotestsum#format
|
description: gotestsum format. https://github.com/gotestyourself/gotestsum#format
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make deps lotus
|
command: make deps lotus
|
||||||
@ -258,7 +213,6 @@ jobs:
|
|||||||
submodule is used.
|
submodule is used.
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make deps lotus
|
command: make deps lotus
|
||||||
@ -301,36 +255,6 @@ jobs:
|
|||||||
path: /tmp/test-reports
|
path: /tmp/test-reports
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: /tmp/test-artifacts/conformance-coverage.html
|
path: /tmp/test-artifacts/conformance-coverage.html
|
||||||
build-ntwk-calibration:
|
|
||||||
description: |
|
|
||||||
Compile lotus binaries for the calibration network
|
|
||||||
parameters:
|
|
||||||
<<: *test-params
|
|
||||||
executor: << parameters.executor >>
|
|
||||||
steps:
|
|
||||||
- install-deps
|
|
||||||
- prepare
|
|
||||||
- run: make calibnet
|
|
||||||
- run: mkdir linux-calibrationnet && mv lotus lotus-miner lotus-worker linux-calibrationnet
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- linux-calibrationnet
|
|
||||||
build-ntwk-butterfly:
|
|
||||||
description: |
|
|
||||||
Compile lotus binaries for the butterfly network
|
|
||||||
parameters:
|
|
||||||
<<: *test-params
|
|
||||||
executor: << parameters.executor >>
|
|
||||||
steps:
|
|
||||||
- install-deps
|
|
||||||
- prepare
|
|
||||||
- run: make butterflynet
|
|
||||||
- run: mkdir linux-butterflynet && mv lotus lotus-miner lotus-worker linux-butterflynet
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- linux-butterflynet
|
|
||||||
build-lotus-soup:
|
build-lotus-soup:
|
||||||
description: |
|
description: |
|
||||||
Compile `lotus-soup` Testground test plan
|
Compile `lotus-soup` Testground test plan
|
||||||
@ -338,7 +262,6 @@ jobs:
|
|||||||
<<: *test-params
|
<<: *test-params
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: cd extern/filecoin-ffi && make
|
- run: cd extern/filecoin-ffi && make
|
||||||
- run:
|
- run:
|
||||||
@ -354,7 +277,6 @@ jobs:
|
|||||||
<<: *test-params
|
<<: *test-params
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
name: "download testground"
|
name: "download testground"
|
||||||
@ -374,48 +296,104 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: "trigger payment channel stress testplan on taas"
|
name: "trigger payment channel stress testplan on taas"
|
||||||
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/paych-stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
|
command: ~/testground-cli run composition -f $HOME/testground/plans/lotus-soup/_compositions/paych-stress-k8s.toml --metadata-commit=$CIRCLE_SHA1 --metadata-repo=filecoin-project/lotus --metadata-branch=$CIRCLE_BRANCH
|
||||||
build-macos:
|
|
||||||
|
build-linux-amd64:
|
||||||
|
executor: golang
|
||||||
|
steps:
|
||||||
|
- prepare
|
||||||
|
- run: make lotus lotus-miner lotus-worker
|
||||||
|
- run:
|
||||||
|
name: check tag and version output match
|
||||||
|
command: ./scripts/version-check.sh ./lotus
|
||||||
|
- run: |
|
||||||
|
mkdir -p /tmp/workspace/linux_amd64_v1 && \
|
||||||
|
mv lotus lotus-miner lotus-worker /tmp/workspace/linux_amd64_v1/
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/workspace
|
||||||
|
paths:
|
||||||
|
- linux_amd64_v1
|
||||||
|
|
||||||
|
build-darwin-amd64:
|
||||||
description: build darwin lotus binary
|
description: build darwin lotus binary
|
||||||
parameters:
|
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
||||||
publish:
|
|
||||||
default: false
|
|
||||||
description: publish github release and homebrew?
|
|
||||||
type: boolean
|
|
||||||
macos:
|
macos:
|
||||||
xcode: "13.4.1"
|
xcode: "13.4.1"
|
||||||
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
|
||||||
steps:
|
steps:
|
||||||
- prepare:
|
- prepare:
|
||||||
linux: false
|
linux: false
|
||||||
darwin: true
|
darwin: true
|
||||||
- install_ipfs_macos
|
- run: make lotus lotus-miner lotus-worker
|
||||||
- restore_cache:
|
- run:
|
||||||
name: restore cargo cache
|
name: check tag and version output match
|
||||||
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
|
command: ./scripts/version-check.sh ./lotus
|
||||||
|
- run: |
|
||||||
|
mkdir -p /tmp/workspace/darwin_amd64_v1 && \
|
||||||
|
mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_amd64_v1/
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/workspace
|
||||||
|
paths:
|
||||||
|
- darwin_amd64_v1
|
||||||
|
|
||||||
|
build-darwin-arm64:
|
||||||
|
description: self-hosted m1 runner
|
||||||
|
working_directory: ~/go/src/github.com/filecoin-project/lotus
|
||||||
|
machine: true
|
||||||
|
resource_class: filecoin-project/self-hosted-m1
|
||||||
|
steps:
|
||||||
|
- run: echo 'export PATH=/opt/homebrew/bin:"$PATH"' >> "$BASH_ENV"
|
||||||
|
- prepare:
|
||||||
|
linux: false
|
||||||
|
darwin: true
|
||||||
|
- run: |
|
||||||
|
export CPATH=$(brew --prefix)/include
|
||||||
|
export LIBRARY_PATH=$(brew --prefix)/lib
|
||||||
|
make lotus lotus-miner lotus-worker
|
||||||
|
- run:
|
||||||
|
name: check tag and version output match
|
||||||
|
command: ./scripts/version-check.sh ./lotus
|
||||||
|
- run: |
|
||||||
|
mkdir -p /tmp/workspace/darwin_arm64 && \
|
||||||
|
mv lotus lotus-miner lotus-worker /tmp/workspace/darwin_arm64/
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/workspace
|
||||||
|
paths:
|
||||||
|
- darwin_arm64
|
||||||
|
- run:
|
||||||
|
command: make clean
|
||||||
|
when: always
|
||||||
|
- run:
|
||||||
|
name: cleanup homebrew
|
||||||
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew uninstall pkg-config coreutils jq hwloc
|
||||||
|
when: always
|
||||||
|
|
||||||
|
release:
|
||||||
|
executor: golang
|
||||||
|
parameters:
|
||||||
|
dry-run:
|
||||||
|
default: false
|
||||||
|
description: should this release actually publish it's artifacts?
|
||||||
|
type: boolean
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: |
|
||||||
|
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install goreleaser-pro
|
||||||
|
- install_ipfs
|
||||||
|
- attach_workspace:
|
||||||
|
at: /tmp/workspace
|
||||||
- when:
|
- when:
|
||||||
condition: << parameters.publish >>
|
condition: << parameters.dry-run >>
|
||||||
steps:
|
steps:
|
||||||
- run: goreleaser release --rm-dist
|
- run: goreleaser release --rm-dist --snapshot --debug
|
||||||
- run: ./scripts/generate-checksums.sh
|
- run: ./scripts/generate-checksums.sh
|
||||||
- run: ./scripts/publish-checksums.sh
|
|
||||||
- when:
|
- when:
|
||||||
condition:
|
condition:
|
||||||
not: << parameters.publish >>
|
not: << parameters.dry-run >>
|
||||||
steps:
|
steps:
|
||||||
- run: goreleaser release --rm-dist --snapshot
|
- run: goreleaser release --rm-dist --debug
|
||||||
- run: ./scripts/generate-checksums.sh
|
- run: ./scripts/generate-checksums.sh
|
||||||
- store_artifacts:
|
- run: ./scripts/publish-checksums.sh
|
||||||
path: dist
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: "."
|
|
||||||
paths:
|
|
||||||
- dist
|
|
||||||
- save_cache:
|
|
||||||
name: save cargo cache
|
|
||||||
key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }}
|
|
||||||
paths:
|
|
||||||
- "~/.rustup"
|
|
||||||
- "~/.cargo"
|
|
||||||
|
|
||||||
build-appimage:
|
build-appimage:
|
||||||
machine:
|
machine:
|
||||||
@ -423,11 +401,12 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: "."
|
at: /tmp/workspace
|
||||||
- run:
|
- run:
|
||||||
name: Update Go
|
name: Update Go
|
||||||
command: |
|
command: |
|
||||||
curl -L https://golang.org/dl/go1.18.1.linux-amd64.tar.gz -o /tmp/go.tar.gz && \
|
sudo rm -rf /usr/local/go && \
|
||||||
|
curl -L https://golang.org/dl/go`cat GO_VERSION_MIN`.linux-amd64.tar.gz -o /tmp/go.tar.gz && \
|
||||||
sudo tar -C /usr/local -xvf /tmp/go.tar.gz
|
sudo tar -C /usr/local -xvf /tmp/go.tar.gz
|
||||||
- run: go version
|
- run: go version
|
||||||
- run:
|
- run:
|
||||||
@ -457,13 +436,11 @@ jobs:
|
|||||||
command: |
|
command: |
|
||||||
sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml
|
sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml
|
||||||
make appimage
|
make appimage
|
||||||
- run:
|
- run: |
|
||||||
name: prepare workspace
|
mkdir -p /tmp/workspace/appimage && \
|
||||||
command: |
|
mv Lotus-*.AppImage /tmp/workspace/appimage/
|
||||||
mkdir appimage
|
|
||||||
mv Lotus-*.AppImage appimage
|
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
root: "."
|
root: /tmp/workspace
|
||||||
paths:
|
paths:
|
||||||
- appimage
|
- appimage
|
||||||
|
|
||||||
@ -471,7 +448,6 @@ jobs:
|
|||||||
gofmt:
|
gofmt:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: "! go fmt ./... 2>&1 | read"
|
command: "! go fmt ./... 2>&1 | read"
|
||||||
@ -479,7 +455,6 @@ jobs:
|
|||||||
gen-check:
|
gen-check:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: make deps
|
- run: make deps
|
||||||
- run: go install golang.org/x/tools/cmd/goimports
|
- run: go install golang.org/x/tools/cmd/goimports
|
||||||
@ -494,7 +469,6 @@ jobs:
|
|||||||
docs-check:
|
docs-check:
|
||||||
executor: golang
|
executor: golang
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run: go install golang.org/x/tools/cmd/goimports
|
- run: go install golang.org/x/tools/cmd/goimports
|
||||||
- run: zcat build/openrpc/full.json.gz | jq > ../pre-openrpc-full
|
- run: zcat build/openrpc/full.json.gz | jq > ../pre-openrpc-full
|
||||||
@ -531,7 +505,6 @@ jobs:
|
|||||||
Arguments to pass to golangci-lint
|
Arguments to pass to golangci-lint
|
||||||
executor: << parameters.executor >>
|
executor: << parameters.executor >>
|
||||||
steps:
|
steps:
|
||||||
- install-deps
|
|
||||||
- prepare
|
- prepare
|
||||||
- run:
|
- run:
|
||||||
command: make deps
|
command: make deps
|
||||||
@ -559,13 +532,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
name: Install git jq curl
|
name: Install git jq curl
|
||||||
command: apt update && apt install -y git jq curl
|
command: apt update && apt install -y git jq curl sudo
|
||||||
- checkout
|
- checkout
|
||||||
- git_fetch_all_tags
|
- git_fetch_all_tags
|
||||||
- checkout
|
- checkout
|
||||||
- install_ipfs
|
- install_ipfs
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: "."
|
at: /tmp/workspace
|
||||||
- when:
|
- when:
|
||||||
condition: << parameters.linux >>
|
condition: << parameters.linux >>
|
||||||
steps:
|
steps:
|
||||||
@ -740,8 +713,6 @@ jobs:
|
|||||||
name: packer
|
name: packer
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- attach_workspace:
|
|
||||||
at: "."
|
|
||||||
- packer_build:
|
- packer_build:
|
||||||
template: tools/packer/lotus-snap.pkr.hcl
|
template: tools/packer/lotus-snap.pkr.hcl
|
||||||
publish-dockerhub:
|
publish-dockerhub:
|
||||||
@ -835,41 +806,12 @@ workflows:
|
|||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
- build-debug
|
- build-debug
|
||||||
- build-linux:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
- build-ntwk-calibration:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
- build-ntwk-butterfly:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
- build-lotus-soup
|
- build-lotus-soup
|
||||||
- build-macos:
|
|
||||||
name: publish-macos
|
release:
|
||||||
publish: true
|
jobs:
|
||||||
filters:
|
- build-linux-amd64:
|
||||||
branches:
|
name: "Build ( linux / amd64 )"
|
||||||
ignore:
|
|
||||||
- /.*/
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+$/
|
|
||||||
- build-macos:
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /^v\d+\.\d+\.\d+-rc\d+$/
|
|
||||||
- build-appimage:
|
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
@ -877,11 +819,32 @@ workflows:
|
|||||||
tags:
|
tags:
|
||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
- publish:
|
- build-darwin-amd64:
|
||||||
name: publish-linux
|
name: "Build ( darwin / amd64 )"
|
||||||
linux: true
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- build-darwin-arm64:
|
||||||
|
name: "Build ( darwin / arm64 )"
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- release:
|
||||||
|
name: "Release"
|
||||||
|
context:
|
||||||
|
- filecoin-goreleaser-key
|
||||||
requires:
|
requires:
|
||||||
- build-linux
|
- "Build ( darwin / amd64 )"
|
||||||
|
- "Build ( linux / amd64 )"
|
||||||
|
- "Build ( darwin / arm64 )"
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
ignore:
|
ignore:
|
||||||
@ -889,11 +852,33 @@ workflows:
|
|||||||
tags:
|
tags:
|
||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- release:
|
||||||
|
name: "Release (dry-run)"
|
||||||
|
context:
|
||||||
|
- filecoin-goreleaser-key
|
||||||
|
dry-run: true
|
||||||
|
requires:
|
||||||
|
- "Build ( darwin / amd64 )"
|
||||||
|
- "Build ( linux / amd64 )"
|
||||||
|
- "Build ( darwin / arm64 )"
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
- build-appimage:
|
||||||
|
name: "Build AppImage"
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
- publish:
|
- publish:
|
||||||
name: publish-appimage
|
name: "Publish AppImage"
|
||||||
appimage: true
|
appimage: true
|
||||||
requires:
|
requires:
|
||||||
- build-appimage
|
- "Build AppImage"
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
ignore:
|
ignore:
|
||||||
@ -902,14 +887,14 @@ workflows:
|
|||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
||||||
- build-and-push-image:
|
- build-and-push-image:
|
||||||
name: build-and-push/lotus-all-in-one
|
name: "Publish ECR (lotus-all-in-one)"
|
||||||
dockerfile: Dockerfile.lotus
|
dockerfile: Dockerfile.lotus
|
||||||
path: .
|
path: .
|
||||||
repo: lotus-dev
|
repo: lotus-dev
|
||||||
tag: '${CIRCLE_SHA1:0:8}'
|
tag: '${CIRCLE_SHA1:0:8}'
|
||||||
target: lotus-all-in-one
|
target: lotus-all-in-one
|
||||||
- build-and-push-image:
|
- build-and-push-image:
|
||||||
name: build-and-push/lotus-test
|
name: "Publish ECR (lotus-test)"
|
||||||
dockerfile: Dockerfile.lotus
|
dockerfile: Dockerfile.lotus
|
||||||
path: .
|
path: .
|
||||||
repo: lotus-test
|
repo: lotus-test
|
||||||
@ -960,7 +945,7 @@ workflows:
|
|||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+-rc\d+$/
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
||||||
- publish-dockerhub:
|
- publish-dockerhub:
|
||||||
name: publish-dockerhub
|
name: "Publish Dockerhub (stable)"
|
||||||
tag: stable
|
tag: stable
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
@ -968,7 +953,17 @@ workflows:
|
|||||||
- /.*/
|
- /.*/
|
||||||
tags:
|
tags:
|
||||||
only:
|
only:
|
||||||
- /^v\d+\.\d+\.\d+(-rc\d+)?$/
|
- /^v\d+\.\d+\.\d+$/
|
||||||
|
- publish-dockerhub:
|
||||||
|
name: "Publish Dockerhub (candidate)"
|
||||||
|
tag: candidate
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore:
|
||||||
|
- /.*/
|
||||||
|
tags:
|
||||||
|
only:
|
||||||
|
- /^v\d+\.\d+\.\d+-rc\d+$/
|
||||||
|
|
||||||
nightly:
|
nightly:
|
||||||
triggers:
|
triggers:
|
||||||
|
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
chain/actors/builtin/*/v* linguist-generated=true
|
||||||
|
chain/actors/builtin/*/message* linguist-generated=true
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -9,7 +9,6 @@
|
|||||||
/lotus-chainwatch
|
/lotus-chainwatch
|
||||||
/lotus-shed
|
/lotus-shed
|
||||||
/lotus-sim
|
/lotus-sim
|
||||||
/lotus-pond
|
|
||||||
/lotus-townhall
|
/lotus-townhall
|
||||||
/lotus-fountain
|
/lotus-fountain
|
||||||
/lotus-stats
|
/lotus-stats
|
||||||
@ -21,8 +20,6 @@
|
|||||||
/docgen-md
|
/docgen-md
|
||||||
/docgen-openrpc
|
/docgen-openrpc
|
||||||
/bench.json
|
/bench.json
|
||||||
/lotuspond/front/node_modules
|
|
||||||
/lotuspond/front/build
|
|
||||||
/cmd/lotus-townhall/townhall/node_modules
|
/cmd/lotus-townhall/townhall/node_modules
|
||||||
/cmd/lotus-townhall/townhall/build
|
/cmd/lotus-townhall/townhall/build
|
||||||
/cmd/lotus-townhall/townhall/package-lock.json
|
/cmd/lotus-townhall/townhall/package-lock.json
|
||||||
|
@ -43,9 +43,6 @@ issues:
|
|||||||
|
|
||||||
exclude-use-default: false
|
exclude-use-default: false
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
- path: lotuspond
|
|
||||||
linters:
|
|
||||||
- errcheck
|
|
||||||
|
|
||||||
- path: node/modules/lp2p
|
- path: node/modules/lp2p
|
||||||
linters:
|
linters:
|
||||||
|
123
.goreleaser.yaml
123
.goreleaser.yaml
@ -1,119 +1,65 @@
|
|||||||
project_name: lotus
|
project_name: lotus
|
||||||
before:
|
|
||||||
hooks:
|
|
||||||
- go mod tidy
|
|
||||||
- make deps
|
|
||||||
|
|
||||||
universal_binaries:
|
universal_binaries:
|
||||||
- id: lotus
|
- id: lotus
|
||||||
replace: true
|
replace: true
|
||||||
name_template: lotus
|
name_template: lotus
|
||||||
ids:
|
|
||||||
- lotus_darwin_amd64
|
|
||||||
- lotus_darwin_arm64
|
|
||||||
- id: lotus-miner
|
- id: lotus-miner
|
||||||
replace: true
|
replace: true
|
||||||
name_template: lotus-miner
|
name_template: lotus-miner
|
||||||
ids:
|
|
||||||
- lotus-miner_darwin_amd64
|
|
||||||
- lotus-miner_darwin_arm64
|
|
||||||
- id: lotus-worker
|
- id: lotus-worker
|
||||||
replace: true
|
replace: true
|
||||||
name_template: lotus-worker
|
name_template: lotus-worker
|
||||||
ids:
|
|
||||||
- lotus-worker_darwin_amd64
|
|
||||||
- lotus-worker_darwin_arm64
|
|
||||||
|
|
||||||
builds:
|
builds:
|
||||||
- id: lotus_darwin_amd64
|
- id: lotus
|
||||||
main: ./cmd/lotus
|
|
||||||
binary: lotus
|
binary: lotus
|
||||||
|
builder: prebuilt
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
env:
|
- arm64
|
||||||
- CGO_ENABLED=1
|
goamd64:
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
- v1
|
||||||
ldflags:
|
ignore:
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
- goos: linux
|
||||||
- id: lotus-miner_darwin_amd64
|
goarch: arm64
|
||||||
main: ./cmd/lotus-miner
|
prebuilt:
|
||||||
|
path: /tmp/workspace/{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/lotus
|
||||||
|
- id: lotus-miner
|
||||||
binary: lotus-miner
|
binary: lotus-miner
|
||||||
|
builder: prebuilt
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
env:
|
- arm64
|
||||||
- CGO_ENABLED=1
|
goamd64:
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
- v1
|
||||||
ldflags:
|
ignore:
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
- goos: linux
|
||||||
- id: lotus-worker_darwin_amd64
|
goarch: arm64
|
||||||
main: ./cmd/lotus-worker
|
prebuilt:
|
||||||
|
path: /tmp/workspace/{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/lotus-miner
|
||||||
|
- id: lotus-worker
|
||||||
binary: lotus-worker
|
binary: lotus-worker
|
||||||
|
builder: prebuilt
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
env:
|
|
||||||
- CGO_ENABLED=1
|
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
|
||||||
ldflags:
|
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
- id: lotus_darwin_arm64
|
|
||||||
main: ./cmd/lotus
|
|
||||||
binary: lotus
|
|
||||||
goos:
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- arm64
|
- arm64
|
||||||
env:
|
goamd64:
|
||||||
- CGO_ENABLED=1
|
- v1
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
ignore:
|
||||||
- CPATH=/opt/homebrew/include
|
- goos: linux
|
||||||
- LIBRARY_PATH=/opt/homebrew/lib
|
goarch: arm64
|
||||||
ldflags:
|
prebuilt:
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
path: /tmp/workspace/{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/lotus-worker
|
||||||
- id: lotus-miner_darwin_arm64
|
|
||||||
main: ./cmd/lotus-miner
|
|
||||||
binary: lotus-miner
|
|
||||||
goos:
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- arm64
|
|
||||||
env:
|
|
||||||
- CGO_ENABLED=1
|
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
|
||||||
- CPATH=/opt/homebrew/include
|
|
||||||
- LIBRARY_PATH=/opt/homebrew/lib
|
|
||||||
ldflags:
|
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
- id: lotus-worker_darwin_arm64
|
|
||||||
main: ./cmd/lotus-worker
|
|
||||||
binary: lotus-worker
|
|
||||||
goos:
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- arm64
|
|
||||||
env:
|
|
||||||
- CGO_ENABLED=1
|
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
|
||||||
- CPATH=/opt/homebrew/include
|
|
||||||
- LIBRARY_PATH=/opt/homebrew/lib
|
|
||||||
ldflags:
|
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
# - id: linux
|
|
||||||
# main: ./cmd/lotus
|
|
||||||
# binary: lotus
|
|
||||||
# goos:
|
|
||||||
# - linux
|
|
||||||
# goarch:
|
|
||||||
# - amd64
|
|
||||||
# env:
|
|
||||||
# - CGO_ENABLED=1
|
|
||||||
# ldflags:
|
|
||||||
# - -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
|
|
||||||
archives:
|
archives:
|
||||||
- id: primary
|
- id: primary
|
||||||
@ -131,7 +77,6 @@ release:
|
|||||||
prerelease: auto
|
prerelease: auto
|
||||||
name_template: "Release v{{.Version}}"
|
name_template: "Release v{{.Version}}"
|
||||||
|
|
||||||
|
|
||||||
brews:
|
brews:
|
||||||
- tap:
|
- tap:
|
||||||
owner: filecoin-project
|
owner: filecoin-project
|
||||||
@ -151,10 +96,8 @@ brews:
|
|||||||
homepage: "https://filecoin.io"
|
homepage: "https://filecoin.io"
|
||||||
description: "A homebrew cask for installing filecoin-project/lotus on MacOS"
|
description: "A homebrew cask for installing filecoin-project/lotus on MacOS"
|
||||||
license: MIT
|
license: MIT
|
||||||
|
skip_upload: auto
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: pkg-config
|
|
||||||
- name: jq
|
|
||||||
- name: bzr
|
|
||||||
- name: hwloc
|
- name: hwloc
|
||||||
|
|
||||||
# produced manually so we can include cid checksums
|
# produced manually so we can include cid checksums
|
||||||
|
129
CHANGELOG.md
129
CHANGELOG.md
@ -1,5 +1,132 @@
|
|||||||
# Lotus changelog
|
# Lotus changelog
|
||||||
|
|
||||||
|
# 1.18.0 / 2022-11-15
|
||||||
|
|
||||||
|
> ⚠️ **Please note that from Lotus v1.17.2&^ will require a Go-version of v1.18.1&^**
|
||||||
|
|
||||||
|
This is the final release of the upcoming MANDATORY release of Lotus that introduces [Filecoin network v17,
|
||||||
|
codenamed the Shark upgrade](https://github.com/filecoin-project/community/discussions/74?sort=top#discussioncomment-3825422). Shark upgrade delivers a wave of protocol refinements that will allow for useful smart contracts to be written using the FVM (eg. programmable markets, lending contracts, etc.).
|
||||||
|
|
||||||
|
**The Filecoin mainnet is scheduled to upgrade to nv17 at epoch 2383680, on Nov 30th on 2022-11-30T14:00:00Z. All node operators, including storage providers, must upgrade to this release before that time. Storage providers must update their daemons, miners, market and worker(s)/boost.**
|
||||||
|
|
||||||
|
The Shark upgrade introduces the following FIPs, delivered in [actors v9](https://github.com/filecoin-project/builtin-actors/releases/tag/v9.0.3):
|
||||||
|
- [FIP0029 Beneficiary Address for Storage Providers](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0029.md): step towards better lending market for SP
|
||||||
|
- [FIP0034 Fix PreCommit Deposit Independent of Sector Content](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0034.md): resolves a significant weakening of Filecoin PoRep’s security guarantees
|
||||||
|
- ❗Pre-commit deposit will be calculated as the 20-day projection of expected reward earned by a sector with **a sector quality of 10 (i.e. full of verified deals)**, regardless of sector content. The Initial Pledge value, due when the sector is proven, is left **unchanged**.
|
||||||
|
- [FIP0041 Forward Compatibility for PreCommit](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0041.md): enables a cleaner and easier transition to Programmable Storage Markets
|
||||||
|
- [FIP0044 Standard Message Authentication](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0044.md): enable metadata authentication for user defined actor
|
||||||
|
- [FIP0045 Decoupling Fil+ from Marketplace](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0045.md): DataCap and the 10x QAP is now only associated with how long DATA is wanted to be stored on the network.
|
||||||
|
- This is a transitional state to enabling far more efficient and dynamic storage markets on Filecoin network in the future.
|
||||||
|
- ⭐️ First Fungible Token Contract - Datacap Actor, on Filecoin! ([fungible token standard](https://github.com/filecoin-project/FIPs/blob/master/FRCs/frc-0046.md), [token contract library](https://github.com/helix-onchain/filecoin/tree/5455f4f831e0f3f20005a9a789623d7ad6dada15/frc46_token)).
|
||||||
|
- For storage deal participants (clients and storage providers):
|
||||||
|
- `PublishStorageDeals`/`ProveCommit(Aggregate)`/`ProveReplicaUpdates` message that includes verified deals will see a gas usage increase, more details can be found [here](https://github.com/filecoin-project/FIPs/blob/385f069b3b146c5fef4fdc1109a0e2f35f399e48/FIPS/fip-0045.md?plain=1#L784)
|
||||||
|
- `Term` is introduced for defining how long the DataCap is assigned to a piece of data. Anyone who cares about that piece of data may extend the _term_, which incentives SPs to store the data longer on the network without a new deal/resealing.
|
||||||
|
- There is no more diluted verified deal QAP due to deal/sector space time for new sectors that contains verified deals after this upgrade.
|
||||||
|
- SPs may enjoy 90 days of extra QAP than deal duration by default, given `term_max` is always `deal duration + 90 days`.
|
||||||
|
❗ We highly recommend all lotus users, especially storage providers, developers and clients to read the FIPs in detail to understand the protocol changes and potential impact to network participants!
|
||||||
|
|
||||||
|
## Snapshots
|
||||||
|
|
||||||
|
The [#fil-infra](https://filecoinproject.slack.com/archives/C039RBG3RPC) team at PL has launched a brand new Lightweight Filecoin Chain Snapshots Service to support chain management needs for the node operators, check [here](https://www.notion.so/pl-strflt/Lightweight-Filecoin-Chain-Snapshots-17e4c386f35c44548f5863afb7b5e024) for the full detail.
|
||||||
|
We are planning to switch [the snapshot service listed in lotus docs](https://lotus.filecoin.io/lotus/manage/chain-management/#lightweight-snapshot) to the new Lightweight Filecoin Chain Snapshots Service by EOY, and deprecate public support of the current snapshots production. We recommend all users to test and switch the new service ASAP, and if you run into any issue, please report them [here](https://github.com/filecoin-project/filecoin-chain-archiver/discussions/new?category=feedback) and the team would be happy to support you! For the main differences between the old & the new service, checkout the FAQ section [here](https://www.notion.so/pl-strflt/Lightweight-Filecoin-Chain-Snapshots-17e4c386f35c44548f5863afb7b5e024)
|
||||||
|
|
||||||
|
## Migration
|
||||||
|
|
||||||
|
We are expecting a heavier than normal state migration for this upgrade due to the amount of the state changes introduced.
|
||||||
|
All node operators, including storage providers, should be aware that two pre-migrations are being scheduled. The first pre-migration will begin at 2022-11-30T12:00:00Z (120 minutes before the real upgrade), the second pre-migration will begin at 2022-11-30T13:45:00Z (7.5 minutes before the real upgrade).
|
||||||
|
The first pre-migration will take up to 1.5hr, depending on the amount of the historical state in the node blockstore and the hardware specs the node is running on. During this time, expect slower block validation times, increased CPU and memory usage, and longer delays for API queries.
|
||||||
|
We recommend node operators (who haven't enbabled splistore `universal` mode) that do not care about historical chain states, to prune the chain blockstore by syncing from a snapshot 1-2 days before the upgrade.
|
||||||
|
Note to full archival node operators: you may expect a migration that takes up to 20 min upon the upgrade, during this period your node will fall out of sync and your chain service may have some disruption. However, you can expect the node to catch up soon after the migration completes.
|
||||||
|
|
||||||
|
### v9 Built-in actor bundles
|
||||||
|
|
||||||
|
Bundles for all networks(mainnet, calibnet, and etc) are included in the lotus source tree (`build/actors/`) and embedded on build, for v9 actors you can find it [here](https://github.com/filecoin-project/lotus/blob/master/build/actors/v9.tar.zst).
|
||||||
|
Reminder: Lotus verifies that the bundle CIDs are the right ones upon build & upgrade against the values in `build/builtin_actors_gen.go`, according to the network you are building. You may also check the bundle manifest CID matches the bundle gen-ed values by running `lotus state actor-cids --network-version 17`.
|
||||||
|
|
||||||
|
The manifest CID & full list of actor code CIDs for nv17 using [actor v9](https://github.com/filecoin-project/builtin-actors/releases/tag/v9.0.3) is:
|
||||||
|
|
||||||
|
```
|
||||||
|
"_manifest": "bafy2bzaceb6j6666h36xnhksu3ww4kxb6e25niayfgkdnifaqi6m6ooc66i6i"
|
||||||
|
"account": "bafk2bzacect2p7urje3pylrrrjy3tngn6yaih4gtzauuatf2jllk3ksgfiw2y"
|
||||||
|
"cron": "bafk2bzacebcec3lffmos3nawm5cvwehssxeqwxixoyyfvejy7viszzsxzyu26"
|
||||||
|
"datacap": "bafk2bzacebb6uy2ys7tapekmtj7apnjg7oyj4ia5t7tlkvbmwtxwv74lb2pug"
|
||||||
|
"init": "bafk2bzacebtdq4zyuxk2fzbdkva6kc4mx75mkbfmldplfntayhbl5wkqou33i"
|
||||||
|
"multisig": "bafk2bzacec4va3nmugyqjqrs3lqyr2ij67jhjia5frvx7omnh2isha6abxzya"
|
||||||
|
"paymentchannel": "bafk2bzacebhdvjbjcgupklddfavzef4e4gnkt3xk3rbmgfmk7xhecszhfxeds"
|
||||||
|
"reward": "bafk2bzacebezgbbmcm2gbcqwisus5fjvpj7hhmu5ubd37phuku3hmkfulxm2o"
|
||||||
|
"storagemarket": "bafk2bzacec3j7p6gklk64stax5px3xxd7hdtejaepnd4nw7s2adihde6emkcu"
|
||||||
|
"storageminer": "bafk2bzacedyux5hlrildwutvvjdcsvjtwsoc5xnqdjl73ouiukgklekeuyfl4"
|
||||||
|
"storagepower": "bafk2bzacedsetphfajgne4qy3vdrpyd6ekcmtfs2zkjut4r34cvnuoqemdrtw"
|
||||||
|
"system": "bafk2bzaceagvlo2jtahj7dloshrmwfulrd6e2izqev32qm46eumf754weec6c"
|
||||||
|
"verifiedregistry": "bafk2bzacecf3yodlyudzukumehbuabgqljyhjt5ifiv4vetcfohnvsxzynwga"
|
||||||
|
```
|
||||||
|
|
||||||
|
## New Features
|
||||||
|
- Integrate actor v9:
|
||||||
|
- test: Add invariance checks to v17 migration test ([filecoin-project/lotus#9454](https://github.com/filecoin-project/lotus/pull/9454))
|
||||||
|
- Implement and support [FIP0045 Decoupling Fil+ from Marketplace](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0045.md):
|
||||||
|
- fix: state: add datacap actor to actors registry ([filecoin-project/lotus#9476](https://github.com/filecoin-project/lotus/pull/9476))
|
||||||
|
- feat: actors: Integrate builtin-actors changes for FIP-0045 ([filecoin-project/lotus#9355](https://github.com/filecoin-project/lotus/pull/9355))
|
||||||
|
- feat: actors: Integrate datacap actor into lotus (#9348) ([filecoin-project/lotus#9348](https://github.com/filecoin-project/lotus/pull/9348))
|
||||||
|
- feat: cli: Add commands for listing allocations and removing expired allocations ([filecoin-project/lotus#9468](https://github.com/filecoin-project/lotus/pull/9468))
|
||||||
|
- feat: sealing pipeline: Prepare deal assigning logic for FIP-45 ([filecoin-project/lotus#9412](https://github.com/filecoin-project/lotus/pull/9412))
|
||||||
|
- feat: add API methods to get allocations and claims ([filecoin-project/lotus#9437](https://github.com/filecoin-project/lotus/pull/9437))
|
||||||
|
- Implement and support [FIP0029 Beneficiary Address for Storage Providers](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0029.md)
|
||||||
|
- feat: api/cli: beneficiary withdraw api and cli #9296
|
||||||
|
- feat: api/cli: change beneficiary propose and confirm for actors and multisigs. #9307
|
||||||
|
|
||||||
|
## Improvements
|
||||||
|
- feat: wdpost: Add ability to only have single partition per msg for partitions with recovery sectors ([filecoin-project/lotus#9427](https://github.com/filecoin-project/lotus/pull/9427))
|
||||||
|
- feat: API: support typed errors over RPC ([filecoin-project/lotus#9061](https://github.com/filecoin-project/lotus/pull/9061))
|
||||||
|
- feat: refactor: remove NewestNetworkVersion ([filecoin-project/lotus#9351](https://github.com/filecoin-project/lotus/pull/9351))
|
||||||
|
- chore: actors: Allow builtin-actors to return a map of methods (#9342) ([filecoin-project/lotus#9342](https://github.com/filecoin-project/lotus/pull/9342))
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
- Update FFI ([filecoin-project/lotus#9484](https://github.com/filecoin-project/lotus/pull/9484))
|
||||||
|
- chore: deps: update go-state-types and builtin-actors for v9 release ([filecoin-project/lotus#9485](https://github.com/filecoin-project/lotus/pull/9485))
|
||||||
|
- deps: backport: #9455 ([filecoin-project/lotus#9463](https://github.com/filecoin-project/lotus/pull/9463))
|
||||||
|
- Deps: Update go-fil-markets to 1.24.0-v17 ([filecoin-project/lotus#9450](https://github.com/filecoin-project/lotus/pull/9450))
|
||||||
|
- github.com/filecoin-project/go-jsonrpc (v0.1.7 -> v0.1.8)
|
||||||
|
- github.com/filecoin-project/go-state-types (v0.1.12-beta -> v0.9.0):
|
||||||
|
|
||||||
|
## Others
|
||||||
|
- fix: upgrade: no splash banner for nv17 :( ([filecoin-project/lotus#9486](https://github.com/filecoin-project/lotus/pull/9486))
|
||||||
|
- chore: build: add calib upgrade param for shark ([filecoin-project/lotus#9483](https://github.com/filecoin-project/lotus/pull/9483))
|
||||||
|
- chore: update butterfly artifacts ([filecoin-project/lotus#9467](https://github.com/filecoin-project/lotus/pull/9467))
|
||||||
|
- chore: butterfly: update assets ([filecoin-project/lotus#9462](https://github.com/filecoin-project/lotus/pull/9462))
|
||||||
|
- Delete lotus-pond (#9352) ([filecoin-project/lotus#9352](https://github.com/filecoin-project/lotus/pull/9352))
|
||||||
|
- build: set version to v1.18.0-dev
|
||||||
|
|
||||||
|
## lotus-market EOL notice
|
||||||
|
|
||||||
|
As mentioned in [lotus v1.17.0 release notes](https://github.com/filecoin-project/lotus/releases/tag/v1.17.0), markets related features, enhancements and fixes is now lower priority for Lotus. We recommend our users to migrate to other deal making focused software, like [boost](https://boost.filecoin.io/) as soon as possible. That being said, the lotus maintainers will be:
|
||||||
|
- Lotus maintainers will stop supporting lotus-market subcomponent/**storage** deal making related issues or enhancements on Jan 31, 2023.
|
||||||
|
- In Q2 2023, we will be deprecating/removing lotus-market related code from this repository.
|
||||||
|
If you have any questions or concerns, please raise them in [Lotus discussion](https://github.com/filecoin-project/lotus/discussions/categories/market)!
|
||||||
|
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
| Contributor | Commits | Lines ± | Files Changed |
|
||||||
|
|-------------|---------|---------|---------------|
|
||||||
|
| @geoff-vball | 73 | +14533/-19712 | 509 |
|
||||||
|
| @arajasek | 16 | +2230/-303 | 49 |
|
||||||
|
| @arajasek | 29 | +701/-297 | 117 |
|
||||||
|
| @magik6k | 5 | +429/-135 | 45 |
|
||||||
|
| @Frrist | 1 | +246/-203 | 25 |
|
||||||
|
| @stebalien | 2 | +323/-2 | 6 |
|
||||||
|
| @shrenujbansal | 3 | +176/-61 | 10 |
|
||||||
|
| @ZenGround0 | 2 | +78/-38 | 5 |
|
||||||
|
| @jennijuju | 8 | +97/-18 | 16 |
|
||||||
|
| @simlecode | 5 | +18/-9 | 11 |
|
||||||
|
| Kevin Li | 1 | +7/-0 | 1 |
|
||||||
|
| @zenground0 | 2 | +3/-3 | 3 |
|
||||||
|
| @jennijuju | 1 | +3/-3 | 2 |
|
||||||
|
| Rod Vagg | 1 | +3/-2 | 2 |
|
||||||
|
| @jennijuju | 1 | +2/-2 | 2 |
|
||||||
|
| Peter Rabbitson | 1 | +3/-0 | 1 |
|
||||||
|
| Jakub Sztandera | 1 | +1/-1 | 1 |
|
||||||
|
|
||||||
# v1.17.2 / 2022-10-05
|
# v1.17.2 / 2022-10-05
|
||||||
|
|
||||||
This is an OPTIONAL release of Lotus. This feature release introduces new sector number management APIs in Lotus that enables all the Sealing-as-a-Service and Lotus interactions needed to function. The default propagation delay setting for storage providers has also been changed, as well as numerous other features and enhancements. Check out the sub-bullet points in the feature and enhancement section to get a short description about each feature and enhancements.
|
This is an OPTIONAL release of Lotus. This feature release introduces new sector number management APIs in Lotus that enables all the Sealing-as-a-Service and Lotus interactions needed to function. The default propagation delay setting for storage providers has also been changed, as well as numerous other features and enhancements. Check out the sub-bullet points in the feature and enhancement section to get a short description about each feature and enhancements.
|
||||||
@ -3876,4 +4003,4 @@ We are grateful for every contribution!
|
|||||||
|
|
||||||
We are very excited to release **lotus** 0.1.0. This is our testnet release. To install lotus and join the testnet, please visit [lotu.sh](lotu.sh). Please file bug reports as [issues](https://github.com/filecoin-project/lotus/issues).
|
We are very excited to release **lotus** 0.1.0. This is our testnet release. To install lotus and join the testnet, please visit [lotu.sh](lotu.sh). Please file bug reports as [issues](https://github.com/filecoin-project/lotus/issues).
|
||||||
|
|
||||||
A huge thank you to all contributors for this testnet release!
|
A huge thank you to all contributors for this testnet release!
|
||||||
|
@ -3,28 +3,43 @@ MAINTAINER Lotus Development Team
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
||||||
|
|
||||||
ARG RUST_VERSION=nightly
|
|
||||||
ENV XDG_CACHE_HOME="/tmp"
|
ENV XDG_CACHE_HOME="/tmp"
|
||||||
|
|
||||||
|
### taken from https://github.com/rust-lang/docker-rust/blob/master/1.63.0/buster/Dockerfile
|
||||||
ENV RUSTUP_HOME=/usr/local/rustup \
|
ENV RUSTUP_HOME=/usr/local/rustup \
|
||||||
CARGO_HOME=/usr/local/cargo \
|
CARGO_HOME=/usr/local/cargo \
|
||||||
PATH=/usr/local/cargo/bin:$PATH
|
PATH=/usr/local/cargo/bin:$PATH \
|
||||||
|
RUST_VERSION=1.63.0
|
||||||
|
|
||||||
RUN wget "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init"; \
|
RUN set -eux; \
|
||||||
|
dpkgArch="$(dpkg --print-architecture)"; \
|
||||||
|
case "${dpkgArch##*-}" in \
|
||||||
|
amd64) rustArch='x86_64-unknown-linux-gnu'; rustupSha256='5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c' ;; \
|
||||||
|
arm64) rustArch='aarch64-unknown-linux-gnu'; rustupSha256='e189948e396d47254103a49c987e7fb0e5dd8e34b200aa4481ecc4b8e41fb929' ;; \
|
||||||
|
*) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
|
||||||
|
esac; \
|
||||||
|
url="https://static.rust-lang.org/rustup/archive/1.25.1/${rustArch}/rustup-init"; \
|
||||||
|
wget "$url"; \
|
||||||
|
echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
|
||||||
chmod +x rustup-init; \
|
chmod +x rustup-init; \
|
||||||
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION; \
|
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION --default-host ${rustArch}; \
|
||||||
rm rustup-init; \
|
rm rustup-init; \
|
||||||
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
||||||
rustup --version; \
|
rustup --version; \
|
||||||
cargo --version; \
|
cargo --version; \
|
||||||
rustc --version;
|
rustc --version;
|
||||||
|
### end rust
|
||||||
|
|
||||||
FROM builder-deps AS builder-local
|
FROM builder-deps AS builder-local
|
||||||
MAINTAINER Lotus Development Team
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
COPY ./ /opt/filecoin
|
COPY ./ /opt/filecoin
|
||||||
WORKDIR /opt/filecoin
|
WORKDIR /opt/filecoin
|
||||||
|
|
||||||
|
### make configurable filecoin-ffi build
|
||||||
|
ARG FFI_BUILD_FROM_SOURCE=0
|
||||||
|
ENV FFI_BUILD_FROM_SOURCE=${FFI_BUILD_FROM_SOURCE}
|
||||||
|
|
||||||
RUN make clean deps
|
RUN make clean deps
|
||||||
|
|
||||||
|
|
||||||
@ -52,14 +67,14 @@ MAINTAINER Lotus Development Team
|
|||||||
|
|
||||||
# Base resources
|
# Base resources
|
||||||
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
|
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libdl.so.2 /lib/
|
COPY --from=builder /lib/*/libdl.so.2 /lib/
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/librt.so.1 /lib/
|
COPY --from=builder /lib/*/librt.so.1 /lib/
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/
|
COPY --from=builder /lib/*/libgcc_s.so.1 /lib/
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libutil.so.1 /lib/
|
COPY --from=builder /lib/*/libutil.so.1 /lib/
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libltdl.so.7 /lib/
|
COPY --from=builder /usr/lib/*/libltdl.so.7 /lib/
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libnuma.so.1 /lib/
|
COPY --from=builder /usr/lib/*/libnuma.so.1 /lib/
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libhwloc.so.5 /lib/
|
COPY --from=builder /usr/lib/*/libhwloc.so.5 /lib/
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /lib/
|
COPY --from=builder /usr/lib/*/libOpenCL.so.1 /lib/
|
||||||
|
|
||||||
RUN useradd -r -u 532 -U fc \
|
RUN useradd -r -u 532 -U fc \
|
||||||
&& mkdir -p /etc/OpenCL/vendors \
|
&& mkdir -p /etc/OpenCL/vendors \
|
||||||
|
1
GO_VERSION_MIN
Normal file
1
GO_VERSION_MIN
Normal file
@ -0,0 +1 @@
|
|||||||
|
1.18.1
|
25
Makefile
25
Makefile
@ -8,9 +8,11 @@ unexport GOFLAGS
|
|||||||
GOCC?=go
|
GOCC?=go
|
||||||
|
|
||||||
GOVERSION:=$(shell $(GOCC) version | tr ' ' '\n' | grep go1 | sed 's/^go//' | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
|
GOVERSION:=$(shell $(GOCC) version | tr ' ' '\n' | grep go1 | sed 's/^go//' | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
|
||||||
ifeq ($(shell expr $(GOVERSION) \< 1018001), 1)
|
GOVERSIONMIN:=$(shell cat GO_VERSION_MIN | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
|
||||||
|
|
||||||
|
ifeq ($(shell expr $(GOVERSION) \< $(GOVERSIONMIN)), 1)
|
||||||
$(warning Your Golang version is go$(shell expr $(GOVERSION) / 1000000).$(shell expr $(GOVERSION) % 1000000 / 1000).$(shell expr $(GOVERSION) % 1000))
|
$(warning Your Golang version is go$(shell expr $(GOVERSION) / 1000000).$(shell expr $(GOVERSION) % 1000000 / 1000).$(shell expr $(GOVERSION) % 1000))
|
||||||
$(error Update Golang to version to at least 1.18.1)
|
$(error Update Golang to version to at least $(shell cat GO_VERSION_MIN))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# git modules that need to be loaded
|
# git modules that need to be loaded
|
||||||
@ -64,7 +66,7 @@ CLEAN+=build/.update-modules
|
|||||||
deps: $(BUILD_DEPS)
|
deps: $(BUILD_DEPS)
|
||||||
.PHONY: deps
|
.PHONY: deps
|
||||||
|
|
||||||
build-devnets: build lotus-seed lotus-shed lotus-wallet lotus-gateway lotus-fountain lotus-stats
|
build-devnets: build lotus-seed lotus-shed
|
||||||
.PHONY: build-devnets
|
.PHONY: build-devnets
|
||||||
|
|
||||||
debug: GOFLAGS+=-tags=debug
|
debug: GOFLAGS+=-tags=debug
|
||||||
@ -160,18 +162,6 @@ benchmarks:
|
|||||||
@curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}"
|
@curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}"
|
||||||
.PHONY: benchmarks
|
.PHONY: benchmarks
|
||||||
|
|
||||||
lotus-pond: 2k
|
|
||||||
$(GOCC) build -o lotus-pond ./lotuspond
|
|
||||||
.PHONY: lotus-pond
|
|
||||||
BINS+=lotus-pond
|
|
||||||
|
|
||||||
lotus-pond-front:
|
|
||||||
(cd lotuspond/front && npm i && CI=false npm run build)
|
|
||||||
.PHONY: lotus-pond-front
|
|
||||||
|
|
||||||
lotus-pond-app: lotus-pond-front lotus-pond
|
|
||||||
.PHONY: lotus-pond-app
|
|
||||||
|
|
||||||
lotus-fountain:
|
lotus-fountain:
|
||||||
rm -f lotus-fountain
|
rm -f lotus-fountain
|
||||||
$(GOCC) build $(GOFLAGS) -o lotus-fountain ./cmd/lotus-fountain
|
$(GOCC) build $(GOFLAGS) -o lotus-fountain ./cmd/lotus-fountain
|
||||||
@ -299,9 +289,6 @@ type-gen: api-gen
|
|||||||
$(GOCC) generate -x ./...
|
$(GOCC) generate -x ./...
|
||||||
goimports -w api/
|
goimports -w api/
|
||||||
|
|
||||||
method-gen: api-gen
|
|
||||||
(cd ./lotuspond/front/src/chain && $(GOCC) run ./methodgen.go)
|
|
||||||
|
|
||||||
actors-code-gen:
|
actors-code-gen:
|
||||||
$(GOCC) run ./gen/inline-gen . gen/inlinegen-data.json
|
$(GOCC) run ./gen/inline-gen . gen/inlinegen-data.json
|
||||||
$(GOCC) run ./chain/actors/agen
|
$(GOCC) run ./chain/actors/agen
|
||||||
@ -367,7 +354,7 @@ docsgen-openrpc-gateway: docsgen-openrpc-bin
|
|||||||
fiximports:
|
fiximports:
|
||||||
./scripts/fiximports
|
./scripts/fiximports
|
||||||
|
|
||||||
gen: actors-code-gen type-gen method-gen cfgdoc-gen docsgen api-gen circleci bundle-gen fiximports
|
gen: actors-code-gen type-gen cfgdoc-gen docsgen api-gen circleci bundle-gen fiximports
|
||||||
@echo ">>> IF YOU'VE MODIFIED THE CLI OR CONFIG, REMEMBER TO ALSO MAKE docsgen-cli"
|
@echo ">>> IF YOU'VE MODIFIED THE CLI OR CONFIG, REMEMBER TO ALSO MAKE docsgen-cli"
|
||||||
.PHONY: gen
|
.PHONY: gen
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p/core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
@ -17,9 +18,10 @@ import (
|
|||||||
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/market"
|
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@ -527,6 +529,17 @@ type FullNode interface {
|
|||||||
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*MarketDeal, error) //perm:read
|
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*MarketDeal, error) //perm:read
|
||||||
// StateMarketStorageDeal returns information about the indicated deal
|
// StateMarketStorageDeal returns information about the indicated deal
|
||||||
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error) //perm:read
|
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error) //perm:read
|
||||||
|
// StateGetAllocationForPendingDeal returns the allocation for a given deal ID of a pending deal. Returns nil if
|
||||||
|
// pending allocation is not found.
|
||||||
|
StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocation returns the allocation for a given address and allocation ID.
|
||||||
|
StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocations returns the all the allocations for a given client.
|
||||||
|
StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetClaim returns the claim for a given address and claim ID.
|
||||||
|
StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read
|
||||||
|
// StateGetClaims returns the all the claims for a given provider.
|
||||||
|
StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read
|
||||||
// StateComputeDataCID computes DataCID from a set of on-chain deals
|
// StateComputeDataCID computes DataCID from a set of on-chain deals
|
||||||
StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) //perm:read
|
StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) //perm:read
|
||||||
// StateLookupID retrieves the ID address of the given address
|
// StateLookupID retrieves the ID address of the given address
|
||||||
@ -751,6 +764,9 @@ type FullNode interface {
|
|||||||
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
|
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
|
||||||
// the path specified when calling CreateBackup is within the base path
|
// the path specified when calling CreateBackup is within the base path
|
||||||
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
||||||
|
|
||||||
|
RaftState(ctx context.Context) (*RaftStateData, error) //perm:read
|
||||||
|
RaftLeader(ctx context.Context) (peer.ID, error) //perm:read
|
||||||
}
|
}
|
||||||
|
|
||||||
type StorageAsk struct {
|
type StorageAsk struct {
|
||||||
@ -1000,8 +1016,12 @@ type RetrievalOrder struct {
|
|||||||
Client address.Address
|
Client address.Address
|
||||||
Miner address.Address
|
Miner address.Address
|
||||||
MinerPeer *retrievalmarket.RetrievalPeer
|
MinerPeer *retrievalmarket.RetrievalPeer
|
||||||
|
|
||||||
|
RemoteStore *RemoteStoreID `json:"RemoteStore,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RemoteStoreID = uuid.UUID
|
||||||
|
|
||||||
type InvocResult struct {
|
type InvocResult struct {
|
||||||
MsgCid cid.Cid
|
MsgCid cid.Cid
|
||||||
Msg *types.Message
|
Msg *types.Message
|
||||||
|
@ -18,7 +18,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-jsonrpc/auth"
|
"github.com/filecoin-project/go-jsonrpc/auth"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/market"
|
"github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
|
|
||||||
@ -320,7 +320,7 @@ type StorageMiner interface {
|
|||||||
// the path specified when calling CreateBackup is within the base path
|
// the path specified when calling CreateBackup is within the base path
|
||||||
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
||||||
|
|
||||||
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storiface.SectorRef, expensive bool) (map[abi.SectorNumber]string, error) //perm:admin
|
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storiface.SectorRef) (map[abi.SectorNumber]string, error) //perm:admin
|
||||||
|
|
||||||
ComputeProof(ctx context.Context, ssi []builtin.ExtendedSectorInfo, rand abi.PoStRandomness, poStEpoch abi.ChainEpoch, nv abinetwork.Version) ([]builtin.PoStProof, error) //perm:read
|
ComputeProof(ctx context.Context, ssi []builtin.ExtendedSectorInfo, rand abi.PoStRandomness, poStEpoch abi.ChainEpoch, nv abinetwork.Version) ([]builtin.PoStProof, error) //perm:read
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ import (
|
|||||||
xerrors "golang.org/x/xerrors"
|
xerrors "golang.org/x/xerrors"
|
||||||
|
|
||||||
abi "github.com/filecoin-project/go-state-types/abi"
|
abi "github.com/filecoin-project/go-state-types/abi"
|
||||||
market "github.com/filecoin-project/go-state-types/builtin/v8/market"
|
|
||||||
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
market "github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = xerrors.Errorf
|
var _ = xerrors.Errorf
|
||||||
|
@ -32,6 +32,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-jsonrpc/auth"
|
"github.com/filecoin-project/go-jsonrpc/auth"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/exitcode"
|
"github.com/filecoin-project/go-state-types/exitcode"
|
||||||
|
|
||||||
@ -137,7 +138,15 @@ func init() {
|
|||||||
addExample(&textSelExample)
|
addExample(&textSelExample)
|
||||||
addExample(&apiSelExample)
|
addExample(&apiSelExample)
|
||||||
addExample(network.ReachabilityPublic)
|
addExample(network.ReachabilityPublic)
|
||||||
addExample(build.NewestNetworkVersion)
|
addExample(build.TestNetworkVersion)
|
||||||
|
allocationId := verifreg.AllocationId(0)
|
||||||
|
addExample(allocationId)
|
||||||
|
addExample(&allocationId)
|
||||||
|
addExample(map[verifreg.AllocationId]verifreg.Allocation{})
|
||||||
|
claimId := verifreg.ClaimId(0)
|
||||||
|
addExample(claimId)
|
||||||
|
addExample(&claimId)
|
||||||
|
addExample(map[verifreg.ClaimId]verifreg.Claim{})
|
||||||
addExample(map[string]int{"name": 42})
|
addExample(map[string]int{"name": 42})
|
||||||
addExample(map[string]time.Time{"name": time.Unix(1615243938, 0).UTC()})
|
addExample(map[string]time.Time{"name": time.Unix(1615243938, 0).UTC()})
|
||||||
addExample(&types.ExecutionTrace{
|
addExample(&types.ExecutionTrace{
|
||||||
@ -340,6 +349,10 @@ func init() {
|
|||||||
addExample(map[string]bitfield.BitField{
|
addExample(map[string]bitfield.BitField{
|
||||||
"": bitfield.NewFromSet([]uint64{5, 6, 7, 10}),
|
"": bitfield.NewFromSet([]uint64{5, 6, 7, 10}),
|
||||||
})
|
})
|
||||||
|
addExample(&api.RaftStateData{
|
||||||
|
NonceMap: make(map[address.Address]uint64),
|
||||||
|
MsgUuids: make(map[uuid.UUID]*types.SignedMessage),
|
||||||
|
})
|
||||||
|
|
||||||
addExample(http.Header{
|
addExample(http.Header{
|
||||||
"Authorization": []string{"Bearer ey.."},
|
"Authorization": []string{"Bearer ey.."},
|
||||||
@ -352,6 +365,7 @@ func init() {
|
|||||||
Headers: nil,
|
Headers: nil,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
addExample(&uuid.UUID{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) {
|
func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) {
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
big "github.com/filecoin-project/go-state-types/big"
|
big "github.com/filecoin-project/go-state-types/big"
|
||||||
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
miner "github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
miner "github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
crypto "github.com/filecoin-project/go-state-types/crypto"
|
crypto "github.com/filecoin-project/go-state-types/crypto"
|
||||||
dline "github.com/filecoin-project/go-state-types/dline"
|
dline "github.com/filecoin-project/go-state-types/dline"
|
||||||
network "github.com/filecoin-project/go-state-types/network"
|
network "github.com/filecoin-project/go-state-types/network"
|
||||||
@ -2243,6 +2244,36 @@ func (mr *MockFullNodeMockRecorder) PaychVoucherSubmit(arg0, arg1, arg2, arg3, a
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherSubmit", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherSubmit), arg0, arg1, arg2, arg3, arg4)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherSubmit", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherSubmit), arg0, arg1, arg2, arg3, arg4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RaftLeader mocks base method.
|
||||||
|
func (m *MockFullNode) RaftLeader(arg0 context.Context) (peer.ID, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "RaftLeader", arg0)
|
||||||
|
ret0, _ := ret[0].(peer.ID)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaftLeader indicates an expected call of RaftLeader.
|
||||||
|
func (mr *MockFullNodeMockRecorder) RaftLeader(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RaftLeader", reflect.TypeOf((*MockFullNode)(nil).RaftLeader), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaftState mocks base method.
|
||||||
|
func (m *MockFullNode) RaftState(arg0 context.Context) (*api.RaftStateData, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "RaftState", arg0)
|
||||||
|
ret0, _ := ret[0].(*api.RaftStateData)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaftState indicates an expected call of RaftState.
|
||||||
|
func (mr *MockFullNodeMockRecorder) RaftState(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RaftState", reflect.TypeOf((*MockFullNode)(nil).RaftState), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// Session mocks base method.
|
// Session mocks base method.
|
||||||
func (m *MockFullNode) Session(arg0 context.Context) (uuid.UUID, error) {
|
func (m *MockFullNode) Session(arg0 context.Context) (uuid.UUID, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -2482,6 +2513,51 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{})
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocation", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation indicates an expected call of StateGetAllocation.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocation(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocation", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocation), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocationForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocationForPendingDeal", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal indicates an expected call of StateGetAllocationForPendingDeal.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocationForPendingDeal(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationForPendingDeal", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocationForPendingDeal), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocations(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocations", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations indicates an expected call of StateGetAllocations.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocations(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocations), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateGetBeaconEntry mocks base method.
|
// StateGetBeaconEntry mocks base method.
|
||||||
func (m *MockFullNode) StateGetBeaconEntry(arg0 context.Context, arg1 abi.ChainEpoch) (*types.BeaconEntry, error) {
|
func (m *MockFullNode) StateGetBeaconEntry(arg0 context.Context, arg1 abi.ChainEpoch) (*types.BeaconEntry, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@ -2497,6 +2573,36 @@ func (mr *MockFullNodeMockRecorder) StateGetBeaconEntry(arg0, arg1 interface{})
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetBeaconEntry", reflect.TypeOf((*MockFullNode)(nil).StateGetBeaconEntry), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetBeaconEntry", reflect.TypeOf((*MockFullNode)(nil).StateGetBeaconEntry), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateGetClaim mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaim(arg0 context.Context, arg1 address.Address, arg2 verifreg.ClaimId, arg3 types.TipSetKey) (*verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaim", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaim indicates an expected call of StateGetClaim.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaim(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaim", reflect.TypeOf((*MockFullNode)(nil).StateGetClaim), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaims(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaims", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims indicates an expected call of StateGetClaims.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaims(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetClaims), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateGetNetworkParams mocks base method.
|
// StateGetNetworkParams mocks base method.
|
||||||
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
100
api/proxy_gen.go
100
api/proxy_gen.go
@ -26,6 +26,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@ -341,6 +342,10 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"`
|
PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
|
RaftLeader func(p0 context.Context) (peer.ID, error) `perm:"read"`
|
||||||
|
|
||||||
|
RaftState func(p0 context.Context) (*RaftStateData, error) `perm:"read"`
|
||||||
|
|
||||||
StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"`
|
StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
StateActorCodeCIDs func(p0 context.Context, p1 abinetwork.Version) (map[string]cid.Cid, error) `perm:"read"`
|
StateActorCodeCIDs func(p0 context.Context, p1 abinetwork.Version) (map[string]cid.Cid, error) `perm:"read"`
|
||||||
@ -367,8 +372,18 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"`
|
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetAllocations func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetBeaconEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"`
|
StateGetBeaconEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetClaim func(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetClaims func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetNetworkParams func(p0 context.Context) (*NetworkParams, error) `perm:"read"`
|
StateGetNetworkParams func(p0 context.Context) (*NetworkParams, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
||||||
@ -668,7 +683,7 @@ type StorageMinerStruct struct {
|
|||||||
|
|
||||||
BeneficiaryWithdrawBalance func(p0 context.Context, p1 abi.TokenAmount) (cid.Cid, error) `perm:"admin"`
|
BeneficiaryWithdrawBalance func(p0 context.Context, p1 abi.TokenAmount) (cid.Cid, error) `perm:"admin"`
|
||||||
|
|
||||||
CheckProvable func(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storiface.SectorRef, p3 bool) (map[abi.SectorNumber]string, error) `perm:"admin"`
|
CheckProvable func(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storiface.SectorRef) (map[abi.SectorNumber]string, error) `perm:"admin"`
|
||||||
|
|
||||||
ComputeDataCid func(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data) (abi.PieceInfo, error) `perm:"admin"`
|
ComputeDataCid func(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data) (abi.PieceInfo, error) `perm:"admin"`
|
||||||
|
|
||||||
@ -2462,6 +2477,28 @@ func (s *FullNodeStub) PaychVoucherSubmit(p0 context.Context, p1 address.Address
|
|||||||
return *new(cid.Cid), ErrNotSupported
|
return *new(cid.Cid), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) RaftLeader(p0 context.Context) (peer.ID, error) {
|
||||||
|
if s.Internal.RaftLeader == nil {
|
||||||
|
return *new(peer.ID), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.RaftLeader(p0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) RaftLeader(p0 context.Context) (peer.ID, error) {
|
||||||
|
return *new(peer.ID), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) RaftState(p0 context.Context) (*RaftStateData, error) {
|
||||||
|
if s.Internal.RaftState == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.RaftState(p0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) RaftState(p0 context.Context) (*RaftStateData, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) StateAccountKey(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) {
|
func (s *FullNodeStruct) StateAccountKey(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) {
|
||||||
if s.Internal.StateAccountKey == nil {
|
if s.Internal.StateAccountKey == nil {
|
||||||
return *new(address.Address), ErrNotSupported
|
return *new(address.Address), ErrNotSupported
|
||||||
@ -2605,6 +2642,39 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2
|
|||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocation == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocation(p0, p1, p2, p3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocationForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocationForPendingDeal == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocationForPendingDeal(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocationForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocations == nil {
|
||||||
|
return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocations(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) {
|
||||||
|
return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) StateGetBeaconEntry(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) {
|
func (s *FullNodeStruct) StateGetBeaconEntry(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) {
|
||||||
if s.Internal.StateGetBeaconEntry == nil {
|
if s.Internal.StateGetBeaconEntry == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
@ -2616,6 +2686,28 @@ func (s *FullNodeStub) StateGetBeaconEntry(p0 context.Context, p1 abi.ChainEpoch
|
|||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetClaim(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) {
|
||||||
|
if s.Internal.StateGetClaim == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetClaim(p0, p1, p2, p3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetClaim(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetClaims(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) {
|
||||||
|
if s.Internal.StateGetClaims == nil {
|
||||||
|
return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetClaims(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetClaims(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) {
|
||||||
|
return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*NetworkParams, error) {
|
func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*NetworkParams, error) {
|
||||||
if s.Internal.StateGetNetworkParams == nil {
|
if s.Internal.StateGetNetworkParams == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
@ -4068,14 +4160,14 @@ func (s *StorageMinerStub) BeneficiaryWithdrawBalance(p0 context.Context, p1 abi
|
|||||||
return *new(cid.Cid), ErrNotSupported
|
return *new(cid.Cid), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StorageMinerStruct) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storiface.SectorRef, p3 bool) (map[abi.SectorNumber]string, error) {
|
func (s *StorageMinerStruct) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storiface.SectorRef) (map[abi.SectorNumber]string, error) {
|
||||||
if s.Internal.CheckProvable == nil {
|
if s.Internal.CheckProvable == nil {
|
||||||
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
||||||
}
|
}
|
||||||
return s.Internal.CheckProvable(p0, p1, p2, p3)
|
return s.Internal.CheckProvable(p0, p1, p2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StorageMinerStub) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storiface.SectorRef, p3 bool) (map[abi.SectorNumber]string, error) {
|
func (s *StorageMinerStub) CheckProvable(p0 context.Context, p1 abi.RegisteredPoStProof, p2 []storiface.SectorRef) (map[abi.SectorNumber]string, error) {
|
||||||
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
return *new(map[abi.SectorNumber]string), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
65
api/types.go
65
api/types.go
@ -59,6 +59,11 @@ type MessageSendSpec struct {
|
|||||||
MsgUuid uuid.UUID
|
MsgUuid uuid.UUID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MpoolMessageWhole struct {
|
||||||
|
Msg *types.Message
|
||||||
|
Spec *MessageSendSpec
|
||||||
|
}
|
||||||
|
|
||||||
// GraphSyncDataTransfer provides diagnostics on a data transfer happening over graphsync
|
// GraphSyncDataTransfer provides diagnostics on a data transfer happening over graphsync
|
||||||
type GraphSyncDataTransfer struct {
|
type GraphSyncDataTransfer struct {
|
||||||
// GraphSync request id for this transfer
|
// GraphSync request id for this transfer
|
||||||
@ -331,4 +336,64 @@ type ForkUpgradeParams struct {
|
|||||||
UpgradeHyperdriveHeight abi.ChainEpoch
|
UpgradeHyperdriveHeight abi.ChainEpoch
|
||||||
UpgradeChocolateHeight abi.ChainEpoch
|
UpgradeChocolateHeight abi.ChainEpoch
|
||||||
UpgradeOhSnapHeight abi.ChainEpoch
|
UpgradeOhSnapHeight abi.ChainEpoch
|
||||||
|
UpgradeSkyrHeight abi.ChainEpoch
|
||||||
|
UpgradeSharkHeight abi.ChainEpoch
|
||||||
|
}
|
||||||
|
|
||||||
|
type NonceMapType map[address.Address]uint64
|
||||||
|
type MsgUuidMapType map[uuid.UUID]*types.SignedMessage
|
||||||
|
|
||||||
|
type RaftStateData struct {
|
||||||
|
NonceMap NonceMapType
|
||||||
|
MsgUuids MsgUuidMapType
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NonceMapType) MarshalJSON() ([]byte, error) {
|
||||||
|
marshalled := make(map[string]uint64)
|
||||||
|
for a, n := range *n {
|
||||||
|
marshalled[a.String()] = n
|
||||||
|
}
|
||||||
|
return json.Marshal(marshalled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NonceMapType) UnmarshalJSON(b []byte) error {
|
||||||
|
unmarshalled := make(map[string]uint64)
|
||||||
|
err := json.Unmarshal(b, &unmarshalled)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*n = make(map[address.Address]uint64)
|
||||||
|
for saddr, nonce := range unmarshalled {
|
||||||
|
a, err := address.NewFromString(saddr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
(*n)[a] = nonce
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MsgUuidMapType) MarshalJSON() ([]byte, error) {
|
||||||
|
marshalled := make(map[string]*types.SignedMessage)
|
||||||
|
for u, msg := range *m {
|
||||||
|
marshalled[u.String()] = msg
|
||||||
|
}
|
||||||
|
return json.Marshal(marshalled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MsgUuidMapType) UnmarshalJSON(b []byte) error {
|
||||||
|
unmarshalled := make(map[string]*types.SignedMessage)
|
||||||
|
err := json.Unmarshal(b, &unmarshalled)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*m = make(map[uuid.UUID]*types.SignedMessage)
|
||||||
|
for suid, msg := range unmarshalled {
|
||||||
|
u, err := uuid.Parse(suid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
(*m)[u] = msg
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@ -531,6 +532,16 @@ type FullNode interface {
|
|||||||
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*api.MarketDeal, error) //perm:read
|
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*api.MarketDeal, error) //perm:read
|
||||||
// StateMarketStorageDeal returns information about the indicated deal
|
// StateMarketStorageDeal returns information about the indicated deal
|
||||||
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) //perm:read
|
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) //perm:read
|
||||||
|
// StateGetAllocationForPendingDeal returns the allocation for a given deal ID of a pending deal.
|
||||||
|
StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocation returns the allocation for a given address and allocation ID.
|
||||||
|
StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocations returns the all the allocations for a given client.
|
||||||
|
StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetClaim returns the claim for a given address and claim ID.
|
||||||
|
StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read
|
||||||
|
// StateGetClaims returns the all the claims for a given provider.
|
||||||
|
StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read
|
||||||
// StateLookupID retrieves the ID address of the given address
|
// StateLookupID retrieves the ID address of the given address
|
||||||
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read
|
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read
|
||||||
// StateAccountKey returns the public key address of the given ID address
|
// StateAccountKey returns the public key address of the given ID address
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@ -277,6 +278,16 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"`
|
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetAllocations func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetClaim func(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) `perm:"read"`
|
||||||
|
|
||||||
|
StateGetClaims func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetNetworkParams func(p0 context.Context) (*api.NetworkParams, error) `perm:"read"`
|
StateGetNetworkParams func(p0 context.Context) (*api.NetworkParams, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
||||||
@ -1793,6 +1804,61 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2
|
|||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocation == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocation(p0, p1, p2, p3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocationForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocationForPendingDeal == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocationForPendingDeal(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocationForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocations == nil {
|
||||||
|
return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocations(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) {
|
||||||
|
return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetClaim(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) {
|
||||||
|
if s.Internal.StateGetClaim == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetClaim(p0, p1, p2, p3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetClaim(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetClaims(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) {
|
||||||
|
if s.Internal.StateGetClaims == nil {
|
||||||
|
return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetClaims(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetClaims(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) {
|
||||||
|
return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) {
|
func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) {
|
||||||
if s.Internal.StateGetNetworkParams == nil {
|
if s.Internal.StateGetNetworkParams == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
big "github.com/filecoin-project/go-state-types/big"
|
big "github.com/filecoin-project/go-state-types/big"
|
||||||
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
miner "github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
miner "github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
crypto "github.com/filecoin-project/go-state-types/crypto"
|
crypto "github.com/filecoin-project/go-state-types/crypto"
|
||||||
dline "github.com/filecoin-project/go-state-types/dline"
|
dline "github.com/filecoin-project/go-state-types/dline"
|
||||||
network "github.com/filecoin-project/go-state-types/network"
|
network "github.com/filecoin-project/go-state-types/network"
|
||||||
@ -2337,6 +2338,81 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{})
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocation", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation indicates an expected call of StateGetAllocation.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocation(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocation", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocation), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocationForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocationForPendingDeal", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal indicates an expected call of StateGetAllocationForPendingDeal.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocationForPendingDeal(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationForPendingDeal", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocationForPendingDeal), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocations(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocations", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations indicates an expected call of StateGetAllocations.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocations(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocations), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaim mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaim(arg0 context.Context, arg1 address.Address, arg2 verifreg.ClaimId, arg3 types.TipSetKey) (*verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaim", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaim indicates an expected call of StateGetClaim.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaim(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaim", reflect.TypeOf((*MockFullNode)(nil).StateGetClaim), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaims(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaims", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims indicates an expected call of StateGetClaims.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaims(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetClaims), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateGetNetworkParams mocks base method.
|
// StateGetNetworkParams mocks base method.
|
||||||
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
@ -181,18 +181,22 @@ func (bs *AutobatchBlockstore) Get(ctx context.Context, c cid.Cid) (block.Block,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bs.stateLock.Lock()
|
bs.stateLock.Lock()
|
||||||
defer bs.stateLock.Unlock()
|
|
||||||
v, ok := bs.flushingBatch.blockMap[c]
|
v, ok := bs.flushingBatch.blockMap[c]
|
||||||
if ok {
|
if ok {
|
||||||
|
bs.stateLock.Unlock()
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
v, ok = bs.bufferedBatch.blockMap[c]
|
v, ok = bs.bufferedBatch.blockMap[c]
|
||||||
if ok {
|
if ok {
|
||||||
|
bs.stateLock.Unlock()
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
bs.stateLock.Unlock()
|
||||||
|
|
||||||
return bs.Get(ctx, c)
|
// We have to check the backing store one more time because it may have been flushed by the
|
||||||
|
// time we were able to take the lock above.
|
||||||
|
return bs.backingBs.Get(ctx, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *AutobatchBlockstore) DeleteBlock(context.Context, cid.Cid) error {
|
func (bs *AutobatchBlockstore) DeleteBlock(context.Context, cid.Cid) error {
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -29,6 +30,10 @@ func TestAutobatchBlockstore(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, b2.RawData(), v2.RawData())
|
require.Equal(t, b2.RawData(), v2.RawData())
|
||||||
|
|
||||||
|
// Regression test for a deadlock.
|
||||||
|
_, err = ab.Get(ctx, b3.Cid())
|
||||||
|
require.True(t, ipld.IsNotFound(err))
|
||||||
|
|
||||||
require.NoError(t, ab.Flush(ctx))
|
require.NoError(t, ab.Flush(ctx))
|
||||||
require.NoError(t, ab.Shutdown(ctx))
|
require.NoError(t, ab.Shutdown(ctx))
|
||||||
}
|
}
|
||||||
|
441
blockstore/cbor_gen.go
Normal file
441
blockstore/cbor_gen.go
Normal file
@ -0,0 +1,441 @@
|
|||||||
|
// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
cid "github.com/ipfs/go-cid"
|
||||||
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
xerrors "golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = xerrors.Errorf
|
||||||
|
var _ = cid.Undef
|
||||||
|
var _ = math.E
|
||||||
|
var _ = sort.Sort
|
||||||
|
|
||||||
|
var lengthBufNetRpcReq = []byte{132}
|
||||||
|
|
||||||
|
func (t *NetRpcReq) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write(lengthBufNetRpcReq); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCReqType) (uint8)
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Type)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.ID)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Cid ([]cid.Cid) (slice)
|
||||||
|
if len(t.Cid) > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Slice value in field t.Cid was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Cid))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, v := range t.Cid {
|
||||||
|
if err := cbg.WriteCid(w, v); err != nil {
|
||||||
|
return xerrors.Errorf("failed writing cid field t.Cid: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Data ([][]uint8) (slice)
|
||||||
|
if len(t.Data) > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Slice value in field t.Data was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Data))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, v := range t.Data {
|
||||||
|
if len(v) > cbg.ByteArrayMaxLen {
|
||||||
|
return xerrors.Errorf("Byte array in field v was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(v))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := cw.Write(v[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = NetRpcReq{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("cbor input should be of type array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra != 4 {
|
||||||
|
return fmt.Errorf("cbor input had wrong number of fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCReqType) (uint8)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint8 field")
|
||||||
|
}
|
||||||
|
if extra > math.MaxUint8 {
|
||||||
|
return fmt.Errorf("integer in input was too large for uint8 field")
|
||||||
|
}
|
||||||
|
t.Type = NetRPCReqType(extra)
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
|
}
|
||||||
|
t.ID = uint64(extra)
|
||||||
|
|
||||||
|
}
|
||||||
|
// t.Cid ([]cid.Cid) (slice)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.MaxLength {
|
||||||
|
return fmt.Errorf("t.Cid: array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("expected cbor array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Cid = make([]cid.Cid, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(extra); i++ {
|
||||||
|
|
||||||
|
c, err := cbg.ReadCid(cr)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("reading cid field t.Cid failed: %w", err)
|
||||||
|
}
|
||||||
|
t.Cid[i] = c
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Data ([][]uint8) (slice)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.MaxLength {
|
||||||
|
return fmt.Errorf("t.Data: array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("expected cbor array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Data = make([][]uint8, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(extra); i++ {
|
||||||
|
{
|
||||||
|
var maj byte
|
||||||
|
var extra uint64
|
||||||
|
var err error
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.ByteArrayMaxLen {
|
||||||
|
return fmt.Errorf("t.Data[i]: byte array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
if maj != cbg.MajByteString {
|
||||||
|
return fmt.Errorf("expected byte array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Data[i] = make([]uint8, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := io.ReadFull(cr, t.Data[i][:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var lengthBufNetRpcResp = []byte{131}
|
||||||
|
|
||||||
|
func (t *NetRpcResp) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write(lengthBufNetRpcResp); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCRespType) (uint8)
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Type)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.ID)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Data ([]uint8) (slice)
|
||||||
|
if len(t.Data) > cbg.ByteArrayMaxLen {
|
||||||
|
return xerrors.Errorf("Byte array in field t.Data was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(t.Data))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := cw.Write(t.Data[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *NetRpcResp) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = NetRpcResp{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("cbor input should be of type array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra != 3 {
|
||||||
|
return fmt.Errorf("cbor input had wrong number of fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCRespType) (uint8)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint8 field")
|
||||||
|
}
|
||||||
|
if extra > math.MaxUint8 {
|
||||||
|
return fmt.Errorf("integer in input was too large for uint8 field")
|
||||||
|
}
|
||||||
|
t.Type = NetRPCRespType(extra)
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
|
}
|
||||||
|
t.ID = uint64(extra)
|
||||||
|
|
||||||
|
}
|
||||||
|
// t.Data ([]uint8) (slice)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.ByteArrayMaxLen {
|
||||||
|
return fmt.Errorf("t.Data: byte array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
if maj != cbg.MajByteString {
|
||||||
|
return fmt.Errorf("expected byte array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Data = make([]uint8, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := io.ReadFull(cr, t.Data[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var lengthBufNetRpcErr = []byte{131}
|
||||||
|
|
||||||
|
func (t *NetRpcErr) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write(lengthBufNetRpcErr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCErrType) (uint8)
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Type)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Msg (string) (string)
|
||||||
|
if len(t.Msg) > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field t.Msg was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Msg))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string(t.Msg)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Cid (cid.Cid) (struct)
|
||||||
|
|
||||||
|
if t.Cid == nil {
|
||||||
|
if _, err := cw.Write(cbg.CborNull); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := cbg.WriteCid(cw, *t.Cid); err != nil {
|
||||||
|
return xerrors.Errorf("failed to write cid field t.Cid: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *NetRpcErr) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = NetRpcErr{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("cbor input should be of type array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra != 3 {
|
||||||
|
return fmt.Errorf("cbor input had wrong number of fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCErrType) (uint8)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint8 field")
|
||||||
|
}
|
||||||
|
if extra > math.MaxUint8 {
|
||||||
|
return fmt.Errorf("integer in input was too large for uint8 field")
|
||||||
|
}
|
||||||
|
t.Type = NetRPCErrType(extra)
|
||||||
|
// t.Msg (string) (string)
|
||||||
|
|
||||||
|
{
|
||||||
|
sval, err := cbg.ReadString(cr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Msg = string(sval)
|
||||||
|
}
|
||||||
|
// t.Cid (cid.Cid) (struct)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
b, err := cr.ReadByte()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if b != cbg.CborNull[0] {
|
||||||
|
if err := cr.UnreadByte(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := cbg.ReadCid(cr)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("failed to read cid field t.Cid: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Cid = &c
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
424
blockstore/net.go
Normal file
424
blockstore/net.go
Normal file
@ -0,0 +1,424 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
|
blocks "github.com/ipfs/go-block-format"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRPCReqType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
NRpcHas NetRPCReqType = iota
|
||||||
|
NRpcGet
|
||||||
|
NRpcGetSize
|
||||||
|
NRpcPut
|
||||||
|
NRpcDelete
|
||||||
|
|
||||||
|
// todo cancel req
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRPCRespType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
NRpcOK NetRPCRespType = iota
|
||||||
|
NRpcErr
|
||||||
|
NRpcMore
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRPCErrType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
NRpcErrGeneric NetRPCErrType = iota
|
||||||
|
NRpcErrNotFound
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRpcReq struct {
|
||||||
|
Type NetRPCReqType
|
||||||
|
ID uint64
|
||||||
|
|
||||||
|
Cid []cid.Cid // todo maxsize?
|
||||||
|
Data [][]byte // todo maxsize?
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetRpcResp struct {
|
||||||
|
Type NetRPCRespType
|
||||||
|
ID uint64
|
||||||
|
|
||||||
|
// error or cids in allkeys
|
||||||
|
Data []byte // todo maxsize?
|
||||||
|
|
||||||
|
next <-chan NetRpcResp
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetRpcErr struct {
|
||||||
|
Type NetRPCErrType
|
||||||
|
|
||||||
|
Msg string
|
||||||
|
|
||||||
|
// in case of NRpcErrNotFound
|
||||||
|
Cid *cid.Cid
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetworkStore struct {
|
||||||
|
// note: writer is thread-safe
|
||||||
|
msgStream msgio.ReadWriteCloser
|
||||||
|
|
||||||
|
// atomic
|
||||||
|
reqCount uint64
|
||||||
|
|
||||||
|
respLk sync.Mutex
|
||||||
|
|
||||||
|
// respMap is nil after store closes
|
||||||
|
respMap map[uint64]chan<- NetRpcResp
|
||||||
|
|
||||||
|
closing chan struct{}
|
||||||
|
closed chan struct{}
|
||||||
|
|
||||||
|
closeLk sync.Mutex
|
||||||
|
onClose []func()
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNetworkStore(mss msgio.ReadWriteCloser) *NetworkStore {
|
||||||
|
ns := &NetworkStore{
|
||||||
|
msgStream: mss,
|
||||||
|
|
||||||
|
respMap: map[uint64]chan<- NetRpcResp{},
|
||||||
|
|
||||||
|
closing: make(chan struct{}),
|
||||||
|
closed: make(chan struct{}),
|
||||||
|
}
|
||||||
|
|
||||||
|
go ns.receive()
|
||||||
|
|
||||||
|
return ns
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) shutdown(msg string) {
|
||||||
|
if err := n.msgStream.Close(); err != nil {
|
||||||
|
log.Errorw("closing netstore msg stream", "error", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
nerr := NetRpcErr{
|
||||||
|
Type: NRpcErrGeneric,
|
||||||
|
Msg: msg,
|
||||||
|
Cid: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
var errb bytes.Buffer
|
||||||
|
if err := nerr.MarshalCBOR(&errb); err != nil {
|
||||||
|
log.Errorw("netstore shutdown: error marshaling error", "err", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
for id, resps := range n.respMap {
|
||||||
|
resps <- NetRpcResp{
|
||||||
|
Type: NRpcErr,
|
||||||
|
ID: id,
|
||||||
|
Data: errb.Bytes(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
n.respMap = nil
|
||||||
|
|
||||||
|
n.respLk.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) OnClose(cb func()) {
|
||||||
|
n.closeLk.Lock()
|
||||||
|
defer n.closeLk.Unlock()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-n.closed:
|
||||||
|
cb()
|
||||||
|
default:
|
||||||
|
n.onClose = append(n.onClose, cb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) receive() {
|
||||||
|
defer func() {
|
||||||
|
n.closeLk.Lock()
|
||||||
|
defer n.closeLk.Unlock()
|
||||||
|
|
||||||
|
close(n.closed)
|
||||||
|
if n.onClose != nil {
|
||||||
|
for _, f := range n.onClose {
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-n.closing:
|
||||||
|
n.shutdown("netstore stopping")
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := n.msgStream.ReadMsg()
|
||||||
|
if err != nil {
|
||||||
|
n.shutdown(fmt.Sprintf("netstore ReadMsg: %s", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp NetRpcResp
|
||||||
|
if err := resp.UnmarshalCBOR(bytes.NewReader(msg)); err != nil {
|
||||||
|
n.shutdown(fmt.Sprintf("unmarshaling netstore response: %s", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
n.msgStream.ReleaseMsg(msg)
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
if ch, ok := n.respMap[resp.ID]; ok {
|
||||||
|
if resp.Type == NRpcMore {
|
||||||
|
nch := make(chan NetRpcResp, 1)
|
||||||
|
resp.next = nch
|
||||||
|
n.respMap[resp.ID] = nch
|
||||||
|
} else {
|
||||||
|
delete(n.respMap, resp.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
ch <- resp
|
||||||
|
}
|
||||||
|
n.respLk.Unlock()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) sendRpc(rt NetRPCReqType, cids []cid.Cid, data [][]byte) (uint64, <-chan NetRpcResp, error) {
|
||||||
|
rid := atomic.AddUint64(&n.reqCount, 1)
|
||||||
|
|
||||||
|
respCh := make(chan NetRpcResp, 1) // todo pool?
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
if n.respMap == nil {
|
||||||
|
n.respLk.Unlock()
|
||||||
|
return 0, nil, xerrors.Errorf("netstore closed")
|
||||||
|
}
|
||||||
|
n.respMap[rid] = respCh
|
||||||
|
n.respLk.Unlock()
|
||||||
|
|
||||||
|
req := NetRpcReq{
|
||||||
|
Type: rt,
|
||||||
|
ID: rid,
|
||||||
|
Cid: cids,
|
||||||
|
Data: data,
|
||||||
|
}
|
||||||
|
|
||||||
|
var rbuf bytes.Buffer // todo buffer pool
|
||||||
|
if err := req.MarshalCBOR(&rbuf); err != nil {
|
||||||
|
n.respLk.Lock()
|
||||||
|
defer n.respLk.Unlock()
|
||||||
|
|
||||||
|
if n.respMap == nil {
|
||||||
|
return 0, nil, xerrors.Errorf("netstore closed")
|
||||||
|
}
|
||||||
|
delete(n.respMap, rid)
|
||||||
|
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := n.msgStream.WriteMsg(rbuf.Bytes()); err != nil {
|
||||||
|
n.respLk.Lock()
|
||||||
|
defer n.respLk.Unlock()
|
||||||
|
|
||||||
|
if n.respMap == nil {
|
||||||
|
return 0, nil, xerrors.Errorf("netstore closed")
|
||||||
|
}
|
||||||
|
delete(n.respMap, rid)
|
||||||
|
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return rid, respCh, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) waitResp(ctx context.Context, rch <-chan NetRpcResp, rid uint64) (NetRpcResp, error) {
|
||||||
|
select {
|
||||||
|
case resp := <-rch:
|
||||||
|
if resp.Type == NRpcErr {
|
||||||
|
var e NetRpcErr
|
||||||
|
if err := e.UnmarshalCBOR(bytes.NewReader(resp.Data)); err != nil {
|
||||||
|
return NetRpcResp{}, xerrors.Errorf("unmarshaling error data: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
switch e.Type {
|
||||||
|
case NRpcErrNotFound:
|
||||||
|
if e.Cid != nil {
|
||||||
|
err = ipld.ErrNotFound{
|
||||||
|
Cid: *e.Cid,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = xerrors.Errorf("block not found, but cid was null")
|
||||||
|
}
|
||||||
|
case NRpcErrGeneric:
|
||||||
|
err = xerrors.Errorf("generic error")
|
||||||
|
default:
|
||||||
|
err = xerrors.Errorf("unknown error type")
|
||||||
|
}
|
||||||
|
|
||||||
|
return NetRpcResp{}, xerrors.Errorf("netstore error response: %s (%w)", e.Msg, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
case <-ctx.Done():
|
||||||
|
// todo send cancel req
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
if n.respMap != nil {
|
||||||
|
delete(n.respMap, rid)
|
||||||
|
}
|
||||||
|
n.respLk.Unlock()
|
||||||
|
|
||||||
|
return NetRpcResp{}, ctx.Err()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Has(ctx context.Context, c cid.Cid) (bool, error) {
|
||||||
|
req, rch, err := n.sendRpc(NRpcHas, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.Data) != 1 {
|
||||||
|
return false, xerrors.Errorf("expected reposnse length to be 1 byte")
|
||||||
|
}
|
||||||
|
switch resp.Data[0] {
|
||||||
|
case cbg.CborBoolTrue[0]:
|
||||||
|
return true, nil
|
||||||
|
case cbg.CborBoolFalse[0]:
|
||||||
|
return false, nil
|
||||||
|
default:
|
||||||
|
return false, xerrors.Errorf("has: bad response: %x", resp.Data[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Get(ctx context.Context, c cid.Cid) (blocks.Block, error) {
|
||||||
|
req, rch, err := n.sendRpc(NRpcGet, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return blocks.NewBlockWithCid(resp.Data, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) View(ctx context.Context, c cid.Cid, callback func([]byte) error) error {
|
||||||
|
req, rch, err := n.sendRpc(NRpcGet, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback(resp.Data) // todo return buf to pool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) GetSize(ctx context.Context, c cid.Cid) (int, error) {
|
||||||
|
req, rch, err := n.sendRpc(NRpcGetSize, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.Data) != 4 {
|
||||||
|
return 0, xerrors.Errorf("expected getsize response to be 4 bytes, was %d", resp.Data)
|
||||||
|
}
|
||||||
|
|
||||||
|
return int(binary.LittleEndian.Uint32(resp.Data)), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Put(ctx context.Context, block blocks.Block) error {
|
||||||
|
return n.PutMany(ctx, []blocks.Block{block})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) PutMany(ctx context.Context, blocks []blocks.Block) error {
|
||||||
|
// todo pool
|
||||||
|
cids := make([]cid.Cid, len(blocks))
|
||||||
|
blkDatas := make([][]byte, len(blocks))
|
||||||
|
for i, block := range blocks {
|
||||||
|
cids[i] = block.Cid()
|
||||||
|
blkDatas[i] = block.RawData()
|
||||||
|
}
|
||||||
|
|
||||||
|
req, rch, err := n.sendRpc(NRpcPut, cids, blkDatas)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) DeleteBlock(ctx context.Context, c cid.Cid) error {
|
||||||
|
return n.DeleteMany(ctx, []cid.Cid{c})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) DeleteMany(ctx context.Context, cids []cid.Cid) error {
|
||||||
|
req, rch, err := n.sendRpc(NRpcDelete, cids, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
|
||||||
|
return nil, xerrors.Errorf("not supported")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) HashOnRead(enabled bool) {
|
||||||
|
// todo
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Stop(ctx context.Context) error {
|
||||||
|
close(n.closing)
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-n.closed:
|
||||||
|
return nil
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ Blockstore = &NetworkStore{}
|
237
blockstore/net_serve.go
Normal file
237
blockstore/net_serve.go
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/binary"
|
||||||
|
|
||||||
|
block "github.com/ipfs/go-block-format"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetworkStoreHandler struct {
|
||||||
|
msgStream msgio.ReadWriteCloser
|
||||||
|
|
||||||
|
bs Blockstore
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: This code isn't yet hardened to accept untrusted input. See TODOs here and in net.go
|
||||||
|
func HandleNetBstoreStream(ctx context.Context, bs Blockstore, mss msgio.ReadWriteCloser) *NetworkStoreHandler {
|
||||||
|
ns := &NetworkStoreHandler{
|
||||||
|
msgStream: mss,
|
||||||
|
bs: bs,
|
||||||
|
}
|
||||||
|
|
||||||
|
go ns.handle(ctx)
|
||||||
|
|
||||||
|
return ns
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *NetworkStoreHandler) handle(ctx context.Context) {
|
||||||
|
defer func() {
|
||||||
|
if err := h.msgStream.Close(); err != nil {
|
||||||
|
log.Errorw("error closing blockstore stream", "error", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for {
|
||||||
|
var req NetRpcReq
|
||||||
|
|
||||||
|
ms, err := h.msgStream.ReadMsg()
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("bstore stream err", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := req.UnmarshalCBOR(bytes.NewReader(ms)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
h.msgStream.ReleaseMsg(ms)
|
||||||
|
|
||||||
|
switch req.Type {
|
||||||
|
case NRpcHas:
|
||||||
|
if len(req.Cid) != 1 {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("expected request for 1 cid"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := h.bs.Has(ctx, req.Cid[0])
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, req.Cid[0]); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var resData [1]byte
|
||||||
|
if res {
|
||||||
|
resData[0] = cbg.CborBoolTrue[0]
|
||||||
|
} else {
|
||||||
|
resData[0] = cbg.CborBoolFalse[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, resData[:]); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
case NRpcGet:
|
||||||
|
if len(req.Cid) != 1 {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("expected request for 1 cid"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
err := h.bs.View(ctx, req.Cid[0], func(bdata []byte) error {
|
||||||
|
return h.respond(req.ID, NRpcOK, bdata)
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, req.Cid[0]); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
case NRpcGetSize:
|
||||||
|
if len(req.Cid) != 1 {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("expected request for 1 cid"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
sz, err := h.bs.GetSize(ctx, req.Cid[0])
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, req.Cid[0]); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var resData [4]byte
|
||||||
|
binary.LittleEndian.PutUint32(resData[:], uint32(sz))
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, resData[:]); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
case NRpcPut:
|
||||||
|
blocks := make([]block.Block, len(req.Cid))
|
||||||
|
|
||||||
|
if len(req.Cid) != len(req.Data) {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("cid count didn't match data count"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range req.Cid {
|
||||||
|
blocks[i], err = block.NewBlockWithCid(req.Data[i], req.Cid[i])
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("make block", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err := h.bs.PutMany(ctx, blocks)
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, []byte{}); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case NRpcDelete:
|
||||||
|
err := h.bs.DeleteMany(ctx, req.Cid)
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, []byte{}); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("unsupported request type"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *NetworkStoreHandler) respondError(req uint64, uerr error, c cid.Cid) error {
|
||||||
|
var resp NetRpcResp
|
||||||
|
resp.ID = req
|
||||||
|
resp.Type = NRpcErr
|
||||||
|
|
||||||
|
nerr := NetRpcErr{
|
||||||
|
Type: NRpcErrGeneric,
|
||||||
|
Msg: uerr.Error(),
|
||||||
|
}
|
||||||
|
if ipld.IsNotFound(uerr) {
|
||||||
|
nerr.Type = NRpcErrNotFound
|
||||||
|
nerr.Cid = &c
|
||||||
|
}
|
||||||
|
|
||||||
|
var edata bytes.Buffer
|
||||||
|
if err := nerr.MarshalCBOR(&edata); err != nil {
|
||||||
|
return xerrors.Errorf("marshaling error data: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Data = edata.Bytes()
|
||||||
|
|
||||||
|
var msg bytes.Buffer
|
||||||
|
if err := resp.MarshalCBOR(&msg); err != nil {
|
||||||
|
return xerrors.Errorf("marshaling error response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.msgStream.WriteMsg(msg.Bytes()); err != nil {
|
||||||
|
return xerrors.Errorf("write error response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *NetworkStoreHandler) respond(req uint64, rt NetRPCRespType, data []byte) error {
|
||||||
|
var resp NetRpcResp
|
||||||
|
resp.ID = req
|
||||||
|
resp.Type = rt
|
||||||
|
resp.Data = data
|
||||||
|
|
||||||
|
var msg bytes.Buffer
|
||||||
|
if err := resp.MarshalCBOR(&msg); err != nil {
|
||||||
|
return xerrors.Errorf("marshaling response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.msgStream.WriteMsg(msg.Bytes()); err != nil {
|
||||||
|
return xerrors.Errorf("write response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
63
blockstore/net_test.go
Normal file
63
blockstore/net_test.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
block "github.com/ipfs/go-block-format"
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNetBstore(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
cr, sw := io.Pipe()
|
||||||
|
sr, cw := io.Pipe()
|
||||||
|
|
||||||
|
cm := msgio.Combine(msgio.NewWriter(cw), msgio.NewReader(cr))
|
||||||
|
sm := msgio.Combine(msgio.NewWriter(sw), msgio.NewReader(sr))
|
||||||
|
|
||||||
|
bbs := NewMemorySync()
|
||||||
|
_ = HandleNetBstoreStream(ctx, bbs, sm)
|
||||||
|
|
||||||
|
nbs := NewNetworkStore(cm)
|
||||||
|
|
||||||
|
tb1 := block.NewBlock([]byte("aoeu"))
|
||||||
|
|
||||||
|
h, err := nbs.Has(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.False(t, h)
|
||||||
|
|
||||||
|
err = nbs.Put(ctx, tb1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
h, err = nbs.Has(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.True(t, h)
|
||||||
|
|
||||||
|
sz, err := nbs.GetSize(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 4, sz)
|
||||||
|
|
||||||
|
err = nbs.DeleteBlock(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
h, err = nbs.Has(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.False(t, h)
|
||||||
|
|
||||||
|
_, err = nbs.Get(ctx, tb1.Cid())
|
||||||
|
fmt.Println(err)
|
||||||
|
require.True(t, ipld.IsNotFound(err))
|
||||||
|
|
||||||
|
err = nbs.Put(ctx, tb1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
b, err := nbs.Get(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "aoeu", string(b.RawData()))
|
||||||
|
}
|
100
blockstore/net_ws.go
Normal file
100
blockstore/net_ws.go
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type wsWrapper struct {
|
||||||
|
wc *websocket.Conn
|
||||||
|
|
||||||
|
nextMsg []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) Read(b []byte) (int, error) {
|
||||||
|
return 0, xerrors.New("read unsupported")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) ReadMsg() ([]byte, error) {
|
||||||
|
if w.nextMsg != nil {
|
||||||
|
nm := w.nextMsg
|
||||||
|
w.nextMsg = nil
|
||||||
|
return nm, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mt, r, err := w.wc.NextReader()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch mt {
|
||||||
|
case websocket.BinaryMessage, websocket.TextMessage:
|
||||||
|
default:
|
||||||
|
return nil, xerrors.Errorf("unexpected message type")
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo pool
|
||||||
|
// todo limit sizes
|
||||||
|
var mbuf bytes.Buffer
|
||||||
|
if _, err := mbuf.ReadFrom(r); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return mbuf.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) ReleaseMsg(bytes []byte) {
|
||||||
|
// todo use a pool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) NextMsgLen() (int, error) {
|
||||||
|
if w.nextMsg != nil {
|
||||||
|
return len(w.nextMsg), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mt, msg, err := w.wc.ReadMessage()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch mt {
|
||||||
|
case websocket.BinaryMessage, websocket.TextMessage:
|
||||||
|
default:
|
||||||
|
return 0, xerrors.Errorf("unexpected message type")
|
||||||
|
}
|
||||||
|
|
||||||
|
w.nextMsg = msg
|
||||||
|
return len(w.nextMsg), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) Write(bytes []byte) (int, error) {
|
||||||
|
return 0, xerrors.New("write unsupported")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) WriteMsg(bytes []byte) error {
|
||||||
|
return w.wc.WriteMessage(websocket.BinaryMessage, bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) Close() error {
|
||||||
|
return w.wc.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ msgio.ReadWriteCloser = &wsWrapper{}
|
||||||
|
|
||||||
|
func wsConnToMio(wc *websocket.Conn) msgio.ReadWriteCloser {
|
||||||
|
return &wsWrapper{
|
||||||
|
wc: wc,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func HandleNetBstoreWS(ctx context.Context, bs Blockstore, wc *websocket.Conn) *NetworkStoreHandler {
|
||||||
|
return HandleNetBstoreStream(ctx, bs, wsConnToMio(wc))
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNetworkStoreWS(wc *websocket.Conn) *NetworkStore {
|
||||||
|
return NewNetworkStore(wsConnToMio(wc))
|
||||||
|
}
|
@ -98,6 +98,10 @@ type Config struct {
|
|||||||
// and directly purges cold blocks.
|
// and directly purges cold blocks.
|
||||||
DiscardColdBlocks bool
|
DiscardColdBlocks bool
|
||||||
|
|
||||||
|
// UniversalColdBlocks indicates whether all blocks being garbage collected and purged
|
||||||
|
// from the hotstore should be written to the cold store
|
||||||
|
UniversalColdBlocks bool
|
||||||
|
|
||||||
// HotstoreMessageRetention indicates the hotstore retention policy for messages.
|
// HotstoreMessageRetention indicates the hotstore retention policy for messages.
|
||||||
// It has the following semantics:
|
// It has the following semantics:
|
||||||
// - a value of 0 will only retain messages within the compaction boundary (4 finalities)
|
// - a value of 0 will only retain messages within the compaction boundary (4 finalities)
|
||||||
@ -111,21 +115,6 @@ type Config struct {
|
|||||||
// A positive value is the number of compactions before a full GC is performed;
|
// A positive value is the number of compactions before a full GC is performed;
|
||||||
// a value of 1 will perform full GC in every compaction.
|
// a value of 1 will perform full GC in every compaction.
|
||||||
HotStoreFullGCFrequency uint64
|
HotStoreFullGCFrequency uint64
|
||||||
|
|
||||||
// EnableColdStoreAutoPrune turns on compaction of the cold store i.e. pruning
|
|
||||||
// where hotstore compaction occurs every finality epochs pruning happens every 3 finalities
|
|
||||||
// Default is false
|
|
||||||
EnableColdStoreAutoPrune bool
|
|
||||||
|
|
||||||
// ColdStoreFullGCFrequency specifies how often to performa a full (moving) GC on the coldstore.
|
|
||||||
// Only applies if auto prune is enabled. A value of 0 disables while a value of 1 will do
|
|
||||||
// full GC in every prune.
|
|
||||||
// Default is 7 (about once every a week)
|
|
||||||
ColdStoreFullGCFrequency uint64
|
|
||||||
|
|
||||||
// ColdStoreRetention specifies the retention policy for data reachable from the chain, in
|
|
||||||
// finalities beyond the compaction boundary, default is 0, -1 retains everything
|
|
||||||
ColdStoreRetention int64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChainAccessor allows the Splitstore to access the chain. It will most likely
|
// ChainAccessor allows the Splitstore to access the chain. It will most likely
|
||||||
|
@ -125,7 +125,7 @@ func (s *SplitStore) doCheck(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
}, func(cid.Cid) error { return nil })
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = xerrors.Errorf("error walking chain: %w", err)
|
err = xerrors.Errorf("error walking chain: %w", err)
|
||||||
|
@ -20,7 +20,6 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
|
||||||
bstore "github.com/filecoin-project/lotus/blockstore"
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/metrics"
|
"github.com/filecoin-project/lotus/metrics"
|
||||||
@ -134,39 +133,6 @@ func (s *SplitStore) HeadChange(_, apply []*types.TipSet) error {
|
|||||||
log.Infow("compaction done", "took", time.Since(start))
|
log.Infow("compaction done", "took", time.Since(start))
|
||||||
}()
|
}()
|
||||||
// only prune if auto prune is enabled and after at least one compaction
|
// only prune if auto prune is enabled and after at least one compaction
|
||||||
} else if s.cfg.EnableColdStoreAutoPrune && epoch-s.pruneEpoch > PruneThreshold && s.compactionIndex > 0 {
|
|
||||||
s.beginTxnProtect()
|
|
||||||
s.compactType = cold
|
|
||||||
go func() {
|
|
||||||
defer atomic.StoreInt32(&s.compacting, 0)
|
|
||||||
defer s.endTxnProtect()
|
|
||||||
|
|
||||||
log.Info("pruning splitstore")
|
|
||||||
start := time.Now()
|
|
||||||
|
|
||||||
var retainP func(int64) bool
|
|
||||||
switch {
|
|
||||||
case s.cfg.ColdStoreRetention > int64(0):
|
|
||||||
retainP = func(depth int64) bool {
|
|
||||||
return depth <= int64(CompactionBoundary)+s.cfg.ColdStoreRetention*int64(build.Finality)
|
|
||||||
}
|
|
||||||
case s.cfg.ColdStoreRetention < 0:
|
|
||||||
retainP = func(_ int64) bool { return true }
|
|
||||||
default:
|
|
||||||
retainP = func(depth int64) bool {
|
|
||||||
return depth <= int64(CompactionBoundary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
movingGC := s.cfg.ColdStoreFullGCFrequency > 0 && s.pruneIndex%int64(s.cfg.ColdStoreFullGCFrequency) == 0
|
|
||||||
var gcOpts []bstore.BlockstoreGCOption
|
|
||||||
if movingGC {
|
|
||||||
gcOpts = append(gcOpts, bstore.WithFullGC(true))
|
|
||||||
}
|
|
||||||
doGC := func() error { return s.gcBlockstore(s.cold, gcOpts) }
|
|
||||||
|
|
||||||
s.prune(curTs, retainP, doGC)
|
|
||||||
log.Infow("prune done", "took", time.Since(start))
|
|
||||||
}()
|
|
||||||
} else {
|
} else {
|
||||||
// no compaction necessary
|
// no compaction necessary
|
||||||
atomic.StoreInt32(&s.compacting, 0)
|
atomic.StoreInt32(&s.compacting, 0)
|
||||||
@ -562,6 +528,12 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
defer markSet.Close() //nolint:errcheck
|
defer markSet.Close() //nolint:errcheck
|
||||||
defer s.debug.Flush()
|
defer s.debug.Flush()
|
||||||
|
|
||||||
|
coldSet, err := s.markSetEnv.New("cold", s.markSetSize)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error creating cold mark set: %w", err)
|
||||||
|
}
|
||||||
|
defer coldSet.Close() //nolint:errcheck
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkClosing(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -580,24 +552,52 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
startMark := time.Now()
|
startMark := time.Now()
|
||||||
|
|
||||||
count := new(int64)
|
count := new(int64)
|
||||||
err = s.walkChain(curTs, boundaryEpoch, inclMsgsEpoch, &noopVisitor{},
|
|
||||||
func(c cid.Cid) error {
|
|
||||||
if isUnitaryObject(c) {
|
|
||||||
return errStopWalk
|
|
||||||
}
|
|
||||||
|
|
||||||
visit, err := markSet.Visit(c)
|
coldCount := new(int64)
|
||||||
if err != nil {
|
fCold := func(c cid.Cid) error {
|
||||||
return xerrors.Errorf("error visiting object: %w", err)
|
// Writes to cold set optimized away in universal and discard mode
|
||||||
}
|
//
|
||||||
|
// Nothing gets written to cold store in discard mode so no cold objects to write
|
||||||
if !visit {
|
// Everything not marked hot gets written to cold store in universal mode so no need to track cold objects separately
|
||||||
return errStopWalk
|
if s.cfg.DiscardColdBlocks || s.cfg.UniversalColdBlocks {
|
||||||
}
|
|
||||||
|
|
||||||
atomic.AddInt64(count, 1)
|
|
||||||
return nil
|
return nil
|
||||||
})
|
}
|
||||||
|
|
||||||
|
if isUnitaryObject(c) {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
visit, err := coldSet.Visit(c)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error visiting object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !visit {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic.AddInt64(coldCount, 1)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
fHot := func(c cid.Cid) error {
|
||||||
|
if isUnitaryObject(c) {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
visit, err := markSet.Visit(c)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error visiting object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !visit {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic.AddInt64(count, 1)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.walkChain(curTs, boundaryEpoch, inclMsgsEpoch, &noopVisitor{}, fHot, fCold)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error marking: %w", err)
|
return xerrors.Errorf("error marking: %w", err)
|
||||||
@ -631,8 +631,14 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
defer coldw.Close() //nolint:errcheck
|
defer coldw.Close() //nolint:errcheck
|
||||||
|
|
||||||
|
purgew, err := NewColdSetWriter(s.discardSetPath())
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error creating deadset: %w", err)
|
||||||
|
}
|
||||||
|
defer purgew.Close() //nolint:errcheck
|
||||||
|
|
||||||
// some stats for logging
|
// some stats for logging
|
||||||
var hotCnt, coldCnt int
|
var hotCnt, coldCnt, purgeCnt int
|
||||||
err = s.hot.ForEachKey(func(c cid.Cid) error {
|
err = s.hot.ForEachKey(func(c cid.Cid) error {
|
||||||
// was it marked?
|
// was it marked?
|
||||||
mark, err := markSet.Has(c)
|
mark, err := markSet.Has(c)
|
||||||
@ -645,9 +651,27 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// it's cold, mark it as candidate for move
|
// it needs to be removed from hot store, mark it as candidate for purge
|
||||||
|
if err := purgew.Write(c); err != nil {
|
||||||
|
return xerrors.Errorf("error writing cid to purge set: %w", err)
|
||||||
|
}
|
||||||
|
purgeCnt++
|
||||||
|
|
||||||
|
coldMark, err := coldSet.Has(c)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error checking cold mark set for %s: %w", c, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Discard mode: coldMark == false, s.cfg.UniversalColdBlocks == false, always return here, no writes to cold store
|
||||||
|
// Universal mode: coldMark == false, s.cfg.UniversalColdBlocks == true, never stop here, all writes to cold store
|
||||||
|
// Otherwise: s.cfg.UniversalColdBlocks == false, if !coldMark stop here and don't write to cold store, if coldMark continue and write to cold store
|
||||||
|
if !coldMark && !s.cfg.UniversalColdBlocks { // universal mode means mark everything as cold
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// it's cold, mark as candidate for move
|
||||||
if err := coldw.Write(c); err != nil {
|
if err := coldw.Write(c); err != nil {
|
||||||
return xerrors.Errorf("error writing cid to coldstore: %w", err)
|
return xerrors.Errorf("error writing cid to cold set")
|
||||||
}
|
}
|
||||||
coldCnt++
|
coldCnt++
|
||||||
|
|
||||||
@ -656,7 +680,9 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error collecting cold objects: %w", err)
|
return xerrors.Errorf("error collecting cold objects: %w", err)
|
||||||
}
|
}
|
||||||
|
if err := purgew.Close(); err != nil {
|
||||||
|
return xerrors.Errorf("erroring closing purgeset: %w", err)
|
||||||
|
}
|
||||||
if err := coldw.Close(); err != nil {
|
if err := coldw.Close(); err != nil {
|
||||||
return xerrors.Errorf("error closing coldset: %w", err)
|
return xerrors.Errorf("error closing coldset: %w", err)
|
||||||
}
|
}
|
||||||
@ -705,6 +731,12 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
purger, err := NewColdSetReader(s.discardSetPath())
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error opening coldset: %w", err)
|
||||||
|
}
|
||||||
|
defer purger.Close() //nolint:errcheck
|
||||||
|
|
||||||
// 4. Purge cold objects with checkpointing for recovery.
|
// 4. Purge cold objects with checkpointing for recovery.
|
||||||
// This is the critical section of compaction, whereby any cold object not in the markSet is
|
// This is the critical section of compaction, whereby any cold object not in the markSet is
|
||||||
// considered already deleted.
|
// considered already deleted.
|
||||||
@ -736,7 +768,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
// 5. purge cold objects from the hotstore, taking protected references into account
|
// 5. purge cold objects from the hotstore, taking protected references into account
|
||||||
log.Info("purging cold objects from the hotstore")
|
log.Info("purging cold objects from the hotstore")
|
||||||
startPurge := time.Now()
|
startPurge := time.Now()
|
||||||
err = s.purge(coldr, checkpoint, markSet)
|
err = s.purge(purger, checkpoint, markSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error purging cold objects: %w", err)
|
return xerrors.Errorf("error purging cold objects: %w", err)
|
||||||
}
|
}
|
||||||
@ -864,7 +896,7 @@ func (s *SplitStore) endCriticalSection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEpoch,
|
func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEpoch,
|
||||||
visitor ObjectVisitor, f func(cid.Cid) error) error {
|
visitor ObjectVisitor, fHot, fCold func(cid.Cid) error) error {
|
||||||
var walked ObjectVisitor
|
var walked ObjectVisitor
|
||||||
var mx sync.Mutex
|
var mx sync.Mutex
|
||||||
// we copy the tipset first into a new slice, which allows us to reuse it in every epoch.
|
// we copy the tipset first into a new slice, which allows us to reuse it in every epoch.
|
||||||
@ -886,7 +918,7 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
|
|
||||||
atomic.AddInt64(walkCnt, 1)
|
atomic.AddInt64(walkCnt, 1)
|
||||||
|
|
||||||
if err := f(c); err != nil {
|
if err := fHot(c); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -904,27 +936,37 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
if inclMsgs < inclState {
|
if inclMsgs < inclState {
|
||||||
// we need to use walkObjectIncomplete here, as messages/receipts may be missing early on if we
|
// we need to use walkObjectIncomplete here, as messages/receipts may be missing early on if we
|
||||||
// synced from snapshot and have a long HotStoreMessageRetentionPolicy.
|
// synced from snapshot and have a long HotStoreMessageRetentionPolicy.
|
||||||
if err := s.walkObjectIncomplete(hdr.Messages, visitor, f, stopWalk); err != nil {
|
if err := s.walkObjectIncomplete(hdr.Messages, visitor, fHot, stopWalk); err != nil {
|
||||||
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, f, stopWalk); err != nil {
|
if err := s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, fHot, stopWalk); err != nil {
|
||||||
return xerrors.Errorf("error walking messages receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
return xerrors.Errorf("error walking messages receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := s.walkObject(hdr.Messages, visitor, f); err != nil {
|
if err := s.walkObject(hdr.Messages, visitor, fHot); err != nil {
|
||||||
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.walkObject(hdr.ParentMessageReceipts, visitor, f); err != nil {
|
if err := s.walkObject(hdr.ParentMessageReceipts, visitor, fHot); err != nil {
|
||||||
return xerrors.Errorf("error walking message receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
return xerrors.Errorf("error walking message receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// messages and receipts outside of inclMsgs are included in the cold store
|
||||||
|
if hdr.Height < inclMsgs && hdr.Height > 0 {
|
||||||
|
if err := s.walkObjectIncomplete(hdr.Messages, visitor, fCold, stopWalk); err != nil {
|
||||||
|
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
||||||
|
}
|
||||||
|
if err := s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, fCold, stopWalk); err != nil {
|
||||||
|
return xerrors.Errorf("error walking messages receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// state is only retained if within the inclState boundary, with the exception of genesis
|
// state is only retained if within the inclState boundary, with the exception of genesis
|
||||||
if hdr.Height >= inclState || hdr.Height == 0 {
|
if hdr.Height >= inclState || hdr.Height == 0 {
|
||||||
if err := s.walkObject(hdr.ParentStateRoot, visitor, f); err != nil {
|
if err := s.walkObject(hdr.ParentStateRoot, visitor, fHot); err != nil {
|
||||||
return xerrors.Errorf("error walking state root (cid: %s): %w", hdr.ParentStateRoot, err)
|
return xerrors.Errorf("error walking state root (cid: %s): %w", hdr.ParentStateRoot, err)
|
||||||
}
|
}
|
||||||
atomic.AddInt64(scanCnt, 1)
|
atomic.AddInt64(scanCnt, 1)
|
||||||
@ -1296,7 +1338,7 @@ func (s *SplitStore) coldSetPath() string {
|
|||||||
return filepath.Join(s.path, "coldset")
|
return filepath.Join(s.path, "coldset")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) deadSetPath() string {
|
func (s *SplitStore) discardSetPath() string {
|
||||||
return filepath.Join(s.path, "deadset")
|
return filepath.Join(s.path, "deadset")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
log.Info("collecting dead objects")
|
log.Info("collecting dead objects")
|
||||||
startCollect := time.Now()
|
startCollect := time.Now()
|
||||||
|
|
||||||
deadw, err := NewColdSetWriter(s.deadSetPath())
|
deadw, err := NewColdSetWriter(s.discardSetPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error creating coldset: %w", err)
|
return xerrors.Errorf("error creating coldset: %w", err)
|
||||||
}
|
}
|
||||||
@ -267,7 +267,7 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
deadr, err := NewColdSetReader(s.deadSetPath())
|
deadr, err := NewColdSetReader(s.discardSetPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error opening deadset: %w", err)
|
return xerrors.Errorf("error opening deadset: %w", err)
|
||||||
}
|
}
|
||||||
@ -311,10 +311,10 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
log.Warnf("error removing checkpoint: %s", err)
|
log.Warnf("error removing checkpoint: %s", err)
|
||||||
}
|
}
|
||||||
if err := deadr.Close(); err != nil {
|
if err := deadr.Close(); err != nil {
|
||||||
log.Warnf("error closing deadset: %s", err)
|
log.Warnf("error closing discard set: %s", err)
|
||||||
}
|
}
|
||||||
if err := os.Remove(s.deadSetPath()); err != nil {
|
if err := os.Remove(s.discardSetPath()); err != nil {
|
||||||
log.Warnf("error removing deadset: %s", err)
|
log.Warnf("error removing discard set: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// we are done; do some housekeeping
|
// we are done; do some housekeeping
|
||||||
@ -344,7 +344,7 @@ func (s *SplitStore) completePrune() error {
|
|||||||
}
|
}
|
||||||
defer checkpoint.Close() //nolint:errcheck
|
defer checkpoint.Close() //nolint:errcheck
|
||||||
|
|
||||||
deadr, err := NewColdSetReader(s.deadSetPath())
|
deadr, err := NewColdSetReader(s.discardSetPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error opening deadset: %w", err)
|
return xerrors.Errorf("error opening deadset: %w", err)
|
||||||
}
|
}
|
||||||
@ -378,7 +378,7 @@ func (s *SplitStore) completePrune() error {
|
|||||||
if err := deadr.Close(); err != nil {
|
if err := deadr.Close(); err != nil {
|
||||||
log.Warnf("error closing deadset: %s", err)
|
log.Warnf("error closing deadset: %s", err)
|
||||||
}
|
}
|
||||||
if err := os.Remove(s.deadSetPath()); err != nil {
|
if err := os.Remove(s.discardSetPath()); err != nil {
|
||||||
log.Warnf("error removing deadset: %s", err)
|
log.Warnf("error removing deadset: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ func init() {
|
|||||||
func testSplitStore(t *testing.T, cfg *Config) {
|
func testSplitStore(t *testing.T, cfg *Config) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
chain := &mockChain{t: t}
|
chain := &mockChain{t: t}
|
||||||
|
fmt.Printf("Config: %v\n", cfg)
|
||||||
|
|
||||||
// the myriads of stores
|
// the myriads of stores
|
||||||
ds := dssync.MutexWrap(datastore.NewMapDatastore())
|
ds := dssync.MutexWrap(datastore.NewMapDatastore())
|
||||||
@ -225,7 +226,7 @@ func TestSplitStoreCompaction(t *testing.T) {
|
|||||||
//stm: @SPLITSTORE_SPLITSTORE_OPEN_001, @SPLITSTORE_SPLITSTORE_CLOSE_001
|
//stm: @SPLITSTORE_SPLITSTORE_OPEN_001, @SPLITSTORE_SPLITSTORE_CLOSE_001
|
||||||
//stm: @SPLITSTORE_SPLITSTORE_PUT_001, @SPLITSTORE_SPLITSTORE_ADD_PROTECTOR_001
|
//stm: @SPLITSTORE_SPLITSTORE_PUT_001, @SPLITSTORE_SPLITSTORE_ADD_PROTECTOR_001
|
||||||
//stm: @SPLITSTORE_SPLITSTORE_CLOSE_001
|
//stm: @SPLITSTORE_SPLITSTORE_CLOSE_001
|
||||||
testSplitStore(t, &Config{MarkSetType: "map"})
|
testSplitStore(t, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSplitStoreCompactionWithBadger(t *testing.T) {
|
func TestSplitStoreCompactionWithBadger(t *testing.T) {
|
||||||
@ -237,7 +238,7 @@ func TestSplitStoreCompactionWithBadger(t *testing.T) {
|
|||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
badgerMarkSetBatchSize = bs
|
badgerMarkSetBatchSize = bs
|
||||||
})
|
})
|
||||||
testSplitStore(t, &Config{MarkSetType: "badger"})
|
testSplitStore(t, &Config{MarkSetType: "badger", UniversalColdBlocks: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSplitStoreSuppressCompactionNearUpgrade(t *testing.T) {
|
func TestSplitStoreSuppressCompactionNearUpgrade(t *testing.T) {
|
||||||
@ -283,7 +284,7 @@ func TestSplitStoreSuppressCompactionNearUpgrade(t *testing.T) {
|
|||||||
path := t.TempDir()
|
path := t.TempDir()
|
||||||
|
|
||||||
// open the splitstore
|
// open the splitstore
|
||||||
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -422,7 +423,7 @@ func testSplitStoreReification(t *testing.T, f func(context.Context, blockstore.
|
|||||||
|
|
||||||
path := t.TempDir()
|
path := t.TempDir()
|
||||||
|
|
||||||
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -522,7 +523,7 @@ func testSplitStoreReificationLimit(t *testing.T, f func(context.Context, blocks
|
|||||||
|
|
||||||
path := t.TempDir()
|
path := t.TempDir()
|
||||||
|
|
||||||
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ func (s *SplitStore) doWarmup(curTs *types.TipSet) error {
|
|||||||
mx.Unlock()
|
mx.Unlock()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
}, func(cid.Cid) error { return nil })
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -13,6 +13,7 @@ var (
|
|||||||
b0 = blocks.NewBlock([]byte("abc"))
|
b0 = blocks.NewBlock([]byte("abc"))
|
||||||
b1 = blocks.NewBlock([]byte("foo"))
|
b1 = blocks.NewBlock([]byte("foo"))
|
||||||
b2 = blocks.NewBlock([]byte("bar"))
|
b2 = blocks.NewBlock([]byte("bar"))
|
||||||
|
b3 = blocks.NewBlock([]byte("baz"))
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUnionBlockstore_Get(t *testing.T) {
|
func TestUnionBlockstore_Get(t *testing.T) {
|
||||||
|
Binary file not shown.
@ -1,2 +1,2 @@
|
|||||||
/dns4/bootstrap-0.butterfly.fildev.network/tcp/1347/p2p/12D3KooWHc8xB2S1wFeF9ar9bVdXoEEaBPGLqfKxVQH55c4nNmxs
|
/dns4/bootstrap-0.butterfly.fildev.network/tcp/1347/p2p/12D3KooWKeDMuJbouvypr1nL2qRruhNVXzv4QiLsZRh6gnvLkc7p
|
||||||
/dns4/bootstrap-1.butterfly.fildev.network/tcp/1347/p2p/12D3KooWPcNcwS3cKarWrN7MfANWNpzXmZA9Ag6eH9FHFdLQ3LFQ
|
/dns4/bootstrap-1.butterfly.fildev.network/tcp/1347/p2p/12D3KooWSsACNHLGoJbPqeitNY7tom19Nxq8x5ag36eTwmgcAeLo
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/dns4/bootstrap-0.calibration.fildev.network/tcp/1347/p2p/12D3KooWJkikQQkxS58spo76BYzFt4fotaT5NpV2zngvrqm4u5ow
|
/dns4/bootstrap-0.calibration.fildev.network/tcp/1347/p2p/12D3KooWCi2w8U4DDB9xqrejb5KYHaQv2iA2AJJ6uzG3iQxNLBMy
|
||||||
/dns4/bootstrap-1.calibration.fildev.network/tcp/1347/p2p/12D3KooWLce5FDHR4EX4CrYavphA5xS3uDsX6aoowXh5tzDUxJav
|
/dns4/bootstrap-1.calibration.fildev.network/tcp/1347/p2p/12D3KooWDTayrBojBn9jWNNUih4nNQQBGJD7Zo3gQCKgBkUsS6dp
|
||||||
/dns4/bootstrap-2.calibration.fildev.network/tcp/1347/p2p/12D3KooWA9hFfQG9GjP6bHeuQQbMD3FDtZLdW1NayxKXUT26PQZu
|
/dns4/bootstrap-2.calibration.fildev.network/tcp/1347/p2p/12D3KooWNRxTHUn8bf7jz1KEUPMc2dMgGfa4f8ZJTsquVSn3vHCG
|
||||||
/dns4/bootstrap-3.calibration.fildev.network/tcp/1347/p2p/12D3KooWMHDi3LVTFG8Szqogt7RkNXvonbQYqSazxBx41A5aeuVz
|
/dns4/bootstrap-3.calibration.fildev.network/tcp/1347/p2p/12D3KooWFWUqE9jgXvcKHWieYs9nhyp6NF4ftwLGAHm4sCv73jjK
|
||||||
|
@ -26,19 +26,20 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "butterflynet",
|
Network: "butterflynet",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzacebor5miojgkvov7gtiirg7hqxgm54x3hxytbho3qloqryg2r67qaq"),
|
ManifestCid: MustParseCid("bafy2bzacec35by4erhcdgcsgzp7yb3j57utydlxxfc73m3k5pep67ehvvyv6i"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacecd7kgfzbyu4sylskgf7wjqabo43y3d7xqgvz7r67pzr3ovn3sj7y"),
|
"account": MustParseCid("bafk2bzaceajsdln7v4chxqoukiw7lxw6aexg5qdsaex2hgelz2sbu24iblhzg"),
|
||||||
"cron": MustParseCid("bafk2bzacea6dc2a6skmp7saa43dcofp7zvtklvya75bai2k4k6qnkpcfzklug"),
|
"cron": MustParseCid("bafk2bzacecgrwmgnqhybn3l23uvwf2n2vrcfjrprfzgd44uxers2pgr5mhsue"),
|
||||||
"init": MustParseCid("bafk2bzacean5v7lbsspxmdkcwhac44sk332uwyfteibtxyhgoeabwbzbh736c"),
|
"datacap": MustParseCid("bafk2bzacebyier2ceh27acbrq2ccv4efvzotl6qntnlrxdsrik6i4tembz6qw"),
|
||||||
"multisig": MustParseCid("bafk2bzacea43lypvbof5kwnk2flzrwdrqqvzypom5xyheeuaab6dmuiafngae"),
|
"init": MustParseCid("bafk2bzaceberhto43wnf4pklkd4c7d36kzslngyzyms4op7shxuswv3dtvfxu"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacecsdimcgztl4tfodnqc35jojoy4mzaqqidubialqmqaa3zpv4h3rw"),
|
"multisig": MustParseCid("bafk2bzaceaclpbrhoqdruvsuqqgknvy2k5dywzmjoehk4uarce3uvt3w2rewu"),
|
||||||
"reward": MustParseCid("bafk2bzacedy3utj67mewe7rpieaex3sf7qxfkgiwtlgg4wlqyl74la65njbn2"),
|
"paymentchannel": MustParseCid("bafk2bzacedzp56g5cg73oilloak3kf7u667rdkd5pgnhe2cljmr3o7ykcrzuk"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacec4xpazf3l2p5qkknjsku2sd3skqevk7gxryumbelwhfbs7mgjnpa"),
|
"reward": MustParseCid("bafk2bzacebczbwfbbi6mvppbjcozatasjiaohvjjiqcy65ccuuyyw3xiixhk2"),
|
||||||
"storageminer": MustParseCid("bafk2bzaceb5scwcdcou56vyhxq3c7vcefjau44v2h6nvsus45wqopt3hadzae"),
|
"storagemarket": MustParseCid("bafk2bzaceawqexy6t2ybzh3jjwhbs7icbg5vqnedbbge4e4r4pfp7spkcadsu"),
|
||||||
"storagepower": MustParseCid("bafk2bzacebxl4ssugntkckifkq6sydczcas463bmonwi2m5hddurzzcukdzyg"),
|
"storageminer": MustParseCid("bafk2bzacearemd7pn2jj26fdtqd4di27lfhpng3vp5chepm7qnmdzgiqr6wfi"),
|
||||||
"system": MustParseCid("bafk2bzacedtw2ebtl3uccbqfcm6jd7teinlpktcglopuaxa6ev334jhs46hso"),
|
"storagepower": MustParseCid("bafk2bzaceddc7fiaxfobfegqaobf5xinjgmhsa5iu4yi6klvc3jmjimcdvgyg"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzaceds62ys6rpbtjjsemohalxnkr3jtqhflifabn3xlhpi45mvi757po"),
|
"system": MustParseCid("bafk2bzacedylltr57b2n6zpadh4i2c2kis4fzzvhao3kgvfaggrrbqyacew7q"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecjkesz766626ab4svnzpq3jfs26a75vfktlfaku5fjdao2eyiqyq"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "calibrationnet",
|
Network: "calibrationnet",
|
||||||
@ -60,19 +61,20 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "calibrationnet",
|
Network: "calibrationnet",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzacectdlm3f5m252s6ken3ncnndvwj4a7hqyev2m7iba4lubkt72r2rm"),
|
ManifestCid: MustParseCid("bafy2bzacedbedgynklc4dgpyxippkxmba2mgtw7ecntoneclsvvl4klqwuyyy"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzaceag3pkyy5youg2i4qyrhqms2jobycddkhd4eebtlkeqj4wu4sw7ji"),
|
"account": MustParseCid("bafk2bzaceavfgpiw6whqigmskk74z4blm22nwjfnzxb4unlqz2e4wg3c5ujpw"),
|
||||||
"cron": MustParseCid("bafk2bzaceaii7ryi4sjqqrrwyqaxulzqgiigkjqfa3f3ghhisleaqrinyal4o"),
|
"cron": MustParseCid("bafk2bzaceb7hxmudhvkizszbmmf2ur2qfnfxfkok3xmbrlifylx6huw4bb3s4"),
|
||||||
"init": MustParseCid("bafk2bzacebpi37hcleu7cpqgs5zdg4zsw7qpydt5w25jny2dyyscsyidquvcw"),
|
"datacap": MustParseCid("bafk2bzaceanmwcfjfj65xy275rrfqqgoblnuqirdg6zwhc6qhbfhpphomvceu"),
|
||||||
"multisig": MustParseCid("bafk2bzacebt522zme5n3q25mecukjvomfyyzduxormgnprl73mdb5ekda2ywy"),
|
"init": MustParseCid("bafk2bzaceczqxpivlxifdo5ohr2rx5ny4uyvssm6tkf7am357xm47x472yxu2"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacebdxmtmloxfyhxkoj4p4ze5gojqohvqjmdmv2t54xyrgfnjs52p26"),
|
"multisig": MustParseCid("bafk2bzacec6gmi7ucukr3bk67akaxwngohw3lsg3obvdazhmfhdzflkszk3tg"),
|
||||||
"reward": MustParseCid("bafk2bzacebt7vup2pdxie67goc5ourij32z4ofejlrbv7styzm47ytvmmxx5a"),
|
"paymentchannel": MustParseCid("bafk2bzacec4kg3bfjtssvv2b4wizlbdk3pdtrg5aknzgeb3a6rmksgurpynca"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacebeohybortft5jiihfvfly5oiygvf2hulnuif7vivklind32hbr3c"),
|
"reward": MustParseCid("bafk2bzacebpptqhcw6mcwdj576dgpryapdd2zfexxvqzlh3aoc24mabwgmcss"),
|
||||||
"storageminer": MustParseCid("bafk2bzaceallhekg5fhibexjurqcwrx6uzacbyq5eofic6jbdiu3vhepq6xsw"),
|
"storagemarket": MustParseCid("bafk2bzacebkfcnc27d3agm2bhzzbvvtbqahmvy2b2nf5xyj4aoxehow3bules"),
|
||||||
"storagepower": MustParseCid("bafk2bzaceassqqdljvblivbcrkv62a36gxjwf7dmkgez6ezq2oydx3dv2b3z2"),
|
"storageminer": MustParseCid("bafk2bzacebz4na3nq4gmumghegtkaofrv4nffiihd7sxntrryfneusqkuqodm"),
|
||||||
"system": MustParseCid("bafk2bzacebxsecqifqvqxavnmsuwigmnc5rcuxoezspmykeqinkbgrkfukmgs"),
|
"storagepower": MustParseCid("bafk2bzaceburxajojmywawjudovqvigmos4dlu4ifdikogumhso2ca2ccaleo"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzacedrmxfk5qifi7ujcb7mm73mwoy5e7nbndxhbqauuyol6cunf6popm"),
|
"system": MustParseCid("bafk2bzaceaue3nzucbom3tcclgyaahy3iwvbqejsxrohiquakvvsjgbw3shac"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebh7dj6j7yi5vadh7lgqjtq42qi2uq4n6zy2g5vjeathacwn2tscu"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "caterpillarnet",
|
Network: "caterpillarnet",
|
||||||
@ -94,19 +96,20 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "caterpillarnet",
|
Network: "caterpillarnet",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzaceaknnblpmv3qqeqlgdycpps2vkgbgkflugbqz47k6zwrqte54hqy2"),
|
ManifestCid: MustParseCid("bafy2bzacedo6tmei6rzjaaddh2yffe5xgr6w4smnadofjhomc3saiv3ubplqe"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzaceckajm6tcdpvfsrvagduv6cuefuo3modkpfupum6ibspulgvporrw"),
|
"account": MustParseCid("bafk2bzacebb32htqlwcwiotyvtbeehfmluu2ubjnepo57gelelwitudrstwba"),
|
||||||
"cron": MustParseCid("bafk2bzacea74zhlldpihms2ohp3wvefojifvudbblmeju3izwrpcpxemp43fo"),
|
"cron": MustParseCid("bafk2bzaceatvkww7soy4a6onu6xhe7pzkdzkqw46ywuu56yv3ncl76xpotzqu"),
|
||||||
"init": MustParseCid("bafk2bzacea5nqh4l76vm4ys6vgrqyt77tquk66il3w5ho3zxugka22fipdkdw"),
|
"datacap": MustParseCid("bafk2bzaced57nk7i7w6qmbosy4gd6atme6yppesdgjllou6nppbti5yw6glcg"),
|
||||||
"multisig": MustParseCid("bafk2bzacea3ftmx2roav4psh63r5n2sol6x3kwpmfwe473pexhj6lg7pruu2k"),
|
"init": MustParseCid("bafk2bzacedtoputbtz573ytg4yo5wbbg7fbhrzplux4uknxrb2jarifcuxxou"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacea2gqhnycejjfuinywoz4j7pmsvxn3i2y5epdx5vqpo23phx6jeac"),
|
"multisig": MustParseCid("bafk2bzacec22z3xz45mbwgtliwkj7ngc43bervnt557c6dqsg6aesatpd5isy"),
|
||||||
"reward": MustParseCid("bafk2bzaceamdxogvus7zawqtju3vesmj6ffpf3ta6dlwvvstyfbf23sow2tes"),
|
"paymentchannel": MustParseCid("bafk2bzacedym7xnaxr2igfq72rttj2adqyqqfxk3j4qovp2bcwqk5paoe4t7e"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacecvh6qhfe3ityehpibxmmw43l7recwtru3l4n3yrdj5bmnv4efnrc"),
|
"reward": MustParseCid("bafk2bzacedemsmbmbtk5toprmm6jivjq3wkxumavc65vpvm6ngspgjfkth7z6"),
|
||||||
"storageminer": MustParseCid("bafk2bzaced6ya5wlvplkvnvmhuc2uh5zq7oft6pyyoouwouuoreuk6grn6vsw"),
|
"storagemarket": MustParseCid("bafk2bzacecb53mmklf4rbv263dvufqj3nsf7mi6zk2tjlgwmzbr633kw3ds3w"),
|
||||||
"storagepower": MustParseCid("bafk2bzacedbfoblr65vbqwx37cym6v3zhbgrau46vma4c2lbh6toz6q5dyrtc"),
|
"storageminer": MustParseCid("bafk2bzacea3wljpn2ixgnd4lovr6yckiwd652ytcrz5amgj47lg6drjhgggqa"),
|
||||||
"system": MustParseCid("bafk2bzaced7z2lu5hp4qpsesbmubq3chrad3sl6kgveldafksh4w252ijjaw2"),
|
"storagepower": MustParseCid("bafk2bzaceakvohgvovpeldb6hjfg7readxo37a5h4qauis4nz6pte7mcll6c2"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzacec6fdlcvlnaiktdptogae3bgofhzo24lhn4hs6rsa2zbnknfpsct6"),
|
"system": MustParseCid("bafk2bzacecisuqj2ln7ep72xaejvs2lrgh2logc7retxxpd3qvobymwyz7bxo"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebyjosiripwqyf56yhjfs5hg26mch7totsqth4rgpt5j32hqg6ric"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "devnet",
|
Network: "devnet",
|
||||||
@ -128,19 +131,20 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "devnet",
|
Network: "devnet",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzacecogd7hb3dap7d4abyikdgt6b2zs46s4qyilsgxk4rsienbvvstp4"),
|
ManifestCid: MustParseCid("bafy2bzacedozk3jh2j4nobqotkbofodq4chbrabioxbfrygpldgoxs3zwgggk"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacecrgqcwn2j6c44tnfx32om4upg56b7gdwslfgeuyfsm6iwkiuhm2w"),
|
"account": MustParseCid("bafk2bzaced5llqnqqhypolyuogz3h2wjomugqkrhyhocvly3aoib4c5xiush6"),
|
||||||
"cron": MustParseCid("bafk2bzaceblepwha5i5cpac37arpcxjcebm5k7p4e5ed7bwcq7ie6fryxgno4"),
|
"cron": MustParseCid("bafk2bzaceahwdt32ji53mo5yz6imvztz3s3g2ra5uz3jdfa77j7hqcnq6r4l2"),
|
||||||
"init": MustParseCid("bafk2bzacebjr3xwsdzfie47rtffibt3irr7a5qqstt7fsbwnolzz3z6oy5frw"),
|
"datacap": MustParseCid("bafk2bzaceabcxoy5iscdierasorjoj6xzqgnnb5pmrr7prkuibw4yggx3v2d2"),
|
||||||
"multisig": MustParseCid("bafk2bzacec66uf5u7o7q3u3pufrtufya6ntwrreysrwwlzqdjbtj36ajuamz4"),
|
"init": MustParseCid("bafk2bzaceastwn42kqyztz7uzej7l4lemp5nakqqsfvksry7k75q5ombhprme"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacebouukxeahifxfoymmvibngg6abftd7luiq5x2c7zxulvqyerwoeg"),
|
"multisig": MustParseCid("bafk2bzacebeiygkjupkpfxcrsidci4bvn6afkvx4lsj3ut3ywhsj654pzfgk4"),
|
||||||
"reward": MustParseCid("bafk2bzacecj4pry2xb6w4kd4xxvs3dqd2endfynnwrkf66zakmt376tafy6ym"),
|
"paymentchannel": MustParseCid("bafk2bzacedhsdoo4ww47rm44pizu5qqpho753cizzbbvnd5yz3nm3347su5cy"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacecmij6fgaasgu7zm354fltmvhwmepzwadhl4euxhb64yg4pgfkxgw"),
|
"reward": MustParseCid("bafk2bzacebzqvisqe3iaodtxq7l2lgzwfkxznrnp676ddpllqcpvuae5i33le"),
|
||||||
"storageminer": MustParseCid("bafk2bzaceb5qyhchlvqvcq5cvrc5tuyjrrz6qkgbbxx4vr4wxhtoa4bfp56bg"),
|
"storagemarket": MustParseCid("bafk2bzaceduauegz4nniegh667btjhg2anipwpxeb664s4ossq2ifvuqwqlso"),
|
||||||
"storagepower": MustParseCid("bafk2bzaced377v52henedhmudi2isuxe73mp2lrv2zyyxfp4r4uppz3sy2ipw"),
|
"storageminer": MustParseCid("bafk2bzacec23wjdmbm5pt6pqsbjb3w6j7vyrolijz2mysvp6clllfgpmhb6ge"),
|
||||||
"system": MustParseCid("bafk2bzacebb3gdmg2fqexijivo7dkxj6g6gu7ou2jsw6opszr5gfmwt4fvorw"),
|
"storagepower": MustParseCid("bafk2bzacebnyywv46n2ghg62inllwpmnyuwtoz57fn5lpgpf436mahajg4qrg"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzacec5xfb3a56mlclymhvs2br3qzx7sagqda4dvl4xz3fgiymkkbz5tk"),
|
"system": MustParseCid("bafk2bzacebgafb6h2o2g5whrujc2uvsttrussyc5t56rvhrjqkqhzdu4jopwa"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacednorhcy446agy7ecpmfms2u4aoa3mj2eqomffuoerbik5yavrxyi"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "mainnet",
|
Network: "mainnet",
|
||||||
@ -162,19 +166,20 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "mainnet",
|
Network: "mainnet",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzaceb7nrn4icde3yt7s2kpllliodblq2i3iuslh3l6swgjqyusual72u"),
|
ManifestCid: MustParseCid("bafy2bzaceb6j6666h36xnhksu3ww4kxb6e25niayfgkdnifaqi6m6ooc66i6i"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacedchhykcbvptlrnts62xa2h7fewsyvb4imktudll7tbogkwj4ccpy"),
|
"account": MustParseCid("bafk2bzacect2p7urje3pylrrrjy3tngn6yaih4gtzauuatf2jllk3ksgfiw2y"),
|
||||||
"cron": MustParseCid("bafk2bzaced2e2ivtglevf5tnqay6eqdl3m5ilx4az766ojbhmy2kbxmkogbni"),
|
"cron": MustParseCid("bafk2bzacebcec3lffmos3nawm5cvwehssxeqwxixoyyfvejy7viszzsxzyu26"),
|
||||||
"init": MustParseCid("bafk2bzaceapzqn6e3cfpf4ntln4dkyrqe5egygmjczefduy7fuabxh2npqq6o"),
|
"datacap": MustParseCid("bafk2bzacebb6uy2ys7tapekmtj7apnjg7oyj4ia5t7tlkvbmwtxwv74lb2pug"),
|
||||||
"multisig": MustParseCid("bafk2bzacebxihi4x4lzelmmdtxiz5gub3cjgthrgxuj5mxl2ihxaz6qhp5qbu"),
|
"init": MustParseCid("bafk2bzacebtdq4zyuxk2fzbdkva6kc4mx75mkbfmldplfntayhbl5wkqou33i"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacecv34ahs6k552won2vj4r62gur5i7inqnycg7y4dg27ktlq76stlk"),
|
"multisig": MustParseCid("bafk2bzacec4va3nmugyqjqrs3lqyr2ij67jhjia5frvx7omnh2isha6abxzya"),
|
||||||
"reward": MustParseCid("bafk2bzacea4er76nlnzz3muuvdxs4dbygejztezanpafi42idj57n75sumu7o"),
|
"paymentchannel": MustParseCid("bafk2bzacebhdvjbjcgupklddfavzef4e4gnkt3xk3rbmgfmk7xhecszhfxeds"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacedd3pjxcwgxfli4a5udw3ebbo4gom43epizbldvto7ovduqk6udj6"),
|
"reward": MustParseCid("bafk2bzacebezgbbmcm2gbcqwisus5fjvpj7hhmu5ubd37phuku3hmkfulxm2o"),
|
||||||
"storageminer": MustParseCid("bafk2bzacebtuopxp2464fxulzfyr4iw7bj4pelfxlatudaf6q5qtahokeo3lo"),
|
"storagemarket": MustParseCid("bafk2bzacec3j7p6gklk64stax5px3xxd7hdtejaepnd4nw7s2adihde6emkcu"),
|
||||||
"storagepower": MustParseCid("bafk2bzacec3dmcwtizgy6qhxg6fgb4ykc2pamxxh2n5oyeqvebjf3ikzd2sui"),
|
"storageminer": MustParseCid("bafk2bzacedyux5hlrildwutvvjdcsvjtwsoc5xnqdjl73ouiukgklekeuyfl4"),
|
||||||
"system": MustParseCid("bafk2bzacecrm36gf2gusruvhfc6ukf36qflsr5pdbquvfyysprdyudsatoufm"),
|
"storagepower": MustParseCid("bafk2bzacedsetphfajgne4qy3vdrpyd6ekcmtfs2zkjut4r34cvnuoqemdrtw"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzaceah3mwu6tb4jmffohpoz6nyoxpgno2hmxz455rycw4o2hrat3yg3u"),
|
"system": MustParseCid("bafk2bzaceagvlo2jtahj7dloshrmwfulrd6e2izqev32qm46eumf754weec6c"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecf3yodlyudzukumehbuabgqljyhjt5ifiv4vetcfohnvsxzynwga"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "testing",
|
Network: "testing",
|
||||||
@ -196,19 +201,20 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "testing",
|
Network: "testing",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzaceas5fka4rtyvnqwvvwdi2qqhbnu7hnyz37chhpflh4rdbwnoupols"),
|
ManifestCid: MustParseCid("bafy2bzacecnnrmekqw2xvud46g3vo6x26cogh3ydgljqajlxqxzzbuxsjlwjm"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacecsmbmd42fsg33wd3u5vxyp4n4a4mac423fduauishjhiyv2bqz7w"),
|
"account": MustParseCid("bafk2bzaceaiebfiuu76zoywzltelio2zuvsavirka27ur6kspn7scvcl5cuiy"),
|
||||||
"cron": MustParseCid("bafk2bzacedajlwnkefucjxzasudkfojrz3bnhnnirebvacxrtly5y2kfb7qiu"),
|
"cron": MustParseCid("bafk2bzacecla36w3tbwap5jgdtooxsud25mdpc75kgtjs34mi4xhwygph2gki"),
|
||||||
"init": MustParseCid("bafk2bzaceat7cvf7s2vnmqoldzafkpjygi6wv3sfnclenfbahk4htsgu4aqsa"),
|
"datacap": MustParseCid("bafk2bzaced5h3ct6i7oqpyimkj3hwdywmux5tslu5vs2ywbzruqmxjtqczygs"),
|
||||||
"multisig": MustParseCid("bafk2bzacebh7pwb7eoyigwgjs2r32ebtxwbwgxqd4cvou4katq4axmhd7lxsq"),
|
"init": MustParseCid("bafk2bzaceauxqpspnvui7dryuvfgzoogatbkbahp4ovaih734blwi4bassnlm"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzaceb6nbmyo2girdpnwywby7yzelx7g6s4snbq3kb3mmd2pp33qefkww"),
|
"multisig": MustParseCid("bafk2bzaceddfagxfpsihjxq7yt4ditv2tcoou5w4hzbsapadlw3v44cxfcqpi"),
|
||||||
"reward": MustParseCid("bafk2bzacedttgmuddtlrp2ie4i2vzuueury455knof5muqtqlslscxrk7ucl6"),
|
"paymentchannel": MustParseCid("bafk2bzaced4nc4ofrbqevpwrt7fnf3beshi5ccrecq3zojt2sxgrkz7ebnbh4"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacebjtz7fg5n2sm4wg464fyg5vcvux5hqrsdwki675hsquhh3rpe5rg"),
|
"reward": MustParseCid("bafk2bzacedxleepeg4ei3jnayzcfz6shi25rrvoyhr6fxmkdezq4owrazi7rq"),
|
||||||
"storageminer": MustParseCid("bafk2bzacea2c2genvtsktr3f6yjlny57gwqyt5dbqrfws56wn5ssyl2tevjjg"),
|
"storagemarket": MustParseCid("bafk2bzaceakqcjpppg3exrr7dru7jglvno2xyw4hsuebxay4lvrzvmwmv5kvu"),
|
||||||
"storagepower": MustParseCid("bafk2bzaceasmr5xc3c7jgihqcb5pdv557kfor72wlmzmh4syvedknelebhsve"),
|
"storageminer": MustParseCid("bafk2bzacealfvphicwnysmmyyerseppyvydy2reisvbft46vdprp2lnfvlgqc"),
|
||||||
"system": MustParseCid("bafk2bzaceabj3whuno364pjqn7sphwquiqpl2w5le6aa6quwytgyxshvelcwq"),
|
"storagepower": MustParseCid("bafk2bzaceageil5b5mr5uwo6vqs4nnnmpiwe3fkjffzyngcicuu7gruuwapjm"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzaceamn6gzihkytyqym4dqs7wqmo2fz6kpge4tphumvutsp2ys4bwaha"),
|
"system": MustParseCid("bafk2bzacedo4pu3iwx2gu72hinsstpiokhl5iicnb3rumzffsnhy7zhmnxhyy"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceatmqip2o3ausbntvdhj7yemu6hb3b5yqv6hm42gylbbmz7geocpm"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "testing-fake-proofs",
|
Network: "testing-fake-proofs",
|
||||||
@ -230,18 +236,19 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
}, {
|
}, {
|
||||||
Network: "testing-fake-proofs",
|
Network: "testing-fake-proofs",
|
||||||
Version: 9,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzacebr7bo4shotwq4cct3ablt6hlcozg4h2e52av2q3md5di7sibrqj2"),
|
ManifestCid: MustParseCid("bafy2bzacecql2gj2tri4fnbznmldue73qzt6zszvugw4exd64mwb52zrhv7k2"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacecsmbmd42fsg33wd3u5vxyp4n4a4mac423fduauishjhiyv2bqz7w"),
|
"account": MustParseCid("bafk2bzaceaiebfiuu76zoywzltelio2zuvsavirka27ur6kspn7scvcl5cuiy"),
|
||||||
"cron": MustParseCid("bafk2bzacedajlwnkefucjxzasudkfojrz3bnhnnirebvacxrtly5y2kfb7qiu"),
|
"cron": MustParseCid("bafk2bzacecla36w3tbwap5jgdtooxsud25mdpc75kgtjs34mi4xhwygph2gki"),
|
||||||
"init": MustParseCid("bafk2bzaceat7cvf7s2vnmqoldzafkpjygi6wv3sfnclenfbahk4htsgu4aqsa"),
|
"datacap": MustParseCid("bafk2bzaced5h3ct6i7oqpyimkj3hwdywmux5tslu5vs2ywbzruqmxjtqczygs"),
|
||||||
"multisig": MustParseCid("bafk2bzacebh7pwb7eoyigwgjs2r32ebtxwbwgxqd4cvou4katq4axmhd7lxsq"),
|
"init": MustParseCid("bafk2bzaceauxqpspnvui7dryuvfgzoogatbkbahp4ovaih734blwi4bassnlm"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzaceb6nbmyo2girdpnwywby7yzelx7g6s4snbq3kb3mmd2pp33qefkww"),
|
"multisig": MustParseCid("bafk2bzaceddfagxfpsihjxq7yt4ditv2tcoou5w4hzbsapadlw3v44cxfcqpi"),
|
||||||
"reward": MustParseCid("bafk2bzacedttgmuddtlrp2ie4i2vzuueury455knof5muqtqlslscxrk7ucl6"),
|
"paymentchannel": MustParseCid("bafk2bzaced4nc4ofrbqevpwrt7fnf3beshi5ccrecq3zojt2sxgrkz7ebnbh4"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacebjtz7fg5n2sm4wg464fyg5vcvux5hqrsdwki675hsquhh3rpe5rg"),
|
"reward": MustParseCid("bafk2bzacedxleepeg4ei3jnayzcfz6shi25rrvoyhr6fxmkdezq4owrazi7rq"),
|
||||||
"storageminer": MustParseCid("bafk2bzacedaxvye4reegpy2fecjuzwt4nly2myhplnvkzhssquo2jjw7vfmuy"),
|
"storagemarket": MustParseCid("bafk2bzaceakqcjpppg3exrr7dru7jglvno2xyw4hsuebxay4lvrzvmwmv5kvu"),
|
||||||
"storagepower": MustParseCid("bafk2bzaceaoteuuvld3bzy3t3kzjp5iabgkvxjc5cxq2ziwankpxqqixkqqjw"),
|
"storageminer": MustParseCid("bafk2bzaceab3cjrwwwfemyc5lw73w6tibpgxtx3wuzjhami6tvhcvetygdm7m"),
|
||||||
"system": MustParseCid("bafk2bzaceabj3whuno364pjqn7sphwquiqpl2w5le6aa6quwytgyxshvelcwq"),
|
"storagepower": MustParseCid("bafk2bzaceafemwhsy3e7ueqsrn3f7n53vdqkvfbig3hgbw7eohsefnfvgq7yc"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzaceamn6gzihkytyqym4dqs7wqmo2fz6kpge4tphumvutsp2ys4bwaha"),
|
"system": MustParseCid("bafk2bzacedo4pu3iwx2gu72hinsstpiokhl5iicnb3rumzffsnhy7zhmnxhyy"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceatmqip2o3ausbntvdhj7yemu6hb3b5yqv6hm42gylbbmz7geocpm"),
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
@ -21,16 +21,18 @@ func TestEmbeddedMetadata(t *testing.T) {
|
|||||||
|
|
||||||
// Test that we're registering the manifest correctly.
|
// Test that we're registering the manifest correctly.
|
||||||
func TestRegistration(t *testing.T) {
|
func TestRegistration(t *testing.T) {
|
||||||
manifestCid, found := actors.GetManifest(actorstypes.Version8)
|
for _, av := range []actorstypes.Version{actorstypes.Version8, actorstypes.Version9} {
|
||||||
require.True(t, found)
|
manifestCid, found := actors.GetManifest(av)
|
||||||
require.True(t, manifestCid.Defined())
|
require.True(t, found)
|
||||||
|
require.True(t, manifestCid.Defined())
|
||||||
|
|
||||||
for _, key := range actors.GetBuiltinActorsKeys() {
|
for _, key := range actors.GetBuiltinActorsKeys(av) {
|
||||||
actorCid, found := actors.GetActorCodeID(actorstypes.Version8, key)
|
actorCid, found := actors.GetActorCodeID(av, key)
|
||||||
require.True(t, found)
|
require.True(t, found)
|
||||||
name, version, found := actors.GetActorMetaByCode(actorCid)
|
name, version, found := actors.GetActorMetaByCode(actorCid)
|
||||||
require.True(t, found)
|
require.True(t, found)
|
||||||
require.Equal(t, actorstypes.Version8, version)
|
require.Equal(t, av, version)
|
||||||
require.Equal(t, key, name)
|
require.Equal(t, key, name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -56,7 +56,7 @@ var UpgradeOhSnapHeight = abi.ChainEpoch(-18)
|
|||||||
|
|
||||||
var UpgradeSkyrHeight = abi.ChainEpoch(-19)
|
var UpgradeSkyrHeight = abi.ChainEpoch(-19)
|
||||||
|
|
||||||
var UpgradeV17Height = abi.ChainEpoch(99999999999999)
|
var UpgradeSharkHeight = abi.ChainEpoch(100)
|
||||||
|
|
||||||
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
@ -109,7 +109,7 @@ func init() {
|
|||||||
UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight)
|
UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight)
|
||||||
UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight)
|
UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight)
|
||||||
UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight)
|
UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight)
|
||||||
UpgradeV17Height = getUpgradeHeight("LOTUS_V17_HEIGHT", UpgradeV17Height)
|
UpgradeSharkHeight = getUpgradeHeight("LOTUS_SHARK_HEIGHT", UpgradeSharkHeight)
|
||||||
|
|
||||||
BuildType |= Build2k
|
BuildType |= Build2k
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ const UpgradeHyperdriveHeight = -16
|
|||||||
const UpgradeChocolateHeight = -17
|
const UpgradeChocolateHeight = -17
|
||||||
const UpgradeOhSnapHeight = -18
|
const UpgradeOhSnapHeight = -18
|
||||||
const UpgradeSkyrHeight = -19
|
const UpgradeSkyrHeight = -19
|
||||||
const UpgradeV17Height = abi.ChainEpoch(99999999999999)
|
const UpgradeSharkHeight = abi.ChainEpoch(600)
|
||||||
|
|
||||||
var SupportedProofTypes = []abi.RegisteredSealProof{
|
var SupportedProofTypes = []abi.RegisteredSealProof{
|
||||||
abi.RegisteredSealProof_StackedDrg512MiBV1,
|
abi.RegisteredSealProof_StackedDrg512MiBV1,
|
||||||
|
@ -61,15 +61,13 @@ const UpgradeTurboHeight = 390
|
|||||||
|
|
||||||
const UpgradeHyperdriveHeight = 420
|
const UpgradeHyperdriveHeight = 420
|
||||||
|
|
||||||
const UpgradeChocolateHeight = 312746
|
const UpgradeChocolateHeight = 450
|
||||||
|
|
||||||
// 2022-02-10T19:23:00Z
|
const UpgradeOhSnapHeight = 480
|
||||||
const UpgradeOhSnapHeight = 682006
|
|
||||||
|
|
||||||
// 2022-06-16T17:30:00Z
|
const UpgradeSkyrHeight = 510
|
||||||
const UpgradeSkyrHeight = 1044660
|
|
||||||
|
|
||||||
var UpgradeV17Height = abi.ChainEpoch(99999999999999)
|
const UpgradeSharkHeight = 16800 // 6 days after genesis
|
||||||
|
|
||||||
var SupportedProofTypes = []abi.RegisteredSealProof{
|
var SupportedProofTypes = []abi.RegisteredSealProof{
|
||||||
abi.RegisteredSealProof_StackedDrg32GiBV1,
|
abi.RegisteredSealProof_StackedDrg32GiBV1,
|
||||||
|
@ -49,7 +49,7 @@ var UpgradeChocolateHeight = abi.ChainEpoch(-17)
|
|||||||
var UpgradeOhSnapHeight = abi.ChainEpoch(-18)
|
var UpgradeOhSnapHeight = abi.ChainEpoch(-18)
|
||||||
var UpgradeSkyrHeight = abi.ChainEpoch(-19)
|
var UpgradeSkyrHeight = abi.ChainEpoch(-19)
|
||||||
|
|
||||||
const UpgradeV17Height = abi.ChainEpoch(99999999999999)
|
const UpgradeSharkHeight = abi.ChainEpoch(99999999999999)
|
||||||
|
|
||||||
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
@ -103,7 +103,7 @@ func init() {
|
|||||||
UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight)
|
UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight)
|
||||||
UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight)
|
UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight)
|
||||||
UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight)
|
UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight)
|
||||||
UpgradeV17Height = getUpgradeHeight("LOTUS_V17_HEIGHT", UpgradeV17Height)
|
UpgradeSharkHeight = getUpgradeHeight("LOTUS_SHARK_HEIGHT", UpgradeSharkHeight)
|
||||||
|
|
||||||
BuildType |= BuildInteropnet
|
BuildType |= BuildInteropnet
|
||||||
SetAddressNetwork(address.Testnet)
|
SetAddressNetwork(address.Testnet)
|
||||||
|
@ -79,7 +79,8 @@ const UpgradeOhSnapHeight = 1594680
|
|||||||
// 2022-07-06T14:00:00Z
|
// 2022-07-06T14:00:00Z
|
||||||
const UpgradeSkyrHeight = 1960320
|
const UpgradeSkyrHeight = 1960320
|
||||||
|
|
||||||
var UpgradeV17Height = abi.ChainEpoch(99999999999999)
|
// 2022-11-30T14:00:00Z
|
||||||
|
var UpgradeSharkHeight = abi.ChainEpoch(2383680)
|
||||||
|
|
||||||
var SupportedProofTypes = []abi.RegisteredSealProof{
|
var SupportedProofTypes = []abi.RegisteredSealProof{
|
||||||
abi.RegisteredSealProof_StackedDrg32GiBV1,
|
abi.RegisteredSealProof_StackedDrg32GiBV1,
|
||||||
@ -95,8 +96,8 @@ func init() {
|
|||||||
SetAddressNetwork(address.Mainnet)
|
SetAddressNetwork(address.Mainnet)
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.Getenv("LOTUS_DISABLE_V17") == "1" {
|
if os.Getenv("LOTUS_DISABLE_SHARK") == "1" {
|
||||||
UpgradeV17Height = math.MaxInt64
|
UpgradeSharkHeight = math.MaxInt64
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: DO NOT change this unless you REALLY know what you're doing. This is not consensus critical, however,
|
// NOTE: DO NOT change this unless you REALLY know what you're doing. This is not consensus critical, however,
|
||||||
|
@ -26,14 +26,14 @@ const UnixfsLinksPerLevel = 1024
|
|||||||
|
|
||||||
const AllowableClockDriftSecs = uint64(1)
|
const AllowableClockDriftSecs = uint64(1)
|
||||||
|
|
||||||
// TODO: This is still terrible...What's the impact of updating this before mainnet actually upgrades
|
// Used by tests and some obscure tooling
|
||||||
/* inline-gen template
|
/* inline-gen template
|
||||||
|
|
||||||
const NewestNetworkVersion = network.Version{{.latestNetworkVersion}}
|
const TestNetworkVersion = network.Version{{.latestNetworkVersion}}
|
||||||
|
|
||||||
/* inline-gen start */
|
/* inline-gen start */
|
||||||
|
|
||||||
const NewestNetworkVersion = network.Version17
|
const TestNetworkVersion = network.Version17
|
||||||
|
|
||||||
/* inline-gen end */
|
/* inline-gen end */
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ var (
|
|||||||
UpgradeChocolateHeight abi.ChainEpoch = -16
|
UpgradeChocolateHeight abi.ChainEpoch = -16
|
||||||
UpgradeOhSnapHeight abi.ChainEpoch = -17
|
UpgradeOhSnapHeight abi.ChainEpoch = -17
|
||||||
UpgradeSkyrHeight abi.ChainEpoch = -18
|
UpgradeSkyrHeight abi.ChainEpoch = -18
|
||||||
UpgradeV17Height abi.ChainEpoch = -19
|
UpgradeSharkHeight abi.ChainEpoch = -19
|
||||||
|
|
||||||
DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
|
@ -37,7 +37,7 @@ func BuildTypeString() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BuildVersion is the local build version
|
// BuildVersion is the local build version
|
||||||
const BuildVersion = "1.17.3-dev"
|
const BuildVersion = "1.19.1-dev"
|
||||||
|
|
||||||
func UserVersion() string {
|
func UserVersion() string {
|
||||||
if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" {
|
if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" {
|
||||||
|
@ -314,7 +314,7 @@ func GetActorCodeIDs(av actorstypes.Version) (map[string]cid.Cid, error) {
|
|||||||
return cids, nil
|
return cids, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
actorsKeys := GetBuiltinActorsKeys()
|
actorsKeys := GetBuiltinActorsKeys(av)
|
||||||
synthCids := make(map[string]cid.Cid)
|
synthCids := make(map[string]cid.Cid)
|
||||||
|
|
||||||
for _, key := range actorsKeys {
|
for _, key := range actorsKeys {
|
||||||
|
@ -27,6 +27,7 @@ var actors = map[string][]int{
|
|||||||
"system": lotusactors.Versions,
|
"system": lotusactors.Versions,
|
||||||
"reward": lotusactors.Versions,
|
"reward": lotusactors.Versions,
|
||||||
"verifreg": lotusactors.Versions,
|
"verifreg": lotusactors.Versions,
|
||||||
|
"datacap": lotusactors.Versions[8:],
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -55,7 +56,7 @@ func generateAdapters() error {
|
|||||||
for act, versions := range actors {
|
for act, versions := range actors {
|
||||||
actDir := filepath.Join("chain/actors/builtin", act)
|
actDir := filepath.Join("chain/actors/builtin", act)
|
||||||
|
|
||||||
if err := generateState(actDir); err != nil {
|
if err := generateState(actDir, versions); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +98,7 @@ func generateAdapters() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateState(actDir string) error {
|
func generateState(actDir string, versions []int) error {
|
||||||
af, err := ioutil.ReadFile(filepath.Join(actDir, "state.go.template"))
|
af, err := ioutil.ReadFile(filepath.Join(actDir, "state.go.template"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
@ -107,7 +108,7 @@ func generateState(actDir string) error {
|
|||||||
return xerrors.Errorf("loading state adapter template: %w", err)
|
return xerrors.Errorf("loading state adapter template: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, version := range lotusactors.Versions {
|
for _, version := range versions {
|
||||||
tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af)))
|
tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af)))
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -104,6 +105,24 @@ func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (S
|
|||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
PubkeyAddress() (address.Address, error)
|
PubkeyAddress() (address.Address, error)
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{
|
||||||
|
(&state0{}).Code(),
|
||||||
|
(&state2{}).Code(),
|
||||||
|
(&state3{}).Code(),
|
||||||
|
(&state4{}).Code(),
|
||||||
|
(&state5{}).Code(),
|
||||||
|
(&state6{}).Code(),
|
||||||
|
(&state7{}).Code(),
|
||||||
|
(&state8{}).Code(),
|
||||||
|
(&state9{}).Code(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
@ -62,6 +63,17 @@ func MakeState(store adt.Store, av actorstypes.Version, addr address.Address) (S
|
|||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
PubkeyAddress() (address.Address, error)
|
PubkeyAddress() (address.Address, error)
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{ {{range .versions}}
|
||||||
|
(&state{{.}}{}).Code(),
|
||||||
|
{{- end}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
|
||||||
{{if (le .v 7)}}
|
{{if (le .v 7)}}
|
||||||
account{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/account"
|
account{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/account"
|
||||||
@ -41,4 +45,21 @@ func (s *state{{.v}}) PubkeyAddress() (address.Address, error) {
|
|||||||
|
|
||||||
func (s *state{{.v}}) GetState() interface{} {
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version{{.v}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
21
chain/actors/builtin/account/v0.go
generated
21
chain/actors/builtin/account/v0.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account0 "github.com/filecoin-project/specs-actors/actors/builtin/account"
|
account0 "github.com/filecoin-project/specs-actors/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state0) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state0) GetState() interface{} {
|
func (s *state0) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v2.go
generated
21
chain/actors/builtin/account/v2.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/account"
|
account2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state2) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state2) GetState() interface{} {
|
func (s *state2) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version2
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v3.go
generated
21
chain/actors/builtin/account/v3.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/account"
|
account3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state3) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state3) GetState() interface{} {
|
func (s *state3) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version3
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v4.go
generated
21
chain/actors/builtin/account/v4.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/account"
|
account4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state4) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state4) GetState() interface{} {
|
func (s *state4) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version4
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v5.go
generated
21
chain/actors/builtin/account/v5.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/account"
|
account5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state5) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state5) GetState() interface{} {
|
func (s *state5) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state5) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version5
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v6.go
generated
21
chain/actors/builtin/account/v6.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/account"
|
account6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state6) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state6) GetState() interface{} {
|
func (s *state6) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state6) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version6
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v7.go
generated
21
chain/actors/builtin/account/v7.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/account"
|
account7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state7) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state7) GetState() interface{} {
|
func (s *state7) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state7) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version7
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v8.go
generated
21
chain/actors/builtin/account/v8.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account8 "github.com/filecoin-project/go-state-types/builtin/v8/account"
|
account8 "github.com/filecoin-project/go-state-types/builtin/v8/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state8) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state8) GetState() interface{} {
|
func (s *state8) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state8) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version8
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/account/v9.go
generated
21
chain/actors/builtin/account/v9.go
generated
@ -1,11 +1,15 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
account9 "github.com/filecoin-project/go-state-types/builtin/v9/account"
|
account9 "github.com/filecoin-project/go-state-types/builtin/v9/account"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -38,3 +42,20 @@ func (s *state9) PubkeyAddress() (address.Address, error) {
|
|||||||
func (s *state9) GetState() interface{} {
|
func (s *state9) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorKey() string {
|
||||||
|
return actors.AccountKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version9
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
@ -60,5 +61,16 @@ var (
|
|||||||
|
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{ {{range .versions}}
|
||||||
|
(&state{{.}}{}).Code(),
|
||||||
|
{{- end}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
@ -103,5 +104,23 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{
|
||||||
|
(&state0{}).Code(),
|
||||||
|
(&state2{}).Code(),
|
||||||
|
(&state3{}).Code(),
|
||||||
|
(&state4{}).Code(),
|
||||||
|
(&state5{}).Code(),
|
||||||
|
(&state6{}).Code(),
|
||||||
|
(&state7{}).Code(),
|
||||||
|
(&state8{}).Code(),
|
||||||
|
(&state9{}).Code(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
|
||||||
{{if (le .v 7)}}
|
{{if (le .v 7)}}
|
||||||
cron{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/cron"
|
cron{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/cron"
|
||||||
@ -36,4 +39,21 @@ type state{{.v}} struct {
|
|||||||
|
|
||||||
func (s *state{{.v}}) GetState() interface{} {
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version{{.v}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v0.go
generated
21
chain/actors/builtin/cron/v0.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron0 "github.com/filecoin-project/specs-actors/actors/builtin/cron"
|
cron0 "github.com/filecoin-project/specs-actors/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state0 struct {
|
|||||||
func (s *state0) GetState() interface{} {
|
func (s *state0) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v2.go
generated
21
chain/actors/builtin/cron/v2.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/cron"
|
cron2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state2 struct {
|
|||||||
func (s *state2) GetState() interface{} {
|
func (s *state2) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version2
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v3.go
generated
21
chain/actors/builtin/cron/v3.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/cron"
|
cron3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state3 struct {
|
|||||||
func (s *state3) GetState() interface{} {
|
func (s *state3) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version3
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v4.go
generated
21
chain/actors/builtin/cron/v4.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/cron"
|
cron4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state4 struct {
|
|||||||
func (s *state4) GetState() interface{} {
|
func (s *state4) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version4
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v5.go
generated
21
chain/actors/builtin/cron/v5.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/cron"
|
cron5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state5 struct {
|
|||||||
func (s *state5) GetState() interface{} {
|
func (s *state5) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state5) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version5
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v6.go
generated
21
chain/actors/builtin/cron/v6.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/cron"
|
cron6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state6 struct {
|
|||||||
func (s *state6) GetState() interface{} {
|
func (s *state6) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state6) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version6
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v7.go
generated
21
chain/actors/builtin/cron/v7.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/cron"
|
cron7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state7 struct {
|
|||||||
func (s *state7) GetState() interface{} {
|
func (s *state7) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state7) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version7
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v8.go
generated
21
chain/actors/builtin/cron/v8.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron8 "github.com/filecoin-project/go-state-types/builtin/v8/cron"
|
cron8 "github.com/filecoin-project/go-state-types/builtin/v8/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state8 struct {
|
|||||||
func (s *state8) GetState() interface{} {
|
func (s *state8) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state8) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version8
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
21
chain/actors/builtin/cron/v9.go
generated
21
chain/actors/builtin/cron/v9.go
generated
@ -1,10 +1,14 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
cron9 "github.com/filecoin-project/go-state-types/builtin/v9/cron"
|
cron9 "github.com/filecoin-project/go-state-types/builtin/v9/cron"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,3 +37,20 @@ type state9 struct {
|
|||||||
func (s *state9) GetState() interface{} {
|
func (s *state9) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorKey() string {
|
||||||
|
return actors.CronKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version9
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
70
chain/actors/builtin/datacap/actor.go.template
Normal file
70
chain/actors/builtin/datacap/actor.go.template
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package datacap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
builtin{{.latestVersion}} "github.com/filecoin-project/go-state-types/builtin"
|
||||||
|
"github.com/filecoin-project/go-state-types/cbor"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Address = builtin{{.latestVersion}}.DatacapActorAddr
|
||||||
|
Methods = builtin{{.latestVersion}}.MethodsDatacap
|
||||||
|
)
|
||||||
|
|
||||||
|
func Load(store adt.Store, act *types.Actor) (State, error) {
|
||||||
|
if name, av, ok := actors.GetActorMetaByCode(act.Code); ok {
|
||||||
|
if name != actors.DatacapKey {
|
||||||
|
return nil, xerrors.Errorf("actor code is not datacap: %s", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actorstypes.Version{{.}}:
|
||||||
|
return load{{.}}(store, act.Head)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actorstypes.Version, governor address.Address, bitwidth uint64) (State, error) {
|
||||||
|
switch av {
|
||||||
|
{{range .versions}}
|
||||||
|
case actorstypes.Version{{.}}:
|
||||||
|
return make{{.}}(store, governor, bitwidth)
|
||||||
|
|
||||||
|
default: return nil, xerrors.Errorf("datacap actor only valid for actors v9 and above, got %d", av)
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type State interface {
|
||||||
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
|
ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error
|
||||||
|
VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error)
|
||||||
|
Governor() (address.Address, error)
|
||||||
|
GetState() interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{ {{range .versions}}
|
||||||
|
(&state{{.}}{}).Code(),
|
||||||
|
{{- end}}
|
||||||
|
}
|
||||||
|
}
|
69
chain/actors/builtin/datacap/datacap.go
Normal file
69
chain/actors/builtin/datacap/datacap.go
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package datacap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
builtin9 "github.com/filecoin-project/go-state-types/builtin"
|
||||||
|
"github.com/filecoin-project/go-state-types/cbor"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Address = builtin9.DatacapActorAddr
|
||||||
|
Methods = builtin9.MethodsDatacap
|
||||||
|
)
|
||||||
|
|
||||||
|
func Load(store adt.Store, act *types.Actor) (State, error) {
|
||||||
|
if name, av, ok := actors.GetActorMetaByCode(act.Code); ok {
|
||||||
|
if name != actors.DatacapKey {
|
||||||
|
return nil, xerrors.Errorf("actor code is not datacap: %s", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actorstypes.Version9:
|
||||||
|
return load9(store, act.Head)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, xerrors.Errorf("unknown actor code %s", act.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeState(store adt.Store, av actorstypes.Version, governor address.Address, bitwidth uint64) (State, error) {
|
||||||
|
switch av {
|
||||||
|
|
||||||
|
case actorstypes.Version9:
|
||||||
|
return make9(store, governor, bitwidth)
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil, xerrors.Errorf("datacap actor only valid for actors v9 and above, got %d", av)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type State interface {
|
||||||
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
|
ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error
|
||||||
|
VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error)
|
||||||
|
Governor() (address.Address, error)
|
||||||
|
GetState() interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{
|
||||||
|
(&state9{}).Code(),
|
||||||
|
}
|
||||||
|
}
|
80
chain/actors/builtin/datacap/state.go.template
Normal file
80
chain/actors/builtin/datacap/state.go.template
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package datacap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
|
||||||
|
datacap{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}datacap"
|
||||||
|
adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state{{.v}})(nil)
|
||||||
|
|
||||||
|
func load{{.v}}(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make{{.v}}(store adt.Store, governor address.Address, bitwidth uint64) (State, error) {
|
||||||
|
out := state{{.v}}{store: store}
|
||||||
|
s, err := datacap{{.v}}.ConstructState(store, governor, bitwidth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state{{.v}} struct {
|
||||||
|
datacap{{.v}}.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) Governor() (address.Address, error) {
|
||||||
|
return s.State.Governor, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
|
return forEachClient(s.store, actors.Version{{.v}}, s.verifiedClients, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) verifiedClients() (adt.Map, error) {
|
||||||
|
return adt{{.v}}.AsMap(s.store, s.Token.Balances, int(s.Token.HamtBitWidth))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) {
|
||||||
|
return getDataCap(s.store, actors.Version{{.v}}, s.verifiedClients, addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorKey() string {
|
||||||
|
return actors.DatacapKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version{{.v}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
60
chain/actors/builtin/datacap/util.go
Normal file
60
chain/actors/builtin/datacap/util.go
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package datacap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/multiformats/go-varint"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// taking this as a function instead of asking the caller to call it helps reduce some of the error
|
||||||
|
// checking boilerplate.
|
||||||
|
//
|
||||||
|
// "go made me do it"
|
||||||
|
type rootFunc func() (adt.Map, error)
|
||||||
|
|
||||||
|
func getDataCap(store adt.Store, ver actors.Version, root rootFunc, addr address.Address) (bool, abi.StoragePower, error) {
|
||||||
|
if addr.Protocol() != address.ID {
|
||||||
|
return false, big.Zero(), xerrors.Errorf("can only look up ID addresses")
|
||||||
|
}
|
||||||
|
vh, err := root()
|
||||||
|
if err != nil {
|
||||||
|
return false, big.Zero(), xerrors.Errorf("loading datacap actor: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var dcap abi.StoragePower
|
||||||
|
if found, err := vh.Get(abi.IdAddrKey(addr), &dcap); err != nil {
|
||||||
|
return false, big.Zero(), xerrors.Errorf("looking up addr: %w", err)
|
||||||
|
} else if !found {
|
||||||
|
return false, big.Zero(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, big.Div(dcap, verifreg.DataCapGranularity), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func forEachClient(store adt.Store, ver actors.Version, root rootFunc, cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
|
vh, err := root()
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("loading verified clients: %w", err)
|
||||||
|
}
|
||||||
|
var dcap abi.StoragePower
|
||||||
|
return vh.ForEach(&dcap, func(key string) error {
|
||||||
|
id, n, err := varint.FromUvarint([]byte(key))
|
||||||
|
if n != len([]byte(key)) {
|
||||||
|
return xerrors.Errorf("could not get varint from address string")
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
a, err := address.NewIDAddress(id)
|
||||||
|
|
||||||
|
return cb(a, big.Div(dcap, verifreg.DataCapGranularity))
|
||||||
|
})
|
||||||
|
}
|
81
chain/actors/builtin/datacap/v9.go
generated
Normal file
81
chain/actors/builtin/datacap/v9.go
generated
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package datacap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
datacap9 "github.com/filecoin-project/go-state-types/builtin/v9/datacap"
|
||||||
|
adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ State = (*state9)(nil)
|
||||||
|
|
||||||
|
func load9(store adt.Store, root cid.Cid) (State, error) {
|
||||||
|
out := state9{store: store}
|
||||||
|
err := store.Get(store.Context(), root, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func make9(store adt.Store, governor address.Address, bitwidth uint64) (State, error) {
|
||||||
|
out := state9{store: store}
|
||||||
|
s, err := datacap9.ConstructState(store, governor, bitwidth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out.State = *s
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type state9 struct {
|
||||||
|
datacap9.State
|
||||||
|
store adt.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) Governor() (address.Address, error) {
|
||||||
|
return s.State.Governor, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
|
return forEachClient(s.store, actors.Version9, s.verifiedClients, cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) verifiedClients() (adt.Map, error) {
|
||||||
|
return adt9.AsMap(s.store, s.Token.Balances, int(s.Token.HamtBitWidth))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) {
|
||||||
|
return getDataCap(s.store, actors.Version9, s.verifiedClients, addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorKey() string {
|
||||||
|
return actors.DatacapKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version9
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
@ -67,6 +67,10 @@ func MakeState(store adt.Store, av actorstypes.Version, networkName string) (Sta
|
|||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
ResolveAddress(address address.Address) (address.Address, bool, error)
|
ResolveAddress(address address.Address) (address.Address, bool, error)
|
||||||
MapAddressToNewID(address address.Address) (address.Address, error)
|
MapAddressToNewID(address address.Address) (address.Address, error)
|
||||||
NetworkName() (dtypes.NetworkName, error)
|
NetworkName() (dtypes.NetworkName, error)
|
||||||
@ -87,6 +91,16 @@ type State interface {
|
|||||||
// Sets the address map for the init actor. This should only be used for testing.
|
// Sets the address map for the init actor. This should only be used for testing.
|
||||||
SetAddressMap(mcid cid.Cid) error
|
SetAddressMap(mcid cid.Cid) error
|
||||||
|
|
||||||
AddressMap() (adt.Map, error)
|
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
|
|
||||||
|
AddressMap() (adt.Map, error)
|
||||||
|
AddressMapBitWidth() int
|
||||||
|
AddressMapHashFunction() func(input []byte) []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{ {{range .versions}}
|
||||||
|
(&state{{.}}{}).Code(),
|
||||||
|
{{- end}}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,10 @@ func MakeState(store adt.Store, av actorstypes.Version, networkName string) (Sta
|
|||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
ResolveAddress(address address.Address) (address.Address, bool, error)
|
ResolveAddress(address address.Address) (address.Address, bool, error)
|
||||||
MapAddressToNewID(address address.Address) (address.Address, error)
|
MapAddressToNewID(address address.Address) (address.Address, error)
|
||||||
NetworkName() (dtypes.NetworkName, error)
|
NetworkName() (dtypes.NetworkName, error)
|
||||||
@ -130,6 +134,23 @@ type State interface {
|
|||||||
// Sets the address map for the init actor. This should only be used for testing.
|
// Sets the address map for the init actor. This should only be used for testing.
|
||||||
SetAddressMap(mcid cid.Cid) error
|
SetAddressMap(mcid cid.Cid) error
|
||||||
|
|
||||||
AddressMap() (adt.Map, error)
|
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
|
|
||||||
|
AddressMap() (adt.Map, error)
|
||||||
|
AddressMapBitWidth() int
|
||||||
|
AddressMapHashFunction() func(input []byte) []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{
|
||||||
|
(&state0{}).Code(),
|
||||||
|
(&state2{}).Code(),
|
||||||
|
(&state3{}).Code(),
|
||||||
|
(&state4{}).Code(),
|
||||||
|
(&state5{}).Code(),
|
||||||
|
(&state6{}).Code(),
|
||||||
|
(&state7{}).Code(),
|
||||||
|
(&state8{}).Code(),
|
||||||
|
(&state9{}).Code(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
|
|
||||||
{{if (le .v 7)}}
|
{{if (le .v 7)}}
|
||||||
@ -119,10 +124,42 @@ func (s *state{{.v}}) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) AddressMap() (adt.Map, error) {
|
func (s *state{{.v}}) AddressMap() (adt.Map, error) {
|
||||||
return adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
return adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) GetState() interface{} {
|
func (s *state{{.v}}) AddressMapBitWidth() int {
|
||||||
return &s.State
|
{{- if (ge .v 3)}}
|
||||||
}
|
return builtin{{.v}}.DefaultHamtBitwidth
|
||||||
|
{{- else}}
|
||||||
|
return 5
|
||||||
|
{{- end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version{{.v}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
37
chain/actors/builtin/init/v0.go
generated
37
chain/actors/builtin/init/v0.go
generated
@ -1,15 +1,20 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
init0 "github.com/filecoin-project/specs-actors/actors/builtin/init"
|
init0 "github.com/filecoin-project/specs-actors/actors/builtin/init"
|
||||||
adt0 "github.com/filecoin-project/specs-actors/actors/util/adt"
|
adt0 "github.com/filecoin-project/specs-actors/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -103,10 +108,38 @@ func (s *state0) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state0) AddressMap() (adt.Map, error) {
|
func (s *state0) AddressMap() (adt.Map, error) {
|
||||||
return adt0.AsMap(s.store, s.State.AddressMap)
|
return adt0.AsMap(s.store, s.State.AddressMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state0) GetState() interface{} {
|
func (s *state0) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return 5
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v2.go
generated
37
chain/actors/builtin/init/v2.go
generated
@ -1,15 +1,20 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init"
|
init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init"
|
||||||
adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt"
|
adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -103,10 +108,38 @@ func (s *state2) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state2) AddressMap() (adt.Map, error) {
|
func (s *state2) AddressMap() (adt.Map, error) {
|
||||||
return adt2.AsMap(s.store, s.State.AddressMap)
|
return adt2.AsMap(s.store, s.State.AddressMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state2) GetState() interface{} {
|
func (s *state2) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return 5
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version2
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state2) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v3.go
generated
37
chain/actors/builtin/init/v3.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin"
|
builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin"
|
||||||
init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init"
|
init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init"
|
||||||
adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt"
|
adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state3) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state3) AddressMap() (adt.Map, error) {
|
func (s *state3) AddressMap() (adt.Map, error) {
|
||||||
return adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth)
|
return adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state3) GetState() interface{} {
|
func (s *state3) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin3.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version3
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state3) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v4.go
generated
37
chain/actors/builtin/init/v4.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
||||||
init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init"
|
init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init"
|
||||||
adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt"
|
adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state4) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state4) AddressMap() (adt.Map, error) {
|
func (s *state4) AddressMap() (adt.Map, error) {
|
||||||
return adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth)
|
return adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state4) GetState() interface{} {
|
func (s *state4) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin4.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version4
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state4) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v5.go
generated
37
chain/actors/builtin/init/v5.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin"
|
builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin"
|
||||||
init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init"
|
init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init"
|
||||||
adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt"
|
adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state5) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state5) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state5) AddressMap() (adt.Map, error) {
|
func (s *state5) AddressMap() (adt.Map, error) {
|
||||||
return adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth)
|
return adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state5) GetState() interface{} {
|
func (s *state5) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin5.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version5
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state5) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v6.go
generated
37
chain/actors/builtin/init/v6.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin"
|
builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin"
|
||||||
init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init"
|
init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init"
|
||||||
adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt"
|
adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state6) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state6) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state6) AddressMap() (adt.Map, error) {
|
func (s *state6) AddressMap() (adt.Map, error) {
|
||||||
return adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth)
|
return adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state6) GetState() interface{} {
|
func (s *state6) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin6.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version6
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state6) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v7.go
generated
37
chain/actors/builtin/init/v7.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin"
|
builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin"
|
||||||
init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init"
|
init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init"
|
||||||
adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt"
|
adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state7) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state7) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state7) AddressMap() (adt.Map, error) {
|
func (s *state7) AddressMap() (adt.Map, error) {
|
||||||
return adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth)
|
return adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state7) GetState() interface{} {
|
func (s *state7) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin7.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version7
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state7) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v8.go
generated
37
chain/actors/builtin/init/v8.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin8 "github.com/filecoin-project/go-state-types/builtin"
|
builtin8 "github.com/filecoin-project/go-state-types/builtin"
|
||||||
init8 "github.com/filecoin-project/go-state-types/builtin/v8/init"
|
init8 "github.com/filecoin-project/go-state-types/builtin/v8/init"
|
||||||
adt8 "github.com/filecoin-project/go-state-types/builtin/v8/util/adt"
|
adt8 "github.com/filecoin-project/go-state-types/builtin/v8/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state8) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state8) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state8) AddressMap() (adt.Map, error) {
|
func (s *state8) AddressMap() (adt.Map, error) {
|
||||||
return adt8.AsMap(s.store, s.State.AddressMap, builtin8.DefaultHamtBitwidth)
|
return adt8.AsMap(s.store, s.State.AddressMap, builtin8.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state8) GetState() interface{} {
|
func (s *state8) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin8.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version8
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state8) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
37
chain/actors/builtin/init/v9.go
generated
37
chain/actors/builtin/init/v9.go
generated
@ -1,16 +1,21 @@
|
|||||||
package init
|
package init
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
builtin9 "github.com/filecoin-project/go-state-types/builtin"
|
builtin9 "github.com/filecoin-project/go-state-types/builtin"
|
||||||
init9 "github.com/filecoin-project/go-state-types/builtin/v9/init"
|
init9 "github.com/filecoin-project/go-state-types/builtin/v9/init"
|
||||||
adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt"
|
adt9 "github.com/filecoin-project/go-state-types/builtin/v9/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
@ -104,10 +109,38 @@ func (s *state9) SetAddressMap(mcid cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state9) GetState() interface{} {
|
||||||
|
return &s.State
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state9) AddressMap() (adt.Map, error) {
|
func (s *state9) AddressMap() (adt.Map, error) {
|
||||||
return adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth)
|
return adt9.AsMap(s.store, s.State.AddressMap, builtin9.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *state9) GetState() interface{} {
|
func (s *state9) AddressMapBitWidth() int {
|
||||||
return &s.State
|
return builtin9.DefaultHamtBitwidth
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) AddressMapHashFunction() func(input []byte) []byte {
|
||||||
|
return func(input []byte) []byte {
|
||||||
|
res := sha256.Sum256(input)
|
||||||
|
return res[:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorKey() string {
|
||||||
|
return actors.InitKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version9
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state9) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package market
|
package market
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
@ -13,7 +14,8 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/cbor"
|
"github.com/filecoin-project/go-state-types/cbor"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
|
||||||
markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market"
|
markettypes "github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
{{range .versions}}
|
{{range .versions}}
|
||||||
{{if (le . 7)}}
|
{{if (le . 7)}}
|
||||||
builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin"
|
builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin"
|
||||||
@ -72,6 +74,11 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) {
|
|||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
BalancesChanged(State) (bool, error)
|
BalancesChanged(State) (bool, error)
|
||||||
EscrowTable() (BalanceTable, error)
|
EscrowTable() (BalanceTable, error)
|
||||||
LockedTable() (BalanceTable, error)
|
LockedTable() (BalanceTable, error)
|
||||||
@ -85,6 +92,7 @@ type State interface {
|
|||||||
) (weight, verifiedWeight abi.DealWeight, err error)
|
) (weight, verifiedWeight abi.DealWeight, err error)
|
||||||
NextID() (abi.DealID, error)
|
NextID() (abi.DealID, error)
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
|
GetAllocationIdForPendingDeal(dealId abi.DealID) (verifregtypes.AllocationId, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type BalanceTable interface {
|
type BalanceTable interface {
|
||||||
@ -198,3 +206,10 @@ func labelFromGoString(s string) (markettypes.DealLabel, error) {
|
|||||||
return markettypes.NewLabelFromBytes([]byte(s))
|
return markettypes.NewLabelFromBytes([]byte(s))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{ {{range .versions}}
|
||||||
|
(&state{{.}}{}).Code(),
|
||||||
|
{{- end}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3,6 +3,7 @@ package market
|
|||||||
import (
|
import (
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
@ -11,7 +12,8 @@ import (
|
|||||||
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
builtintypes "github.com/filecoin-project/go-state-types/builtin"
|
builtintypes "github.com/filecoin-project/go-state-types/builtin"
|
||||||
markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market"
|
markettypes "github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/cbor"
|
"github.com/filecoin-project/go-state-types/cbor"
|
||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
|
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
|
||||||
@ -113,6 +115,11 @@ func MakeState(store adt.Store, av actorstypes.Version) (State, error) {
|
|||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
|
Code() cid.Cid
|
||||||
|
ActorKey() string
|
||||||
|
ActorVersion() actorstypes.Version
|
||||||
|
|
||||||
BalancesChanged(State) (bool, error)
|
BalancesChanged(State) (bool, error)
|
||||||
EscrowTable() (BalanceTable, error)
|
EscrowTable() (BalanceTable, error)
|
||||||
LockedTable() (BalanceTable, error)
|
LockedTable() (BalanceTable, error)
|
||||||
@ -126,6 +133,7 @@ type State interface {
|
|||||||
) (weight, verifiedWeight abi.DealWeight, err error)
|
) (weight, verifiedWeight abi.DealWeight, err error)
|
||||||
NextID() (abi.DealID, error)
|
NextID() (abi.DealID, error)
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
|
GetAllocationIdForPendingDeal(dealId abi.DealID) (verifregtypes.AllocationId, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type BalanceTable interface {
|
type BalanceTable interface {
|
||||||
@ -262,3 +270,17 @@ func labelFromGoString(s string) (markettypes.DealLabel, error) {
|
|||||||
return markettypes.NewLabelFromBytes([]byte(s))
|
return markettypes.NewLabelFromBytes([]byte(s))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AllCodes() []cid.Cid {
|
||||||
|
return []cid.Cid{
|
||||||
|
(&state0{}).Code(),
|
||||||
|
(&state2{}).Code(),
|
||||||
|
(&state3{}).Code(),
|
||||||
|
(&state4{}).Code(),
|
||||||
|
(&state5{}).Code(),
|
||||||
|
(&state6{}).Code(),
|
||||||
|
(&state7{}).Code(),
|
||||||
|
(&state8{}).Code(),
|
||||||
|
(&state9{}).Code(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package market
|
package market
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -14,17 +15,23 @@ import (
|
|||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
|
|
||||||
{{if (le .v 7)}}
|
{{if (le .v 7)}}
|
||||||
market{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/market"
|
market{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/market"
|
||||||
adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt"
|
adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt"
|
||||||
{{else}}
|
{{else}}
|
||||||
market{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}market"
|
market{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}market"
|
||||||
markettypes "github.com/filecoin-project/go-state-types/builtin/v8/market"
|
markettypes "github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt"
|
adt{{.v}} "github.com/filecoin-project/go-state-types/builtin{{.import}}util/adt"
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if (ge .v 9)}}
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin"
|
||||||
|
{{end}}
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ State = (*state{{.v}})(nil)
|
var _ State = (*state{{.v}})(nil)
|
||||||
@ -201,7 +208,16 @@ func (s *dealStates{{.v}}) array() adt.Array {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fromV{{.v}}DealState(v{{.v}} market{{.v}}.DealState) DealState {
|
func fromV{{.v}}DealState(v{{.v}} market{{.v}}.DealState) DealState {
|
||||||
return (DealState)(v{{.v}})
|
{{if (le .v 8)}}
|
||||||
|
return DealState{
|
||||||
|
SectorStartEpoch: v{{.v}}.SectorStartEpoch,
|
||||||
|
LastUpdatedEpoch: v{{.v}}.LastUpdatedEpoch,
|
||||||
|
SlashEpoch: v{{.v}}.SlashEpoch,
|
||||||
|
VerifiedClaim: 0,
|
||||||
|
}
|
||||||
|
{{else}}
|
||||||
|
return (DealState)(v{{.v}})
|
||||||
|
{{end}}
|
||||||
}
|
}
|
||||||
|
|
||||||
type dealProposals{{.v}} struct {
|
type dealProposals{{.v}} struct {
|
||||||
@ -352,3 +368,43 @@ func (r *publishStorageDealsReturn{{.v}}) IsDealValid(index uint64) (bool, int,
|
|||||||
func (r *publishStorageDealsReturn{{.v}}) DealIDs() ([]abi.DealID, error) {
|
func (r *publishStorageDealsReturn{{.v}}) DealIDs() ([]abi.DealID, error) {
|
||||||
return r.IDs, nil
|
return r.IDs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) GetAllocationIdForPendingDeal(dealId abi.DealID) (verifregtypes.AllocationId, error) {
|
||||||
|
{{if (le .v 8)}}
|
||||||
|
return verifregtypes.NoAllocationID, xerrors.Errorf("unsupported before actors v9")
|
||||||
|
{{else}}
|
||||||
|
allocations, err := adt9.AsMap(s.store, s.PendingDealAllocationIds, builtin.DefaultHamtBitwidth)
|
||||||
|
if err != nil {
|
||||||
|
return verifregtypes.NoAllocationID, xerrors.Errorf("failed to load allocation id for %d: %w", dealId, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var allocationId cbg.CborInt
|
||||||
|
found, err := allocations.Get(abi.UIntKey(uint64(dealId)), &allocationId)
|
||||||
|
if err != nil {
|
||||||
|
return verifregtypes.NoAllocationID, xerrors.Errorf("failed to load allocation id for %d: %w", dealId, err)
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
return verifregtypes.NoAllocationID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return verifregtypes.AllocationId(allocationId), nil
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorKey() string {
|
||||||
|
return actors.MarketKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version{{.v}}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
36
chain/actors/builtin/market/v0.go
generated
36
chain/actors/builtin/market/v0.go
generated
@ -2,6 +2,7 @@ package market
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
@ -9,9 +10,12 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
market0 "github.com/filecoin-project/specs-actors/actors/builtin/market"
|
market0 "github.com/filecoin-project/specs-actors/actors/builtin/market"
|
||||||
adt0 "github.com/filecoin-project/specs-actors/actors/util/adt"
|
adt0 "github.com/filecoin-project/specs-actors/actors/util/adt"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
)
|
)
|
||||||
@ -183,7 +187,14 @@ func (s *dealStates0) array() adt.Array {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fromV0DealState(v0 market0.DealState) DealState {
|
func fromV0DealState(v0 market0.DealState) DealState {
|
||||||
return (DealState)(v0)
|
|
||||||
|
return DealState{
|
||||||
|
SectorStartEpoch: v0.SectorStartEpoch,
|
||||||
|
LastUpdatedEpoch: v0.LastUpdatedEpoch,
|
||||||
|
SlashEpoch: v0.SlashEpoch,
|
||||||
|
VerifiedClaim: 0,
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type dealProposals0 struct {
|
type dealProposals0 struct {
|
||||||
@ -293,3 +304,26 @@ func (r *publishStorageDealsReturn0) IsDealValid(index uint64) (bool, int, error
|
|||||||
func (r *publishStorageDealsReturn0) DealIDs() ([]abi.DealID, error) {
|
func (r *publishStorageDealsReturn0) DealIDs() ([]abi.DealID, error) {
|
||||||
return r.IDs, nil
|
return r.IDs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) GetAllocationIdForPendingDeal(dealId abi.DealID) (verifregtypes.AllocationId, error) {
|
||||||
|
|
||||||
|
return verifregtypes.NoAllocationID, xerrors.Errorf("unsupported before actors v9")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorKey() string {
|
||||||
|
return actors.MarketKey
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) ActorVersion() actorstypes.Version {
|
||||||
|
return actorstypes.Version0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *state0) Code() cid.Cid {
|
||||||
|
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user