diff --git a/.circleci/config.yml b/.circleci/config.yml index 81fdd0db9..c3a8f674a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -328,56 +328,6 @@ jobs: - run: ./scripts/generate-checksums.sh - run: ./scripts/publish-checksums.sh - build-appimage: - machine: - image: ubuntu-2004:202111-02 - steps: - - checkout - - attach_workspace: - at: /tmp/workspace - - run: - name: Update Go - command: | - 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 - - run: go version - - run: - name: install appimage-builder - command: | - # appimage-builder requires /dev/snd to exist. It creates containers during the testing phase - # that pass sound devices from the host to the testing container. (hard coded!) - # https://github.com/AppImageCrafters/appimage-builder/blob/master/appimagebuilder/modules/test/execution_test.py#L54 - # Circleci doesn't provide a working sound device; this is enough to fake it. - if [ ! -e /dev/snd ] - then - sudo mkdir /dev/snd - sudo mknod /dev/snd/ControlC0 c 1 2 - fi - - # docs: https://appimage-builder.readthedocs.io/en/latest/intro/install.html - sudo apt update - sudo apt install -y python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace - sudo curl -Lo /usr/local/bin/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage - sudo chmod +x /usr/local/bin/appimagetool - sudo pip3 install appimage-builder - - run: - name: install lotus dependencies - command: sudo apt install ocl-icd-opencl-dev libhwloc-dev - - run: - name: build appimage - command: | - sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml - make appimage - - run: | - mkdir -p /tmp/workspace/appimage && \ - mv Lotus-*.AppImage /tmp/workspace/appimage/ - - persist_to_workspace: - root: /tmp/workspace - paths: - - appimage - - gofmt: executor: golang steps: @@ -444,72 +394,6 @@ jobs: lint-all: <<: *lint - publish: - description: publish binary artifacts - executor: ubuntu - parameters: - linux: - default: false - description: publish linux binaries? - type: boolean - appimage: - default: false - description: publish appimage binaries? - type: boolean - steps: - - run: - name: Install git jq curl - command: apt update && apt install -y git jq curl sudo - - checkout - - git_fetch_all_tags - - checkout - - install_ipfs - - attach_workspace: - at: /tmp/workspace - - when: - condition: << parameters.linux >> - steps: - - run: ./scripts/build-arch-bundle.sh linux - - run: ./scripts/publish-arch-release.sh linux - - when: - condition: << parameters.appimage >> - steps: - - run: ./scripts/build-appimage-bundle.sh - - run: ./scripts/publish-arch-release.sh appimage - - publish-snapcraft: - description: build and push snapcraft - machine: - image: ubuntu-2004:202104-01 - resource_class: 2xlarge - parameters: - channel: - type: string - default: "edge" - description: snapcraft channel - snap-name: - type: string - default: 'lotus-filecoin' - description: name of snap in snap store - steps: - - checkout - - run: - name: Install snapcraft - command: sudo snap install snapcraft --classic - - run: - name: Build << parameters.snap-name >> snap - command: | - if [ "<< parameters.snap-name >>" != 'lotus-filecoin' ]; then - cat snap/snapcraft.yaml | sed 's/lotus-filecoin/lotus/' > edited-snapcraft.yaml - mv edited-snapcraft.yaml snap/snapcraft.yaml - fi - - snapcraft --use-lxd --debug - - run: - name: Publish snap to << parameters.channel >> channel - shell: /bin/bash -o pipefail - command: | - snapcraft upload *.snap --release << parameters.channel >> build-docker: description: > Publish to Dockerhub @@ -550,7 +434,7 @@ jobs: equal: [ mainnet, <> ] steps: - when: - condition: > + condition: <> steps: - docker/build: image: filecoin/<> @@ -561,7 +445,7 @@ jobs: command: | docker push filecoin/<>:<> if [[ ! -z $CIRCLE_SHA ]]; then - docker image tag filecoin/<>:<>> filecoin/<>:"${CIRCLE_SHA:0:7}" + docker image tag filecoin/<>:<> filecoin/<>:"${CIRCLE_SHA:0:7}" docker push filecoin/<>:"${CIRCLE_SHA:0:7}" fi if [[ ! -z $CIRCLE_TAG ]]; then @@ -589,7 +473,7 @@ jobs: - run: name: Docker push command: | - docker push filecoin/<>:<>-<> + docker push filecoin/<>:<> if [[ ! -z $CIRCLE_SHA ]]; then docker image tag filecoin/<>:<>-<> filecoin/<>:"${CIRCLE_SHA:0:7}"-<> docker push filecoin/<>:"${CIRCLE_SHA:0:7}"-<> @@ -1073,71 +957,6 @@ workflows: 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: - name: "Publish AppImage" - appimage: true - requires: - - "Build AppImage" - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - - publish-snapcraft: - name: "Publish Snapcraft (lotus / stable)" - channel: stable - snap-name: lotus - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+$/ - - publish-snapcraft: - name: "Publish Snapcraft (lotus / candidate)" - channel: candidate - snap-name: lotus - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+-rc\d+$/ - - publish-snapcraft: - name: "Publish Snapcraft (lotus-filecoin / stable)" - channel: stable - snap-name: lotus-filecoin - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+$/ - - publish-snapcraft: - name: "Publish Snapcraft (lotus-filecoin / candidate)" - channel: candidate - snap-name: lotus-filecoin - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+-rc\d+$/ - build-docker: name: "Docker push (lotus-all-in-one / stable / mainnet)" image: lotus-all-in-one @@ -1373,14 +1192,6 @@ workflows: only: - master jobs: - - publish-snapcraft: - name: "Publish Snapcraft (lotus / edge)" - channel: edge - snap-name: lotus - - publish-snapcraft: - name: "Publish Snapcraft (lotus-filecoin / edge)" - channel: edge - snap-name: lotus-filecoin - build-docker: name: "Docker (lotus-all-in-one / nightly / mainnet)" image: lotus-all-in-one diff --git a/.circleci/gen.go b/.circleci/gen.go index 6cc9cedb1..5d951027a 100644 --- a/.circleci/gen.go +++ b/.circleci/gen.go @@ -107,13 +107,11 @@ func main() { // form the input data. type data struct { Networks []string - SnapNames []string ItestFiles []string UnitSuites map[string]string } in := data{ Networks: []string{"mainnet", "butterflynet", "calibnet", "debug"}, - SnapNames: []string{"lotus", "lotus-filecoin"}, ItestFiles: itests, UnitSuites: func() map[string]string { ret := make(map[string]string) diff --git a/.circleci/template.yml b/.circleci/template.yml index 6906f13f4..44db05beb 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -328,56 +328,6 @@ jobs: - run: ./scripts/generate-checksums.sh - run: ./scripts/publish-checksums.sh - build-appimage: - machine: - image: ubuntu-2004:202111-02 - steps: - - checkout - - attach_workspace: - at: /tmp/workspace - - run: - name: Update Go - command: | - 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 - - run: go version - - run: - name: install appimage-builder - command: | - # appimage-builder requires /dev/snd to exist. It creates containers during the testing phase - # that pass sound devices from the host to the testing container. (hard coded!) - # https://github.com/AppImageCrafters/appimage-builder/blob/master/appimagebuilder/modules/test/execution_test.py#L54 - # Circleci doesn't provide a working sound device; this is enough to fake it. - if [ ! -e /dev/snd ] - then - sudo mkdir /dev/snd - sudo mknod /dev/snd/ControlC0 c 1 2 - fi - - # docs: https://appimage-builder.readthedocs.io/en/latest/intro/install.html - sudo apt update - sudo apt install -y python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace - sudo curl -Lo /usr/local/bin/appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage - sudo chmod +x /usr/local/bin/appimagetool - sudo pip3 install appimage-builder - - run: - name: install lotus dependencies - command: sudo apt install ocl-icd-opencl-dev libhwloc-dev - - run: - name: build appimage - command: | - sed -i "s/version: latest/version: ${CIRCLE_TAG:-latest}/" AppImageBuilder.yml - make appimage - - run: | - mkdir -p /tmp/workspace/appimage && \ - mv Lotus-*.AppImage /tmp/workspace/appimage/ - - persist_to_workspace: - root: /tmp/workspace - paths: - - appimage - - gofmt: executor: golang steps: @@ -444,72 +394,6 @@ jobs: lint-all: <<: *lint - publish: - description: publish binary artifacts - executor: ubuntu - parameters: - linux: - default: false - description: publish linux binaries? - type: boolean - appimage: - default: false - description: publish appimage binaries? - type: boolean - steps: - - run: - name: Install git jq curl - command: apt update && apt install -y git jq curl sudo - - checkout - - git_fetch_all_tags - - checkout - - install_ipfs - - attach_workspace: - at: /tmp/workspace - - when: - condition: << parameters.linux >> - steps: - - run: ./scripts/build-arch-bundle.sh linux - - run: ./scripts/publish-arch-release.sh linux - - when: - condition: << parameters.appimage >> - steps: - - run: ./scripts/build-appimage-bundle.sh - - run: ./scripts/publish-arch-release.sh appimage - - publish-snapcraft: - description: build and push snapcraft - machine: - image: ubuntu-2004:202104-01 - resource_class: 2xlarge - parameters: - channel: - type: string - default: "edge" - description: snapcraft channel - snap-name: - type: string - default: 'lotus-filecoin' - description: name of snap in snap store - steps: - - checkout - - run: - name: Install snapcraft - command: sudo snap install snapcraft --classic - - run: - name: Build << parameters.snap-name >> snap - command: | - if [ "<< parameters.snap-name >>" != 'lotus-filecoin' ]; then - cat snap/snapcraft.yaml | sed 's/lotus-filecoin/lotus/' > edited-snapcraft.yaml - mv edited-snapcraft.yaml snap/snapcraft.yaml - fi - - snapcraft --use-lxd --debug - - run: - name: Publish snap to << parameters.channel >> channel - shell: /bin/bash -o pipefail - command: | - snapcraft upload *.snap --release << parameters.channel >> build-docker: description: > Publish to Dockerhub @@ -550,7 +434,7 @@ jobs: equal: [ mainnet, <> ] steps: - when: - condition: > + condition: <> steps: - docker/build: image: filecoin/<> @@ -561,7 +445,7 @@ jobs: command: | docker push filecoin/<>:<> if [["[[ ! -z $CIRCLE_SHA ]]"]]; then - docker image tag filecoin/<>:<>> filecoin/<>:"${CIRCLE_SHA:0:7}" + docker image tag filecoin/<>:<> filecoin/<>:"${CIRCLE_SHA:0:7}" docker push filecoin/<>:"${CIRCLE_SHA:0:7}" fi if [["[[ ! -z $CIRCLE_TAG ]]"]]; then @@ -589,7 +473,7 @@ jobs: - run: name: Docker push command: | - docker push filecoin/<>:<>-<> + docker push filecoin/<>:<> if [["[[ ! -z $CIRCLE_SHA ]]"]]; then docker image tag filecoin/<>:<>-<> filecoin/<>:"${CIRCLE_SHA:0:7}"-<> docker push filecoin/<>:"${CIRCLE_SHA:0:7}"-<> @@ -698,51 +582,6 @@ workflows: 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: - name: "Publish AppImage" - appimage: true - requires: - - "Build AppImage" - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - [[- range .SnapNames]] - - publish-snapcraft: - name: "Publish Snapcraft ([[.]] / stable)" - channel: stable - snap-name: [[.]] - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+$/ - - publish-snapcraft: - name: "Publish Snapcraft ([[.]] / candidate)" - channel: candidate - snap-name: [[.]] - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+-rc\d+$/ - [[- end]] [[- range .Networks]] - build-docker: name: "Docker push (lotus-all-in-one / stable / [[.]])" @@ -845,12 +684,6 @@ workflows: only: - master jobs: - [[- range .SnapNames]] - - publish-snapcraft: - name: "Publish Snapcraft ([[.]] / edge)" - channel: edge - snap-name: [[.]] - [[- end]] [[- range .Networks]] - build-docker: name: "Docker (lotus-all-in-one / nightly / [[.]])" diff --git a/Makefile b/Makefile index c085faafb..dedc061b5 100644 --- a/Makefile +++ b/Makefile @@ -84,9 +84,6 @@ butterflynet: build-devnets interopnet: GOFLAGS+=-tags=interopnet interopnet: build-devnets -wallabynet: GOFLAGS+=-tags=wallabynet -wallabynet: build-devnets - hyperspacenet: GOFLAGS+=-tags=hyperspacenet hyperspacenet: build-devnets diff --git a/build/bootstrap/wallabynet.pi b/build/bootstrap/wallabynet.pi deleted file mode 100644 index 322e550bb..000000000 --- a/build/bootstrap/wallabynet.pi +++ /dev/null @@ -1,4 +0,0 @@ -/dns4/de0.bootstrap.wallaby.network/tcp/1337/p2p/12D3KooWHAvUVk5XuxSwi2dNLWbTDDRSGeHxMuWdQ3SQpRuNHbLz -/dns4/de1.bootstrap.wallaby.network/tcp/1337/p2p/12D3KooWBRqtxhJCtiLmCwKgAQozJtdGinEDdJGoS5oHw7vCjMGc -/dns4/ca0.bootstrap.wallaby.network/tcp/1337/p2p/12D3KooWCApBpUk7EX9pmEfyky1gKC6N2KJ74S1AwFfvnkDqw3pK -/dns4/sg0.bootstrap.wallaby.network/tcp/1337/p2p/12D3KooWLnYqr4hRoNHBJQVXsFGkDoKuoVfw5R2ASw1bHzrWU5Px \ No newline at end of file diff --git a/build/params_mainnet.go b/build/params_mainnet.go index b368763b4..bad165187 100644 --- a/build/params_mainnet.go +++ b/build/params_mainnet.go @@ -1,5 +1,5 @@ -//go:build !debug && !2k && !testground && !calibnet && !butterflynet && !interopnet && !wallabynet && !hyperspacenet -// +build !debug,!2k,!testground,!calibnet,!butterflynet,!interopnet,!wallabynet,!hyperspacenet +//go:build !debug && !2k && !testground && !calibnet && !butterflynet && !interopnet && !hyperspacenet +// +build !debug,!2k,!testground,!calibnet,!butterflynet,!interopnet,!hyperspacenet package build diff --git a/build/params_testground.go b/build/params_testground.go index ed818f4a5..17ea5a59b 100644 --- a/build/params_testground.go +++ b/build/params_testground.go @@ -42,9 +42,6 @@ var ( AllowableClockDriftSecs = uint64(1) - Finality = policy.ChainFinality - ForkLengthThreshold = Finality - SlashablePowerDelay = 20 InteractivePoRepConfidence = 6 @@ -130,6 +127,9 @@ var ( GenesisFile = "" ) +const Finality = policy.ChainFinality +const ForkLengthThreshold = Finality + const BootstrapPeerThreshold = 1 // ChainId defines the chain ID used in the Ethereum JSON-RPC endpoint. diff --git a/build/params_wallaby.go b/build/params_wallaby.go deleted file mode 100644 index f9b44bcdf..000000000 --- a/build/params_wallaby.go +++ /dev/null @@ -1,96 +0,0 @@ -//go:build wallabynet -// +build wallabynet - -package build - -import ( - "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" - "github.com/filecoin-project/go-state-types/network" - builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" - - "github.com/filecoin-project/lotus/chain/actors/policy" -) - -var NetworkBundle = "wallaby" -var BundleOverrides map[actorstypes.Version]string -var ActorDebugging = false - -const BootstrappersFile = "wallabynet.pi" -const GenesisFile = "wallabynet.car" - -const GenesisNetworkVersion = network.Version18 - -var UpgradeBreezeHeight = abi.ChainEpoch(-1) - -const BreezeGasTampingDuration = 120 - -var UpgradeSmokeHeight = abi.ChainEpoch(-1) -var UpgradeIgnitionHeight = abi.ChainEpoch(-2) -var UpgradeRefuelHeight = abi.ChainEpoch(-3) -var UpgradeTapeHeight = abi.ChainEpoch(-4) - -var UpgradeAssemblyHeight = abi.ChainEpoch(-5) -var UpgradeLiftoffHeight = abi.ChainEpoch(-6) - -var UpgradeKumquatHeight = abi.ChainEpoch(-7) -var UpgradeCalicoHeight = abi.ChainEpoch(-9) -var UpgradePersianHeight = abi.ChainEpoch(-10) -var UpgradeOrangeHeight = abi.ChainEpoch(-11) -var UpgradeClausHeight = abi.ChainEpoch(-12) - -var UpgradeTrustHeight = abi.ChainEpoch(-13) - -var UpgradeNorwegianHeight = abi.ChainEpoch(-14) - -var UpgradeTurboHeight = abi.ChainEpoch(-15) - -var UpgradeHyperdriveHeight = abi.ChainEpoch(-16) -var UpgradeChocolateHeight = abi.ChainEpoch(-17) -var UpgradeOhSnapHeight = abi.ChainEpoch(-18) -var UpgradeSkyrHeight = abi.ChainEpoch(-19) -var UpgradeSharkHeight = abi.ChainEpoch(-20) -var UpgradeHyggeHeight = abi.ChainEpoch(-21) - -var UpgradeHyperspaceNV19Height = abi.ChainEpoch(99999999999999) - -var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ - 0: DrandMainnet, -} - -var SupportedProofTypes = []abi.RegisteredSealProof{ - abi.RegisteredSealProof_StackedDrg512MiBV1, - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, -} -var ConsensusMinerMinPower = abi.NewStoragePower(16 << 30) -var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) -var PreCommitChallengeDelay = abi.ChainEpoch(10) - -func init() { - policy.SetSupportedProofTypes(SupportedProofTypes...) - policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) - policy.SetMinVerifiedDealSize(MinVerifiedDealSize) - policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) - - BuildType = BuildWallabynet - SetAddressNetwork(address.Testnet) - Devnet = true - -} - -const BlockDelaySecs = uint64(builtin2.EpochDurationSeconds) - -const PropagationDelaySecs = uint64(6) - -// BootstrapPeerThreshold is the minimum number peers we need to track for a sync worker to start -const BootstrapPeerThreshold = 2 - -// ChainId defines the chain ID used in the Ethereum JSON-RPC endpoint. -// As per https://github.com/ethereum-lists/chains -const Eip155ChainId = 31415 - -var WhitelistedBlock = cid.Undef diff --git a/build/version.go b/build/version.go index 4946059e2..e9cee6ccc 100644 --- a/build/version.go +++ b/build/version.go @@ -13,7 +13,6 @@ const ( BuildCalibnet = 0x4 BuildInteropnet = 0x5 BuildButterflynet = 0x7 - BuildWallabynet = 0x8 BuildHyperspacenet = 0x9 ) @@ -33,8 +32,6 @@ func BuildTypeString() string { return "+interopnet" case BuildButterflynet: return "+butterflynet" - case BuildWallabynet: - return "+wallabynet" case BuildHyperspacenet: return "+hyperspacenet" default: diff --git a/chain/store/snapshot.go b/chain/store/snapshot.go index 3c264d192..e90a60611 100644 --- a/chain/store/snapshot.go +++ b/chain/store/snapshot.go @@ -22,7 +22,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) -const TIPSETKEY_BACKFILL_RANGE = 2 * build.Finality +const TipsetkeyBackfillRange = 2 * build.Finality func (cs *ChainStore) UnionStore() bstore.Blockstore { return bstore.Union(cs.stateBlockstore, cs.chainBlockstore) @@ -116,7 +116,7 @@ func (cs *ChainStore) Import(ctx context.Context, r io.Reader) (*types.TipSet, e } ts := root - for i := 0; i < int(TIPSETKEY_BACKFILL_RANGE); i++ { + for i := 0; i < int(TipsetkeyBackfillRange); i++ { err = cs.PersistTipset(ctx, ts) if err != nil { return nil, err diff --git a/chain/types/ethtypes/eth_types.go b/chain/types/ethtypes/eth_types.go index eb0e12891..235cc7c79 100644 --- a/chain/types/ethtypes/eth_types.go +++ b/chain/types/ethtypes/eth_types.go @@ -364,14 +364,7 @@ func (h *EthHash) UnmarshalJSON(b []byte) error { } func decodeHexString(s string, expectedLen int) ([]byte, error) { - // Strip the leading 0x or 0X prefix since hex.DecodeString does not support it. - if strings.HasPrefix(s, "0x") || strings.HasPrefix(s, "0X") { - s = s[2:] - } - // Sometimes clients will omit a leading zero in a byte; pad so we can decode correctly. - if len(s)%2 == 1 { - s = "0" + s - } + s = handleHexStringPrefix(s) if len(s) != expectedLen*2 { return nil, xerrors.Errorf("expected hex string length sans prefix %d, got %d", expectedLen*2, len(s)) } @@ -382,6 +375,27 @@ func decodeHexString(s string, expectedLen int) ([]byte, error) { return b, nil } +func DecodeHexString(s string) ([]byte, error) { + s = handleHexStringPrefix(s) + b, err := hex.DecodeString(s) + if err != nil { + return nil, xerrors.Errorf("cannot parse hex value: %w", err) + } + return b, nil +} + +func handleHexStringPrefix(s string) string { + // Strip the leading 0x or 0X prefix since hex.DecodeString does not support it. + if strings.HasPrefix(s, "0x") || strings.HasPrefix(s, "0X") { + s = s[2:] + } + // Sometimes clients will omit a leading zero in a byte; pad so we can decode correctly. + if len(s)%2 == 1 { + s = "0" + s + } + return s +} + func EthHashFromCid(c cid.Cid) (EthHash, error) { return ParseEthHash(c.Hash().HexString()[8:]) } diff --git a/cli/evm.go b/cli/evm.go index 738788448..1a1dfa47f 100644 --- a/cli/evm.go +++ b/cli/evm.go @@ -21,6 +21,7 @@ import ( "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types/ethtypes" ) @@ -38,25 +39,13 @@ var EvmCmd = &cli.Command{ } var EvmGetInfoCmd = &cli.Command{ - Name: "stat", - Usage: "Print eth/filecoin addrs and code cid", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "filAddr", - Usage: "Filecoin address", - }, - &cli.StringFlag{ - Name: "ethAddr", - Usage: "Ethereum address", - }, - }, + Name: "stat", + Usage: "Print eth/filecoin addrs and code cid", + ArgsUsage: "address", Action: func(cctx *cli.Context) error { - - filAddr := cctx.String("filAddr") - ethAddr := cctx.String("ethAddr") - - var faddr address.Address - var eaddr ethtypes.EthAddress + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } api, closer, err := GetFullNodeAPI(cctx) if err != nil { @@ -65,39 +54,41 @@ var EvmGetInfoCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if filAddr != "" { - addr, err := address.NewFromString(filAddr) - if err != nil { - return err - } - eaddr, faddr, err = ethAddrFromFilecoinAddress(ctx, addr, api) - if err != nil { - return err - } - } else if ethAddr != "" { - eaddr, err = ethtypes.ParseEthAddress(ethAddr) - if err != nil { - return err + addrString := cctx.Args().Get(0) + + var faddr address.Address + var eaddr ethtypes.EthAddress + addr, err := address.NewFromString(addrString) + if err != nil { // This isn't a filecoin address + eaddr, err = ethtypes.ParseEthAddress(addrString) + if err != nil { // This isn't an Eth address either + return xerrors.Errorf("address is not a filecoin or eth address") } faddr, err = eaddr.ToFilecoinAddress() if err != nil { return err } } else { - return xerrors.Errorf("Neither filAddr nor ethAddr specified") + eaddr, faddr, err = ethAddrFromFilecoinAddress(ctx, addr, api) + if err != nil { + return err + } } actor, err := api.StateGetActor(ctx, faddr, types.EmptyTSK) if err != nil { - return err + fmt.Println("fail to get ID address: ", err.Error()) + + } else { + fmt.Println("ID address: ", actor.Address.String()) + fmt.Println("Code cid: ", actor.Code.String()) + fmt.Println("Actor Type: ", builtin.ActorNameByCode(actor.Code)) } fmt.Println("Filecoin address: ", faddr) fmt.Println("Eth address: ", eaddr) - fmt.Println("Code cid: ", actor.Code.String()) return nil - }, } @@ -121,7 +112,7 @@ var EvmCallSimulateCmd = &cli.Command{ return err } - params, err := hex.DecodeString(cctx.Args().Get(2)) + params, err := ethtypes.DecodeHexString(cctx.Args().Get(2)) if err != nil { return err } @@ -165,7 +156,7 @@ var EvmGetContractAddress = &cli.Command{ return err } - salt, err := hex.DecodeString(cctx.Args().Get(1)) + salt, err := ethtypes.DecodeHexString(cctx.Args().Get(1)) if err != nil { return xerrors.Errorf("Could not decode salt: %w", err) } @@ -184,7 +175,7 @@ var EvmGetContractAddress = &cli.Command{ return err } - contract, err := hex.DecodeString(string(contractHex)) + contract, err := ethtypes.DecodeHexString(string(contractHex)) if err != nil { return xerrors.Errorf("Could not decode contract file: %w", err) } @@ -233,7 +224,7 @@ var EvmDeployCmd = &cli.Command{ return xerrors.Errorf("failed to read contract: %w", err) } if cctx.Bool("hex") { - contract, err = hex.DecodeString(string(contract)) + contract, err = ethtypes.DecodeHexString(string(contract)) if err != nil { return xerrors.Errorf("failed to decode contract: %w", err) } @@ -355,7 +346,7 @@ var EvmInvokeCmd = &cli.Command{ } var calldata []byte - calldata, err = hex.DecodeString(cctx.Args().Get(1)) + calldata, err = ethtypes.DecodeHexString(cctx.Args().Get(1)) if err != nil { return xerrors.Errorf("decoding hex input data: %w", err) } diff --git a/cli/state.go b/cli/state.go index 9513098d3..b904e4ac7 100644 --- a/cli/state.go +++ b/cli/state.go @@ -83,6 +83,7 @@ var StateCmd = &cli.Command{ StateNtwkVersionCmd, StateMinerProvingDeadlineCmd, StateSysActorCIDsCmd, + StateGetBlockHashCmd, }, } @@ -776,7 +777,9 @@ var StateGetActorCmd = &cli.Command{ fmt.Printf("Nonce:\t\t%d\n", a.Nonce) fmt.Printf("Code:\t\t%s (%s)\n", a.Code, strtype) fmt.Printf("Head:\t\t%s\n", a.Head) - fmt.Printf("Delegated address:\t\t%s\n", a.Address) + if a.Address != nil { + fmt.Printf("Delegated address:\t\t%s\n", a.Address) + } return nil }, @@ -1961,3 +1964,33 @@ var StateSysActorCIDsCmd = &cli.Command{ return tw.Flush() }, } + +var StateGetBlockHashCmd = &cli.Command{ + Name: "blockhash", + Usage: "Get the tipset CID - eth blockhash", + Action: func(cctx *cli.Context) error { + if !cctx.Args().Present() { + return ShowHelp(cctx, fmt.Errorf("must specify address to print market balance for")) + } + + api, closer, err := GetFullNodeAPI(cctx) + if err != nil { + return err + } + defer closer() + + ctx := ReqContext(cctx) + + ts, err := LoadTipSet(ctx, cctx, api) + if err != nil { + return err + } + + blkCid, err := ts.Key().ToStorageBlock() + if err != nil { + return xerrors.Errorf("failed to get tipset key block: %w", err) + } + fmt.Printf("tipset CID: %d\n", blkCid) + return nil + }, +} diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 5e0c7a305..1cc89953f 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -1741,6 +1741,7 @@ COMMANDS: network-version Returns the network version miner-proving-deadline Retrieve information about a given miner's proving deadline actor-cids Returns the built-in actor bundle manifest ID & system actor cids + blockhash Get the tipset CID - eth blockhash help, h Shows a list of commands or help for one command OPTIONS: @@ -2064,6 +2065,19 @@ OPTIONS: ``` +### lotus state blockhash +``` +NAME: + lotus state blockhash - Get the tipset CID - eth blockhash + +USAGE: + lotus state blockhash [command options] [arguments...] + +OPTIONS: + --help, -h show help (default: false) + +``` + ## lotus chain ``` NAME: @@ -2596,11 +2610,10 @@ NAME: lotus evm stat - Print eth/filecoin addrs and code cid USAGE: - lotus evm stat [command options] [arguments...] + lotus evm stat [command options] address OPTIONS: - --ethAddr value Ethereum address - --filAddr value Filecoin address + --help, -h show help (default: false) ``` diff --git a/itests/fevm_events_test.go b/itests/fevm_events_test.go index 30dd7015f..079a7a699 100644 --- a/itests/fevm_events_test.go +++ b/itests/fevm_events_test.go @@ -12,6 +12,7 @@ import ( "github.com/filecoin-project/go-address" + "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/itests/kit" ) @@ -45,22 +46,22 @@ func TestFEVMEvents(t *testing.T) { require.NoError(err) t.Logf("actor ID address is %s", idAddr) - // var ( - // earliest = "earliest" - // latest = "latest" - // ) - // - // // Install a filter. - // filter, err := client.EthNewFilter(ctx, &api.EthFilterSpec{ - // FromBlock: &earliest, - // ToBlock: &latest, - // }) - // require.NoError(err) - // - // // No logs yet. - // res, err := client.EthGetFilterLogs(ctx, filter) - // require.NoError(err) - // require.Empty(res.NewLogs) + var ( + earliest = "earliest" + latest = "latest" + ) + + // Install a filter. + filter, err := client.EthNewFilter(ctx, ðtypes.EthFilterSpec{ + FromBlock: &earliest, + ToBlock: &latest, + }) + require.NoError(err) + + // No logs yet. + res, err := client.EthGetFilterLogs(ctx, filter) + require.NoError(err) + require.Empty(res.Results) // log a zero topic event with data ret := client.EVM().InvokeSolidity(ctx, fromAddr, idAddr, []byte{0x00, 0x00, 0x00, 0x00}, nil) diff --git a/itests/splitstore_test.go b/itests/splitstore_test.go index b5339d24c..4bbe56536 100644 --- a/itests/splitstore_test.go +++ b/itests/splitstore_test.go @@ -351,13 +351,11 @@ func splitStorePruneIndex(ctx context.Context, t *testing.T, n *kit.TestFullNode } func ipldExists(ctx context.Context, t *testing.T, c cid.Cid, n *kit.TestFullNode) bool { - _, err := n.ChainReadObj(ctx, c) - if ipld.IsNotFound(err) { - return false - } else if err != nil { - t.Fatalf("ChainReadObj failure on existence check: %s", err) + found, err := n.ChainHasObj(ctx, c) + if err != nil { + t.Fatalf("ChainHasObj failure: %s", err) } - return true + return found } // Create on chain unreachable garbage for a network to exercise splitstore @@ -414,12 +412,10 @@ func (g *Garbager) Exists(ctx context.Context, c cid.Cid) bool { return false } else if err != nil { g.t.Fatalf("ChainReadObj failure on existence check: %s", err) + return false // unreachable } else { return true } - - g.t.Fatal("unreachable") - return false } func (g *Garbager) newPeerID(ctx context.Context) abi.ChainEpoch { diff --git a/scripts/build-appimage-bundle.sh b/scripts/build-appimage-bundle.sh deleted file mode 100755 index d4ce6de77..000000000 --- a/scripts/build-appimage-bundle.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -set -ex - -REQUIRED=( - "ipfs" - "sha512sum" -) -for REQUIRE in "${REQUIRED[@]}" -do - command -v "${REQUIRE}" >/dev/null 2>&1 || echo >&2 "'${REQUIRE}' must be installed" -done - -mkdir bundle -pushd bundle - -export IPFS_PATH=`mktemp -d` -ipfs init -ipfs daemon & -PID="$!" -trap "kill -9 ${PID}" EXIT -sleep 30 - -cp "/tmp/workspace/appimage/Lotus-${CIRCLE_TAG}-x86_64.AppImage" . -sha512sum "Lotus-${CIRCLE_TAG}-x86_64.AppImage" > "Lotus-${CIRCLE_TAG}-x86_64.AppImage.sha512" -ipfs add -q "Lotus-${CIRCLE_TAG}-x86_64.AppImage" > "Lotus-${CIRCLE_TAG}-x86_64.AppImage.cid" -popd diff --git a/scripts/build-arch-bundle.sh b/scripts/build-arch-bundle.sh deleted file mode 100755 index 27b4218f5..000000000 --- a/scripts/build-arch-bundle.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash -set -ex - -ARCH=$1 - -REQUIRED=( - "ipfs" - "sha512sum" -) -for REQUIRE in "${REQUIRED[@]}" -do - command -v "${REQUIRE}" >/dev/null 2>&1 || echo >&2 "'${REQUIRE}' must be installed" -done - -mkdir bundle -pushd bundle - -BINARIES=( - "lotus" - "lotus-miner" - "lotus-worker" -) - -export IPFS_PATH=`mktemp -d` -ipfs init -ipfs daemon & -PID="$!" -trap "kill -9 ${PID}" EXIT -sleep 30 - -mkdir -p "${ARCH}/lotus" -pushd "${ARCH}" -for BINARY in "${BINARIES[@]}" -do - cp "../../${ARCH}/${BINARY}" "lotus/" - chmod +x "lotus/${BINARY}" -done - -tar -zcvf "../lotus_${CIRCLE_TAG}_${ARCH}-amd64.tar.gz" lotus -popd -rm -rf "${ARCH}" - -sha512sum "lotus_${CIRCLE_TAG}_${ARCH}-amd64.tar.gz" > "lotus_${CIRCLE_TAG}_${ARCH}-amd64.tar.gz.sha512" - -ipfs add -q "lotus_${CIRCLE_TAG}_${ARCH}-amd64.tar.gz" > "lotus_${CIRCLE_TAG}_${ARCH}-amd64.tar.gz.cid" -popd diff --git a/scripts/publish-arch-release.sh b/scripts/publish-arch-release.sh deleted file mode 100755 index b47ad53fe..000000000 --- a/scripts/publish-arch-release.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env bash -set -e - -ARCH=$1 - -pushd bundle - -# make sure we have a token set, api requests won't work otherwise -if [ -z "${GITHUB_TOKEN}" ]; then - echo "\${GITHUB_TOKEN} not set, publish failed" - exit 1 -fi - -REQUIRED=( - "jq" - "curl" -) -for REQUIRE in "${REQUIRED[@]}" -do - command -v "${REQUIRE}" >/dev/null 2>&1 || echo >&2 "'${REQUIRE}' must be installed" -done - -#see if the release already exists by tag -RELEASE_RESPONSE=` - curl \ - --header "Authorization: token ${GITHUB_TOKEN}" \ - "https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/releases/tags/${CIRCLE_TAG}" -` -RELEASE_ID=`echo "${RELEASE_RESPONSE}" | jq '.id'` - -if [ "${RELEASE_ID}" = "null" ]; then - echo "creating release" - - COND_CREATE_DISCUSSION="" - PRERELEASE=true - if [[ ${CIRCLE_TAG} =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - COND_CREATE_DISCUSSION="\"discussion_category_name\": \"announcement\"," - PRERELEASE=false - fi - - RELEASE_DATA="{ - \"tag_name\": \"${CIRCLE_TAG}\", - \"target_commitish\": \"${CIRCLE_SHA1}\", - ${COND_CREATE_DISCUSSION} - \"name\": \"${CIRCLE_TAG}\", - \"body\": \"\", - \"prerelease\": ${PRERELEASE} - }" - - # create it if it doesn't exist yet - RELEASE_RESPONSE=` - curl \ - --request POST \ - --header "Authorization: token ${GITHUB_TOKEN}" \ - --header "Content-Type: application/json" \ - --data "${RELEASE_DATA}" \ - "https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/${CIRCLE_PROJECT_REPONAME}/releases" - ` -else - echo "release already exists" -fi - -RELEASE_UPLOAD_URL=`echo "${RELEASE_RESPONSE}" | jq -r '.upload_url' | cut -d'{' -f1` -echo "Preparing to send artifacts to ${RELEASE_UPLOAD_URL}" - -if [ $ARCH = 'linux' ]; then -artifacts=( - "lotus_${CIRCLE_TAG}_linux-amd64.tar.gz" - "lotus_${CIRCLE_TAG}_linux-amd64.tar.gz.cid" - "lotus_${CIRCLE_TAG}_linux-amd64.tar.gz.sha512" -) -elif [ $ARCH = 'darwin' ]; then -artifacts=( - "lotus_${CIRCLE_TAG}_darwin-amd64.tar.gz" - "lotus_${CIRCLE_TAG}_darwin-amd64.tar.gz.cid" - "lotus_${CIRCLE_TAG}_darwin-amd64.tar.gz.sha512" -) -elif [ $ARCH = 'appimage' ]; then -artifacts=( - "Lotus-${CIRCLE_TAG}-x86_64.AppImage" - "Lotus-${CIRCLE_TAG}-x86_64.AppImage.cid" - "Lotus-${CIRCLE_TAG}-x86_64.AppImage.sha512" -) -else - echo "$1 is not a supported architecture to publish a release for" 1>&2 - exit 1 -fi - -for RELEASE_FILE in "${artifacts[@]}" -do - echo "Uploading ${RELEASE_FILE}..." - curl \ - --request POST \ - --fail \ - --header "Authorization: token ${GITHUB_TOKEN}" \ - --header "Content-Type: application/octet-stream" \ - --data-binary "@${RELEASE_FILE}" \ - "$RELEASE_UPLOAD_URL?name=$(basename "${RELEASE_FILE}")" - - echo "Uploaded ${RELEASE_FILE}" -done - -popd - -miscellaneous=( - "README.md" - "LICENSE-MIT" - "LICENSE-APACHE" -) -for MISC in "${miscellaneous[@]}" -do - echo "Uploading release bundle: ${MISC}" - curl \ - --request POST \ - --header "Authorization: token ${GITHUB_TOKEN}" \ - --header "Content-Type: application/octet-stream" \ - --data-binary "@${MISC}" \ - "$RELEASE_UPLOAD_URL?name=$(basename "${MISC}")" - - echo "Release bundle uploaded: ${MISC}" -done