build: github actions (#346)
* add workflows * fix * fix lint * rpc tests * build and format * fix build errors * remove dontcover * update importer test * more fixes * lint * split importer test * fix * remove tmp dir * revert * comment test import
This commit is contained in:
parent
e9c494cf71
commit
edf4357176
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@ -1,4 +1,4 @@
|
|||||||
# CODEOWNERS: https://help.github.com/articles/about-codeowners/
|
# CODEOWNERS: https://help.github.com/articles/about-codeowners/
|
||||||
|
|
||||||
# Primary repo maintainers
|
# Primary repo maintainers
|
||||||
* @alexanderbez @AlexeyAkhunov @jackzampolin
|
* @fedekunze @noot
|
||||||
|
21
.github/workflows/build.yml
vendored
Normal file
21
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
name: Build
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- "development"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cleanup-runs:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: rokroskar/workflow-run-cleanup-action@master
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
if: "!startsWith(github.ref, 'refs/tags/') && github.ref != 'refs/heads/development'"
|
||||||
|
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- run: |
|
||||||
|
make build
|
12
.github/workflows/linkchecker.yml
vendored
Normal file
12
.github/workflows/linkchecker.yml
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
name: Check Markdown links
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "* */24 * * *"
|
||||||
|
jobs:
|
||||||
|
markdown-link-check:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@development
|
||||||
|
- uses: gaurav-nelson/github-action-markdown-link-check@0.6.0
|
||||||
|
with:
|
||||||
|
folder-path: "docs"
|
29
.github/workflows/lint.yml
vendored
Normal file
29
.github/workflows/lint.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
name: Lint
|
||||||
|
# Lint runs golangci-lint over the entire cosmos-sdk repository
|
||||||
|
# This workflow is run on every pull request and push to development
|
||||||
|
# The `golangci` will pass without running if no *.{go, mod, sum} files have been changed.
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- development
|
||||||
|
jobs:
|
||||||
|
golangci:
|
||||||
|
name: golangci-lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 6
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: technote-space/get-diff-action@v1
|
||||||
|
with:
|
||||||
|
SUFFIX_FILTER: |
|
||||||
|
.go
|
||||||
|
.mod
|
||||||
|
.sum
|
||||||
|
- uses: golangci/golangci-lint-action@master
|
||||||
|
with:
|
||||||
|
# Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
|
||||||
|
version: v1.27
|
||||||
|
args: --timeout 10m
|
||||||
|
github-token: ${{ secrets.github_token }}
|
||||||
|
if: "env.GIT_DIFF != ''"
|
212
.github/workflows/test.yml
vendored
Normal file
212
.github/workflows/test.yml
vendored
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
name: Tests / Code Coverage
|
||||||
|
# Tests / Code Coverage workflow runs unit tests and uploads a code coverage report
|
||||||
|
# This workflow is run on pushes to development & every Pull Requests where a .go, .mod, .sum have been changed
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- development
|
||||||
|
jobs:
|
||||||
|
split-test-files:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Create a file with all the pkgs
|
||||||
|
run: go list ./... | grep -Ev 'vendor|importer|rpc/tester' > pkgs.txt
|
||||||
|
- name: Split pkgs into 4 files
|
||||||
|
run: split -n l/4 --additional-suffix=.txt ./pkgs.txt
|
||||||
|
# cache multiple
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-aa"
|
||||||
|
path: ./xaa.txt
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-ab"
|
||||||
|
path: ./xab.txt
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-ac"
|
||||||
|
path: ./xac.txt
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-ad"
|
||||||
|
path: ./xad.txt
|
||||||
|
|
||||||
|
test-coverage-run-1:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: split-test-files
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: technote-space/get-diff-action@v1
|
||||||
|
id: git_diff
|
||||||
|
with:
|
||||||
|
SUFFIX_FILTER: |
|
||||||
|
.go
|
||||||
|
.mod
|
||||||
|
.sum
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-aa"
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: test & coverage report creation
|
||||||
|
run: |
|
||||||
|
cat xaa.txt | xargs go test -mod=readonly -timeout 8m -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: filter out proto files
|
||||||
|
run: |
|
||||||
|
excludelist+=" $(find ./ -type f -name '*.pb.go')"
|
||||||
|
for filename in ${excludelist}; do
|
||||||
|
filename=$(echo $filename | sed 's/^./github.com\/cosmos\/ethermint/g')
|
||||||
|
echo "Excluding ${filename} from coverage report..."
|
||||||
|
sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt
|
||||||
|
done
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- uses: codecov/codecov-action@v1
|
||||||
|
with:
|
||||||
|
file: ./coverage.txt
|
||||||
|
fail_ci_if_error: true
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
|
||||||
|
test-coverage-run-2:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: split-test-files
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: technote-space/get-diff-action@v1
|
||||||
|
id: git_diff
|
||||||
|
with:
|
||||||
|
SUFFIX_FILTER: |
|
||||||
|
.go
|
||||||
|
.mod
|
||||||
|
.sum
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-ab"
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: test & coverage report creation
|
||||||
|
run: |
|
||||||
|
cat xab.txt | xargs go test -mod=readonly -timeout 6m -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: filter out proto files
|
||||||
|
run: |
|
||||||
|
excludelist+=" $(find ./ -type f -name '*.pb.go')"
|
||||||
|
for filename in ${excludelist}; do
|
||||||
|
filename=$(echo $filename | sed 's/^./github.com\/cosmos\/ethermint/g')
|
||||||
|
echo "Excluding ${filename} from coverage report..."
|
||||||
|
sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt
|
||||||
|
done
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- uses: codecov/codecov-action@v1
|
||||||
|
with:
|
||||||
|
file: ./coverage.txt
|
||||||
|
fail_ci_if_error: true
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
|
||||||
|
test-coverage-run-3:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: split-test-files
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: technote-space/get-diff-action@v1
|
||||||
|
id: git_diff
|
||||||
|
with:
|
||||||
|
SUFFIX_FILTER: |
|
||||||
|
.go
|
||||||
|
.mod
|
||||||
|
.sum
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-ac"
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: test & coverage report creation
|
||||||
|
run: |
|
||||||
|
cat xac.txt | xargs go test -mod=readonly -timeout 6m -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: filter out proto files
|
||||||
|
run: |
|
||||||
|
excludelist+=" $(find ./ -type f -name '*.pb.go')"
|
||||||
|
for filename in ${excludelist}; do
|
||||||
|
filename=$(echo $filename | sed 's/^./github.com\/cosmos\/ethermint/g')
|
||||||
|
echo "Excluding ${filename} from coverage report..."
|
||||||
|
sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt
|
||||||
|
done
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- uses: codecov/codecov-action@v1
|
||||||
|
with:
|
||||||
|
file: ./coverage.txt
|
||||||
|
fail_ci_if_error: true
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
|
||||||
|
test-coverage-run-4:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: split-test-files
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: technote-space/get-diff-action@v1
|
||||||
|
id: git_diff
|
||||||
|
with:
|
||||||
|
SUFFIX_FILTER: |
|
||||||
|
.go
|
||||||
|
.mod
|
||||||
|
.sum
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: "${{ github.sha }}-ad"
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: test & coverage report creation
|
||||||
|
run: |
|
||||||
|
cat xad.txt | xargs go test -mod=readonly -timeout 6m -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- name: filter out proto files
|
||||||
|
run: |
|
||||||
|
excludelist+=" $(find ./ -type f -name '*.pb.go')"
|
||||||
|
for filename in ${excludelist}; do
|
||||||
|
filename=$(echo $filename | sed 's/^./github.com\/cosmos\/ethermint/g')
|
||||||
|
echo "Excluding ${filename} from coverage report..."
|
||||||
|
sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt
|
||||||
|
done
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
- uses: codecov/codecov-action@v1
|
||||||
|
with:
|
||||||
|
file: ./coverage.txt
|
||||||
|
fail_ci_if_error: true
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
|
||||||
|
rpc-tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: technote-space/get-diff-action@v1
|
||||||
|
id: git_diff
|
||||||
|
with:
|
||||||
|
SUFFIX_FILTER: |
|
||||||
|
.go
|
||||||
|
.mod
|
||||||
|
.sum
|
||||||
|
- name: rpc-test
|
||||||
|
run: |
|
||||||
|
make test-rpc
|
||||||
|
if: "env.GIT_DIFF != ''"
|
||||||
|
# TODO: remove tmp dir to fix this
|
||||||
|
# test-importer:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# timeout-minutes: 10
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v2
|
||||||
|
# - uses: technote-space/get-diff-action@v1
|
||||||
|
# id: git_diff
|
||||||
|
# with:
|
||||||
|
# SUFFIX_FILTER: |
|
||||||
|
# .go
|
||||||
|
# .mod
|
||||||
|
# .sum
|
||||||
|
# - name: importer-test
|
||||||
|
# run: |
|
||||||
|
# make test-import
|
||||||
|
# if: "env.GIT_DIFF != ''"
|
@ -1,4 +1,5 @@
|
|||||||
# run:
|
run:
|
||||||
|
tests: false
|
||||||
# # timeout for analysis, e.g. 30s, 5m, default is 1m
|
# # timeout for analysis, e.g. 30s, 5m, default is 1m
|
||||||
# timeout: 5m
|
# timeout: 5m
|
||||||
|
|
||||||
@ -31,8 +32,8 @@ linters:
|
|||||||
- typecheck
|
- typecheck
|
||||||
- unconvert
|
- unconvert
|
||||||
- unused
|
- unused
|
||||||
|
- unparam
|
||||||
- misspell
|
- misspell
|
||||||
- varcheck
|
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
@ -53,9 +54,9 @@ issues:
|
|||||||
- text: "ST1016:"
|
- text: "ST1016:"
|
||||||
linters:
|
linters:
|
||||||
- stylecheck
|
- stylecheck
|
||||||
- linters:
|
max-issues-per-linter: 10000
|
||||||
- golint
|
max-same-issues: 10000
|
||||||
text: "don't use ALL_CAPS in Go names;"
|
|
||||||
linters-settings:
|
linters-settings:
|
||||||
dogsled:
|
dogsled:
|
||||||
max-blank-identifiers: 3
|
max-blank-identifiers: 3
|
||||||
|
27
.travis.yml
27
.travis.yml
@ -1,27 +0,0 @@
|
|||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.14.x
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- "$HOME/.cache/go-build"
|
|
||||||
- "$GOPATH/pkg/mod"
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- name: Verify deps & Lint
|
|
||||||
script:
|
|
||||||
- rm -rf $HOME/.cache/golangci-lint || true
|
|
||||||
- make verify build
|
|
||||||
- make lint
|
|
||||||
- name: Unit Tests
|
|
||||||
script:
|
|
||||||
- make test-import
|
|
||||||
- make test-unit
|
|
||||||
- name: Race Tests
|
|
||||||
script:
|
|
||||||
- make test-race
|
|
||||||
- name: Integration Tests
|
|
||||||
script:
|
|
||||||
- make it-tests || true
|
|
40
Makefile
40
Makefile
@ -142,27 +142,16 @@ endif
|
|||||||
test: test-unit
|
test: test-unit
|
||||||
|
|
||||||
test-unit:
|
test-unit:
|
||||||
@${GO_MOD} go test -v --vet=off $(PACKAGES)
|
@go test -v ./... $(PACKAGES)
|
||||||
|
|
||||||
test-race:
|
test-race:
|
||||||
@${GO_MOD} go test -v --vet=off -race $(PACKAGES)
|
@go test -v --vet=off -race ./... $(PACKAGES)
|
||||||
|
|
||||||
test-cli:
|
|
||||||
@echo "NO CLI TESTS"
|
|
||||||
|
|
||||||
lint:
|
|
||||||
@echo "--> Running ci lint..."
|
|
||||||
GOBIN=$(PWD)/bin go run scripts/ci.go lint
|
|
||||||
|
|
||||||
test-import:
|
test-import:
|
||||||
@${GO_MOD} go test ./importer -v --vet=off --run=TestImportBlocks --datadir tmp \
|
@go test ./importer -v --vet=off --run=TestImportBlocks --datadir tmp \
|
||||||
--blockchain blockchain --timeout=10m
|
--blockchain blockchain --timeout=10m
|
||||||
# TODO: remove tmp directory after test run to avoid subsequent errors
|
|
||||||
|
|
||||||
test-rpc:
|
test-rpc:
|
||||||
@${GO_MOD} go test -v --vet=off ./tests/rpc_test
|
|
||||||
|
|
||||||
it-tests:
|
|
||||||
./scripts/integration-test-all.sh -q 1 -z 1 -s 2
|
./scripts/integration-test-all.sh -q 1 -z 1 -s 2
|
||||||
|
|
||||||
godocs:
|
godocs:
|
||||||
@ -174,15 +163,28 @@ docker:
|
|||||||
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
|
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
|
||||||
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:${COMMIT_HASH}
|
docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:${COMMIT_HASH}
|
||||||
|
|
||||||
format:
|
|
||||||
@echo "--> Formatting go files"
|
|
||||||
@find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -w -s
|
|
||||||
@find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs misspell -w
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: build install update-tools tools godocs clean format lint \
|
.PHONY: build install update-tools tools godocs clean format lint \
|
||||||
test-cli test-race test-unit test test-import
|
test-cli test-race test-unit test test-import
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
### Linting ###
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
lint:
|
||||||
|
golangci-lint run --out-format=tab --issues-exit-code=0
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -d -s
|
||||||
|
|
||||||
|
format:
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs gofmt -w -s
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs misspell -w
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/tendermint
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/ethereum/go-ethereum
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/cosmos/cosmos-sdk
|
||||||
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' | xargs goimports -w -local github.com/cosmos/ethermint
|
||||||
|
|
||||||
|
.PHONY: lint format
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### Protobuf ###
|
### Protobuf ###
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -131,7 +131,7 @@ func createAndTestGenesis(t *testing.T, cms sdk.CommitMultiStore, ak auth.Accoun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get balance of one of the genesis account having 200 ETH
|
// get balance of one of the genesis account having 400 ETH
|
||||||
b := stateDB.GetBalance(genInvestor)
|
b := stateDB.GetBalance(genInvestor)
|
||||||
require.Equal(t, "200000000000000000000", b.String())
|
require.Equal(t, "200000000000000000000", b.String())
|
||||||
|
|
||||||
@ -206,8 +206,7 @@ func TestImportBlocks(t *testing.T) {
|
|||||||
blockchainInput, err := os.Open(flagBlockchain)
|
blockchainInput, err := os.Open(flagBlockchain)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
// nolint: gosec
|
defer require.NoError(t, blockchainInput.Close())
|
||||||
defer blockchainInput.Close()
|
|
||||||
|
|
||||||
// ethereum mainnet config
|
// ethereum mainnet config
|
||||||
chainContext := core.NewChainContext()
|
chainContext := core.NewChainContext()
|
||||||
|
@ -6,8 +6,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/context"
|
"github.com/cosmos/cosmos-sdk/client/context"
|
||||||
"github.com/cosmos/ethermint/x/evm"
|
evmtypes "github.com/cosmos/ethermint/x/evm/types"
|
||||||
"github.com/cosmos/ethermint/x/evm/types"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
@ -32,12 +31,13 @@ type Backend interface {
|
|||||||
// TODO: Bloom methods
|
// TODO: Bloom methods
|
||||||
}
|
}
|
||||||
|
|
||||||
// EmintBackend implements Backend
|
// EthermintBackend implements Backend
|
||||||
type EthermintBackend struct {
|
type EthermintBackend struct {
|
||||||
cliCtx context.CLIContext
|
cliCtx context.CLIContext
|
||||||
gasLimit int64
|
gasLimit int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewEthermintBackend creates a new EthermintBackend instance
|
||||||
func NewEthermintBackend(cliCtx context.CLIContext) *EthermintBackend {
|
func NewEthermintBackend(cliCtx context.CLIContext) *EthermintBackend {
|
||||||
return &EthermintBackend{
|
return &EthermintBackend{
|
||||||
cliCtx: cliCtx,
|
cliCtx: cliCtx,
|
||||||
@ -47,12 +47,12 @@ func NewEthermintBackend(cliCtx context.CLIContext) *EthermintBackend {
|
|||||||
|
|
||||||
// BlockNumber returns the current block number.
|
// BlockNumber returns the current block number.
|
||||||
func (e *EthermintBackend) BlockNumber() (hexutil.Uint64, error) {
|
func (e *EthermintBackend) BlockNumber() (hexutil.Uint64, error) {
|
||||||
res, height, err := e.cliCtx.QueryWithData(fmt.Sprintf("custom/%s/blockNumber", types.ModuleName), nil)
|
res, height, err := e.cliCtx.QueryWithData(fmt.Sprintf("custom/%s/blockNumber", evmtypes.ModuleName), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return hexutil.Uint64(0), err
|
return hexutil.Uint64(0), err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResBlockNumber
|
var out evmtypes.QueryResBlockNumber
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
|
|
||||||
e.cliCtx.WithHeight(height)
|
e.cliCtx.WithHeight(height)
|
||||||
@ -67,12 +67,12 @@ func (e *EthermintBackend) GetBlockByNumber(blockNum BlockNumber, fullTx bool) (
|
|||||||
|
|
||||||
// GetBlockByHash returns the block identified by hash.
|
// GetBlockByHash returns the block identified by hash.
|
||||||
func (e *EthermintBackend) GetBlockByHash(hash common.Hash, fullTx bool) (map[string]interface{}, error) {
|
func (e *EthermintBackend) GetBlockByHash(hash common.Hash, fullTx bool) (map[string]interface{}, error) {
|
||||||
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryHashToHeight, hash.Hex()))
|
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryHashToHeight, hash.Hex()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResBlockNumber
|
var out evmtypes.QueryResBlockNumber
|
||||||
if err := e.cliCtx.Codec.UnmarshalJSON(res, &out); err != nil {
|
if err := e.cliCtx.Codec.UnmarshalJSON(res, &out); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -120,12 +120,12 @@ func (e *EthermintBackend) getEthBlockByNumber(height int64, fullTx bool) (map[s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryBloom, strconv.FormatInt(block.Block.Height, 10)))
|
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryBloom, strconv.FormatInt(block.Block.Height, 10)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryBloomFilter
|
var out evmtypes.QueryBloomFilter
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
|
|
||||||
return formatBlock(header, block.Block.Size(), gasLimit, gasUsed, transactions, out.Bloom), nil
|
return formatBlock(header, block.Block.Size(), gasLimit, gasUsed, transactions, out.Bloom), nil
|
||||||
@ -161,12 +161,12 @@ func (e *EthermintBackend) GetTransactionLogs(txHash common.Hash) ([]*ethtypes.L
|
|||||||
// do we need to use the block height somewhere?
|
// do we need to use the block height somewhere?
|
||||||
ctx := e.cliCtx
|
ctx := e.cliCtx
|
||||||
|
|
||||||
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryTransactionLogs, txHash.Hex()), nil)
|
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryTransactionLogs, txHash.Hex()), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
out := new(types.QueryETHLogs)
|
out := new(evmtypes.QueryETHLogs)
|
||||||
if err := e.cliCtx.Codec.UnmarshalJSON(res, &out); err != nil {
|
if err := e.cliCtx.Codec.UnmarshalJSON(res, &out); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,7 @@ import (
|
|||||||
emint "github.com/cosmos/ethermint/types"
|
emint "github.com/cosmos/ethermint/types"
|
||||||
"github.com/cosmos/ethermint/utils"
|
"github.com/cosmos/ethermint/utils"
|
||||||
"github.com/cosmos/ethermint/version"
|
"github.com/cosmos/ethermint/version"
|
||||||
"github.com/cosmos/ethermint/x/evm"
|
evmtypes "github.com/cosmos/ethermint/x/evm/types"
|
||||||
"github.com/cosmos/ethermint/x/evm/types"
|
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
"github.com/tendermint/tendermint/crypto/merkle"
|
"github.com/tendermint/tendermint/crypto/merkle"
|
||||||
@ -160,12 +159,12 @@ func (e *PublicEthAPI) BlockNumber() (hexutil.Uint64, error) {
|
|||||||
// GetBalance returns the provided account's balance up to the provided block number.
|
// GetBalance returns the provided account's balance up to the provided block number.
|
||||||
func (e *PublicEthAPI) GetBalance(address common.Address, blockNum BlockNumber) (*hexutil.Big, error) {
|
func (e *PublicEthAPI) GetBalance(address common.Address, blockNum BlockNumber) (*hexutil.Big, error) {
|
||||||
ctx := e.cliCtx.WithHeight(blockNum.Int64())
|
ctx := e.cliCtx.WithHeight(blockNum.Int64())
|
||||||
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/balance/%s", types.ModuleName, address.Hex()), nil)
|
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/balance/%s", evmtypes.ModuleName, address.Hex()), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResBalance
|
var out evmtypes.QueryResBalance
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
val, err := utils.UnmarshalBigInt(out.Balance)
|
val, err := utils.UnmarshalBigInt(out.Balance)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -178,12 +177,12 @@ func (e *PublicEthAPI) GetBalance(address common.Address, blockNum BlockNumber)
|
|||||||
// GetStorageAt returns the contract storage at the given address, block number, and key.
|
// GetStorageAt returns the contract storage at the given address, block number, and key.
|
||||||
func (e *PublicEthAPI) GetStorageAt(address common.Address, key string, blockNum BlockNumber) (hexutil.Bytes, error) {
|
func (e *PublicEthAPI) GetStorageAt(address common.Address, key string, blockNum BlockNumber) (hexutil.Bytes, error) {
|
||||||
ctx := e.cliCtx.WithHeight(blockNum.Int64())
|
ctx := e.cliCtx.WithHeight(blockNum.Int64())
|
||||||
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/storage/%s/%s", types.ModuleName, address.Hex(), key), nil)
|
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/storage/%s/%s", evmtypes.ModuleName, address.Hex(), key), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResStorage
|
var out evmtypes.QueryResStorage
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
return out.Value, nil
|
return out.Value, nil
|
||||||
}
|
}
|
||||||
@ -215,13 +214,13 @@ func (e *PublicEthAPI) GetTransactionCount(address common.Address, blockNum Bloc
|
|||||||
|
|
||||||
// GetBlockTransactionCountByHash returns the number of transactions in the block identified by hash.
|
// GetBlockTransactionCountByHash returns the number of transactions in the block identified by hash.
|
||||||
func (e *PublicEthAPI) GetBlockTransactionCountByHash(hash common.Hash) *hexutil.Uint {
|
func (e *PublicEthAPI) GetBlockTransactionCountByHash(hash common.Hash) *hexutil.Uint {
|
||||||
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryHashToHeight, hash.Hex()))
|
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryHashToHeight, hash.Hex()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Return nil if block does not exist
|
// Return nil if block does not exist
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResBlockNumber
|
var out evmtypes.QueryResBlockNumber
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
return e.getBlockTransactionCountByNumber(out.Number)
|
return e.getBlockTransactionCountByNumber(out.Number)
|
||||||
}
|
}
|
||||||
@ -256,12 +255,12 @@ func (e *PublicEthAPI) GetUncleCountByBlockNumber(blockNum BlockNumber) hexutil.
|
|||||||
// GetCode returns the contract code at the given address and block number.
|
// GetCode returns the contract code at the given address and block number.
|
||||||
func (e *PublicEthAPI) GetCode(address common.Address, blockNumber BlockNumber) (hexutil.Bytes, error) {
|
func (e *PublicEthAPI) GetCode(address common.Address, blockNumber BlockNumber) (hexutil.Bytes, error) {
|
||||||
ctx := e.cliCtx.WithHeight(blockNumber.Int64())
|
ctx := e.cliCtx.WithHeight(blockNumber.Int64())
|
||||||
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryCode, address.Hex()), nil)
|
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryCode, address.Hex()), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResCode
|
var out evmtypes.QueryResCode
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
return out.Code, nil
|
return out.Code, nil
|
||||||
}
|
}
|
||||||
@ -276,7 +275,7 @@ func (e *PublicEthAPI) GetTransactionLogs(txHash common.Hash) ([]*ethtypes.Log,
|
|||||||
func (e *PublicEthAPI) ExportAccount(address common.Address, blockNumber BlockNumber) (string, error) {
|
func (e *PublicEthAPI) ExportAccount(address common.Address, blockNumber BlockNumber) (string, error) {
|
||||||
ctx := e.cliCtx.WithHeight(blockNumber.Int64())
|
ctx := e.cliCtx.WithHeight(blockNumber.Int64())
|
||||||
|
|
||||||
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryExportAccount, address.Hex()), nil)
|
res, _, err := ctx.QueryWithData(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryExportAccount, address.Hex()), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@ -352,7 +351,7 @@ func (e *PublicEthAPI) SendTransaction(args params.SendTxArgs) (common.Hash, err
|
|||||||
|
|
||||||
// SendRawTransaction send a raw Ethereum transaction.
|
// SendRawTransaction send a raw Ethereum transaction.
|
||||||
func (e *PublicEthAPI) SendRawTransaction(data hexutil.Bytes) (common.Hash, error) {
|
func (e *PublicEthAPI) SendRawTransaction(data hexutil.Bytes) (common.Hash, error) {
|
||||||
tx := new(types.MsgEthereumTx)
|
tx := new(evmtypes.MsgEthereumTx)
|
||||||
|
|
||||||
// RLP decode raw transaction bytes
|
// RLP decode raw transaction bytes
|
||||||
if err := rlp.DecodeBytes(data, tx); err != nil {
|
if err := rlp.DecodeBytes(data, tx); err != nil {
|
||||||
@ -395,7 +394,7 @@ func (e *PublicEthAPI) Call(args CallArgs, blockNr rpc.BlockNumber, overrides *m
|
|||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := types.DecodeResultData(simRes.Result.Data)
|
data, err := evmtypes.DecodeResultData(simRes.Result.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
@ -417,7 +416,7 @@ type account struct {
|
|||||||
StateDiff *map[common.Hash]common.Hash `json:"stateDiff"`
|
StateDiff *map[common.Hash]common.Hash `json:"stateDiff"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DoCall performs a simulated call operation through the evm. It returns the
|
// DoCall performs a simulated call operation through the evmtypes. It returns the
|
||||||
// estimated gas used on the operation or an error if fails.
|
// estimated gas used on the operation or an error if fails.
|
||||||
func (e *PublicEthAPI) doCall(
|
func (e *PublicEthAPI) doCall(
|
||||||
args CallArgs, blockNr rpc.BlockNumber, globalGasCap *big.Int,
|
args CallArgs, blockNr rpc.BlockNumber, globalGasCap *big.Int,
|
||||||
@ -476,7 +475,7 @@ func (e *PublicEthAPI) doCall(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create new call message
|
// Create new call message
|
||||||
msg := types.NewMsgEthermint(0, &toAddr, sdk.NewIntFromBigInt(value), gas,
|
msg := evmtypes.NewMsgEthermint(0, &toAddr, sdk.NewIntFromBigInt(value), gas,
|
||||||
sdk.NewIntFromBigInt(gasPrice), data, sdk.AccAddress(addr.Bytes()))
|
sdk.NewIntFromBigInt(gasPrice), data, sdk.AccAddress(addr.Bytes()))
|
||||||
|
|
||||||
// Generate tx to be used to simulate (signature isn't needed)
|
// Generate tx to be used to simulate (signature isn't needed)
|
||||||
@ -594,14 +593,14 @@ type Transaction struct {
|
|||||||
S *hexutil.Big `json:"s"`
|
S *hexutil.Big `json:"s"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func bytesToEthTx(cliCtx context.CLIContext, bz []byte) (*types.MsgEthereumTx, error) {
|
func bytesToEthTx(cliCtx context.CLIContext, bz []byte) (*evmtypes.MsgEthereumTx, error) {
|
||||||
var stdTx sdk.Tx
|
var stdTx sdk.Tx
|
||||||
err := cliCtx.Codec.UnmarshalBinaryBare(bz, &stdTx)
|
err := cliCtx.Codec.UnmarshalBinaryBare(bz, &stdTx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
|
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
ethTx, ok := stdTx.(types.MsgEthereumTx)
|
ethTx, ok := stdTx.(evmtypes.MsgEthereumTx)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("invalid transaction type, must be an amino encoded Ethereum transaction")
|
return nil, fmt.Errorf("invalid transaction type, must be an amino encoded Ethereum transaction")
|
||||||
}
|
}
|
||||||
@ -610,7 +609,7 @@ func bytesToEthTx(cliCtx context.CLIContext, bz []byte) (*types.MsgEthereumTx, e
|
|||||||
|
|
||||||
// newRPCTransaction returns a transaction that will serialize to the RPC
|
// newRPCTransaction returns a transaction that will serialize to the RPC
|
||||||
// representation, with the given location metadata set (if available).
|
// representation, with the given location metadata set (if available).
|
||||||
func newRPCTransaction(tx types.MsgEthereumTx, txHash, blockHash common.Hash, blockNumber *uint64, index uint64) (*Transaction, error) {
|
func newRPCTransaction(tx evmtypes.MsgEthereumTx, txHash, blockHash common.Hash, blockNumber *uint64, index uint64) (*Transaction, error) {
|
||||||
// Verify signature and retrieve sender address
|
// Verify signature and retrieve sender address
|
||||||
from, err := tx.VerifySig(tx.ChainID())
|
from, err := tx.VerifySig(tx.ChainID())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -666,12 +665,12 @@ func (e *PublicEthAPI) GetTransactionByHash(hash common.Hash) (*Transaction, err
|
|||||||
|
|
||||||
// GetTransactionByBlockHashAndIndex returns the transaction identified by hash and index.
|
// GetTransactionByBlockHashAndIndex returns the transaction identified by hash and index.
|
||||||
func (e *PublicEthAPI) GetTransactionByBlockHashAndIndex(hash common.Hash, idx hexutil.Uint) (*Transaction, error) {
|
func (e *PublicEthAPI) GetTransactionByBlockHashAndIndex(hash common.Hash, idx hexutil.Uint) (*Transaction, error) {
|
||||||
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryHashToHeight, hash.Hex()))
|
res, _, err := e.cliCtx.Query(fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryHashToHeight, hash.Hex()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out types.QueryResBlockNumber
|
var out evmtypes.QueryResBlockNumber
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &out)
|
||||||
return e.getTransactionByBlockNumberAndIndex(out.Number, idx)
|
return e.getTransactionByBlockNumberAndIndex(out.Number, idx)
|
||||||
}
|
}
|
||||||
@ -738,7 +737,7 @@ func (e *PublicEthAPI) GetTransactionReceipt(hash common.Hash) (map[string]inter
|
|||||||
|
|
||||||
txData := tx.TxResult.GetData()
|
txData := tx.TxResult.GetData()
|
||||||
|
|
||||||
data, err := types.DecodeResultData(txData)
|
data, err := evmtypes.DecodeResultData(txData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
status = 0 // transaction failed
|
status = 0 // transaction failed
|
||||||
}
|
}
|
||||||
@ -814,7 +813,7 @@ type StorageResult struct {
|
|||||||
// GetProof returns an account object with proof and any storage proofs
|
// GetProof returns an account object with proof and any storage proofs
|
||||||
func (e *PublicEthAPI) GetProof(address common.Address, storageKeys []string, block BlockNumber) (*AccountResult, error) {
|
func (e *PublicEthAPI) GetProof(address common.Address, storageKeys []string, block BlockNumber) (*AccountResult, error) {
|
||||||
e.cliCtx = e.cliCtx.WithHeight(int64(block))
|
e.cliCtx = e.cliCtx.WithHeight(int64(block))
|
||||||
path := fmt.Sprintf("custom/%s/%s/%s", types.ModuleName, evm.QueryAccount, address.Hex())
|
path := fmt.Sprintf("custom/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryAccount, address.Hex())
|
||||||
|
|
||||||
// query eth account at block height
|
// query eth account at block height
|
||||||
resBz, _, err := e.cliCtx.Query(path)
|
resBz, _, err := e.cliCtx.Query(path)
|
||||||
@ -822,20 +821,20 @@ func (e *PublicEthAPI) GetProof(address common.Address, storageKeys []string, bl
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var account types.QueryResAccount
|
var account evmtypes.QueryResAccount
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(resBz, &account)
|
e.cliCtx.Codec.MustUnmarshalJSON(resBz, &account)
|
||||||
|
|
||||||
storageProofs := make([]StorageResult, len(storageKeys))
|
storageProofs := make([]StorageResult, len(storageKeys))
|
||||||
opts := client.ABCIQueryOptions{Height: int64(block), Prove: true}
|
opts := client.ABCIQueryOptions{Height: int64(block), Prove: true}
|
||||||
for i, k := range storageKeys {
|
for i, k := range storageKeys {
|
||||||
// Get value for key
|
// Get value for key
|
||||||
vPath := fmt.Sprintf("custom/%s/%s/%s/%s", types.ModuleName, evm.QueryStorage, address, k)
|
vPath := fmt.Sprintf("custom/%s/%s/%s/%s", evmtypes.ModuleName, evmtypes.QueryStorage, address, k)
|
||||||
vRes, err := e.cliCtx.Client.ABCIQueryWithOptions(vPath, nil, opts)
|
vRes, err := e.cliCtx.Client.ABCIQueryWithOptions(vPath, nil, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var value types.QueryResStorage
|
var value evmtypes.QueryResStorage
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(vRes.Response.GetValue(), &value)
|
e.cliCtx.Codec.MustUnmarshalJSON(vRes.Response.GetValue(), &value)
|
||||||
|
|
||||||
// check for proof
|
// check for proof
|
||||||
@ -883,7 +882,7 @@ func (e *PublicEthAPI) GetProof(address common.Address, storageKeys []string, bl
|
|||||||
}
|
}
|
||||||
|
|
||||||
// generateFromArgs populates tx message with args (used in RPC API)
|
// generateFromArgs populates tx message with args (used in RPC API)
|
||||||
func (e *PublicEthAPI) generateFromArgs(args params.SendTxArgs) (*types.MsgEthereumTx, error) {
|
func (e *PublicEthAPI) generateFromArgs(args params.SendTxArgs) (*evmtypes.MsgEthereumTx, error) {
|
||||||
var (
|
var (
|
||||||
nonce uint64
|
nonce uint64
|
||||||
gasLimit uint64
|
gasLimit uint64
|
||||||
@ -954,7 +953,7 @@ func (e *PublicEthAPI) generateFromArgs(args params.SendTxArgs) (*types.MsgEther
|
|||||||
} else {
|
} else {
|
||||||
gasLimit = (uint64)(*args.Gas)
|
gasLimit = (uint64)(*args.Gas)
|
||||||
}
|
}
|
||||||
msg := types.NewMsgEthereumTx(nonce, args.To, amount, gasLimit, gasPrice, input)
|
msg := evmtypes.NewMsgEthereumTx(nonce, args.To, amount, gasLimit, gasPrice, input)
|
||||||
|
|
||||||
return &msg, nil
|
return &msg, nil
|
||||||
}
|
}
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
// +build none
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
GOLANGCI_VERSION = "github.com/golangci/golangci-lint/cmd/golangci-lint@v1.23.8"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
log.SetFlags(log.Lshortfile)
|
|
||||||
|
|
||||||
if _, err := os.Stat(filepath.Join("scripts", "ci.go")); os.IsNotExist(err) {
|
|
||||||
log.Fatal("should run build from root dir")
|
|
||||||
} else if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if len(os.Args) < 2 {
|
|
||||||
log.Fatal("cmd required, eg: install")
|
|
||||||
}
|
|
||||||
switch os.Args[1] {
|
|
||||||
case "lint":
|
|
||||||
lint()
|
|
||||||
default:
|
|
||||||
log.Fatal("cmd not found", os.Args[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func lint() {
|
|
||||||
|
|
||||||
verbose := flag.Bool("v", false, "Whether to log verbosely")
|
|
||||||
|
|
||||||
// Make sure golangci-lint is available
|
|
||||||
argsGet := append([]string{"get", GOLANGCI_VERSION})
|
|
||||||
cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), argsGet...)
|
|
||||||
out, err := cmd.CombinedOutput()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("could not list packages: %v\n%s", err, string(out))
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd = exec.Command(filepath.Join(GOBIN(), "golangci-lint"))
|
|
||||||
cmd.Args = append(cmd.Args, "run", "--config", ".golangci.yml")
|
|
||||||
|
|
||||||
if *verbose {
|
|
||||||
cmd.Args = append(cmd.Args, "-v")
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Lint Ethermint", strings.Join(cmd.Args, " \\\n"))
|
|
||||||
cmd.Stderr, cmd.Stdout = os.Stderr, os.Stdout
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
log.Fatal("Error: Could not Lint Ethermint. ", "error: ", err, ", cmd: ", cmd)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GOBIN returns the GOBIN environment variable
|
|
||||||
func GOBIN() string {
|
|
||||||
if os.Getenv("GOBIN") == "" {
|
|
||||||
log.Fatal("GOBIN is not set")
|
|
||||||
}
|
|
||||||
return os.Getenv("GOBIN")
|
|
||||||
}
|
|
@ -10,32 +10,16 @@ const (
|
|||||||
ModuleName = types.ModuleName
|
ModuleName = types.ModuleName
|
||||||
StoreKey = types.StoreKey
|
StoreKey = types.StoreKey
|
||||||
RouterKey = types.RouterKey
|
RouterKey = types.RouterKey
|
||||||
QueryProtocolVersion = types.QueryProtocolVersion
|
|
||||||
QueryBalance = types.QueryBalance
|
|
||||||
QueryBlockNumber = types.QueryBlockNumber
|
|
||||||
QueryStorage = types.QueryStorage
|
|
||||||
QueryCode = types.QueryCode
|
|
||||||
QueryNonce = types.QueryNonce
|
|
||||||
QueryHashToHeight = types.QueryHashToHeight
|
|
||||||
QueryTransactionLogs = types.QueryTransactionLogs
|
|
||||||
QueryBloom = types.QueryBloom
|
|
||||||
QueryLogs = types.QueryLogs
|
|
||||||
QueryAccount = types.QueryAccount
|
|
||||||
QueryExportAccount = types.QueryExportAccount
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// nolint
|
// nolint
|
||||||
var (
|
var (
|
||||||
NewKeeper = keeper.NewKeeper
|
NewKeeper = keeper.NewKeeper
|
||||||
TxDecoder = types.TxDecoder
|
TxDecoder = types.TxDecoder
|
||||||
NewGenesisStorage = types.NewGenesisStorage
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//nolint
|
//nolint
|
||||||
type (
|
type (
|
||||||
Keeper = keeper.Keeper
|
Keeper = keeper.Keeper
|
||||||
QueryResAccount = types.QueryResAccount
|
|
||||||
GenesisState = types.GenesisState
|
GenesisState = types.GenesisState
|
||||||
GenesisAccount = types.GenesisAccount
|
|
||||||
GenesisStorage = types.GenesisStorage
|
|
||||||
)
|
)
|
||||||
|
@ -46,7 +46,7 @@ func InitGenesis(ctx sdk.Context, k Keeper, data GenesisState) []abci.ValidatorU
|
|||||||
// ExportGenesis exports genesis state
|
// ExportGenesis exports genesis state
|
||||||
func ExportGenesis(ctx sdk.Context, k Keeper, ak types.AccountKeeper) GenesisState {
|
func ExportGenesis(ctx sdk.Context, k Keeper, ak types.AccountKeeper) GenesisState {
|
||||||
// nolint: prealloc
|
// nolint: prealloc
|
||||||
var ethGenAccounts []GenesisAccount
|
var ethGenAccounts []types.GenesisAccount
|
||||||
accounts := ak.GetAllAccounts(ctx)
|
accounts := ak.GetAllAccounts(ctx)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -58,16 +58,16 @@ func ExportGenesis(ctx sdk.Context, k Keeper, ak types.AccountKeeper) GenesisSta
|
|||||||
|
|
||||||
addr := common.BytesToAddress(ethAccount.GetAddress().Bytes())
|
addr := common.BytesToAddress(ethAccount.GetAddress().Bytes())
|
||||||
|
|
||||||
var storage []GenesisStorage
|
var storage []types.GenesisStorage
|
||||||
err = k.CommitStateDB.ForEachStorage(addr, func(key, value common.Hash) bool {
|
err = k.CommitStateDB.ForEachStorage(addr, func(key, value common.Hash) bool {
|
||||||
storage = append(storage, NewGenesisStorage(key, value))
|
storage = append(storage, types.NewGenesisStorage(key, value))
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
genAccount := GenesisAccount{
|
genAccount := types.GenesisAccount{
|
||||||
Address: addr,
|
Address: addr,
|
||||||
Balance: k.GetBalance(ctx, addr),
|
Balance: k.GetBalance(ctx, addr),
|
||||||
Code: k.GetCode(ctx, addr),
|
Code: k.GetCode(ctx, addr),
|
||||||
|
@ -21,7 +21,7 @@ func NewQuerier(k Keeper) sdk.Querier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func queryFunded(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) {
|
func queryFunded(ctx sdk.Context, _ abci.RequestQuery, k Keeper) ([]byte, error) {
|
||||||
funded := k.GetFunded(ctx)
|
funded := k.GetFunded(ctx)
|
||||||
|
|
||||||
bz, err := codec.MarshalJSONIndent(k.cdc, funded)
|
bz, err := codec.MarshalJSONIndent(k.cdc, funded)
|
||||||
|
Loading…
Reference in New Issue
Block a user