From 58e75da04330f03bc922c51f8bec06c595554c14 Mon Sep 17 00:00:00 2001 From: jennwiederholen Date: Thu, 19 Sep 2024 17:34:19 +0900 Subject: [PATCH] Revert "merge: dev into devnet (#129)" This reverts commit a8bfbe9e0edb58b5b7e9bbf051954617c36184ee. --- .github/workflows/artifacts.yml | 25 +- .github/workflows/dev-ci.yml | 7 +- .github/workflows/gwemix-ci.yml | 5 +- .github/workflows/master-ci.yml | 5 +- .github/workflows/release.yml | 58 - .gitmodules | 6 - Makefile | 79 +- Makefile-local-env | 132 - README.md | 4 - accounts/abi/bind/backends/simulated.go | 15 - cmd/devp2p/internal/ethtest/suite.go | 23 +- cmd/devp2p/internal/ethtest/types.go | 4 - cmd/geth/governancedeploy.go | 352 +- cmd/geth/governancedeploy_test.go | 133 - cmd/geth/main.go | 7 +- cmd/geth/wemixcmd.go | 168 +- consensus/ethash/consensus.go | 2 +- containers/docker/wemix/Dockerfile | 3 +- core/rawdb/accessors_chain.go | 4 +- eth/handler_eth.go | 3 - eth/handler_eth_test.go | 11 +- eth/protocols/eth/broadcast.go | 25 +- eth/protocols/eth/handler.go | 38 +- eth/protocols/eth/handler_test.go | 21 +- eth/protocols/eth/handlers.go | 39 +- eth/protocols/eth/peer.go | 6 - eth/protocols/eth/peer_test.go | 2 - eth/protocols/eth/protocol.go | 18 +- ethclient/gethclient/gethclient_test.go | 2 +- go.mod | 11 +- go.sum | 13 +- internal/debug/flags.go | 4 + internal/ethapi/api.go | 4 +- local-docker-env/Dockerfile.boot | 104 - local-docker-env/Dockerfile.boot.git | 126 - local-docker-env/Dockerfile.node | 105 - local-docker-env/Dockerfile.node.git | 129 - local-docker-env/README.md | 76 - local-docker-env/config-gen.sh | 79 - local-docker-env/docker-compose-gen-git.sh | 137 - local-docker-env/docker-compose-gen.sh | 115 - local-docker-env/gwemix.sh | 354 -- local-docker-env/init-boot.sh | 48 - local-docker-env/init-node.sh | 35 - local-docker-env/key-gen.sh | 52 - local-docker-env/local-docker-git.sh | 58 - local-docker-env/local-docker.sh | 52 - local-docker-env/set-nodekey.sh | 29 - miner/worker.go | 12 +- mobile/geth.go | 2 + p2p/peer.go | 18 +- p2p/protocol.go | 12 +- params/version.go | 2 +- rocksdb | 2 +- wemix/admin.go | 620 +- wemix/bind/backends/options.go | 50 - wemix/bind/backends/wemix_simulated.go | 260 - wemix/bind/backends/wemix_simulated_test.go | 175 - wemix/bind/const.go | 28 - wemix/bind/gen_ballotStorage_abi.go | 4381 ------------- wemix/bind/gen_envStorage_abi.go | 5443 ---------------- wemix/bind/gen_gov_abi.go | 5637 ----------------- wemix/bind/gen_ncpExit_abi.go | 2439 ------- wemix/bind/gen_registry_abi.go | 981 --- wemix/bind/gen_staking_abi.go | 4177 ------------ wemix/bind/structs.go | 473 -- wemix/contracts/WemixGovernance.js | 644 ++ wemix/governance-contract/.prettierrc | 14 - wemix/governance-contract/compiler.go | 160 - wemix/governance-contract/contracts/Gov.sol | 13 - .../contracts/GovChecker.sol | 92 - .../governance-contract/contracts/GovImp.sol | 1155 ---- .../governance-contract/contracts/NCPExit.sol | 13 - .../contracts/NCPExitImp.sol | 115 - .../contracts/Registry.sol | 82 - .../governance-contract/contracts/Staking.sol | 13 - .../contracts/StakingImp.sol | 385 -- .../contracts/TestnetGovImp.sol | 1031 --- wemix/governance-contract/contracts/abigen.go | 51 - .../contracts/abstract/AEnvStorage.sol | 134 - .../contracts/abstract/AGov.sol | 91 - .../contracts/abstract/BallotEnums.sol | 29 - .../contracts/abstract/EnvConstants.sol | 41 - .../contracts/abstract/TestnetAGov.sol | 91 - .../contracts/interface/IBallotStorage.sol | 48 - .../contracts/interface/IEnvStorage.sol | 36 - .../contracts/interface/IGov.sol | 19 - .../contracts/interface/IGovStaking.sol | 6 - .../contracts/interface/INCPExit.sol | 42 - .../contracts/interface/INCPStaking.sol | 18 - .../contracts/interface/IRegistry.sol | 6 - .../contracts/interface/IStaking.sol | 22 - .../contracts/interface/ITestnetGov.sol | 18 - .../contracts/openzeppelin/contracts | 1 - .../openzeppelin/contracts-upgradeable | 1 - .../contracts/storage/BallotStorage.sol | 13 - .../contracts/storage/BallotStorageImp.sol | 608 -- .../contracts/storage/EnvStorage.sol | 13 - .../contracts/storage/EnvStorageImp.sol | 362 -- .../contracts/storage/EternalStorage.sol | 147 - wemix/governance-contract/remappings.txt | 2 - wemix/governance-contract/test/const.go | 110 - wemix/governance-contract/test/contracts.go | 304 - .../governance-contract/test/gov_bind_test.go | 114 - wemix/governance-contract/test/gov_test.go | 3459 ---------- wemix/governance-contract/test/utils.go | 236 - wemix/metclient/util.go | 37 +- wemix/miner_limit.go | 95 +- wemix/rewards_test.go | 6 +- wemix/scripts/deploy-governance.js | 400 ++ wemix/scripts/gwemix.sh | 28 +- wemix/scripts/solc.sh | 188 + wemix/sync.go | 5 +- 113 files changed, 2215 insertions(+), 35723 deletions(-) delete mode 100644 .github/workflows/release.yml delete mode 100644 Makefile-local-env delete mode 100644 cmd/geth/governancedeploy_test.go delete mode 100644 local-docker-env/Dockerfile.boot delete mode 100644 local-docker-env/Dockerfile.boot.git delete mode 100644 local-docker-env/Dockerfile.node delete mode 100644 local-docker-env/Dockerfile.node.git delete mode 100644 local-docker-env/README.md delete mode 100755 local-docker-env/config-gen.sh delete mode 100755 local-docker-env/docker-compose-gen-git.sh delete mode 100755 local-docker-env/docker-compose-gen.sh delete mode 100755 local-docker-env/gwemix.sh delete mode 100644 local-docker-env/init-boot.sh delete mode 100644 local-docker-env/init-node.sh delete mode 100755 local-docker-env/key-gen.sh delete mode 100755 local-docker-env/local-docker-git.sh delete mode 100755 local-docker-env/local-docker.sh delete mode 100755 local-docker-env/set-nodekey.sh delete mode 100644 wemix/bind/backends/options.go delete mode 100644 wemix/bind/backends/wemix_simulated.go delete mode 100644 wemix/bind/backends/wemix_simulated_test.go delete mode 100644 wemix/bind/const.go delete mode 100644 wemix/bind/gen_ballotStorage_abi.go delete mode 100644 wemix/bind/gen_envStorage_abi.go delete mode 100644 wemix/bind/gen_gov_abi.go delete mode 100644 wemix/bind/gen_ncpExit_abi.go delete mode 100644 wemix/bind/gen_registry_abi.go delete mode 100644 wemix/bind/gen_staking_abi.go delete mode 100644 wemix/bind/structs.go create mode 100644 wemix/contracts/WemixGovernance.js delete mode 100644 wemix/governance-contract/.prettierrc delete mode 100644 wemix/governance-contract/compiler.go delete mode 100644 wemix/governance-contract/contracts/Gov.sol delete mode 100644 wemix/governance-contract/contracts/GovChecker.sol delete mode 100644 wemix/governance-contract/contracts/GovImp.sol delete mode 100644 wemix/governance-contract/contracts/NCPExit.sol delete mode 100644 wemix/governance-contract/contracts/NCPExitImp.sol delete mode 100644 wemix/governance-contract/contracts/Registry.sol delete mode 100644 wemix/governance-contract/contracts/Staking.sol delete mode 100644 wemix/governance-contract/contracts/StakingImp.sol delete mode 100644 wemix/governance-contract/contracts/TestnetGovImp.sol delete mode 100644 wemix/governance-contract/contracts/abigen.go delete mode 100644 wemix/governance-contract/contracts/abstract/AEnvStorage.sol delete mode 100644 wemix/governance-contract/contracts/abstract/AGov.sol delete mode 100644 wemix/governance-contract/contracts/abstract/BallotEnums.sol delete mode 100644 wemix/governance-contract/contracts/abstract/EnvConstants.sol delete mode 100644 wemix/governance-contract/contracts/abstract/TestnetAGov.sol delete mode 100644 wemix/governance-contract/contracts/interface/IBallotStorage.sol delete mode 100644 wemix/governance-contract/contracts/interface/IEnvStorage.sol delete mode 100644 wemix/governance-contract/contracts/interface/IGov.sol delete mode 100644 wemix/governance-contract/contracts/interface/IGovStaking.sol delete mode 100644 wemix/governance-contract/contracts/interface/INCPExit.sol delete mode 100644 wemix/governance-contract/contracts/interface/INCPStaking.sol delete mode 100644 wemix/governance-contract/contracts/interface/IRegistry.sol delete mode 100644 wemix/governance-contract/contracts/interface/IStaking.sol delete mode 100644 wemix/governance-contract/contracts/interface/ITestnetGov.sol delete mode 160000 wemix/governance-contract/contracts/openzeppelin/contracts delete mode 160000 wemix/governance-contract/contracts/openzeppelin/contracts-upgradeable delete mode 100644 wemix/governance-contract/contracts/storage/BallotStorage.sol delete mode 100644 wemix/governance-contract/contracts/storage/BallotStorageImp.sol delete mode 100644 wemix/governance-contract/contracts/storage/EnvStorage.sol delete mode 100644 wemix/governance-contract/contracts/storage/EnvStorageImp.sol delete mode 100644 wemix/governance-contract/contracts/storage/EternalStorage.sol delete mode 100644 wemix/governance-contract/remappings.txt delete mode 100644 wemix/governance-contract/test/const.go delete mode 100644 wemix/governance-contract/test/contracts.go delete mode 100644 wemix/governance-contract/test/gov_bind_test.go delete mode 100644 wemix/governance-contract/test/gov_test.go delete mode 100644 wemix/governance-contract/test/utils.go create mode 100644 wemix/scripts/deploy-governance.js create mode 100755 wemix/scripts/solc.sh diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 8e53af77cb69..527a85885a3e 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -9,7 +9,7 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -18,30 +18,19 @@ jobs: with: go-version: '1.19' - - name: Setup packages - run: | - sudo apt install -y libjemalloc-dev liblz4-dev libsnappy-dev libzstd-dev libudev-dev - sudo apt remove -y bzip2 libbz2-dev zlib1g-dev - - name: Build Go-WEMIX tarball run: USE_ROCKSDB=YES make gwemix.tar.gz - - name: Set version + - name: Stat Go-WEMIX tarball run: | - GWEMIX_VERSION_META="v$(build/bin/gwemix version | awk '/^Version/{ print $2 }')" - echo "GWEMIX_VERSION_META=$GWEMIX_VERSION_META" >> "$GITHUB_ENV" - echo "GWEMIX_VERSION=$(echo $GWEMIX_VERSION_META | cut -d'-' -f1)" >> "$GITHUB_ENV" - echo "GWEMIX_META=$(echo $GWEMIX_VERSION_META | cut -d'-' -f2-)" >> "$GITHUB_ENV" - echo "GWEMIX_COMMITHASH=$(echo ${{ github.sha }} | cut -c1-8)" >> "$GITHUB_ENV" - - - name: Display ELF info - run: readelf -dV build/bin/gwemix + ls -l build/gwemix.tar.gz + tar tf build/gwemix.tar.gz - name: Move results to artifact - run: mv build/gwemix.tar.gz gwemix-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }}-linux-amd64-rocksdb.tar.gz + run: mv build/gwemix.tar.gz gwemix-${{ github.ref_name }}-${{ github.sha }}-linux-amd64-rocksdb.tar.gz - name: Upload Go-WEMIX uses: actions/upload-artifact@v4 with: - name: artifact-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }} - path: gwemix-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }}-linux-amd64-rocksdb.tar.gz + name: artifact-${{ github.ref_name }}-${{ github.sha }} + path: gwemix-${{ github.ref_name }}-${{ github.sha }}-linux-amd64-rocksdb.tar.gz diff --git a/.github/workflows/dev-ci.yml b/.github/workflows/dev-ci.yml index 2a1b1088641a..df9f049e80aa 100644 --- a/.github/workflows/dev-ci.yml +++ b/.github/workflows/dev-ci.yml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - version: [1.18, 1.19] + version: [1.17, 1.18, 1.19] runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 @@ -38,7 +38,7 @@ jobs: uses: actions/setup-go@v3 with: go-version: ${{ matrix.version }} - + - name: Check Lint run: make lint @@ -49,9 +49,6 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Set up Wemix Submodules - run: git submodule update --init wemix/ - - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/gwemix-ci.yml b/.github/workflows/gwemix-ci.yml index da7fcc178378..f141532d2241 100644 --- a/.github/workflows/gwemix-ci.yml +++ b/.github/workflows/gwemix-ci.yml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - version: [1.18, 1.19] + version: [1.17, 1.18, 1.19] runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 @@ -49,9 +49,6 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Set up Wemix Submodules - run: git submodule update --init wemix/ - - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/master-ci.yml b/.github/workflows/master-ci.yml index b9b67f2da7eb..46736e268895 100644 --- a/.github/workflows/master-ci.yml +++ b/.github/workflows/master-ci.yml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - version: [1.18, 1.19] + version: [1.17, 1.18, 1.19] runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 @@ -49,9 +49,6 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Set up Wemix Submodules - run: git submodule update --init wemix/ - - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 957166478d25..000000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: "Release a tag as draft" - -on: - push: - tags: - - w* - -jobs: - - build: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v4 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.19' - - - name: Setup packages - run: | - sudo apt install -y libjemalloc-dev liblz4-dev libsnappy-dev libzstd-dev libudev-dev - sudo apt remove -y bzip2 libbz2-dev zlib1g-dev - - - name: Build Go-WEMIX tarball (rocksdb) - run: USE_ROCKSDB=YES make gwemix.tar.gz - - - name: Set version - run: | - GWEMIX_VERSION_META="v$(build/bin/gwemix version | awk '/^Version/{ print $2 }')" - echo "GWEMIX_VERSION_META=$GWEMIX_VERSION_META" >> "$GITHUB_ENV" - echo "GWEMIX_VERSION=$(echo $GWEMIX_VERSION_META | cut -d'-' -f1)" >> "$GITHUB_ENV" - echo "GWEMIX_META=$(echo $GWEMIX_VERSION_META | cut -d'-' -f2-)" >> "$GITHUB_ENV" - echo "GWEMIX_COMMITHASH=$(echo ${{ github.sha }} | cut -c1-8)" >> "$GITHUB_ENV" - - - name: Display ELF info (rocksdb) - run: readelf -dV build/bin/gwemix - - - name: Move results to artifact (rocksdb) - run: mv build/gwemix.tar.gz gwemix-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }}-linux-amd64-rocksdb.tar.gz - - - name: Build Go-WEMIX tarball (leveldb) - run: USE_ROCKSDB=NO make gwemix.tar.gz - - - name: Display ELF info (leveldb) - run: readelf -dV build/bin/gwemix - - - name: Move results to artifact (leveldb) - run: mv build/gwemix.tar.gz gwemix-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }}-linux-amd64-leveldb.tar.gz - - - name: GH Release - uses: softprops/action-gh-release@v2.0.5 - with: - name: WEMIX3.0 Mainnet and Testnet Build (${{ env.GWEMIX_VERSION }}) - draft: true - files: | - gwemix-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }}-linux-amd64-rocksdb.tar.gz - gwemix-${{ env.GWEMIX_VERSION_META }}-${{ env.GWEMIX_COMMITHASH }}-linux-amd64-leveldb.tar.gz diff --git a/.gitmodules b/.gitmodules index 4dcaf5dbad01..57093244b9c7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -12,9 +12,3 @@ [submodule "etcd"] path = etcd url = https://github.com/metadium/etcd -[submodule "wemix/governance-contract/contracts/openzeppelin/contracts-upgradeable"] - path = wemix/governance-contract/contracts/openzeppelin/contracts-upgradeable - url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable -[submodule "wemix/governance-contract/contracts/openzeppelin/contracts"] - path = wemix/governance-contract/contracts/openzeppelin/contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts diff --git a/Makefile b/Makefile index 5f2b8a1575b7..f7b7366f29a1 100644 --- a/Makefile +++ b/Makefile @@ -31,14 +31,16 @@ endif gwemix.tar.gz: gwemix logrot @[ -d build/conf ] || mkdir -p build/conf - @cp -p wemix/scripts/gwemix.sh build/bin/ + @cp -p wemix/scripts/gwemix.sh wemix/scripts/solc.sh build/bin/ @cp -p wemix/scripts/config.json.example \ wemix/scripts/genesis-template.json \ + wemix/contracts/WemixGovernance.js \ + wemix/scripts/deploy-governance.js \ build/conf/ @(cd build; tar cfz gwemix.tar.gz bin conf) @echo "Done building build/gwemix.tar.gz" -gwemix: rocksdb +gwemix: rocksdb wemix/governance_abi.go ifeq ($(USE_ROCKSDB), NO) $(GORUN) build/ci.go install $(ROCKSDB_TAG) ./cmd/gwemix else @@ -66,7 +68,7 @@ else $(GORUN) build/ci.go install $(ROCKSDB_TAG) ./cmd/dbbench endif -all: +all: wemix/governance_abi.go $(GORUN) build/ci.go install android: @@ -87,12 +89,12 @@ test: all test-short: all $(GORUN) build/ci.go test -short -lint: ## Run linters. +lint: wemix/governance_abi.go ## Run linters. $(GORUN) build/ci.go lint clean: env GO111MODULE=on go clean -cache - rm -fr build/_workspace/pkg/ $(GOBIN)/* build/conf + rm -fr build/_workspace/pkg/ $(GOBIN)/* build/conf wemix/admin_abi.go wemix/governance_abi.go @ROCKSDB_DIR=$(ROCKSDB_DIR); \ if [ -e $${ROCKSDB_DIR}/Makefile ]; then \ cd $${ROCKSDB_DIR}; \ @@ -130,3 +132,70 @@ rocksdb: @[ ! -e rocksdb/.git ] && git submodule update --init rocksdb; \ cd $(ROCKSDB_DIR) && PORTABLE=1 make -j8 static_lib; endif + +AWK_CODE=' \ +BEGIN { print "package wemix"; bin = 0; name = ""; abi = ""; } \ +/^{/ { bin = 1; abi = ""; name = ""; } \ +/^}/ { bin = 0; abi = abi "}"; print "var " name "Abi = `" abi "`"; } \ +{ \ + if (bin == 1) { \ + abi = abi $$0; \ + if ($$1 == "\"contractName\":") { \ + name = $$2; \ + gsub(",|\"", "", name); \ + } \ + } \ +}' + +wemix/admin_abi.go: wemix/contracts/WemixAdmin-template.sol build/bin/solc + @PATH=${PATH}:build/bin wemix/scripts/solc.sh -f abi $< /tmp/junk.$$$$; \ + cat /tmp/junk.$$$$ | awk $(AWK_CODE) > $@; \ + rm -f /tmp/junk.$$$$; + +AWK_CODE_2=' \ +BEGIN { print "package wemix\n"; } \ +/^var Registry_contract/ { \ + sub("^var[^(]*\\(","",$$0); sub("\\);$$","",$$0); \ + n = "Registry"; \ + print "var " n "Abi = `{ \"contractName\": \"" n "\", \"abi\": " $$0 "}`"; \ +} \ +/^var StakingImp_contract/ { \ + sub("^var[^(]*\\(","",$$0); sub("\\);$$","",$$0); \ + n = "Staking"; \ + print "var " n "Abi = `{ \"contractName\": \"" n "\", \"abi\": " $$0 "}`"; \ +} \ +/^var EnvStorageImp_contract/ { \ + sub("^var[^(]*\\(","",$$0); sub("\\);$$","",$$0); \ + n = "EnvStorageImp"; \ + print "var " n "Abi = `{ \"contractName\": \"" n "\", \"abi\": " $$0 "}`"; \ +} \ +/^var GovImp_contract/ { \ + sub("^var[^(]*\\(","",$$0); sub("\\);$$","",$$0); \ + n = "Gov"; \ + print "var " n "Abi = `{ \"contractName\": \"" n "\", \"abi\": " $$0 "}`"; \ +}' + +wemix/governance_abi.go: wemix/contracts/WemixGovernance.js + @cat $< | awk $(AWK_CODE_2) > $@ + +ifneq ($(shell uname), Linux) + +build/bin/solc: + @test 1 + +else + +SOLC_URL=https://github.com/ethereum/solidity/releases/download/v0.4.24/solc-static-linux +build/bin/solc: + @[ -d build/bin ] || mkdir -p build/bin; \ + if [ ! -x build/bin/solc ]; then \ + if which curl > /dev/null 2>&1; then \ + curl -Ls -o build/bin/solc $(SOLC_URL); \ + chmod +x build/bin/solc; \ + elif which wget > /dev/null 2>&1; then \ + wget -nv -o build/bin/solc $(SOLC_URL); \ + chmod +x build/bin/solc; \ + fi \ + fi + +endif diff --git a/Makefile-local-env b/Makefile-local-env deleted file mode 100644 index b3593ba1962a..000000000000 --- a/Makefile-local-env +++ /dev/null @@ -1,132 +0,0 @@ -# This Makefile is meant to be used by people that do not usually work -# with Go source code. If you know what GOPATH is then you probably -# don't need to bother with make. - -.PHONY: geth android ios evm all test clean rocksdb -.PHONY: gwemix-linux - -GOBIN = ./build/bin -GO ?= latest -GORUN = env GO111MODULE=on go run - -# USE_ROCKSDB -# - undefined | "NO": Do not use -# - "YES": build a static lib from rocksdb directory, and use that one -# - "EXISTING": use existing rocksdb shared lib. -ifndef USE_ROCKSDB - ifeq ($(shell uname), Linux) - USE_ROCKSDB = YES - else - USE_ROCKSDB = NO - endif -endif -ifneq ($(shell uname), Linux) - USE_ROCKSDB = NO -endif - -ifneq ($(USE_ROCKSDB), NO) -ROCKSDB_DIR=$(shell pwd)/rocksdb -ROCKSDB_TAG=-tags rocksdb -endif - -gwemix.tar.gz: gwemix logrot - @[ -d build/conf ] || mkdir -p build/conf - @cp -p local-docker-env/gwemix.sh local-docker-env/set-nodekey.sh local-docker-env/init-boot.sh local-docker-env/init-node.sh build/bin/ - @cp -p wemix/scripts/config.json.example \ - wemix/scripts/genesis-template.json \ - build/conf/ - @(cd build; tar cfz gwemix.tar.gz bin conf) - @echo "Done building build/gwemix.tar.gz" - -gwemix: rocksdb -ifeq ($(USE_ROCKSDB), NO) - $(GORUN) build/ci.go install $(ROCKSDB_TAG) ./cmd/gwemix -else - CGO_CFLAGS=-I$(ROCKSDB_DIR)/include \ - CGO_LDFLAGS="-L$(ROCKSDB_DIR) -lrocksdb -lm -lstdc++ $(shell awk '/PLATFORM_LDFLAGS/ {sub("PLATFORM_LDFLAGS=", ""); print} /JEMALLOC=1/ {print "-ljemalloc"}' < $(ROCKSDB_DIR)/make_config.mk)" \ - $(GORUN) build/ci.go install $(ROCKSDB_TAG) ./cmd/gwemix -endif - @echo "Done building." - @echo "Run \"$(GOBIN)/gwemix\" to launch gwemix." - -logrot: - $(GORUN) build/ci.go install ./cmd/logrot - -geth: - $(GORUN) build/ci.go install ./cmd/geth - @echo "Done building." - @echo "Run \"$(GOBIN)/geth\" to launch geth." - -dbbench: rocksdb -ifeq ($(USE_ROCKSDB), NO) - $(GORUN) build/ci.go install $(ROCKSDB_TAG) ./cmd/dbbench -else - CGO_CFLAGS=-I$(ROCKSDB_DIR)/include \ - CGO_LDFLAGS="-L$(ROCKSDB_DIR) -lrocksdb -lm -lstdc++ $(shell awk '/PLATFORM_LDFLAGS/ {sub("PLATFORM_LDFLAGS=", ""); print} /JEMALLOC=1/ {print "-ljemalloc"}' < $(ROCKSDB_DIR)/make_config.mk)" \ - $(GORUN) build/ci.go install $(ROCKSDB_TAG) ./cmd/dbbench -endif - -all: - $(GORUN) build/ci.go install - -android: - $(GORUN) build/ci.go aar --local - @echo "Done building." - @echo "Import \"$(GOBIN)/geth.aar\" to use the library." - @echo "Import \"$(GOBIN)/geth-sources.jar\" to add javadocs" - @echo "For more info see https://stackoverflow.com/questions/20994336/android-studio-how-to-attach-javadoc" - -ios: - $(GORUN) build/ci.go xcode --local - @echo "Done building." - @echo "Import \"$(GOBIN)/Geth.framework\" to use the library." - -test: all - $(GORUN) build/ci.go test - -test-short: all - $(GORUN) build/ci.go test -short - -lint: ## Run linters. - $(GORUN) build/ci.go lint - -clean: - env GO111MODULE=on go clean -cache - rm -fr build/_workspace/pkg/ $(GOBIN)/* build/conf - @ROCKSDB_DIR=$(ROCKSDB_DIR); \ - if [ -e $${ROCKSDB_DIR}/Makefile ]; then \ - cd $${ROCKSDB_DIR}; \ - make clean; \ - fi - -# The devtools target installs tools required for 'go generate'. -# You need to put $GOBIN (or $GOPATH/bin) in your PATH to use 'go generate'. - -devtools: - env GOBIN= go install golang.org/x/tools/cmd/stringer@latest - env GOBIN= go install github.com/fjl/gencodec@latest - env GOBIN= go install github.com/golang/protobuf/protoc-gen-go@latest - env GOBIN= go install ./cmd/abigen - @type "solc" 2> /dev/null || echo 'Please install solc' - @type "protoc" 2> /dev/null || echo 'Please install protoc' - -gwemix-linux: - @docker --version > /dev/null 2>&1; \ - if [ ! $$? = 0 ]; then \ - echo "Docker not found."; \ - else \ - docker build -t wemix/builder:local \ - -f Dockerfile.wemix . && \ - docker run -e HOME=/tmp --rm -v $(shell pwd):/data \ - -w /data wemix/builder:local \ - "git config --global --add safe.directory /data;\ - make USE_ROCKSDB=$(USE_ROCKSDB)"; \ - fi - -ifneq ($(USE_ROCKSDB), YES) -rocksdb: -else -rocksdb: - @[ ! -e rocksdb/.git ] && git submodule update --init rocksdb; \ - cd $(ROCKSDB_DIR) && PORTABLE=1 make -j8 static_lib; -endif diff --git a/README.md b/README.md index d3b45c4364d4..d844c72fb4a5 100644 --- a/README.md +++ b/README.md @@ -170,10 +170,6 @@ After getting enodes of mining nodes, run gwemix as follows. See documentation [here](docs/container.md) -### Starting Nodes For Local Test With Docker - -See documentation [here](local-docker-env/README.md) - ### The original go-ethereum README follows... ## Go Ethereum diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index a73eb311eadd..e26341d9df5d 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -37,7 +37,6 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" @@ -73,20 +72,6 @@ type SimulatedBackend struct { config *params.ChainConfig } -func NewSimulatedBackendWithEthereum(e *eth.Ethereum) *SimulatedBackend { - database := e.ChainDb() - blockchain := e.BlockChain() - - backend := &SimulatedBackend{ - database: database, - blockchain: blockchain, - config: blockchain.Config(), - events: filters.NewEventSystem(&filterBackend{database, blockchain}, false), - } - backend.rollback(blockchain.CurrentBlock()) - return backend -} - // NewSimulatedBackendWithDatabase creates a new binding backend based on the given database // and uses a simulated blockchain for testing purposes. // A simulated backend always uses chainID 1337. diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go index 223ec5acab77..a3541df7fc35 100644 --- a/cmd/devp2p/internal/ethtest/suite.go +++ b/cmd/devp2p/internal/ethtest/suite.go @@ -755,20 +755,17 @@ func (s *Suite) TestNewPooledTxs66(t *utesting.T) { } // generate 50 txs - _, txs, err := generateTxs(s, 50) + hashMap, _, err := generateTxs(s, 50) if err != nil { t.Fatalf("failed to generate transactions: %v", err) } // create new pooled tx hashes announcement - hashes := make([]common.Hash, len(txs)) - types := make([]byte, len(txs)) - sizes := make([]uint32, len(txs)) - for i, tx := range txs { - hashes[i] = tx.Hash() - types[i] = tx.Type() - sizes[i] = uint32(tx.Size()) + hashes := make([]common.Hash, 0) + for _, hash := range hashMap { + hashes = append(hashes, hash) } + announce := NewPooledTransactionHashes(hashes) // send announcement conn, err := s.dial66() @@ -779,14 +776,6 @@ func (s *Suite) TestNewPooledTxs66(t *utesting.T) { if err = conn.peer(s.chain, nil); err != nil { t.Fatalf("peering failed: %v", err) } - - var announce Message - if conn.negotiatedProtoVersion == eth.ETH68 { - announce = NewPooledTransactionHashes68{Types: types} - } else { - announce = NewPooledTransactionHashes(hashes) - } - if err = conn.Write(announce); err != nil { t.Fatalf("failed to write to connection: %v", err) } @@ -803,8 +792,6 @@ func (s *Suite) TestNewPooledTxs66(t *utesting.T) { // ignore propagated txs from previous tests case *NewPooledTransactionHashes: continue - case *NewPooledTransactionHashes68: - continue // ignore block announcements from previous tests case *NewBlockHashes: continue diff --git a/cmd/devp2p/internal/ethtest/types.go b/cmd/devp2p/internal/ethtest/types.go index becb1b5c5bcf..e92b54394067 100644 --- a/cmd/devp2p/internal/ethtest/types.go +++ b/cmd/devp2p/internal/ethtest/types.go @@ -116,10 +116,6 @@ type NewPooledTransactionHashes eth.NewPooledTransactionHashesPacket func (nb NewPooledTransactionHashes) Code() int { return 24 } -type NewPooledTransactionHashes68 eth.NewPooledTransactionHashesPacket68 - -func (nb NewPooledTransactionHashes68) Code() int { return 24 } - type GetPooledTransactions eth.GetPooledTransactionsPacket func (gpt GetPooledTransactions) Code() int { return 25 } diff --git a/cmd/geth/governancedeploy.go b/cmd/geth/governancedeploy.go index 4e488b6e18c8..4f2eb965e9a6 100644 --- a/cmd/geth/governancedeploy.go +++ b/cmd/geth/governancedeploy.go @@ -3,28 +3,24 @@ package main import ( + "bytes" "context" - "errors" + "encoding/hex" "fmt" "math/big" "os" + "reflect" - "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" - gov "github.com/ethereum/go-ethereum/wemix/bind" "github.com/ethereum/go-ethereum/wemix/metclient" "gopkg.in/urfave/cli.v1" ) -func getInitialGovernanceInitDatas(configJsFile string) ( - domains map[string]common.Address, - env gov.InitEnvStorage, - members gov.InitMembers, - err error, -) { +func getInitialGovernanceMembersAndNodes(configJsFile string) (nodes []byte, stakes []byte, rewardPoolAccount, maintenanceAccount *common.Address, err error) { var fin *os.File if fin, err = os.Open(configJsFile); err != nil { return @@ -37,124 +33,312 @@ func getInitialGovernanceInitDatas(configJsFile string) ( return } - domains = make(map[string]common.Address) - zeroAddress := common.Address{} - if cfg.StakingReward != zeroAddress { - domains[gov.DOMAIN_StakingReward] = cfg.StakingReward - } - if cfg.Ecosystem != zeroAddress { - domains[gov.DOMAIN_Ecosystem] = cfg.Ecosystem - } - if cfg.Maintenance != zeroAddress { - domains[gov.DOMAIN_Maintenance] = cfg.Maintenance - } - if cfg.FeeCollector != zeroAddress { - domains[gov.DOMAIN_FeeCollector] = cfg.FeeCollector - } + l := len(cfg.Members) + var b1, b2 bytes.Buffer + for i := 0; i < l; i++ { + m := cfg.Members[i] + var ( + sid string + id []byte + ) + if len(m.Id) == 128 { + sid = m.Id + } else if len(m.Id) == 130 { + sid = m.Id[2:] + } else { + return nil, nil, nil, nil, fmt.Errorf("Invalid enode id %s", m.Id) + } + if id, err = hex.DecodeString(sid); err != nil { + return nil, nil, nil, nil, err + } - env = cfg.Env.ToInitData() + addr := new(big.Int).SetBytes(m.Addr[:]) + b1.Write(metclient.PackNum(reflect.ValueOf(addr))) + b1.Write(metclient.PackNum(reflect.ValueOf(len(m.Name)))) + b1.Write([]byte(m.Name)) + b1.Write(metclient.PackNum(reflect.ValueOf(len(id)))) + b1.Write(id) + b1.Write(metclient.PackNum(reflect.ValueOf(len(m.Ip)))) + b1.Write([]byte(m.Ip)) + b1.Write(metclient.PackNum(reflect.ValueOf(m.Port))) - members = make(gov.InitMembers, len(cfg.Members)) - for i, member := range cfg.Members { - members[i] = member.ToInitData() + b2.Write(metclient.PackNum(reflect.ValueOf(addr))) + b2.Write(metclient.PackNum(reflect.ValueOf(m.Stake))) + } + nodes = b1.Bytes() + stakes = b2.Bytes() + nilAddr := common.Address{} + if cfg.RewardPool != nilAddr { + rewardPoolAccount = &cfg.RewardPool + } + if cfg.Maintenance != nilAddr { + maintenanceAccount = &cfg.Maintenance } return } // governance-contract.js config.js -func deployGovernanceContracts(ctx *cli.Context) error { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stdout, log.TerminalFormat(true)))) +func deployGovernanceContracts(cliCtx *cli.Context) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + var err error + // get command line arguments - args := ctx.Args() + url := cliCtx.String(urlFlag.Name) + gas := cliCtx.Int(gasFlag.Name) + gasPrice := cliCtx.Int(gasPriceFlag.Name) - var ( - errInvalidArguments error = errors.New("invalid Arguments") - configFile, accountFile string - lockAmount *big.Int - ) - switch len(args) { - case 3: - configFile, accountFile = args[0], args[1] - lockAmount, ok := new(big.Int).SetString(args[2], 10) - if !ok || lockAmount.Sign() <= 0 { - return errInvalidArguments - } - case 2: - configFile, accountFile = args[0], args[1] - lockAmount = gov.DefaultInitEnvStorage.STAKING_MIN - default: - return errInvalidArguments + if gas <= 0 { + gas = 0xF000000 + } + if gasPrice <= 0 { + gasPrice = 80000000000 + } + + if len(url) == 0 || len(cliCtx.Args()) != 3 { + return fmt.Errorf("Invalid Arguments") + } + + passwd := utils.GetPassPhraseWithList("", false, 0, utils.MakePasswordList(cliCtx)) + if len(passwd) == 0 { + return fmt.Errorf("Invalid Arguments") } - client, err := ethclient.Dial(ctx.String(urlFlag.Name)) + contractsFile, configJsFile, accountFile := cliCtx.Args()[0], cliCtx.Args()[1], cliCtx.Args()[2] + + // account + var from *keystore.Key + from, err = metclient.LoadAccount(passwd, accountFile) if err != nil { return err } - chainID, err := client.ChainID(context.TODO()) + + // initial members and nodes data + var ( + membersAndNodes, stakes []byte + rewardPoolAccount, maintenanceAccount *common.Address + ) + membersAndNodes, stakes, rewardPoolAccount, maintenanceAccount, err = getInitialGovernanceMembersAndNodes(configJsFile) + if err != nil { + return nil + } + + // cli connection + var cli *ethclient.Client + cli, err = ethclient.Dial(url) if err != nil { return err } - var opts *bind.TransactOpts - if from, err := metclient.LoadAccount(utils.GetPassPhraseWithList("", false, 0, utils.MakePasswordList(ctx)), accountFile); err != nil { - return err - } else if opts, err = bind.NewKeyedTransactorWithChainID(from.PrivateKey, chainID); err != nil { - return err + // contract variables + registry := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + envStorageImp := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + staking := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + ballotStorage := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + envStorage := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + govImp := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + gov := &metclient.RemoteContract{Cli: cli, From: from, Gas: gas} + + // load contract codes + var contracts map[string]*metclient.ContractData + if fin, e2 := os.Open(contractsFile); e2 != nil { + return e2 } else { - if ctx.IsSet(gasFlag.Name) { - opts.GasLimit = ctx.Uint64(gasFlag.Name) + defer fin.Close() + if contracts, err = metclient.LoadJsContract(fin); err != nil { + return nil } - if ctx.IsSet(gasPriceFlag.Name) { - opts.GasPrice = big.NewInt(ctx.Int64(gasPriceFlag.Name)) + } + + // check if contracts exist + contractNames := []string{"Registry", "EnvStorageImp", "Staking", "BallotStorage", "EnvStorage", "GovImp", "Gov"} + for _, name := range contractNames { + if _, ok := contracts[name]; !ok { + return fmt.Errorf("Cannot find %s contract", name) } } + registry.Abi = contracts["Registry"].Abi + envStorageImp.Abi = contracts["EnvStorageImp"].Abi + staking.Abi = contracts["Staking"].Abi + ballotStorage.Abi = contracts["BallotStorage"].Abi + envStorage.Abi = contracts["EnvStorage"].Abi + govImp.Abi = contracts["GovImp"].Abi + gov.Abi = contracts["Gov"].Abi - return deployGovernance(client, opts, lockAmount, configFile) -} + txs := make([]common.Hash, 10) -type Client interface { - bind.ContractBackend - bind.DeployBackend -} + // 1. deploy Registry and EnvStorageImp contracts + ixTxs := 0 + fmt.Println("Deploying Registry...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["Registry"], nil, gas, gasPrice); err != nil { + return err + } + ixTxs++ + fmt.Println("Deploying EnvStorageImp...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["EnvStorageImp"], nil, gas, gasPrice); err != nil { + return err + } -func deployGovernance(cli Client, ownerOpts *bind.TransactOpts, lockAmount *big.Int, configJsFile string) error { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + fmt.Print("Waiting for receipts...") + for i := ixTxs; i >= 0; i-- { + var receipt *types.Receipt + receipt, err = metclient.GetContractReceipt(ctx, cli, txs[i], 200, 300) + if err != nil { + return err + } + switch i { + case 0: + registry.To = &receipt.ContractAddress + case 1: + envStorageImp.To = &receipt.ContractAddress + } + } + fmt.Println("good.") - ownerOpts.Context = ctx + // 2. deploy Staking, BallotStorage, EnvStorage, GovImp, Gov + ixTxs = 0 + fmt.Println("Deploying Staking...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["Staking"], + []interface{}{registry.To, stakes}, gas, gasPrice); err != nil { + return err + } + ixTxs++ + fmt.Println("Deploying BalloStorage...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["BallotStorage"], + []interface{}{registry.To}, gas, gasPrice); err != nil { + return err + } + ixTxs++ + fmt.Println("Deploying EnvStorage...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["EnvStorage"], + []interface{}{registry.To, envStorageImp.To}, gas, gasPrice); err != nil { + return err + } + ixTxs++ + fmt.Println("Deploying GovImp...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["GovImp"], nil, gas, gasPrice); err != nil { + return err + } + ixTxs++ + fmt.Println("Deploying Gov...") + if txs[ixTxs], err = metclient.Deploy(ctx, cli, from, contracts["Gov"], + nil, gas, gasPrice); err != nil { + return err + } + fmt.Println("Gov tx is", txs[ixTxs].Hex()) - // initial members and nodes data - domains, env, members, err := getInitialGovernanceInitDatas(configJsFile) - if err != nil { + fmt.Printf("Waiting for receipts...") + for i := ixTxs; i >= 0; i-- { + var receipt *types.Receipt + receipt, err = metclient.GetContractReceipt(ctx, cli, txs[i], 200, 300) + if err != nil { + return err + } + switch i { + case 0: + staking.To = &receipt.ContractAddress + case 1: + ballotStorage.To = &receipt.ContractAddress + case 2: + envStorage.To = &receipt.ContractAddress + case 3: + govImp.To = &receipt.ContractAddress + case 4: + gov.To = &receipt.ContractAddress + } + } + fmt.Printf("good. Governance address %v.\n", gov.To.Hex()) + + // 3. setup registry + fmt.Println("Setting registry...") + ixTxs = 0 + if txs[ixTxs], err = metclient.SendContract(ctx, registry, "setContractDomain", []interface{}{metclient.ToBytes32("Staking"), staking.To}); err != nil { + return err + } + ixTxs++ + if txs[ixTxs], err = metclient.SendContract(ctx, registry, "setContractDomain", []interface{}{metclient.ToBytes32("BallotStorage"), ballotStorage.To}); err != nil { + return err + } + ixTxs++ + if txs[ixTxs], err = metclient.SendContract(ctx, registry, "setContractDomain", []interface{}{metclient.ToBytes32("EnvStorage"), envStorage.To}); err != nil { return err } - if lockAmount.Cmp(env.STAKING_MIN) < 0 || lockAmount.Cmp(env.STAKING_MAX) > 0 { - return fmt.Errorf("invalid lock amount, input:%v, min:%v, max:%v", lockAmount, env.STAKING_MIN, env.STAKING_MAX) + ixTxs++ + if txs[ixTxs], err = metclient.SendContract(ctx, registry, "setContractDomain", []interface{}{metclient.ToBytes32("GovernanceContract"), gov.To}); err != nil { + return err + } + if rewardPoolAccount != nil { + ixTxs++ + if txs[ixTxs], err = metclient.SendContract(ctx, registry, "setContractDomain", []interface{}{metclient.ToBytes32("RewardPool"), rewardPoolAccount}); err != nil { + return err + } + } + if maintenanceAccount != nil { + ixTxs++ + if txs[ixTxs], err = metclient.SendContract(ctx, registry, "setContractDomain", []interface{}{metclient.ToBytes32("Maintenance"), maintenanceAccount}); err != nil { + return err + } } - // deploy & set domains - contracts, err := gov.DeployGovContracts(ownerOpts, cli, domains) - if err != nil { + // no need to wait for the receipts for the above + + // 4. deposit staking - not needed + fmt.Println("Depositing stakes...") + + // 5. Gov.initOnce() + fmt.Printf("Initializing governance members and nodes...") + if txs[0], err = metclient.SendContract(ctx, gov, "initOnce", []interface{}{registry.To, govImp.To, membersAndNodes}); err != nil { return err } - // init contracts - err = gov.ExecuteInitialize(contracts, ownerOpts, cli, lockAmount, env, members) - if err != nil { + + if receipt, err2 := metclient.GetReceipt(ctx, cli, txs[0], 200, 300); err2 != nil { + return err2 + } else if receipt.Status != 1 { + fmt.Printf("Transaction %v failed with status %d.\n", + txs[0].Hex(), receipt.Status) + return fmt.Errorf("Transaction failed with status %d.", receipt.Status) + } + fmt.Println("good.") + + // 6. initialize environment storage data: + // blocksPer, ballotDurationMin, ballotDurationMax, stakingMin, stakingMax, + // gasPrice + defaultBlocksPer := big.NewInt(100) + defaultBallotDurationMin := big.NewInt(86400) + defaultBallotDurationMax := big.NewInt(604800) + defaultStakingMin, _ := big.NewInt(0).SetString("4980000000000000000000000", 0) + defaultStakingMax, _ := big.NewInt(0).SetString("39840000000000000000000000", 0) + defaultGasPrice := big.NewInt(80000000000) + defaultMaxIdleBlockInterval := big.NewInt(5) + envDefaults := []interface{}{ + defaultBlocksPer, + defaultBallotDurationMin, + defaultBallotDurationMax, + defaultStakingMin, + defaultStakingMax, + defaultGasPrice, + defaultMaxIdleBlockInterval, + } + fmt.Printf("Initializing environment storage.\n") + envStorageImp.To = envStorage.To + if txs[0], err = metclient.SendContract(ctx, envStorageImp, "initialize", envDefaults); err != nil { return err } - // print the addresses - address := contracts.Address() + // 7. print the addresses fmt.Printf(`{ "REGISTRY_ADDRESS": "%s", "STAKING_ADDRESS": "%s", "ENV_STORAGE_ADDRESS": "%s", "BALLOT_STORAGE_ADDRESS": "%s", - "GOV_ADDRESS": "%s" + "GOV_ADDRESS": "%s", + "GOV_IMP_ADDRESS": "%s" } `, - address.Registry, address.Staking, address.EnvStorage, address.BallotStorage, address.Gov) + registry.To.Hex(), staking.To.Hex(), envStorage.To.Hex(), + ballotStorage.To.Hex(), gov.To.Hex(), govImp.To.Hex()) return nil } diff --git a/cmd/geth/governancedeploy_test.go b/cmd/geth/governancedeploy_test.go deleted file mode 100644 index 347d3a673603..000000000000 --- a/cmd/geth/governancedeploy_test.go +++ /dev/null @@ -1,133 +0,0 @@ -// governancedeploy.js - -package main - -import ( - "context" - "encoding/json" - "math" - "math/big" - "os" - "path/filepath" - "testing" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" - gov "github.com/ethereum/go-ethereum/wemix/bind" - "github.com/stretchr/testify/require" -) - -func TestDeployGoverananceContracts(t *testing.T) { - owner, err := crypto.GenerateKey() - require.NoError(t, err) - - opts, err := bind.NewKeyedTransactorWithChainID(owner, params.AllEthashProtocolChanges.ChainID) - require.NoError(t, err) - - backend := backends.NewSimulatedBackend( - core.GenesisAlloc{ - opts.From: {Balance: new(big.Int).Mul(big.NewInt(math.MaxInt64), big.NewInt(params.Ether))}, - }, - params.MaxGasLimit, - ) - - fin := make(chan struct{}) - defer close(fin) - - go func() { - ticker := time.NewTicker(0.1e9) - defer ticker.Stop() - - nonce, err := backend.NonceAt(context.Background(), opts.From, nil) - require.NoError(t, err) - - for { - select { - case <-ticker.C: - pending, err := backend.PendingNonceAt(context.Background(), opts.From) - require.NoError(t, err) - if nonce != pending { - nonce = pending - backend.Commit() - } - case <-fin: - return - } - } - }() - - configJSFile := filepath.Join(t.TempDir(), "config.json") - require.NoError(t, os.WriteFile(configJSFile, []byte(configStr), 0775)) - - domains, env, members, err := getInitialGovernanceInitDatas(configJSFile) - require.NoError(t, err) - for name, addr := range domains { - t.Log(name, addr) - } - bytes, _ := json.MarshalIndent(env, "", " ") - t.Log(string(bytes)) - for i, member := range members { - t.Log(i, member) - } - - require.NoError(t, deployGovernance(backend, opts, gov.DefaultInitEnvStorage.STAKING_MIN, configJSFile)) -} - -// config.json.example -const configStr string = ` -{ - "extraData": "The beginning of Wemix3.0 testnet on July 1st, 2022", - "staker": "0xf00d9928ed1dada205aec56ab85e0e2ab5670ad5", - "ecosystem": "0x1be19928ed1dada205aec56ab85e0e2ab5670ad5", - "maintenance": "0x900d9928ed1dada205aec56ab85e0e2ab5670ad5", - "feecollector": "0x900d9928ed1dada205aec56ab85e0e2ab5670ad5", - "env": { - "ballotDurationMin": 86400, - "ballotDurationMax": 604800, - "stakingMin": 1500000000000000000000000, - "stakingMax": 1500000000000000000000000, - "MaxIdleBlockInterval": 5, - "blockCreationTime": 1000, - "blockRewardAmount": 1000000000000000000, - "maxPriorityFeePerGas": 100000000000, - "rewardDistributionMethod": [ 4000, 1000, 2500, 2500 ], - "maxBaseFee": 50000000000000, - "blockGasLimit": 105000000, - "baseFeeMaxChangeRate": 55, - "gasTargetPercentage": 30 - }, - "members": [ - { - "addr": "0x1be19928ed1dada205aec56ab85e0e2ab5670ad5", - "stake": 2000000000000000000000000000, - "name": "fak1", - "id": "0xfa5f92fc954e4e45ac5773d5472bf8ab0b888979a5e65d49bac65e1b4345e82a745e255d1018d7a6de7ae8fd3a04b0e8eca4359f0fd35c2d0c45d29f7ffa0290", - "ip": "172.18.0.1", - "port": 8589, - "bootnode": true - }, - { - "addr": "0xb4388353fd0f3b3a017e09f2b857052ff219e663", - "stake": 2000000000000000000000000000, - "name": "fak2", - "id": "0xea5f92fc954e4e45ac5773d5472bf8ab0b888979a5e65d49bac65e1b4345e82a745e255d1018d7a6de7ae8fd3a04b0e8eca4359f0fd35c2d0c45d29f7ffa0290", - "ip": "172.18.0.2", - "port": 8589 - } - ], - "accounts": [ - { - "addr": "0x1be19928ed1dada205aec56ab85e0e2ab5670ad5", - "balance": 200000000000000000000000 - }, - { - "addr": "0xb4388353fd0f3b3a017e09f2b857052ff219e663", - "balance": 200000000000000000000000 - } - ] -} -` diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 28e92e0010ed..cdbff4d8ff1a 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -396,6 +396,8 @@ func geth(ctx *cli.Context) error { // it unlocks any requested accounts, and starts the RPC/IPC interfaces and the // miner. func startNode(ctx *cli.Context, stack *node.Node, backend ethapi.Backend, isConsole bool) { + debug.Memsize.Add("node", stack) + // Start up the node itself utils.StartNode(ctx, stack, isConsole) @@ -410,7 +412,10 @@ func startNode(ctx *cli.Context, stack *node.Node, backend ethapi.Backend, isCon stack.AccountManager().Subscribe(events) // Create a client to interact with local geth node. - rpcClient, _ := stack.Attach() + rpcClient, err := stack.Attach() + if err != nil { + utils.Fatalf("Failed to attach to self: %v", err) + } ethClient := ethclient.NewClient(rpcClient) go func() { diff --git a/cmd/geth/wemixcmd.go b/cmd/geth/wemixcmd.go index f497b39e04ae..d301dd9c6a9e 100644 --- a/cmd/geth/wemixcmd.go +++ b/cmd/geth/wemixcmd.go @@ -27,7 +27,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/p2p/enode" - gov "github.com/ethereum/go-ethereum/wemix/bind" "github.com/ethereum/go-ethereum/wemix/metclient" "golang.org/x/sys/unix" "gopkg.in/urfave/cli.v1" @@ -160,7 +159,7 @@ Download a genesis file from a peer to initialize.`, gasPriceFlag, }, Description: ` - geth wemix deploy-governance [--password value] [--url ] [--gas ] [--gasprice ] + geth wemix deploy-governance [--password value] [--url ] [--gas ] [--gasprice ] Deploy governance contracts. To give password in command line, use "--password <(echo )". @@ -185,11 +184,11 @@ To give password in command line, use "--password <(echo )". Name: "out", Usage: "out file", } - gasFlag = cli.Uint64Flag{ + gasFlag = cli.IntFlag{ Name: "gas", Usage: "gas amount", } - gasPriceFlag = cli.Int64Flag{ + gasPriceFlag = cli.IntFlag{ Name: "gasprice", Usage: "gas price", } @@ -268,17 +267,25 @@ func nodeKey2Id(ctx *cli.Context) error { } type genesisConfig struct { - ExtraData string `json:"extraData"` - StakingReward common.Address `json:"staker"` - Ecosystem common.Address `json:"ecosystem"` - Maintenance common.Address `json:"maintenance"` - FeeCollector common.Address `json:"feecollector"` - Env *genesisEnvConfig `json:"env"` - Members []*genesisMemberConfig `json:"members"` - Accounts []*struct { + ExtraData string `json:"extraData"` + RewardPool common.Address `json:"pool"` + Maintenance common.Address `json:"maintenance"` + Accounts []*struct { Addr common.Address `json:"addr"` Balance *big.Int `json:"balance"` } `json:"accounts"` + Members []*struct { + Addr common.Address `json:"addr"` + Staker common.Address `json:"staker"` + Voter common.Address `json:"voter"` + Reward common.Address `json:"reward"` + Stake *big.Int `json:"stake"` + Name string `json:"name"` + Id string `json:"id"` + Ip string `json:"ip"` + Port int `json:"port"` + Bootnode bool `json:"bootnode"` + } `json:"members"` } func loadGenesisConfig(r io.Reader) (*genesisConfig, error) { @@ -290,122 +297,31 @@ func loadGenesisConfig(r io.Reader) (*genesisConfig, error) { } if len(config.Accounts) == 0 || len(config.Members) == 0 { - return nil, fmt.Errorf("at least one account and node are required") + return nil, fmt.Errorf("At least one account and node are required.") } bootnodeExists := false for _, m := range config.Members { - if !strings.HasPrefix(m.Id, "0x") { - m.Id = "0x" + m.Id + // to conforming form to avoid checksum error + if !(len(m.Id) == 128 || len(m.Id) == 130) { + return nil, fmt.Errorf("Not a node id: %s\n", m.Id) } - if bytes, err := hexutil.Decode(m.Id); err != nil { - return nil, fmt.Errorf("invalid node id: %s, error: %s", m.Id, err) - } else if len(bytes) != 64 { - return nil, fmt.Errorf("invalid node id: %s, error: size error", m.Id) + if len(m.Id) == 128 { + m.Id = "0x" + m.Id } if m.Bootnode { bootnodeExists = true + break } } + if !bootnodeExists { - return nil, errors.New("no bootnode found") + return nil, fmt.Errorf("No bootnode found") } return &config, nil } -type genesisEnvConfig struct { - BlocksPer *big.Int `json:"blocksPer"` - BallotDurationMin *big.Int `json:"ballotDurationMin"` - BallotDurationMax *big.Int `json:"ballotDurationMax"` - StakingMin *big.Int `json:"stakingMin"` - StakingMax *big.Int `json:"stakingMax"` - MaxIdleBlockInterval *big.Int `json:"MaxIdleBlockInterval"` - BlockCreationTime *big.Int `json:"blockCreationTime"` - BlockRewardAmount *big.Int `json:"blockRewardAmount"` - MaxPriorityFeePerGas *big.Int `json:"maxPriorityFeePerGas"` - RewardDistributionMethod [4]*big.Int `json:"rewardDistributionMethod"` // [BLOCK_PRODUCER, STAKING_REWARD, ECOSYSTEM, MAINTENANCE] - MaxBaseFee *big.Int `json:"maxBaseFee"` - BlockGasLimit *big.Int `json:"blockGasLimit"` - BaseFeeMaxChangeRate *big.Int `json:"baseFeeMaxChangeRate"` - GasTargetPercentage *big.Int `json:"gasTargetPercentage"` -} - -func (cfg *genesisEnvConfig) ToInitData() gov.InitEnvStorage { - defaultValue := gov.DefaultInitEnvStorage - withDefault := func(v, d *big.Int) *big.Int { - // '0' is no init - if v == nil || v.Sign() < 0 { - return d - } - return v - } - - return gov.InitEnvStorage{ - BLOCKS_PER: withDefault(cfg.BlocksPer, defaultValue.BLOCKS_PER), - BALLOT_DURATION_MIN: withDefault(cfg.BallotDurationMin, defaultValue.BALLOT_DURATION_MIN), - BALLOT_DURATION_MAX: withDefault(cfg.BallotDurationMax, defaultValue.BALLOT_DURATION_MAX), - STAKING_MIN: withDefault(cfg.StakingMin, defaultValue.STAKING_MIN), - STAKING_MAX: withDefault(cfg.StakingMax, defaultValue.STAKING_MAX), - MAX_IDLE_BLOCK_INTERVAL: withDefault(cfg.MaxIdleBlockInterval, defaultValue.MAX_IDLE_BLOCK_INTERVAL), - BLOCK_CREATION_TIME: withDefault(cfg.BlockCreationTime, defaultValue.BLOCK_CREATION_TIME), - BLOCK_REWARD_AMOUNT: withDefault(cfg.BlockRewardAmount, defaultValue.BLOCK_REWARD_AMOUNT), - MAX_PRIORITY_FEE_PER_GAS: withDefault(cfg.MaxPriorityFeePerGas, defaultValue.MAX_PRIORITY_FEE_PER_GAS), - BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER: withDefault(cfg.RewardDistributionMethod[0], defaultValue.BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER), - BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD: withDefault(cfg.RewardDistributionMethod[1], defaultValue.BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD), - BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM: withDefault(cfg.RewardDistributionMethod[2], defaultValue.BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM), - BLOCK_REWARD_DISTRIBUTION_MAINTENANCE: withDefault(cfg.RewardDistributionMethod[3], defaultValue.BLOCK_REWARD_DISTRIBUTION_MAINTENANCE), - MAX_BASE_FEE: withDefault(cfg.MaxBaseFee, defaultValue.MAX_BASE_FEE), - BLOCK_GASLIMIT: withDefault(cfg.BlockGasLimit, defaultValue.BLOCK_GASLIMIT), - BASE_FEE_MAX_CHANGE_RATE: withDefault(cfg.BaseFeeMaxChangeRate, defaultValue.BASE_FEE_MAX_CHANGE_RATE), - GAS_TARGET_PERCENTAGE: withDefault(cfg.GasTargetPercentage, defaultValue.GAS_TARGET_PERCENTAGE), - } -} - -type genesisMemberConfig struct { - Addr common.Address `json:"addr"` - Staker common.Address `json:"staker"` - Voter common.Address `json:"voter"` - Reward common.Address `json:"reward"` - Stake *big.Int `json:"stake"` - Name string `json:"name"` - Id string `json:"id"` - Ip string `json:"ip"` - Port int `json:"port"` - Bootnode bool `json:"bootnode"` -} - -func (cfg *genesisMemberConfig) ToInitData() gov.InitMember { - var ( - zeroAddress = common.Address{} - - staker, voter, reward common.Address = cfg.Staker, cfg.Voter, cfg.Reward - ) - - if addr := cfg.Addr; addr != zeroAddress { - if staker == zeroAddress { - staker = addr - } - if voter == zeroAddress { - voter = addr - } - if reward == zeroAddress { - reward = addr - } - } - - return gov.InitMember{ - Staker: staker, - Voter: voter, - Reward: reward, - Name: cfg.Name, - Enode: cfg.Id, - Ip: cfg.Ip, - Port: cfg.Port, - Deposit: cfg.Stake, - } -} - func genGenesis(ctx *cli.Context) error { var err error @@ -422,7 +338,7 @@ func genGenesis(ctx *cli.Context) error { if fn := ctx.String(dataFileFlag.Name); fn != "" { r, err = os.Open(fn) if err != nil { - return err + utils.Fatalf("%v", err) } } @@ -435,26 +351,29 @@ func genGenesis(ctx *cli.Context) error { if fn := ctx.String(outFlag.Name); fn != "" { w, err = os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) if err != nil { - return err + utils.Fatalf("%v", err) } } - bootacct, bootnode, zeroAddress := "", "", common.Address{} + if len(config.Members) <= 0 { + utils.Fatalf("At least one member and node are required.") + } + + bootacct, bootnode, emptyAddr := "", "", common.Address{} for _, i := range config.Members { if i.Bootnode { - bootnode = i.Id - if i.Addr != zeroAddress { + if !bytes.Equal(i.Addr[:], emptyAddr[:]) { bootacct = i.Addr.Hex() - } else if i.Staker != zeroAddress { + } else if !bytes.Equal(i.Staker[:], emptyAddr[:]) { bootacct = i.Staker.Hex() } + bootnode = i.Id break } } genesis["coinbase"] = bootacct genesis["extraData"] = hexutil.Encode([]byte(fmt.Sprintf("%s\n%s", config.ExtraData, bootnode))) - alloc := map[string]map[string]string{} for _, m := range config.Accounts { alloc[m.Addr.Hex()] = map[string]string{ @@ -583,11 +502,11 @@ func deployContract(ctx *cli.Context) error { passwd := ctx.String(utils.PasswordFileFlag.Name) url := ctx.String(urlFlag.Name) - gas := ctx.Uint64(gasFlag.Name) - gasPrice := ctx.Int64(gasPriceFlag.Name) + gas := ctx.Int(gasFlag.Name) + gasPrice := ctx.Int(gasPriceFlag.Name) if len(url) == 0 || len(ctx.Args()) != 3 { - return fmt.Errorf("invalid arguments") + return fmt.Errorf("Invalid Arguments") } accountFile, contractName, contractFile := ctx.Args()[0], ctx.Args()[1], ctx.Args()[2] @@ -614,7 +533,8 @@ func deployContract(ctx *cli.Context) error { } var hash common.Hash - hash, err = metclient.Deploy(ctxx, cli, acct, contractData, nil, int(gas), int(gasPrice)) + hash, err = metclient.Deploy(ctxx, cli, acct, contractData, nil, gas, + gasPrice) if err != nil { return err } @@ -722,7 +642,7 @@ func logrota(ctx *cli.Context) error { logOpts := strings.Split(logflag, ",") logFile := "" if len(logOpts) == 0 { - return errors.New("no log file name") + return errors.New("No log file name") } if len(logOpts) >= 1 { logFile = strings.TrimSpace(logOpts[0]) diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 5a0efda8bfff..535d5b6c344e 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -268,7 +268,7 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainHeaderReader, header, pa } // Verify the header's timestamp if !uncle { - if ethash.config.PowMode < ModeFake && header.Time > uint64(unixNow+allowedFutureBlockTimeSeconds) { + if header.Time > uint64(unixNow+allowedFutureBlockTimeSeconds) { return consensus.ErrFutureBlock } } diff --git a/containers/docker/wemix/Dockerfile b/containers/docker/wemix/Dockerfile index af6a2d09847c..3001685fc0f5 100644 --- a/containers/docker/wemix/Dockerfile +++ b/containers/docker/wemix/Dockerfile @@ -22,8 +22,7 @@ ARG cert_location=/usr/local/share/ca-certificates # Fetch and install certificates for github.com and proxy.golang.org RUN openssl s_client -showcerts -connect github.com:443 /dev/null | \ openssl x509 -outform PEM > ${cert_location}/github.crt && \ - update-ca-certificates -RUN openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | \ + openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | \ openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt && \ update-ca-certificates diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 3804a84527b0..8ea2e2ca7273 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -334,8 +334,8 @@ func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValu return rlpHeaders } // read remaining from ancients - maxBytes := count * 8000 // WEMIX mainnet block header size is 4K bytes in normal - data, err := db.AncientRange(freezerHeaderTable, i+1-count, count, maxBytes) + max := count * 700 + data, err := db.AncientRange(freezerHeaderTable, i+1-count, count, max) if err == nil && uint64(len(data)) == count { // the data is on the order [h, h+1, .., n] -- reordering needed for i := range data { diff --git a/eth/handler_eth.go b/eth/handler_eth.go index 63568c0c3959..12e91ec7f534 100644 --- a/eth/handler_eth.go +++ b/eth/handler_eth.go @@ -70,9 +70,6 @@ func (h *ethHandler) Handle(peer *eth.Peer, packet eth.Packet) error { case *eth.NewPooledTransactionHashesPacket: return h.txFetcher.Notify(peer.ID(), *packet) - case *eth.NewPooledTransactionHashesPacket68: - return h.txFetcher.Notify(peer.ID(), packet.Hashes) - case *eth.TransactionsPacket: return h.txFetcher.Enqueue(peer.ID(), *packet, false) diff --git a/eth/handler_eth_test.go b/eth/handler_eth_test.go index a33d04b8c31f..e002160fbcef 100644 --- a/eth/handler_eth_test.go +++ b/eth/handler_eth_test.go @@ -65,10 +65,6 @@ func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error { h.txAnnounces.Send(([]common.Hash)(*packet)) return nil - case *eth.NewPooledTransactionHashesPacket68: - h.txAnnounces.Send(packet.Hashes) - return nil - case *eth.TransactionsPacket: h.txBroadcasts.Send(([]*types.Transaction)(*packet)) return nil @@ -86,7 +82,6 @@ func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error { // fork IDs in the protocol handshake. func TestForkIDSplit65(t *testing.T) { testForkIDSplit(t, eth.ETH65) } func TestForkIDSplit66(t *testing.T) { testForkIDSplit(t, eth.ETH66) } -func TestForkIDSplit68(t *testing.T) { testForkIDSplit(t, eth.ETH68) } func testForkIDSplit(t *testing.T, protocol uint) { t.Parallel() @@ -245,7 +240,6 @@ func testForkIDSplit(t *testing.T, protocol uint) { // Tests that received transactions are added to the local pool. func TestRecvTransactions65(t *testing.T) { testRecvTransactions(t, eth.ETH65) } func TestRecvTransactions66(t *testing.T) { testRecvTransactions(t, eth.ETH66) } -func TestRecvTransactions68(t *testing.T) { testRecvTransactions(t, eth.ETH68) } func testRecvTransactions(t *testing.T, protocol uint) { t.Parallel() @@ -303,7 +297,6 @@ func testRecvTransactions(t *testing.T, protocol uint) { // This test checks that pending transactions are sent. func TestSendTransactions66(t *testing.T) { testSendTransactions(t, eth.ETH66) } -func TestSendTransactions68(t *testing.T) { testSendTransactions(t, eth.ETH68) } func testSendTransactions(t *testing.T, protocol uint) { t.Parallel() @@ -362,7 +355,7 @@ func testSendTransactions(t *testing.T, protocol uint) { seen := make(map[common.Hash]struct{}) for len(seen) < len(insert) { switch protocol { - case 66, 68: + case 66: select { case hashes := <-anns: for _, hash := range hashes { @@ -390,7 +383,6 @@ func testSendTransactions(t *testing.T, protocol uint) { // broadcasts or via announcements/retrievals. func TestTransactionPropagation65(t *testing.T) { testTransactionPropagation(t, eth.ETH65) } func TestTransactionPropagation66(t *testing.T) { testTransactionPropagation(t, eth.ETH66) } -func TestTransactionPropagation68(t *testing.T) { testTransactionPropagation(t, eth.ETH68) } func testTransactionPropagation(t *testing.T, protocol uint) { t.Parallel() @@ -698,7 +690,6 @@ func testBroadcastBlock(t *testing.T, peers, bcasts int) { // with the hashes in the header) gets discarded and not broadcast forward. func TestBroadcastMalformedBlock65(t *testing.T) { testBroadcastMalformedBlock(t, eth.ETH65) } func TestBroadcastMalformedBlock66(t *testing.T) { testBroadcastMalformedBlock(t, eth.ETH66) } -func TestBroadcastMalformedBlock68(t *testing.T) { testBroadcastMalformedBlock(t, eth.ETH68) } func testBroadcastMalformedBlock(t *testing.T, protocol uint) { t.Parallel() diff --git a/eth/protocols/eth/broadcast.go b/eth/protocols/eth/broadcast.go index 8febd1c611d2..09330cfdf320 100644 --- a/eth/protocols/eth/broadcast.go +++ b/eth/protocols/eth/broadcast.go @@ -142,17 +142,13 @@ func (p *Peer) announceTransactions() { if done == nil && len(queue) > 0 { // Pile transaction hashes until we reach our allowed network limit var ( - count int - pending []common.Hash - pendingTypes []byte - pendingSizes []uint32 - size common.StorageSize + count int + pending []common.Hash + size common.StorageSize ) for count = 0; count < len(queue) && size < maxTxPacketSize; count++ { - if tx := p.txpool.Get(queue[count]); tx != nil { + if p.txpool.Get(queue[count]) != nil { pending = append(pending, queue[count]) - pendingTypes = append(pendingTypes, tx.Type()) - pendingSizes = append(pendingSizes, uint32(tx.Size())) size += common.HashLength } } @@ -163,16 +159,9 @@ func (p *Peer) announceTransactions() { if len(pending) > 0 { done = make(chan struct{}) go func() { - if p.version >= ETH68 { - if err := p.sendPooledTransactionHashes68(pending, pendingTypes, pendingSizes); err != nil { - fail <- err - return - } - } else { - if err := p.sendPooledTransactionHashes(pending); err != nil { - fail <- err - return - } + if err := p.sendPooledTransactionHashes(pending); err != nil { + fail <- err + return } close(done) p.Log().Trace("Sent transaction announcements", "count", len(pending)) diff --git a/eth/protocols/eth/handler.go b/eth/protocols/eth/handler.go index ab05e026416d..27425ad16700 100644 --- a/eth/protocols/eth/handler.go +++ b/eth/protocols/eth/handler.go @@ -101,17 +101,7 @@ func MakeProtocols(backend Backend, network uint64, dnsdisc enode.Iterator) []p2 protocols := make([]p2p.Protocol, len(ProtocolVersions)) for i, version := range ProtocolVersions { version := version // Closure - var matchFunc func(cap p2p.Cap) bool = nil - var representativeNameFunc func() string = nil - if version == ETH68 { - matchFunc = func(cap p2p.Cap) bool { - return (cap.Name == ProtocolName || cap.Name == ProtocolAlias) && cap.Version == ETH68 - } - representativeNameFunc = func() string { - // When WEMIX node does p2p.handshaking, it sends `eth` for the `eth68` protocol name instead of `mir` - return ProtocolAlias - } - } + protocols[i] = p2p.Protocol{ Name: ProtocolName, Version: version, @@ -130,10 +120,8 @@ func MakeProtocols(backend Backend, network uint64, dnsdisc enode.Iterator) []p2 PeerInfo: func(id enode.ID) interface{} { return backend.PeerInfo(id) }, - Attributes: []enr.Entry{currentENREntry(backend.Chain())}, - DialCandidates: dnsdisc, - Match: matchFunc, - RepresentativeName: representativeNameFunc, + Attributes: []enr.Entry{currentENREntry(backend.Chain())}, + DialCandidates: dnsdisc, } } return protocols @@ -228,21 +216,6 @@ var eth66 = map[uint64]msgHandler{ TransactionsExMsg: handleTransactionsEx, } -var eth68 = map[uint64]msgHandler{ - NewBlockHashesMsg: handleNewBlockhashes, - NewBlockMsg: handleNewBlock, - TransactionsMsg: handleTransactions, - NewPooledTransactionHashesMsg: handleNewPooledTransactionHashes68, - GetBlockHeadersMsg: handleGetBlockHeaders66, - BlockHeadersMsg: handleBlockHeaders66, - GetBlockBodiesMsg: handleGetBlockBodies66, - BlockBodiesMsg: handleBlockBodies66, - GetReceiptsMsg: handleGetReceipts66, - ReceiptsMsg: handleReceipts66, - GetPooledTransactionsMsg: handleGetPooledTransactions66, - PooledTransactionsMsg: handlePooledTransactions66, -} - // handleMessage is invoked whenever an inbound message is received from a remote // peer. The remote connection is torn down upon returning any error. func handleMessage(backend Backend, peer *Peer) error { @@ -257,12 +230,9 @@ func handleMessage(backend Backend, peer *Peer) error { defer msg.Discard() var handlers = eth65 - if peer.Version() == ETH66 { + if peer.Version() >= ETH66 { handlers = eth66 } - if peer.Version() >= ETH68 { - handlers = eth68 - } // Track the amount of time it takes to serve the request and run the handler if metrics.Enabled { diff --git a/eth/protocols/eth/handler_test.go b/eth/protocols/eth/handler_test.go index af2d78603ac0..c3d189b95156 100644 --- a/eth/protocols/eth/handler_test.go +++ b/eth/protocols/eth/handler_test.go @@ -110,7 +110,6 @@ func (b *testBackend) Handle(*Peer, Packet) error { // Tests that block headers can be retrieved from a remote chain based on user queries. func TestGetBlockHeaders65(t *testing.T) { testGetBlockHeaders(t, ETH65) } func TestGetBlockHeaders66(t *testing.T) { testGetBlockHeaders(t, ETH66) } -func TestGetBlockHeaders68(t *testing.T) { testGetBlockHeaders(t, ETH68) } func testGetBlockHeaders(t *testing.T, protocol uint) { t.Parallel() @@ -313,7 +312,6 @@ func testGetBlockHeaders(t *testing.T, protocol uint) { // Tests that block contents can be retrieved from a remote chain based on their hashes. func TestGetBlockBodies65(t *testing.T) { testGetBlockBodies(t, ETH65) } func TestGetBlockBodies66(t *testing.T) { testGetBlockBodies(t, ETH66) } -func TestGetBlockBodies68(t *testing.T) { testGetBlockBodies(t, ETH68) } func testGetBlockBodies(t *testing.T, protocol uint) { t.Parallel() @@ -403,11 +401,10 @@ func testGetBlockBodies(t *testing.T, protocol uint) { } // Tests that the state trie nodes can be retrieved based on hashes. -func TestGetNodeData65(t *testing.T) { testGetNodeData(t, ETH65, false) } -func TestGetNodeData66(t *testing.T) { testGetNodeData(t, ETH66, false) } -func TestGetNodeData68(t *testing.T) { testGetNodeData(t, ETH68, true) } +func TestGetNodeData65(t *testing.T) { testGetNodeData(t, ETH65) } +func TestGetNodeData66(t *testing.T) { testGetNodeData(t, ETH66) } -func testGetNodeData(t *testing.T, protocol uint, drop bool) { +func testGetNodeData(t *testing.T, protocol uint) { t.Parallel() // Define three accounts to simulate transactions with @@ -472,15 +469,8 @@ func testGetNodeData(t *testing.T, protocol uint, drop bool) { }) } msg, err := peer.app.ReadMsg() - if !drop { - if err != nil { - t.Fatalf("failed to read node data response: %v", err) - } - } else { - if err != nil { - return - } - t.Fatalf("succeeded to read node data response on non-supporting protocol: %v", msg) + if err != nil { + t.Fatalf("failed to read node data response: %v", err) } if msg.Code != NodeDataMsg { t.Fatalf("response packet code mismatch: have %x, want %x", msg.Code, NodeDataMsg) @@ -534,7 +524,6 @@ func testGetNodeData(t *testing.T, protocol uint, drop bool) { // Tests that the transaction receipts can be retrieved based on hashes. func TestGetBlockReceipts65(t *testing.T) { testGetBlockReceipts(t, ETH65) } func TestGetBlockReceipts66(t *testing.T) { testGetBlockReceipts(t, ETH66) } -func TestGetBlockReceipts68(t *testing.T) { testGetBlockReceipts(t, ETH68) } func testGetBlockReceipts(t *testing.T, protocol uint) { t.Parallel() diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go index 08ba2dca21cc..21ceb2a84be4 100644 --- a/eth/protocols/eth/handlers.go +++ b/eth/protocols/eth/handlers.go @@ -143,7 +143,17 @@ func handleGetBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error { } f := func() error { response := ServiceGetBlockHeadersQuery(backend.Chain(), query.GetBlockHeadersPacket, peer) - return peer.ReplyBlockHeadersRLP(query.RequestId, response) + if len(response) == int(query.GetBlockHeadersPacket.Amount) { + return peer.ReplyBlockHeadersRLP(query.RequestId, response) + } else { + // Wemix: fall back to old behavior + response2 := answerGetBlockHeadersQuery(backend, query.GetBlockHeadersPacket, peer) + if len(response2) > len(response) { + return peer.ReplyBlockHeaders(query.RequestId, response2) + } else { + return peer.ReplyBlockHeadersRLP(query.RequestId, response) + } + } } if params.ConsensusMethod == params.ConsensusPoW { return f() @@ -788,33 +798,6 @@ func handleNewPooledTransactionHashes(backend Backend, msg Decoder, peer *Peer) return nil } -func handleNewPooledTransactionHashes68(backend Backend, msg Decoder, peer *Peer) error { - // New transaction announcement arrived, make sure we have - // a valid and fresh chain to handle them - if !backend.AcceptTxs() { - return nil - } - ann := new(NewPooledTransactionHashesPacket68) - if err := msg.Decode(ann); err != nil { - return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) - } - if len(ann.Hashes) != len(ann.Types) || len(ann.Hashes) != len(ann.Sizes) { - return fmt.Errorf("%w: message %v: invalid len of fields: %v %v %v", errDecode, msg, len(ann.Hashes), len(ann.Types), len(ann.Sizes)) - } - f := func() error { - // Schedule all the unknown hashes for retrieval - for _, hash := range ann.Hashes { - peer.markTransaction(hash) - } - return backend.Handle(peer, ann) - } - if params.ConsensusMethod == params.ConsensusPoW { - return f() - } - go f() - return nil -} - func handleGetPooledTransactions(backend Backend, msg Decoder, peer *Peer) error { // Decode the pooled transactions retrieval message var query GetPooledTransactionsPacket diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index f521f1586bcd..8263fef4b60f 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -227,12 +227,6 @@ func (p *Peer) sendPooledTransactionHashes(hashes []common.Hash) error { return p2p.Send(p.rw, NewPooledTransactionHashesMsg, NewPooledTransactionHashesPacket(hashes)) } -func (p *Peer) sendPooledTransactionHashes68(hashes []common.Hash, types []byte, sizes []uint32) error { - // Mark all the transactions as known, but ensure we don't overflow our limits - p.knownTxs.Add(hashes...) - return p2p.Send(p.rw, NewPooledTransactionHashesMsg, NewPooledTransactionHashesPacket68{Types: types, Sizes: sizes, Hashes: hashes}) -} - // AsyncSendPooledTransactionHashes queues a list of transactions hashes to eventually // announce to a remote peer. The number of pending sends are capped (new ones // will force old sends to be dropped) diff --git a/eth/protocols/eth/peer_test.go b/eth/protocols/eth/peer_test.go index efbbbc6fff88..0916ebee5d45 100644 --- a/eth/protocols/eth/peer_test.go +++ b/eth/protocols/eth/peer_test.go @@ -48,8 +48,6 @@ func newTestPeer(name string, version uint, backend Backend) (*testPeer, <-chan peer := NewPeer(version, p2p.NewPeer(id, name, nil), net, backend.TxPool()) errc := make(chan error, 1) go func() { - defer app.Close() - errc <- backend.RunPeer(peer, func(peer *Peer) error { return Handle(backend, peer) }) diff --git a/eth/protocols/eth/protocol.go b/eth/protocols/eth/protocol.go index ed8023282d97..40cad40301c2 100644 --- a/eth/protocols/eth/protocol.go +++ b/eth/protocols/eth/protocol.go @@ -33,19 +33,19 @@ import ( const ( ETH65 = 65 ETH66 = 66 - ETH68 = 68 ) // ProtocolName is the official short name of the `eth` protocol used during // devp2p capability negotiation. const ProtocolName = "mir" -const ProtocolAlias = "eth" -var ProtocolVersions = []uint{ETH68, ETH66, ETH65} +// ProtocolVersions are the supported versions of the `eth` protocol (first +// is primary). +var ProtocolVersions = []uint{ETH66, ETH65} // protocolLengths are the number of implemented message corresponding to // different protocol versions. -var protocolLengths = map[uint]uint64{ETH66: 23, ETH65: 23, ETH68: 17} +var protocolLengths = map[uint]uint64{ETH66: 23, ETH65: 23} // maxMessageSize is the maximum cap on the size of a protocol message. const maxMessageSize = 100 * 1024 * 1024 @@ -316,13 +316,6 @@ type ReceiptsRLPPacket66 struct { // NewPooledTransactionHashesPacket represents a transaction announcement packet. type NewPooledTransactionHashesPacket []common.Hash -// NewPooledTransactionHashesPacket68 represents a transaction announcement packet on eth/68 and newer. -type NewPooledTransactionHashesPacket68 struct { - Types []byte - Sizes []uint32 - Hashes []common.Hash -} - // GetPooledTransactionsPacket represents a transaction query. type GetPooledTransactionsPacket []common.Hash @@ -428,9 +421,6 @@ func (*ReceiptsPacket) Kind() byte { return ReceiptsMsg } func (*NewPooledTransactionHashesPacket) Name() string { return "NewPooledTransactionHashes" } func (*NewPooledTransactionHashesPacket) Kind() byte { return NewPooledTransactionHashesMsg } -func (*NewPooledTransactionHashesPacket68) Name() string { return "NewPooledTransactionHashes" } -func (*NewPooledTransactionHashesPacket68) Kind() byte { return NewPooledTransactionHashesMsg } - func (*GetPooledTransactionsPacket) Name() string { return "GetPooledTransactions" } func (*GetPooledTransactionsPacket) Kind() byte { return GetPooledTransactionsMsg } diff --git a/ethclient/gethclient/gethclient_test.go b/ethclient/gethclient/gethclient_test.go index bbae8973b422..718dc14bbcb6 100644 --- a/ethclient/gethclient/gethclient_test.go +++ b/ethclient/gethclient/gethclient_test.go @@ -147,7 +147,7 @@ func testAccessList(t *testing.T, client *rpc.Client) { From: testAddr, To: &common.Address{}, Gas: 21000, - GasPrice: big.NewInt(875000000), + GasPrice: big.NewInt(765625000), Value: big.NewInt(1), } al, gas, vmErr, err := ec.CreateAccessList(context.Background(), msg) diff --git a/go.mod b/go.mod index d4fd6f78e6b0..0e3cb402128d 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,7 @@ require ( github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa github.com/fatih/color v1.7.0 github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c + github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff github.com/go-stack/stack v1.8.0 github.com/golang-jwt/jwt/v4 v4.3.0 @@ -67,7 +68,7 @@ require ( golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 golang.org/x/text v0.3.7 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 @@ -75,14 +76,9 @@ require ( gopkg.in/urfave/cli.v1 v1.20.0 ) -require github.com/pkg/errors v0.9.1 - -require github.com/fabelx/go-solc-select v0.2.0 - require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 // indirect - github.com/Masterminds/semver v1.5.0 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 // indirect @@ -115,12 +111,13 @@ require ( github.com/modern-go/reflect2 v1.0.1 // indirect github.com/naoina/go-stringutil v0.1.0 // indirect github.com/opentracing/opentracing-go v1.1.0 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.11.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.26.0 // indirect github.com/prometheus/procfs v0.6.0 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sirupsen/logrus v1.7.0 // indirect github.com/soheilhy/cmux v0.1.5 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/tklauser/go-sysconf v0.3.5 // indirect diff --git a/go.sum b/go.sum index 0294aae4d845..ab7702166ce9 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,6 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -168,12 +166,12 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fabelx/go-solc-select v0.2.0 h1:T1ST4U1EHzgRMyjVhyb0+ppGFqO3IqeuNFx0kjtl0RE= -github.com/fabelx/go-solc-select v0.2.0/go.mod h1:Ayuhu79bQpLAfFrJbPNKZaz0dD7n1nJk3ShZgpt5U6g= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= @@ -532,9 +530,8 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -797,8 +794,8 @@ golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/internal/debug/flags.go b/internal/debug/flags.go index 6751ac57f8d5..3aa990adfb3a 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -27,11 +27,14 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/metrics/exp" + "github.com/fjl/memsize/memsizeui" "github.com/mattn/go-colorable" "github.com/mattn/go-isatty" "gopkg.in/urfave/cli.v1" ) +var Memsize memsizeui.Handler + var ( verbosityFlag = cli.IntFlag{ Name: "verbosity", @@ -187,6 +190,7 @@ func StartPProf(address string, withMetrics bool) { if withMetrics { exp.Exp(metrics.DefaultRegistry) } + http.Handle("/memsize/", http.StripPrefix("/memsize", &Memsize)) log.Info("Starting pprof server", "addr", fmt.Sprintf("http://%s/debug/pprof", address)) go func() { if err := http.ListenAndServe(address, nil); err != nil { diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index ceab2e801706..08d85442cc50 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1338,7 +1338,7 @@ func DoEstimateGas(ctx context.Context, b Backend, args TransactionArgs, blockNr // EstimateGas returns an estimate of the amount of gas needed to execute the // given transaction against the current pending block. func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args TransactionArgs, blockNrOrHash *rpc.BlockNumberOrHash) (hexutil.Uint64, error) { - bNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + bNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) if blockNrOrHash != nil { bNrOrHash = *blockNrOrHash } @@ -1622,7 +1622,7 @@ type accessListResult struct { // CreateAccessList creates a EIP-2930 type AccessList for the given transaction. // Reexec and BlockNrOrHash can be specified to create the accessList on top of a certain state. func (s *PublicBlockChainAPI) CreateAccessList(ctx context.Context, args TransactionArgs, blockNrOrHash *rpc.BlockNumberOrHash) (*accessListResult, error) { - bNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + bNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) if blockNrOrHash != nil { bNrOrHash = *blockNrOrHash } diff --git a/local-docker-env/Dockerfile.boot b/local-docker-env/Dockerfile.boot deleted file mode 100644 index 17e95a8abacc..000000000000 --- a/local-docker-env/Dockerfile.boot +++ /dev/null @@ -1,104 +0,0 @@ -# Specifies the version of Ubuntu to be used in the Docker image. -ARG UBUNTU_VERSION - -# Stage 1: Build stage -FROM golang:1.19 as builder - -# Set environment variables -ENV PATH=/usr/local/go/bin:$PATH - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required packages -RUN apt-get install -y --no-install-recommends \ - ca-certificates \ - make && \ - rm -rf /var/lib/apt/lists/* - -# Define the location for custom certificates -ARG cert_location=/usr/local/share/ca-certificates - -# Fetch and install certificates for proxy.golang.org -RUN openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | \ - openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt && \ - update-ca-certificates - -# Set work directory -WORKDIR /gwemix - -# Copy the source code -COPY . /gwemix - -# Build wemix -RUN USE_ROCKSDB=NO make -f Makefile-local-env - -# Clean up unnecessary packages and files after building -RUN apt-get remove -y \ - ca-certificates \ - make && \ - apt autoremove -y && \ - apt-get clean - -# Stage 2: Runtime stage -FROM ubuntu:${UBUNTU_VERSION} - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required runtime packages -RUN apt-get install -y --no-install-recommends \ - g++ \ - libc-dev \ - bash \ - jq \ - wget \ - netcat-traditional && \ - rm -rf /var/lib/apt/lists/* - -# Create directories for wemix -RUN mkdir -p /usr/local/wemix - -# Set environment variables -ENV PATH=/usr/local/wemix/bin:$PATH - -# Set work directory -WORKDIR /usr/local/wemix - -# Copy the built binaries and configuration files from the builder stage -COPY --from=builder /gwemix/build /usr/local/wemix - -# Copy config.json & key file -COPY local-docker-env/config.json ./conf/config.json -COPY local-docker-env/keystore/ ./keystore/ -COPY local-docker-env/nodekey/ ./nodekey/ - -# Define variables to be used at build time -ARG NODE_NUM -ENV NODE_NUM=${NODE_NUM} - -# Run set-nodekey.sh -RUN chmod a+x bin/set-nodekey.sh && \ - ./bin/set-nodekey.sh -a ${NODE_NUM} - -# Clean up unnecessary files -RUN rm -rf nodekey - -# Run init-boot.sh -RUN chmod a+x bin/init-boot.sh -CMD ./bin/init-boot.sh && tail -f logs/log - -# Clean up unnecessary packages -RUN apt-get remove -y \ - g++ \ - libc-dev && \ - apt autoremove -y && \ - apt-get clean - -# Expose necessary ports -EXPOSE 8588 8589 8598 - -# # Define the entrypoint -# ENTRYPOINT ["bash"] \ No newline at end of file diff --git a/local-docker-env/Dockerfile.boot.git b/local-docker-env/Dockerfile.boot.git deleted file mode 100644 index 1f52860298e1..000000000000 --- a/local-docker-env/Dockerfile.boot.git +++ /dev/null @@ -1,126 +0,0 @@ -# Specifies the version of Ubuntu to be used in the Docker image. -ARG UBUNTU_VERSION - -# Stage 1: Build stage -FROM golang:1.19 as builder - -# Set environment variables -ENV PATH=/usr/local/go/bin:$PATH - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required packages -RUN apt-get install -y --no-install-recommends \ - git \ - openssl \ - ca-certificates \ - make && \ - rm -rf /var/lib/apt/lists/* - -# Define the location for custom certificates -ARG cert_location=/usr/local/share/ca-certificates - -# Fetch and install certificates for github.com and proxy.golang.org -RUN openssl s_client -showcerts -connect github.com:443 /dev/null | \ - openssl x509 -outform PEM > ${cert_location}/github.crt && \ - update-ca-certificates -RUN openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | \ - openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt && \ - update-ca-certificates - -# Define variables to be used at build time -ARG REPO -ARG BRANCH -ENV REPO=${REPO} -ENV BRANCH=${BRANCH} - -# Clone the repository, install dependencies, and build the project -RUN git clone -b ${BRANCH} ${REPO} /go-wemix && \ - cd /go-wemix && \ - go mod download && \ - USE_ROCKSDB=NO make -f Makefile-local-env - -# Clean up unnecessary packages and files after building -RUN apt-get remove -y \ - git \ - ca-certificates \ - openssl \ - make && \ - apt autoremove -y && \ - apt-get clean - -# Stage 2: Runtime stage -FROM ubuntu:${UBUNTU_VERSION} - -# Set environment variables -ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required runtime packages -RUN apt-get install -y --no-install-recommends \ - g++ \ - libc-dev \ - ca-certificates \ - bash \ - jq \ - wget \ - pcscd \ - curl \ - netcat-traditional && \ - update-ca-certificates && \ - rm -rf /var/lib/apt/lists/* - -# Create directories for wemix -RUN mkdir -p /usr/local/wemix - -# Set environment variables -ENV PATH=/usr/local/wemix/bin:$PATH - -# Copy the built binaries and configuration files from the builder stage -COPY --from=builder /go-wemix/build /usr/local/wemix/ - -# Download and install solc -RUN wget -nv -O /usr/local/bin/solc https://github.com/ethereum/solidity/releases/download/v0.4.24/solc-static-linux && \ - chmod a+x /usr/local/bin/solc - -# Set work directory -WORKDIR /usr/local/wemix - -# Copy config.json & key file -COPY local-docker-env/config.json ./conf/config.json -COPY local-docker-env/keystore/ ./keystore/ -COPY local-docker-env/nodekey/ ./nodekey/ - -# Define variables to be used at build time -ARG NODE_NUM -ENV NODE_NUM=${NODE_NUM} - -# Run set-nodekey.sh -RUN chmod a+x bin/set-nodekey.sh && \ - ./bin/set-nodekey.sh -a ${NODE_NUM} - -# Clean up unnecessary files -RUN rm -rf nodekey - -# Run init-boot.sh -RUN chmod a+x bin/init-boot.sh -CMD ./bin/init-boot.sh && tail -f logs/log - -# Clean up unnecessary packages -RUN apt-get remove -y \ - g++ \ - libc-dev \ - ca-certificates && \ - apt autoremove -y && \ - apt-get clean - -# Expose necessary ports -EXPOSE 8588 8589 8598 - -# # Define the entrypoint -# ENTRYPOINT ["bash"] \ No newline at end of file diff --git a/local-docker-env/Dockerfile.node b/local-docker-env/Dockerfile.node deleted file mode 100644 index 85da7dbe0274..000000000000 --- a/local-docker-env/Dockerfile.node +++ /dev/null @@ -1,105 +0,0 @@ -# Specifies the version of Ubuntu to be used in the Docker image. -ARG UBUNTU_VERSION - -# Stage 1: Build stage -FROM golang:1.19 as builder - -# Set environment variables -ENV PATH=/usr/local/go/bin:$PATH - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required packages -RUN apt-get install -y --no-install-recommends \ - ca-certificates \ - make && \ - rm -rf /var/lib/apt/lists/* - -# Define the location for custom certificates -ARG cert_location=/usr/local/share/ca-certificates - -# Fetch and install certificates for proxy.golang.org -RUN openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | \ - openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt && \ - update-ca-certificates - -# Set work directory -WORKDIR /gwemix - -# Copy the source code -COPY . /gwemix - -# Build wemix -RUN USE_ROCKSDB=NO make -f Makefile-local-env - -# Clean up unnecessary packages and files after building -RUN apt-get remove -y \ - ca-certificates \ - make && \ - apt autoremove -y && \ - apt-get clean - -# Stage 2: Runtime stage -FROM ubuntu:${UBUNTU_VERSION} - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required runtime packages -RUN apt-get install -y --no-install-recommends \ - g++ \ - libc-dev \ - bash \ - jq \ - wget \ - netcat-traditional && \ - rm -rf /var/lib/apt/lists/* - -# Create directories for wemix -RUN mkdir -p /usr/local/wemix - -# Set environment variables -ENV PATH=/usr/local/wemix/bin:$PATH - -# Set work directory -WORKDIR /usr/local/wemix - -# Copy the built binaries and configuration files from the builder stage -COPY --from=builder /gwemix/build /usr/local/wemix - -# Copy config.json & key file -COPY local-docker-env/config.json ./conf/config.json -COPY local-docker-env/keystore/ ./keystore/ -COPY local-docker-env/nodekey/ ./nodekey/ - -# Define variables to be used at build time -ARG NODE_NUM -ENV NODE_NUM=${NODE_NUM} - -# Run set-nodekey.sh -RUN chmod a+x bin/set-nodekey.sh && \ - ./bin/set-nodekey.sh -a ${NODE_NUM} - -# Clean up unnecessary files -RUN rm -rf nodekey - -# Make the binary executable -RUN chmod a+x bin/init-node.sh -CMD ./bin/init-node.sh - -# Clean up unnecessary packages -RUN apt-get remove -y \ - g++ \ - libc-dev \ - wget && \ - apt autoremove -y && \ - apt-get clean - -# Expose necessary ports -EXPOSE 8588 8589 8598 - -# # Define the entrypoint -# ENTRYPOINT ["bash"] \ No newline at end of file diff --git a/local-docker-env/Dockerfile.node.git b/local-docker-env/Dockerfile.node.git deleted file mode 100644 index b741be8c4236..000000000000 --- a/local-docker-env/Dockerfile.node.git +++ /dev/null @@ -1,129 +0,0 @@ -# Specifies the version of Ubuntu to be used in the Docker image. -ARG UBUNTU_VERSION - -# Stage 1: Build stage -FROM golang:1.19 as builder - -# Set environment variables -ENV PATH=/usr/local/go/bin:$PATH - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required packages -RUN apt-get install -y --no-install-recommends \ - git \ - openssl \ - ca-certificates \ - make && \ - rm -rf /var/lib/apt/lists/* - -# Define the location for custom certificates -ARG cert_location=/usr/local/share/ca-certificates - -# Fetch and install certificates for github.com and proxy.golang.org -RUN openssl s_client -showcerts -connect github.com:443 /dev/null | \ - openssl x509 -outform PEM > ${cert_location}/github.crt && \ - update-ca-certificates -RUN openssl s_client -showcerts -connect proxy.golang.org:443 /dev/null | \ - openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt && \ - update-ca-certificates - -# Define variables to be used at build time -ARG REPO -ARG BRANCH -ENV REPO=${REPO} -ENV BRANCH=${BRANCH} - -# Clone the repository, install dependencies, and build the project -RUN git clone -b ${BRANCH} ${REPO} /go-wemix && \ - cd /go-wemix && \ - go mod download && \ - USE_ROCKSDB=NO make -f Makefile-local-env - -# Clean up unnecessary packages and files after building -RUN apt-get remove -y \ - git \ - ca-certificates \ - openssl \ - make && \ - apt autoremove -y && \ - apt-get clean - -# Stage 2: Runtime stage -FROM ubuntu:${UBUNTU_VERSION} - -# Set environment variables -ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt - -# Update and upgrade the package list -RUN apt-get update && \ - apt-get upgrade -q -y - -# Install required runtime packages -RUN apt-get install -y --no-install-recommends \ - g++ \ - libc-dev \ - ca-certificates \ - bash \ - jq \ - wget \ - netcat-traditional && \ - update-ca-certificates && \ - rm -rf /var/lib/apt/lists/* - -# Create directories for wemix -RUN mkdir -p /usr/local/wemix - -# Set environment variables -ENV PATH=/usr/local/wemix/bin:$PATH - -# Copy the built binaries and configuration files from the builder stage -COPY --from=builder /go-wemix/build /usr/local/wemix/ - -# Download and install solc -RUN wget -nv -O /usr/local/bin/solc https://github.com/ethereum/solidity/releases/download/v0.4.24/solc-static-linux && \ - chmod a+x /usr/local/bin/solc - -# Set work directory -WORKDIR /usr/local/wemix - -# Copy config.json & key file -COPY local-docker-env/config.json ./conf/config.json -COPY local-docker-env/keystore/ ./keystore/ -COPY local-docker-env/nodekey/ ./nodekey/ - -# Define variables to be used at build time -ARG NODE_NUM -ENV NODE_NUM=${NODE_NUM} - -# Run set-nodekey.sh -RUN chmod a+x bin/set-nodekey.sh && \ - ./bin/set-nodekey.sh -a ${NODE_NUM} - -# Clean up unnecessary files -RUN rm -rf nodekey - -# Make the binary executable -RUN chmod a+x bin/init-node.sh -CMD ./bin/init-node.sh - -# Clean up unnecessary packages -RUN apt-get remove -y \ - g++ \ - libc-dev \ - ca-certificates \ - wget && \ - apt autoremove -y && \ - apt-get clean - -# Expose necessary ports -EXPOSE 8588 8589 8598 - -# # Set the entrypoint -# ENTRYPOINT ["./bin/gwemix", \ -# "--metrics", "--nodiscover", "--mine", \ -# "--http", "--http.addr","0.0.0.0", "--http.port", "8588", \ -# "--ws", "--ws.addr", "0.0.0.0", "--ws.port", "8598", \ -# "--syncmode", "full", "--gcmode", "archive", "--port", "8589"] \ No newline at end of file diff --git a/local-docker-env/README.md b/local-docker-env/README.md deleted file mode 100644 index 29a15f0b3d9a..000000000000 --- a/local-docker-env/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# Local Test Environment Setup Guide - -This document explains how to set up a local testing environment based on the `go-wemix` repository. - -## Prerequisites - -- `make` must be installed in the local environment. It is required to use `gwemix`. - -## Available Scripts - -### local-docker.sh - -- **Purpose**: Integrated running script for local testing based on the local repository. -- **Usage**: `./local-docker-env/local-docker.sh -a -v (optional)` - -### local-docker-git.sh - -- **Purpose**: Integrated running script for local testing based on the Git repository. -- **Usage**: `./local-docker-env/local-docker-git.sh -a -b -r -v (optional)` - -### key-gen.sh - -- **Purpose**: Generates an account in the `keystore` folder and creates a nodekey in the `nodekey` folder. -- **Usage**: `./key-gen.sh -a ` - -### config-gen.sh - -- **Purpose**: Generates the `config.json` file. -- **Usage**: `./config-gen.sh -a -f ` - -### docker-compose-gen.sh - -- **Purpose**: Generates the `docker-compose.yml` file based on the local repository. -- **Usage**: `./docker-compose-gen.sh -a -f -v (optional)` - -### docker-compose-gen-git.sh - -- **Purpose**: Generates the `docker-compose.yml` file based on the Git repository. -- **Usage**: `./docker-compose-gen-git.sh -a -f -r -b -v (optional)` - -### init-boot.sh - -- **Purpose**: Script for deploying the governance contract and running the node on the boot node. - -### init-node.sh - -- **Purpose**: Script for downloading the genesis block and running the node on a regular node. - -### set-nodekey.sh - -- **Purpose**: Script for setting the nodekey to be used on the actual node. - -## Dockerfile Description - -- **Dockerfile.boot**: Docker file for running the boot node based on the local repository. -- **Dockerfile.node**: Docker file for running the node based on the local repository. -- **Dockerfile.boot.git**: Docker file for running the boot node based on the Git repository. -- **Dockerfile.node.git**: Docker file for running the node based on the Git repository. - -## Execution Method - -### Execution Location - -- Run from the cloned path of the `go-wemix` repository. - -### Execution based on the local repository code - -```bash -./local-docker-env/local-docker.sh -a -v (optional) -``` - -### Execution based on the Git repository code - -```bash -./local-docker-env/local-docker-git.sh -a -b -r -v (optional) -``` diff --git a/local-docker-env/config-gen.sh b/local-docker-env/config-gen.sh deleted file mode 100755 index 116f89aed279..000000000000 --- a/local-docker-env/config-gen.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -# 필수 인수 확인 -if [ "$#" -ne 4 ]; then - echo "Usage: $0 -a -f " - exit 1 -fi - -# 옵션 파싱 -while getopts "a:f:" opt; do - case ${opt} in - a) - ACCOUNT_NUM=$OPTARG - ;; - f) - OUTPUT_CONFIG_FILE=$OPTARG - ;; - \?) - echo "Usage: $0 -a -f " - exit 1 - ;; - esac -done - -# 필수 인수 확인 -if [ -z "$ACCOUNT_NUM" ] || [ -z "$OUTPUT_CONFIG_FILE" ]; then - exit 1 -fi - -# 초기화 -echo '{"members":[], "accounts":[]}' >"$OUTPUT_CONFIG_FILE" - -# 파일을 JSON 형식으로 로드 -json_content=$(cat "$OUTPUT_CONFIG_FILE") - -# 고정된 env 값을 포함한 JSON 객체 -ENV_JSON='{ - "ballotDurationMin": 86400, - "ballotDurationMax": 604800, - "stakingMin": 1500000000000000000000000, - "stakingMax": 1500000000000000000000000, - "MaxIdleBlockInterval": 100, - "blockCreationTime": 5000, - "blockRewardAmount": 1000000000000000000, - "maxPriorityFeePerGas": 100000000000, - "rewardDistributionMethod": [4000, 1000, 2500, 2500], - "maxBaseFee": 50000000000000, - "blockGasLimit": 105000000, - "baseFeeMaxChangeRate": 55, - "gasTargetPercentage": 30 -}' - -json_content=$(echo "$json_content" | jq --argjson env "$ENV_JSON" \ - '.env = $env| .extraData = "chain for local test"') - -# JSON 구성 파일 생성 -for ((i = 1; i <= ACCOUNT_NUM; i++)); do - ids=$(gwemix wemix nodeid local-docker-env/nodekey/nodekey$i) || { echo "Failed to get node ID"; exit 1; } - idv5=$(echo "$ids" | awk '/idv5:/ {print $2}') - idv5="0x$idv5" - ip="172.16.237.$((i+10))" - - address=$(jq -r '.address' "local-docker-env/keystore/account$i") || { echo "Failed to get address"; exit 1; } - address="0x$address" - name="localtest$i" - - json_content=$(echo "$json_content" | jq --arg addr "$address" --arg name "$name" --arg id "$idv5" --arg ip "$ip" --argjson index $((i - 1)) \ - '.members += [{"addr": $addr, "stake": 1500000000000000000000000, "name": $name, "id": $id, "ip": $ip, "port": 8589, "bootnode": false}] - | .accounts += [{"addr": $addr, "balance": 2000000000000000000000000}]') || { echo "Failed to update JSON content"; exit 1; } - - if [ $i -eq 1 ]; then - json_content=$(echo "$json_content" | jq --arg addr "$address" \ - '.staker = $addr | .ecosystem = $addr | .maintanence = $addr | .feecollector = $addr | .members[0].bootnode = true') || { echo "Failed to update JSON content"; exit 1; } - fi -done - -# 수정된 내용을 파일에 저장 -echo "$json_content" >"$OUTPUT_CONFIG_FILE" -echo "Updated config saved to $OUTPUT_CONFIG_FILE" \ No newline at end of file diff --git a/local-docker-env/docker-compose-gen-git.sh b/local-docker-env/docker-compose-gen-git.sh deleted file mode 100755 index bf0580145b39..000000000000 --- a/local-docker-env/docker-compose-gen-git.sh +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/bash - -# Usage: ./gen-docker-compose.sh -a -f -r -b -# -a: 계정 수 -# -f: 출력 파일 -# -r: 레포지토리 URL -# -b: 브랜치 이름 -# -a 옵션은 필수이며, -f 옵션은 선택적 -# -f 옵션을 지정하지 않으면, 현재 디렉토리에 docker-compose.yml 파일을 생성 -# -f 옵션을 지정하면, 해당 경로에 docker-compose.yml 파일을 생성 - -# Parse command line arguments -while getopts "a:f:r:b:v:" opt; do - case $opt in - a) - account_num=$OPTARG - ;; - f) - output_file=$OPTARG - ;; - r) - repo_url=$OPTARG - ;; - b) - branch_name=$OPTARG - ;; - v) - version=$OPTARG - ;; - \?) - echo "Invalid option: -$OPTARG" >&2 - exit 1 - ;; - :) - echo "Option -$OPTARG requires an argument." >&2 - exit 1 - ;; - esac -done - -# Check if account_num is provided -if [ -z "$account_num" ]; then - echo "Error: -a is required." - exit 1 -fi - -# Check if repo_url is provided -if [ -z "$repo_url" ]; then - echo "Error: -r is required." - exit 1 -fi - -# Check if branch_name is provided -if [ -z "$branch_name" ]; then - echo "Error: -b is required." - exit 1 -fi - -# Set default output file if not provided -if [ -z "$output_file" ]; then - output_file="docker-compose.yml" -fi - -# Set default version if not provided -if [ -z "$version" ]; then - version="latest" -fi - -# Generate docker-compose.yml content -cat < "$output_file" -services: -EOF - -for ((i=1; i<=account_num; i++)); do - if [ $i -eq 1 ]; then - cat <> "$output_file" - wemix-boot: - build: - context: . - dockerfile: Dockerfile.boot.git - args: - REPO: $repo_url - BRANCH: $branch_name - NODE_NUM: $i - UBUNTU_VERSION: $version - image: wemix/node-boot:latest - hostname: wemix-boot - networks: - wemix-dev-bridge: - ipv4_address: 172.16.237.11 - restart: unless-stopped - tty: true - ports: - - 8588:8588 - - 8589:8589 - - 8598:8598 - container_name: wemix-boot -EOF - else - cat <> "$output_file" - wemix-node$((i-1)): - build: - context: . - dockerfile: Dockerfile.node.git - args: - REPO: $repo_url - BRANCH: $branch_name - NODE_NUM: $i - UBUNTU_VERSION: $version - image: wemix/node$((i-1)):latest - hostname: wemix-node$((i-1)) - networks: - wemix-dev-bridge: - ipv4_address: 172.16.237.$((i+10)) - restart: unless-stopped - tty: true - depends_on: - wemix-boot: - condition: service_started - container_name: wemix-node$((i-1)) -EOF - fi -done - -cat <> "$output_file" -networks: - wemix-dev-bridge: - name: wemix-dev-bridge - driver: bridge - ipam: - driver: default - config: - - subnet: 172.16.237.0/24 -EOF - -# Echo the message that docker-compose.yml is created -echo "docker-compose.yml has been created." \ No newline at end of file diff --git a/local-docker-env/docker-compose-gen.sh b/local-docker-env/docker-compose-gen.sh deleted file mode 100755 index 8639703a0b76..000000000000 --- a/local-docker-env/docker-compose-gen.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash - -# Usage: ./gen-docker-compose.sh -a -f -# -a: 계정 수 -# -f: 출력 파일 -# -a 옵션은 필수이며, -f, -v 옵션은 선택적 -# -f 옵션을 지정하지 않으면, 현재 디렉토리에 docker-compose.yml 파일을 생성 -# -f 옵션을 지정하면, 해당 경로에 docker-compose.yml 파일을 생성 -# -v 옵션을 지정하지 않으면, latest 버전으로 설정 -# -v 옵션을 지정하면, 해당 버전으로 설정 - -# Parse command line arguments -while getopts "a:f:v:" opt; do - case $opt in - a) - account_num=$OPTARG - ;; - f) - output_file=$OPTARG - ;; - v) - version=$OPTARG - ;; - \?) - echo "Invalid option: -$OPTARG" >&2 - exit 1 - ;; - :) - echo "Option -$OPTARG requires an argument." >&2 - exit 1 - ;; - esac -done - -# Check if account_num is provided -if [ -z "$account_num" ]; then - echo "Error: -a is required." - exit 1 -fi - -# Set default output file if not provided -if [ -z "$output_file" ]; then - output_file="docker-compose.yml" -fi - -# Set default version if not provided -if [ -z "$version" ]; then - version="latest" -fi - -# Generate docker-compose.yml content -cat < "$output_file" -services: -EOF - -for ((i=1; i<=account_num; i++)); do - if [ $i -eq 1 ]; then - cat <> "$output_file" - wemix-boot: - build: - context: . - dockerfile: Dockerfile.boot - args: - NODE_NUM: $i - UBUNTU_VERSION: $version - image: wemix/node-boot:latest - hostname: wemix-boot - networks: - wemix-dev-bridge: - ipv4_address: 172.16.237.11 - restart: unless-stopped - tty: true - ports: - - 8588:8588 - - 8589:8589 - - 8598:8598 - container_name: wemix-boot -EOF - else - cat <> "$output_file" - wemix-node$((i-1)): - build: - context: . - dockerfile: Dockerfile.node - args: - NODE_NUM: $i - UBUNTU_VERSION: $version - image: wemix/node$((i-1)):latest - hostname: wemix-node$((i-1)) - networks: - wemix-dev-bridge: - ipv4_address: 172.16.237.$((i+10)) - restart: unless-stopped - tty: true - depends_on: - wemix-boot: - condition: service_started - container_name: wemix-node$((i-1)) -EOF - fi -done - -cat <> "$output_file" -networks: - wemix-dev-bridge: - name: wemix-dev-bridge - driver: bridge - ipam: - driver: default - config: - - subnet: 172.16.237.0/24 -EOF - -# Echo the message that docker-compose.yml is created -echo "docker-compose.yml has been created." \ No newline at end of file diff --git a/local-docker-env/gwemix.sh b/local-docker-env/gwemix.sh deleted file mode 100755 index 28f597e43abd..000000000000 --- a/local-docker-env/gwemix.sh +++ /dev/null @@ -1,354 +0,0 @@ -#!/bin/bash - -WEMIX_DIR=${WEMIX_DIR:-/opt} - -function get_script_dir () -{ - OPWD=$(pwd) - echo $(cd $(dirname ${BASH_SOURCE[0]}) &> /dev/null && pwd) - cd "$OPWD" -} - -function get_data_dir () -{ - if [ ! "$1" = "" ]; then - if [ -x "$1/bin/gwemix" ]; then - echo $1 - else - d=${WEMIX_DIR}/$1 - if [ -x "$d/bin/gwemix" ]; then - echo $d - fi - fi - else - echo $(dirname $(get_script_dir)) - fi -} - -# void init(String node, String config_json) -function init () -{ - NODE="$1" - CONFIG="$2" - - if [ ! -f "$CONFIG" ]; then - echo "Cannot find config file: $2" - return 1 - fi - - d=$(get_data_dir "${NODE}") - if [ -x "$d/bin/gwemix" ]; then - GWEMIX="$d/bin/gwemix" - else - echo "Cannot find gwemix" - return 1 - fi - - if [ ! -f "${d}/conf/genesis-template.json" ]; then - echo "Cannot find template files." - return 1 - fi - - echo "wiping out data..." - wipe $NODE - - [ -d "$d/geth" ] || mkdir -p "$d/geth" - [ -d "$d/logs" ] || mkdir -p "$d/logs" - - ${GWEMIX} wemix genesis --data "$CONFIG" --genesis "$d/conf/genesis-template.json" --out "$d/genesis.json" - [ $? = 0 ] || return $? - - echo "PORT=8588 -DISCOVER=0" > $d/.rc - ${GWEMIX} --datadir $d init $d/genesis.json - # echo "Generating dags for epoch 0 and 1..." - # ${GWEMIX} makedag 0 $d/.ethash & - # ${GWEMIX} makedag 30000 $d/.ethash & - wait -} - -# void init_gov(String node, String config_json, String account_file, Number gov_lock_amount (wei) ) -# account_file can be -# 1. keystore file: "" -# 2. nano ledger: "ledger:" -# 3. trezor: "trezor:" -function init_gov () -{ - NODE="$1" - CONFIG="$2" - ACCT="$3" - PASSWORD="$4" - LOCKAMOUNT="$5" - - if [ ! -f "$CONFIG" ]; then - echo "Cannot find config file: $CONFIG" - return 1 - fi - - if [ ! -f "$ACCT" ]; then - echo "Cannot find account file: $ACCT" - return 1 - fi - - d=$(get_data_dir "${NODE}") - if [ -x "$d/bin/gwemix" ]; then - GWEMIX="$d/bin/gwemix" - else - echo "Cannot find gwemix" - return 1 - fi - - if [ -z "$PASSWORD" ]; then - exec ${GWEMIX} wemix deploy-governance --url "$d/gwemix.ipc" ${CONFIG} ${ACCT} ${LOCKAMOUNT} - elif [ -f "$PASSWORD" ]; then - exec ${GWEMIX} wemix deploy-governance --url "$d/gwemix.ipc" --password ${PASSWORD} ${CONFIG} ${ACCT} ${LOCKAMOUNT} - else - exec ${GWEMIX} wemix deploy-governance --url "$d/gwemix.ipc" --password <(echo ${PASSWORD}) ${CONFIG} ${ACCT} ${LOCKAMOUNT} - fi -} - -function wipe () -{ - d=$(get_data_dir "$1") - if [ ! -x "$d/bin/gwemix" ]; then - echo "Is '$1' wemix data directory?" - return - fi - - cd $d - /bin/rm -rf geth/LOCK geth/chaindata geth/ethash geth/lightchaindata \ - geth/transactions.rlp geth/nodes geth/triecache gwemix.ipc logs/* etcd -} - -function clean () -{ - d=$(get_data_dir "$1") - if [ -x "$d/bin/gwemix" ]; then - GWEMIX="$d/bin/gwemix" - else - echo "Cannot find gwemix" - return - fi - - cd $d - $GWEMIX --datadir ${PWD} removedb -} - -function start () -{ - d=$(get_data_dir "$1") - if [ -x "$d/bin/gwemix" ]; then - GWEMIX="$d/bin/gwemix" - else - echo "Cannot find gwemix" - return - fi - - [ -f "$d/.rc" ] && source "$d/.rc" - [ "$COINBASE" = "" ] && COINBASE="" || COINBASE="--miner.etherbase $COINBASE" - - RPCOPT="--http --http.addr 0.0.0.0" - [ "$PORT" = "" ] || RPCOPT="${RPCOPT} --http.port ${PORT}" - RPCOPT="${RPCOPT} --ws --ws.addr 0.0.0.0" - [ "$PORT" = "" ] || RPCOPT="${RPCOPT} --ws.port $((${PORT}+10))" - [ "$NONCE_LIMIT" = "" ] || NONCE_LIMIT="--noncelimit $NONCE_LIMIT" - [ "$BOOT_NODES" = "" ] || BOOT_NODES="--bootnodes $BOOT_NODES" - [ "$TESTNET" = "1" ] && TESTNET=--wemix-testnet - if [ "$DISCOVER" = "0" ]; then - DISCOVER=--nodiscover - else - DISCOVER= - fi - case $SYNC_MODE in - "full") - SYNC_MODE="--syncmode full";; - "fast") - SYNC_MODE="--syncmode fast";; - "snap") - SYNC_MODE="--syncmode snap";; - *) - SYNC_MODE="--syncmode full --gcmode archive";; - esac - - OPTS="$COINBASE $DISCOVER $RPCOPT $BOOT_NODES $NONCE_LIMIT $TESTNET $SYNC_MODE ${GWEMIX_OPTS}" - [ "$PORT" = "" ] || OPTS="${OPTS} --port $(($PORT + 1))" - [ "$HUB" = "" ] || OPTS="${OPTS} --hub ${HUB}" - [ "$MAX_TXS_PER_BLOCK" = "" ] || OPTS="${OPTS} --maxtxsperblock ${MAX_TXS_PER_BLOCK}" - - [ -d "$d/logs" ] || mkdir -p $d/logs - [ "$LOG_FILESIZE" = "" ] && LOG_FILESIZE="10M" - [ "$LOG_FILECOUNT" = "" ] && LOG_FILECOUNT="5" - - cd $d - if [ ! "$2" = "inner" ]; then - $GWEMIX --datadir ${PWD} --metrics $OPTS 2>&1 | \ - ${d}/bin/logrot ${d}/logs/log ${LOG_FILESIZE} ${LOG_FILECOUNT} & - else - if [ -x "$d/bin/logrot" ]; then - exec > >($d/bin/logrot $d/logs/log ${LOG_FILESIZE} ${LOG_FILECOUNT}) - exec 2>&1 - fi - exec $GWEMIX --datadir ${PWD} --metrics $OPTS - fi -} - -function get_gwemix_pids () -{ - ps axww | grep -v grep | grep "gwemix.*datadir.*${1}" | awk '{print $1}' -} - -function do_nodes () -{ - LHN=$(hostname) - CMD=${1/-nodes/} - shift - while [ ! "$1" = "" -a ! "$2" = "" ]; do - if [ "$1" = "$LHN" -o "$1" = "${LHN/.*/}" ]; then - $0 ${CMD} $2 - else - ssh -f $1 ${WEMIX_DIR}/$2/bin/gwemix.sh ${CMD} $2 - fi - shift - shift - done -} - -function usage () -{ - echo "Usage: `basename $0` [init | - init-gov | - clean [] | wipe [] | console [] | - [re]start [] | stop [] | [re]start-nodes | stop-nodes] - -*-nodes uses NODES environment variable: [ ]+ -" -} - -case "$1" in -"init") - if [ $# -lt 3 ]; then - usage; - else - init "$2" "$3" - fi - ;; - -"init-gov") - if [ $# -lt 4 ]; then - usage; - else - init_gov "$2" "$3" "$4" "$5" "$6" - fi - ;; - -"wipe") - wipe $2 - ;; - -"clean") - clean $2 - ;; - -"stop") - echo -n "stopping..." - dir=$(get_data_dir $2) - PIDS=$(get_gwemix_pids ${dir}) - if [ ! "$PIDS" = "" ]; then - # check if we're the miner or leader - CMD=' -function check_if_mining() { - for (var i = 0; i < 15; i++) { - try { - var token = debug.etcdGet("token") - eval("token = " + token) - // console.log("miner -> " + token.miner) - if (token.miner != admin.wemixInfo.self.name) { - break - } else { - console.log("we are the miner, sleeping...") - admin.sleep(0.25) - } - } catch { - admin.sleep(0.25) - } - } -} -if (admin.wemixInfo != null && admin.wemixInfo.self != null) { - check_if_mining() - if (admin.wemixInfo.etcd.leader.name == admin.wemixInfo.self.name) { - var nodes = admin.wemixNodes("", 0) - for (var n of nodes) { - if (admin.wemixInfo.etcd.leader.name != admin.wemixInfo.self.name) { - break - } - if (n.status == "up" && n.name != admin.wemixInfo.self.name) { - console.log("moving leader to " + n.name) - admin.etcdMoveLeader(n.name) - } - } - } - check_if_mining() -}' - ${dir}/bin/gwemix attach ipc:${dir}/gwemix.ipc --exec "$CMD" | grep -v "undefined" - echo $PIDS | xargs -L1 kill - fi - for i in {1..200}; do - PIDS=$(get_gwemix_pids ${dir}) - [ "$PIDS" = "" ] && break - echo -n "." - sleep 1 - done - PIDS=$(get_gwemix_pids ${dir}) - if [ ! "$PIDS" = "" ]; then - echo $PIDS | xargs -L1 kill -9 - fi - # wait until geth/chaindata is free - for i in {1..200}; do - lsof ${dir}/geth/chaindata/LOG 2>&1 | grep -q gwemix > /dev/null 2>&1 || break - sleep 1 - done - echo "done." - ;; - -"start") - start $2 - ;; - -"start-inner") - if [ "$2" = "" ]; then - usage; - else - start $2 inner - fi - ;; - -"restart") - $0 stop $2 - start $2 - ;; - -"start-nodes"|"restart-nodes"|"stop-nodes") - if [ "${NODES}" = "" ]; then - echo "NODES is not defined" - fi - do_nodes $1 ${NODES} - ;; - -"console") - d=$(get_data_dir "$2") - if [ ! -d $d ]; then - usage; exit; - fi - RCJS= - if [ -f "$d/rc.js" ]; then - RCJS="--preload $d/rc.js" - fi - exec ${d}/bin/gwemix ${RCJS} attach ipc:${d}/gwemix.ipc - ;; - -*) - usage; - ;; -esac - -# EOF diff --git a/local-docker-env/init-boot.sh b/local-docker-env/init-boot.sh deleted file mode 100644 index 8657784d18e7..000000000000 --- a/local-docker-env/init-boot.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -chmod a+x bin/gwemix.sh -bin/gwemix.sh init "" conf/config.json -bin/gwemix.sh start - -# gwemix 서비스가 정상적으로 시작되었는지 확인 -check_gwemix_started() { - local log_file="logs/log" # gwemix 로그 파일 경로 - local success_message="HTTP server started" - local max_retries=30 - local retries=0 - local found=0 - - echo "Checking if gwemix has started..." - - while [ $retries -lt $max_retries ]; do - if grep -q "$success_message" "$log_file"; then - echo "gwemix has started successfully." - found=1 - break - else - echo "Waiting for gwemix to start... Attempt $((retries+1))" - sleep 1 - fi - retries=$((retries+1)) - done - - if [ $found -eq 0 ]; then - echo "Failed to confirm gwemix start after $max_retries attempts." - exit 1 - fi -} - -# gwemix 서비스가 정상적으로 시작되었는지 확인 -check_gwemix_started - -bin/gwemix.sh init-gov "" conf/config.json keystore/account1 test - -echo "sleep 10 seconds for etcd init..." -sleep 10 - -# Open console and execute admin.etcdInit() -bin/gwemix.sh console <" - exit 1 -fi - -# 옵션 파싱 -while getopts "a:" opt; do - case ${opt} in - a) - ACCOUNT_NUM=$OPTARG - ;; - \?) - echo "Usage: $0 -a -f " - exit 1 - ;; - esac -done - -# 필수 인수 확인 -if [ -z "$ACCOUNT_NUM" ]; then - exit 1 -fi - -mkdir local-docker-env/keystore -mkdir local-docker-env/nodekey - -# 계정 및 노드 키 생성 -for ((i = 1; i <= ACCOUNT_NUM; i++)); do - if [ -f "local-docker-env/keystore/account$i" ]; then - rm local-docker-env/keystore/account$i - fi - - if yes "test" | head -n 2 | gwemix wemix new-account --out local-docker-env/keystore/account$i; then - echo "Account $i created successfully" - else - echo "Failed to create account $i" - exit 1 - fi - - if [ -f "local-docker-env/nodekey/nodekey$i" ]; then - rm local-docker-env/nodekey/nodekey$i - fi - if gwemix wemix new-nodekey --out local-docker-env/nodekey/nodekey$i; then - echo "Nodekey $i created successfully" - else - echo "Failed to create nodekey $i" - exit 1 - fi -done \ No newline at end of file diff --git a/local-docker-env/local-docker-git.sh b/local-docker-env/local-docker-git.sh deleted file mode 100755 index 6cf4e3c10e47..000000000000 --- a/local-docker-env/local-docker-git.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -# gwemix path를 환경변수에 추가 -current_dir=$(pwd) -export PATH=$PATH:${current_dir}/go-wemix/build/bin - -# 옵션 파싱 -while getopts "a:b:r:v:" opt; do - case ${opt} in - a) - ACCOUNT_NUM=$OPTARG - ;; - b) - BRANCH=$OPTARG - ;; - r) - REPO=$OPTARG - ;; - v) - VERSION=$OPTARG - ;; - \?) - echo "Usage: $0 -a -b -r " - exit 1 - ;; - esac -done - -# 필수 인수 확인 -if [ -z "$ACCOUNT_NUM" ] || [ -z "$BRANCH" ] || [ -z "$REPO" ]; then - echo "Missing required arguments. Usage: $0 -a -b -r " - exit 1 -fi - -# Set default version if not provided -if [ -z "$VERSION" ]; then - VERSION="latest" -fi - -# key-gen.sh 실행 -chmod +x local-docker-env/key-gen.sh -./local-docker-env/key-gen.sh -a "$ACCOUNT_NUM" || { echo "Failed to execute key-gen.sh."; exit 1; } - -# config-gen.sh 실행 -chmod +x local-docker-env/config-gen.sh -./local-docker-env/config-gen.sh -a "$ACCOUNT_NUM" -f local-docker-env/config.json || { echo "Failed to execute config-gen.sh."; exit 1; } - -# BRANCH와 REPO 정보를 입력으로 받아 docker-compose-gen.sh 실행 -chmod +x local-docker-env/docker-compose-gen-git.sh -./local-docker-env/docker-compose-gen-git.sh -a "$ACCOUNT_NUM" -b "$BRANCH" -r "$REPO" -v "$VERSION" || { echo "Failed to execute docker-compose-gen-git.sh."; exit 1; } - -# Dockerfile.boot.git 및 Dockerfile.node.git 파일 복사 -cp local-docker-env/Dockerfile.boot.git ./ || { echo "Failed to copy Dockerfile.boot.git."; exit 1; } -cp local-docker-env/Dockerfile.node.git ./ || { echo "Failed to copy Dockerfile.node.git."; exit 1; } - -# docker-compose.yml 파일을 이용해 docker-compose build 및 up 실행 -docker compose -f docker-compose.yml build --no-cache || { echo "Failed to build docker-compose."; exit 1; } -docker compose -f docker-compose.yml up -d || { echo "Failed to start docker-compose."; exit 1; } \ No newline at end of file diff --git a/local-docker-env/local-docker.sh b/local-docker-env/local-docker.sh deleted file mode 100755 index cc57ae26d2e0..000000000000 --- a/local-docker-env/local-docker.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -# gwemix path를 환경변수에 추가 -current_dir=$(pwd) -export PATH=$PATH:${current_dir}/go-wemix/build/bin - -# 옵션 파싱 -while getopts "a:v:" opt; do - case ${opt} in - a) - ACCOUNT_NUM=$OPTARG - ;; - v) - VERSION=$OPTARG - ;; - \?) - echo "Usage: $0 -a " - exit 1 - ;; - esac -done - -# 필수 인수 확인 -if [ -z "$ACCOUNT_NUM" ]; then - echo "Account number is required. Usage: $0 -a " - exit 1 -fi - -# Set default version if not provided -if [ -z "$VERSION" ]; then - VERSION="latest" -fi - -# key-gen.sh 실행 -chmod +x local-docker-env/key-gen.sh -./local-docker-env/key-gen.sh -a "$ACCOUNT_NUM" || { echo "Failed to execute key-gen.sh."; exit 1; } - -# config-gen.sh 실행 -chmod +x local-docker-env/config-gen.sh -./local-docker-env/config-gen.sh -a "$ACCOUNT_NUM" -f local-docker-env/config.json || { echo "Failed to execute config-gen.sh."; exit 1; } - -# docker-compose-gen.sh 실행 -chmod +x local-docker-env/docker-compose-gen.sh -./local-docker-env/docker-compose-gen.sh -a "$ACCOUNT_NUM" -v "$VERSION" || { echo "Failed to execute docker-compose-gen.sh."; exit 1; } - -# Dockerfile.boot 및 Dockerfile.node 파일 복사 -cp local-docker-env/Dockerfile.boot ./ || { echo "Failed to copy Dockerfile.boot."; exit 1; } -cp local-docker-env/Dockerfile.node ./ || { echo "Failed to copy Dockerfile.node."; exit 1; } - -# docker-compose.yml 파일을 이용해 docker-compose build 및 up 실행 -docker compose -f docker-compose.yml build --no-cache || { echo "Failed to build docker-compose."; exit 1; } -docker compose -f docker-compose.yml up -d || { echo "Failed to start docker-compose."; exit 1; } \ No newline at end of file diff --git a/local-docker-env/set-nodekey.sh b/local-docker-env/set-nodekey.sh deleted file mode 100755 index 34df658888bb..000000000000 --- a/local-docker-env/set-nodekey.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# 필수 인수 확인 -if [ "$#" -ne 2 ]; then - echo "Usage: $0 -a " - exit 1 -fi - -# 옵션 파싱 -while getopts "a:" opt; do - case ${opt} in - a) - ACCOUNT_NUM=$OPTARG - ;; - \?) - echo "Usage: $0 -a " - exit 1 - ;; - esac -done - -# 필수 인수 확인 -if [ -z "$ACCOUNT_NUM" ]; then - exit 1 -fi - -mkdir geth -chmod 0700 nodekey -cp nodekey/nodekey"$ACCOUNT_NUM" geth/nodekey diff --git a/miner/worker.go b/miner/worker.go index 364bf034970f..c30d38ed10ed 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -119,7 +119,6 @@ func (env *environment) copy() *environment { coinbase: env.coinbase, header: types.CopyHeader(env.header), receipts: copyReceipts(env.receipts), - till: env.till, } if env.gasPool != nil { gasPool := *env.gasPool @@ -536,7 +535,7 @@ func (w *worker) newWorkLoopEx(recommit time.Duration) { // commitSimple just starts a new commitNewWork commitSimple := func() { - if wemixminer.AmPartner() && atomic.CompareAndSwapInt32(&busyMining, 0, 1) { + if atomic.CompareAndSwapInt32(&busyMining, 0, 1) { w.newWorkCh <- &newWorkReq{interrupt: nil, noempty: false, timestamp: time.Now().Unix()} atomic.StoreInt32(&w.newTxs, 0) atomic.StoreInt32(&busyMining, 0) @@ -1269,6 +1268,8 @@ func (w *worker) commitTransactionsEx(env *environment, interrupt *int32, tstart } + time.Sleep(time.Until(*env.till)) + log.Debug("Block", "number", env.header.Number.Int64(), "elapsed", common.PrettyDuration(time.Since(tstart)), "txs", len(committedTxs)) return false @@ -1768,13 +1769,6 @@ func (w *worker) commitEx(env *environment, interval func(), update bool, start } logs = append(logs, receipt.Logs...) } - - if update { - w.updateSnapshot(env) - update = false - } - time.Sleep(time.Until(*env.till)) - if !wemixminer.IsPoW() { if err = wemixminer.ReleaseMiningToken(sealedBlock.Number(), sealedBlock.Hash(), sealedBlock.ParentHash()); err != nil { return err diff --git a/mobile/geth.go b/mobile/geth.go index 5231a444aaed..709b68cbded8 100644 --- a/mobile/geth.go +++ b/mobile/geth.go @@ -149,6 +149,8 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { return nil, err } + debug.Memsize.Add("node", rawStack) + var genesis *core.Genesis if config.EthereumGenesis != "" { // Parse the user supplied genesis spec if not mainnet diff --git a/p2p/peer.go b/p2p/peer.go index ab659b5cf06a..257027a5b74d 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -365,12 +365,7 @@ func countMatchingProtocols(protocols []Protocol, caps []Cap) int { n := 0 for _, cap := range caps { for _, proto := range protocols { - if proto.Match == nil { - proto.Match = func(cap Cap) bool { - return proto.Name == cap.Name && proto.Version == cap.Version - } - } - if proto.Match(cap) { + if proto.Name == cap.Name && proto.Version == cap.Version { n++ } } @@ -387,18 +382,13 @@ func matchProtocols(protocols []Protocol, caps []Cap, rw MsgReadWriter) map[stri outer: for _, cap := range caps { for _, proto := range protocols { - if proto.Match == nil { - proto.Match = func(cap Cap) bool { - return proto.Name == cap.Name && proto.Version == cap.Version - } - } - if proto.Match(cap) { + if proto.Name == cap.Name && proto.Version == cap.Version { // If an old protocol version matched, revert it - if old := result[proto.Name]; old != nil { + if old := result[cap.Name]; old != nil { offset -= old.Length } // Assign the new match - result[proto.Name] = &protoRW{Protocol: proto, offset: offset, in: make(chan Msg), w: rw} + result[cap.Name] = &protoRW{Protocol: proto, offset: offset, in: make(chan Msg), w: rw} offset += proto.Length continue outer diff --git a/p2p/protocol.go b/p2p/protocol.go index 70716d202b6d..fa23a087c281 100644 --- a/p2p/protocol.go +++ b/p2p/protocol.go @@ -23,9 +23,6 @@ import ( "github.com/ethereum/go-ethereum/p2p/enr" ) -type matchFunc func(cap Cap) bool -type representativeNameFunc func() string - // Protocol represents a P2P subprotocol implementation. type Protocol struct { // Name should contain the official protocol name, @@ -64,17 +61,10 @@ type Protocol struct { // Attributes contains protocol specific information for the node record. Attributes []enr.Entry - - // WEMIX: for supporting ETH protocol name - Match matchFunc - RepresentativeName representativeNameFunc } func (p Protocol) cap() Cap { - if p.RepresentativeName == nil { - return Cap{p.Name, p.Version} - } - return Cap{p.RepresentativeName(), p.Version} + return Cap{p.Name, p.Version} } // Cap is the structure of a peer capability. diff --git a/params/version.go b/params/version.go index b058883ad9e4..daf0ba2ca895 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 0 // Major version component of the current release VersionMinor = 10 // Minor version component of the current release - VersionPatch = 9 // Patch version component of the current release + VersionPatch = 8 // Patch version component of the current release VersionMeta = "stable" // Version metadata to append to the version string ) diff --git a/rocksdb b/rocksdb index df4d3cf6fd52..fcf3d75f3f02 160000 --- a/rocksdb +++ b/rocksdb @@ -1 +1 @@ -Subproject commit df4d3cf6fd52907f9a9a9bb62f124891787610eb +Subproject commit fcf3d75f3f022a6a55ff1222d6b06f8518d38c7c diff --git a/wemix/admin.go b/wemix/admin.go index 3b75dff816a4..e26618d61749 100644 --- a/wemix/admin.go +++ b/wemix/admin.go @@ -7,6 +7,7 @@ import ( "context" "encoding/hex" "encoding/json" + "errors" "fmt" "math/big" "path" @@ -19,7 +20,7 @@ import ( "go.etcd.io/etcd/server/v3/embed" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -32,10 +33,8 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" wemixapi "github.com/ethereum/go-ethereum/wemix/api" - gov "github.com/ethereum/go-ethereum/wemix/bind" "github.com/ethereum/go-ethereum/wemix/metclient" wemixminer "github.com/ethereum/go-ethereum/wemix/miner" - "github.com/pkg/errors" ) type wemixNode struct { @@ -62,7 +61,10 @@ type wemixAdmin struct { bootNodeId string // allowed to generate block without admin contract bootAccount common.Address nodeInfo *p2p.NodeInfo - contracts *gov.GovContracts + registry *metclient.RemoteContract + gov *metclient.RemoteContract + staking *metclient.RemoteContract + envStorage *metclient.RemoteContract Updates chan bool rpcCli *rpc.Client cli *ethclient.Client @@ -172,7 +174,7 @@ func toIdv4(id string) (string, error) { return idv4.ID().String(), nil } } else { - return "", fmt.Errorf("invalid V5 Identifier") + return "", fmt.Errorf("Invalid V5 Identifier") } } @@ -189,13 +191,14 @@ func (ma *wemixAdmin) getGenesisInfo() (string, common.Address, error) { if err != nil { return "", common.Address{}, err } + var nodeId string if len(block.Extra) < 64 { - return "", common.Address{}, fmt.Errorf("invalid bootnode id in the genesis block") + return "", common.Address{}, fmt.Errorf("Invalid bootnode id in the genesis block") } else if len(block.Extra) == 64 { nodeId = hex.EncodeToString(block.Extra) } else if len(block.Extra) <= 128 { - return "", common.Address{}, fmt.Errorf("invalid bootnode id in the genesis block") + return "", common.Address{}, fmt.Errorf("Invalid bootnode id in the genesis block") } else { nodeId = string(block.Extra[len(block.Extra)-128:]) } @@ -203,14 +206,140 @@ func (ma *wemixAdmin) getGenesisInfo() (string, common.Address, error) { return nodeId, block.Coinbase, nil } -func (ma *wemixAdmin) getRegGovEnvContracts(ctx context.Context, height *big.Int) (*gov.GovContracts, error) { - if ctx == nil { - var cancel func() - ctx, cancel = context.WithCancel(context.Background()) - defer cancel() +func (ma *wemixAdmin) getRegistryAddress(ctx context.Context, cli *ethclient.Client, registryAbi abi.ABI, height *big.Int) (*common.Address, error) { + contract := &metclient.RemoteContract{ + Cli: cli, + Abi: registryAbi, + } + for i := uint64(0); i < 10; i++ { + addr := crypto.CreateAddress(ma.bootAccount, i) + contract.To = &addr + + var v *big.Int + err := metclient.CallContract(ctx, contract, "magic", nil, &v, height) + if err == nil && v.Cmp(magic) == 0 { + return &addr, nil + } + } + return nil, wemixminer.ErrNotInitialized +} + +// it should be the first transaction of the coinbase of the genesis block +func (ma *wemixAdmin) getAdminAddresses() (registry, gov, staking, envStorage *common.Address, err error) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + registry, gov, staking, envStorage = nil, nil, nil, nil + contract := &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.registry.Abi, + } + if ma.registry != nil && ma.registry.To != nil { + registry = ma.registry.To + } else { + registry, err = ma.getRegistryAddress(ctx, ma.cli, ma.registry.Abi, nil) + if err != nil { + err = ethereum.NotFound + return + } + } + contract.To = registry + + n1 := metclient.ToBytes32("GovernanceContract") + n2 := metclient.ToBytes32("Staking") + n3 := metclient.ToBytes32("EnvStorage") + var a1, a2, a3 common.Address + input := []interface{}{n1} + if err = metclient.CallContract(ctx, contract, "getContractAddress", input, &a1, nil); err != nil { + return + } + input = []interface{}{n2} + if err = metclient.CallContract(ctx, contract, "getContractAddress", input, &a2, nil); err != nil { + return + } + input = []interface{}{n3} + if err = metclient.CallContract(ctx, contract, "getContractAddress", input, &a3, nil); err != nil { + return + } + + log.Debug("Wemix Contract Address", + hex.EncodeToString(n1[:]), a1.Hex(), + hex.EncodeToString(n2[:]), a2.Hex(), + hex.EncodeToString(n3[:]), a3.Hex()) + + gov, staking, envStorage = &a1, &a2, &a3 + return +} + +func (ma *wemixAdmin) getInt(ctx context.Context, contract *metclient.RemoteContract, block *big.Int, name string) (int64, error) { + var v *big.Int + err := metclient.CallContract(ctx, contract, name, nil, &v, block) + if err != nil { + return 0, err + } else { + return v.Int64(), nil } - opts := &bind.CallOpts{Context: ctx, BlockNumber: height} - return gov.GetGovContractsByOwner(opts, ma.cli, ma.bootAccount) +} + +// TODO: error handling +func (ma *wemixAdmin) getRegGovEnvContracts(ctx context.Context, height *big.Int) (reg, gov, env, staking *metclient.RemoteContract, err error) { + if ma.registry == nil { + err = wemixminer.ErrNotInitialized + return + } + reg = &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.registry.Abi, + } + env = &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.envStorage.Abi, + } + gov = &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.gov.Abi, + } + staking = &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.staking.Abi, + } + if ma.registry.To != nil { + reg.To = ma.registry.To + } else { + var addr *common.Address + if addr, err = ma.getRegistryAddress(ctx, ma.cli, reg.Abi, height); err != nil { + err = wemixminer.ErrNotInitialized + return + } + reg.To = addr + } + + var addr common.Address + input := []interface{}{metclient.ToBytes32("GovernanceContract")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + err = wemixminer.ErrNotInitialized + return + } + gov.To = &common.Address{} + gov.To.SetBytes(addr.Bytes()) + + input = []interface{}{metclient.ToBytes32("EnvStorage")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + err = wemixminer.ErrNotInitialized + return + } + env.To = &common.Address{} + env.To.SetBytes(addr.Bytes()) + + input = []interface{}{metclient.ToBytes32("Staking")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + err = wemixminer.ErrNotInitialized + return + } + staking.To = &common.Address{} + staking.To.SetBytes(addr.Bytes()) + + return } // returns []*wemixNode from map[string]*wemixNode @@ -286,35 +415,40 @@ func (ma *wemixAdmin) getMinerNodes(height int64, locked bool) (*wemixNode, *wem // get nodes from the Governance contract func (ma *wemixAdmin) getWemixNodes(ctx context.Context, block *big.Int) ([]*wemixNode, error) { - callOpts := &bind.CallOpts{Context: ctx, BlockNumber: block} - nodes := make([]*wemixNode, 0) - nodeLength, err := ma.contracts.GovImp.GetNodeLength(callOpts) - if err != nil { - return nil, err - } - count := nodeLength.Int64() + var ( + nodes []*wemixNode + addr common.Address + name, enode, ip []byte + port *big.Int + count int64 + input, output []interface{} + err error + ) + + count, err = ma.getInt(ctx, ma.gov, block, "getNodeLength") for i := int64(1); i <= count; i++ { - node, err := ma.contracts.GovImp.GetNode(callOpts, big.NewInt(i)) - if err != nil { + input = []interface{}{big.NewInt(i)} + output = []interface{}{&name, &enode, &ip, &port} + if err = metclient.CallContract(ctx, ma.gov, "getNode", input, &output, block); err != nil { return nil, err } - member, err := ma.contracts.GovImp.GetMember(callOpts, big.NewInt(i)) - if err != nil { + + if err = metclient.CallContract(ctx, ma.gov, "getMember", input, &addr, block); err != nil { return nil, err } - sid := hex.EncodeToString(node.Enode) + sid := hex.EncodeToString(enode) if len(sid) != 128 { return nil, ErrInvalidEnode } idv4, _ := toIdv4(sid) nodes = append(nodes, &wemixNode{ - Name: string(node.Name), + Name: string(name), Enode: sid, - Ip: string(node.Ip), + Ip: string(ip), Id: idv4, - Port: int(node.Port.Int64()), - Addr: member, + Port: int(port.Int64()), + Addr: addr, }) } sort.Slice(nodes, func(i, j int) bool { @@ -325,78 +459,149 @@ func (ma *wemixAdmin) getWemixNodes(ctx context.Context, block *big.Int) ([]*wem func (ma *wemixAdmin) getRewardParams(ctx context.Context, height *big.Int) (*rewardParameters, error) { rp := &rewardParameters{} - contracts, err := ma.getRegGovEnvContracts(ctx, height) + reg, gov, env, staking, err := ma.getRegGovEnvContracts(ctx, height) if err != nil { return nil, err } - opts := &bind.CallOpts{Context: ctx, BlockNumber: height} - rp.rewardAmount, err = contracts.EnvStorageImp.GetBlockRewardAmount(opts) - if err != nil { + if err = metclient.CallContract(ctx, env, "getBlockRewardAmount", nil, &rp.rewardAmount, height); err != nil { return nil, err } - distributionMethod1, distributionMethod2, distributionMethod3, distributionMethod4, err := contracts.EnvStorageImp.GetBlockRewardDistributionMethod(opts) - if err != nil { + rp.distributionMethod = make([]*big.Int, 4) + if err = metclient.CallContract(ctx, env, "getBlockRewardDistributionMethod", nil, &rp.distributionMethod, height); err != nil { return nil, err } - rp.distributionMethod = []*big.Int{distributionMethod1, distributionMethod2, distributionMethod3, distributionMethod4} - staker, err := contracts.Registry.GetContractAddress(opts, metclient.ToBytes32(gov.DOMAIN_StakingReward)) - if err != nil { - return nil, errors.Wrap(err, gov.DOMAIN_StakingReward) + var addr common.Address + input := []interface{}{metclient.ToBytes32("StakingReward")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + return nil, err } - rp.staker = &staker + rp.staker = &common.Address{} + rp.staker.SetBytes(addr.Bytes()) - ecoSystem, err := contracts.Registry.GetContractAddress(opts, metclient.ToBytes32(gov.DOMAIN_Ecosystem)) - if err != nil { - return nil, errors.Wrap(err, gov.DOMAIN_Ecosystem) + input = []interface{}{metclient.ToBytes32("Ecosystem")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + return nil, err } - rp.ecoSystem = &ecoSystem + rp.ecoSystem = &common.Address{} + rp.ecoSystem.SetBytes(addr.Bytes()) - maintenance, err := contracts.Registry.GetContractAddress(opts, metclient.ToBytes32(gov.DOMAIN_Maintenance)) - if err != nil { - return nil, errors.Wrap(err, gov.DOMAIN_Maintenance) + input = []interface{}{metclient.ToBytes32("Maintenance")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + return nil, err } - rp.maintenance = &maintenance + rp.maintenance = &common.Address{} + rp.maintenance.SetBytes(addr.Bytes()) - feeCollector, err := contracts.Registry.GetContractAddress(opts, metclient.ToBytes32(gov.DOMAIN_FeeCollector)) - if err != nil { + input = []interface{}{metclient.ToBytes32("FeeCollector")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + // ignore error rp.feeCollector = nil } else { - rp.feeCollector = &feeCollector + rp.feeCollector = &common.Address{} + rp.feeCollector.SetBytes(addr.Bytes()) } - blocksPer, err := contracts.EnvStorageImp.GetBlocksPer(opts) + rp.blocksPer, err = ma.getInt(ctx, env, height, "getBlocksPer") if err != nil { return nil, err } - rp.blocksPer = blocksPer.Int64() - if countBig, err := contracts.GovImp.GetMemberLength(opts); err != nil { + if count, err := ma.getInt(ctx, gov, height, "getMemberLength"); err != nil { return nil, err } else { - count := countBig.Int64() for i := int64(1); i <= count; i++ { - index := big.NewInt(i) - if member, err := contracts.GovImp.GetMember(opts, index); err != nil { + var rewardAddress common.Address + var stake *big.Int + + input = []interface{}{big.NewInt(i)} + if err = metclient.CallContract(ctx, gov, "getMember", input, &addr, height); err != nil { return nil, err - } else if reward, err := contracts.GovImp.GetReward(opts, index); err != nil { + } + input = []interface{}{big.NewInt(i)} + if err = metclient.CallContract(ctx, gov, "getReward", input, &rewardAddress, height); err != nil { return nil, err - } else if stake, err := contracts.StakingImp.LockedBalanceOf(opts, member); err != nil { + } + input = []interface{}{addr} + if err = metclient.CallContract(ctx, staking, "lockedBalanceOf", input, &stake, height); err != nil { return nil, err - } else { - rp.members = append(rp.members, &wemixMember{ - Staker: member, - Reward: reward, - Stake: stake, - }) } + rp.members = append(rp.members, &wemixMember{ + Staker: addr, + Reward: rewardAddress, + Stake: stake, + }) } } + return rp, nil } +func (ma *wemixAdmin) getRewardAccounts(ctx context.Context, block *big.Int) (rewardPoolAccount, maintenanceAccount *common.Address, members []*wemixMember, err error) { + var ( + addr common.Address + count int64 + stake *big.Int + input []interface{} + ) + + if ma.registry == nil || ma.registry.To == nil { + err = wemixminer.ErrNotInitialized + return + } + + input = []interface{}{metclient.ToBytes32("RewardPool")} + err = metclient.CallContract(ctx, ma.registry, "getContractAddress", input, &addr, block) + if err == nil { + rewardPoolAccount = &common.Address{} + rewardPoolAccount.SetBytes(addr.Bytes()) + } + + input = []interface{}{metclient.ToBytes32("Maintenance")} + err = metclient.CallContract(ctx, ma.registry, "getContractAddress", input, &addr, block) + if err == nil { + maintenanceAccount = &common.Address{} + maintenanceAccount.SetBytes(addr.Bytes()) + } + + count, err = ma.getInt(ctx, ma.gov, block, "getMemberLength") + if err != nil { + return + } + + for i := int64(1); i <= count; i++ { + var rewardAddress common.Address + + input = []interface{}{big.NewInt(i)} + err = metclient.CallContract(ctx, ma.gov, "getMember", input, + &addr, block) + if err != nil { + return + } + err = metclient.CallContract(ctx, ma.gov, "getReward", input, + &rewardAddress, block) + if err != nil { + return + } + input = []interface{}{addr} + err = metclient.CallContract(ctx, ma.staking, "lockedBalanceOf", input, + &stake, block) + if err != nil { + return + } + + members = append(members, &wemixMember{ + Staker: addr, + Reward: rewardAddress, + Stake: stake, + }) + } + + return +} + // temporary internal structure to collect data from governance contracts type govdata struct { blockNum, modifiedBlock int64 @@ -407,79 +612,73 @@ type govdata struct { nodes, addedNodes, updatedNodes, deletedNodes []*wemixNode } -func (ma *wemixAdmin) getGovData(refresh bool) (*govdata, error) { - data := new(govdata) +func (ma *wemixAdmin) getGovData(refresh bool) (data *govdata, err error) { + data = &govdata{} ctx, cancel := context.WithCancel(context.Background()) defer cancel() block, err := ma.cli.HeaderByNumber(ctx, nil) if err != nil { - return data, err + return } data.blockNum = block.Number.Int64() if !refresh && data.blockNum <= ma.lastBlock { - return data, err + return } - opts := &bind.CallOpts{Context: ctx, BlockNumber: block.Number} - if modifiedBlock, err := ma.contracts.GovImp.ModifiedBlock(opts); err != nil { - return data, err - } else { - data.modifiedBlock = modifiedBlock.Int64() + data.modifiedBlock, err = ma.getInt(ctx, ma.gov, block.Number, + "modifiedBlock") + if err != nil { + return } - if !refresh && ma.modifiedBlock == data.modifiedBlock { - return data, nil + return } - if blockInterval, err := ma.contracts.EnvStorageImp.GetBlockCreationTime(opts); err != nil { + data.blockInterval, err = ma.getInt(ctx, ma.envStorage, block.Number, "getBlockCreationTime") + if err != nil { + // TODO: ignore this error for now data.blockInterval = ma.blockInterval - } else { - data.blockInterval = blockInterval.Int64() + //return } - - if blocksPer, err := ma.contracts.EnvStorageImp.GetBlocksPer(opts); err != nil { + data.blocksPer, err = ma.getInt(ctx, ma.envStorage, block.Number, "getBlocksPer") + if err != nil { + // TODO: ignore this error for now data.blocksPer = ma.blocksPer - } else { - data.blocksPer = blocksPer.Int64() + //return } - - if maxIdleBlockInterval, err := ma.contracts.EnvStorageImp.GetMaxIdleBlockInterval(opts); err != nil { + data.maxIdleBlockInterval, err = ma.getInt(ctx, ma.envStorage, block.Number, "getMaxIdleBlockInterval") + if err != nil { + // TODO: ignore this error for now data.maxIdleBlockInterval = int64(params.MaxIdleBlockInterval) - } else { - data.maxIdleBlockInterval = maxIdleBlockInterval.Int64() + //return } - - if blockReward, err := ma.contracts.EnvStorageImp.GetBlockRewardAmount(opts); err != nil { - return data, err - } else { - data.blockReward = blockReward + err = metclient.CallContract(ctx, ma.envStorage, "getBlockRewardAmount", nil, &data.blockReward, block.Number) + if err != nil { + return } - - if maxPriorityFeePerGas, err := ma.contracts.EnvStorageImp.GetMaxPriorityFeePerGas(opts); err != nil { - return data, err - } else { - data.maxPriorityFeePerGas = maxPriorityFeePerGas + err = metclient.CallContract(ctx, ma.envStorage, "getMaxPriorityFeePerGas", nil, &data.maxPriorityFeePerGas, block.Number) + if err != nil { + return } - - if gasLimit, baseFeeMaxChangeRate, gasTargetPercentage, err := ma.contracts.EnvStorageImp.GetGasLimitAndBaseFee(opts); err != nil { - return data, err - } else { - data.gasLimit = gasLimit - data.baseFeeMaxChangeRate = baseFeeMaxChangeRate.Int64() - data.gasTargetPercentage = gasTargetPercentage.Int64() + gasLimitAndBaseFee := make([]*big.Int, 3) + err = metclient.CallContract(ctx, ma.envStorage, "getGasLimitAndBaseFee", nil, &gasLimitAndBaseFee, block.Number) + if err != nil { + return } + data.gasLimit = gasLimitAndBaseFee[0] + data.baseFeeMaxChangeRate = gasLimitAndBaseFee[1].Int64() + data.gasTargetPercentage = gasLimitAndBaseFee[2].Int64() - if maxBaseFee, err := ma.contracts.EnvStorageImp.GetMaxBaseFee(opts); err != nil { - return data, err - } else { - data.maxBaseFee = maxBaseFee + err = metclient.CallContract(ctx, ma.envStorage, "getMaxBaseFee", nil, &data.maxBaseFee, block.Number) + if err != nil { + return } data.nodes, err = ma.getWemixNodes(ctx, block.Number) if err != nil { - return data, err + return } oldNodes := ma.getNodes() @@ -521,7 +720,8 @@ func (ma *wemixAdmin) getGovData(refresh bool) (*govdata, error) { data.addedNodes = append(data.addedNodes, data.nodes[j]) } } - return data, nil + + return } func StartAdmin(stack *node.Node, datadir string) { @@ -536,10 +736,35 @@ func StartAdmin(stack *node.Node, datadir string) { utils.Fatalf("Failed to attach to self: %v", err) } + registryContract, err := metclient.LoadJsonContract(strings.NewReader(RegistryAbi)) + if err != nil { + utils.Fatalf("Loading ABI failed: %v", err) + } + govContract, err := metclient.LoadJsonContract(strings.NewReader(GovAbi)) + if err != nil { + utils.Fatalf("Loading ABI failed: %v", err) + } + stakingContract, err := metclient.LoadJsonContract(strings.NewReader(StakingAbi)) + if err != nil { + utils.Fatalf("Loading ABI failed: %v", err) + } + envStorageImpContract, err := metclient.LoadJsonContract(strings.NewReader(EnvStorageImpAbi)) + if err != nil { + utils.Fatalf("Loading ABI failed: %v", err) + } + cli := ethclient.NewClient(rpcCli) admin = &wemixAdmin{ - stack: stack, - lock: &sync.Mutex{}, + stack: stack, + lock: &sync.Mutex{}, + registry: &metclient.RemoteContract{ + Cli: cli, Abi: registryContract.Abi}, + gov: &metclient.RemoteContract{ + Cli: cli, Abi: govContract.Abi}, + staking: &metclient.RemoteContract{ + Cli: cli, Abi: stakingContract.Abi}, + envStorage: &metclient.RemoteContract{ + Cli: cli, Abi: envStorageImpContract.Abi}, Updates: make(chan bool, 10), rpcCli: rpcCli, cli: cli, @@ -585,16 +810,22 @@ func (ma *wemixAdmin) addPeer(node *wemixNode) error { } func (ma *wemixAdmin) update() { - if ma.contracts == nil || ma.contracts.Registry == nil { + if ma.registry == nil || ma.registry.To == nil { return } refresh := false - contracts, err := ma.getRegGovEnvContracts(nil, nil) + registry, gov, staking, envStorage, err := ma.getAdminAddresses() if err != nil { return - } else if !ma.contracts.Equal(contracts) { - ma.contracts = contracts + } else if !bytes.Equal(registry[:], ma.registry.To[:]) || + !bytes.Equal(gov[:], ma.gov.To[:]) || + !bytes.Equal(staking[:], ma.staking.To[:]) || + !bytes.Equal(envStorage[:], ma.envStorage.To[:]) { + ma.registry.To = registry + ma.gov.To = gov + ma.staking.To = staking + ma.envStorage.To = envStorage refresh = true } @@ -664,7 +895,7 @@ func (ma *wemixAdmin) update() { "maxPriorityFeePerGas", data.maxPriorityFeePerGas) } - if ma.self != nil && ma.self.Addr != nilAddress { + if ma.self != nil && !bytes.Equal(ma.self.Addr[:], nilAddress[:]) { err = ma.rpcCli.CallContext(ctx, &v, "miner_setEtherbase", &ma.self.Addr) if err != nil || !*v { log.Info("set the coinbase", "error", err) @@ -735,13 +966,16 @@ func (ma *wemixAdmin) run() { ma.nodeInfo = nodeInfo } } - if ma.contracts == nil { - contracts, err := ma.getRegGovEnvContracts(nil, nil) + if ma.registry.To == nil { + registry, gov, staking, envStorage, err := ma.getAdminAddresses() if err == nil { - ma.contracts = contracts + ma.registry.To = registry + ma.gov.To = gov + ma.staking.To = staking + ma.envStorage.To = envStorage } } - if ma.contracts != nil && ma.nodeInfo != nil { + if ma.registry.To != nil && ma.nodeInfo != nil { ma.update() if ma.amPartner() && ma.self != nil && !ma.etcdIsRunning() { EtcdStart() @@ -781,11 +1015,11 @@ type reward struct { } // handles rewards in testnet block 94 -func handleBlock94Rewards(height *big.Int, rp *rewardParameters, _ /*fees*/ *big.Int) []reward { +func handleBlock94Rewards(height *big.Int, rp *rewardParameters, fees *big.Int) []reward { if height.Int64() != 94 || len(rp.members) != 0 || - *rp.staker != testnetBlock94Rewards[0].Addr || - *rp.ecoSystem != testnetBlock94Rewards[1].Addr || - *rp.maintenance != testnetBlock94Rewards[2].Addr { + !bytes.Equal(rp.staker[:], testnetBlock94Rewards[0].Addr[:]) || + !bytes.Equal(rp.ecoSystem[:], testnetBlock94Rewards[1].Addr[:]) || + !bytes.Equal(rp.maintenance[:], testnetBlock94Rewards[2].Addr[:]) { return nil } return testnetBlock94Rewards @@ -947,61 +1181,67 @@ func calculateRewards(config *params.ChainConfig, num, fees *big.Int, addBalance return calculateRewardsWithParams(config, rp, num, fees, addBalance) } -func getCoinbase(height *big.Int) (common.Address, error) { +func getCoinbase(height *big.Int) (coinbase common.Address, err error) { if admin == nil { - return common.Address{}, wemixminer.ErrNotInitialized + err = wemixminer.ErrNotInitialized + return } - prvKey := admin.stack.Server().PrivateKey if admin.self != nil { ctx, cancel := context.WithCancel(context.Background()) defer cancel() num := new(big.Int).Sub(height, common.Big1) - contracts, err := admin.getRegGovEnvContracts(ctx, num) - if err != nil { - return common.Address{}, err + _, gov, _, _, err2 := admin.getRegGovEnvContracts(ctx, num) + if err2 != nil { + err = err2 + return } + nodeId := crypto.FromECDSAPub(&prvKey.PublicKey)[1:] - return enodeExists(ctx, height, contracts.GovImp, nodeId) + if addr, err2 := enodeExists(ctx, height, gov, nodeId); err2 != nil { + err = err2 + return + } else { + coinbase = addr + } } else if admin.nodeInfo != nil && admin.nodeInfo.ID == admin.bootNodeId { - return admin.bootAccount, nil - } else { - return common.Address{}, ethereum.NotFound + coinbase = admin.bootAccount } + return } -func signBlock(height *big.Int, hash common.Hash) (common.Address, []byte, error) { +func signBlock(height *big.Int, hash common.Hash) (coinbase common.Address, sig []byte, err error) { if admin == nil { - return common.Address{}, nil, wemixminer.ErrNotInitialized + err = wemixminer.ErrNotInitialized + return } + data := append(height.Bytes(), hash.Bytes()...) + data = crypto.Keccak256(data) prvKey := admin.stack.Server().PrivateKey - sig, err := crypto.Sign(crypto.Keccak256(append(height.Bytes(), hash.Bytes()...)), prvKey) - if err != nil { - return common.Address{}, nil, err - } - - if admin.nodeInfo != nil && admin.nodeInfo.ID == admin.bootNodeId { - return admin.bootAccount, sig, nil - } else if admin.self != nil { + sig, err = crypto.Sign(data, prvKey) + if admin.self != nil { ctx, cancel := context.WithCancel(context.Background()) defer cancel() num := new(big.Int).Sub(height, common.Big1) - contracts, err := admin.getRegGovEnvContracts(ctx, num) - if err != nil { - return common.Address{}, nil, err + _, gov, _, _, err2 := admin.getRegGovEnvContracts(ctx, num) + if err2 != nil { + err = err2 + return } nodeId := crypto.FromECDSAPub(&prvKey.PublicKey)[1:] - if addr, err := enodeExists(ctx, height, contracts.GovImp, nodeId); err != nil { - return common.Address{}, nil, err + if addr, err2 := enodeExists(ctx, height, gov, nodeId); err2 != nil { + err = err2 + return } else { - return addr, sig, nil + coinbase = addr } - } else { - return common.Address{}, sig, wemixminer.ErrNotInitialized + } else if admin.nodeInfo != nil && admin.nodeInfo.ID == admin.bootNodeId { + coinbase = admin.bootAccount } + return } func verifyBlockSig(height *big.Int, coinbase common.Address, nodeId []byte, hash common.Hash, sig []byte, checkMinerLimit bool) bool { @@ -1010,13 +1250,12 @@ func verifyBlockSig(height *big.Int, coinbase common.Address, nodeId []byte, has // get nodeid from the coinbase num := new(big.Int).Sub(height, common.Big1) - contracts, err := admin.getRegGovEnvContracts(ctx, num) + _, gov, _, _, err := admin.getRegGovEnvContracts(ctx, num) if err != nil { - return err == wemixminer.ErrNotInitialized || errors.Is(err, ethereum.NotFound) - } else if count, err := contracts.GovImp.GetMemberLength(&bind.CallOpts{Context: ctx, BlockNumber: num}); err != nil || count.Sign() == 0 { - return err == wemixminer.ErrNotInitialized || count.Sign() == 0 + return err == wemixminer.ErrNotInitialized + } else if count, err := admin.getInt(ctx, gov, num, "getMemberLength"); err != nil || count == 0 { + return err == wemixminer.ErrNotInitialized || count == 0 } - gov := contracts.GovImp // if minerNodeId is given, i.e. present in block header, use it, // otherwise, derive it from the codebase var data []byte @@ -1144,17 +1383,28 @@ func (ma *wemixAdmin) pendingEmpty() bool { return status.Pending == 0 } +func getMaxPriorityFeePerGas() *big.Int { + defaultFee := big.NewInt(100 * params.GWei) + if admin == nil || admin.envStorage == nil || admin.envStorage.To == nil { + return defaultFee + } + var fee *big.Int + if err := metclient.CallContract(context.Background(), admin.envStorage, "getMaxPriorityFeePerGas", nil, &fee, nil); err != nil { + return defaultFee + } + return fee +} + func suggestGasPrice() *big.Int { defaultFee := big.NewInt(100 * params.GWei) - if admin == nil || admin.contracts == nil || admin.contracts.EnvStorageImp == nil { + if admin == nil || admin.envStorage == nil || admin.envStorage.To == nil { return defaultFee } - fee, err := admin.contracts.EnvStorageImp.GetMaxPriorityFeePerGas(nil) - if err != nil { + var fee *big.Int + if err := metclient.CallContract(context.Background(), admin.envStorage, "getMaxPriorityFeePerGas", nil, &fee, nil); err != nil { return defaultFee - } else { - return fee } + return fee } func getBlockBuildParameters(height *big.Int) (blockInterval int64, maxBaseFee, gasLimit *big.Int, baseFeeMaxChangeRate, gasTargetPercentage int64, err error) { @@ -1187,39 +1437,31 @@ func getBlockBuildParameters(height *big.Int) (blockInterval int64, maxBaseFee, ctx, cancel := context.WithCancel(context.Background()) defer cancel() - var ( - env *gov.EnvStorageImp - gov *gov.GovImp - ) - if contracts, err2 := admin.getRegGovEnvContracts(ctx, height); err2 != nil { + var env, gov *metclient.RemoteContract + if _, gov, env, _, err = admin.getRegGovEnvContracts(ctx, height); err != nil { err = wemixminer.ErrNotInitialized return - } else { - env, gov = contracts.EnvStorageImp, contracts.GovImp - } - - opts := &bind.CallOpts{Context: ctx, BlockNumber: height} - if count, err2 := gov.GetMemberLength(opts); err2 != nil || count.Sign() == 0 { + } else if count, err2 := admin.getInt(ctx, gov, height, "getMemberLength"); err2 != nil || count == 0 { err = wemixminer.ErrNotInitialized return } - if v, err2 := env.GetBlockCreationTime(opts); err2 != nil { + var v *big.Int + if err = metclient.CallContract(ctx, env, "getBlockCreationTime", nil, &v, height); err != nil { err = wemixminer.ErrNotInitialized return - } else { - blockInterval = v.Int64() } + blockInterval = v.Int64() - if GasLimit, BaseFeeMaxChangeRate, GasTargetPercentage, err2 := env.GetGasLimitAndBaseFee(opts); err2 != nil { + gasLimitAndBaseFee := make([]*big.Int, 3) + if err = metclient.CallContract(ctx, env, "getGasLimitAndBaseFee", nil, &gasLimitAndBaseFee, height); err != nil { err = wemixminer.ErrNotInitialized return - } else { - gasLimit = GasLimit - baseFeeMaxChangeRate = BaseFeeMaxChangeRate.Int64() - gasTargetPercentage = GasTargetPercentage.Int64() } + gasLimit = gasLimitAndBaseFee[0] + baseFeeMaxChangeRate = gasLimitAndBaseFee[1].Int64() + gasTargetPercentage = gasLimitAndBaseFee[2].Int64() - if maxBaseFee, err = env.GetMaxBaseFee(opts); err != nil { + if err = metclient.CallContract(ctx, env, "getMaxBaseFee", nil, &maxBaseFee, height); err != nil { err = wemixminer.ErrNotInitialized return } @@ -1280,12 +1522,11 @@ func Info() interface{} { return nodes[i].Name < nodes[j].Name }) - ca := admin.contracts.Address() info := &map[string]interface{}{ "consensus": params.ConsensusMethod, - "registry": ca.Registry, - "governance": ca.Gov, - "staking": ca.Staking, + "registry": admin.registry.To, + "governance": admin.gov.To, + "staking": admin.staking.To, "modifiedblock": admin.modifiedBlock, "blocksPer": admin.blocksPer, "blockInterval": admin.blockInterval, @@ -1491,7 +1732,7 @@ func (ma *wemixAdmin) getTxPoolStatus() (pending, queued uint, err error) { p, b1 := data["pending"] q, b2 := data["queued"] if !b1 || !b2 { - err = fmt.Errorf("invalid Data") + err = fmt.Errorf("Invalid Data") } else { pending = uint(p) queued = uint(q) @@ -1562,7 +1803,6 @@ func init() { wemixminer.AcquireMiningTokenFunc = acquireMiningToken wemixminer.ReleaseMiningTokenFunc = releaseMiningToken wemixminer.HasMiningTokenFunc = hasMiningToken - wemixapi.Info = Info wemixapi.GetMiners = getMiners wemixapi.GetMinerStatus = getMinerStatus diff --git a/wemix/bind/backends/options.go b/wemix/bind/backends/options.go deleted file mode 100644 index db7d814baba9..000000000000 --- a/wemix/bind/backends/options.go +++ /dev/null @@ -1,50 +0,0 @@ -package backends - -import ( - "math/big" - "os" - - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - gov "github.com/ethereum/go-ethereum/wemix/bind" -) - -type OptionFn func(nodeConf *node.Config, ethConf *ethconfig.Config, envConfig *gov.InitEnvStorage) - -func SetLogLevel(level int) OptionFn { - return func(nodeConf *node.Config, ethConf *ethconfig.Config, envConfig *gov.InitEnvStorage) { - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(level), log.StreamHandler(os.Stdout, log.TerminalFormat(true)))) - } -} - -// WithBlockGasLimit configures the simulated backend to target a specific gas limit -// when producing blocks. -func WithBlockGasLimit(gaslimit uint64) OptionFn { - return func(nodeConf *node.Config, ethConf *ethconfig.Config, envConfig *gov.InitEnvStorage) { - ethConf.Genesis.GasLimit = gaslimit - ethConf.Miner.GasCeil = gaslimit - } -} - -// WithCallGasLimit configures the simulated backend to cap eth_calls to a specific -// gas limit when running client operations. -func WithCallGasLimit(gaslimit uint64) OptionFn { - return func(nodeConf *node.Config, ethConf *ethconfig.Config, envConfig *gov.InitEnvStorage) { - ethConf.RPCGasCap = gaslimit - } -} - -// WithMinerMinTip configures the simulated backend to require a specific minimum -// gas tip for a transaction to be included. -// -// 0 is not possible as a live Geth node would reject that due to DoS protection, -// so the simulated backend will replicate that behavior for consistency. -func WithMinerMinTip(tip *big.Int) OptionFn { - if tip == nil || tip.Sign() <= 0 { - panic("invalid miner minimum tip") - } - return func(nodeConf *node.Config, ethConf *ethconfig.Config, envConfig *gov.InitEnvStorage) { - ethConf.Miner.GasPrice = tip - } -} diff --git a/wemix/bind/backends/wemix_simulated.go b/wemix/bind/backends/wemix_simulated.go deleted file mode 100644 index 098cbf7e2276..000000000000 --- a/wemix/bind/backends/wemix_simulated.go +++ /dev/null @@ -1,260 +0,0 @@ -package backends - -import ( - "context" - "crypto/ecdsa" - "errors" - "math/big" - "path/filepath" - "strings" - "time" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/wemix" - gov "github.com/ethereum/go-ethereum/wemix/bind" -) - -type SimClient interface { - ethereum.ChainReader - ethereum.ChainStateReader - ethereum.ContractCaller - ethereum.GasEstimator - ethereum.GasPricer - ethereum.LogFilterer - ethereum.PendingStateReader - ethereum.PendingContractCaller - ethereum.TransactionReader - ethereum.TransactionSender - SuggestGasTipCap(ctx context.Context) (*big.Int, error) // GasPricer1559 - Commit() -} - -var ChainID = params.AllEthashProtocolChanges.ChainID - -type wemixSimulatedBackend struct { - stack *node.Node - eth *eth.Ethereum - backend *backends.SimulatedBackend -} - -func NewWemixSimulatedBackend(pk *ecdsa.PrivateKey, datadir string, alloc core.GenesisAlloc, options ...OptionFn) (SimClient, error) { - params.ConsensusMethod = params.ConsensusPoA - - nodeConfig := node.DefaultConfig - nodeConfig.DataDir = datadir - nodeConfig.KeyStoreDir = filepath.Join(datadir, "keystore") - nodeConfig.P2P = p2p.Config{ - PrivateKey: pk, - NoDiscovery: true, - } - - ethConfig := ethconfig.Defaults - ethConfig.Genesis = &core.Genesis{ - Config: params.AllEthashProtocolChanges, - GasLimit: ethconfig.Defaults.Miner.GasCeil, - Alloc: alloc, - Coinbase: crypto.PubkeyToAddress(pk.PublicKey), - } - ethConfig.SyncMode = downloader.FullSync - ethConfig.TxPool.NoLocals = true - ethConfig.Ethash = ethash.Config{PowMode: ethash.ModeFake, Log: log.Root()} - ethConfig.NoPruning = true - envConfig := gov.DefaultInitEnvStorage - - for _, option := range options { - option(&nodeConfig, ðConfig, &envConfig) - } - - stack, err := node.New(&nodeConfig) - if err != nil { - return nil, err - } - - enode := strings.Split(strings.TrimLeft(stack.Server().NodeInfo().Enode, "enode://"), "@")[0] - ethConfig.Genesis.ExtraData = append(ethConfig.Genesis.ExtraData, []byte("0x"+enode)...) - ethConfig.NetworkId = ethConfig.Genesis.Config.ChainID.Uint64() - - backend, err := eth.New(stack, ðConfig) - if err != nil { - return nil, err - } - ethConfig.Genesis.MustCommit(backend.ChainDb()) - - if err := stack.Start(); err != nil { - return nil, err - } - - wemix.StartAdmin(stack, nodeConfig.DataDir) - - ks := keystore.NewPlaintextKeyStore(nodeConfig.KeyStoreDir) - account, err := ks.ImportECDSA(pk, "") - if err != nil { - return nil, err - } - if err := ks.Unlock(account, ""); err != nil { - return nil, err - } - - backend.AccountManager().AddBackend(ks) - backend.TxPool().SetGasPrice(ethConfig.Miner.GasPrice) - if err := backend.StartMining(1); err != nil { - return nil, err - } - now := time.Now() - for backend.APIBackend.CurrentBlock().NumberU64() == 0 { - if time.Since(now).Seconds() > 10 { - return nil, errors.New("mining error") - } - time.Sleep(0.2e9) - } - log.Warn("Wait Genesis Block Mined", "elapsed", time.Since(now).Seconds()) - - rpcClient, _ := stack.Attach() - ethClient := ethclient.NewClient(rpcClient) - - opts, err := bind.NewKeyedTransactorWithChainID(pk, ethConfig.Genesis.Config.ChainID) - if err != nil { - return nil, err - } - - contracts, err := gov.DeployGovContracts(opts, ethClient, map[string]common.Address{ - gov.DOMAIN_StakingReward: opts.From, - gov.DOMAIN_Ecosystem: opts.From, - gov.DOMAIN_Maintenance: opts.From, - gov.DOMAIN_FeeCollector: opts.From, - }) - if err != nil { - return nil, err - } - - nodeInfo := stack.Server().NodeInfo() - var members gov.InitMembers = []gov.InitMember{ - { - Staker: opts.From, - Voter: opts.From, - Reward: opts.From, - Name: nodeInfo.Name, - Enode: enode, - Ip: nodeInfo.IP, - Port: 8589, - Deposit: envConfig.STAKING_MIN, - }, - } - - if err := gov.ExecuteInitialize(contracts, opts, ethClient, envConfig.STAKING_MIN, envConfig, members); err != nil { - return nil, err - } - - return &wemixSimulatedBackend{ - stack: stack, - eth: backend, - backend: backends.NewSimulatedBackendWithEthereum(backend), - }, nil -} - -func (w *wemixSimulatedBackend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { - return w.backend.BlockByHash(ctx, hash) -} -func (w *wemixSimulatedBackend) BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) { - return w.backend.BlockByNumber(ctx, number) -} -func (w *wemixSimulatedBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { - return w.backend.HeaderByHash(ctx, hash) -} -func (w *wemixSimulatedBackend) HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) { - return w.backend.HeaderByNumber(ctx, number) -} -func (w *wemixSimulatedBackend) TransactionCount(ctx context.Context, blockHash common.Hash) (uint, error) { - return w.backend.TransactionCount(ctx, blockHash) -} -func (w *wemixSimulatedBackend) TransactionInBlock(ctx context.Context, blockHash common.Hash, index uint) (*types.Transaction, error) { - return w.backend.TransactionInBlock(ctx, blockHash, index) -} -func (w *wemixSimulatedBackend) SubscribeNewHead(ctx context.Context, ch chan<- *types.Header) (ethereum.Subscription, error) { - return w.backend.SubscribeNewHead(ctx, ch) -} -func (w *wemixSimulatedBackend) BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error) { - return w.backend.BalanceAt(ctx, account, blockNumber) -} -func (w *wemixSimulatedBackend) StorageAt(ctx context.Context, account common.Address, key common.Hash, blockNumber *big.Int) ([]byte, error) { - return w.backend.StorageAt(ctx, account, key, blockNumber) -} -func (w *wemixSimulatedBackend) CodeAt(ctx context.Context, account common.Address, blockNumber *big.Int) ([]byte, error) { - return w.backend.CodeAt(ctx, account, blockNumber) -} -func (w *wemixSimulatedBackend) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) { - return w.backend.NonceAt(ctx, account, blockNumber) -} -func (w *wemixSimulatedBackend) CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) { - return w.backend.CallContract(ctx, call, blockNumber) -} -func (w *wemixSimulatedBackend) EstimateGas(ctx context.Context, call ethereum.CallMsg) (uint64, error) { - return w.backend.EstimateGas(ctx, call) -} -func (w *wemixSimulatedBackend) SuggestGasPrice(ctx context.Context) (*big.Int, error) { - return w.backend.SuggestGasPrice(ctx) -} -func (w *wemixSimulatedBackend) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { - return w.backend.SuggestGasTipCap(ctx) -} -func (w *wemixSimulatedBackend) FilterLogs(ctx context.Context, q ethereum.FilterQuery) ([]types.Log, error) { - return w.backend.FilterLogs(ctx, q) -} -func (w *wemixSimulatedBackend) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) { - return w.backend.SubscribeFilterLogs(ctx, q, ch) -} -func (w *wemixSimulatedBackend) PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error) { - return w.backend.PendingCodeAt(ctx, account) -} -func (w *wemixSimulatedBackend) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) { - return w.backend.PendingNonceAt(ctx, account) -} -func (w *wemixSimulatedBackend) PendingCallContract(ctx context.Context, call ethereum.CallMsg) ([]byte, error) { - return w.backend.PendingCallContract(ctx, call) -} -func (w *wemixSimulatedBackend) TransactionByHash(ctx context.Context, txHash common.Hash) (tx *types.Transaction, isPending bool, err error) { - return w.backend.TransactionByHash(ctx, txHash) -} -func (w *wemixSimulatedBackend) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) { - receipt, err := w.backend.TransactionReceipt(ctx, txHash) - if err == ethereum.NotFound { - w.backend.Commit() - return w.TransactionReceipt(ctx, txHash) - } - return receipt, err -} -func (w *wemixSimulatedBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error { - return w.backend.SendTransaction(ctx, tx) -} -func (w *wemixSimulatedBackend) Commit() { - w.backend.Commit() -} - -func (w *wemixSimulatedBackend) PendingBalanceAt(ctx context.Context, account common.Address) (*big.Int, error) { - // return w.backend.PendingBalanceAt(ctx, account) - return nil, errors.New("PendingBalanceAt") -} -func (w *wemixSimulatedBackend) PendingStorageAt(ctx context.Context, account common.Address, key common.Hash) ([]byte, error) { - // return w.backend.PendingStorageAt(ctx, account, key) - return nil, errors.New("PendingStorageAt") -} -func (w *wemixSimulatedBackend) PendingTransactionCount(ctx context.Context) (uint, error) { - // return w.backend.PendingTransactionCount(ctx) - return 0, errors.New("PendingTransactionCount") -} diff --git a/wemix/bind/backends/wemix_simulated_test.go b/wemix/bind/backends/wemix_simulated_test.go deleted file mode 100644 index f4a358666584..000000000000 --- a/wemix/bind/backends/wemix_simulated_test.go +++ /dev/null @@ -1,175 +0,0 @@ -package backends_test - -import ( - "context" - "encoding/hex" - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" - gov "github.com/ethereum/go-ethereum/wemix/bind" - "github.com/ethereum/go-ethereum/wemix/bind/backends" - wemix_miner "github.com/ethereum/go-ethereum/wemix/miner" - "github.com/stretchr/testify/require" -) - -func TestWemixBackends(t *testing.T) { - key, err := crypto.GenerateKey() - require.NoError(t, err) - opts, err := bind.NewKeyedTransactorWithChainID(key, backends.ChainID) - require.NoError(t, err) - b, err := backends.NewWemixSimulatedBackend( - key, - t.TempDir(), - core.GenesisAlloc{ - opts.From: {Balance: new(big.Int).Mul(big.NewInt(256_000_000_000_000), big.NewInt(params.Ether))}, - }, - backends.SetLogLevel(2), - ) - if err != nil { - return - } - require.NotNil(t, b) - - defaultEnv := gov.DefaultInitEnvStorage - - require.True(t, defaultEnv.MAX_PRIORITY_FEE_PER_GAS.Cmp(wemix_miner.SuggestGasPrice()) == 0) - coinBase, err := wemix_miner.GetCoinbase(common.Big0) - require.NoError(t, err) - require.Equal(t, opts.From, coinBase) - - callOpts := new(bind.CallOpts) - contracts, err := gov.GetGovContractsByOwner(callOpts, b, opts.From) - require.NoError(t, err) - - got, err := contracts.EnvStorageImp.GetBallotDurationMax(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.BALLOT_DURATION_MAX.Cmp(got) == 0, "mismatch BALLOT_DURATION_MAX, got: %v, want: %v", got, defaultEnv.BALLOT_DURATION_MAX) - - got, err = contracts.EnvStorageImp.GetBallotDurationMin(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.BALLOT_DURATION_MIN.Cmp(got) == 0, "mismatch BALLOT_DURATION_MIN, got: %v, want: %v", got, defaultEnv.BALLOT_DURATION_MIN) - - got, err = contracts.EnvStorageImp.GetBlockCreationTime(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.BLOCK_CREATION_TIME.Cmp(got) == 0, "mismatch BLOCK_CREATION_TIME, got: %v, want: %v", got, defaultEnv.BLOCK_CREATION_TIME) - - got, err = contracts.EnvStorageImp.GetBlockRewardAmount(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.BLOCK_REWARD_AMOUNT.Cmp(got) == 0, "mismatch BLOCK_REWARD_AMOUNT, got: %v, want: %v", got, defaultEnv.BLOCK_REWARD_AMOUNT) - - blockRewardDistributionBlockProducer, - blockRewardDistributionStakingReward, blockRewardDistributionEcosystem, - blockRewardDistributionMaintenance, - err := contracts.EnvStorageImp.GetBlockRewardDistributionMethod(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER.Cmp(blockRewardDistributionBlockProducer) == 0, "mismatch BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER, got: %v, want: %v", blockRewardDistributionBlockProducer, defaultEnv.BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER) - require.Truef(t, defaultEnv.BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD.Cmp(blockRewardDistributionStakingReward) == 0, "mismatch BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD, got: %v, want: %v", blockRewardDistributionStakingReward, defaultEnv.BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD) - require.Truef(t, defaultEnv.BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM.Cmp(blockRewardDistributionEcosystem) == 0, "mismatch BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM, got: %v, want: %v", blockRewardDistributionEcosystem, defaultEnv.BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM) - require.Truef(t, defaultEnv.BLOCK_REWARD_DISTRIBUTION_MAINTENANCE.Cmp(blockRewardDistributionMaintenance) == 0, "mismatch BLOCK_REWARD_DISTRIBUTION_MAINTENANCE, got: %v, want: %v", blockRewardDistributionMaintenance, defaultEnv.BLOCK_REWARD_DISTRIBUTION_MAINTENANCE) - - got, err = contracts.EnvStorageImp.GetBlocksPer(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.BLOCKS_PER.Cmp(got) == 0, "mismatch BLOCKS_PER, got: %v, want: %v", got, defaultEnv.BLOCKS_PER) - - got, err = contracts.EnvStorageImp.GetMaxBaseFee(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.MAX_BASE_FEE.Cmp(got) == 0, "mismatch MAX_BASE_FEE, got: %v, want: %v", got, defaultEnv.MAX_BASE_FEE) - - got, err = contracts.EnvStorageImp.GetMaxIdleBlockInterval(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.MAX_IDLE_BLOCK_INTERVAL.Cmp(got) == 0, "mismatch MAX_IDLE_BLOCK_INTERVAL, got: %v, want: %v", got, defaultEnv.MAX_IDLE_BLOCK_INTERVAL) - - got, err = contracts.EnvStorageImp.GetMaxPriorityFeePerGas(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.MAX_PRIORITY_FEE_PER_GAS.Cmp(got) == 0, "mismatch MAX_PRIORITY_FEE_PER_GAS, got: %v, want: %v", got, defaultEnv.MAX_PRIORITY_FEE_PER_GAS) - - got, err = contracts.EnvStorageImp.GetStakingMax(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.STAKING_MAX.Cmp(got) == 0, "mismatch STAKING_MAX, got: %v, want: %v", got, defaultEnv.STAKING_MAX) - - got, err = contracts.EnvStorageImp.GetStakingMin(callOpts) - require.NoError(t, err) - require.Truef(t, defaultEnv.STAKING_MIN.Cmp(got) == 0, "mismatch STAKING_MIN, got: %v, want: %v", got, defaultEnv.STAKING_MIN) - - getNode, err := contracts.GovImp.GetNode(callOpts, common.Big1) - require.NoError(t, err) - t.Log( - "\n Name:", string(getNode.Name), - "\n Enode:", hex.EncodeToString(getNode.Enode), - "\n Ip:", string(getNode.Ip), - "\n Port:", getNode.Port, - ) - newVoterKey, err := crypto.GenerateKey() - require.NoError(t, err) - newVoter := crypto.PubkeyToAddress(newVoterKey.PublicKey) - - LOCK_AMOUNT, err := contracts.EnvStorageImp.GetStakingMax(callOpts) - require.NoError(t, err) - - tx, err := contracts.GovImp.AddProposalToChangeMember(opts, gov.GovImpMemberInfo{ - Staker: opts.From, - Voter: newVoter, - Reward: opts.From, - Name: getNode.Name, - Enode: getNode.Enode, - Ip: getNode.Ip, - Port: getNode.Port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - }, opts.From, common.Big0, common.Big0) - require.NoError(t, err) - - receipt, err := bind.WaitMined(context.Background(), b, tx) - require.NoError(t, err) - require.Equal(t, types.ReceiptStatusSuccessful, receipt.Status) - - inVoting, err := contracts.GovImp.GetBallotInVoting(callOpts) - require.NoError(t, err) - require.True(t, inVoting.Sign() == 0) - - member, err := contracts.GovImp.GetMember(callOpts, common.Big1) - require.NoError(t, err) - require.Equal(t, opts.From, member) - - voter, err := contracts.GovImp.GetVoter(callOpts, common.Big1) - require.NoError(t, err) - require.Equal(t, newVoter, voter) - - newReward, err := contracts.GovImp.GetReward(callOpts, common.Big1) - require.NoError(t, err) - require.Equal(t, opts.From, newReward) - - newHead := make(chan *types.Header) - sub, err := b.SubscribeNewHead(context.Background(), newHead) - require.NoError(t, err) - defer sub.Unsubscribe() - - ticker := time.NewTicker(10e9) - var headNumber *big.Int = nil -loop: - for { - b.Commit() - select { - case head := <-newHead: - if headNumber == nil { - headNumber = head.Number - } else { - require.Equal(t, new(big.Int).Add(headNumber, common.Big1), head.Number) - headNumber = head.Number - } - case err := <-sub.Err(): - require.NoError(t, err) - case <-ticker.C: - break loop - } - } - t.Log("end") -} diff --git a/wemix/bind/const.go b/wemix/bind/const.go deleted file mode 100644 index 8943327f2335..000000000000 --- a/wemix/bind/const.go +++ /dev/null @@ -1,28 +0,0 @@ -package gov - -const ( - REGISTRY = "Registry" - GOV = "Gov" - GOV_IMP = "GovImp" - NCPEXIT = "NCPExit" - NCPEXIT_IMP = "NCPExitImp" - STAKING = "Staking" - STAKING_IMP = "StakingImp" - BALLOTSTORAGE = "BallotStorage" - BALLOTSTORAGE_IMP = "BallotStorageImp" - ENVSTORAGE = "EnvStorage" - ENVSTORAGE_IMP = "EnvStorageImp" -) - -const ( - DOMAIN_Gov = "GovernanceContract" - DOMAIN_NCPExit = "NCPExit" - DOMAIN_Staking = "Staking" - DOMAIN_BallotStorage = "BallotStorage" - DOMAIN_EnvStorage = "EnvStorage" - - DOMAIN_StakingReward = "StakingReward" - DOMAIN_Ecosystem = "Ecosystem" - DOMAIN_Maintenance = "Maintenance" - DOMAIN_FeeCollector = "FeeCollector" -) diff --git a/wemix/bind/gen_ballotStorage_abi.go b/wemix/bind/gen_ballotStorage_abi.go deleted file mode 100644 index 4f1f77dea49f..000000000000 --- a/wemix/bind/gen_ballotStorage_abi.go +++ /dev/null @@ -1,4381 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gov - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// BallotStorageMetaData contains all meta data concerning the BallotStorage contract. -var BallotStorageMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "5c60da1b": "implementation()", - }, - Bin: "0x608060405234801561001057600080fd5b5060405161077238038061077283398101604081905261002f91610326565b604080516020810190915260008152819061006b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61034f565b60008051602061072b8339815191521461008757610087610374565b6100938282600061009b565b505050610405565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b61008b1760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610136838360405180606001604052806027815260200161074b602791396101fd565b9392505050565b610150816102db60201b6100b71760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061072b83398151915260001b6102ea60201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102655760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161028091906103b6565b600060405180830381855af49150503d80600081146102bb576040519150601f19603f3d011682016040523d82523d6000602084013e6102c0565b606091505b5090925090506102d18282866102ed565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102fc575081610136565b82511561030c5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103d2565b60006020828403121561033857600080fd5b81516001600160a01b038116811461013657600080fd5b60008282101561036f57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b60005b838110156103a557818101518382015260200161038d565b838111156100ca5750506000910152565b600082516103c881846020870161038a565b9190910192915050565b60208152600082518060208401526103f181604085016020870161038a565b601f01601f19169190910160400192915050565b610317806104146000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102bb60279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b60606001600160a01b0384163b61018d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a8919061026b565b600060405180830381855af49150503d80600081146101e3576040519150601f19603f3d011682016040523d82523d6000602084013e6101e8565b606091505b50915091506101f8828286610202565b9695505050505050565b606083156102115750816100b0565b8251156102215782518084602001fd5b8160405162461bcd60e51b81526004016101849190610287565b60005b8381101561025657818101518382015260200161023e565b83811115610265576000848401525b50505050565b6000825161027d81846020870161023b565b9190910192915050565b60208152600082518060208401526102a681604085016020870161023b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122026a0c3bf8d61795fa77c2e5c0518466767e28fbd375e5c37c58704270cbb48b364736f6c634300080e0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", -} - -// BallotStorageABI is the input ABI used to generate the binding from. -// Deprecated: Use BallotStorageMetaData.ABI instead. -var BallotStorageABI = BallotStorageMetaData.ABI - -// Deprecated: Use BallotStorageMetaData.Sigs instead. -// BallotStorageFuncSigs maps the 4-byte function signature to its string representation. -var BallotStorageFuncSigs = BallotStorageMetaData.Sigs - -// BallotStorageBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use BallotStorageMetaData.Bin instead. -var BallotStorageBin = BallotStorageMetaData.Bin - -// DeployBallotStorage deploys a new Ethereum contract, binding an instance of BallotStorage to it. -func DeployBallotStorage(auth *bind.TransactOpts, backend bind.ContractBackend, _imp common.Address) (common.Address, *types.Transaction, *BallotStorage, error) { - parsed, err := BallotStorageMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BallotStorageBin), backend, _imp) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &BallotStorage{BallotStorageCaller: BallotStorageCaller{contract: contract}, BallotStorageTransactor: BallotStorageTransactor{contract: contract}, BallotStorageFilterer: BallotStorageFilterer{contract: contract}}, nil -} - -// BallotStorage is an auto generated Go binding around an Ethereum contract. -type BallotStorage struct { - BallotStorageCaller // Read-only binding to the contract - BallotStorageTransactor // Write-only binding to the contract - BallotStorageFilterer // Log filterer for contract events -} - -// BallotStorageCaller is an auto generated read-only Go binding around an Ethereum contract. -type BallotStorageCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// BallotStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. -type BallotStorageTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// BallotStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type BallotStorageFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// BallotStorageSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type BallotStorageSession struct { - Contract *BallotStorage // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// BallotStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type BallotStorageCallerSession struct { - Contract *BallotStorageCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// BallotStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type BallotStorageTransactorSession struct { - Contract *BallotStorageTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// BallotStorageRaw is an auto generated low-level Go binding around an Ethereum contract. -type BallotStorageRaw struct { - Contract *BallotStorage // Generic contract binding to access the raw methods on -} - -// BallotStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type BallotStorageCallerRaw struct { - Contract *BallotStorageCaller // Generic read-only contract binding to access the raw methods on -} - -// BallotStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type BallotStorageTransactorRaw struct { - Contract *BallotStorageTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewBallotStorage creates a new instance of BallotStorage, bound to a specific deployed contract. -func NewBallotStorage(address common.Address, backend bind.ContractBackend) (*BallotStorage, error) { - contract, err := bindBallotStorage(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &BallotStorage{BallotStorageCaller: BallotStorageCaller{contract: contract}, BallotStorageTransactor: BallotStorageTransactor{contract: contract}, BallotStorageFilterer: BallotStorageFilterer{contract: contract}}, nil -} - -// NewBallotStorageCaller creates a new read-only instance of BallotStorage, bound to a specific deployed contract. -func NewBallotStorageCaller(address common.Address, caller bind.ContractCaller) (*BallotStorageCaller, error) { - contract, err := bindBallotStorage(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &BallotStorageCaller{contract: contract}, nil -} - -// NewBallotStorageTransactor creates a new write-only instance of BallotStorage, bound to a specific deployed contract. -func NewBallotStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*BallotStorageTransactor, error) { - contract, err := bindBallotStorage(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &BallotStorageTransactor{contract: contract}, nil -} - -// NewBallotStorageFilterer creates a new log filterer instance of BallotStorage, bound to a specific deployed contract. -func NewBallotStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*BallotStorageFilterer, error) { - contract, err := bindBallotStorage(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &BallotStorageFilterer{contract: contract}, nil -} - -// bindBallotStorage binds a generic wrapper to an already deployed contract. -func bindBallotStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(BallotStorageABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_BallotStorage *BallotStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BallotStorage.Contract.BallotStorageCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_BallotStorage *BallotStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BallotStorage.Contract.BallotStorageTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_BallotStorage *BallotStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BallotStorage.Contract.BallotStorageTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_BallotStorage *BallotStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BallotStorage.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_BallotStorage *BallotStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BallotStorage.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_BallotStorage *BallotStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BallotStorage.Contract.contract.Transact(opts, method, params...) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_BallotStorage *BallotStorageCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BallotStorage.contract.Call(opts, &out, "implementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_BallotStorage *BallotStorageSession) Implementation() (common.Address, error) { - return _BallotStorage.Contract.Implementation(&_BallotStorage.CallOpts) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_BallotStorage *BallotStorageCallerSession) Implementation() (common.Address, error) { - return _BallotStorage.Contract.Implementation(&_BallotStorage.CallOpts) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_BallotStorage *BallotStorageTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _BallotStorage.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_BallotStorage *BallotStorageSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _BallotStorage.Contract.Fallback(&_BallotStorage.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_BallotStorage *BallotStorageTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _BallotStorage.Contract.Fallback(&_BallotStorage.TransactOpts, calldata) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_BallotStorage *BallotStorageTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BallotStorage.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_BallotStorage *BallotStorageSession) Receive() (*types.Transaction, error) { - return _BallotStorage.Contract.Receive(&_BallotStorage.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_BallotStorage *BallotStorageTransactorSession) Receive() (*types.Transaction, error) { - return _BallotStorage.Contract.Receive(&_BallotStorage.TransactOpts) -} - -// BallotStorageAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the BallotStorage contract. -type BallotStorageAdminChangedIterator struct { - Event *BallotStorageAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageAdminChanged represents a AdminChanged event raised by the BallotStorage contract. -type BallotStorageAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_BallotStorage *BallotStorageFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*BallotStorageAdminChangedIterator, error) { - - logs, sub, err := _BallotStorage.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &BallotStorageAdminChangedIterator{contract: _BallotStorage.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_BallotStorage *BallotStorageFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *BallotStorageAdminChanged) (event.Subscription, error) { - - logs, sub, err := _BallotStorage.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageAdminChanged) - if err := _BallotStorage.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_BallotStorage *BallotStorageFilterer) ParseAdminChanged(log types.Log) (*BallotStorageAdminChanged, error) { - event := new(BallotStorageAdminChanged) - if err := _BallotStorage.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the BallotStorage contract. -type BallotStorageBeaconUpgradedIterator struct { - Event *BallotStorageBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageBeaconUpgraded represents a BeaconUpgraded event raised by the BallotStorage contract. -type BallotStorageBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_BallotStorage *BallotStorageFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*BallotStorageBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _BallotStorage.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &BallotStorageBeaconUpgradedIterator{contract: _BallotStorage.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_BallotStorage *BallotStorageFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *BallotStorageBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _BallotStorage.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageBeaconUpgraded) - if err := _BallotStorage.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_BallotStorage *BallotStorageFilterer) ParseBeaconUpgraded(log types.Log) (*BallotStorageBeaconUpgraded, error) { - event := new(BallotStorageBeaconUpgraded) - if err := _BallotStorage.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the BallotStorage contract. -type BallotStorageUpgradedIterator struct { - Event *BallotStorageUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageUpgraded represents a Upgraded event raised by the BallotStorage contract. -type BallotStorageUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_BallotStorage *BallotStorageFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*BallotStorageUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _BallotStorage.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &BallotStorageUpgradedIterator{contract: _BallotStorage.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_BallotStorage *BallotStorageFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *BallotStorageUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _BallotStorage.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageUpgraded) - if err := _BallotStorage.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_BallotStorage *BallotStorageFilterer) ParseUpgraded(log types.Log) (*BallotStorageUpgraded, error) { - event := new(BallotStorageUpgraded) - if err := _BallotStorage.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpMetaData contains all meta data concerning the BallotStorageImp contract. -var BallotStorageImpMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"}],\"name\":\"BallotCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotType\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"BallotCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"state\",\"type\":\"uint256\"}],\"name\":\"BallotFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"BallotStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"updatedBy\",\"type\":\"address\"}],\"name\":\"BallotUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"SetPrevBallotStorage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SetRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"voteid\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decision\",\"type\":\"uint256\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BALLOT_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENV_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOV_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_POOL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"}],\"name\":\"cancelBallot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ballotType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newGovernanceAddress\",\"type\":\"address\"}],\"name\":\"createBallotForAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ballotType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"createBallotForExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unlockAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slashing\",\"type\":\"uint256\"}],\"name\":\"createBallotForExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ballotType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oldStakerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newStakerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newVoterAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newRewardAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_newNodeName\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_newNodeId\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_newNodeIp\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_newNodePort\",\"type\":\"uint256\"}],\"name\":\"createBallotForMember\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ballotType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_creator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_envVariableName\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_envVariableType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_envVariableValue\",\"type\":\"bytes\"}],\"name\":\"createBallotForVariable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_voteId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_decision\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_power\",\"type\":\"uint256\"}],\"name\":\"createVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ballotState\",\"type\":\"uint256\"}],\"name\":\"finalizeBallot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newGovernanceAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotBasic\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ballotType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"totalVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"powerOfAccepts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"powerOfRejects\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"state\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isFinalized\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBallotCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotExecute\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotForExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"unlockAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashing\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"oldStakerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newStakerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newVoterAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRewardAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newNodeName\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"newNodeId\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"newNodeIp\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"newNodePort\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"state\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isFinalized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotVariable\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"envVariableName\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"envVariableType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"envVariableValue\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBallotVotingInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalVoters\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"powerOfAccepts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"powerOfRejects\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVotingDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinVotingDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreviousBallotStorage\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_voteId\",\"type\":\"uint256\"}],\"name\":\"getVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"voteId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"decision\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"power\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint56\",\"name\":\"_ballotId\",\"type\":\"uint56\"},{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"hasAlreadyVoted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reg\",\"outputs\":[{\"internalType\":\"contractIRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setPreviousBallotStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endTime\",\"type\":\"uint256\"}],\"name\":\"startBallot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"updateBallotDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lockAmount\",\"type\":\"uint256\"}],\"name\":\"updateBallotMemberLockAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ballotId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_memo\",\"type\":\"bytes\"}],\"name\":\"updateBallotMemo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImp\",\"type\":\"address\"}],\"name\":\"upgradeBallotStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Sigs: map[string]string{ - "9986e4b9": "BALLOT_STORAGE_NAME()", - "34125c84": "ECOSYSTEM_NAME()", - "7bf46530": "ENV_STORAGE_NAME()", - "6c78d2cf": "GOV_NAME()", - "4bd1ed76": "MAINTENANCE_NAME()", - "2f40992e": "REWARD_POOL_NAME()", - "1e0cba0d": "STAKING_NAME()", - "5a731cca": "STAKING_REWARD_NAME()", - "155ca224": "cancelBallot(uint256)", - "0a3a63fe": "createBallotForAddress(uint256,uint256,uint256,address,address)", - "aea83e40": "createBallotForExecute(uint256,uint256,uint256,address,address,uint256,bytes)", - "22640859": "createBallotForExit(uint256,uint256,uint256)", - "daacbb95": "createBallotForMember(uint256,uint256,uint256,address,address,address,address,address,bytes,bytes,bytes,uint256)", - "4a57823e": "createBallotForVariable(uint256,uint256,uint256,address,bytes32,uint256,bytes)", - "96462b9c": "createVote(uint256,uint256,address,uint256,uint256)", - "a91e59ba": "finalizeBallot(uint256,uint256)", - "7efa9ae3": "getBallotAddress(uint256)", - "02b385fb": "getBallotBasic(uint256)", - "b4741495": "getBallotCount()", - "060e6a99": "getBallotExecute(uint256)", - "8c7be692": "getBallotForExit(uint256)", - "73df4e01": "getBallotMember(uint256)", - "09970688": "getBallotPeriod(uint256)", - "688ca5b2": "getBallotState(uint256)", - "1d940da2": "getBallotVariable(uint256)", - "56ba988e": "getBallotVotingInfo(uint256)", - "ce04b9d4": "getMaxVotingDuration()", - "1c150171": "getMinVotingDuration()", - "b23c676c": "getPreviousBallotStorage()", - "557ed1ba": "getTime()", - "5a55c1f0": "getVote(uint256)", - "f680e555": "hasAlreadyVoted(uint56,address)", - "c4d66de8": "initialize(address)", - "6c57f5a9": "isDisabled()", - "8da5cb5b": "owner()", - "52d1902d": "proxiableUUID()", - "738fdd1a": "reg()", - "715018a6": "renounceOwnership()", - "2a74f38c": "setPreviousBallotStorage(address)", - "a91ee0dc": "setRegistry(address)", - "c0b6f186": "startBallot(uint256,uint256,uint256)", - "f2fde38b": "transferOwnership(address)", - "656bc633": "updateBallotDuration(uint256,uint256)", - "72d0ec92": "updateBallotMemberLockAmount(uint256,uint256)", - "bce0dbc1": "updateBallotMemo(uint256,bytes)", - "f51a88e2": "upgradeBallotStorage(address)", - "3659cfe6": "upgradeTo(address)", - "4f1ef286": "upgradeToAndCall(address,bytes)", - }, - Bin: "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516147e26200012060003960008181611296015281816112d60152818161147c015281816114bc015261154f01526147e26000f3fe6080604052600436106102935760003560e01c80636c78d2cf1161015a578063a91ee0dc116100c1578063c4d66de81161007a578063c4d66de8146108d7578063ce04b9d4146108f7578063daacbb951461090c578063f2fde38b1461092c578063f51a88e21461094c578063f680e5551461096c57600080fd5b8063a91ee0dc14610824578063aea83e4014610844578063b23c676c14610864578063b474149514610882578063bce0dbc114610897578063c0b6f186146108b757600080fd5b80637efa9ae3116101135780637efa9ae31461071f5780638c7be692146107585780638da5cb5b146107a257806396462b9c146107c05780639986e4b9146107e0578063a91e59ba1461080457600080fd5b80636c78d2cf14610633578063715018a61461065c57806372d0ec9214610671578063738fdd1a1461069157806373df4e01146106c95780637bf46530146106fe57600080fd5b80633659cfe6116101fe57806356ba988e116101b757806356ba988e146105125780635a55c1f0146105325780635a731cca1461058d578063656bc633146105b1578063688ca5b2146105d15780636c57f5a91461060e57600080fd5b80633659cfe6146104755780634a57823e146104955780634bd1ed76146104b55780634f1ef286146104d757806352d1902d146104ea578063557ed1ba146104ff57600080fd5b80631d940da2116102505780631d940da2146103a75780631e0cba0d146103d657806322640859146103f45780632a74f38c146104145780632f40992e1461043457806334125c841461045557600080fd5b806302b385fb14610298578063060e6a99146102d857806309970688146103075780630a3a63fe14610342578063155ca224146103705780631c15017114610392575b600080fd5b3480156102a457600080fd5b506102b86102b3366004613d6f565b6109bd565b6040516102cf9b9a99989796959493929190613de0565b60405180910390f35b3480156102e457600080fd5b506102f86102f3366004613d6f565b610b88565b6040516102cf93929190613e4f565b34801561031357600080fd5b50610327610322366004613d6f565b610c72565b604080519384526020840192909252908201526060016102cf565b34801561034e57600080fd5b5061036261035d366004613ea4565b610dd2565b6040519081526020016102cf565b34801561037c57600080fd5b5061039061038b366004613d6f565b610eea565b005b34801561039e57600080fd5b5061036261104b565b3480156103b357600080fd5b506103c76103c2366004613d6f565b6110bb565b6040516102cf93929190613efa565b3480156103e257600080fd5b50610362665374616b696e6760c81b81565b34801561040057600080fd5b5061039061040f366004613f19565b611173565b34801561042057600080fd5b5061039061042f366004613f45565b6111f2565b34801561044057600080fd5b506103626914995dd85c99141bdbdb60b21b81565b34801561046157600080fd5b506103626845636f73797374656d60b81b81565b34801561048157600080fd5b50610390610490366004613f45565b61128c565b3480156104a157600080fd5b506103626104b0366004614005565b61136b565b3480156104c157600080fd5b506103626a4d61696e74656e616e636560a81b81565b6103906104e5366004614085565b611472565b3480156104f657600080fd5b50610362611542565b34801561050b57600080fd5b5042610362565b34801561051e57600080fd5b5061032761052d366004613d6f565b6115f5565b34801561053e57600080fd5b5061055261054d366004613d6f565b611746565b6040805196875260208701959095526001600160a01b03909316938501939093526060840152608083019190915260a082015260c0016102cf565b34801561059957600080fd5b506103626c14dd185ada5b99d4995dd85c99609a1b81565b3480156105bd57600080fd5b506103906105cc3660046140d5565b611814565b3480156105dd57600080fd5b506105f16105ec366004613d6f565b611a27565b6040805193845260208401929092521515908201526060016102cf565b34801561061a57600080fd5b50610623611b7d565b60405190151581526020016102cf565b34801561063f57600080fd5b506103627111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b34801561066857600080fd5b50610390611ba1565b34801561067d57600080fd5b5061039061068c3660046140d5565b611bb5565b34801561069d57600080fd5b506065546106b1906001600160a01b031681565b6040516001600160a01b0390911681526020016102cf565b3480156106d557600080fd5b506106e96106e4366004613d6f565b611d4f565b6040516102cf999897969594939291906140f7565b34801561070a57600080fd5b5061036269456e7653746f7261676560b01b81565b34801561072b57600080fd5b506106b161073a366004613d6f565b6000908152606860205260409020600101546001600160a01b031690565b34801561076457600080fd5b5061078d610773366004613d6f565b6000908152606e6020526040902080546001909101549091565b604080519283526020830191909152016102cf565b3480156107ae57600080fd5b506033546001600160a01b03166106b1565b3480156107cc57600080fd5b506103906107db366004614176565b611f5c565b3480156107ec57600080fd5b506103626c42616c6c6f7453746f7261676560981b81565b34801561081057600080fd5b5061039061081f3660046140d5565b612247565b34801561083057600080fd5b5061039061083f366004613f45565b6123c5565b34801561085057600080fd5b5061039061085f3660046141bf565b61246d565b34801561087057600080fd5b50606c546001600160a01b03166106b1565b34801561088e57600080fd5b50606d54610362565b3480156108a357600080fd5b506103906108b236600461422d565b6125c1565b3480156108c357600080fd5b506103906108d2366004613f19565b612706565b3480156108e357600080fd5b506103906108f2366004613f45565b6128e6565b34801561090357600080fd5b50610362612a00565b34801561091857600080fd5b5061039061092736600461425e565b612a47565b34801561093857600080fd5b50610390610947366004613f45565b612d57565b34801561095857600080fd5b50610390610967366004613f45565b612dcd565b34801561097857600080fd5b50610623610987366004614378565b66ffffffffffffff82166000908152606b602090815260408083206001600160a01b038516845290915290205460ff1692915050565b60008060008060606000806000806000806000606660008e815260200190815260200160002060405180610180016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600582018054610a56906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a82906143bd565b8015610acf5780601f10610aa457610100808354040283529160200191610acf565b820191906000526020600020905b815481529060010190602001808311610ab257829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e00151955080610100015194508061012001519350806101400151925080610160015191505091939597999b90929496989a50565b6000818152606f6020908152604080832081516060818101845282546001600160a01b0316825260018301549482019490945260028201805486959486949290840191610bd4906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906143bd565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050509190925250508151602083015160409093015190989297509550909350505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a0840191610ce3906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0f906143bd565b8015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519350806040015192508061016001519150509193909250565b600033610ddd612ded565b6001600160a01b031614610e0c5760405162461bcd60e51b8152600401610e03906143f7565b60405180910390fd5b610e14612e0d565b6001600160a01b0316306001600160a01b031614610e445760405162461bcd60e51b8152600401610e039061441e565b60048514610e645760405162461bcd60e51b8152600401610e0390614443565b6001600160a01b038216610e8a5760405162461bcd60e51b8152600401610e0390614470565b610e9686868686612e28565b506040805180820182528681526001600160a01b0392831660208083019182526000898152606890915292909220905181559051600190910180546001600160a01b03191691909216179055509192915050565b8033610ef4612ded565b6001600160a01b03161480610f2257506000818152606660205260409020600401546001600160a01b031633145b610f3e5760405162461bcd60e51b8152600401610e03906143f7565b610f46612e0d565b6001600160a01b0316306001600160a01b031614610f765760405162461bcd60e51b8152600401610e039061441e565b6000828152606660205260409020548214610fa35760405162461bcd60e51b8152600401610e039061449b565b6000828152606660205260409020600a015460ff1615610fd55760405162461bcd60e51b8152600401610e03906144c7565b6001600083815260666020526040902060090154146110065760405162461bcd60e51b8152600401610e03906144f2565b60008281526066602052604090206005600982015560405183907fd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc90600090a2505050565b60006110556130e3565b6001600160a01b03166333be496e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b6919061451b565b905090565b6000818152606960205260409020600181015460028201546003830180549293919260609291906110eb906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611117906143bd565b80156111645780601f1061113957610100808354040283529160200191611164565b820191906000526020600020905b81548152906001019060200180831161114757829003601f168201915b50505050509150509193909250565b3361117c612ded565b6001600160a01b0316146111a25760405162461bcd60e51b8152600401610e03906143f7565b6111aa612e0d565b6001600160a01b0316306001600160a01b0316146111da5760405162461bcd60e51b8152600401610e039061441e565b6000928352606e602052604090922090815560010155565b6111fa6130fb565b6001600160a01b0381166112425760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610e03565b606c80546001600160a01b0319166001600160a01b0383169081179091556040517f3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb390600090a250565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112d45760405162461bcd60e51b8152600401610e0390614534565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661131d600080516020614766833981519152546001600160a01b031690565b6001600160a01b0316146113435760405162461bcd60e51b8152600401610e0390614580565b61134c81613155565b604080516000808252602082019092526113689183919061315d565b50565b600033611376612ded565b6001600160a01b03161461139c5760405162461bcd60e51b8152600401610e03906143f7565b6113a4612e0d565b6001600160a01b0316306001600160a01b0316146113d45760405162461bcd60e51b8152600401610e039061441e565b6113df8785846132cd565b6113fb5760405162461bcd60e51b8152600401610e0390614470565b61140788888888612e28565b6040805160808101825289815260208082018781528284018781526060840187815260008e81526069855295909520845181559151600183015551600282015592518051929384939092611462926003850192910190613cd6565b50999a9950505050505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114ba5760405162461bcd60e51b8152600401610e0390614534565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611503600080516020614766833981519152546001600160a01b031690565b6001600160a01b0316146115295760405162461bcd60e51b8152600401610e0390614580565b61153282613155565b61153e8282600161315d565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115e25760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610e03565b5060008051602061476683398151915290565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a0840191611666906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611692906143bd565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b505050918352505060068201546020820152600782015460408201526008820154606082015260098201546080820152600a82015460ff16151560a0820152600b9091015460c09182015281015160e0820151610100909201519097919650945092505050565b6000818152606a60205260408120548190819081908190819087146117a25760405162461bcd60e51b81526020600482015260126024820152711b9bdd08195e1a5cdd1959081d9bdd19525960721b6044820152606401610e03565b50505060009384525050606a6020908152604092839020835160c0810185528154808252600183015493820184905260028301546001600160a01b031695820186905260038301546060830181905260048401546080840181905260059094015460a090930183905290969395945092565b813361181e612ded565b6001600160a01b0316148061184c57506000818152606660205260409020600401546001600160a01b031633145b6118685760405162461bcd60e51b8152600401610e03906143f7565b611870612e0d565b6001600160a01b0316306001600160a01b0316146118a05760405162461bcd60e51b8152600401610e039061441e565b81806118aa61104b565b11156118f85760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610e03565b611900612a00565b81111561194f5760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610e03565b600084815260666020526040902054841461197c5760405162461bcd60e51b8152600401610e039061449b565b6000848152606660205260409020600a015460ff16156119ae5760405162461bcd60e51b8152600401610e03906144c7565b6001600085815260666020526040902060090154146119df5760405162461bcd60e51b8152600401610e03906144f2565b600084815260666020526040808220600b810186905590519091339187917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a35050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a0840191611a98906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac4906143bd565b8015611b115780601f10611ae657610100808354040283529160200191611b11565b820191906000526020600020905b815481529060010190602001808311611af457829003601f168201915b50505091835250506006820154602082015260078201546040820152600882015460608083019190915260098301546080830152600a83015460ff16151560a0830152600b9092015460c090910152810151610120820151610140909201519097919650945092505050565b6000611b87612e0d565b6001600160a01b0316306001600160a01b03161415905090565b611ba96130fb565b611bb360006133ad565b565b33611bbe612ded565b6001600160a01b031614611be45760405162461bcd60e51b8152600401610e03906143f7565b611bec612e0d565b6001600160a01b0316306001600160a01b031614611c1c5760405162461bcd60e51b8152600401610e039061441e565b6000828152606660205260409020548214611c495760405162461bcd60e51b8152600401610e039061449b565b6000828152606760205260409020548214611ca65760405162461bcd60e51b815260206004820152601860248201527f6e6f7420657869737465642042616c6c6f744d656d62657200000000000000006044820152606401610e03565b6000828152606660205260409020600a015460ff1615611cd85760405162461bcd60e51b8152600401610e03906144c7565b600160008381526066602052604090206009015414611d095760405162461bcd60e51b8152600401610e03906144f2565b6000828152606760205260408082206009810184905590519091339185917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a3505050565b600081815260676020526040812060018101546002820154600383015460048401546005850180546001600160a01b039586169794861696938616959092169360609384938493839291611da2906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611dce906143bd565b8015611e1b5780601f10611df057610100808354040283529160200191611e1b565b820191906000526020600020905b815481529060010190602001808311611dfe57829003601f168201915b50505050509550806006018054611e31906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d906143bd565b8015611eaa5780601f10611e7f57610100808354040283529160200191611eaa565b820191906000526020600020905b815481529060010190602001808311611e8d57829003601f168201915b50505050509450806007018054611ec0906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611eec906143bd565b8015611f395780601f10611f0e57610100808354040283529160200191611f39565b820191906000526020600020905b815481529060010190602001808311611f1c57829003601f168201915b505050505093508060080154925080600901549150509193959799909294969850565b33611f65612ded565b6001600160a01b031614611f8b5760405162461bcd60e51b8152600401610e03906143f7565b611f93612e0d565b6001600160a01b0316306001600160a01b031614611fc35760405162461bcd60e51b8152600401610e039061441e565b6001821480611fd25750600282145b6120115760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610e03565b600084815260666020526040902054841461203e5760405162461bcd60e51b8152600401610e039061449b565b6000858152606a60205260409020548590036120955760405162461bcd60e51b8152602060048201526016602482015275185b1c9958591e48195e1a5cdd1959081d9bdd19525960521b6044820152606401610e03565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156120f85760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610e03565b6002600085815260666020526040902060090154146121505760405162461bcd60e51b81526020600482015260146024820152734e6f7420496e50726f677265737320537461746560601b6044820152606401610e03565b6040518060c00160405280868152602001858152602001846001600160a01b031681526020018381526020018281526020016121894290565b90526000868152606a602090815260409182902083518155908301516001820155908201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a0909101516005909101556121fb848484846133ff565b826001600160a01b031684867f41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d3676068560405161223891815260200190565b60405180910390a45050505050565b33612250612ded565b6001600160a01b0316146122765760405162461bcd60e51b8152600401610e03906143f7565b61227e612e0d565b6001600160a01b0316306001600160a01b0316146122ae5760405162461bcd60e51b8152600401610e039061441e565b60008281526066602052604090205482146122db5760405162461bcd60e51b8152600401610e039061449b565b6000828152606660205260409020600a015460ff161561230d5760405162461bcd60e51b8152600401610e03906144c7565b600381148061231c5750600481145b61235f5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642042616c6c6f7420537461746560601b6044820152606401610e03565b6000828152606660205260409081902060098101839055600a8101805460ff19166001179055905183907fdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f906123b89085815260200190565b60405180910390a2505050565b6123cd6130fb565b6001600160a01b0381166124235760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610e03565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b33612476612ded565b6001600160a01b03161461249c5760405162461bcd60e51b8152600401610e03906143f7565b6124a4612e0d565b6001600160a01b0316306001600160a01b0316146124d45760405162461bcd60e51b8152600401610e039061441e565b600686146124f45760405162461bcd60e51b8152600401610e0390614443565b6001600160a01b0383166125435760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420746172676574206164647265737360501b6044820152606401610e03565b61254f87878787612e28565b604080516060810182526001600160a01b038581168252602080830186815283850186815260008d8152606f845295909520845181546001600160a01b031916941693909317835551600183015592518051929391926125b59260028501920190613cd6565b50505050505050505050565b81336125cb612ded565b6001600160a01b031614806125f957506000818152606660205260409020600401546001600160a01b031633145b6126155760405162461bcd60e51b8152600401610e03906143f7565b61261d612e0d565b6001600160a01b0316306001600160a01b03161461264d5760405162461bcd60e51b8152600401610e039061441e565b600083815260666020526040902054831461267a5760405162461bcd60e51b8152600401610e039061449b565b6000838152606660205260409020600a015460ff16156126ac5760405162461bcd60e51b8152600401610e03906144c7565b6000838152606660209081526040909120835190916126d2916005840191860190613cd6565b50604051339085907ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a90600090a350505050565b3361270f612ded565b6001600160a01b0316146127355760405162461bcd60e51b8152600401610e03906143f7565b61273d612e0d565b6001600160a01b0316306001600160a01b03161461276d5760405162461bcd60e51b8152600401610e039061441e565b818160008211801561277f5750600081115b6127bf5760405162461bcd60e51b815260206004820152601160248201527007374617274206f7220656e64206973203607c1b6044820152606401610e03565b8181116127fd5760405162461bcd60e51b815260206004820152600c60248201526b1cdd185c9d080f8f48195b9960a21b6044820152606401610e03565b600085815260666020526040902054851461282a5760405162461bcd60e51b8152600401610e039061449b565b6000858152606660205260409020600a015460ff161561285c5760405162461bcd60e51b8152600401610e03906144c7565b60016000868152606660205260409020600901541461288d5760405162461bcd60e51b8152600401610e03906144f2565b600085815260666020526040902060018101859055600280820185905560098201556040518490869088907fd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c590600090a4505050505050565b600054610100900460ff16158080156129065750600054600160ff909116105b806129205750303b158015612920575060005460ff166001145b6129835760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e03565b6000805460ff1916600117905580156129a6576000805461ff0019166101001790555b6129ae613567565b6129b7826123c5565b801561153e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000612a0a6130e3565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611092573d6000803e3d6000fd5b33612a50612ded565b6001600160a01b031614612a765760405162461bcd60e51b8152600401610e03906143f7565b612a7e612e0d565b6001600160a01b0316306001600160a01b031614612aae5760405162461bcd60e51b8152600401610e039061441e565b612abf8b8989898989898989613596565b612adb5760405162461bcd60e51b8152600401610e0390614470565b612ae78c8c8c8c612e28565b612b616040518061014001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160008152602001600081525090565b8c8160000181815250508881602001906001600160a01b031690816001600160a01b0316815250508781604001906001600160a01b031690816001600160a01b0316815250508681606001906001600160a01b031690816001600160a01b0316815250508581608001906001600160a01b031690816001600160a01b031681525050848160a00181905250838160c00181905250828160e00181905250818161010001818152505080606760008f81526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005019080519060200190612cf7929190613cd6565b5060c08201518051612d13916006840191602090910190613cd6565b5060e08201518051612d2f916007840191602090910190613cd6565b5061010082015160088201556101209091015160099091015550505050505050505050505050565b612d5f6130fb565b6001600160a01b038116612dc45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e03565b611368816133ad565b612dd56130fb565b6001600160a01b038116156113685761134c81613155565b60006110b67111dbdd995c9b985b98d950dbdb9d1c9858dd60721b6139f5565b60006110b66c42616c6c6f7453746f7261676560981b6139f5565b8180612e3261104b565b1115612e805760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610e03565b612e88612a00565b811115612ed75760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610e03565b600085815260666020526040902054859003612f2e5760405162461bcd60e51b8152602060048201526016602482015275105b1c9958591e48195e1a5cdd19590818985b1b1bdd60521b6044820152606401610e03565b612f9d6040518061018001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525090565b858152606081018590526001600160a01b0383166080820152600161012082015260006101408201819052610160820185905286815260666020908152604091829020835181558184015160018201559183015160028301556060830151600383015560808301516004830180546001600160a01b0319166001600160a01b0390921691909117905560a08301518051849392613041926005850192910190613cd6565b5060c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a8201805460ff191691151591909117905561016090910151600b90910155606d546130a09060016145cc565b606d556040516001600160a01b03841690869088907fd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b90600090a4505050505050565b60006110b669456e7653746f7261676560b01b6139f5565b6033546001600160a01b03163314611bb35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e03565b6113686130fb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156131955761319083613a69565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156131ef575060408051601f3d908101601f191682019092526131ec9181019061451b565b60015b6132525760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e03565b60008051602061476683398151915281146132c15760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e03565b50613190838383613b05565b6000600584146132ef5760405162461bcd60e51b8152600401610e0390614443565b826133465760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c65206e616d6044820152606560f81b6064820152608401610e03565b60008251116133a25760405162461bcd60e51b815260206004820152602260248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c652076616c604482015261756560f01b6064820152608401610e03565b5060015b9392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600182148061340e5750600282145b61344d5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610e03565b600084815260666020526040902054841461347a5760405162461bcd60e51b8152600401610e039061449b565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156134dd5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610e03565b6000848152606660209081526040808320606b83528184206001600160a01b0388168552909252909120805460ff191660019081179091556006820154613523916145cc565b60068201556001830361354a5781816007015461354091906145cc565b6007820155613560565b81816008015461355a91906145cc565b60088201555b5050505050565b600054610100900460ff1661358e5760405162461bcd60e51b8152600401610e03906145f2565b611bb3613b30565b600060018a101580156135aa575060038a11155b6135c65760405162461bcd60e51b8152600401610e0390614443565b60028a03613785576001600160a01b0389166135f45760405162461bcd60e51b8152600401610e039061463d565b6001600160a01b0388161561361b5760405162461bcd60e51b8152600401610e0390614674565b6001600160a01b038716156136425760405162461bcd60e51b8152600401610e03906146ab565b6001600160a01b038616156136695760405162461bcd60e51b8152600401610e03906146e2565b8451156136b05760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610e03565b8351156136f55760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610e03565b82511561373a5760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610e03565b81156137805760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610e03565b6139e5565b60008551116137ce5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610e03565b83516040146138155760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610e03565b600083511161385c5760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610e03565b600082116138a45760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610e03565b60018a03613945576001600160a01b038916156138d35760405162461bcd60e51b8152600401610e039061463d565b6001600160a01b0388166138f95760405162461bcd60e51b8152600401610e0390614674565b6001600160a01b03871661391f5760405162461bcd60e51b8152600401610e03906146ab565b6001600160a01b0386166137805760405162461bcd60e51b8152600401610e03906146e2565b60038a036139e5576001600160a01b0389166139735760405162461bcd60e51b8152600401610e039061463d565b6001600160a01b0388166139995760405162461bcd60e51b8152600401610e0390614674565b6001600160a01b0387166139bf5760405162461bcd60e51b8152600401610e03906146ab565b6001600160a01b0386166139e55760405162461bcd60e51b8152600401610e03906146e2565b5060019998505050505050505050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd90602401602060405180830381865afa158015613a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a639190614719565b92915050565b6001600160a01b0381163b613ad65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e03565b60008051602061476683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613b0e83613b60565b600082511180613b1b5750805b1561319057613b2a8383613ba0565b50505050565b600054610100900460ff16613b575760405162461bcd60e51b8152600401610e03906145f2565b611bb3336133ad565b613b6981613a69565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606133a683836040518060600160405280602781526020016147866027913960606001600160a01b0384163b613c285760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610e03565b600080856001600160a01b031685604051613c439190614736565b600060405180830381855af49150503d8060008114613c7e576040519150601f19603f3d011682016040523d82523d6000602084013e613c83565b606091505b5091509150613c93828286613c9d565b9695505050505050565b60608315613cac5750816133a6565b825115613cbc5782518084602001fd5b8160405162461bcd60e51b8152600401610e039190614752565b828054613ce2906143bd565b90600052602060002090601f016020900481019282613d045760008555613d4a565b82601f10613d1d57805160ff1916838001178555613d4a565b82800160010185558215613d4a579182015b82811115613d4a578251825591602001919060010190613d2f565b50613d56929150613d5a565b5090565b5b80821115613d565760008155600101613d5b565b600060208284031215613d8157600080fd5b5035919050565b60005b83811015613da3578181015183820152602001613d8b565b83811115613b2a5750506000910152565b60008151808452613dcc816020860160208601613d88565b601f01601f19169290920160200192915050565b60006101608d83528c60208401528b604084015260018060a01b038b166060840152806080840152613e148184018b613db4565b60a0840199909952505060c081019590955260e085019390935261010084019190915215156101208301526101409091015295945050505050565b60018060a01b0384168152826020820152606060408201526000613e766060830184613db4565b95945050505050565b6001600160a01b038116811461136857600080fd5b8035613e9f81613e7f565b919050565b600080600080600060a08688031215613ebc57600080fd5b8535945060208601359350604086013592506060860135613edc81613e7f565b91506080860135613eec81613e7f565b809150509295509295909350565b838152826020820152606060408201526000613e766060830184613db4565b600080600060608486031215613f2e57600080fd5b505081359360208301359350604090920135919050565b600060208284031215613f5757600080fd5b81356133a681613e7f565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613f8957600080fd5b813567ffffffffffffffff80821115613fa457613fa4613f62565b604051601f8301601f19908116603f01168101908282118183101715613fcc57613fcc613f62565b81604052838152866020858801011115613fe557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a03121561402057600080fd5b873596506020880135955060408801359450606088013561404081613e7f565b93506080880135925060a0880135915060c088013567ffffffffffffffff81111561406a57600080fd5b6140768a828b01613f78565b91505092959891949750929550565b6000806040838503121561409857600080fd5b82356140a381613e7f565b9150602083013567ffffffffffffffff8111156140bf57600080fd5b6140cb85828601613f78565b9150509250929050565b600080604083850312156140e857600080fd5b50508035926020909101359150565b6001600160a01b038a8116825289811660208301528881166040830152871660608201526101206080820181905260009061413483820189613db4565b905082810360a08401526141488188613db4565b905082810360c084015261415c8187613db4565b60e084019590955250506101000152979650505050505050565b600080600080600060a0868803121561418e57600080fd5b853594506020860135935060408601356141a781613e7f565b94979396509394606081013594506080013592915050565b600080600080600080600060e0888a0312156141da57600080fd5b87359650602088013595506040880135945060608801356141fa81613e7f565b9350608088013561420a81613e7f565b925060a0880135915060c088013567ffffffffffffffff81111561406a57600080fd5b6000806040838503121561424057600080fd5b82359150602083013567ffffffffffffffff8111156140bf57600080fd5b6000806000806000806000806000806000806101808d8f03121561428157600080fd5b8c359b5060208d01359a5060408d0135995061429f60608e01613e94565b98506142ad60808e01613e94565b97506142bb60a08e01613e94565b96506142c960c08e01613e94565b95506142d760e08e01613e94565b945067ffffffffffffffff6101008e013511156142f357600080fd5b6143048e6101008f01358f01613f78565b935067ffffffffffffffff6101208e0135111561432057600080fd5b6143318e6101208f01358f01613f78565b925067ffffffffffffffff6101408e0135111561434d57600080fd5b61435e8e6101408f01358f01613f78565b91506101608d013590509295989b509295989b509295989b565b6000806040838503121561438b57600080fd5b823566ffffffffffffff811681146143a257600080fd5b915060208301356143b281613e7f565b809150509250929050565b600181811c908216806143d157607f821691505b6020821081036143f157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252600b908201526a125cc8111a5cd8589b195960aa1b604082015260600190565b602080825260139082015272496e76616c69642042616c6c6f74205479706560681b604082015260600190565b60208082526011908201527024b73b30b634b2102830b930b6b2ba32b960791b604082015260600190565b6020808252601290820152711b9bdd08195e1a5cdd19590810985b1b1bdd60721b604082015260600190565b602080825260119082015270185b1c9958591e48199a5b985b1a5e9959607a1b604082015260600190565b6020808252600f908201526e4e6f7420526561647920537461746560881b604082015260600190565b60006020828403121561452d57600080fd5b5051919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600082198211156145ed57634e487b7160e01b600052601160045260246000fd5b500190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252601a908201527f496e76616c6964206f6c64207374616b65722061646472657373000000000000604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207374616b65722061646472657373000000000000604082015260600190565b60208082526019908201527f496e76616c6964206e657720766f746572206164647265737300000000000000604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207265776172642061646472657373000000000000604082015260600190565b60006020828403121561472b57600080fd5b81516133a681613e7f565b60008251614748818460208701613d88565b9190910192915050565b6020815260006133a66020830184613db456fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bdd331e04af737ac7555b052790789cc127a905e71b0a9c92935780e787a3b5464736f6c634300080e0033", -} - -// BallotStorageImpABI is the input ABI used to generate the binding from. -// Deprecated: Use BallotStorageImpMetaData.ABI instead. -var BallotStorageImpABI = BallotStorageImpMetaData.ABI - -// Deprecated: Use BallotStorageImpMetaData.Sigs instead. -// BallotStorageImpFuncSigs maps the 4-byte function signature to its string representation. -var BallotStorageImpFuncSigs = BallotStorageImpMetaData.Sigs - -// BallotStorageImpBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use BallotStorageImpMetaData.Bin instead. -var BallotStorageImpBin = BallotStorageImpMetaData.Bin - -// DeployBallotStorageImp deploys a new Ethereum contract, binding an instance of BallotStorageImp to it. -func DeployBallotStorageImp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BallotStorageImp, error) { - parsed, err := BallotStorageImpMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BallotStorageImpBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &BallotStorageImp{BallotStorageImpCaller: BallotStorageImpCaller{contract: contract}, BallotStorageImpTransactor: BallotStorageImpTransactor{contract: contract}, BallotStorageImpFilterer: BallotStorageImpFilterer{contract: contract}}, nil -} - -// BallotStorageImp is an auto generated Go binding around an Ethereum contract. -type BallotStorageImp struct { - BallotStorageImpCaller // Read-only binding to the contract - BallotStorageImpTransactor // Write-only binding to the contract - BallotStorageImpFilterer // Log filterer for contract events -} - -// BallotStorageImpCaller is an auto generated read-only Go binding around an Ethereum contract. -type BallotStorageImpCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// BallotStorageImpTransactor is an auto generated write-only Go binding around an Ethereum contract. -type BallotStorageImpTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// BallotStorageImpFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type BallotStorageImpFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// BallotStorageImpSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type BallotStorageImpSession struct { - Contract *BallotStorageImp // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// BallotStorageImpCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type BallotStorageImpCallerSession struct { - Contract *BallotStorageImpCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// BallotStorageImpTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type BallotStorageImpTransactorSession struct { - Contract *BallotStorageImpTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// BallotStorageImpRaw is an auto generated low-level Go binding around an Ethereum contract. -type BallotStorageImpRaw struct { - Contract *BallotStorageImp // Generic contract binding to access the raw methods on -} - -// BallotStorageImpCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type BallotStorageImpCallerRaw struct { - Contract *BallotStorageImpCaller // Generic read-only contract binding to access the raw methods on -} - -// BallotStorageImpTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type BallotStorageImpTransactorRaw struct { - Contract *BallotStorageImpTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewBallotStorageImp creates a new instance of BallotStorageImp, bound to a specific deployed contract. -func NewBallotStorageImp(address common.Address, backend bind.ContractBackend) (*BallotStorageImp, error) { - contract, err := bindBallotStorageImp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &BallotStorageImp{BallotStorageImpCaller: BallotStorageImpCaller{contract: contract}, BallotStorageImpTransactor: BallotStorageImpTransactor{contract: contract}, BallotStorageImpFilterer: BallotStorageImpFilterer{contract: contract}}, nil -} - -// NewBallotStorageImpCaller creates a new read-only instance of BallotStorageImp, bound to a specific deployed contract. -func NewBallotStorageImpCaller(address common.Address, caller bind.ContractCaller) (*BallotStorageImpCaller, error) { - contract, err := bindBallotStorageImp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &BallotStorageImpCaller{contract: contract}, nil -} - -// NewBallotStorageImpTransactor creates a new write-only instance of BallotStorageImp, bound to a specific deployed contract. -func NewBallotStorageImpTransactor(address common.Address, transactor bind.ContractTransactor) (*BallotStorageImpTransactor, error) { - contract, err := bindBallotStorageImp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &BallotStorageImpTransactor{contract: contract}, nil -} - -// NewBallotStorageImpFilterer creates a new log filterer instance of BallotStorageImp, bound to a specific deployed contract. -func NewBallotStorageImpFilterer(address common.Address, filterer bind.ContractFilterer) (*BallotStorageImpFilterer, error) { - contract, err := bindBallotStorageImp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &BallotStorageImpFilterer{contract: contract}, nil -} - -// bindBallotStorageImp binds a generic wrapper to an already deployed contract. -func bindBallotStorageImp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(BallotStorageImpABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_BallotStorageImp *BallotStorageImpRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BallotStorageImp.Contract.BallotStorageImpCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_BallotStorageImp *BallotStorageImpRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BallotStorageImp.Contract.BallotStorageImpTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_BallotStorageImp *BallotStorageImpRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BallotStorageImp.Contract.BallotStorageImpTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_BallotStorageImp *BallotStorageImpCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BallotStorageImp.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_BallotStorageImp *BallotStorageImpTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BallotStorageImp.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_BallotStorageImp *BallotStorageImpTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BallotStorageImp.Contract.contract.Transact(opts, method, params...) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) BALLOTSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "BALLOT_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _BallotStorageImp.Contract.BALLOTSTORAGENAME(&_BallotStorageImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _BallotStorageImp.Contract.BALLOTSTORAGENAME(&_BallotStorageImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) ECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) ECOSYSTEMNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.ECOSYSTEMNAME(&_BallotStorageImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) ECOSYSTEMNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.ECOSYSTEMNAME(&_BallotStorageImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) ENVSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "ENV_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) ENVSTORAGENAME() ([32]byte, error) { - return _BallotStorageImp.Contract.ENVSTORAGENAME(&_BallotStorageImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) ENVSTORAGENAME() ([32]byte, error) { - return _BallotStorageImp.Contract.ENVSTORAGENAME(&_BallotStorageImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) GOVNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "GOV_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) GOVNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.GOVNAME(&_BallotStorageImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) GOVNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.GOVNAME(&_BallotStorageImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) MAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) MAINTENANCENAME() ([32]byte, error) { - return _BallotStorageImp.Contract.MAINTENANCENAME(&_BallotStorageImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) MAINTENANCENAME() ([32]byte, error) { - return _BallotStorageImp.Contract.MAINTENANCENAME(&_BallotStorageImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) REWARDPOOLNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "REWARD_POOL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) REWARDPOOLNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.REWARDPOOLNAME(&_BallotStorageImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) REWARDPOOLNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.REWARDPOOLNAME(&_BallotStorageImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) STAKINGNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "STAKING_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) STAKINGNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.STAKINGNAME(&_BallotStorageImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) STAKINGNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.STAKINGNAME(&_BallotStorageImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) STAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) STAKINGREWARDNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.STAKINGREWARDNAME(&_BallotStorageImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) STAKINGREWARDNAME() ([32]byte, error) { - return _BallotStorageImp.Contract.STAKINGREWARDNAME(&_BallotStorageImp.CallOpts) -} - -// GetBallotAddress is a free data retrieval call binding the contract method 0x7efa9ae3. -// -// Solidity: function getBallotAddress(uint256 _id) view returns(address newGovernanceAddress) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotAddress(opts *bind.CallOpts, _id *big.Int) (common.Address, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotAddress", _id) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetBallotAddress is a free data retrieval call binding the contract method 0x7efa9ae3. -// -// Solidity: function getBallotAddress(uint256 _id) view returns(address newGovernanceAddress) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotAddress(_id *big.Int) (common.Address, error) { - return _BallotStorageImp.Contract.GetBallotAddress(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotAddress is a free data retrieval call binding the contract method 0x7efa9ae3. -// -// Solidity: function getBallotAddress(uint256 _id) view returns(address newGovernanceAddress) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotAddress(_id *big.Int) (common.Address, error) { - return _BallotStorageImp.Contract.GetBallotAddress(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotBasic is a free data retrieval call binding the contract method 0x02b385fb. -// -// Solidity: function getBallotBasic(uint256 _id) view returns(uint256 startTime, uint256 endTime, uint256 ballotType, address creator, bytes memo, uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects, uint256 state, bool isFinalized, uint256 duration) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotBasic(opts *bind.CallOpts, _id *big.Int) (struct { - StartTime *big.Int - EndTime *big.Int - BallotType *big.Int - Creator common.Address - Memo []byte - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int - State *big.Int - IsFinalized bool - Duration *big.Int -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotBasic", _id) - - outstruct := new(struct { - StartTime *big.Int - EndTime *big.Int - BallotType *big.Int - Creator common.Address - Memo []byte - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int - State *big.Int - IsFinalized bool - Duration *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.StartTime = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.EndTime = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.BallotType = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - outstruct.Creator = *abi.ConvertType(out[3], new(common.Address)).(*common.Address) - outstruct.Memo = *abi.ConvertType(out[4], new([]byte)).(*[]byte) - outstruct.TotalVoters = *abi.ConvertType(out[5], new(*big.Int)).(**big.Int) - outstruct.PowerOfAccepts = *abi.ConvertType(out[6], new(*big.Int)).(**big.Int) - outstruct.PowerOfRejects = *abi.ConvertType(out[7], new(*big.Int)).(**big.Int) - outstruct.State = *abi.ConvertType(out[8], new(*big.Int)).(**big.Int) - outstruct.IsFinalized = *abi.ConvertType(out[9], new(bool)).(*bool) - outstruct.Duration = *abi.ConvertType(out[10], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetBallotBasic is a free data retrieval call binding the contract method 0x02b385fb. -// -// Solidity: function getBallotBasic(uint256 _id) view returns(uint256 startTime, uint256 endTime, uint256 ballotType, address creator, bytes memo, uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects, uint256 state, bool isFinalized, uint256 duration) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotBasic(_id *big.Int) (struct { - StartTime *big.Int - EndTime *big.Int - BallotType *big.Int - Creator common.Address - Memo []byte - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int - State *big.Int - IsFinalized bool - Duration *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotBasic(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotBasic is a free data retrieval call binding the contract method 0x02b385fb. -// -// Solidity: function getBallotBasic(uint256 _id) view returns(uint256 startTime, uint256 endTime, uint256 ballotType, address creator, bytes memo, uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects, uint256 state, bool isFinalized, uint256 duration) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotBasic(_id *big.Int) (struct { - StartTime *big.Int - EndTime *big.Int - BallotType *big.Int - Creator common.Address - Memo []byte - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int - State *big.Int - IsFinalized bool - Duration *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotBasic(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotCount is a free data retrieval call binding the contract method 0xb4741495. -// -// Solidity: function getBallotCount() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotCount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotCount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBallotCount is a free data retrieval call binding the contract method 0xb4741495. -// -// Solidity: function getBallotCount() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotCount() (*big.Int, error) { - return _BallotStorageImp.Contract.GetBallotCount(&_BallotStorageImp.CallOpts) -} - -// GetBallotCount is a free data retrieval call binding the contract method 0xb4741495. -// -// Solidity: function getBallotCount() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotCount() (*big.Int, error) { - return _BallotStorageImp.Contract.GetBallotCount(&_BallotStorageImp.CallOpts) -} - -// GetBallotExecute is a free data retrieval call binding the contract method 0x060e6a99. -// -// Solidity: function getBallotExecute(uint256 _id) view returns(address, uint256, bytes) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotExecute(opts *bind.CallOpts, _id *big.Int) (common.Address, *big.Int, []byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotExecute", _id) - - if err != nil { - return *new(common.Address), *new(*big.Int), *new([]byte), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - out2 := *abi.ConvertType(out[2], new([]byte)).(*[]byte) - - return out0, out1, out2, err - -} - -// GetBallotExecute is a free data retrieval call binding the contract method 0x060e6a99. -// -// Solidity: function getBallotExecute(uint256 _id) view returns(address, uint256, bytes) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotExecute(_id *big.Int) (common.Address, *big.Int, []byte, error) { - return _BallotStorageImp.Contract.GetBallotExecute(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotExecute is a free data retrieval call binding the contract method 0x060e6a99. -// -// Solidity: function getBallotExecute(uint256 _id) view returns(address, uint256, bytes) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotExecute(_id *big.Int) (common.Address, *big.Int, []byte, error) { - return _BallotStorageImp.Contract.GetBallotExecute(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotForExit is a free data retrieval call binding the contract method 0x8c7be692. -// -// Solidity: function getBallotForExit(uint256 _id) view returns(uint256 unlockAmount, uint256 slashing) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotForExit(opts *bind.CallOpts, _id *big.Int) (struct { - UnlockAmount *big.Int - Slashing *big.Int -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotForExit", _id) - - outstruct := new(struct { - UnlockAmount *big.Int - Slashing *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.UnlockAmount = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.Slashing = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetBallotForExit is a free data retrieval call binding the contract method 0x8c7be692. -// -// Solidity: function getBallotForExit(uint256 _id) view returns(uint256 unlockAmount, uint256 slashing) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotForExit(_id *big.Int) (struct { - UnlockAmount *big.Int - Slashing *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotForExit(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotForExit is a free data retrieval call binding the contract method 0x8c7be692. -// -// Solidity: function getBallotForExit(uint256 _id) view returns(uint256 unlockAmount, uint256 slashing) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotForExit(_id *big.Int) (struct { - UnlockAmount *big.Int - Slashing *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotForExit(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotMember is a free data retrieval call binding the contract method 0x73df4e01. -// -// Solidity: function getBallotMember(uint256 _id) view returns(address oldStakerAddress, address newStakerAddress, address newVoterAddress, address newRewardAddress, bytes newNodeName, bytes newNodeId, bytes newNodeIp, uint256 newNodePort, uint256 lockAmount) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotMember(opts *bind.CallOpts, _id *big.Int) (struct { - OldStakerAddress common.Address - NewStakerAddress common.Address - NewVoterAddress common.Address - NewRewardAddress common.Address - NewNodeName []byte - NewNodeId []byte - NewNodeIp []byte - NewNodePort *big.Int - LockAmount *big.Int -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotMember", _id) - - outstruct := new(struct { - OldStakerAddress common.Address - NewStakerAddress common.Address - NewVoterAddress common.Address - NewRewardAddress common.Address - NewNodeName []byte - NewNodeId []byte - NewNodeIp []byte - NewNodePort *big.Int - LockAmount *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.OldStakerAddress = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.NewStakerAddress = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) - outstruct.NewVoterAddress = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) - outstruct.NewRewardAddress = *abi.ConvertType(out[3], new(common.Address)).(*common.Address) - outstruct.NewNodeName = *abi.ConvertType(out[4], new([]byte)).(*[]byte) - outstruct.NewNodeId = *abi.ConvertType(out[5], new([]byte)).(*[]byte) - outstruct.NewNodeIp = *abi.ConvertType(out[6], new([]byte)).(*[]byte) - outstruct.NewNodePort = *abi.ConvertType(out[7], new(*big.Int)).(**big.Int) - outstruct.LockAmount = *abi.ConvertType(out[8], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetBallotMember is a free data retrieval call binding the contract method 0x73df4e01. -// -// Solidity: function getBallotMember(uint256 _id) view returns(address oldStakerAddress, address newStakerAddress, address newVoterAddress, address newRewardAddress, bytes newNodeName, bytes newNodeId, bytes newNodeIp, uint256 newNodePort, uint256 lockAmount) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotMember(_id *big.Int) (struct { - OldStakerAddress common.Address - NewStakerAddress common.Address - NewVoterAddress common.Address - NewRewardAddress common.Address - NewNodeName []byte - NewNodeId []byte - NewNodeIp []byte - NewNodePort *big.Int - LockAmount *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotMember(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotMember is a free data retrieval call binding the contract method 0x73df4e01. -// -// Solidity: function getBallotMember(uint256 _id) view returns(address oldStakerAddress, address newStakerAddress, address newVoterAddress, address newRewardAddress, bytes newNodeName, bytes newNodeId, bytes newNodeIp, uint256 newNodePort, uint256 lockAmount) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotMember(_id *big.Int) (struct { - OldStakerAddress common.Address - NewStakerAddress common.Address - NewVoterAddress common.Address - NewRewardAddress common.Address - NewNodeName []byte - NewNodeId []byte - NewNodeIp []byte - NewNodePort *big.Int - LockAmount *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotMember(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotPeriod is a free data retrieval call binding the contract method 0x09970688. -// -// Solidity: function getBallotPeriod(uint256 _id) view returns(uint256 startTime, uint256 endTime, uint256 duration) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotPeriod(opts *bind.CallOpts, _id *big.Int) (struct { - StartTime *big.Int - EndTime *big.Int - Duration *big.Int -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotPeriod", _id) - - outstruct := new(struct { - StartTime *big.Int - EndTime *big.Int - Duration *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.StartTime = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.EndTime = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.Duration = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetBallotPeriod is a free data retrieval call binding the contract method 0x09970688. -// -// Solidity: function getBallotPeriod(uint256 _id) view returns(uint256 startTime, uint256 endTime, uint256 duration) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotPeriod(_id *big.Int) (struct { - StartTime *big.Int - EndTime *big.Int - Duration *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotPeriod(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotPeriod is a free data retrieval call binding the contract method 0x09970688. -// -// Solidity: function getBallotPeriod(uint256 _id) view returns(uint256 startTime, uint256 endTime, uint256 duration) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotPeriod(_id *big.Int) (struct { - StartTime *big.Int - EndTime *big.Int - Duration *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotPeriod(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotState is a free data retrieval call binding the contract method 0x688ca5b2. -// -// Solidity: function getBallotState(uint256 _id) view returns(uint256 ballotType, uint256 state, bool isFinalized) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotState(opts *bind.CallOpts, _id *big.Int) (struct { - BallotType *big.Int - State *big.Int - IsFinalized bool -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotState", _id) - - outstruct := new(struct { - BallotType *big.Int - State *big.Int - IsFinalized bool - }) - if err != nil { - return *outstruct, err - } - - outstruct.BallotType = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.State = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.IsFinalized = *abi.ConvertType(out[2], new(bool)).(*bool) - - return *outstruct, err - -} - -// GetBallotState is a free data retrieval call binding the contract method 0x688ca5b2. -// -// Solidity: function getBallotState(uint256 _id) view returns(uint256 ballotType, uint256 state, bool isFinalized) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotState(_id *big.Int) (struct { - BallotType *big.Int - State *big.Int - IsFinalized bool -}, error) { - return _BallotStorageImp.Contract.GetBallotState(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotState is a free data retrieval call binding the contract method 0x688ca5b2. -// -// Solidity: function getBallotState(uint256 _id) view returns(uint256 ballotType, uint256 state, bool isFinalized) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotState(_id *big.Int) (struct { - BallotType *big.Int - State *big.Int - IsFinalized bool -}, error) { - return _BallotStorageImp.Contract.GetBallotState(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotVariable is a free data retrieval call binding the contract method 0x1d940da2. -// -// Solidity: function getBallotVariable(uint256 _id) view returns(bytes32 envVariableName, uint256 envVariableType, bytes envVariableValue) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotVariable(opts *bind.CallOpts, _id *big.Int) (struct { - EnvVariableName [32]byte - EnvVariableType *big.Int - EnvVariableValue []byte -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotVariable", _id) - - outstruct := new(struct { - EnvVariableName [32]byte - EnvVariableType *big.Int - EnvVariableValue []byte - }) - if err != nil { - return *outstruct, err - } - - outstruct.EnvVariableName = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - outstruct.EnvVariableType = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.EnvVariableValue = *abi.ConvertType(out[2], new([]byte)).(*[]byte) - - return *outstruct, err - -} - -// GetBallotVariable is a free data retrieval call binding the contract method 0x1d940da2. -// -// Solidity: function getBallotVariable(uint256 _id) view returns(bytes32 envVariableName, uint256 envVariableType, bytes envVariableValue) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotVariable(_id *big.Int) (struct { - EnvVariableName [32]byte - EnvVariableType *big.Int - EnvVariableValue []byte -}, error) { - return _BallotStorageImp.Contract.GetBallotVariable(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotVariable is a free data retrieval call binding the contract method 0x1d940da2. -// -// Solidity: function getBallotVariable(uint256 _id) view returns(bytes32 envVariableName, uint256 envVariableType, bytes envVariableValue) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotVariable(_id *big.Int) (struct { - EnvVariableName [32]byte - EnvVariableType *big.Int - EnvVariableValue []byte -}, error) { - return _BallotStorageImp.Contract.GetBallotVariable(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotVotingInfo is a free data retrieval call binding the contract method 0x56ba988e. -// -// Solidity: function getBallotVotingInfo(uint256 _id) view returns(uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects) -func (_BallotStorageImp *BallotStorageImpCaller) GetBallotVotingInfo(opts *bind.CallOpts, _id *big.Int) (struct { - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getBallotVotingInfo", _id) - - outstruct := new(struct { - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.TotalVoters = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.PowerOfAccepts = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.PowerOfRejects = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetBallotVotingInfo is a free data retrieval call binding the contract method 0x56ba988e. -// -// Solidity: function getBallotVotingInfo(uint256 _id) view returns(uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects) -func (_BallotStorageImp *BallotStorageImpSession) GetBallotVotingInfo(_id *big.Int) (struct { - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotVotingInfo(&_BallotStorageImp.CallOpts, _id) -} - -// GetBallotVotingInfo is a free data retrieval call binding the contract method 0x56ba988e. -// -// Solidity: function getBallotVotingInfo(uint256 _id) view returns(uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetBallotVotingInfo(_id *big.Int) (struct { - TotalVoters *big.Int - PowerOfAccepts *big.Int - PowerOfRejects *big.Int -}, error) { - return _BallotStorageImp.Contract.GetBallotVotingInfo(&_BallotStorageImp.CallOpts, _id) -} - -// GetMaxVotingDuration is a free data retrieval call binding the contract method 0xce04b9d4. -// -// Solidity: function getMaxVotingDuration() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCaller) GetMaxVotingDuration(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getMaxVotingDuration") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxVotingDuration is a free data retrieval call binding the contract method 0xce04b9d4. -// -// Solidity: function getMaxVotingDuration() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpSession) GetMaxVotingDuration() (*big.Int, error) { - return _BallotStorageImp.Contract.GetMaxVotingDuration(&_BallotStorageImp.CallOpts) -} - -// GetMaxVotingDuration is a free data retrieval call binding the contract method 0xce04b9d4. -// -// Solidity: function getMaxVotingDuration() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetMaxVotingDuration() (*big.Int, error) { - return _BallotStorageImp.Contract.GetMaxVotingDuration(&_BallotStorageImp.CallOpts) -} - -// GetMinVotingDuration is a free data retrieval call binding the contract method 0x1c150171. -// -// Solidity: function getMinVotingDuration() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCaller) GetMinVotingDuration(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getMinVotingDuration") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMinVotingDuration is a free data retrieval call binding the contract method 0x1c150171. -// -// Solidity: function getMinVotingDuration() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpSession) GetMinVotingDuration() (*big.Int, error) { - return _BallotStorageImp.Contract.GetMinVotingDuration(&_BallotStorageImp.CallOpts) -} - -// GetMinVotingDuration is a free data retrieval call binding the contract method 0x1c150171. -// -// Solidity: function getMinVotingDuration() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetMinVotingDuration() (*big.Int, error) { - return _BallotStorageImp.Contract.GetMinVotingDuration(&_BallotStorageImp.CallOpts) -} - -// GetPreviousBallotStorage is a free data retrieval call binding the contract method 0xb23c676c. -// -// Solidity: function getPreviousBallotStorage() view returns(address) -func (_BallotStorageImp *BallotStorageImpCaller) GetPreviousBallotStorage(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getPreviousBallotStorage") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPreviousBallotStorage is a free data retrieval call binding the contract method 0xb23c676c. -// -// Solidity: function getPreviousBallotStorage() view returns(address) -func (_BallotStorageImp *BallotStorageImpSession) GetPreviousBallotStorage() (common.Address, error) { - return _BallotStorageImp.Contract.GetPreviousBallotStorage(&_BallotStorageImp.CallOpts) -} - -// GetPreviousBallotStorage is a free data retrieval call binding the contract method 0xb23c676c. -// -// Solidity: function getPreviousBallotStorage() view returns(address) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetPreviousBallotStorage() (common.Address, error) { - return _BallotStorageImp.Contract.GetPreviousBallotStorage(&_BallotStorageImp.CallOpts) -} - -// GetTime is a free data retrieval call binding the contract method 0x557ed1ba. -// -// Solidity: function getTime() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCaller) GetTime(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getTime") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTime is a free data retrieval call binding the contract method 0x557ed1ba. -// -// Solidity: function getTime() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpSession) GetTime() (*big.Int, error) { - return _BallotStorageImp.Contract.GetTime(&_BallotStorageImp.CallOpts) -} - -// GetTime is a free data retrieval call binding the contract method 0x557ed1ba. -// -// Solidity: function getTime() view returns(uint256) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetTime() (*big.Int, error) { - return _BallotStorageImp.Contract.GetTime(&_BallotStorageImp.CallOpts) -} - -// GetVote is a free data retrieval call binding the contract method 0x5a55c1f0. -// -// Solidity: function getVote(uint256 _voteId) view returns(uint256 voteId, uint256 ballotId, address voter, uint256 decision, uint256 power, uint256 time) -func (_BallotStorageImp *BallotStorageImpCaller) GetVote(opts *bind.CallOpts, _voteId *big.Int) (struct { - VoteId *big.Int - BallotId *big.Int - Voter common.Address - Decision *big.Int - Power *big.Int - Time *big.Int -}, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "getVote", _voteId) - - outstruct := new(struct { - VoteId *big.Int - BallotId *big.Int - Voter common.Address - Decision *big.Int - Power *big.Int - Time *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.VoteId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.BallotId = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.Voter = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) - outstruct.Decision = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - outstruct.Power = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) - outstruct.Time = *abi.ConvertType(out[5], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetVote is a free data retrieval call binding the contract method 0x5a55c1f0. -// -// Solidity: function getVote(uint256 _voteId) view returns(uint256 voteId, uint256 ballotId, address voter, uint256 decision, uint256 power, uint256 time) -func (_BallotStorageImp *BallotStorageImpSession) GetVote(_voteId *big.Int) (struct { - VoteId *big.Int - BallotId *big.Int - Voter common.Address - Decision *big.Int - Power *big.Int - Time *big.Int -}, error) { - return _BallotStorageImp.Contract.GetVote(&_BallotStorageImp.CallOpts, _voteId) -} - -// GetVote is a free data retrieval call binding the contract method 0x5a55c1f0. -// -// Solidity: function getVote(uint256 _voteId) view returns(uint256 voteId, uint256 ballotId, address voter, uint256 decision, uint256 power, uint256 time) -func (_BallotStorageImp *BallotStorageImpCallerSession) GetVote(_voteId *big.Int) (struct { - VoteId *big.Int - BallotId *big.Int - Voter common.Address - Decision *big.Int - Power *big.Int - Time *big.Int -}, error) { - return _BallotStorageImp.Contract.GetVote(&_BallotStorageImp.CallOpts, _voteId) -} - -// HasAlreadyVoted is a free data retrieval call binding the contract method 0xf680e555. -// -// Solidity: function hasAlreadyVoted(uint56 _ballotId, address _voter) view returns(bool) -func (_BallotStorageImp *BallotStorageImpCaller) HasAlreadyVoted(opts *bind.CallOpts, _ballotId *big.Int, _voter common.Address) (bool, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "hasAlreadyVoted", _ballotId, _voter) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasAlreadyVoted is a free data retrieval call binding the contract method 0xf680e555. -// -// Solidity: function hasAlreadyVoted(uint56 _ballotId, address _voter) view returns(bool) -func (_BallotStorageImp *BallotStorageImpSession) HasAlreadyVoted(_ballotId *big.Int, _voter common.Address) (bool, error) { - return _BallotStorageImp.Contract.HasAlreadyVoted(&_BallotStorageImp.CallOpts, _ballotId, _voter) -} - -// HasAlreadyVoted is a free data retrieval call binding the contract method 0xf680e555. -// -// Solidity: function hasAlreadyVoted(uint56 _ballotId, address _voter) view returns(bool) -func (_BallotStorageImp *BallotStorageImpCallerSession) HasAlreadyVoted(_ballotId *big.Int, _voter common.Address) (bool, error) { - return _BallotStorageImp.Contract.HasAlreadyVoted(&_BallotStorageImp.CallOpts, _ballotId, _voter) -} - -// IsDisabled is a free data retrieval call binding the contract method 0x6c57f5a9. -// -// Solidity: function isDisabled() view returns(bool) -func (_BallotStorageImp *BallotStorageImpCaller) IsDisabled(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "isDisabled") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsDisabled is a free data retrieval call binding the contract method 0x6c57f5a9. -// -// Solidity: function isDisabled() view returns(bool) -func (_BallotStorageImp *BallotStorageImpSession) IsDisabled() (bool, error) { - return _BallotStorageImp.Contract.IsDisabled(&_BallotStorageImp.CallOpts) -} - -// IsDisabled is a free data retrieval call binding the contract method 0x6c57f5a9. -// -// Solidity: function isDisabled() view returns(bool) -func (_BallotStorageImp *BallotStorageImpCallerSession) IsDisabled() (bool, error) { - return _BallotStorageImp.Contract.IsDisabled(&_BallotStorageImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_BallotStorageImp *BallotStorageImpCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_BallotStorageImp *BallotStorageImpSession) Owner() (common.Address, error) { - return _BallotStorageImp.Contract.Owner(&_BallotStorageImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_BallotStorageImp *BallotStorageImpCallerSession) Owner() (common.Address, error) { - return _BallotStorageImp.Contract.Owner(&_BallotStorageImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "proxiableUUID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpSession) ProxiableUUID() ([32]byte, error) { - return _BallotStorageImp.Contract.ProxiableUUID(&_BallotStorageImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_BallotStorageImp *BallotStorageImpCallerSession) ProxiableUUID() ([32]byte, error) { - return _BallotStorageImp.Contract.ProxiableUUID(&_BallotStorageImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_BallotStorageImp *BallotStorageImpCaller) Reg(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BallotStorageImp.contract.Call(opts, &out, "reg") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_BallotStorageImp *BallotStorageImpSession) Reg() (common.Address, error) { - return _BallotStorageImp.Contract.Reg(&_BallotStorageImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_BallotStorageImp *BallotStorageImpCallerSession) Reg() (common.Address, error) { - return _BallotStorageImp.Contract.Reg(&_BallotStorageImp.CallOpts) -} - -// CancelBallot is a paid mutator transaction binding the contract method 0x155ca224. -// -// Solidity: function cancelBallot(uint256 _ballotId) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) CancelBallot(opts *bind.TransactOpts, _ballotId *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "cancelBallot", _ballotId) -} - -// CancelBallot is a paid mutator transaction binding the contract method 0x155ca224. -// -// Solidity: function cancelBallot(uint256 _ballotId) returns() -func (_BallotStorageImp *BallotStorageImpSession) CancelBallot(_ballotId *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CancelBallot(&_BallotStorageImp.TransactOpts, _ballotId) -} - -// CancelBallot is a paid mutator transaction binding the contract method 0x155ca224. -// -// Solidity: function cancelBallot(uint256 _ballotId) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) CancelBallot(_ballotId *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CancelBallot(&_BallotStorageImp.TransactOpts, _ballotId) -} - -// CreateBallotForAddress is a paid mutator transaction binding the contract method 0x0a3a63fe. -// -// Solidity: function createBallotForAddress(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _newGovernanceAddress) returns(uint256) -func (_BallotStorageImp *BallotStorageImpTransactor) CreateBallotForAddress(opts *bind.TransactOpts, _id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _newGovernanceAddress common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "createBallotForAddress", _id, _ballotType, _duration, _creator, _newGovernanceAddress) -} - -// CreateBallotForAddress is a paid mutator transaction binding the contract method 0x0a3a63fe. -// -// Solidity: function createBallotForAddress(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _newGovernanceAddress) returns(uint256) -func (_BallotStorageImp *BallotStorageImpSession) CreateBallotForAddress(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _newGovernanceAddress common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForAddress(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _newGovernanceAddress) -} - -// CreateBallotForAddress is a paid mutator transaction binding the contract method 0x0a3a63fe. -// -// Solidity: function createBallotForAddress(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _newGovernanceAddress) returns(uint256) -func (_BallotStorageImp *BallotStorageImpTransactorSession) CreateBallotForAddress(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _newGovernanceAddress common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForAddress(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _newGovernanceAddress) -} - -// CreateBallotForExecute is a paid mutator transaction binding the contract method 0xaea83e40. -// -// Solidity: function createBallotForExecute(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _target, uint256 _value, bytes _calldata) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) CreateBallotForExecute(opts *bind.TransactOpts, _id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _target common.Address, _value *big.Int, _calldata []byte) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "createBallotForExecute", _id, _ballotType, _duration, _creator, _target, _value, _calldata) -} - -// CreateBallotForExecute is a paid mutator transaction binding the contract method 0xaea83e40. -// -// Solidity: function createBallotForExecute(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _target, uint256 _value, bytes _calldata) returns() -func (_BallotStorageImp *BallotStorageImpSession) CreateBallotForExecute(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _target common.Address, _value *big.Int, _calldata []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForExecute(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _target, _value, _calldata) -} - -// CreateBallotForExecute is a paid mutator transaction binding the contract method 0xaea83e40. -// -// Solidity: function createBallotForExecute(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _target, uint256 _value, bytes _calldata) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) CreateBallotForExecute(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _target common.Address, _value *big.Int, _calldata []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForExecute(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _target, _value, _calldata) -} - -// CreateBallotForExit is a paid mutator transaction binding the contract method 0x22640859. -// -// Solidity: function createBallotForExit(uint256 _id, uint256 _unlockAmount, uint256 _slashing) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) CreateBallotForExit(opts *bind.TransactOpts, _id *big.Int, _unlockAmount *big.Int, _slashing *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "createBallotForExit", _id, _unlockAmount, _slashing) -} - -// CreateBallotForExit is a paid mutator transaction binding the contract method 0x22640859. -// -// Solidity: function createBallotForExit(uint256 _id, uint256 _unlockAmount, uint256 _slashing) returns() -func (_BallotStorageImp *BallotStorageImpSession) CreateBallotForExit(_id *big.Int, _unlockAmount *big.Int, _slashing *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForExit(&_BallotStorageImp.TransactOpts, _id, _unlockAmount, _slashing) -} - -// CreateBallotForExit is a paid mutator transaction binding the contract method 0x22640859. -// -// Solidity: function createBallotForExit(uint256 _id, uint256 _unlockAmount, uint256 _slashing) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) CreateBallotForExit(_id *big.Int, _unlockAmount *big.Int, _slashing *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForExit(&_BallotStorageImp.TransactOpts, _id, _unlockAmount, _slashing) -} - -// CreateBallotForMember is a paid mutator transaction binding the contract method 0xdaacbb95. -// -// Solidity: function createBallotForMember(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _oldStakerAddress, address _newStakerAddress, address _newVoterAddress, address _newRewardAddress, bytes _newNodeName, bytes _newNodeId, bytes _newNodeIp, uint256 _newNodePort) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) CreateBallotForMember(opts *bind.TransactOpts, _id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _oldStakerAddress common.Address, _newStakerAddress common.Address, _newVoterAddress common.Address, _newRewardAddress common.Address, _newNodeName []byte, _newNodeId []byte, _newNodeIp []byte, _newNodePort *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "createBallotForMember", _id, _ballotType, _duration, _creator, _oldStakerAddress, _newStakerAddress, _newVoterAddress, _newRewardAddress, _newNodeName, _newNodeId, _newNodeIp, _newNodePort) -} - -// CreateBallotForMember is a paid mutator transaction binding the contract method 0xdaacbb95. -// -// Solidity: function createBallotForMember(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _oldStakerAddress, address _newStakerAddress, address _newVoterAddress, address _newRewardAddress, bytes _newNodeName, bytes _newNodeId, bytes _newNodeIp, uint256 _newNodePort) returns() -func (_BallotStorageImp *BallotStorageImpSession) CreateBallotForMember(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _oldStakerAddress common.Address, _newStakerAddress common.Address, _newVoterAddress common.Address, _newRewardAddress common.Address, _newNodeName []byte, _newNodeId []byte, _newNodeIp []byte, _newNodePort *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForMember(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _oldStakerAddress, _newStakerAddress, _newVoterAddress, _newRewardAddress, _newNodeName, _newNodeId, _newNodeIp, _newNodePort) -} - -// CreateBallotForMember is a paid mutator transaction binding the contract method 0xdaacbb95. -// -// Solidity: function createBallotForMember(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, address _oldStakerAddress, address _newStakerAddress, address _newVoterAddress, address _newRewardAddress, bytes _newNodeName, bytes _newNodeId, bytes _newNodeIp, uint256 _newNodePort) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) CreateBallotForMember(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _oldStakerAddress common.Address, _newStakerAddress common.Address, _newVoterAddress common.Address, _newRewardAddress common.Address, _newNodeName []byte, _newNodeId []byte, _newNodeIp []byte, _newNodePort *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForMember(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _oldStakerAddress, _newStakerAddress, _newVoterAddress, _newRewardAddress, _newNodeName, _newNodeId, _newNodeIp, _newNodePort) -} - -// CreateBallotForVariable is a paid mutator transaction binding the contract method 0x4a57823e. -// -// Solidity: function createBallotForVariable(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, bytes32 _envVariableName, uint256 _envVariableType, bytes _envVariableValue) returns(uint256) -func (_BallotStorageImp *BallotStorageImpTransactor) CreateBallotForVariable(opts *bind.TransactOpts, _id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _envVariableName [32]byte, _envVariableType *big.Int, _envVariableValue []byte) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "createBallotForVariable", _id, _ballotType, _duration, _creator, _envVariableName, _envVariableType, _envVariableValue) -} - -// CreateBallotForVariable is a paid mutator transaction binding the contract method 0x4a57823e. -// -// Solidity: function createBallotForVariable(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, bytes32 _envVariableName, uint256 _envVariableType, bytes _envVariableValue) returns(uint256) -func (_BallotStorageImp *BallotStorageImpSession) CreateBallotForVariable(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _envVariableName [32]byte, _envVariableType *big.Int, _envVariableValue []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForVariable(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _envVariableName, _envVariableType, _envVariableValue) -} - -// CreateBallotForVariable is a paid mutator transaction binding the contract method 0x4a57823e. -// -// Solidity: function createBallotForVariable(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator, bytes32 _envVariableName, uint256 _envVariableType, bytes _envVariableValue) returns(uint256) -func (_BallotStorageImp *BallotStorageImpTransactorSession) CreateBallotForVariable(_id *big.Int, _ballotType *big.Int, _duration *big.Int, _creator common.Address, _envVariableName [32]byte, _envVariableType *big.Int, _envVariableValue []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateBallotForVariable(&_BallotStorageImp.TransactOpts, _id, _ballotType, _duration, _creator, _envVariableName, _envVariableType, _envVariableValue) -} - -// CreateVote is a paid mutator transaction binding the contract method 0x96462b9c. -// -// Solidity: function createVote(uint256 _voteId, uint256 _ballotId, address _voter, uint256 _decision, uint256 _power) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) CreateVote(opts *bind.TransactOpts, _voteId *big.Int, _ballotId *big.Int, _voter common.Address, _decision *big.Int, _power *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "createVote", _voteId, _ballotId, _voter, _decision, _power) -} - -// CreateVote is a paid mutator transaction binding the contract method 0x96462b9c. -// -// Solidity: function createVote(uint256 _voteId, uint256 _ballotId, address _voter, uint256 _decision, uint256 _power) returns() -func (_BallotStorageImp *BallotStorageImpSession) CreateVote(_voteId *big.Int, _ballotId *big.Int, _voter common.Address, _decision *big.Int, _power *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateVote(&_BallotStorageImp.TransactOpts, _voteId, _ballotId, _voter, _decision, _power) -} - -// CreateVote is a paid mutator transaction binding the contract method 0x96462b9c. -// -// Solidity: function createVote(uint256 _voteId, uint256 _ballotId, address _voter, uint256 _decision, uint256 _power) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) CreateVote(_voteId *big.Int, _ballotId *big.Int, _voter common.Address, _decision *big.Int, _power *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.CreateVote(&_BallotStorageImp.TransactOpts, _voteId, _ballotId, _voter, _decision, _power) -} - -// FinalizeBallot is a paid mutator transaction binding the contract method 0xa91e59ba. -// -// Solidity: function finalizeBallot(uint256 _ballotId, uint256 _ballotState) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) FinalizeBallot(opts *bind.TransactOpts, _ballotId *big.Int, _ballotState *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "finalizeBallot", _ballotId, _ballotState) -} - -// FinalizeBallot is a paid mutator transaction binding the contract method 0xa91e59ba. -// -// Solidity: function finalizeBallot(uint256 _ballotId, uint256 _ballotState) returns() -func (_BallotStorageImp *BallotStorageImpSession) FinalizeBallot(_ballotId *big.Int, _ballotState *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.FinalizeBallot(&_BallotStorageImp.TransactOpts, _ballotId, _ballotState) -} - -// FinalizeBallot is a paid mutator transaction binding the contract method 0xa91e59ba. -// -// Solidity: function finalizeBallot(uint256 _ballotId, uint256 _ballotState) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) FinalizeBallot(_ballotId *big.Int, _ballotState *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.FinalizeBallot(&_BallotStorageImp.TransactOpts, _ballotId, _ballotState) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _registry) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) Initialize(opts *bind.TransactOpts, _registry common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "initialize", _registry) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _registry) returns() -func (_BallotStorageImp *BallotStorageImpSession) Initialize(_registry common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.Initialize(&_BallotStorageImp.TransactOpts, _registry) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _registry) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) Initialize(_registry common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.Initialize(&_BallotStorageImp.TransactOpts, _registry) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_BallotStorageImp *BallotStorageImpTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_BallotStorageImp *BallotStorageImpSession) RenounceOwnership() (*types.Transaction, error) { - return _BallotStorageImp.Contract.RenounceOwnership(&_BallotStorageImp.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _BallotStorageImp.Contract.RenounceOwnership(&_BallotStorageImp.TransactOpts) -} - -// SetPreviousBallotStorage is a paid mutator transaction binding the contract method 0x2a74f38c. -// -// Solidity: function setPreviousBallotStorage(address _address) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) SetPreviousBallotStorage(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "setPreviousBallotStorage", _address) -} - -// SetPreviousBallotStorage is a paid mutator transaction binding the contract method 0x2a74f38c. -// -// Solidity: function setPreviousBallotStorage(address _address) returns() -func (_BallotStorageImp *BallotStorageImpSession) SetPreviousBallotStorage(_address common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.SetPreviousBallotStorage(&_BallotStorageImp.TransactOpts, _address) -} - -// SetPreviousBallotStorage is a paid mutator transaction binding the contract method 0x2a74f38c. -// -// Solidity: function setPreviousBallotStorage(address _address) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) SetPreviousBallotStorage(_address common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.SetPreviousBallotStorage(&_BallotStorageImp.TransactOpts, _address) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) SetRegistry(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "setRegistry", _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_BallotStorageImp *BallotStorageImpSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.SetRegistry(&_BallotStorageImp.TransactOpts, _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.SetRegistry(&_BallotStorageImp.TransactOpts, _addr) -} - -// StartBallot is a paid mutator transaction binding the contract method 0xc0b6f186. -// -// Solidity: function startBallot(uint256 _ballotId, uint256 _startTime, uint256 _endTime) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) StartBallot(opts *bind.TransactOpts, _ballotId *big.Int, _startTime *big.Int, _endTime *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "startBallot", _ballotId, _startTime, _endTime) -} - -// StartBallot is a paid mutator transaction binding the contract method 0xc0b6f186. -// -// Solidity: function startBallot(uint256 _ballotId, uint256 _startTime, uint256 _endTime) returns() -func (_BallotStorageImp *BallotStorageImpSession) StartBallot(_ballotId *big.Int, _startTime *big.Int, _endTime *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.StartBallot(&_BallotStorageImp.TransactOpts, _ballotId, _startTime, _endTime) -} - -// StartBallot is a paid mutator transaction binding the contract method 0xc0b6f186. -// -// Solidity: function startBallot(uint256 _ballotId, uint256 _startTime, uint256 _endTime) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) StartBallot(_ballotId *big.Int, _startTime *big.Int, _endTime *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.StartBallot(&_BallotStorageImp.TransactOpts, _ballotId, _startTime, _endTime) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BallotStorageImp *BallotStorageImpSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.TransferOwnership(&_BallotStorageImp.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.TransferOwnership(&_BallotStorageImp.TransactOpts, newOwner) -} - -// UpdateBallotDuration is a paid mutator transaction binding the contract method 0x656bc633. -// -// Solidity: function updateBallotDuration(uint256 _ballotId, uint256 _duration) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) UpdateBallotDuration(opts *bind.TransactOpts, _ballotId *big.Int, _duration *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "updateBallotDuration", _ballotId, _duration) -} - -// UpdateBallotDuration is a paid mutator transaction binding the contract method 0x656bc633. -// -// Solidity: function updateBallotDuration(uint256 _ballotId, uint256 _duration) returns() -func (_BallotStorageImp *BallotStorageImpSession) UpdateBallotDuration(_ballotId *big.Int, _duration *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpdateBallotDuration(&_BallotStorageImp.TransactOpts, _ballotId, _duration) -} - -// UpdateBallotDuration is a paid mutator transaction binding the contract method 0x656bc633. -// -// Solidity: function updateBallotDuration(uint256 _ballotId, uint256 _duration) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) UpdateBallotDuration(_ballotId *big.Int, _duration *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpdateBallotDuration(&_BallotStorageImp.TransactOpts, _ballotId, _duration) -} - -// UpdateBallotMemberLockAmount is a paid mutator transaction binding the contract method 0x72d0ec92. -// -// Solidity: function updateBallotMemberLockAmount(uint256 _ballotId, uint256 _lockAmount) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) UpdateBallotMemberLockAmount(opts *bind.TransactOpts, _ballotId *big.Int, _lockAmount *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "updateBallotMemberLockAmount", _ballotId, _lockAmount) -} - -// UpdateBallotMemberLockAmount is a paid mutator transaction binding the contract method 0x72d0ec92. -// -// Solidity: function updateBallotMemberLockAmount(uint256 _ballotId, uint256 _lockAmount) returns() -func (_BallotStorageImp *BallotStorageImpSession) UpdateBallotMemberLockAmount(_ballotId *big.Int, _lockAmount *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpdateBallotMemberLockAmount(&_BallotStorageImp.TransactOpts, _ballotId, _lockAmount) -} - -// UpdateBallotMemberLockAmount is a paid mutator transaction binding the contract method 0x72d0ec92. -// -// Solidity: function updateBallotMemberLockAmount(uint256 _ballotId, uint256 _lockAmount) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) UpdateBallotMemberLockAmount(_ballotId *big.Int, _lockAmount *big.Int) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpdateBallotMemberLockAmount(&_BallotStorageImp.TransactOpts, _ballotId, _lockAmount) -} - -// UpdateBallotMemo is a paid mutator transaction binding the contract method 0xbce0dbc1. -// -// Solidity: function updateBallotMemo(uint256 _ballotId, bytes _memo) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) UpdateBallotMemo(opts *bind.TransactOpts, _ballotId *big.Int, _memo []byte) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "updateBallotMemo", _ballotId, _memo) -} - -// UpdateBallotMemo is a paid mutator transaction binding the contract method 0xbce0dbc1. -// -// Solidity: function updateBallotMemo(uint256 _ballotId, bytes _memo) returns() -func (_BallotStorageImp *BallotStorageImpSession) UpdateBallotMemo(_ballotId *big.Int, _memo []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpdateBallotMemo(&_BallotStorageImp.TransactOpts, _ballotId, _memo) -} - -// UpdateBallotMemo is a paid mutator transaction binding the contract method 0xbce0dbc1. -// -// Solidity: function updateBallotMemo(uint256 _ballotId, bytes _memo) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) UpdateBallotMemo(_ballotId *big.Int, _memo []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpdateBallotMemo(&_BallotStorageImp.TransactOpts, _ballotId, _memo) -} - -// UpgradeBallotStorage is a paid mutator transaction binding the contract method 0xf51a88e2. -// -// Solidity: function upgradeBallotStorage(address newImp) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) UpgradeBallotStorage(opts *bind.TransactOpts, newImp common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "upgradeBallotStorage", newImp) -} - -// UpgradeBallotStorage is a paid mutator transaction binding the contract method 0xf51a88e2. -// -// Solidity: function upgradeBallotStorage(address newImp) returns() -func (_BallotStorageImp *BallotStorageImpSession) UpgradeBallotStorage(newImp common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpgradeBallotStorage(&_BallotStorageImp.TransactOpts, newImp) -} - -// UpgradeBallotStorage is a paid mutator transaction binding the contract method 0xf51a88e2. -// -// Solidity: function upgradeBallotStorage(address newImp) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) UpgradeBallotStorage(newImp common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpgradeBallotStorage(&_BallotStorageImp.TransactOpts, newImp) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_BallotStorageImp *BallotStorageImpTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "upgradeTo", newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_BallotStorageImp *BallotStorageImpSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpgradeTo(&_BallotStorageImp.TransactOpts, newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpgradeTo(&_BallotStorageImp.TransactOpts, newImplementation) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_BallotStorageImp *BallotStorageImpTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _BallotStorageImp.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_BallotStorageImp *BallotStorageImpSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpgradeToAndCall(&_BallotStorageImp.TransactOpts, newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_BallotStorageImp *BallotStorageImpTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _BallotStorageImp.Contract.UpgradeToAndCall(&_BallotStorageImp.TransactOpts, newImplementation, data) -} - -// BallotStorageImpAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the BallotStorageImp contract. -type BallotStorageImpAdminChangedIterator struct { - Event *BallotStorageImpAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpAdminChanged represents a AdminChanged event raised by the BallotStorageImp contract. -type BallotStorageImpAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*BallotStorageImpAdminChangedIterator, error) { - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &BallotStorageImpAdminChangedIterator{contract: _BallotStorageImp.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *BallotStorageImpAdminChanged) (event.Subscription, error) { - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpAdminChanged) - if err := _BallotStorageImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseAdminChanged(log types.Log) (*BallotStorageImpAdminChanged, error) { - event := new(BallotStorageImpAdminChanged) - if err := _BallotStorageImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpBallotCanceledIterator is returned from FilterBallotCanceled and is used to iterate over the raw logs and unpacked data for BallotCanceled events raised by the BallotStorageImp contract. -type BallotStorageImpBallotCanceledIterator struct { - Event *BallotStorageImpBallotCanceled // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpBallotCanceledIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotCanceled) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotCanceled) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpBallotCanceledIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpBallotCanceledIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpBallotCanceled represents a BallotCanceled event raised by the BallotStorageImp contract. -type BallotStorageImpBallotCanceled struct { - BallotId *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBallotCanceled is a free log retrieval operation binding the contract event 0xd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc. -// -// Solidity: event BallotCanceled(uint256 indexed ballotId) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterBallotCanceled(opts *bind.FilterOpts, ballotId []*big.Int) (*BallotStorageImpBallotCanceledIterator, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "BallotCanceled", ballotIdRule) - if err != nil { - return nil, err - } - return &BallotStorageImpBallotCanceledIterator{contract: _BallotStorageImp.contract, event: "BallotCanceled", logs: logs, sub: sub}, nil -} - -// WatchBallotCanceled is a free log subscription operation binding the contract event 0xd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc. -// -// Solidity: event BallotCanceled(uint256 indexed ballotId) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchBallotCanceled(opts *bind.WatchOpts, sink chan<- *BallotStorageImpBallotCanceled, ballotId []*big.Int) (event.Subscription, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "BallotCanceled", ballotIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpBallotCanceled) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotCanceled", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBallotCanceled is a log parse operation binding the contract event 0xd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc. -// -// Solidity: event BallotCanceled(uint256 indexed ballotId) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseBallotCanceled(log types.Log) (*BallotStorageImpBallotCanceled, error) { - event := new(BallotStorageImpBallotCanceled) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotCanceled", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpBallotCreatedIterator is returned from FilterBallotCreated and is used to iterate over the raw logs and unpacked data for BallotCreated events raised by the BallotStorageImp contract. -type BallotStorageImpBallotCreatedIterator struct { - Event *BallotStorageImpBallotCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpBallotCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpBallotCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpBallotCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpBallotCreated represents a BallotCreated event raised by the BallotStorageImp contract. -type BallotStorageImpBallotCreated struct { - BallotId *big.Int - BallotType *big.Int - Creator common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBallotCreated is a free log retrieval operation binding the contract event 0xd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b. -// -// Solidity: event BallotCreated(uint256 indexed ballotId, uint256 indexed ballotType, address indexed creator) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterBallotCreated(opts *bind.FilterOpts, ballotId []*big.Int, ballotType []*big.Int, creator []common.Address) (*BallotStorageImpBallotCreatedIterator, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var ballotTypeRule []interface{} - for _, ballotTypeItem := range ballotType { - ballotTypeRule = append(ballotTypeRule, ballotTypeItem) - } - var creatorRule []interface{} - for _, creatorItem := range creator { - creatorRule = append(creatorRule, creatorItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "BallotCreated", ballotIdRule, ballotTypeRule, creatorRule) - if err != nil { - return nil, err - } - return &BallotStorageImpBallotCreatedIterator{contract: _BallotStorageImp.contract, event: "BallotCreated", logs: logs, sub: sub}, nil -} - -// WatchBallotCreated is a free log subscription operation binding the contract event 0xd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b. -// -// Solidity: event BallotCreated(uint256 indexed ballotId, uint256 indexed ballotType, address indexed creator) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchBallotCreated(opts *bind.WatchOpts, sink chan<- *BallotStorageImpBallotCreated, ballotId []*big.Int, ballotType []*big.Int, creator []common.Address) (event.Subscription, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var ballotTypeRule []interface{} - for _, ballotTypeItem := range ballotType { - ballotTypeRule = append(ballotTypeRule, ballotTypeItem) - } - var creatorRule []interface{} - for _, creatorItem := range creator { - creatorRule = append(creatorRule, creatorItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "BallotCreated", ballotIdRule, ballotTypeRule, creatorRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpBallotCreated) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBallotCreated is a log parse operation binding the contract event 0xd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b. -// -// Solidity: event BallotCreated(uint256 indexed ballotId, uint256 indexed ballotType, address indexed creator) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseBallotCreated(log types.Log) (*BallotStorageImpBallotCreated, error) { - event := new(BallotStorageImpBallotCreated) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpBallotFinalizedIterator is returned from FilterBallotFinalized and is used to iterate over the raw logs and unpacked data for BallotFinalized events raised by the BallotStorageImp contract. -type BallotStorageImpBallotFinalizedIterator struct { - Event *BallotStorageImpBallotFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpBallotFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpBallotFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpBallotFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpBallotFinalized represents a BallotFinalized event raised by the BallotStorageImp contract. -type BallotStorageImpBallotFinalized struct { - BallotId *big.Int - State *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBallotFinalized is a free log retrieval operation binding the contract event 0xdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f. -// -// Solidity: event BallotFinalized(uint256 indexed ballotId, uint256 state) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterBallotFinalized(opts *bind.FilterOpts, ballotId []*big.Int) (*BallotStorageImpBallotFinalizedIterator, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "BallotFinalized", ballotIdRule) - if err != nil { - return nil, err - } - return &BallotStorageImpBallotFinalizedIterator{contract: _BallotStorageImp.contract, event: "BallotFinalized", logs: logs, sub: sub}, nil -} - -// WatchBallotFinalized is a free log subscription operation binding the contract event 0xdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f. -// -// Solidity: event BallotFinalized(uint256 indexed ballotId, uint256 state) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchBallotFinalized(opts *bind.WatchOpts, sink chan<- *BallotStorageImpBallotFinalized, ballotId []*big.Int) (event.Subscription, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "BallotFinalized", ballotIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpBallotFinalized) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBallotFinalized is a log parse operation binding the contract event 0xdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f. -// -// Solidity: event BallotFinalized(uint256 indexed ballotId, uint256 state) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseBallotFinalized(log types.Log) (*BallotStorageImpBallotFinalized, error) { - event := new(BallotStorageImpBallotFinalized) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpBallotStartedIterator is returned from FilterBallotStarted and is used to iterate over the raw logs and unpacked data for BallotStarted events raised by the BallotStorageImp contract. -type BallotStorageImpBallotStartedIterator struct { - Event *BallotStorageImpBallotStarted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpBallotStartedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotStarted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpBallotStartedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpBallotStartedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpBallotStarted represents a BallotStarted event raised by the BallotStorageImp contract. -type BallotStorageImpBallotStarted struct { - BallotId *big.Int - StartTime *big.Int - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBallotStarted is a free log retrieval operation binding the contract event 0xd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c5. -// -// Solidity: event BallotStarted(uint256 indexed ballotId, uint256 indexed startTime, uint256 indexed endTime) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterBallotStarted(opts *bind.FilterOpts, ballotId []*big.Int, startTime []*big.Int, endTime []*big.Int) (*BallotStorageImpBallotStartedIterator, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var startTimeRule []interface{} - for _, startTimeItem := range startTime { - startTimeRule = append(startTimeRule, startTimeItem) - } - var endTimeRule []interface{} - for _, endTimeItem := range endTime { - endTimeRule = append(endTimeRule, endTimeItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "BallotStarted", ballotIdRule, startTimeRule, endTimeRule) - if err != nil { - return nil, err - } - return &BallotStorageImpBallotStartedIterator{contract: _BallotStorageImp.contract, event: "BallotStarted", logs: logs, sub: sub}, nil -} - -// WatchBallotStarted is a free log subscription operation binding the contract event 0xd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c5. -// -// Solidity: event BallotStarted(uint256 indexed ballotId, uint256 indexed startTime, uint256 indexed endTime) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchBallotStarted(opts *bind.WatchOpts, sink chan<- *BallotStorageImpBallotStarted, ballotId []*big.Int, startTime []*big.Int, endTime []*big.Int) (event.Subscription, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var startTimeRule []interface{} - for _, startTimeItem := range startTime { - startTimeRule = append(startTimeRule, startTimeItem) - } - var endTimeRule []interface{} - for _, endTimeItem := range endTime { - endTimeRule = append(endTimeRule, endTimeItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "BallotStarted", ballotIdRule, startTimeRule, endTimeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpBallotStarted) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotStarted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBallotStarted is a log parse operation binding the contract event 0xd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c5. -// -// Solidity: event BallotStarted(uint256 indexed ballotId, uint256 indexed startTime, uint256 indexed endTime) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseBallotStarted(log types.Log) (*BallotStorageImpBallotStarted, error) { - event := new(BallotStorageImpBallotStarted) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotStarted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpBallotUpdatedIterator is returned from FilterBallotUpdated and is used to iterate over the raw logs and unpacked data for BallotUpdated events raised by the BallotStorageImp contract. -type BallotStorageImpBallotUpdatedIterator struct { - Event *BallotStorageImpBallotUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpBallotUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBallotUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpBallotUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpBallotUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpBallotUpdated represents a BallotUpdated event raised by the BallotStorageImp contract. -type BallotStorageImpBallotUpdated struct { - BallotId *big.Int - UpdatedBy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBallotUpdated is a free log retrieval operation binding the contract event 0xf0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a. -// -// Solidity: event BallotUpdated(uint256 indexed ballotId, address indexed updatedBy) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterBallotUpdated(opts *bind.FilterOpts, ballotId []*big.Int, updatedBy []common.Address) (*BallotStorageImpBallotUpdatedIterator, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var updatedByRule []interface{} - for _, updatedByItem := range updatedBy { - updatedByRule = append(updatedByRule, updatedByItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "BallotUpdated", ballotIdRule, updatedByRule) - if err != nil { - return nil, err - } - return &BallotStorageImpBallotUpdatedIterator{contract: _BallotStorageImp.contract, event: "BallotUpdated", logs: logs, sub: sub}, nil -} - -// WatchBallotUpdated is a free log subscription operation binding the contract event 0xf0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a. -// -// Solidity: event BallotUpdated(uint256 indexed ballotId, address indexed updatedBy) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchBallotUpdated(opts *bind.WatchOpts, sink chan<- *BallotStorageImpBallotUpdated, ballotId []*big.Int, updatedBy []common.Address) (event.Subscription, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var updatedByRule []interface{} - for _, updatedByItem := range updatedBy { - updatedByRule = append(updatedByRule, updatedByItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "BallotUpdated", ballotIdRule, updatedByRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpBallotUpdated) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBallotUpdated is a log parse operation binding the contract event 0xf0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a. -// -// Solidity: event BallotUpdated(uint256 indexed ballotId, address indexed updatedBy) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseBallotUpdated(log types.Log) (*BallotStorageImpBallotUpdated, error) { - event := new(BallotStorageImpBallotUpdated) - if err := _BallotStorageImp.contract.UnpackLog(event, "BallotUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the BallotStorageImp contract. -type BallotStorageImpBeaconUpgradedIterator struct { - Event *BallotStorageImpBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpBeaconUpgraded represents a BeaconUpgraded event raised by the BallotStorageImp contract. -type BallotStorageImpBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*BallotStorageImpBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &BallotStorageImpBeaconUpgradedIterator{contract: _BallotStorageImp.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *BallotStorageImpBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpBeaconUpgraded) - if err := _BallotStorageImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseBeaconUpgraded(log types.Log) (*BallotStorageImpBeaconUpgraded, error) { - event := new(BallotStorageImpBeaconUpgraded) - if err := _BallotStorageImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the BallotStorageImp contract. -type BallotStorageImpInitializedIterator struct { - Event *BallotStorageImpInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpInitialized represents a Initialized event raised by the BallotStorageImp contract. -type BallotStorageImpInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterInitialized(opts *bind.FilterOpts) (*BallotStorageImpInitializedIterator, error) { - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &BallotStorageImpInitializedIterator{contract: _BallotStorageImp.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *BallotStorageImpInitialized) (event.Subscription, error) { - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpInitialized) - if err := _BallotStorageImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseInitialized(log types.Log) (*BallotStorageImpInitialized, error) { - event := new(BallotStorageImpInitialized) - if err := _BallotStorageImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BallotStorageImp contract. -type BallotStorageImpOwnershipTransferredIterator struct { - Event *BallotStorageImpOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpOwnershipTransferred represents a OwnershipTransferred event raised by the BallotStorageImp contract. -type BallotStorageImpOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BallotStorageImpOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &BallotStorageImpOwnershipTransferredIterator{contract: _BallotStorageImp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BallotStorageImpOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpOwnershipTransferred) - if err := _BallotStorageImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseOwnershipTransferred(log types.Log) (*BallotStorageImpOwnershipTransferred, error) { - event := new(BallotStorageImpOwnershipTransferred) - if err := _BallotStorageImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpSetPrevBallotStorageIterator is returned from FilterSetPrevBallotStorage and is used to iterate over the raw logs and unpacked data for SetPrevBallotStorage events raised by the BallotStorageImp contract. -type BallotStorageImpSetPrevBallotStorageIterator struct { - Event *BallotStorageImpSetPrevBallotStorage // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpSetPrevBallotStorageIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpSetPrevBallotStorage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpSetPrevBallotStorage) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpSetPrevBallotStorageIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpSetPrevBallotStorageIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpSetPrevBallotStorage represents a SetPrevBallotStorage event raised by the BallotStorageImp contract. -type BallotStorageImpSetPrevBallotStorage struct { - Previous common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetPrevBallotStorage is a free log retrieval operation binding the contract event 0x3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb3. -// -// Solidity: event SetPrevBallotStorage(address indexed previous) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterSetPrevBallotStorage(opts *bind.FilterOpts, previous []common.Address) (*BallotStorageImpSetPrevBallotStorageIterator, error) { - - var previousRule []interface{} - for _, previousItem := range previous { - previousRule = append(previousRule, previousItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "SetPrevBallotStorage", previousRule) - if err != nil { - return nil, err - } - return &BallotStorageImpSetPrevBallotStorageIterator{contract: _BallotStorageImp.contract, event: "SetPrevBallotStorage", logs: logs, sub: sub}, nil -} - -// WatchSetPrevBallotStorage is a free log subscription operation binding the contract event 0x3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb3. -// -// Solidity: event SetPrevBallotStorage(address indexed previous) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchSetPrevBallotStorage(opts *bind.WatchOpts, sink chan<- *BallotStorageImpSetPrevBallotStorage, previous []common.Address) (event.Subscription, error) { - - var previousRule []interface{} - for _, previousItem := range previous { - previousRule = append(previousRule, previousItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "SetPrevBallotStorage", previousRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpSetPrevBallotStorage) - if err := _BallotStorageImp.contract.UnpackLog(event, "SetPrevBallotStorage", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetPrevBallotStorage is a log parse operation binding the contract event 0x3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb3. -// -// Solidity: event SetPrevBallotStorage(address indexed previous) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseSetPrevBallotStorage(log types.Log) (*BallotStorageImpSetPrevBallotStorage, error) { - event := new(BallotStorageImpSetPrevBallotStorage) - if err := _BallotStorageImp.contract.UnpackLog(event, "SetPrevBallotStorage", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpSetRegistryIterator is returned from FilterSetRegistry and is used to iterate over the raw logs and unpacked data for SetRegistry events raised by the BallotStorageImp contract. -type BallotStorageImpSetRegistryIterator struct { - Event *BallotStorageImpSetRegistry // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpSetRegistryIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpSetRegistryIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpSetRegistryIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpSetRegistry represents a SetRegistry event raised by the BallotStorageImp contract. -type BallotStorageImpSetRegistry struct { - Addr common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetRegistry is a free log retrieval operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterSetRegistry(opts *bind.FilterOpts, addr []common.Address) (*BallotStorageImpSetRegistryIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return &BallotStorageImpSetRegistryIterator{contract: _BallotStorageImp.contract, event: "SetRegistry", logs: logs, sub: sub}, nil -} - -// WatchSetRegistry is a free log subscription operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchSetRegistry(opts *bind.WatchOpts, sink chan<- *BallotStorageImpSetRegistry, addr []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpSetRegistry) - if err := _BallotStorageImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetRegistry is a log parse operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseSetRegistry(log types.Log) (*BallotStorageImpSetRegistry, error) { - event := new(BallotStorageImpSetRegistry) - if err := _BallotStorageImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the BallotStorageImp contract. -type BallotStorageImpUpgradedIterator struct { - Event *BallotStorageImpUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpUpgraded represents a Upgraded event raised by the BallotStorageImp contract. -type BallotStorageImpUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*BallotStorageImpUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &BallotStorageImpUpgradedIterator{contract: _BallotStorageImp.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *BallotStorageImpUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpUpgraded) - if err := _BallotStorageImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseUpgraded(log types.Log) (*BallotStorageImpUpgraded, error) { - event := new(BallotStorageImpUpgraded) - if err := _BallotStorageImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// BallotStorageImpVotedIterator is returned from FilterVoted and is used to iterate over the raw logs and unpacked data for Voted events raised by the BallotStorageImp contract. -type BallotStorageImpVotedIterator struct { - Event *BallotStorageImpVoted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BallotStorageImpVotedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpVoted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BallotStorageImpVoted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BallotStorageImpVotedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BallotStorageImpVotedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BallotStorageImpVoted represents a Voted event raised by the BallotStorageImp contract. -type BallotStorageImpVoted struct { - Voteid *big.Int - BallotId *big.Int - Voter common.Address - Decision *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVoted is a free log retrieval operation binding the contract event 0x41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d367606. -// -// Solidity: event Voted(uint256 indexed voteid, uint256 indexed ballotId, address indexed voter, uint256 decision) -func (_BallotStorageImp *BallotStorageImpFilterer) FilterVoted(opts *bind.FilterOpts, voteid []*big.Int, ballotId []*big.Int, voter []common.Address) (*BallotStorageImpVotedIterator, error) { - - var voteidRule []interface{} - for _, voteidItem := range voteid { - voteidRule = append(voteidRule, voteidItem) - } - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _BallotStorageImp.contract.FilterLogs(opts, "Voted", voteidRule, ballotIdRule, voterRule) - if err != nil { - return nil, err - } - return &BallotStorageImpVotedIterator{contract: _BallotStorageImp.contract, event: "Voted", logs: logs, sub: sub}, nil -} - -// WatchVoted is a free log subscription operation binding the contract event 0x41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d367606. -// -// Solidity: event Voted(uint256 indexed voteid, uint256 indexed ballotId, address indexed voter, uint256 decision) -func (_BallotStorageImp *BallotStorageImpFilterer) WatchVoted(opts *bind.WatchOpts, sink chan<- *BallotStorageImpVoted, voteid []*big.Int, ballotId []*big.Int, voter []common.Address) (event.Subscription, error) { - - var voteidRule []interface{} - for _, voteidItem := range voteid { - voteidRule = append(voteidRule, voteidItem) - } - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _BallotStorageImp.contract.WatchLogs(opts, "Voted", voteidRule, ballotIdRule, voterRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BallotStorageImpVoted) - if err := _BallotStorageImp.contract.UnpackLog(event, "Voted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVoted is a log parse operation binding the contract event 0x41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d367606. -// -// Solidity: event Voted(uint256 indexed voteid, uint256 indexed ballotId, address indexed voter, uint256 decision) -func (_BallotStorageImp *BallotStorageImpFilterer) ParseVoted(log types.Log) (*BallotStorageImpVoted, error) { - event := new(BallotStorageImpVoted) - if err := _BallotStorageImp.contract.UnpackLog(event, "Voted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/wemix/bind/gen_envStorage_abi.go b/wemix/bind/gen_envStorage_abi.go deleted file mode 100644 index fec3f5226216..000000000000 --- a/wemix/bind/gen_envStorage_abi.go +++ /dev/null @@ -1,5443 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gov - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// EnvStorageMetaData contains all meta data concerning the EnvStorage contract. -var EnvStorageMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "5c60da1b": "implementation()", - }, - Bin: "0x608060405234801561001057600080fd5b5060405161077238038061077283398101604081905261002f91610326565b604080516020810190915260008152819061006b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61034f565b60008051602061072b8339815191521461008757610087610374565b6100938282600061009b565b505050610405565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b61008b1760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610136838360405180606001604052806027815260200161074b602791396101fd565b9392505050565b610150816102db60201b6100b71760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061072b83398151915260001b6102ea60201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102655760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161028091906103b6565b600060405180830381855af49150503d80600081146102bb576040519150601f19603f3d011682016040523d82523d6000602084013e6102c0565b606091505b5090925090506102d18282866102ed565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102fc575081610136565b82511561030c5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103d2565b60006020828403121561033857600080fd5b81516001600160a01b038116811461013657600080fd5b60008282101561036f57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b60005b838110156103a557818101518382015260200161038d565b838111156100ca5750506000910152565b600082516103c881846020870161038a565b9190910192915050565b60208152600082518060208401526103f181604085016020870161038a565b601f01601f19169190910160400192915050565b610317806104146000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102bb60279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b60606001600160a01b0384163b61018d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a8919061026b565b600060405180830381855af49150503d80600081146101e3576040519150601f19603f3d011682016040523d82523d6000602084013e6101e8565b606091505b50915091506101f8828286610202565b9695505050505050565b606083156102115750816100b0565b8251156102215782518084602001fd5b8160405162461bcd60e51b81526004016101849190610287565b60005b8381101561025657818101518382015260200161023e565b83811115610265576000848401525b50505050565b6000825161027d81846020870161023b565b9190910192915050565b60208152600082518060208401526102a681604085016020870161023b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a2e4a7da24e6caa52010e79ace6779756ddf3accdb5c5b50a65061413916382164736f6c634300080e0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", -} - -// EnvStorageABI is the input ABI used to generate the binding from. -// Deprecated: Use EnvStorageMetaData.ABI instead. -var EnvStorageABI = EnvStorageMetaData.ABI - -// Deprecated: Use EnvStorageMetaData.Sigs instead. -// EnvStorageFuncSigs maps the 4-byte function signature to its string representation. -var EnvStorageFuncSigs = EnvStorageMetaData.Sigs - -// EnvStorageBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use EnvStorageMetaData.Bin instead. -var EnvStorageBin = EnvStorageMetaData.Bin - -// DeployEnvStorage deploys a new Ethereum contract, binding an instance of EnvStorage to it. -func DeployEnvStorage(auth *bind.TransactOpts, backend bind.ContractBackend, _implementation common.Address) (common.Address, *types.Transaction, *EnvStorage, error) { - parsed, err := EnvStorageMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EnvStorageBin), backend, _implementation) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &EnvStorage{EnvStorageCaller: EnvStorageCaller{contract: contract}, EnvStorageTransactor: EnvStorageTransactor{contract: contract}, EnvStorageFilterer: EnvStorageFilterer{contract: contract}}, nil -} - -// EnvStorage is an auto generated Go binding around an Ethereum contract. -type EnvStorage struct { - EnvStorageCaller // Read-only binding to the contract - EnvStorageTransactor // Write-only binding to the contract - EnvStorageFilterer // Log filterer for contract events -} - -// EnvStorageCaller is an auto generated read-only Go binding around an Ethereum contract. -type EnvStorageCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// EnvStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. -type EnvStorageTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// EnvStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type EnvStorageFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// EnvStorageSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type EnvStorageSession struct { - Contract *EnvStorage // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// EnvStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type EnvStorageCallerSession struct { - Contract *EnvStorageCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// EnvStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type EnvStorageTransactorSession struct { - Contract *EnvStorageTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// EnvStorageRaw is an auto generated low-level Go binding around an Ethereum contract. -type EnvStorageRaw struct { - Contract *EnvStorage // Generic contract binding to access the raw methods on -} - -// EnvStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type EnvStorageCallerRaw struct { - Contract *EnvStorageCaller // Generic read-only contract binding to access the raw methods on -} - -// EnvStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type EnvStorageTransactorRaw struct { - Contract *EnvStorageTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewEnvStorage creates a new instance of EnvStorage, bound to a specific deployed contract. -func NewEnvStorage(address common.Address, backend bind.ContractBackend) (*EnvStorage, error) { - contract, err := bindEnvStorage(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &EnvStorage{EnvStorageCaller: EnvStorageCaller{contract: contract}, EnvStorageTransactor: EnvStorageTransactor{contract: contract}, EnvStorageFilterer: EnvStorageFilterer{contract: contract}}, nil -} - -// NewEnvStorageCaller creates a new read-only instance of EnvStorage, bound to a specific deployed contract. -func NewEnvStorageCaller(address common.Address, caller bind.ContractCaller) (*EnvStorageCaller, error) { - contract, err := bindEnvStorage(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &EnvStorageCaller{contract: contract}, nil -} - -// NewEnvStorageTransactor creates a new write-only instance of EnvStorage, bound to a specific deployed contract. -func NewEnvStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*EnvStorageTransactor, error) { - contract, err := bindEnvStorage(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &EnvStorageTransactor{contract: contract}, nil -} - -// NewEnvStorageFilterer creates a new log filterer instance of EnvStorage, bound to a specific deployed contract. -func NewEnvStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*EnvStorageFilterer, error) { - contract, err := bindEnvStorage(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &EnvStorageFilterer{contract: contract}, nil -} - -// bindEnvStorage binds a generic wrapper to an already deployed contract. -func bindEnvStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(EnvStorageABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_EnvStorage *EnvStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _EnvStorage.Contract.EnvStorageCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_EnvStorage *EnvStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EnvStorage.Contract.EnvStorageTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_EnvStorage *EnvStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _EnvStorage.Contract.EnvStorageTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_EnvStorage *EnvStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _EnvStorage.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_EnvStorage *EnvStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EnvStorage.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_EnvStorage *EnvStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _EnvStorage.Contract.contract.Transact(opts, method, params...) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_EnvStorage *EnvStorageCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _EnvStorage.contract.Call(opts, &out, "implementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_EnvStorage *EnvStorageSession) Implementation() (common.Address, error) { - return _EnvStorage.Contract.Implementation(&_EnvStorage.CallOpts) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_EnvStorage *EnvStorageCallerSession) Implementation() (common.Address, error) { - return _EnvStorage.Contract.Implementation(&_EnvStorage.CallOpts) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_EnvStorage *EnvStorageTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _EnvStorage.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_EnvStorage *EnvStorageSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _EnvStorage.Contract.Fallback(&_EnvStorage.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_EnvStorage *EnvStorageTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _EnvStorage.Contract.Fallback(&_EnvStorage.TransactOpts, calldata) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_EnvStorage *EnvStorageTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EnvStorage.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_EnvStorage *EnvStorageSession) Receive() (*types.Transaction, error) { - return _EnvStorage.Contract.Receive(&_EnvStorage.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_EnvStorage *EnvStorageTransactorSession) Receive() (*types.Transaction, error) { - return _EnvStorage.Contract.Receive(&_EnvStorage.TransactOpts) -} - -// EnvStorageAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the EnvStorage contract. -type EnvStorageAdminChangedIterator struct { - Event *EnvStorageAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageAdminChanged represents a AdminChanged event raised by the EnvStorage contract. -type EnvStorageAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_EnvStorage *EnvStorageFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*EnvStorageAdminChangedIterator, error) { - - logs, sub, err := _EnvStorage.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &EnvStorageAdminChangedIterator{contract: _EnvStorage.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_EnvStorage *EnvStorageFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageAdminChanged) (event.Subscription, error) { - - logs, sub, err := _EnvStorage.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageAdminChanged) - if err := _EnvStorage.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_EnvStorage *EnvStorageFilterer) ParseAdminChanged(log types.Log) (*EnvStorageAdminChanged, error) { - event := new(EnvStorageAdminChanged) - if err := _EnvStorage.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the EnvStorage contract. -type EnvStorageBeaconUpgradedIterator struct { - Event *EnvStorageBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageBeaconUpgraded represents a BeaconUpgraded event raised by the EnvStorage contract. -type EnvStorageBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_EnvStorage *EnvStorageFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*EnvStorageBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _EnvStorage.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &EnvStorageBeaconUpgradedIterator{contract: _EnvStorage.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_EnvStorage *EnvStorageFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *EnvStorageBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _EnvStorage.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageBeaconUpgraded) - if err := _EnvStorage.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_EnvStorage *EnvStorageFilterer) ParseBeaconUpgraded(log types.Log) (*EnvStorageBeaconUpgraded, error) { - event := new(EnvStorageBeaconUpgraded) - if err := _EnvStorage.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the EnvStorage contract. -type EnvStorageUpgradedIterator struct { - Event *EnvStorageUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageUpgraded represents a Upgraded event raised by the EnvStorage contract. -type EnvStorageUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_EnvStorage *EnvStorageFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*EnvStorageUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _EnvStorage.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &EnvStorageUpgradedIterator{contract: _EnvStorage.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_EnvStorage *EnvStorageFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *EnvStorageUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _EnvStorage.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageUpgraded) - if err := _EnvStorage.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_EnvStorage *EnvStorageFilterer) ParseUpgraded(log types.Log) (*EnvStorageUpgraded, error) { - event := new(EnvStorageUpgraded) - if err := _EnvStorage.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpMetaData contains all meta data concerning the EnvStorageImp contract. -var EnvStorageImpMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_value\",\"type\":\"address\"}],\"name\":\"AddressVarableChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_value\",\"type\":\"bytes32\"}],\"name\":\"Bytes32VarableChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"BytesVarableChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_value\",\"type\":\"int256\"}],\"name\":\"IntVarableChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SetRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"}],\"name\":\"StringVarableChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"UintVarableChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradeImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_type\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"}],\"name\":\"VarableChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BALLOT_DURATION_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALLOT_DURATION_MIN_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALLOT_DURATION_MIN_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALLOT_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_RATE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCKS_PER_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_CREATION_TIME_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_GASLIMIT_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_AMOUNT_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENV_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GASLIMIT_AND_BASE_FEE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAS_TARGET_PERCENTAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOV_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_BASE_FEE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_IDLE_BLOCK_INTERVAL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PRIORITY_FEE_PER_GAS_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_POOL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MIN_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MIN_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"envKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"envVal\",\"type\":\"bytes\"}],\"name\":\"checkVariableCondition\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBallotDurationMax\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBallotDurationMin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBallotDurationMinMax\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockCreationTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockRewardDistributionMethod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlocksPer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getBoolean\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasLimitAndBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxIdleBlockInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxPriorityFeePerGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingMax\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingMin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakingMinMax\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"getUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"names\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"infos\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reg\",\"outputs\":[{\"internalType\":\"contractIRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBallotDurationMax\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBallotDurationMaxByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBallotDurationMin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBallotDurationMinByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_max\",\"type\":\"uint256\"}],\"name\":\"setBallotDurationMinMax\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBallotDurationMinMaxByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBlockCreationTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBlockCreationTimeByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBlockRewardAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBlockRewardAmountByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block_producer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_staking_reward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ecofund\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maintenance\",\"type\":\"uint256\"}],\"name\":\"setBlockRewardDistributionMethod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBlockRewardDistributionMethodByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBlocksPer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setBlocksPerByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block_GasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_baseFeeMaxChangeRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasTargetPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxBaseFee\",\"type\":\"uint256\"}],\"name\":\"setGasLimitAndBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setGasLimitAndBaseFeeByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setMaxBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setMaxBaseFeeByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setMaxIdleBlockInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setMaxIdleBlockIntervalByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setMaxPriorityFeePerGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setMaxPriorityFeePerGasByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setStakingMax\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setStakingMaxByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setStakingMin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setStakingMinByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_max\",\"type\":\"uint256\"}],\"name\":\"setStakingMinMax\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_value\",\"type\":\"bytes\"}],\"name\":\"setStakingMinMaxByBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"envKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"envVal\",\"type\":\"bytes\"}],\"name\":\"setVariable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Sigs: map[string]string{ - "0015a73b": "BALLOT_DURATION_MAX_NAME()", - "656e3052": "BALLOT_DURATION_MIN_MAX_NAME()", - "6d583ca7": "BALLOT_DURATION_MIN_NAME()", - "9986e4b9": "BALLOT_STORAGE_NAME()", - "c42a0abc": "BASE_FEE_MAX_CHANGE_RATE_NAME()", - "3f35c8fe": "BLOCKS_PER_NAME()", - "c0b4fe15": "BLOCK_CREATION_TIME_NAME()", - "238737b6": "BLOCK_GASLIMIT_NAME()", - "a9b629b2": "BLOCK_REWARD_AMOUNT_NAME()", - "c6713baf": "BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME()", - "7b2bfb01": "BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME()", - "46946416": "BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME()", - "278bb12a": "BLOCK_REWARD_DISTRIBUTION_METHOD_NAME()", - "6167eb45": "BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME()", - "918f8674": "DENOMINATOR()", - "34125c84": "ECOSYSTEM_NAME()", - "7bf46530": "ENV_STORAGE_NAME()", - "c7d3da34": "GASLIMIT_AND_BASE_FEE_NAME()", - "4d273e28": "GAS_TARGET_PERCENTAGE_NAME()", - "6c78d2cf": "GOV_NAME()", - "4bd1ed76": "MAINTENANCE_NAME()", - "f38ecf47": "MAX_BASE_FEE_NAME()", - "b128f880": "MAX_IDLE_BLOCK_INTERVAL_NAME()", - "38294419": "MAX_PRIORITY_FEE_PER_GAS_NAME()", - "2f40992e": "REWARD_POOL_NAME()", - "c00ace6c": "STAKING_MAX_NAME()", - "a6868b7d": "STAKING_MIN_MAX_NAME()", - "6fde207a": "STAKING_MIN_NAME()", - "1e0cba0d": "STAKING_NAME()", - "5a731cca": "STAKING_REWARD_NAME()", - "9801bff9": "checkVariableCondition(bytes32,bytes)", - "21f8a721": "getAddress(bytes32)", - "1b27e01b": "getBallotDurationMax()", - "33be496e": "getBallotDurationMin()", - "cdb9f643": "getBallotDurationMinMax()", - "33e31184": "getBlockCreationTime()", - "5dba8c4a": "getBlockRewardAmount()", - "8f6fe725": "getBlockRewardDistributionMethod()", - "3690057a": "getBlocksPer()", - "3848207a": "getBoolean(bytes32)", - "c031a180": "getBytes(bytes32)", - "a6ed563e": "getBytes32(bytes32)", - "67d1a2e0": "getGasLimitAndBaseFee()", - "dc97d962": "getInt(bytes32)", - "c95437be": "getMaxBaseFee()", - "185582f1": "getMaxIdleBlockInterval()", - "2b2eaa92": "getMaxPriorityFeePerGas()", - "737c59b8": "getStakingMax()", - "076cd77f": "getStakingMin()", - "aba01fee": "getStakingMinMax()", - "986e791a": "getString(bytes32)", - "bd02d0f5": "getUint(bytes32)", - "539927be": "initialize(address,bytes32[],uint256[])", - "8da5cb5b": "owner()", - "52d1902d": "proxiableUUID()", - "738fdd1a": "reg()", - "715018a6": "renounceOwnership()", - "852cf38f": "setBallotDurationMax(uint256)", - "a5d6a581": "setBallotDurationMaxByBytes(bytes)", - "a36f259b": "setBallotDurationMin(uint256)", - "124cea37": "setBallotDurationMinByBytes(bytes)", - "b4d6bd3b": "setBallotDurationMinMax(uint256,uint256)", - "45b5ec29": "setBallotDurationMinMaxByBytes(bytes)", - "3305508e": "setBlockCreationTime(uint256)", - "44b89914": "setBlockCreationTimeByBytes(bytes)", - "2ed19cd5": "setBlockRewardAmount(uint256)", - "3d4c65f3": "setBlockRewardAmountByBytes(bytes)", - "0add66dd": "setBlockRewardDistributionMethod(uint256,uint256,uint256,uint256)", - "8c8b887e": "setBlockRewardDistributionMethodByBytes(bytes)", - "79e85859": "setBlocksPer(uint256)", - "3e8daafe": "setBlocksPerByBytes(bytes)", - "0fca11d2": "setGasLimitAndBaseFee(uint256,uint256,uint256,uint256)", - "be33732a": "setGasLimitAndBaseFeeByBytes(bytes)", - "6fe13177": "setMaxBaseFee(uint256)", - "408d79cf": "setMaxBaseFeeByBytes(bytes)", - "f6fd7129": "setMaxIdleBlockInterval(uint256)", - "0b90a39a": "setMaxIdleBlockIntervalByBytes(bytes)", - "ec3df879": "setMaxPriorityFeePerGas(uint256)", - "0fc238bf": "setMaxPriorityFeePerGasByBytes(bytes)", - "a91ee0dc": "setRegistry(address)", - "f8214591": "setStakingMax(uint256)", - "2eccd832": "setStakingMaxByBytes(bytes)", - "2eb57c65": "setStakingMin(uint256)", - "71c6960d": "setStakingMinByBytes(bytes)", - "8d5cdd7e": "setStakingMinMax(uint256,uint256)", - "e078869f": "setStakingMinMaxByBytes(bytes)", - "88c28019": "setVariable(bytes32,bytes)", - "f2fde38b": "transferOwnership(address)", - "3659cfe6": "upgradeTo(address)", - "4f1ef286": "upgradeToAndCall(address,bytes)", - }, - Bin: "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b603854610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60385460ff9081161015620000e6576038805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161366f6200011260003960008181611a1e01528181611aa30152611b7b015261366f6000f3fe6080604052600436106104e05760003560e01c80636fde207a11610281578063a6ed563e1161015a578063c42a0abc116100cc578063e078869f11610085578063e078869f146113d0578063ec3df879146113f0578063f2fde38b14611410578063f38ecf4714611430578063f6fd712914611452578063f82145911461147257600080fd5b8063c42a0abc146112a7578063c6713baf146112db578063c7d3da341461130f578063c95437be14611343578063cdb9f6431461138e578063dc97d962146113a357600080fd5b8063b4d6bd3b1161011e578063b4d6bd3b146111d6578063bd02d0f5146111f6578063be33732a14611223578063c00ace6c14611243578063c031a18014611265578063c0b4fe151461128557600080fd5b8063a6ed563e1461111b578063a91ee0dc14611148578063a9b629b214611168578063aba01fee1461118a578063b128f880146111b457600080fd5b80638c8b887e116101f35780639801bff9116101b75780639801bff914611036578063986e791a146110565780639986e4b914611083578063a36f259b146110a7578063a5d6a581146110c7578063a6868b7d146110e757600080fd5b80638c8b887e14610ee45780638d5cdd7e14610f045780638da5cb5b14610f245780638f6fe72514610f42578063918f86741461102057600080fd5b8063738fdd1a11610245578063738fdd1a14610e0f57806379e8585914610e2f5780637b2bfb0114610e4f5780637bf4653014610e83578063852cf38f14610ea457806388c2801914610ec457600080fd5b80636fde207a14610d4d5780636fe1317714610d6f578063715018a614610d8f57806371c6960d14610da4578063737c59b814610dc457600080fd5b80633659cfe6116103be5780634bd1ed76116103305780635dba8c4a116102e95780635dba8c4a14610b985780636167eb4514610be3578063656e305214610c1757806367d1a2e014610c4b5780636c78d2cf14610d025780636d583ca714610d2b57600080fd5b80634bd1ed7614610ad65780634d273e2814610af85780634f1ef28614610b2c57806352d1902d14610b3f578063539927be14610b545780635a731cca14610b7457600080fd5b80633e8daafe116103825780633e8daafe14610a005780633f35c8fe14610a20578063408d79cf14610a4257806344b8991414610a6257806345b5ec2914610a825780634694641614610aa257600080fd5b80633659cfe6146109135780633690057a14610933578063382944191461097e5780633848207a146109a05780633d4c65f3146109e057600080fd5b8063238737b6116104575780632ed19cd51161041b5780632ed19cd5146107fc5780632f40992e1461081c5780633305508e1461083d57806333be496e1461085d57806333e31184146108a857806334125c84146108f357600080fd5b8063238737b614610709578063278bb12a1461073d5780632b2eaa92146107715780632eb57c65146107bc5780632eccd832146107dc57600080fd5b80630fca11d2116104a95780630fca11d2146105c7578063124cea37146105e7578063185582f1146106075780631b27e01b146106525780631e0cba0d1461069d57806321f8a721146106bb57600080fd5b806215a73b146104e5578063076cd77f1461051a5780630add66dd146105655780630b90a39a146105875780630fc238bf146105a7575b600080fd5b3480156104f157600080fd5b5061050760008051602061351383398151915281565b6040519081526020015b60405180910390f35b34801561052657600080fd5b5060008051602061357383398151915260005260026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa69054610507565b34801561057157600080fd5b50610585610580366004612f22565b611497565b005b34801561059357600080fd5b506105856105a236600461300b565b6115ed565b3480156105b357600080fd5b506105856105c236600461300b565b61162d565b3480156105d357600080fd5b506105856105e2366004612f22565b61166a565b3480156105f357600080fd5b5061058561060236600461300b565b61172f565b34801561061357600080fd5b506000805160206134d383398151915260005260026020527fbc779bbce8d4fef90926dc39b56d9135e8e3795964b3adae769767961d4a94d854610507565b34801561065e57600080fd5b5060008051602061351383398151915260005260026020527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b54610507565b3480156106a957600080fd5b50610507665374616b696e6760c81b81565b3480156106c757600080fd5b506106f16106d6366004613048565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610511565b34801561071557600080fd5b506105077f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561074957600080fd5b506105077f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b34801561077d57600080fd5b5060008051602061355383398151915260005260026020527f270fb31b28afd06ad35288bc3cb901686a4c5a15239e966fd9b64269abd226c354610507565b3480156107c857600080fd5b506105856107d7366004613048565b61176c565b3480156107e857600080fd5b506105856107f736600461300b565b6117b3565b34801561080857600080fd5b50610585610817366004613048565b6117f0565b34801561082857600080fd5b506105076914995dd85c99141bdbdb60b21b81565b34801561084957600080fd5b50610585610858366004613048565b611837565b34801561086957600080fd5b506000805160206135fa83398151915260005260026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a4017554610507565b3480156108b457600080fd5b506000805160206134f383398151915260005260026020527ff3497fe1496bfc19eaef6d253f75ec2e9cfe1b4f6080c29192641567c6fc5d8754610507565b3480156108ff57600080fd5b506105076845636f73797374656d60b81b81565b34801561091f57600080fd5b5061058561092e366004613076565b61187e565b34801561093f57600080fd5b506000805160206135da83398151915260005260026020527f14e650c949c7cc3fca2efe79b3711fc734b4df488cc27c4137f35bd0adaae7fa54610507565b34801561098a57600080fd5b5061050760008051602061355383398151915281565b3480156109ac57600080fd5b506109d06109bb366004613048565b60009081526020819052604090205460ff1690565b6040519015158152602001610511565b3480156109ec57600080fd5b506105856109fb36600461300b565b6118d8565b348015610a0c57600080fd5b50610585610a1b36600461300b565b611915565b348015610a2c57600080fd5b506105076000805160206135da83398151915281565b348015610a4e57600080fd5b50610585610a5d36600461300b565b611952565b348015610a6e57600080fd5b50610585610a7d36600461300b565b61198f565b348015610a8e57600080fd5b50610585610a9d36600461300b565b6119cc565b348015610aae57600080fd5b506105077fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b348015610ae257600080fd5b506105076a4d61696e74656e616e636560a81b81565b348015610b0457600080fd5b506105077f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b610585610b3a366004613093565b611a14565b348015610b4b57600080fd5b50610507611b6e565b348015610b6057600080fd5b50610585610b6f366004613172565b611c21565b348015610b8057600080fd5b506105076c14dd185ada5b99d4995dd85c99609a1b81565b348015610ba457600080fd5b5060008051602061353383398151915260005260026020527f38eb620cc1355554391bc9d0c224a726d66edf7c3eb2d67af166d6e81fe4456254610507565b348015610bef57600080fd5b506105077f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b348015610c2357600080fd5b506105077fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b348015610c5757600080fd5b5060026020527fc77500645c8acbf6137a0e04460f85359483e3b08db30285cca2957db0c90904547fca55256fa8d248a334a7cb4ca72d9aec97700e81b3784b43c388b9a8d0e2b8e3547f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df08886000527fba5524e01c8da4a46e6f70a8f29f4dc63d299ad01d2f01ccae9666cb85f6f7c05460408051938452602084019290925290820152606001610511565b348015610d0e57600080fd5b506105077111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b348015610d3757600080fd5b506105076000805160206135fa83398151915281565b348015610d5957600080fd5b5061050760008051602061357383398151915281565b348015610d7b57600080fd5b50610585610d8a366004613048565b611eca565b348015610d9b57600080fd5b50610585611f11565b348015610db057600080fd5b50610585610dbf36600461300b565b611f25565b348015610dd057600080fd5b506000805160206134b383398151915260005260026020527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54610507565b348015610e1b57600080fd5b50609d546106f1906001600160a01b031681565b348015610e3b57600080fd5b50610585610e4a366004613048565b611f62565b348015610e5b57600080fd5b506105077f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610e8f57600080fd5b5061050769456e7653746f7261676560b01b81565b348015610eb057600080fd5b50610585610ebf366004613048565b611fa9565b348015610ed057600080fd5b50610585610edf36600461323f565b611ff0565b348015610ef057600080fd5b50610585610eff36600461300b565b612164565b348015610f1057600080fd5b50610585610f1f366004613270565b6121ba565b348015610f3057600080fd5b50606b546001600160a01b03166106f1565b348015610f4e57600080fd5b5060026020527fe6679752544e0074a1c9bec26775117fd40d133ce43cc443fb5f2512ebd7c2af547f89fc1b873e9ef0767cf41719c69200c3f894c43d73c49eb537ca60ec0a2d14bc547fa04c555f883d07b5c5fe85061c632b6bfec696b67afa8ad5e9773b89249984b2547fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d6000527f286a480438fb7eb9f5465ec436e6de865b71284ceb2be7ff1cea98f38c26308254604080519485526020850193909352918301526060820152608001610511565b34801561102c57600080fd5b5061050761271081565b34801561104257600080fd5b506109d061105136600461323f565b61228f565b34801561106257600080fd5b50611076611071366004613048565b6123ee565b60405161051191906132ea565b34801561108f57600080fd5b506105076c42616c6c6f7453746f7261676560981b81565b3480156110b357600080fd5b506105856110c2366004613048565b612490565b3480156110d357600080fd5b506105856110e236600461300b565b6124d7565b3480156110f357600080fd5b506105077f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b34801561112757600080fd5b50610507611136366004613048565b60009081526006602052604090205490565b34801561115457600080fd5b50610585611163366004613076565b612514565b34801561117457600080fd5b5061050760008051602061353383398151915281565b34801561119657600080fd5b5061119f6125bc565b60408051928352602083019190915201610511565b3480156111c057600080fd5b506105076000805160206134d383398151915281565b3480156111e257600080fd5b506105856111f1366004613270565b612626565b34801561120257600080fd5b50610507611211366004613048565b60009081526002602052604090205490565b34801561122f57600080fd5b5061058561123e36600461300b565b6126fd565b34801561124f57600080fd5b506105076000805160206134b383398151915281565b34801561127157600080fd5b50611076611280366004613048565b61274c565b34801561129157600080fd5b506105076000805160206134f383398151915281565b3480156112b357600080fd5b506105077fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b3480156112e757600080fd5b506105077fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b34801561131b57600080fd5b506105077f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b34801561134f57600080fd5b5060008051602061361a83398151915260005260026020527f38ddebd16170f2328156b72e009b30efe6e74a1b9fc4389d05f50efa2a42c6f854610507565b34801561139a57600080fd5b5061119f612769565b3480156113af57600080fd5b506105076113be366004613048565b60009081526001602052604090205490565b3480156113dc57600080fd5b506105856113eb36600461300b565b6127cf565b3480156113fc57600080fd5b5061058561140b366004613048565b612812565b34801561141c57600080fd5b5061058561142b366004613076565b612859565b34801561143c57600080fd5b5061050760008051602061361a83398151915281565b34801561145e57600080fd5b5061058561146d366004613048565b6128cf565b34801561147e57600080fd5b5061058561148d366004613048565b612916565b905090565b336114a061295d565b6001600160a01b0316146114cf5760405162461bcd60e51b81526004016114c6906132fd565b60405180910390fd5b61271081836114de868861333a565b6114e8919061333a565b6114f2919061333a565b1461153f5760405162461bcd60e51b815260206004820152601e60248201527f57726f6e6720726577617264206469737472756274696f6e20726174696f000060448201526064016114c6565b6115697fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f608561297d565b6115937f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f50508461297d565b6115bd7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa8361297d565b6115e77fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d8261297d565b50505050565b336115f661295d565b6001600160a01b03161461161c5760405162461bcd60e51b81526004016114c6906132fd565b61162a61146d826020015190565b50565b3361163661295d565b6001600160a01b03161461165c5760405162461bcd60e51b81526004016114c6906132fd565b61162a61140b826020015190565b3361167361295d565b6001600160a01b0316146116995760405162461bcd60e51b81526004016114c6906132fd565b6116c37f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a2788561297d565b6116ed7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c6574738461297d565b6117177f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df08888361297d565b6115e760008051602061361a8339815191528261297d565b3361173861295d565b6001600160a01b03161461175e5760405162461bcd60e51b81526004016114c6906132fd565b61162a6110c2826020015190565b3361177561295d565b6001600160a01b03161461179b5760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206135738339815191528261297d565b336117bc61295d565b6001600160a01b0316146117e25760405162461bcd60e51b81526004016114c6906132fd565b61162a61148d826020015190565b336117f961295d565b6001600160a01b03161461181f5760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206135338339815191528261297d565b3361184061295d565b6001600160a01b0316146118665760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206134f38339815191528261297d565b6118866129cc565b6118a181604051806020016040528060008152506000612a26565b6040516001600160a01b038216907f2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea970890600090a250565b336118e161295d565b6001600160a01b0316146119075760405162461bcd60e51b81526004016114c6906132fd565b61162a610817826020015190565b3361191e61295d565b6001600160a01b0316146119445760405162461bcd60e51b81526004016114c6906132fd565b61162a610e4a826020015190565b3361195b61295d565b6001600160a01b0316146119815760405162461bcd60e51b81526004016114c6906132fd565b61162a610d8a826020015190565b3361199861295d565b6001600160a01b0316146119be5760405162461bcd60e51b81526004016114c6906132fd565b61162a610858826020015190565b336119d561295d565b6001600160a01b0316146119fb5760405162461bcd60e51b81526004016114c6906132fd565b60208101516040820151611a0f8282612626565b505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611aa15760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016114c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611aea600080516020613593833981519152546001600160a01b031690565b6001600160a01b031614611b555760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016114c6565b611b5e82612b91565b611b6a82826001612a26565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c0e5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016114c6565b5060008051602061359383398151915290565b603854610100900460ff1615808015611c415750603854600160ff909116105b80611c5b5750303b158015611c5b575060385460ff166001145b611cbe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016114c6565b6038805460ff191660011790558015611ce1576038805461ff0019166101001790555b600080516020613593833981519152546001600160a01b03166001600160a01b0316846001600160a01b031603611d705760405162461bcd60e51b815260206004820152602d60248201527f72656769737472792073686f756c64206e6f742062652073616d65206173206960448201526c36b83632b6b2b73a30ba34b7b760991b60648201526084016114c6565b611d78612bc0565b611d8184612514565b60005b8251811015611e7e576000611dbe858381518110611da457611da4613352565b602002602001015160009081526002602052604090205490565b9050838281518110611dd257611dd2613352565b60200260200101516000141580611de857508015155b611e275760405162461bcd60e51b815260206004820152601060248201526f696e76616c6964207661726961626c6560801b60448201526064016114c6565b80600003611e6b57611e6b858381518110611e4457611e44613352565b6020026020010151858481518110611e5e57611e5e613352565b602002602001015161297d565b5080611e7681613368565b915050611d84565b5080156115e7576038805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b33611ed361295d565b6001600160a01b031614611ef95760405162461bcd60e51b81526004016114c6906132fd565b61162a60008051602061361a8339815191528261297d565b611f196129cc565b611f236000612bef565b565b33611f2e61295d565b6001600160a01b031614611f545760405162461bcd60e51b81526004016114c6906132fd565b61162a6107d7826020015190565b33611f6b61295d565b6001600160a01b031614611f915760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206135da8339815191528261297d565b33611fb261295d565b6001600160a01b031614611fd85760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206135138339815191528261297d565b6000805160206135da833981519152820361200e57611b6a81611915565b7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e7820361203e57611b6a816119cc565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b820361206e57611b6a816127cf565b6000805160206134d3833981519152820361208c57611b6a816115ed565b6000805160206134f383398151915282036120aa57611b6a8161198f565b60008051602061353383398151915282036120c857611b6a816118d8565b60008051602061355383398151915282036120e657611b6a8161162d565b7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a22820361211657611b6a81612164565b7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc820361214657611b6a816126fd565b60008051602061361a8339815191528203611b6a57611b6a81611952565b3361216d61295d565b6001600160a01b0316146121935760405162461bcd60e51b81526004016114c6906132fd565b60208101516040820151606083015160808401516121b384848484611497565b5050505050565b336121c361295d565b6001600160a01b0316146121e95760405162461bcd60e51b81526004016114c6906132fd565b8082111561225f5760405162461bcd60e51b815260206004820152603e60248201527f4d696e696d756d207374616b696e67206d75737420626520736d616c6c65722060448201527f616e6420657175616c207468616e206d6178696d756d207374616b696e67000060648201526084016114c6565b6122776000805160206135738339815191528361297d565b611b6a6000805160206134b38339815191528261297d565b60007f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a22830361231a57600080600080858060200190518101906122d29190613381565b9350935093509350612710818385876122eb919061333a565b6122f5919061333a565b6122ff919061333a565b146123115760009450505050506123e8565b505050506123e4565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b83148061236757507fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e783145b156123a1576000808380602001905181019061238391906133b7565b915091508082111561239a576000925050506123e8565b50506123e4565b6000805160206134f383398151915283036123e4576000828060200190518101906123cc91906133db565b90506103e88110156123e25760009150506123e8565b505b5060015b92915050565b600081815260036020526040902080546060919061240b906133f4565b80601f0160208091040260200160405190810160405280929190818152602001828054612437906133f4565b80156124845780601f1061245957610100808354040283529160200191612484565b820191906000526020600020905b81548152906001019060200180831161246757829003601f168201915b50505050509050919050565b3361249961295d565b6001600160a01b0316146124bf5760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206135fa8339815191528261297d565b336124e061295d565b6001600160a01b0316146125065760405162461bcd60e51b81526004016114c6906132fd565b61162a610ebf826020015190565b61251c6129cc565b6001600160a01b0381166125725760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016114c6565b609d80546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b60026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa690546000805160206134b383398151915260009081527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54909182915b915091509091565b3361262f61295d565b6001600160a01b0316146126555760405162461bcd60e51b81526004016114c6906132fd565b808211156126cd576040805162461bcd60e51b81526020600482015260248101919091527f4d696e696d756d206475726174696f6e206d75737420626520736d616c6c657260448201527f20616e6420657175616c207468616e206d6178696d756d206475726174696f6e60648201526084016114c6565b6126e56000805160206135fa8339815191528361297d565b611b6a6000805160206135138339815191528261297d565b3361270661295d565b6001600160a01b03161461272c5760405162461bcd60e51b81526004016114c6906132fd565b60208101516040820151606083015160808401516121b38484848461166a565b600081815260056020526040902080546060919061240b906133f4565b60026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a401755460008051602061351383398151915260009081527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b549091829161261e565b336127d861295d565b6001600160a01b0316146127fe5760405162461bcd60e51b81526004016114c6906132fd565b60208101516040820151611a0f82826121ba565b3361281b61295d565b6001600160a01b0316146128415760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206135538339815191528261297d565b6128616129cc565b6001600160a01b0381166128c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016114c6565b61162a81612bef565b336128d861295d565b6001600160a01b0316146128fe5760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206134d38339815191528261297d565b3361291f61295d565b6001600160a01b0316146129455760405162461bcd60e51b81526004016114c6906132fd565b61162a6000805160206134b38339815191528261297d565b60006114927111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612c41565b6000828152600260205260409020819055817f58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612826040516129c091815260200190565b60405180910390a25050565b606b546001600160a01b03163314611f235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016114c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612a5957611a0f83612caf565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ab3575060408051601f3d908101601f19168201909252612ab0918101906133db565b60015b612b165760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016114c6565b6000805160206135938339815191528114612b855760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016114c6565b50611a0f838383612d4b565b33612b9a61295d565b6001600160a01b03161461162a5760405162461bcd60e51b81526004016114c6906132fd565b603854610100900460ff16612be75760405162461bcd60e51b81526004016114c69061342e565b611f23612d70565b606b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609d54604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd90602401602060405180830381865afa158015612c8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e89190613479565b6001600160a01b0381163b612d1c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016114c6565b60008051602061359383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612d5483612da0565b600082511180612d615750805b15611a0f576115e78383612de0565b603854610100900460ff16612d975760405162461bcd60e51b81526004016114c69061342e565b611f2333612bef565b612da981612caf565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612e0583836040518060600160405280602781526020016135b360279139612e0c565b9392505050565b60606001600160a01b0384163b612e745760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016114c6565b600080856001600160a01b031685604051612e8f9190613496565b600060405180830381855af49150503d8060008114612eca576040519150601f19603f3d011682016040523d82523d6000602084013e612ecf565b606091505b5091509150612edf828286612ee9565b9695505050505050565b60608315612ef8575081612e05565b825115612f085782518084602001fd5b8160405162461bcd60e51b81526004016114c691906132ea565b60008060008060808587031215612f3857600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612f9357612f93612f54565b604052919050565b600082601f830112612fac57600080fd5b813567ffffffffffffffff811115612fc657612fc6612f54565b612fd9601f8201601f1916602001612f6a565b818152846020838601011115612fee57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561301d57600080fd5b813567ffffffffffffffff81111561303457600080fd5b61304084828501612f9b565b949350505050565b60006020828403121561305a57600080fd5b5035919050565b6001600160a01b038116811461162a57600080fd5b60006020828403121561308857600080fd5b8135612e0581613061565b600080604083850312156130a657600080fd5b82356130b181613061565b9150602083013567ffffffffffffffff8111156130cd57600080fd5b6130d985828601612f9b565b9150509250929050565b600067ffffffffffffffff8211156130fd576130fd612f54565b5060051b60200190565b600082601f83011261311857600080fd5b8135602061312d613128836130e3565b612f6a565b82815260059290921b8401810191818101908684111561314c57600080fd5b8286015b848110156131675780358352918301918301613150565b509695505050505050565b60008060006060848603121561318757600080fd5b833561319281613061565b925060208481013567ffffffffffffffff808211156131b057600080fd5b818701915087601f8301126131c457600080fd5b81356131d2613128826130e3565b81815260059190911b8301840190848101908a8311156131f157600080fd5b938501935b8285101561320f578435825293850193908501906131f6565b96505050604087013592508083111561322757600080fd5b505061323586828701613107565b9150509250925092565b6000806040838503121561325257600080fd5b82359150602083013567ffffffffffffffff8111156130cd57600080fd5b6000806040838503121561328357600080fd5b50508035926020909101359150565b60005b838110156132ad578181015183820152602001613295565b838111156115e75750506000910152565b600081518084526132d6816020860160208601613292565b601f01601f19169290920160200192915050565b602081526000612e0560208301846132be565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561334d5761334d613324565b500190565b634e487b7160e01b600052603260045260246000fd5b60006001820161337a5761337a613324565b5060010190565b6000806000806080858703121561339757600080fd5b505082516020840151604085015160609095015191969095509092509050565b600080604083850312156133ca57600080fd5b505080516020909101519092909150565b6000602082840312156133ed57600080fd5b5051919050565b600181811c9082168061340857607f821691505b60208210810361342857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561348b57600080fd5b8151612e0581613061565b600082516134a8818460208701613292565b919091019291505056fe18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb8829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b80578086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c10c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c3be90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65642a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd2c69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2fa2646970667358221220a6ac80bb4700a43754fde07954a1f0033c71e97b16822cfca16e543a7eff568164736f6c634300080e0033", -} - -// EnvStorageImpABI is the input ABI used to generate the binding from. -// Deprecated: Use EnvStorageImpMetaData.ABI instead. -var EnvStorageImpABI = EnvStorageImpMetaData.ABI - -// Deprecated: Use EnvStorageImpMetaData.Sigs instead. -// EnvStorageImpFuncSigs maps the 4-byte function signature to its string representation. -var EnvStorageImpFuncSigs = EnvStorageImpMetaData.Sigs - -// EnvStorageImpBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use EnvStorageImpMetaData.Bin instead. -var EnvStorageImpBin = EnvStorageImpMetaData.Bin - -// DeployEnvStorageImp deploys a new Ethereum contract, binding an instance of EnvStorageImp to it. -func DeployEnvStorageImp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EnvStorageImp, error) { - parsed, err := EnvStorageImpMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EnvStorageImpBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &EnvStorageImp{EnvStorageImpCaller: EnvStorageImpCaller{contract: contract}, EnvStorageImpTransactor: EnvStorageImpTransactor{contract: contract}, EnvStorageImpFilterer: EnvStorageImpFilterer{contract: contract}}, nil -} - -// EnvStorageImp is an auto generated Go binding around an Ethereum contract. -type EnvStorageImp struct { - EnvStorageImpCaller // Read-only binding to the contract - EnvStorageImpTransactor // Write-only binding to the contract - EnvStorageImpFilterer // Log filterer for contract events -} - -// EnvStorageImpCaller is an auto generated read-only Go binding around an Ethereum contract. -type EnvStorageImpCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// EnvStorageImpTransactor is an auto generated write-only Go binding around an Ethereum contract. -type EnvStorageImpTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// EnvStorageImpFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type EnvStorageImpFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// EnvStorageImpSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type EnvStorageImpSession struct { - Contract *EnvStorageImp // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// EnvStorageImpCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type EnvStorageImpCallerSession struct { - Contract *EnvStorageImpCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// EnvStorageImpTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type EnvStorageImpTransactorSession struct { - Contract *EnvStorageImpTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// EnvStorageImpRaw is an auto generated low-level Go binding around an Ethereum contract. -type EnvStorageImpRaw struct { - Contract *EnvStorageImp // Generic contract binding to access the raw methods on -} - -// EnvStorageImpCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type EnvStorageImpCallerRaw struct { - Contract *EnvStorageImpCaller // Generic read-only contract binding to access the raw methods on -} - -// EnvStorageImpTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type EnvStorageImpTransactorRaw struct { - Contract *EnvStorageImpTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewEnvStorageImp creates a new instance of EnvStorageImp, bound to a specific deployed contract. -func NewEnvStorageImp(address common.Address, backend bind.ContractBackend) (*EnvStorageImp, error) { - contract, err := bindEnvStorageImp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &EnvStorageImp{EnvStorageImpCaller: EnvStorageImpCaller{contract: contract}, EnvStorageImpTransactor: EnvStorageImpTransactor{contract: contract}, EnvStorageImpFilterer: EnvStorageImpFilterer{contract: contract}}, nil -} - -// NewEnvStorageImpCaller creates a new read-only instance of EnvStorageImp, bound to a specific deployed contract. -func NewEnvStorageImpCaller(address common.Address, caller bind.ContractCaller) (*EnvStorageImpCaller, error) { - contract, err := bindEnvStorageImp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &EnvStorageImpCaller{contract: contract}, nil -} - -// NewEnvStorageImpTransactor creates a new write-only instance of EnvStorageImp, bound to a specific deployed contract. -func NewEnvStorageImpTransactor(address common.Address, transactor bind.ContractTransactor) (*EnvStorageImpTransactor, error) { - contract, err := bindEnvStorageImp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &EnvStorageImpTransactor{contract: contract}, nil -} - -// NewEnvStorageImpFilterer creates a new log filterer instance of EnvStorageImp, bound to a specific deployed contract. -func NewEnvStorageImpFilterer(address common.Address, filterer bind.ContractFilterer) (*EnvStorageImpFilterer, error) { - contract, err := bindEnvStorageImp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &EnvStorageImpFilterer{contract: contract}, nil -} - -// bindEnvStorageImp binds a generic wrapper to an already deployed contract. -func bindEnvStorageImp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(EnvStorageImpABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_EnvStorageImp *EnvStorageImpRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _EnvStorageImp.Contract.EnvStorageImpCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_EnvStorageImp *EnvStorageImpRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EnvStorageImp.Contract.EnvStorageImpTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_EnvStorageImp *EnvStorageImpRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _EnvStorageImp.Contract.EnvStorageImpTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_EnvStorageImp *EnvStorageImpCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _EnvStorageImp.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_EnvStorageImp *EnvStorageImpTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EnvStorageImp.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_EnvStorageImp *EnvStorageImpTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _EnvStorageImp.Contract.contract.Transact(opts, method, params...) -} - -// BALLOTDURATIONMAXNAME is a free data retrieval call binding the contract method 0x0015a73b. -// -// Solidity: function BALLOT_DURATION_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BALLOTDURATIONMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BALLOT_DURATION_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTDURATIONMAXNAME is a free data retrieval call binding the contract method 0x0015a73b. -// -// Solidity: function BALLOT_DURATION_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BALLOTDURATIONMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTDURATIONMAXNAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTDURATIONMAXNAME is a free data retrieval call binding the contract method 0x0015a73b. -// -// Solidity: function BALLOT_DURATION_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BALLOTDURATIONMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTDURATIONMAXNAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTDURATIONMINMAXNAME is a free data retrieval call binding the contract method 0x656e3052. -// -// Solidity: function BALLOT_DURATION_MIN_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BALLOTDURATIONMINMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BALLOT_DURATION_MIN_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTDURATIONMINMAXNAME is a free data retrieval call binding the contract method 0x656e3052. -// -// Solidity: function BALLOT_DURATION_MIN_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BALLOTDURATIONMINMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTDURATIONMINMAXNAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTDURATIONMINMAXNAME is a free data retrieval call binding the contract method 0x656e3052. -// -// Solidity: function BALLOT_DURATION_MIN_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BALLOTDURATIONMINMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTDURATIONMINMAXNAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTDURATIONMINNAME is a free data retrieval call binding the contract method 0x6d583ca7. -// -// Solidity: function BALLOT_DURATION_MIN_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BALLOTDURATIONMINNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BALLOT_DURATION_MIN_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTDURATIONMINNAME is a free data retrieval call binding the contract method 0x6d583ca7. -// -// Solidity: function BALLOT_DURATION_MIN_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BALLOTDURATIONMINNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTDURATIONMINNAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTDURATIONMINNAME is a free data retrieval call binding the contract method 0x6d583ca7. -// -// Solidity: function BALLOT_DURATION_MIN_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BALLOTDURATIONMINNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTDURATIONMINNAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BALLOTSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BALLOT_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTSTORAGENAME(&_EnvStorageImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BALLOTSTORAGENAME(&_EnvStorageImp.CallOpts) -} - -// BASEFEEMAXCHANGERATENAME is a free data retrieval call binding the contract method 0xc42a0abc. -// -// Solidity: function BASE_FEE_MAX_CHANGE_RATE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BASEFEEMAXCHANGERATENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BASE_FEE_MAX_CHANGE_RATE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BASEFEEMAXCHANGERATENAME is a free data retrieval call binding the contract method 0xc42a0abc. -// -// Solidity: function BASE_FEE_MAX_CHANGE_RATE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BASEFEEMAXCHANGERATENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BASEFEEMAXCHANGERATENAME(&_EnvStorageImp.CallOpts) -} - -// BASEFEEMAXCHANGERATENAME is a free data retrieval call binding the contract method 0xc42a0abc. -// -// Solidity: function BASE_FEE_MAX_CHANGE_RATE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BASEFEEMAXCHANGERATENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BASEFEEMAXCHANGERATENAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKSPERNAME is a free data retrieval call binding the contract method 0x3f35c8fe. -// -// Solidity: function BLOCKS_PER_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKSPERNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCKS_PER_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKSPERNAME is a free data retrieval call binding the contract method 0x3f35c8fe. -// -// Solidity: function BLOCKS_PER_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKSPERNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKSPERNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKSPERNAME is a free data retrieval call binding the contract method 0x3f35c8fe. -// -// Solidity: function BLOCKS_PER_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKSPERNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKSPERNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKCREATIONTIMENAME is a free data retrieval call binding the contract method 0xc0b4fe15. -// -// Solidity: function BLOCK_CREATION_TIME_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKCREATIONTIMENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_CREATION_TIME_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKCREATIONTIMENAME is a free data retrieval call binding the contract method 0xc0b4fe15. -// -// Solidity: function BLOCK_CREATION_TIME_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKCREATIONTIMENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKCREATIONTIMENAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKCREATIONTIMENAME is a free data retrieval call binding the contract method 0xc0b4fe15. -// -// Solidity: function BLOCK_CREATION_TIME_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKCREATIONTIMENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKCREATIONTIMENAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKGASLIMITNAME is a free data retrieval call binding the contract method 0x238737b6. -// -// Solidity: function BLOCK_GASLIMIT_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKGASLIMITNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_GASLIMIT_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKGASLIMITNAME is a free data retrieval call binding the contract method 0x238737b6. -// -// Solidity: function BLOCK_GASLIMIT_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKGASLIMITNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKGASLIMITNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKGASLIMITNAME is a free data retrieval call binding the contract method 0x238737b6. -// -// Solidity: function BLOCK_GASLIMIT_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKGASLIMITNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKGASLIMITNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDAMOUNTNAME is a free data retrieval call binding the contract method 0xa9b629b2. -// -// Solidity: function BLOCK_REWARD_AMOUNT_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKREWARDAMOUNTNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_REWARD_AMOUNT_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDAMOUNTNAME is a free data retrieval call binding the contract method 0xa9b629b2. -// -// Solidity: function BLOCK_REWARD_AMOUNT_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKREWARDAMOUNTNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDAMOUNTNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDAMOUNTNAME is a free data retrieval call binding the contract method 0xa9b629b2. -// -// Solidity: function BLOCK_REWARD_AMOUNT_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKREWARDAMOUNTNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDAMOUNTNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME is a free data retrieval call binding the contract method 0xc6713baf. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME is a free data retrieval call binding the contract method 0xc6713baf. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME is a free data retrieval call binding the contract method 0xc6713baf. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME is a free data retrieval call binding the contract method 0x7b2bfb01. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME is a free data retrieval call binding the contract method 0x7b2bfb01. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME is a free data retrieval call binding the contract method 0x7b2bfb01. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMAINTENANCENAME is a free data retrieval call binding the contract method 0x46946416. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKREWARDDISTRIBUTIONMAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONMAINTENANCENAME is a free data retrieval call binding the contract method 0x46946416. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKREWARDDISTRIBUTIONMAINTENANCENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONMAINTENANCENAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMAINTENANCENAME is a free data retrieval call binding the contract method 0x46946416. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKREWARDDISTRIBUTIONMAINTENANCENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONMAINTENANCENAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMETHODNAME is a free data retrieval call binding the contract method 0x278bb12a. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_METHOD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKREWARDDISTRIBUTIONMETHODNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_METHOD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONMETHODNAME is a free data retrieval call binding the contract method 0x278bb12a. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_METHOD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKREWARDDISTRIBUTIONMETHODNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONMETHODNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMETHODNAME is a free data retrieval call binding the contract method 0x278bb12a. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_METHOD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKREWARDDISTRIBUTIONMETHODNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONMETHODNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME is a free data retrieval call binding the contract method 0x6167eb45. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME is a free data retrieval call binding the contract method 0x6167eb45. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME(&_EnvStorageImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME is a free data retrieval call binding the contract method 0x6167eb45. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME(&_EnvStorageImp.CallOpts) -} - -// DENOMINATOR is a free data retrieval call binding the contract method 0x918f8674. -// -// Solidity: function DENOMINATOR() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) DENOMINATOR(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "DENOMINATOR") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// DENOMINATOR is a free data retrieval call binding the contract method 0x918f8674. -// -// Solidity: function DENOMINATOR() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) DENOMINATOR() (*big.Int, error) { - return _EnvStorageImp.Contract.DENOMINATOR(&_EnvStorageImp.CallOpts) -} - -// DENOMINATOR is a free data retrieval call binding the contract method 0x918f8674. -// -// Solidity: function DENOMINATOR() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) DENOMINATOR() (*big.Int, error) { - return _EnvStorageImp.Contract.DENOMINATOR(&_EnvStorageImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) ECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) ECOSYSTEMNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.ECOSYSTEMNAME(&_EnvStorageImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) ECOSYSTEMNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.ECOSYSTEMNAME(&_EnvStorageImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) ENVSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "ENV_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) ENVSTORAGENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.ENVSTORAGENAME(&_EnvStorageImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) ENVSTORAGENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.ENVSTORAGENAME(&_EnvStorageImp.CallOpts) -} - -// GASLIMITANDBASEFEENAME is a free data retrieval call binding the contract method 0xc7d3da34. -// -// Solidity: function GASLIMIT_AND_BASE_FEE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) GASLIMITANDBASEFEENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "GASLIMIT_AND_BASE_FEE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GASLIMITANDBASEFEENAME is a free data retrieval call binding the contract method 0xc7d3da34. -// -// Solidity: function GASLIMIT_AND_BASE_FEE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) GASLIMITANDBASEFEENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.GASLIMITANDBASEFEENAME(&_EnvStorageImp.CallOpts) -} - -// GASLIMITANDBASEFEENAME is a free data retrieval call binding the contract method 0xc7d3da34. -// -// Solidity: function GASLIMIT_AND_BASE_FEE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) GASLIMITANDBASEFEENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.GASLIMITANDBASEFEENAME(&_EnvStorageImp.CallOpts) -} - -// GASTARGETPERCENTAGENAME is a free data retrieval call binding the contract method 0x4d273e28. -// -// Solidity: function GAS_TARGET_PERCENTAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) GASTARGETPERCENTAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "GAS_TARGET_PERCENTAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GASTARGETPERCENTAGENAME is a free data retrieval call binding the contract method 0x4d273e28. -// -// Solidity: function GAS_TARGET_PERCENTAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) GASTARGETPERCENTAGENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.GASTARGETPERCENTAGENAME(&_EnvStorageImp.CallOpts) -} - -// GASTARGETPERCENTAGENAME is a free data retrieval call binding the contract method 0x4d273e28. -// -// Solidity: function GAS_TARGET_PERCENTAGE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) GASTARGETPERCENTAGENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.GASTARGETPERCENTAGENAME(&_EnvStorageImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) GOVNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "GOV_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) GOVNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.GOVNAME(&_EnvStorageImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) GOVNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.GOVNAME(&_EnvStorageImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) MAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) MAINTENANCENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAINTENANCENAME(&_EnvStorageImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) MAINTENANCENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAINTENANCENAME(&_EnvStorageImp.CallOpts) -} - -// MAXBASEFEENAME is a free data retrieval call binding the contract method 0xf38ecf47. -// -// Solidity: function MAX_BASE_FEE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) MAXBASEFEENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "MAX_BASE_FEE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXBASEFEENAME is a free data retrieval call binding the contract method 0xf38ecf47. -// -// Solidity: function MAX_BASE_FEE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) MAXBASEFEENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAXBASEFEENAME(&_EnvStorageImp.CallOpts) -} - -// MAXBASEFEENAME is a free data retrieval call binding the contract method 0xf38ecf47. -// -// Solidity: function MAX_BASE_FEE_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) MAXBASEFEENAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAXBASEFEENAME(&_EnvStorageImp.CallOpts) -} - -// MAXIDLEBLOCKINTERVALNAME is a free data retrieval call binding the contract method 0xb128f880. -// -// Solidity: function MAX_IDLE_BLOCK_INTERVAL_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) MAXIDLEBLOCKINTERVALNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "MAX_IDLE_BLOCK_INTERVAL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXIDLEBLOCKINTERVALNAME is a free data retrieval call binding the contract method 0xb128f880. -// -// Solidity: function MAX_IDLE_BLOCK_INTERVAL_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) MAXIDLEBLOCKINTERVALNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAXIDLEBLOCKINTERVALNAME(&_EnvStorageImp.CallOpts) -} - -// MAXIDLEBLOCKINTERVALNAME is a free data retrieval call binding the contract method 0xb128f880. -// -// Solidity: function MAX_IDLE_BLOCK_INTERVAL_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) MAXIDLEBLOCKINTERVALNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAXIDLEBLOCKINTERVALNAME(&_EnvStorageImp.CallOpts) -} - -// MAXPRIORITYFEEPERGASNAME is a free data retrieval call binding the contract method 0x38294419. -// -// Solidity: function MAX_PRIORITY_FEE_PER_GAS_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) MAXPRIORITYFEEPERGASNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "MAX_PRIORITY_FEE_PER_GAS_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXPRIORITYFEEPERGASNAME is a free data retrieval call binding the contract method 0x38294419. -// -// Solidity: function MAX_PRIORITY_FEE_PER_GAS_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) MAXPRIORITYFEEPERGASNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAXPRIORITYFEEPERGASNAME(&_EnvStorageImp.CallOpts) -} - -// MAXPRIORITYFEEPERGASNAME is a free data retrieval call binding the contract method 0x38294419. -// -// Solidity: function MAX_PRIORITY_FEE_PER_GAS_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) MAXPRIORITYFEEPERGASNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.MAXPRIORITYFEEPERGASNAME(&_EnvStorageImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) REWARDPOOLNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "REWARD_POOL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) REWARDPOOLNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.REWARDPOOLNAME(&_EnvStorageImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) REWARDPOOLNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.REWARDPOOLNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGMAXNAME is a free data retrieval call binding the contract method 0xc00ace6c. -// -// Solidity: function STAKING_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) STAKINGMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "STAKING_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMAXNAME is a free data retrieval call binding the contract method 0xc00ace6c. -// -// Solidity: function STAKING_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) STAKINGMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGMAXNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGMAXNAME is a free data retrieval call binding the contract method 0xc00ace6c. -// -// Solidity: function STAKING_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) STAKINGMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGMAXNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGMINMAXNAME is a free data retrieval call binding the contract method 0xa6868b7d. -// -// Solidity: function STAKING_MIN_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) STAKINGMINMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "STAKING_MIN_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMINMAXNAME is a free data retrieval call binding the contract method 0xa6868b7d. -// -// Solidity: function STAKING_MIN_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) STAKINGMINMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGMINMAXNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGMINMAXNAME is a free data retrieval call binding the contract method 0xa6868b7d. -// -// Solidity: function STAKING_MIN_MAX_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) STAKINGMINMAXNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGMINMAXNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGMINNAME is a free data retrieval call binding the contract method 0x6fde207a. -// -// Solidity: function STAKING_MIN_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) STAKINGMINNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "STAKING_MIN_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMINNAME is a free data retrieval call binding the contract method 0x6fde207a. -// -// Solidity: function STAKING_MIN_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) STAKINGMINNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGMINNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGMINNAME is a free data retrieval call binding the contract method 0x6fde207a. -// -// Solidity: function STAKING_MIN_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) STAKINGMINNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGMINNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) STAKINGNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "STAKING_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) STAKINGNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) STAKINGNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) STAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) STAKINGREWARDNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGREWARDNAME(&_EnvStorageImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) STAKINGREWARDNAME() ([32]byte, error) { - return _EnvStorageImp.Contract.STAKINGREWARDNAME(&_EnvStorageImp.CallOpts) -} - -// CheckVariableCondition is a free data retrieval call binding the contract method 0x9801bff9. -// -// Solidity: function checkVariableCondition(bytes32 envKey, bytes envVal) pure returns(bool) -func (_EnvStorageImp *EnvStorageImpCaller) CheckVariableCondition(opts *bind.CallOpts, envKey [32]byte, envVal []byte) (bool, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "checkVariableCondition", envKey, envVal) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// CheckVariableCondition is a free data retrieval call binding the contract method 0x9801bff9. -// -// Solidity: function checkVariableCondition(bytes32 envKey, bytes envVal) pure returns(bool) -func (_EnvStorageImp *EnvStorageImpSession) CheckVariableCondition(envKey [32]byte, envVal []byte) (bool, error) { - return _EnvStorageImp.Contract.CheckVariableCondition(&_EnvStorageImp.CallOpts, envKey, envVal) -} - -// CheckVariableCondition is a free data retrieval call binding the contract method 0x9801bff9. -// -// Solidity: function checkVariableCondition(bytes32 envKey, bytes envVal) pure returns(bool) -func (_EnvStorageImp *EnvStorageImpCallerSession) CheckVariableCondition(envKey [32]byte, envVal []byte) (bool, error) { - return _EnvStorageImp.Contract.CheckVariableCondition(&_EnvStorageImp.CallOpts, envKey, envVal) -} - -// GetAddress is a free data retrieval call binding the contract method 0x21f8a721. -// -// Solidity: function getAddress(bytes32 h) view returns(address) -func (_EnvStorageImp *EnvStorageImpCaller) GetAddress(opts *bind.CallOpts, h [32]byte) (common.Address, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getAddress", h) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetAddress is a free data retrieval call binding the contract method 0x21f8a721. -// -// Solidity: function getAddress(bytes32 h) view returns(address) -func (_EnvStorageImp *EnvStorageImpSession) GetAddress(h [32]byte) (common.Address, error) { - return _EnvStorageImp.Contract.GetAddress(&_EnvStorageImp.CallOpts, h) -} - -// GetAddress is a free data retrieval call binding the contract method 0x21f8a721. -// -// Solidity: function getAddress(bytes32 h) view returns(address) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetAddress(h [32]byte) (common.Address, error) { - return _EnvStorageImp.Contract.GetAddress(&_EnvStorageImp.CallOpts, h) -} - -// GetBallotDurationMax is a free data retrieval call binding the contract method 0x1b27e01b. -// -// Solidity: function getBallotDurationMax() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBallotDurationMax(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBallotDurationMax") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBallotDurationMax is a free data retrieval call binding the contract method 0x1b27e01b. -// -// Solidity: function getBallotDurationMax() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBallotDurationMax() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBallotDurationMax(&_EnvStorageImp.CallOpts) -} - -// GetBallotDurationMax is a free data retrieval call binding the contract method 0x1b27e01b. -// -// Solidity: function getBallotDurationMax() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBallotDurationMax() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBallotDurationMax(&_EnvStorageImp.CallOpts) -} - -// GetBallotDurationMin is a free data retrieval call binding the contract method 0x33be496e. -// -// Solidity: function getBallotDurationMin() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBallotDurationMin(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBallotDurationMin") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBallotDurationMin is a free data retrieval call binding the contract method 0x33be496e. -// -// Solidity: function getBallotDurationMin() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBallotDurationMin() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBallotDurationMin(&_EnvStorageImp.CallOpts) -} - -// GetBallotDurationMin is a free data retrieval call binding the contract method 0x33be496e. -// -// Solidity: function getBallotDurationMin() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBallotDurationMin() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBallotDurationMin(&_EnvStorageImp.CallOpts) -} - -// GetBallotDurationMinMax is a free data retrieval call binding the contract method 0xcdb9f643. -// -// Solidity: function getBallotDurationMinMax() view returns(uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBallotDurationMinMax(opts *bind.CallOpts) (*big.Int, *big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBallotDurationMinMax") - - if err != nil { - return *new(*big.Int), *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - - return out0, out1, err - -} - -// GetBallotDurationMinMax is a free data retrieval call binding the contract method 0xcdb9f643. -// -// Solidity: function getBallotDurationMinMax() view returns(uint256, uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBallotDurationMinMax() (*big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetBallotDurationMinMax(&_EnvStorageImp.CallOpts) -} - -// GetBallotDurationMinMax is a free data retrieval call binding the contract method 0xcdb9f643. -// -// Solidity: function getBallotDurationMinMax() view returns(uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBallotDurationMinMax() (*big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetBallotDurationMinMax(&_EnvStorageImp.CallOpts) -} - -// GetBlockCreationTime is a free data retrieval call binding the contract method 0x33e31184. -// -// Solidity: function getBlockCreationTime() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBlockCreationTime(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBlockCreationTime") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBlockCreationTime is a free data retrieval call binding the contract method 0x33e31184. -// -// Solidity: function getBlockCreationTime() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBlockCreationTime() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBlockCreationTime(&_EnvStorageImp.CallOpts) -} - -// GetBlockCreationTime is a free data retrieval call binding the contract method 0x33e31184. -// -// Solidity: function getBlockCreationTime() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBlockCreationTime() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBlockCreationTime(&_EnvStorageImp.CallOpts) -} - -// GetBlockRewardAmount is a free data retrieval call binding the contract method 0x5dba8c4a. -// -// Solidity: function getBlockRewardAmount() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBlockRewardAmount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBlockRewardAmount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBlockRewardAmount is a free data retrieval call binding the contract method 0x5dba8c4a. -// -// Solidity: function getBlockRewardAmount() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBlockRewardAmount() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBlockRewardAmount(&_EnvStorageImp.CallOpts) -} - -// GetBlockRewardAmount is a free data retrieval call binding the contract method 0x5dba8c4a. -// -// Solidity: function getBlockRewardAmount() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBlockRewardAmount() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBlockRewardAmount(&_EnvStorageImp.CallOpts) -} - -// GetBlockRewardDistributionMethod is a free data retrieval call binding the contract method 0x8f6fe725. -// -// Solidity: function getBlockRewardDistributionMethod() view returns(uint256, uint256, uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBlockRewardDistributionMethod(opts *bind.CallOpts) (*big.Int, *big.Int, *big.Int, *big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBlockRewardDistributionMethod") - - if err != nil { - return *new(*big.Int), *new(*big.Int), *new(*big.Int), *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - - return out0, out1, out2, out3, err - -} - -// GetBlockRewardDistributionMethod is a free data retrieval call binding the contract method 0x8f6fe725. -// -// Solidity: function getBlockRewardDistributionMethod() view returns(uint256, uint256, uint256, uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBlockRewardDistributionMethod() (*big.Int, *big.Int, *big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetBlockRewardDistributionMethod(&_EnvStorageImp.CallOpts) -} - -// GetBlockRewardDistributionMethod is a free data retrieval call binding the contract method 0x8f6fe725. -// -// Solidity: function getBlockRewardDistributionMethod() view returns(uint256, uint256, uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBlockRewardDistributionMethod() (*big.Int, *big.Int, *big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetBlockRewardDistributionMethod(&_EnvStorageImp.CallOpts) -} - -// GetBlocksPer is a free data retrieval call binding the contract method 0x3690057a. -// -// Solidity: function getBlocksPer() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetBlocksPer(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBlocksPer") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBlocksPer is a free data retrieval call binding the contract method 0x3690057a. -// -// Solidity: function getBlocksPer() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetBlocksPer() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBlocksPer(&_EnvStorageImp.CallOpts) -} - -// GetBlocksPer is a free data retrieval call binding the contract method 0x3690057a. -// -// Solidity: function getBlocksPer() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBlocksPer() (*big.Int, error) { - return _EnvStorageImp.Contract.GetBlocksPer(&_EnvStorageImp.CallOpts) -} - -// GetBoolean is a free data retrieval call binding the contract method 0x3848207a. -// -// Solidity: function getBoolean(bytes32 h) view returns(bool) -func (_EnvStorageImp *EnvStorageImpCaller) GetBoolean(opts *bind.CallOpts, h [32]byte) (bool, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBoolean", h) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// GetBoolean is a free data retrieval call binding the contract method 0x3848207a. -// -// Solidity: function getBoolean(bytes32 h) view returns(bool) -func (_EnvStorageImp *EnvStorageImpSession) GetBoolean(h [32]byte) (bool, error) { - return _EnvStorageImp.Contract.GetBoolean(&_EnvStorageImp.CallOpts, h) -} - -// GetBoolean is a free data retrieval call binding the contract method 0x3848207a. -// -// Solidity: function getBoolean(bytes32 h) view returns(bool) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBoolean(h [32]byte) (bool, error) { - return _EnvStorageImp.Contract.GetBoolean(&_EnvStorageImp.CallOpts, h) -} - -// GetBytes is a free data retrieval call binding the contract method 0xc031a180. -// -// Solidity: function getBytes(bytes32 h) view returns(bytes) -func (_EnvStorageImp *EnvStorageImpCaller) GetBytes(opts *bind.CallOpts, h [32]byte) ([]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBytes", h) - - if err != nil { - return *new([]byte), err - } - - out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) - - return out0, err - -} - -// GetBytes is a free data retrieval call binding the contract method 0xc031a180. -// -// Solidity: function getBytes(bytes32 h) view returns(bytes) -func (_EnvStorageImp *EnvStorageImpSession) GetBytes(h [32]byte) ([]byte, error) { - return _EnvStorageImp.Contract.GetBytes(&_EnvStorageImp.CallOpts, h) -} - -// GetBytes is a free data retrieval call binding the contract method 0xc031a180. -// -// Solidity: function getBytes(bytes32 h) view returns(bytes) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBytes(h [32]byte) ([]byte, error) { - return _EnvStorageImp.Contract.GetBytes(&_EnvStorageImp.CallOpts, h) -} - -// GetBytes32 is a free data retrieval call binding the contract method 0xa6ed563e. -// -// Solidity: function getBytes32(bytes32 h) view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) GetBytes32(opts *bind.CallOpts, h [32]byte) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getBytes32", h) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetBytes32 is a free data retrieval call binding the contract method 0xa6ed563e. -// -// Solidity: function getBytes32(bytes32 h) view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) GetBytes32(h [32]byte) ([32]byte, error) { - return _EnvStorageImp.Contract.GetBytes32(&_EnvStorageImp.CallOpts, h) -} - -// GetBytes32 is a free data retrieval call binding the contract method 0xa6ed563e. -// -// Solidity: function getBytes32(bytes32 h) view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetBytes32(h [32]byte) ([32]byte, error) { - return _EnvStorageImp.Contract.GetBytes32(&_EnvStorageImp.CallOpts, h) -} - -// GetGasLimitAndBaseFee is a free data retrieval call binding the contract method 0x67d1a2e0. -// -// Solidity: function getGasLimitAndBaseFee() view returns(uint256, uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetGasLimitAndBaseFee(opts *bind.CallOpts) (*big.Int, *big.Int, *big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getGasLimitAndBaseFee") - - if err != nil { - return *new(*big.Int), *new(*big.Int), *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - - return out0, out1, out2, err - -} - -// GetGasLimitAndBaseFee is a free data retrieval call binding the contract method 0x67d1a2e0. -// -// Solidity: function getGasLimitAndBaseFee() view returns(uint256, uint256, uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetGasLimitAndBaseFee() (*big.Int, *big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetGasLimitAndBaseFee(&_EnvStorageImp.CallOpts) -} - -// GetGasLimitAndBaseFee is a free data retrieval call binding the contract method 0x67d1a2e0. -// -// Solidity: function getGasLimitAndBaseFee() view returns(uint256, uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetGasLimitAndBaseFee() (*big.Int, *big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetGasLimitAndBaseFee(&_EnvStorageImp.CallOpts) -} - -// GetInt is a free data retrieval call binding the contract method 0xdc97d962. -// -// Solidity: function getInt(bytes32 h) view returns(int256) -func (_EnvStorageImp *EnvStorageImpCaller) GetInt(opts *bind.CallOpts, h [32]byte) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getInt", h) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetInt is a free data retrieval call binding the contract method 0xdc97d962. -// -// Solidity: function getInt(bytes32 h) view returns(int256) -func (_EnvStorageImp *EnvStorageImpSession) GetInt(h [32]byte) (*big.Int, error) { - return _EnvStorageImp.Contract.GetInt(&_EnvStorageImp.CallOpts, h) -} - -// GetInt is a free data retrieval call binding the contract method 0xdc97d962. -// -// Solidity: function getInt(bytes32 h) view returns(int256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetInt(h [32]byte) (*big.Int, error) { - return _EnvStorageImp.Contract.GetInt(&_EnvStorageImp.CallOpts, h) -} - -// GetMaxBaseFee is a free data retrieval call binding the contract method 0xc95437be. -// -// Solidity: function getMaxBaseFee() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetMaxBaseFee(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getMaxBaseFee") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxBaseFee is a free data retrieval call binding the contract method 0xc95437be. -// -// Solidity: function getMaxBaseFee() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetMaxBaseFee() (*big.Int, error) { - return _EnvStorageImp.Contract.GetMaxBaseFee(&_EnvStorageImp.CallOpts) -} - -// GetMaxBaseFee is a free data retrieval call binding the contract method 0xc95437be. -// -// Solidity: function getMaxBaseFee() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetMaxBaseFee() (*big.Int, error) { - return _EnvStorageImp.Contract.GetMaxBaseFee(&_EnvStorageImp.CallOpts) -} - -// GetMaxIdleBlockInterval is a free data retrieval call binding the contract method 0x185582f1. -// -// Solidity: function getMaxIdleBlockInterval() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetMaxIdleBlockInterval(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getMaxIdleBlockInterval") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxIdleBlockInterval is a free data retrieval call binding the contract method 0x185582f1. -// -// Solidity: function getMaxIdleBlockInterval() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetMaxIdleBlockInterval() (*big.Int, error) { - return _EnvStorageImp.Contract.GetMaxIdleBlockInterval(&_EnvStorageImp.CallOpts) -} - -// GetMaxIdleBlockInterval is a free data retrieval call binding the contract method 0x185582f1. -// -// Solidity: function getMaxIdleBlockInterval() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetMaxIdleBlockInterval() (*big.Int, error) { - return _EnvStorageImp.Contract.GetMaxIdleBlockInterval(&_EnvStorageImp.CallOpts) -} - -// GetMaxPriorityFeePerGas is a free data retrieval call binding the contract method 0x2b2eaa92. -// -// Solidity: function getMaxPriorityFeePerGas() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetMaxPriorityFeePerGas(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getMaxPriorityFeePerGas") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxPriorityFeePerGas is a free data retrieval call binding the contract method 0x2b2eaa92. -// -// Solidity: function getMaxPriorityFeePerGas() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetMaxPriorityFeePerGas() (*big.Int, error) { - return _EnvStorageImp.Contract.GetMaxPriorityFeePerGas(&_EnvStorageImp.CallOpts) -} - -// GetMaxPriorityFeePerGas is a free data retrieval call binding the contract method 0x2b2eaa92. -// -// Solidity: function getMaxPriorityFeePerGas() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetMaxPriorityFeePerGas() (*big.Int, error) { - return _EnvStorageImp.Contract.GetMaxPriorityFeePerGas(&_EnvStorageImp.CallOpts) -} - -// GetStakingMax is a free data retrieval call binding the contract method 0x737c59b8. -// -// Solidity: function getStakingMax() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetStakingMax(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getStakingMax") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingMax is a free data retrieval call binding the contract method 0x737c59b8. -// -// Solidity: function getStakingMax() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetStakingMax() (*big.Int, error) { - return _EnvStorageImp.Contract.GetStakingMax(&_EnvStorageImp.CallOpts) -} - -// GetStakingMax is a free data retrieval call binding the contract method 0x737c59b8. -// -// Solidity: function getStakingMax() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetStakingMax() (*big.Int, error) { - return _EnvStorageImp.Contract.GetStakingMax(&_EnvStorageImp.CallOpts) -} - -// GetStakingMin is a free data retrieval call binding the contract method 0x076cd77f. -// -// Solidity: function getStakingMin() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetStakingMin(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getStakingMin") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakingMin is a free data retrieval call binding the contract method 0x076cd77f. -// -// Solidity: function getStakingMin() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetStakingMin() (*big.Int, error) { - return _EnvStorageImp.Contract.GetStakingMin(&_EnvStorageImp.CallOpts) -} - -// GetStakingMin is a free data retrieval call binding the contract method 0x076cd77f. -// -// Solidity: function getStakingMin() view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetStakingMin() (*big.Int, error) { - return _EnvStorageImp.Contract.GetStakingMin(&_EnvStorageImp.CallOpts) -} - -// GetStakingMinMax is a free data retrieval call binding the contract method 0xaba01fee. -// -// Solidity: function getStakingMinMax() view returns(uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetStakingMinMax(opts *bind.CallOpts) (*big.Int, *big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getStakingMinMax") - - if err != nil { - return *new(*big.Int), *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - - return out0, out1, err - -} - -// GetStakingMinMax is a free data retrieval call binding the contract method 0xaba01fee. -// -// Solidity: function getStakingMinMax() view returns(uint256, uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetStakingMinMax() (*big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetStakingMinMax(&_EnvStorageImp.CallOpts) -} - -// GetStakingMinMax is a free data retrieval call binding the contract method 0xaba01fee. -// -// Solidity: function getStakingMinMax() view returns(uint256, uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetStakingMinMax() (*big.Int, *big.Int, error) { - return _EnvStorageImp.Contract.GetStakingMinMax(&_EnvStorageImp.CallOpts) -} - -// GetString is a free data retrieval call binding the contract method 0x986e791a. -// -// Solidity: function getString(bytes32 h) view returns(string) -func (_EnvStorageImp *EnvStorageImpCaller) GetString(opts *bind.CallOpts, h [32]byte) (string, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getString", h) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetString is a free data retrieval call binding the contract method 0x986e791a. -// -// Solidity: function getString(bytes32 h) view returns(string) -func (_EnvStorageImp *EnvStorageImpSession) GetString(h [32]byte) (string, error) { - return _EnvStorageImp.Contract.GetString(&_EnvStorageImp.CallOpts, h) -} - -// GetString is a free data retrieval call binding the contract method 0x986e791a. -// -// Solidity: function getString(bytes32 h) view returns(string) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetString(h [32]byte) (string, error) { - return _EnvStorageImp.Contract.GetString(&_EnvStorageImp.CallOpts, h) -} - -// GetUint is a free data retrieval call binding the contract method 0xbd02d0f5. -// -// Solidity: function getUint(bytes32 h) view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCaller) GetUint(opts *bind.CallOpts, h [32]byte) (*big.Int, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "getUint", h) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetUint is a free data retrieval call binding the contract method 0xbd02d0f5. -// -// Solidity: function getUint(bytes32 h) view returns(uint256) -func (_EnvStorageImp *EnvStorageImpSession) GetUint(h [32]byte) (*big.Int, error) { - return _EnvStorageImp.Contract.GetUint(&_EnvStorageImp.CallOpts, h) -} - -// GetUint is a free data retrieval call binding the contract method 0xbd02d0f5. -// -// Solidity: function getUint(bytes32 h) view returns(uint256) -func (_EnvStorageImp *EnvStorageImpCallerSession) GetUint(h [32]byte) (*big.Int, error) { - return _EnvStorageImp.Contract.GetUint(&_EnvStorageImp.CallOpts, h) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_EnvStorageImp *EnvStorageImpCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_EnvStorageImp *EnvStorageImpSession) Owner() (common.Address, error) { - return _EnvStorageImp.Contract.Owner(&_EnvStorageImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_EnvStorageImp *EnvStorageImpCallerSession) Owner() (common.Address, error) { - return _EnvStorageImp.Contract.Owner(&_EnvStorageImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "proxiableUUID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpSession) ProxiableUUID() ([32]byte, error) { - return _EnvStorageImp.Contract.ProxiableUUID(&_EnvStorageImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_EnvStorageImp *EnvStorageImpCallerSession) ProxiableUUID() ([32]byte, error) { - return _EnvStorageImp.Contract.ProxiableUUID(&_EnvStorageImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_EnvStorageImp *EnvStorageImpCaller) Reg(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _EnvStorageImp.contract.Call(opts, &out, "reg") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_EnvStorageImp *EnvStorageImpSession) Reg() (common.Address, error) { - return _EnvStorageImp.Contract.Reg(&_EnvStorageImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_EnvStorageImp *EnvStorageImpCallerSession) Reg() (common.Address, error) { - return _EnvStorageImp.Contract.Reg(&_EnvStorageImp.CallOpts) -} - -// Initialize is a paid mutator transaction binding the contract method 0x539927be. -// -// Solidity: function initialize(address _registry, bytes32[] names, uint256[] infos) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) Initialize(opts *bind.TransactOpts, _registry common.Address, names [][32]byte, infos []*big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "initialize", _registry, names, infos) -} - -// Initialize is a paid mutator transaction binding the contract method 0x539927be. -// -// Solidity: function initialize(address _registry, bytes32[] names, uint256[] infos) returns() -func (_EnvStorageImp *EnvStorageImpSession) Initialize(_registry common.Address, names [][32]byte, infos []*big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.Initialize(&_EnvStorageImp.TransactOpts, _registry, names, infos) -} - -// Initialize is a paid mutator transaction binding the contract method 0x539927be. -// -// Solidity: function initialize(address _registry, bytes32[] names, uint256[] infos) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) Initialize(_registry common.Address, names [][32]byte, infos []*big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.Initialize(&_EnvStorageImp.TransactOpts, _registry, names, infos) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_EnvStorageImp *EnvStorageImpTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_EnvStorageImp *EnvStorageImpSession) RenounceOwnership() (*types.Transaction, error) { - return _EnvStorageImp.Contract.RenounceOwnership(&_EnvStorageImp.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _EnvStorageImp.Contract.RenounceOwnership(&_EnvStorageImp.TransactOpts) -} - -// SetBallotDurationMax is a paid mutator transaction binding the contract method 0x852cf38f. -// -// Solidity: function setBallotDurationMax(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBallotDurationMax(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBallotDurationMax", _value) -} - -// SetBallotDurationMax is a paid mutator transaction binding the contract method 0x852cf38f. -// -// Solidity: function setBallotDurationMax(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBallotDurationMax(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMax(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMax is a paid mutator transaction binding the contract method 0x852cf38f. -// -// Solidity: function setBallotDurationMax(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBallotDurationMax(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMax(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMaxByBytes is a paid mutator transaction binding the contract method 0xa5d6a581. -// -// Solidity: function setBallotDurationMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBallotDurationMaxByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBallotDurationMaxByBytes", _value) -} - -// SetBallotDurationMaxByBytes is a paid mutator transaction binding the contract method 0xa5d6a581. -// -// Solidity: function setBallotDurationMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBallotDurationMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMaxByBytes is a paid mutator transaction binding the contract method 0xa5d6a581. -// -// Solidity: function setBallotDurationMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBallotDurationMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMin is a paid mutator transaction binding the contract method 0xa36f259b. -// -// Solidity: function setBallotDurationMin(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBallotDurationMin(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBallotDurationMin", _value) -} - -// SetBallotDurationMin is a paid mutator transaction binding the contract method 0xa36f259b. -// -// Solidity: function setBallotDurationMin(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBallotDurationMin(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMin(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMin is a paid mutator transaction binding the contract method 0xa36f259b. -// -// Solidity: function setBallotDurationMin(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBallotDurationMin(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMin(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMinByBytes is a paid mutator transaction binding the contract method 0x124cea37. -// -// Solidity: function setBallotDurationMinByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBallotDurationMinByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBallotDurationMinByBytes", _value) -} - -// SetBallotDurationMinByBytes is a paid mutator transaction binding the contract method 0x124cea37. -// -// Solidity: function setBallotDurationMinByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBallotDurationMinByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMinByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMinByBytes is a paid mutator transaction binding the contract method 0x124cea37. -// -// Solidity: function setBallotDurationMinByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBallotDurationMinByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMinByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMinMax is a paid mutator transaction binding the contract method 0xb4d6bd3b. -// -// Solidity: function setBallotDurationMinMax(uint256 _min, uint256 _max) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBallotDurationMinMax(opts *bind.TransactOpts, _min *big.Int, _max *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBallotDurationMinMax", _min, _max) -} - -// SetBallotDurationMinMax is a paid mutator transaction binding the contract method 0xb4d6bd3b. -// -// Solidity: function setBallotDurationMinMax(uint256 _min, uint256 _max) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBallotDurationMinMax(_min *big.Int, _max *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMinMax(&_EnvStorageImp.TransactOpts, _min, _max) -} - -// SetBallotDurationMinMax is a paid mutator transaction binding the contract method 0xb4d6bd3b. -// -// Solidity: function setBallotDurationMinMax(uint256 _min, uint256 _max) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBallotDurationMinMax(_min *big.Int, _max *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMinMax(&_EnvStorageImp.TransactOpts, _min, _max) -} - -// SetBallotDurationMinMaxByBytes is a paid mutator transaction binding the contract method 0x45b5ec29. -// -// Solidity: function setBallotDurationMinMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBallotDurationMinMaxByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBallotDurationMinMaxByBytes", _value) -} - -// SetBallotDurationMinMaxByBytes is a paid mutator transaction binding the contract method 0x45b5ec29. -// -// Solidity: function setBallotDurationMinMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBallotDurationMinMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMinMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBallotDurationMinMaxByBytes is a paid mutator transaction binding the contract method 0x45b5ec29. -// -// Solidity: function setBallotDurationMinMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBallotDurationMinMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBallotDurationMinMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockCreationTime is a paid mutator transaction binding the contract method 0x3305508e. -// -// Solidity: function setBlockCreationTime(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlockCreationTime(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlockCreationTime", _value) -} - -// SetBlockCreationTime is a paid mutator transaction binding the contract method 0x3305508e. -// -// Solidity: function setBlockCreationTime(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlockCreationTime(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockCreationTime(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockCreationTime is a paid mutator transaction binding the contract method 0x3305508e. -// -// Solidity: function setBlockCreationTime(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlockCreationTime(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockCreationTime(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockCreationTimeByBytes is a paid mutator transaction binding the contract method 0x44b89914. -// -// Solidity: function setBlockCreationTimeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlockCreationTimeByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlockCreationTimeByBytes", _value) -} - -// SetBlockCreationTimeByBytes is a paid mutator transaction binding the contract method 0x44b89914. -// -// Solidity: function setBlockCreationTimeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlockCreationTimeByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockCreationTimeByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockCreationTimeByBytes is a paid mutator transaction binding the contract method 0x44b89914. -// -// Solidity: function setBlockCreationTimeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlockCreationTimeByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockCreationTimeByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockRewardAmount is a paid mutator transaction binding the contract method 0x2ed19cd5. -// -// Solidity: function setBlockRewardAmount(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlockRewardAmount(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlockRewardAmount", _value) -} - -// SetBlockRewardAmount is a paid mutator transaction binding the contract method 0x2ed19cd5. -// -// Solidity: function setBlockRewardAmount(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlockRewardAmount(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardAmount(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockRewardAmount is a paid mutator transaction binding the contract method 0x2ed19cd5. -// -// Solidity: function setBlockRewardAmount(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlockRewardAmount(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardAmount(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockRewardAmountByBytes is a paid mutator transaction binding the contract method 0x3d4c65f3. -// -// Solidity: function setBlockRewardAmountByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlockRewardAmountByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlockRewardAmountByBytes", _value) -} - -// SetBlockRewardAmountByBytes is a paid mutator transaction binding the contract method 0x3d4c65f3. -// -// Solidity: function setBlockRewardAmountByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlockRewardAmountByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardAmountByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockRewardAmountByBytes is a paid mutator transaction binding the contract method 0x3d4c65f3. -// -// Solidity: function setBlockRewardAmountByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlockRewardAmountByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardAmountByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockRewardDistributionMethod is a paid mutator transaction binding the contract method 0x0add66dd. -// -// Solidity: function setBlockRewardDistributionMethod(uint256 _block_producer, uint256 _staking_reward, uint256 _ecofund, uint256 _maintenance) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlockRewardDistributionMethod(opts *bind.TransactOpts, _block_producer *big.Int, _staking_reward *big.Int, _ecofund *big.Int, _maintenance *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlockRewardDistributionMethod", _block_producer, _staking_reward, _ecofund, _maintenance) -} - -// SetBlockRewardDistributionMethod is a paid mutator transaction binding the contract method 0x0add66dd. -// -// Solidity: function setBlockRewardDistributionMethod(uint256 _block_producer, uint256 _staking_reward, uint256 _ecofund, uint256 _maintenance) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlockRewardDistributionMethod(_block_producer *big.Int, _staking_reward *big.Int, _ecofund *big.Int, _maintenance *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardDistributionMethod(&_EnvStorageImp.TransactOpts, _block_producer, _staking_reward, _ecofund, _maintenance) -} - -// SetBlockRewardDistributionMethod is a paid mutator transaction binding the contract method 0x0add66dd. -// -// Solidity: function setBlockRewardDistributionMethod(uint256 _block_producer, uint256 _staking_reward, uint256 _ecofund, uint256 _maintenance) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlockRewardDistributionMethod(_block_producer *big.Int, _staking_reward *big.Int, _ecofund *big.Int, _maintenance *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardDistributionMethod(&_EnvStorageImp.TransactOpts, _block_producer, _staking_reward, _ecofund, _maintenance) -} - -// SetBlockRewardDistributionMethodByBytes is a paid mutator transaction binding the contract method 0x8c8b887e. -// -// Solidity: function setBlockRewardDistributionMethodByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlockRewardDistributionMethodByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlockRewardDistributionMethodByBytes", _value) -} - -// SetBlockRewardDistributionMethodByBytes is a paid mutator transaction binding the contract method 0x8c8b887e. -// -// Solidity: function setBlockRewardDistributionMethodByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlockRewardDistributionMethodByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardDistributionMethodByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlockRewardDistributionMethodByBytes is a paid mutator transaction binding the contract method 0x8c8b887e. -// -// Solidity: function setBlockRewardDistributionMethodByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlockRewardDistributionMethodByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlockRewardDistributionMethodByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlocksPer is a paid mutator transaction binding the contract method 0x79e85859. -// -// Solidity: function setBlocksPer(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlocksPer(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlocksPer", _value) -} - -// SetBlocksPer is a paid mutator transaction binding the contract method 0x79e85859. -// -// Solidity: function setBlocksPer(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlocksPer(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlocksPer(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlocksPer is a paid mutator transaction binding the contract method 0x79e85859. -// -// Solidity: function setBlocksPer(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlocksPer(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlocksPer(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlocksPerByBytes is a paid mutator transaction binding the contract method 0x3e8daafe. -// -// Solidity: function setBlocksPerByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetBlocksPerByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setBlocksPerByBytes", _value) -} - -// SetBlocksPerByBytes is a paid mutator transaction binding the contract method 0x3e8daafe. -// -// Solidity: function setBlocksPerByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetBlocksPerByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlocksPerByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetBlocksPerByBytes is a paid mutator transaction binding the contract method 0x3e8daafe. -// -// Solidity: function setBlocksPerByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetBlocksPerByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetBlocksPerByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetGasLimitAndBaseFee is a paid mutator transaction binding the contract method 0x0fca11d2. -// -// Solidity: function setGasLimitAndBaseFee(uint256 _block_GasLimit, uint256 _baseFeeMaxChangeRate, uint256 _gasTargetPercentage, uint256 _maxBaseFee) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetGasLimitAndBaseFee(opts *bind.TransactOpts, _block_GasLimit *big.Int, _baseFeeMaxChangeRate *big.Int, _gasTargetPercentage *big.Int, _maxBaseFee *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setGasLimitAndBaseFee", _block_GasLimit, _baseFeeMaxChangeRate, _gasTargetPercentage, _maxBaseFee) -} - -// SetGasLimitAndBaseFee is a paid mutator transaction binding the contract method 0x0fca11d2. -// -// Solidity: function setGasLimitAndBaseFee(uint256 _block_GasLimit, uint256 _baseFeeMaxChangeRate, uint256 _gasTargetPercentage, uint256 _maxBaseFee) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetGasLimitAndBaseFee(_block_GasLimit *big.Int, _baseFeeMaxChangeRate *big.Int, _gasTargetPercentage *big.Int, _maxBaseFee *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetGasLimitAndBaseFee(&_EnvStorageImp.TransactOpts, _block_GasLimit, _baseFeeMaxChangeRate, _gasTargetPercentage, _maxBaseFee) -} - -// SetGasLimitAndBaseFee is a paid mutator transaction binding the contract method 0x0fca11d2. -// -// Solidity: function setGasLimitAndBaseFee(uint256 _block_GasLimit, uint256 _baseFeeMaxChangeRate, uint256 _gasTargetPercentage, uint256 _maxBaseFee) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetGasLimitAndBaseFee(_block_GasLimit *big.Int, _baseFeeMaxChangeRate *big.Int, _gasTargetPercentage *big.Int, _maxBaseFee *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetGasLimitAndBaseFee(&_EnvStorageImp.TransactOpts, _block_GasLimit, _baseFeeMaxChangeRate, _gasTargetPercentage, _maxBaseFee) -} - -// SetGasLimitAndBaseFeeByBytes is a paid mutator transaction binding the contract method 0xbe33732a. -// -// Solidity: function setGasLimitAndBaseFeeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetGasLimitAndBaseFeeByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setGasLimitAndBaseFeeByBytes", _value) -} - -// SetGasLimitAndBaseFeeByBytes is a paid mutator transaction binding the contract method 0xbe33732a. -// -// Solidity: function setGasLimitAndBaseFeeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetGasLimitAndBaseFeeByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetGasLimitAndBaseFeeByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetGasLimitAndBaseFeeByBytes is a paid mutator transaction binding the contract method 0xbe33732a. -// -// Solidity: function setGasLimitAndBaseFeeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetGasLimitAndBaseFeeByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetGasLimitAndBaseFeeByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxBaseFee is a paid mutator transaction binding the contract method 0x6fe13177. -// -// Solidity: function setMaxBaseFee(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetMaxBaseFee(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setMaxBaseFee", _value) -} - -// SetMaxBaseFee is a paid mutator transaction binding the contract method 0x6fe13177. -// -// Solidity: function setMaxBaseFee(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetMaxBaseFee(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxBaseFee(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxBaseFee is a paid mutator transaction binding the contract method 0x6fe13177. -// -// Solidity: function setMaxBaseFee(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetMaxBaseFee(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxBaseFee(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxBaseFeeByBytes is a paid mutator transaction binding the contract method 0x408d79cf. -// -// Solidity: function setMaxBaseFeeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetMaxBaseFeeByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setMaxBaseFeeByBytes", _value) -} - -// SetMaxBaseFeeByBytes is a paid mutator transaction binding the contract method 0x408d79cf. -// -// Solidity: function setMaxBaseFeeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetMaxBaseFeeByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxBaseFeeByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxBaseFeeByBytes is a paid mutator transaction binding the contract method 0x408d79cf. -// -// Solidity: function setMaxBaseFeeByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetMaxBaseFeeByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxBaseFeeByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxIdleBlockInterval is a paid mutator transaction binding the contract method 0xf6fd7129. -// -// Solidity: function setMaxIdleBlockInterval(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetMaxIdleBlockInterval(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setMaxIdleBlockInterval", _value) -} - -// SetMaxIdleBlockInterval is a paid mutator transaction binding the contract method 0xf6fd7129. -// -// Solidity: function setMaxIdleBlockInterval(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetMaxIdleBlockInterval(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxIdleBlockInterval(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxIdleBlockInterval is a paid mutator transaction binding the contract method 0xf6fd7129. -// -// Solidity: function setMaxIdleBlockInterval(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetMaxIdleBlockInterval(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxIdleBlockInterval(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxIdleBlockIntervalByBytes is a paid mutator transaction binding the contract method 0x0b90a39a. -// -// Solidity: function setMaxIdleBlockIntervalByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetMaxIdleBlockIntervalByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setMaxIdleBlockIntervalByBytes", _value) -} - -// SetMaxIdleBlockIntervalByBytes is a paid mutator transaction binding the contract method 0x0b90a39a. -// -// Solidity: function setMaxIdleBlockIntervalByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetMaxIdleBlockIntervalByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxIdleBlockIntervalByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxIdleBlockIntervalByBytes is a paid mutator transaction binding the contract method 0x0b90a39a. -// -// Solidity: function setMaxIdleBlockIntervalByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetMaxIdleBlockIntervalByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxIdleBlockIntervalByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxPriorityFeePerGas is a paid mutator transaction binding the contract method 0xec3df879. -// -// Solidity: function setMaxPriorityFeePerGas(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetMaxPriorityFeePerGas(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setMaxPriorityFeePerGas", _value) -} - -// SetMaxPriorityFeePerGas is a paid mutator transaction binding the contract method 0xec3df879. -// -// Solidity: function setMaxPriorityFeePerGas(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetMaxPriorityFeePerGas(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxPriorityFeePerGas(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxPriorityFeePerGas is a paid mutator transaction binding the contract method 0xec3df879. -// -// Solidity: function setMaxPriorityFeePerGas(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetMaxPriorityFeePerGas(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxPriorityFeePerGas(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxPriorityFeePerGasByBytes is a paid mutator transaction binding the contract method 0x0fc238bf. -// -// Solidity: function setMaxPriorityFeePerGasByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetMaxPriorityFeePerGasByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setMaxPriorityFeePerGasByBytes", _value) -} - -// SetMaxPriorityFeePerGasByBytes is a paid mutator transaction binding the contract method 0x0fc238bf. -// -// Solidity: function setMaxPriorityFeePerGasByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetMaxPriorityFeePerGasByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxPriorityFeePerGasByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetMaxPriorityFeePerGasByBytes is a paid mutator transaction binding the contract method 0x0fc238bf. -// -// Solidity: function setMaxPriorityFeePerGasByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetMaxPriorityFeePerGasByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetMaxPriorityFeePerGasByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetRegistry(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setRegistry", _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetRegistry(&_EnvStorageImp.TransactOpts, _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetRegistry(&_EnvStorageImp.TransactOpts, _addr) -} - -// SetStakingMax is a paid mutator transaction binding the contract method 0xf8214591. -// -// Solidity: function setStakingMax(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetStakingMax(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setStakingMax", _value) -} - -// SetStakingMax is a paid mutator transaction binding the contract method 0xf8214591. -// -// Solidity: function setStakingMax(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetStakingMax(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMax(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMax is a paid mutator transaction binding the contract method 0xf8214591. -// -// Solidity: function setStakingMax(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetStakingMax(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMax(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMaxByBytes is a paid mutator transaction binding the contract method 0x2eccd832. -// -// Solidity: function setStakingMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetStakingMaxByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setStakingMaxByBytes", _value) -} - -// SetStakingMaxByBytes is a paid mutator transaction binding the contract method 0x2eccd832. -// -// Solidity: function setStakingMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetStakingMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMaxByBytes is a paid mutator transaction binding the contract method 0x2eccd832. -// -// Solidity: function setStakingMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetStakingMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMin is a paid mutator transaction binding the contract method 0x2eb57c65. -// -// Solidity: function setStakingMin(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetStakingMin(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setStakingMin", _value) -} - -// SetStakingMin is a paid mutator transaction binding the contract method 0x2eb57c65. -// -// Solidity: function setStakingMin(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetStakingMin(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMin(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMin is a paid mutator transaction binding the contract method 0x2eb57c65. -// -// Solidity: function setStakingMin(uint256 _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetStakingMin(_value *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMin(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMinByBytes is a paid mutator transaction binding the contract method 0x71c6960d. -// -// Solidity: function setStakingMinByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetStakingMinByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setStakingMinByBytes", _value) -} - -// SetStakingMinByBytes is a paid mutator transaction binding the contract method 0x71c6960d. -// -// Solidity: function setStakingMinByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetStakingMinByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMinByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMinByBytes is a paid mutator transaction binding the contract method 0x71c6960d. -// -// Solidity: function setStakingMinByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetStakingMinByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMinByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMinMax is a paid mutator transaction binding the contract method 0x8d5cdd7e. -// -// Solidity: function setStakingMinMax(uint256 _min, uint256 _max) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetStakingMinMax(opts *bind.TransactOpts, _min *big.Int, _max *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setStakingMinMax", _min, _max) -} - -// SetStakingMinMax is a paid mutator transaction binding the contract method 0x8d5cdd7e. -// -// Solidity: function setStakingMinMax(uint256 _min, uint256 _max) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetStakingMinMax(_min *big.Int, _max *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMinMax(&_EnvStorageImp.TransactOpts, _min, _max) -} - -// SetStakingMinMax is a paid mutator transaction binding the contract method 0x8d5cdd7e. -// -// Solidity: function setStakingMinMax(uint256 _min, uint256 _max) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetStakingMinMax(_min *big.Int, _max *big.Int) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMinMax(&_EnvStorageImp.TransactOpts, _min, _max) -} - -// SetStakingMinMaxByBytes is a paid mutator transaction binding the contract method 0xe078869f. -// -// Solidity: function setStakingMinMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetStakingMinMaxByBytes(opts *bind.TransactOpts, _value []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setStakingMinMaxByBytes", _value) -} - -// SetStakingMinMaxByBytes is a paid mutator transaction binding the contract method 0xe078869f. -// -// Solidity: function setStakingMinMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetStakingMinMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMinMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetStakingMinMaxByBytes is a paid mutator transaction binding the contract method 0xe078869f. -// -// Solidity: function setStakingMinMaxByBytes(bytes _value) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetStakingMinMaxByBytes(_value []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetStakingMinMaxByBytes(&_EnvStorageImp.TransactOpts, _value) -} - -// SetVariable is a paid mutator transaction binding the contract method 0x88c28019. -// -// Solidity: function setVariable(bytes32 envKey, bytes envVal) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) SetVariable(opts *bind.TransactOpts, envKey [32]byte, envVal []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "setVariable", envKey, envVal) -} - -// SetVariable is a paid mutator transaction binding the contract method 0x88c28019. -// -// Solidity: function setVariable(bytes32 envKey, bytes envVal) returns() -func (_EnvStorageImp *EnvStorageImpSession) SetVariable(envKey [32]byte, envVal []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetVariable(&_EnvStorageImp.TransactOpts, envKey, envVal) -} - -// SetVariable is a paid mutator transaction binding the contract method 0x88c28019. -// -// Solidity: function setVariable(bytes32 envKey, bytes envVal) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) SetVariable(envKey [32]byte, envVal []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.SetVariable(&_EnvStorageImp.TransactOpts, envKey, envVal) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_EnvStorageImp *EnvStorageImpSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _EnvStorageImp.Contract.TransferOwnership(&_EnvStorageImp.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _EnvStorageImp.Contract.TransferOwnership(&_EnvStorageImp.TransactOpts, newOwner) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_EnvStorageImp *EnvStorageImpTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "upgradeTo", newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_EnvStorageImp *EnvStorageImpSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _EnvStorageImp.Contract.UpgradeTo(&_EnvStorageImp.TransactOpts, newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _EnvStorageImp.Contract.UpgradeTo(&_EnvStorageImp.TransactOpts, newImplementation) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_EnvStorageImp *EnvStorageImpTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _EnvStorageImp.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_EnvStorageImp *EnvStorageImpSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.UpgradeToAndCall(&_EnvStorageImp.TransactOpts, newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_EnvStorageImp *EnvStorageImpTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _EnvStorageImp.Contract.UpgradeToAndCall(&_EnvStorageImp.TransactOpts, newImplementation, data) -} - -// EnvStorageImpAddressVarableChangedIterator is returned from FilterAddressVarableChanged and is used to iterate over the raw logs and unpacked data for AddressVarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpAddressVarableChangedIterator struct { - Event *EnvStorageImpAddressVarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpAddressVarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpAddressVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpAddressVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpAddressVarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpAddressVarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpAddressVarableChanged represents a AddressVarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpAddressVarableChanged struct { - Name [32]byte - Value common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAddressVarableChanged is a free log retrieval operation binding the contract event 0x5ba696c1849fe23c6b280f9f6057cb4574c818e0cd542032eed6e211f1e02464. -// -// Solidity: event AddressVarableChanged(bytes32 indexed _name, address _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterAddressVarableChanged(opts *bind.FilterOpts, _name [][32]byte) (*EnvStorageImpAddressVarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "AddressVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return &EnvStorageImpAddressVarableChangedIterator{contract: _EnvStorageImp.contract, event: "AddressVarableChanged", logs: logs, sub: sub}, nil -} - -// WatchAddressVarableChanged is a free log subscription operation binding the contract event 0x5ba696c1849fe23c6b280f9f6057cb4574c818e0cd542032eed6e211f1e02464. -// -// Solidity: event AddressVarableChanged(bytes32 indexed _name, address _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchAddressVarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpAddressVarableChanged, _name [][32]byte) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "AddressVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpAddressVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "AddressVarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAddressVarableChanged is a log parse operation binding the contract event 0x5ba696c1849fe23c6b280f9f6057cb4574c818e0cd542032eed6e211f1e02464. -// -// Solidity: event AddressVarableChanged(bytes32 indexed _name, address _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseAddressVarableChanged(log types.Log) (*EnvStorageImpAddressVarableChanged, error) { - event := new(EnvStorageImpAddressVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "AddressVarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the EnvStorageImp contract. -type EnvStorageImpAdminChangedIterator struct { - Event *EnvStorageImpAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpAdminChanged represents a AdminChanged event raised by the EnvStorageImp contract. -type EnvStorageImpAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*EnvStorageImpAdminChangedIterator, error) { - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &EnvStorageImpAdminChangedIterator{contract: _EnvStorageImp.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpAdminChanged) (event.Subscription, error) { - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpAdminChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseAdminChanged(log types.Log) (*EnvStorageImpAdminChanged, error) { - event := new(EnvStorageImpAdminChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the EnvStorageImp contract. -type EnvStorageImpBeaconUpgradedIterator struct { - Event *EnvStorageImpBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpBeaconUpgraded represents a BeaconUpgraded event raised by the EnvStorageImp contract. -type EnvStorageImpBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*EnvStorageImpBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &EnvStorageImpBeaconUpgradedIterator{contract: _EnvStorageImp.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *EnvStorageImpBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpBeaconUpgraded) - if err := _EnvStorageImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseBeaconUpgraded(log types.Log) (*EnvStorageImpBeaconUpgraded, error) { - event := new(EnvStorageImpBeaconUpgraded) - if err := _EnvStorageImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpBytes32VarableChangedIterator is returned from FilterBytes32VarableChanged and is used to iterate over the raw logs and unpacked data for Bytes32VarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpBytes32VarableChangedIterator struct { - Event *EnvStorageImpBytes32VarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpBytes32VarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpBytes32VarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpBytes32VarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpBytes32VarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpBytes32VarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpBytes32VarableChanged represents a Bytes32VarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpBytes32VarableChanged struct { - Name [32]byte - Value [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBytes32VarableChanged is a free log retrieval operation binding the contract event 0xde32aec28e018560c62b0217a8e7cfdc094cda68f1fc7ecd4ed833ee1d4862c9. -// -// Solidity: event Bytes32VarableChanged(bytes32 indexed _name, bytes32 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterBytes32VarableChanged(opts *bind.FilterOpts, _name [][32]byte) (*EnvStorageImpBytes32VarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "Bytes32VarableChanged", _nameRule) - if err != nil { - return nil, err - } - return &EnvStorageImpBytes32VarableChangedIterator{contract: _EnvStorageImp.contract, event: "Bytes32VarableChanged", logs: logs, sub: sub}, nil -} - -// WatchBytes32VarableChanged is a free log subscription operation binding the contract event 0xde32aec28e018560c62b0217a8e7cfdc094cda68f1fc7ecd4ed833ee1d4862c9. -// -// Solidity: event Bytes32VarableChanged(bytes32 indexed _name, bytes32 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchBytes32VarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpBytes32VarableChanged, _name [][32]byte) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "Bytes32VarableChanged", _nameRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpBytes32VarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "Bytes32VarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBytes32VarableChanged is a log parse operation binding the contract event 0xde32aec28e018560c62b0217a8e7cfdc094cda68f1fc7ecd4ed833ee1d4862c9. -// -// Solidity: event Bytes32VarableChanged(bytes32 indexed _name, bytes32 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseBytes32VarableChanged(log types.Log) (*EnvStorageImpBytes32VarableChanged, error) { - event := new(EnvStorageImpBytes32VarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "Bytes32VarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpBytesVarableChangedIterator is returned from FilterBytesVarableChanged and is used to iterate over the raw logs and unpacked data for BytesVarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpBytesVarableChangedIterator struct { - Event *EnvStorageImpBytesVarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpBytesVarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpBytesVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpBytesVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpBytesVarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpBytesVarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpBytesVarableChanged represents a BytesVarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpBytesVarableChanged struct { - Name [32]byte - Value []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBytesVarableChanged is a free log retrieval operation binding the contract event 0x871b63105583c40db6d530b9340369142c5ae265e41a501d300455015dc1283a. -// -// Solidity: event BytesVarableChanged(bytes32 indexed _name, bytes _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterBytesVarableChanged(opts *bind.FilterOpts, _name [][32]byte) (*EnvStorageImpBytesVarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "BytesVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return &EnvStorageImpBytesVarableChangedIterator{contract: _EnvStorageImp.contract, event: "BytesVarableChanged", logs: logs, sub: sub}, nil -} - -// WatchBytesVarableChanged is a free log subscription operation binding the contract event 0x871b63105583c40db6d530b9340369142c5ae265e41a501d300455015dc1283a. -// -// Solidity: event BytesVarableChanged(bytes32 indexed _name, bytes _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchBytesVarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpBytesVarableChanged, _name [][32]byte) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "BytesVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpBytesVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "BytesVarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBytesVarableChanged is a log parse operation binding the contract event 0x871b63105583c40db6d530b9340369142c5ae265e41a501d300455015dc1283a. -// -// Solidity: event BytesVarableChanged(bytes32 indexed _name, bytes _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseBytesVarableChanged(log types.Log) (*EnvStorageImpBytesVarableChanged, error) { - event := new(EnvStorageImpBytesVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "BytesVarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the EnvStorageImp contract. -type EnvStorageImpInitializedIterator struct { - Event *EnvStorageImpInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpInitialized represents a Initialized event raised by the EnvStorageImp contract. -type EnvStorageImpInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterInitialized(opts *bind.FilterOpts) (*EnvStorageImpInitializedIterator, error) { - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &EnvStorageImpInitializedIterator{contract: _EnvStorageImp.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EnvStorageImpInitialized) (event.Subscription, error) { - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpInitialized) - if err := _EnvStorageImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseInitialized(log types.Log) (*EnvStorageImpInitialized, error) { - event := new(EnvStorageImpInitialized) - if err := _EnvStorageImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpIntVarableChangedIterator is returned from FilterIntVarableChanged and is used to iterate over the raw logs and unpacked data for IntVarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpIntVarableChangedIterator struct { - Event *EnvStorageImpIntVarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpIntVarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpIntVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpIntVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpIntVarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpIntVarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpIntVarableChanged represents a IntVarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpIntVarableChanged struct { - Name [32]byte - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterIntVarableChanged is a free log retrieval operation binding the contract event 0x3b274b11383ad4ca069e655ed60df9e4307b7a0f82ba2245a3cb9789ab814bf6. -// -// Solidity: event IntVarableChanged(bytes32 indexed _name, int256 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterIntVarableChanged(opts *bind.FilterOpts, _name [][32]byte) (*EnvStorageImpIntVarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "IntVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return &EnvStorageImpIntVarableChangedIterator{contract: _EnvStorageImp.contract, event: "IntVarableChanged", logs: logs, sub: sub}, nil -} - -// WatchIntVarableChanged is a free log subscription operation binding the contract event 0x3b274b11383ad4ca069e655ed60df9e4307b7a0f82ba2245a3cb9789ab814bf6. -// -// Solidity: event IntVarableChanged(bytes32 indexed _name, int256 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchIntVarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpIntVarableChanged, _name [][32]byte) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "IntVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpIntVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "IntVarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseIntVarableChanged is a log parse operation binding the contract event 0x3b274b11383ad4ca069e655ed60df9e4307b7a0f82ba2245a3cb9789ab814bf6. -// -// Solidity: event IntVarableChanged(bytes32 indexed _name, int256 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseIntVarableChanged(log types.Log) (*EnvStorageImpIntVarableChanged, error) { - event := new(EnvStorageImpIntVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "IntVarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the EnvStorageImp contract. -type EnvStorageImpOwnershipTransferredIterator struct { - Event *EnvStorageImpOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpOwnershipTransferred represents a OwnershipTransferred event raised by the EnvStorageImp contract. -type EnvStorageImpOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EnvStorageImpOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &EnvStorageImpOwnershipTransferredIterator{contract: _EnvStorageImp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EnvStorageImpOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpOwnershipTransferred) - if err := _EnvStorageImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseOwnershipTransferred(log types.Log) (*EnvStorageImpOwnershipTransferred, error) { - event := new(EnvStorageImpOwnershipTransferred) - if err := _EnvStorageImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpSetRegistryIterator is returned from FilterSetRegistry and is used to iterate over the raw logs and unpacked data for SetRegistry events raised by the EnvStorageImp contract. -type EnvStorageImpSetRegistryIterator struct { - Event *EnvStorageImpSetRegistry // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpSetRegistryIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpSetRegistryIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpSetRegistryIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpSetRegistry represents a SetRegistry event raised by the EnvStorageImp contract. -type EnvStorageImpSetRegistry struct { - Addr common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetRegistry is a free log retrieval operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterSetRegistry(opts *bind.FilterOpts, addr []common.Address) (*EnvStorageImpSetRegistryIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return &EnvStorageImpSetRegistryIterator{contract: _EnvStorageImp.contract, event: "SetRegistry", logs: logs, sub: sub}, nil -} - -// WatchSetRegistry is a free log subscription operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchSetRegistry(opts *bind.WatchOpts, sink chan<- *EnvStorageImpSetRegistry, addr []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpSetRegistry) - if err := _EnvStorageImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetRegistry is a log parse operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseSetRegistry(log types.Log) (*EnvStorageImpSetRegistry, error) { - event := new(EnvStorageImpSetRegistry) - if err := _EnvStorageImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpStringVarableChangedIterator is returned from FilterStringVarableChanged and is used to iterate over the raw logs and unpacked data for StringVarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpStringVarableChangedIterator struct { - Event *EnvStorageImpStringVarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpStringVarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpStringVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpStringVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpStringVarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpStringVarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpStringVarableChanged represents a StringVarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpStringVarableChanged struct { - Name [32]byte - Value string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStringVarableChanged is a free log retrieval operation binding the contract event 0x43849fbc1e66a5d2cd0ace04916e2e6c8f314c1904d104cad97150428a370a41. -// -// Solidity: event StringVarableChanged(bytes32 indexed _name, string _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterStringVarableChanged(opts *bind.FilterOpts, _name [][32]byte) (*EnvStorageImpStringVarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "StringVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return &EnvStorageImpStringVarableChangedIterator{contract: _EnvStorageImp.contract, event: "StringVarableChanged", logs: logs, sub: sub}, nil -} - -// WatchStringVarableChanged is a free log subscription operation binding the contract event 0x43849fbc1e66a5d2cd0ace04916e2e6c8f314c1904d104cad97150428a370a41. -// -// Solidity: event StringVarableChanged(bytes32 indexed _name, string _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchStringVarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpStringVarableChanged, _name [][32]byte) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "StringVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpStringVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "StringVarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStringVarableChanged is a log parse operation binding the contract event 0x43849fbc1e66a5d2cd0ace04916e2e6c8f314c1904d104cad97150428a370a41. -// -// Solidity: event StringVarableChanged(bytes32 indexed _name, string _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseStringVarableChanged(log types.Log) (*EnvStorageImpStringVarableChanged, error) { - event := new(EnvStorageImpStringVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "StringVarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpUintVarableChangedIterator is returned from FilterUintVarableChanged and is used to iterate over the raw logs and unpacked data for UintVarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpUintVarableChangedIterator struct { - Event *EnvStorageImpUintVarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpUintVarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpUintVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpUintVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpUintVarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpUintVarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpUintVarableChanged represents a UintVarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpUintVarableChanged struct { - Name [32]byte - Value *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUintVarableChanged is a free log retrieval operation binding the contract event 0x58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612. -// -// Solidity: event UintVarableChanged(bytes32 indexed _name, uint256 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterUintVarableChanged(opts *bind.FilterOpts, _name [][32]byte) (*EnvStorageImpUintVarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "UintVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return &EnvStorageImpUintVarableChangedIterator{contract: _EnvStorageImp.contract, event: "UintVarableChanged", logs: logs, sub: sub}, nil -} - -// WatchUintVarableChanged is a free log subscription operation binding the contract event 0x58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612. -// -// Solidity: event UintVarableChanged(bytes32 indexed _name, uint256 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchUintVarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpUintVarableChanged, _name [][32]byte) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "UintVarableChanged", _nameRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpUintVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "UintVarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUintVarableChanged is a log parse operation binding the contract event 0x58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612. -// -// Solidity: event UintVarableChanged(bytes32 indexed _name, uint256 _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseUintVarableChanged(log types.Log) (*EnvStorageImpUintVarableChanged, error) { - event := new(EnvStorageImpUintVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "UintVarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpUpgradeImplementationIterator is returned from FilterUpgradeImplementation and is used to iterate over the raw logs and unpacked data for UpgradeImplementation events raised by the EnvStorageImp contract. -type EnvStorageImpUpgradeImplementationIterator struct { - Event *EnvStorageImpUpgradeImplementation // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpUpgradeImplementationIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpUpgradeImplementation) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpUpgradeImplementation) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpUpgradeImplementationIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpUpgradeImplementationIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpUpgradeImplementation represents a UpgradeImplementation event raised by the EnvStorageImp contract. -type EnvStorageImpUpgradeImplementation struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgradeImplementation is a free log retrieval operation binding the contract event 0x2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea9708. -// -// Solidity: event UpgradeImplementation(address indexed implementation) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterUpgradeImplementation(opts *bind.FilterOpts, implementation []common.Address) (*EnvStorageImpUpgradeImplementationIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "UpgradeImplementation", implementationRule) - if err != nil { - return nil, err - } - return &EnvStorageImpUpgradeImplementationIterator{contract: _EnvStorageImp.contract, event: "UpgradeImplementation", logs: logs, sub: sub}, nil -} - -// WatchUpgradeImplementation is a free log subscription operation binding the contract event 0x2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea9708. -// -// Solidity: event UpgradeImplementation(address indexed implementation) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchUpgradeImplementation(opts *bind.WatchOpts, sink chan<- *EnvStorageImpUpgradeImplementation, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "UpgradeImplementation", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpUpgradeImplementation) - if err := _EnvStorageImp.contract.UnpackLog(event, "UpgradeImplementation", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgradeImplementation is a log parse operation binding the contract event 0x2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea9708. -// -// Solidity: event UpgradeImplementation(address indexed implementation) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseUpgradeImplementation(log types.Log) (*EnvStorageImpUpgradeImplementation, error) { - event := new(EnvStorageImpUpgradeImplementation) - if err := _EnvStorageImp.contract.UnpackLog(event, "UpgradeImplementation", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the EnvStorageImp contract. -type EnvStorageImpUpgradedIterator struct { - Event *EnvStorageImpUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpUpgraded represents a Upgraded event raised by the EnvStorageImp contract. -type EnvStorageImpUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*EnvStorageImpUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &EnvStorageImpUpgradedIterator{contract: _EnvStorageImp.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *EnvStorageImpUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpUpgraded) - if err := _EnvStorageImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseUpgraded(log types.Log) (*EnvStorageImpUpgraded, error) { - event := new(EnvStorageImpUpgraded) - if err := _EnvStorageImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// EnvStorageImpVarableChangedIterator is returned from FilterVarableChanged and is used to iterate over the raw logs and unpacked data for VarableChanged events raised by the EnvStorageImp contract. -type EnvStorageImpVarableChangedIterator struct { - Event *EnvStorageImpVarableChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *EnvStorageImpVarableChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(EnvStorageImpVarableChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *EnvStorageImpVarableChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *EnvStorageImpVarableChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// EnvStorageImpVarableChanged represents a VarableChanged event raised by the EnvStorageImp contract. -type EnvStorageImpVarableChanged struct { - Name [32]byte - Type *big.Int - Value string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVarableChanged is a free log retrieval operation binding the contract event 0x60841501cd68d1c6414ed8f47a579de24c7e2f9da7e97f10c4932196d92df402. -// -// Solidity: event VarableChanged(bytes32 indexed _name, uint256 indexed _type, string _value) -func (_EnvStorageImp *EnvStorageImpFilterer) FilterVarableChanged(opts *bind.FilterOpts, _name [][32]byte, _type []*big.Int) (*EnvStorageImpVarableChangedIterator, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - var _typeRule []interface{} - for _, _typeItem := range _type { - _typeRule = append(_typeRule, _typeItem) - } - - logs, sub, err := _EnvStorageImp.contract.FilterLogs(opts, "VarableChanged", _nameRule, _typeRule) - if err != nil { - return nil, err - } - return &EnvStorageImpVarableChangedIterator{contract: _EnvStorageImp.contract, event: "VarableChanged", logs: logs, sub: sub}, nil -} - -// WatchVarableChanged is a free log subscription operation binding the contract event 0x60841501cd68d1c6414ed8f47a579de24c7e2f9da7e97f10c4932196d92df402. -// -// Solidity: event VarableChanged(bytes32 indexed _name, uint256 indexed _type, string _value) -func (_EnvStorageImp *EnvStorageImpFilterer) WatchVarableChanged(opts *bind.WatchOpts, sink chan<- *EnvStorageImpVarableChanged, _name [][32]byte, _type []*big.Int) (event.Subscription, error) { - - var _nameRule []interface{} - for _, _nameItem := range _name { - _nameRule = append(_nameRule, _nameItem) - } - var _typeRule []interface{} - for _, _typeItem := range _type { - _typeRule = append(_typeRule, _typeItem) - } - - logs, sub, err := _EnvStorageImp.contract.WatchLogs(opts, "VarableChanged", _nameRule, _typeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(EnvStorageImpVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "VarableChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVarableChanged is a log parse operation binding the contract event 0x60841501cd68d1c6414ed8f47a579de24c7e2f9da7e97f10c4932196d92df402. -// -// Solidity: event VarableChanged(bytes32 indexed _name, uint256 indexed _type, string _value) -func (_EnvStorageImp *EnvStorageImpFilterer) ParseVarableChanged(log types.Log) (*EnvStorageImpVarableChanged, error) { - event := new(EnvStorageImpVarableChanged) - if err := _EnvStorageImp.contract.UnpackLog(event, "VarableChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/wemix/bind/gen_gov_abi.go b/wemix/bind/gen_gov_abi.go deleted file mode 100644 index f71bb1c7ce93..000000000000 --- a/wemix/bind/gen_gov_abi.go +++ /dev/null @@ -1,5637 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gov - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// GovImpMemberInfo is an auto generated low-level Go binding around an user-defined struct. -type GovImpMemberInfo struct { - Staker common.Address - Voter common.Address - Reward common.Address - Name []byte - Enode []byte - Ip []byte - Port *big.Int - LockAmount *big.Int - Memo []byte - Duration *big.Int -} - -// GovMetaData contains all meta data concerning the Gov contract. -var GovMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "5c60da1b": "implementation()", - }, - Bin: "0x608060405234801561001057600080fd5b5060405161077238038061077283398101604081905261002f91610326565b604080516020810190915260008152819061006b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61034f565b60008051602061072b8339815191521461008757610087610374565b6100938282600061009b565b505050610405565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b61008b1760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610136838360405180606001604052806027815260200161074b602791396101fd565b9392505050565b610150816102db60201b6100b71760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061072b83398151915260001b6102ea60201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102655760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161028091906103b6565b600060405180830381855af49150503d80600081146102bb576040519150601f19603f3d011682016040523d82523d6000602084013e6102c0565b606091505b5090925090506102d18282866102ed565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102fc575081610136565b82511561030c5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103d2565b60006020828403121561033857600080fd5b81516001600160a01b038116811461013657600080fd5b60008282101561036f57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b60005b838110156103a557818101518382015260200161038d565b838111156100ca5750506000910152565b600082516103c881846020870161038a565b9190910192915050565b60208152600082518060208401526103f181604085016020870161038a565b601f01601f19169190910160400192915050565b610317806104146000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102bb60279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b60606001600160a01b0384163b61018d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a8919061026b565b600060405180830381855af49150503d80600081146101e3576040519150601f19603f3d011682016040523d82523d6000602084013e6101e8565b606091505b50915091506101f8828286610202565b9695505050505050565b606083156102115750816100b0565b8251156102215782518084602001fd5b8160405162461bcd60e51b81526004016101849190610287565b60005b8381101561025657818101518382015260200161023e565b83811115610265576000848401525b50505050565b6000825161027d81846020870161023b565b9190910192915050565b60208152600082518060208401526102a681604085016020870161023b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205c5f915dcf6f7660b1c747da8970454451eff69d1682eba92b7b9f4409ff356864736f6c634300080e0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", -} - -// GovABI is the input ABI used to generate the binding from. -// Deprecated: Use GovMetaData.ABI instead. -var GovABI = GovMetaData.ABI - -// Deprecated: Use GovMetaData.Sigs instead. -// GovFuncSigs maps the 4-byte function signature to its string representation. -var GovFuncSigs = GovMetaData.Sigs - -// GovBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use GovMetaData.Bin instead. -var GovBin = GovMetaData.Bin - -// DeployGov deploys a new Ethereum contract, binding an instance of Gov to it. -func DeployGov(auth *bind.TransactOpts, backend bind.ContractBackend, _imp common.Address) (common.Address, *types.Transaction, *Gov, error) { - parsed, err := GovMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(GovBin), backend, _imp) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Gov{GovCaller: GovCaller{contract: contract}, GovTransactor: GovTransactor{contract: contract}, GovFilterer: GovFilterer{contract: contract}}, nil -} - -// Gov is an auto generated Go binding around an Ethereum contract. -type Gov struct { - GovCaller // Read-only binding to the contract - GovTransactor // Write-only binding to the contract - GovFilterer // Log filterer for contract events -} - -// GovCaller is an auto generated read-only Go binding around an Ethereum contract. -type GovCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GovTransactor is an auto generated write-only Go binding around an Ethereum contract. -type GovTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GovFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type GovFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GovSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type GovSession struct { - Contract *Gov // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// GovCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type GovCallerSession struct { - Contract *GovCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// GovTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type GovTransactorSession struct { - Contract *GovTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// GovRaw is an auto generated low-level Go binding around an Ethereum contract. -type GovRaw struct { - Contract *Gov // Generic contract binding to access the raw methods on -} - -// GovCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type GovCallerRaw struct { - Contract *GovCaller // Generic read-only contract binding to access the raw methods on -} - -// GovTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type GovTransactorRaw struct { - Contract *GovTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewGov creates a new instance of Gov, bound to a specific deployed contract. -func NewGov(address common.Address, backend bind.ContractBackend) (*Gov, error) { - contract, err := bindGov(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Gov{GovCaller: GovCaller{contract: contract}, GovTransactor: GovTransactor{contract: contract}, GovFilterer: GovFilterer{contract: contract}}, nil -} - -// NewGovCaller creates a new read-only instance of Gov, bound to a specific deployed contract. -func NewGovCaller(address common.Address, caller bind.ContractCaller) (*GovCaller, error) { - contract, err := bindGov(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &GovCaller{contract: contract}, nil -} - -// NewGovTransactor creates a new write-only instance of Gov, bound to a specific deployed contract. -func NewGovTransactor(address common.Address, transactor bind.ContractTransactor) (*GovTransactor, error) { - contract, err := bindGov(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &GovTransactor{contract: contract}, nil -} - -// NewGovFilterer creates a new log filterer instance of Gov, bound to a specific deployed contract. -func NewGovFilterer(address common.Address, filterer bind.ContractFilterer) (*GovFilterer, error) { - contract, err := bindGov(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &GovFilterer{contract: contract}, nil -} - -// bindGov binds a generic wrapper to an already deployed contract. -func bindGov(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(GovABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Gov *GovRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Gov.Contract.GovCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Gov *GovRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Gov.Contract.GovTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Gov *GovRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Gov.Contract.GovTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Gov *GovCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Gov.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Gov *GovTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Gov.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Gov *GovTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Gov.Contract.contract.Transact(opts, method, params...) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_Gov *GovCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Gov.contract.Call(opts, &out, "implementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_Gov *GovSession) Implementation() (common.Address, error) { - return _Gov.Contract.Implementation(&_Gov.CallOpts) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_Gov *GovCallerSession) Implementation() (common.Address, error) { - return _Gov.Contract.Implementation(&_Gov.CallOpts) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_Gov *GovTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _Gov.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_Gov *GovSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Gov.Contract.Fallback(&_Gov.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_Gov *GovTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Gov.Contract.Fallback(&_Gov.TransactOpts, calldata) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Gov *GovTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Gov.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Gov *GovSession) Receive() (*types.Transaction, error) { - return _Gov.Contract.Receive(&_Gov.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Gov *GovTransactorSession) Receive() (*types.Transaction, error) { - return _Gov.Contract.Receive(&_Gov.TransactOpts) -} - -// GovAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the Gov contract. -type GovAdminChangedIterator struct { - Event *GovAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovAdminChanged represents a AdminChanged event raised by the Gov contract. -type GovAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_Gov *GovFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*GovAdminChangedIterator, error) { - - logs, sub, err := _Gov.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &GovAdminChangedIterator{contract: _Gov.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_Gov *GovFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *GovAdminChanged) (event.Subscription, error) { - - logs, sub, err := _Gov.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovAdminChanged) - if err := _Gov.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_Gov *GovFilterer) ParseAdminChanged(log types.Log) (*GovAdminChanged, error) { - event := new(GovAdminChanged) - if err := _Gov.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the Gov contract. -type GovBeaconUpgradedIterator struct { - Event *GovBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovBeaconUpgraded represents a BeaconUpgraded event raised by the Gov contract. -type GovBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_Gov *GovFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*GovBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _Gov.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &GovBeaconUpgradedIterator{contract: _Gov.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_Gov *GovFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *GovBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _Gov.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovBeaconUpgraded) - if err := _Gov.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_Gov *GovFilterer) ParseBeaconUpgraded(log types.Log) (*GovBeaconUpgraded, error) { - event := new(GovBeaconUpgraded) - if err := _Gov.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Gov contract. -type GovUpgradedIterator struct { - Event *GovUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovUpgraded represents a Upgraded event raised by the Gov contract. -type GovUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_Gov *GovFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*GovUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _Gov.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &GovUpgradedIterator{contract: _Gov.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_Gov *GovFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *GovUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _Gov.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovUpgraded) - if err := _Gov.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_Gov *GovFilterer) ParseUpgraded(log types.Log) (*GovUpgraded, error) { - event := new(GovUpgraded) - if err := _Gov.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpMetaData contains all meta data concerning the GovImp contract. -var GovImpMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"envName\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"envType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"envVal\",\"type\":\"bytes\"}],\"name\":\"EnvChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"calldatas\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"FailReturnValue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"GovDataMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"MemberAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVoter\",\"type\":\"address\"}],\"name\":\"MemberChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"MemberRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"MemberUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ballotId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"NotApplicable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"SetProposalTimePeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SetRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BALLOT_DURATION_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALLOT_DURATION_MIN_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALLOT_DURATION_MIN_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALLOT_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_RATE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCKS_PER_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_CREATION_TIME_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_GASLIMIT_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_AMOUNT_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENV_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GASLIMIT_AND_BASE_FEE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAS_TARGET_PERCENTAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOV_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_BASE_FEE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_IDLE_BLOCK_INTERVAL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PRIORITY_FEE_PER_GAS_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_POOL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MIN_MAX_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_MIN_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"enode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"ip\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"port\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"internalType\":\"structGovImp.MemberInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"name\":\"addProposalToAddMember\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"envName\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"envType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"envVal\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"addProposalToChangeEnv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovAddr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"addProposalToChangeGov\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"enode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"ip\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"port\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"internalType\":\"structGovImp.MemberInfo\",\"name\":\"newInfo\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"oldStaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unlockAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashing\",\"type\":\"uint256\"}],\"name\":\"addProposalToChangeMember\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"addProposalToExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"memo\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashing\",\"type\":\"uint256\"}],\"name\":\"addProposalToRemoveMember\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ballotLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"checkUnfinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeEndedVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBallotInVoting\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxStaking\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVotingDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getMemberFromNodeIdx\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMemberLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinStaking\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinVotingDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getNode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"enode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"ip\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"port\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getNodeIdxFromMember\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getReward\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getStakerAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getVoter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"enode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"ip\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"port\",\"type\":\"uint256\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"oldModifiedBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"}],\"name\":\"initMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initOnce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isMember\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isReward\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isStaker\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isVoter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastAddProposalTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldGov\",\"type\":\"address\"}],\"name\":\"migrateFromLegacy\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"modifiedBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposal_time_period\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reg\",\"outputs\":[{\"internalType\":\"contractIRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardIdx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"setProposalTimePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakerIdx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ballotIdx\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"approval\",\"type\":\"bool\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voteLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"voterIdx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Sigs: map[string]string{ - "0015a73b": "BALLOT_DURATION_MAX_NAME()", - "656e3052": "BALLOT_DURATION_MIN_MAX_NAME()", - "6d583ca7": "BALLOT_DURATION_MIN_NAME()", - "9986e4b9": "BALLOT_STORAGE_NAME()", - "c42a0abc": "BASE_FEE_MAX_CHANGE_RATE_NAME()", - "3f35c8fe": "BLOCKS_PER_NAME()", - "c0b4fe15": "BLOCK_CREATION_TIME_NAME()", - "238737b6": "BLOCK_GASLIMIT_NAME()", - "a9b629b2": "BLOCK_REWARD_AMOUNT_NAME()", - "c6713baf": "BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME()", - "7b2bfb01": "BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME()", - "46946416": "BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME()", - "278bb12a": "BLOCK_REWARD_DISTRIBUTION_METHOD_NAME()", - "6167eb45": "BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME()", - "918f8674": "DENOMINATOR()", - "34125c84": "ECOSYSTEM_NAME()", - "7bf46530": "ENV_STORAGE_NAME()", - "c7d3da34": "GASLIMIT_AND_BASE_FEE_NAME()", - "4d273e28": "GAS_TARGET_PERCENTAGE_NAME()", - "6c78d2cf": "GOV_NAME()", - "4bd1ed76": "MAINTENANCE_NAME()", - "f38ecf47": "MAX_BASE_FEE_NAME()", - "b128f880": "MAX_IDLE_BLOCK_INTERVAL_NAME()", - "38294419": "MAX_PRIORITY_FEE_PER_GAS_NAME()", - "2f40992e": "REWARD_POOL_NAME()", - "c00ace6c": "STAKING_MAX_NAME()", - "a6868b7d": "STAKING_MIN_MAX_NAME()", - "6fde207a": "STAKING_MIN_NAME()", - "1e0cba0d": "STAKING_NAME()", - "5a731cca": "STAKING_REWARD_NAME()", - "36e83d83": "addProposalToAddMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256))", - "40690353": "addProposalToChangeEnv(bytes32,uint256,bytes,bytes,uint256)", - "0efa4909": "addProposalToChangeGov(address,bytes,uint256)", - "a78a8188": "addProposalToChangeMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256),address,uint256,uint256)", - "404e585d": "addProposalToExecute(address,bytes,bytes,uint256)", - "894f5111": "addProposalToRemoveMember(address,uint256,bytes,uint256,uint256,uint256)", - "d6f9cfce": "ballotLength()", - "1c12b030": "checkUnfinalized()", - "6ba99181": "finalizeEndedVote()", - "de09b377": "getBallotInVoting()", - "5aaa4040": "getMaxStaking()", - "ce04b9d4": "getMaxVotingDuration()", - "ab3545e5": "getMember(uint256)", - "15bf6b4d": "getMemberFromNodeIdx(uint256)", - "d965ea00": "getMemberLength()", - "af6af2ff": "getMinStaking()", - "1c150171": "getMinVotingDuration()", - "4f0f4aa9": "getNode(uint256)", - "ce6a54ff": "getNodeIdxFromMember(address)", - "72016f75": "getNodeLength()", - "1c4b774b": "getReward(uint256)", - "6f6de96d": "getStakerAddr(address)", - "e75235b8": "getThreshold()", - "d07bff0c": "getVoter(uint256)", - "a8915a3e": "init(address,uint256,bytes,bytes,bytes,uint256)", - "397e38e7": "initMigration(address,uint256,address)", - "351bacda": "initOnce(address,uint256,bytes)", - "a230c524": "isMember(address)", - "4d5ce038": "isReward(address)", - "6f1e8533": "isStaker(address)", - "a7771ee3": "isVoter(address)", - "139d9dd3": "lastAddProposalTime(address)", - "8d39e33a": "migrateFromLegacy(address)", - "7d10dd1b": "modifiedBlock()", - "8da5cb5b": "owner()", - "3310569c": "proposal_time_period()", - "52d1902d": "proxiableUUID()", - "16fbe831": "reInit()", - "738fdd1a": "reg()", - "715018a6": "renounceOwnership()", - "aaf0dd36": "rewardIdx(address)", - "e27bdaef": "setProposalTimePeriod(uint256)", - "a91ee0dc": "setRegistry(address)", - "a0c12683": "stakerIdx(address)", - "f2fde38b": "transferOwnership(address)", - "3659cfe6": "upgradeTo(address)", - "4f1ef286": "upgradeToAndCall(address,bytes)", - "c9d27afe": "vote(uint256,bool)", - "e9523fb5": "voteLength()", - "cec5b622": "voterIdx(address)", - }, - Bin: "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051618bd9620001046000396000612c4c0152618bd96000f3fe6080604052600436106104725760003560e01c806372016f751161024a578063af6af2ff11610139578063cec5b622116100b6578063e27bdaef1161007a578063e27bdaef14610fcc578063e75235b814610fec578063e9523fb514611001578063f2fde38b14611017578063f38ecf471461103757600080fd5b8063cec5b62214610f29578063d07bff0c14610f56578063d6f9cfce14610f8c578063d965ea0014610fa2578063de09b37714610fb757600080fd5b8063c6713baf116100fd578063c6713baf14610e56578063c7d3da3414610e8a578063c9d27afe14610ebe578063ce04b9d414610ede578063ce6a54ff14610ef357600080fd5b8063af6af2ff14610d71578063b128f88014610d86578063c00ace6c14610dba578063c0b4fe1514610dee578063c42a0abc14610e2257600080fd5b8063a0c12683116101c7578063a8915a3e1161018b578063a8915a3e14610c9a578063a91ee0dc14610cba578063a9b629b214610cda578063aaf0dd3614610d0e578063ab3545e514610d3b57600080fd5b8063a0c1268314610bc1578063a230c52414610bee578063a6868b7d14610c0e578063a7771ee314610c42578063a78a818814610c7a57600080fd5b8063894f51111161020e578063894f511114610b295780638d39e33a14610b495780638da5cb5b14610b69578063918f867414610b875780639986e4b914610b9d57600080fd5b806372016f7514610a89578063738fdd1a14610a9e5780637b2bfb0114610abe5780637bf4653014610af25780637d10dd1b14610b1357600080fd5b8063404e585d116103665780635aaa4040116102e35780636d583ca7116102a75780636d583ca7146109b45780636f1e8533146109e85780636f6de96d14610a205780636fde207a14610a40578063715018a614610a7457600080fd5b80635aaa4040146108f95780636167eb451461090e578063656e3052146109425780636ba99181146109765780636c78d2cf1461098b57600080fd5b80634d5ce0381161032a5780634d5ce038146108625780634f0f4aa9146108825780634f1ef286146108b257806352d1902d146108c05780635a731cca146108d557600080fd5b8063404e585d146107a557806340690353146107b857806346946416146107d85780634bd1ed761461080c5780634d273e281461082e57600080fd5b8063278bb12a116103f45780633659cfe6116103b85780633659cfe6146106dd57806336e83d83146106fd578063382944191461071d578063397e38e7146107515780633f35c8fe1461077157600080fd5b8063278bb12a146106325780632f40992e146106665780633310569c1461068757806334125c841461069d578063351bacda146106bd57600080fd5b80631c12b0301161043b5780631c12b030146105705780631c150171146105955780631c4b774b146105aa5780631e0cba0d146105e0578063238737b6146105fe57600080fd5b806215a73b146104775780630efa4909146104be578063139d9dd3146104de57806315bf6b4d1461050b57806316fbe83114610559575b600080fd5b34801561048357600080fd5b506104ab7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b6040519081526020015b60405180910390f35b3480156104ca57600080fd5b506104ab6104d9366004617b48565b61106b565b3480156104ea57600080fd5b506104ab6104f9366004617ba0565b60ab6020526000908152604090205481565b34801561051757600080fd5b50610541610526366004617bbd565b6000908152607360205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016104b5565b34801561056557600080fd5b5061056e611405565b005b34801561057c57600080fd5b50610585611744565b60405190151581526020016104b5565b3480156105a157600080fd5b506104ab611795565b3480156105b657600080fd5b506105416105c5366004617bbd565b6000908152606a60205260409020546001600160a01b031690565b3480156105ec57600080fd5b506104ab665374616b696e6760c81b81565b34801561060a57600080fd5b506104ab7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561063e57600080fd5b506104ab7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b34801561067257600080fd5b506104ab6914995dd85c99141bdbdb60b21b81565b34801561069357600080fd5b506104ab60aa5481565b3480156106a957600080fd5b506104ab6845636f73797374656d60b81b81565b3480156106c957600080fd5b5061056e6106d8366004617bd6565b611805565b3480156106e957600080fd5b5061056e6106f8366004617ba0565b611e85565b34801561070957600080fd5b506104ab610718366004617d3c565b611ebe565b34801561072957600080fd5b506104ab7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b34801561075d57600080fd5b5061056e61076c366004617d78565b6123d6565b34801561077d57600080fd5b506104ab7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b61056e6107b3366004617dba565b6124d1565b3480156107c457600080fd5b506104ab6107d3366004617e37565b6127b1565b3480156107e457600080fd5b506104ab7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b34801561081857600080fd5b506104ab6a4d61696e74656e616e636560a81b81565b34801561083a57600080fd5b506104ab7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b34801561086e57600080fd5b5061058561087d366004617ba0565b612a45565b34801561088e57600080fd5b506108a261089d366004617bbd565b612a62565b6040516104b59493929190617f0d565b61056e6106f8366004617f58565b3480156108cc57600080fd5b506104ab612c3f565b3480156108e157600080fd5b506104ab6c14dd185ada5b99d4995dd85c99609a1b81565b34801561090557600080fd5b506104ab612cf2565b34801561091a57600080fd5b506104ab7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b34801561094e57600080fd5b506104ab7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b34801561098257600080fd5b5061056e612d39565b34801561099757600080fd5b506104ab7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156109c057600080fd5b506104ab7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b3480156109f457600080fd5b50610585610a03366004617ba0565b6001600160a01b03166000908152606d6020526040902054151590565b348015610a2c57600080fd5b50610541610a3b366004617ba0565b612e27565b348015610a4c57600080fd5b506104ab7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b348015610a8057600080fd5b5061056e612e96565b348015610a9557600080fd5b506074546104ab565b348015610aaa57600080fd5b50606554610541906001600160a01b031681565b348015610aca57600080fd5b506104ab7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610afe57600080fd5b506104ab69456e7653746f7261676560b01b81565b348015610b1f57600080fd5b506104ab60665481565b348015610b3557600080fd5b506104ab610b44366004617fa7565b612eaa565b348015610b5557600080fd5b506104ab610b64366004617ba0565b613208565b348015610b7557600080fd5b506033546001600160a01b0316610541565b348015610b9357600080fd5b506104ab61271081565b348015610ba957600080fd5b506104ab6c42616c6c6f7453746f7261676560981b81565b348015610bcd57600080fd5b506104ab610bdc366004617ba0565b606d6020526000908152604090205481565b348015610bfa57600080fd5b50610585610c09366004617ba0565b613a9a565b348015610c1a57600080fd5b506104ab7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b348015610c4e57600080fd5b50610585610c5d366004617ba0565b6001600160a01b0316600090815260686020526040902054151590565b348015610c8657600080fd5b506104ab610c9536600461801b565b613add565b348015610ca657600080fd5b5061056e610cb5366004618079565b614239565b348015610cc657600080fd5b5061056e610cd5366004617ba0565b6146a2565b348015610ce657600080fd5b506104ab7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b348015610d1a57600080fd5b506104ab610d29366004617ba0565b606b6020526000908152604090205481565b348015610d4757600080fd5b50610541610d56366004617bbd565b6000908152606c60205260409020546001600160a01b031690565b348015610d7d57600080fd5b506104ab61474a565b348015610d9257600080fd5b506104ab7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b348015610dc657600080fd5b506104ab7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b348015610dfa57600080fd5b506104ab7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b348015610e2e57600080fd5b506104ab7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b348015610e6257600080fd5b506104ab7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b348015610e9657600080fd5b506104ab7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b348015610eca57600080fd5b5061056e610ed9366004618133565b614791565b348015610eea57600080fd5b506104ab614986565b348015610eff57600080fd5b506104ab610f0e366004617ba0565b6001600160a01b031660009081526072602052604090205490565b348015610f3557600080fd5b506104ab610f44366004617ba0565b60686020526000908152604090205481565b348015610f6257600080fd5b50610541610f71366004617bbd565b6000908152606760205260409020546001600160a01b031690565b348015610f9857600080fd5b506104ab60755481565b348015610fae57600080fd5b506069546104ab565b348015610fc357600080fd5b506077546104ab565b348015610fd857600080fd5b5061056e610fe7366004617bbd565b6149cd565b348015610ff857600080fd5b506113896104ab565b34801561100d57600080fd5b506104ab60765481565b34801561102357600080fd5b5061056e611032366004617ba0565b614a53565b34801561104357600080fd5b506104ab7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f81565b6000611075614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa1580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df9190618163565b6111045760405162461bcd60e51b81526004016110fb90618180565b60405180910390fd5b600061110f33612e27565b60aa546001600160a01b038216600090815260ab60205260409020549192509061113990426181bd565b10156111575760405162461bcd60e51b81526004016110fb906181d4565b600061116233612e27565b905061116c612cf2565b61117582614aec565b11158015611192575061118661474a565b61118f82614aec565b10155b6111ae5760405162461bcd60e51b81526004016110fb9061820b565b6001600160a01b0386166112045760405162461bcd60e51b815260206004820152601d60248201527f496d706c656d656e746174696f6e2063616e6e6f74206265207a65726f00000060448201526064016110fb565b600080516020618b1d833981519152546001600160a01b03166001600160a01b0316866001600160a01b0316036112755760405162461bcd60e51b815260206004820152601560248201527453616d6520636f6e7472616374206164647265737360581b60448201526064016110fb565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112cf575060408051601f3d908101601f191682019092526112cc91810190618242565b60015b6112eb5760405162461bcd60e51b81526004016110fb9061825b565b600080516020618b1d83398151915281146113185760405162461bcd60e51b81526004016110fb906182a9565b506075546113279060016182f2565b9250611331614b63565b6001600160a01b0316630a3a63fe607554600161134e91906182f2565b60046040516001600160e01b031960e085901b16815260048101929092526024820152604481018790523360648201526001600160a01b038916608482015260a4016020604051808303816000875af11580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d39190618242565b506113de8386614b7e565b5060758290556001600160a01b0316600090815260ab602052604090204290559392505050565b600054600290610100900460ff16158015611427575060005460ff8083169116105b6114435760405162461bcd60e51b81526004016110fb9061830a565b6000805461ffff191660ff83161761010017905561145f614be9565b60005b6069548110156117105760008181526071602052604080822081516080810190925280548290829061149390618358565b80601f01602080910402602001604051908101604052809291908181526020018280546114bf90618358565b801561150c5780601f106114e15761010080835404028352916020019161150c565b820191906000526020600020905b8154815290600101906020018083116114ef57829003601f168201915b5050505050815260200160018201805461152590618358565b80601f016020809104026020016040519081016040528092919081815260200182805461155190618358565b801561159e5780601f106115735761010080835404028352916020019161159e565b820191906000526020600020905b81548152906001019060200180831161158157829003601f168201915b505050505081526020016002820180546115b790618358565b80601f01602080910402602001604051908101604052809291908181526020018280546115e390618358565b80156116305780601f1061160557610100808354040283529160200191611630565b820191906000526020600020905b81548152906001019060200180831161161357829003601f168201915b5050505050815260200160038201548152505090506001606e826000015160405161165b919061838c565b90815260405160209181900382018120805460ff191693151593909317909255820151600191606f9161168d9161838c565b908152602001604051809103902060006101000a81548160ff021916908315150217905550600160706000836040015184606001516040516020016116d39291906183a8565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550600101611462565b506000805461ff001916905560405160ff82168152600080516020618b3d833981519152906020015b60405180910390a150565b600060775460001461178f57600061175d607754614c43565b50915050600061176e607754614ccb565b50915050600119820161178c574281101561178c5760009250505090565b50505b50600190565b600061179f614d46565b6001600160a01b03166333be496e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190618242565b905090565b600054610100900460ff16158080156118255750600054600160ff909116105b8061183f5750303b15801561183f575060005460ff166001145b61185b5760405162461bcd60e51b81526004016110fb9061830a565b6000805460ff19166001179055801561187e576000805461ff0019166101001790555b611886614d5e565b61188e614d8d565b611897846146a2565b4360665560006118a5614dbc565b90506118af61474a565b84101580156118c55750836118c2612cf2565b10155b6118e15760405162461bcd60e51b81526004016110fb906183ca565b600080600060608060606000806000905060008060208d0191508c518261190891906182f2565b90505b80821015611e3657815199506119226020836182f2565b915080821061193057600080fd5b8151985061193f6020836182f2565b915080821061194d57600080fd5b8151975061195c6020836182f2565b915080821061196a57600080fd5b8196508651602061197b91906182f2565b61198590836182f2565b915080821061199357600080fd5b819550855160206119a491906182f2565b6119ae90836182f2565b91508082106119bc57600080fd5b819450845160206119cd91906182f2565b6119d790836182f2565b91508082106119e557600080fd5b815193506119f46020836182f2565b9150611a016001846182f2565b9250611a0c8a613a9a565b158015611a1f5750611a1d89613a9a565b155b8015611a315750611a2f88612a45565b155b611a6e5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b60448201526064016110fb565b886067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555087606a600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606b60008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555089606c600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550886001600160a01b03168a6001600160a01b03167f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba660405160405180910390a36040516325d998bb60e01b81526001600160a01b038b811660048301528f91908d16906325d998bb90602401602060405180830381865afa158015611c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c419190618242565b1015611c865760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b60448201526064016110fb565b611c9287878787614dd1565b611cae5760405162461bcd60e51b81526004016110fb906183f7565b611cb88a8f614e80565b600083815260716020908152604090912088519091611cdb9183918b01906178f2565b508651611cf190600183019060208a01906178f2565b508551611d0790600283019060208901906178f2565b508481600301819055506001606e89604051611d23919061838c565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f90611d55908a9061838c565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008888604051602001611d939291906183a8565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6073600086815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083607260008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055505061190b565b50506069819055607455505086159550611e7f945050505050576000805461ff001916905560405160018152600080516020618b3d833981519152906020015b60405180910390a15b50505050565b60405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642061636365737360901b60448201526064016110fb565b6000611ec8614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190618163565b611f4e5760405162461bcd60e51b81526004016110fb90618180565b6000611f5933612e27565b60aa546001600160a01b038216600090815260ab602052604090205491925090611f8390426181bd565b1015611fa15760405162461bcd60e51b81526004016110fb906181d4565b6000611fac33612e27565b9050611fb6612cf2565b611fbf82614aec565b11158015611fdc5750611fd061474a565b611fd982614aec565b10155b611ff85760405162461bcd60e51b81526004016110fb9061820b565b602084015184906001600160a01b03166120445760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b60448201526064016110fb565b60008160600151511161208d5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b60448201526064016110fb565b60008160a0015151116120d45760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b60448201526064016110fb565b60008160c001511161211c5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b60448201526064016110fb565b6000816080015151116121665760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206e6f646520656e6f646560701b60448201526064016110fb565b600081610100015151116121ab5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d656d6f60a01b60448201526064016110fb565b6000816101200151116121f35760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b60448201526064016110fb565b6121fb61474a565b8160e00151101580156122195750612211612cf2565b8160e0015111155b61225b5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b60448201526064016110fb565b845161226690613a9a565b15801561227b5750845161227990612a45565b155b6122b85760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b60448201526064016110fb565b84602001516001600160a01b031685600001516001600160a01b03161480156122fa575084604001516001600160a01b031685600001516001600160a01b0316145b61233c5760405162461bcd60e51b815260206004820152601360248201527229ba30b5b2b91034b9903737ba103b37ba32b960691b60448201526064016110fb565b612358856060015186608001518760a001518860c00151614dd1565b6123745760405162461bcd60e51b81526004016110fb906183f7565b6075546123829060016182f2565b935061239384600133600089614ebf565b6123a1848660e00151614f62565b6123b084866101000151614b7e565b505060758290556001600160a01b0316600090815260ab60205260409020429055919050565b600054610100900460ff16158080156123f65750600054600160ff909116105b806124105750303b158015612410575060005460ff166001145b61242c5760405162461bcd60e51b81526004016110fb9061830a565b6000805460ff19166001179055801561244f576000805461ff0019166101001790555b612457614d5e565b61245f614d8d565b612468846146a2565b606683905561247682614a53565b60405133907fab2db0a6f442428b686ffa80eadcaabe7d5ee00049c6ae888a237edd3238d85690600090a28015611e7f576000805461ff001916905560405160018152600080516020618b3d83398151915290602001611e76565b6124d9614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa15801561251f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125439190618163565b61255f5760405162461bcd60e51b81526004016110fb90618180565b600061256a33612e27565b60aa546001600160a01b038216600090815260ab60205260409020549192509061259490426181bd565b10156125b25760405162461bcd60e51b81526004016110fb906181d4565b60006125bd33612e27565b90506125c7612cf2565b6125d082614aec565b111580156125ed57506125e161474a565b6125ea82614aec565b10155b6126095760405162461bcd60e51b81526004016110fb9061820b565b6001600160a01b0386166126575760405162461bcd60e51b81526020600482015260156024820152747461726765742063616e6e6f74206265207a65726f60581b60448201526064016110fb565b3334156126fd576000816001600160a01b0316600060405160006040518083038185875af1925050503d80600081146126ac576040519150601f19603f3d011682016040523d82523d6000602084013e6126b1565b606091505b50509050806126fb5760405162461bcd60e51b815260206004820152601660248201527563726561746f72206973206e6f742070617961626c6560501b60448201526064016110fb565b505b6000607554600161270e91906182f2565b9050612718614b63565b6001600160a01b031663aea83e4082600688868d348e6040518863ffffffff1660e01b81526004016127509796959493929190618425565b600060405180830381600087803b15801561276a57600080fd5b505af115801561277e573d6000803e3d6000fd5b5050505061278c8187614b7e565b60755550506001600160a01b0316600090815260ab6020526040902042905550505050565b60006127bb614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015612801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128259190618163565b6128415760405162461bcd60e51b81526004016110fb90618180565b600061284c33612e27565b60aa546001600160a01b038216600090815260ab60205260409020549192509061287690426181bd565b10156128945760405162461bcd60e51b81526004016110fb906181d4565b600061289f33612e27565b90506128a9612cf2565b6128b282614aec565b111580156128cf57506128c361474a565b6128cc82614aec565b10155b6128eb5760405162461bcd60e51b81526004016110fb9061820b565b866001111580156128fd575060098711155b6129385760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207479706560a01b60448201526064016110fb565b6129428887614fa0565b61297e5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b60448201526064016110fb565b60755461298c9060016182f2565b9250612996614b63565b6001600160a01b0316634a57823e84600587338d8d8d6040518863ffffffff1660e01b81526004016129ce9796959493929190618475565b6020604051808303816000875af11580156129ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a119190618242565b50612a1c8386614b7e565b5060758290556001600160a01b0316600090815260ab6020526040902042905595945050505050565b6001600160a01b03166000908152606b6020526040902054151590565b600081815260716020526040812060038101548154606093849384939192909160018301916002840191908490612a9890618358565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac490618358565b8015612b115780601f10612ae657610100808354040283529160200191612b11565b820191906000526020600020905b815481529060010190602001808311612af457829003601f168201915b50505050509350828054612b2490618358565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5090618358565b8015612b9d5780601f10612b7257610100808354040283529160200191612b9d565b820191906000526020600020905b815481529060010190602001808311612b8057829003601f168201915b50505050509250818054612bb090618358565b80601f0160208091040260200160405190810160405280929190818152602001828054612bdc90618358565b8015612c295780601f10612bfe57610100808354040283529160200191612c29565b820191906000526020600020905b815481529060010190602001808311612c0c57829003601f168201915b5050505050915093509350935093509193509193565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612cdf5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016110fb565b50600080516020618b1d83398151915290565b6000612cfc614d46565b6001600160a01b031663737c59b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117dc573d6000803e3d6000fd5b612d41614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015612d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dab9190618163565b612dc75760405162461bcd60e51b81526004016110fb90618180565b612dcf611744565b15612e125760405162461bcd60e51b8152602060048201526013602482015272159bdd1a5b99c81a5cc81b9bdd08195b991959606a1b60448201526064016110fb565b607754612e2090600461501f565b6000607755565b6001600160a01b0381166000908152606d602052604081205415612e49575090565b6001600160a01b03821660009081526068602052604090205415612e9157506001600160a01b038082166000908152606860209081526040808320548352606c909152902054165b919050565b612e9e614be9565b612ea8600061505d565b565b6000612eb4614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015612efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1e9190618163565b612f3a5760405162461bcd60e51b81526004016110fb90618180565b6000612f4533612e27565b60aa546001600160a01b038216600090815260ab602052604090205491925090612f6f90426181bd565b1015612f8d5760405162461bcd60e51b81526004016110fb906181d4565b6000612f9833612e27565b9050612fa2612cf2565b612fab82614aec565b11158015612fc85750612fbc61474a565b612fc582614aec565b10155b612fe45760405162461bcd60e51b81526004016110fb9061820b565b6001600160a01b03891661302c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016110fb565b61303589613a9a565b61306e5760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b60448201526064016110fb565b600161307960695490565b116130c65760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f7665206120736f6c65206d656d626572000000000060448201526064016110fb565b876130d08a614aec565b10156131315760405162461bcd60e51b815260206004820152602a60248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015269103ab73637b1b5b2b21760b11b60648201526084016110fb565b60755461313f9060016182f2565b604080516101408101825260008082526020808301829052828401829052835182815280820185526060840152835182815280820185526080840152835182815290810190935260a082019290925260c081019190915260e081018a9052610100810189905261012081018890529093506131be846002338d85614ebf565b6131c8848a614f62565b6131d28489614b7e565b6131dd8487876150af565b505060758290556001600160a01b0316600090815260ab602052604090204290559695505050505050565b60008054610100900460ff16158080156132295750600054600160ff909116105b806132435750303b158015613243575060005460ff166001145b61325f5760405162461bcd60e51b81526004016110fb9061830a565b6000805460ff191660011790558015613282576000805461ff0019166101001790555b61328a614d5e565b613292614d8d565b60008390506132fc816001600160a01b031663738fdd1a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd591906184b4565b43606681905550613368816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906184b4565b60015b816001600160a01b031663d965ea006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cd9190618242565b81116138bd5760405163ab3545e560e01b8152600481018290526001600160a01b0383169063ab3545e590602401602060405180830381865afa158015613418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343c91906184b4565b6000828152606c6020908152604080832080546001600160a01b0319166001600160a01b039586169081179091558352606d909152908190208390555163341effc360e21b8152600481018390529083169063d07bff0c90602401602060405180830381865afa1580156134b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d891906184b4565b600082815260676020908152604080832080546001600160a01b0319166001600160a01b03958616908117909155835260689091529081902083905551631c4b774b60e01b81526004810183905290831690631c4b774b90602401602060405180830381865afa158015613550573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357491906184b4565b6000828152606a6020908152604080832080546001600160a01b0319166001600160a01b03959095169485179055928252606b8152828220849055606984905582516080810184526060808252918101829052928301819052820152604051634f0f4aa960e01b8152600481018390526001600160a01b03841690634f0f4aa990602401600060405180830381865afa158015613615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261363d9190810190618521565b606085018190526040850182905260208501839052838552613662939291908561511e565b6136ae5760405162461bcd60e51b815260206004820152601760248201527f6e6f646520696e666f206973206475706c69636174656400000000000000000060448201526064016110fb565b6001606e82600001516040516136c4919061838c565b90815260405160209181900382018120805460ff191693151593909317909255820151600191606f916136f69161838c565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008360400151846060015160405160200161373c9291906183a8565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093558483526071815291208251805184936137929284929101906178f2565b5060208281015180516137ab92600185019201906178f2565b50604082015180516137c79160028401916020909101906178f2565b50606091909101516003909101556000828152606c6020818152604080842080546001600160a01b039081168652607284528286208890558786528154607385529583902080546001600160a01b031916968216969096179095556074879055929091529054905163139d9dd360e01b815290821660048201529084169063139d9dd390602401602060405180830381865afa15801561386b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388f9190618242565b6000838152606c60209081526040808320546001600160a01b0316835260ab9091529020555060010161336b565b50806001600160a01b0316633310569c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139209190618242565b60aa81905550806001600160a01b031663d6f9cfce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139889190618242565b607581905550806001600160a01b031663e9523fb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f09190618242565b607681905550806001600160a01b031663de09b3776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a589190618242565b60775550600091508015613a94576000805461ff001916905560405160018152600080516020618b3d8339815191529060200160405180910390a15b50919050565b6001600160a01b0381166000908152606d6020526040812054151580613ad757506001600160a01b03821660009081526068602052604090205415155b92915050565b6000613ae7614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015613b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b519190618163565b613b6d5760405162461bcd60e51b81526004016110fb90618180565b6000613b7833612e27565b60aa546001600160a01b038216600090815260ab602052604090205491925090613ba290426181bd565b1015613bc05760405162461bcd60e51b81526004016110fb906181d4565b6000613bcb33612e27565b9050613bd5612cf2565b613bde82614aec565b11158015613bfb5750613bef61474a565b613bf882614aec565b10155b613c175760405162461bcd60e51b81526004016110fb9061820b565b602087015187906001600160a01b0316613c635760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b60448201526064016110fb565b600081606001515111613cac5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b60448201526064016110fb565b60008160a001515111613cf35760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b60448201526064016110fb565b60008160c0015111613d3b5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b60448201526064016110fb565b600081608001515111613d855760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964206e6f646520656e6f646560701b60448201526064016110fb565b60008161010001515111613dca5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d656d6f60a01b60448201526064016110fb565b600081610120015111613e125760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b60448201526064016110fb565b613e1a61474a565b8160e0015110158015613e385750613e30612cf2565b8160e0015111155b613e7a5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b60448201526064016110fb565b6001600160a01b038716613ec65760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f6c64204164647265737360681b60448201526064016110fb565b613ecf87613a9a565b613f085760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b60448201526064016110fb565b6020808901516001600160a01b038981166000908152606d8452604080822054825260679094529290922054821691161480613f595750866001600160a01b031688602001516001600160a01b0316145b80613f835750613f6c8860200151613a9a565b158015613f835750613f818860200151612a45565b155b801561400557506040808901516001600160a01b038981166000908152606d6020908152848220548252606a90529290922054821691161480613fdb5750866001600160a01b031688604001516001600160a01b0316145b806140055750613fee8860400151613a9a565b15801561400557506140038860400151612a45565b155b6140445760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b2b6b132b960811b60448201526064016110fb565b336001600160a01b038816148015614068575087516001600160a01b038881169116145b156140bd5785158015614079575084155b6140b85760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081c1c9bdc1bdcd85b60821b60448201526064016110fb565b61416c565b87516001600160a01b0388811691161461416c576140d961474a565b6140e386886182f2565b111561416c5760405162461bcd60e51b815260206004820152604c60248201527f496e76616c696420616d6f756e743a2028756e6c6f636b416d6f756e74202b2060448201527f736c617368696e6729206d75737420626520657175616c206f72206c6f77207460648201526b6f206d696e5374616b696e6760a01b608482015260a4016110fb565b60755461417a9060016182f2565b935061418a846003338a8c614ebf565b614198848960e00151614f62565b6141a784896101000151614b7e565b6141b28487876150af565b6075849055336001600160a01b0388161480156141db575087516001600160a01b038881169116145b156142155760006141eb85614ccb565b925050506142058542834261420091906182f2565b615247565b61421385600360018061528c565b505b50506001600160a01b0316600090815260ab60205260409020429055949350505050565b600054610100900460ff16158080156142595750600054600160ff909116105b806142735750303b158015614273575060005460ff166001145b61428f5760405162461bcd60e51b81526004016110fb9061830a565b6000805460ff1916600117905580156142b2576000805461ff0019166101001790555b6142ba614d5e565b6142c2614d8d565b6142cb876146a2565b6142d361474a565b86101580156142e95750856142e6612cf2565b10155b6143055760405162461bcd60e51b81526004016110fb906183ca565b600061430f614dbc565b6040516325d998bb60e01b815233600482015290915087906001600160a01b038316906325d998bb90602401602060405180830381865afa158015614358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437c9190618242565b10156143c15760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b60448201526064016110fb565b60405163282d3fdf60e01b8152336004820152602481018890526001600160a01b0382169063282d3fdf90604401600060405180830381600087803b15801561440957600080fd5b505af115801561441d573d6000803e3d6000fd5b5050600160698190557f6bee784efeb983674392298ab585b22866bedf00ebb0eea949d1e66f3f50e71d8054336001600160a01b0319918216811790925560008281526068602090815260408083208690557ff585789965ba69220d5ce3dc1b444eb22ff546f2650694fef8fafe9c26560af98054851686179055606b82528083208690557fdcf345d7f6a8deb7427d0fee62009fa15100353a1c666b51bb5387b25addcfa98054909416909417909255606d825291822083905560748390559190526071815288517f169c6be1b0e6ab5de76b532e587a77340130ac65c5591db02be822dcf1dc0ed69350614518925083918a01906178f2565b50855161452e90600183019060208901906178f2565b50845161454490600283019060208801906178f2565b508381600301819055506001606e88604051614560919061838c565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f9061459290899061838c565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600087876040516020016145d09291906183a8565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556074543380855260728352838520829055908452607390915281832080546001600160a01b03191682179055436066559051909182917f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba69190a350508015614699576000805461ff001916905560405160018152600080516020618b3d8339815191529060200160405180910390a15b50505050505050565b6146aa614be9565b6001600160a01b0381166147005760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016110fb565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6000614754614d46565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117dc573d6000803e3d6000fd5b6002607854036147e35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016110fb565b60026078556147f0614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015614836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485a9190618163565b6148765760405162461bcd60e51b81526004016110fb90618180565b600061488133612e27565b905061488b612cf2565b61489482614aec565b111580156148b157506148a561474a565b6148ae82614aec565b10155b6148cd5760405162461bcd60e51b81526004016110fb9061820b565b6148d5611744565b61490b5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b60448201526064016110fb565b6000614916846153bf565b905061492284846154d2565b60008061492e866155ac565b9250925050600061493e61138990565b9050808310158061494f5750808210155b80614964575061495f82846182f2565b612710145b15614978576149788785848611600061528c565b505060016078555050505050565b6000614990614d46565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117dc573d6000803e3d6000fd5b6149d5614be9565b610e108110614a1e5760405162461bcd60e51b81526020600482015260156024820152746e6577506572696f6420697320746f6f206c6f6e6760581b60448201526064016110fb565b60aa8190556040518181527f17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f90602001611739565b614a5b614be9565b6001600160a01b038116614ac05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016110fb565b614ac98161505d565b50565b60006118007111dbdd995c9b985b98d950dbdb9d1c9858dd60721b6155e6565b6000614af6614dbc565b604051632c9aab9b60e11b81526001600160a01b03848116600483015291909116906359355736906024015b602060405180830381865afa158015614b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad79190618242565b60006118006c42616c6c6f7453746f7261676560981b6155e6565b614b86614b63565b6001600160a01b031663bce0dbc183836040518363ffffffff1660e01b8152600401614bb39291906185b0565b600060405180830381600087803b158015614bcd57600080fd5b505af1158015614be1573d6000803e3d6000fd5b505050505050565b6033546001600160a01b03163314612ea85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016110fb565b6000806000614c50614b63565b6001600160a01b031663688ca5b2856040518263ffffffff1660e01b8152600401614c7d91815260200190565b606060405180830381865afa158015614c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cbe91906185c9565b9250925092509193909250565b6000806000614cd8614b63565b6001600160a01b03166309970688856040518263ffffffff1660e01b8152600401614d0591815260200190565b606060405180830381865afa158015614d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cbe91906185f7565b600061180069456e7653746f7261676560b01b6155e6565b600054610100900460ff16614d855760405162461bcd60e51b81526004016110fb90618625565b612ea8615654565b600054610100900460ff16614db45760405162461bcd60e51b81526004016110fb90618625565b612ea8615682565b6000611800665374616b696e6760c81b6155e6565b604051600190606f90614de590869061838c565b9081526040519081900360200190205460ff1615614e01575060005b606e85604051614e11919061838c565b9081526040519081900360200190205460ff1615614e2d575060005b60008383604051602001614e429291906183a8565b60408051601f1981840301815291815281516020928301206000818152607090935291205490915060ff1615614e7757600091505b50949350505050565b614e88614dbc565b60405163282d3fdf60e01b81526001600160a01b03848116600483015260248201849052919091169063282d3fdf90604401614bb3565b614ec7614b63565b6001600160a01b031663daacbb95868684610120015187878760000151886020015189604001518a606001518b608001518c60a001518d60c001516040518d63ffffffff1660e01b8152600401614f299c9b9a99989796959493929190618670565b600060405180830381600087803b158015614f4357600080fd5b505af1158015614f57573d6000803e3d6000fd5b505050505050505050565b614f6a614b63565b604051633968764960e11b815260048101849052602481018390526001600160a01b0391909116906372d0ec9290604401614bb3565b6000614faa614d46565b6001600160a01b0316639801bff984846040518363ffffffff1660e01b8152600401614fd79291906185b0565b602060405180830381865afa158015614ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150189190618163565b9392505050565b615027614b63565b60405163548f2cdd60e11b815260048101849052602481018390526001600160a01b03919091169063a91e59ba90604401614bb3565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6150b7614b63565b604051632264085960e01b81526004810185905260248101849052604481018390526001600160a01b0391909116906322640859906064015b600060405180830381600087803b15801561510a57600080fd5b505af1158015614699573d6000803e3d6000fd5b6000600190508480519060200120826020015180519060200120141580156151655750606f85604051615151919061838c565b9081526040519081900360200190205460ff165b1561516e575060005b8580519060200120826000015180519060200120141580156151af5750606e8660405161519b919061838c565b9081526040519081900360200190205460ff165b156151b8575060005b600084846040516020016151cd9291906183a8565b60405160208183030381529060405280519060200120905080836040015184606001516040516020016152019291906183a8565b6040516020818303038152906040528051906020012014158015615233575060008181526070602052604090205460ff165b1561523d57600091505b5095945050505050565b61524f614b63565b60405163605b78c360e11b81526004810185905260248101849052604481018390526001600160a01b03919091169063c0b6f186906064016150f0565b6004821561530c5750600360001984016152b6576152a9856156b2565b6152b1575060045b6153a3565b600284036152c7576152b185615bbc565b600384036152d9576152a985836160fc565b600484036152ea576152b185616696565b600584036152fb576152b185616758565b600684036152b1576152b18561689c565b600684036153a357600061531e614b63565b60405163060e6a9960e01b8152600481018890529091506000906001600160a01b0383169063060e6a9990602401600060405180830381865afa158015615369573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615391919081019061870d565b509150506153a08288836169ef565b50505b6153ad858261501f565b816153b85760006077555b5050505050565b60008060006153cd84614c43565b5090925090506001810361546b57607754156153fb5760405162461bcd60e51b81526004016110fb9061875c565b600061540685614ccb565b92505050615412611795565b811015615435576154308542615426611795565b61420090426182f2565b615460565b8061543e614986565b1015615451576154308542615426614986565b615460854261420084826182f2565b5060778490556154cb565b600281036154995760775484146154945760405162461bcd60e51b81526004016110fb9061875c565b6154cb565b60405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b60448201526064016110fb565b5092915050565b600060765460016154e391906182f2565b905060006154f033612e27565b905060006154fd60695490565b6155099061271061879f565b905060008461551957600261551c565b60015b9050615526614b63565b6040516325918ae760e21b815260048101869052602481018890526001600160a01b038581166044830152606482018490526084820185905291909116906396462b9c9060a401600060405180830381600087803b15801561558757600080fd5b505af115801561559b573d6000803e3d6000fd5b505050607694909455505050505050565b60008060006155b9614b63565b6001600160a01b03166356ba988e856040518263ffffffff1660e01b8152600401614d0591815260200190565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd90602401602060405180830381865afa158015615630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad791906184b4565b600054610100900460ff1661567b5760405162461bcd60e51b81526004016110fb90618625565b6001607855565b600054610100900460ff166156a95760405162461bcd60e51b81526004016110fb90618625565b612ea83361505d565b60006156bf826001616b21565b6000806000806000806000806156d48a616c3d565b98509850985098509850985098509850506156ee88613a9a565b1561574c5789600080516020618b5d8339815191526040516157349060208082526010908201526f20b63932b0b23c90309036b2b6b132b960811b604082015260600190565b60405180910390a25060009998505050505050505050565b61575586612a45565b1561579d5789600080516020618b5d8339815191526040516157349060208082526012908201527120b63932b0b23c9030903932bbb0b93232b960711b604082015260600190565b6157a561474a565b8110806157b85750806157b6612cf2565b105b156157d95789600080516020618b5d833981519152604051615734906183ca565b806157e389616ce4565b10156158055789600080516020618b5d833981519152604051615734906187c1565b866001600160a01b0316886001600160a01b0316141580156158395750856001600160a01b0316886001600160a01b031614155b156158855789600080516020618b5d83398151915260405161573490602080825260169082015275496e76616c6964206d656d626572206164647265737360501b604082015260600190565b61588f8882614e80565b600060695460016158a091906182f2565b9050876067600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606860008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555086606a600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606b6000896001600160a01b03166001600160a01b031681526020019081526020016000208190555088606c600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606d60008b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060745460016159d991906182f2565b60008181526071602090815260409091208951929350916159ff918391908b01906178f2565b508651615a1590600183019060208a01906178f2565b508551615a2b90600283019060208901906178f2565b508481600301819055506001606e89604051615a47919061838c565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f90615a79908a9061838c565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008888604051602001615ab79291906183a8565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6073600084815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081607260008d6001600160a01b03166001600160a01b0316815260200190815260200160002081905550826069819055508160748190555043606681905550896001600160a01b03168b6001600160a01b03167f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba660405160405180910390a35060019c9b505050505050505050505050565b615bc7816002616b21565b6000615bd282616c3d565b50505050505050509050615be581613a9a565b615c3a5781600080516020618b5d833981519152604051615c2e906020808252601490820152732737ba1030b63932b0b23c90309036b2b6b132b960611b604082015260600190565b60405180910390a25050565b6001600160a01b038082166000818152606d6020818152604080842054606954808652606c8452828620548287526067855283872054606a86529387205497909652939092529094928316939083169216908414615da257606980546000908152606c6020818152604080842080546001600160a01b038c8116808852606d80875285892080549e8a529787528589209087529b821688528488209c909c559486905581546001600160a01b03199081169092558954821690851617909855888452606b8083528185205486548652606a80855283872080548a881689528487528589208054948a529287528589209487528716808952858920939093559087905580548b16905581548a16179055978352606880825288842054945484526067808352898520805489861687528385528b872080548989529386528c8820949095529094168086529985205592905580548616905580549094168517909355919291615e1f565b606980546000908152606c6020908152604080832080546001600160a01b03199081169091556001600160a01b038a81168552606d845282852085905585548552606a84528285208054831690558681168552606b8452828520859055945484526067835281842080549091169055928516825260689052908120555b6001606954615e2e91906181bd565b6069556000848152607160205260408082209051909190606f90615e569060018501906188a1565b908152604051908190036020018120805492151560ff1990931692909217909155600090606e90615e889084906188a1565b90815260405160209181900382018120805460ff19169315159390931790925560038301546000926070928492615ec4926002880192016188ad565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556074546001600160a01b038a16845260729091529120541461601e576001600160a01b038087166000908152607260209081526040808320546074548452607383528184205460719093529220805492985092169550829190615f5f90618358565b615f6a929190617976565b5060745460009081526071602052604090206001908101805491830191615f9090618358565b615f9b929190617976565b5060745460009081526071602052604090206002908101805491830191615fc190618358565b615fcc929190617976565b506074546000908152607160209081526040808320600390810154908501558783526073825280832080546001600160a01b0319166001600160a01b0389169081179091558352607290915290208590555b60748054600090815260736020908152604080832080546001600160a01b03191690556001600160a01b038a1683526072825280832083905592548252607190529081209061606d82826179f1565b61607b6001830160006179f1565b6160896002830160006179f1565b6003820160009055505060016074546160a291906181bd565b607455436066556160b38787616d1e565b826001600160a01b0316866001600160a01b03167faa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c160405160405180910390a350505050505050565b60008161610e5761610e836003616b21565b60008060008060008060008060006161258c616c3d565b98509850985098509850985098509850985061614089613a9a565b6161ac578b600080516020618b5d833981519152604051616192906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a260009950505050505050505050613ad7565b6161bf8c8c8b8b8b8b8b8b8b8b8b616eec565b6161d55760009950505050505050505050613ad7565b6001600160a01b03808a166000818152606d6020526040902054918a1614616244576000818152606c6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606d909252808320849055908c1682528120556162448983614e80565b6001600160a01b038a166000908152607260209081526040808320548084526071909252808320905191929091606e9061627f9084906188a1565b908152604051908190036020018120805492151560ff1990931692909217909155600090606f906162b49060018501906188a1565b90815260405160209181900382018120805460ff191693151593909317909255600383015460009260709284926162f0926002880192016188ad565b60408051808303601f1901815291815281516020928301208352828201939093529101600020805460ff1916921515929092179091558851616337918391908b01906178f2565b50865161634d90600183019060208a01906178f2565b50855161636390600283019060208901906178f2565b506003810185905543606655604051600190606e90616383908b9061838c565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f906163b5908a9061838c565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600088886040516020016163f39291906183a8565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355858352606a90529020546001600160a01b0390811691508916811461648f576000838152606a6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606b90925280832086905590831682528120555b506000828152606760205260409020546001600160a01b03908116908a16811461654157896067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060686000836001600160a01b03166001600160a01b03168152602001908152602001600020819055505b50896001600160a01b03168b6001600160a01b03161461664157896073600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080607260008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000607260008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506165f28e8c616d1e565b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167f15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be060405160405180910390a4616682565b896001600160a01b03168b6001600160a01b03167f1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f60405160405180910390a35b5060019d9c50505050505050505050505050565b6166a1816004616b21565b60006166ab614b63565b6001600160a01b0316637efa9ae3836040518263ffffffff1660e01b81526004016166d891815260200190565b602060405180830381865afa1580156166f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671991906184b4565b90506001600160a01b038116156167545761673381617486565b6040805160008082526020820190925261674f91839190617514565b436066555b5050565b616763816005616b21565b6000806000616770614b63565b6001600160a01b0316631d940da2856040518263ffffffff1660e01b815260040161679d91815260200190565b600060405180830381865afa1580156167ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167e291908101906188c6565b92509250925060006167f2614d46565b6040516388c2801960e01b81529091506001600160a01b038216906388c280199061682390879086906004016185b0565b600060405180830381600087803b15801561683d57600080fd5b505af1158015616851573d6000803e3d6000fd5b50504360665550506040517f701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c299061688d908690869086906188ff565b60405180910390a15050505050565b6168a7816006616b21565b60006168b1614b63565b90506000806000836001600160a01b031663060e6a99866040518263ffffffff1660e01b81526004016168e691815260200190565b600060405180830381865afa158015616903573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261692b919081019061870d565b925092509250600080846001600160a01b0316848460405161694d919061838c565b60006040518083038185875af1925050503d806000811461698a576040519150601f19603f3d011682016040523d82523d6000602084013e61698f565b606091505b509150915043606681905550846001600160a01b03168215157f57508e122d767c940c66fc3762dd79760bb534bd2f7c4902ae678853f7dec9af8686856040516169db93929190618927565b60405180910390a381614699576146998688865b806000036169fc57505050565b6040516302b385fb60e01b8152600481018390526000906001600160a01b038516906302b385fb90602401600060405180830381865afa158015616a44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a6c9190810190618952565b505050505050509350505050600080826001600160a01b03168460405160006040518083038185875af1925050503d8060008114616ac6576040519150601f19603f3d011682016040523d82523d6000602084013e616acb565b606091505b509150915081614be157826001600160a01b0316857f2c57f69ad84301745a13b9cc61ef37ef145f0db4f64480f09ccd360cc093dc668684604051616b119291906185b0565b60405180910390a3505050505050565b600080616b2d84614c43565b5091509150828214616b775760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420766f74696e67207479706560681b60448201526064016110fb565b60028114616bbe5760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74696e6720737461746560601b60448201526064016110fb565b600080616bca866155ac565b9250925050616bd861138990565b82101580616be857506113898110155b80616bfd5750616bf881836182f2565b612710145b614be15760405162461bcd60e51b8152602060048201526011602482015270139bdd081e595d08199a5b985b1a5e9959607a1b60448201526064016110fb565b6000806000806060806060600080616c53614b63565b6001600160a01b03166373df4e018b6040518263ffffffff1660e01b8152600401616c8091815260200190565b600060405180830381865afa158015616c9d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616cc59190810190618a07565b9850985098509850985098509850985098509193959799909294969850565b6000616cee614dbc565b6040516325d998bb60e01b81526001600160a01b03848116600483015291909116906325d998bb90602401614b22565b600080616d2a846175fb565b91509150616d3661474a565b616d4082846182f2565b1115616dd05760405162461bcd60e51b815260206004820152605360248201527f6d696e5374616b696e672076616c7565206d757374206265206772656174657260448201527f207468616e206f7220657175616c20746f207468652073756d206f6620756e6c6064820152726f636b416d6f756e742c20736c617368696e6760681b608482015260a4016110fb565b6000616dda614dbc565b604051632c9aab9b60e11b81526001600160a01b038681166004830152919250600091831690635935573690602401602060405180830381865afa158015616e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616e4a9190618242565b90506000616e5661474a565b616e6090836181bd565b905084821115616ee257616e74868661767c565b604051634954a85b60e11b81526001600160a01b03878116600483015260248201869052604482018390528416906392a950b690606401600060405180830381600087803b158015616ec557600080fd5b505af1158015616ed9573d6000803e3d6000fd5b50505050614699565b614699868361767c565b60008a616efe57616efe8c6003616b21565b616f078a613a9a565b616f69578b600080516020618b5d833981519152604051616f59906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a2506000617477565b6001600160a01b03808b166000818152606d6020526040902054918b16146170e057616f948a613a9a565b15616ff9578c600080516020618b5d833981519152604051616fe7906020808252601f908201527f6e6577206164647265737320697320616c72656164792061206d656d62657200604082015260600190565b60405180910390a26000915050617477565b886001600160a01b03168a6001600160a01b03161415801561702d5750876001600160a01b03168a6001600160a01b031614155b15617078578c600080516020618b5d833981519152604051616fe790602080825260159082015274496e76616c696420766f746572206164647265737360581b604082015260600190565b61708061474a565b831080617093575082617091612cf2565b105b156170b4578c600080516020618b5d833981519152604051616fe7906183ca565b826170be8b616ce4565b10156170e0578c600080516020618b5d833981519152604051616fe7906187c1565b6001600160a01b038b16600090815260726020908152604080832054808452607190925280832081516080810190925280549293928290829061712290618358565b80601f016020809104026020016040519081016040528092919081815260200182805461714e90618358565b801561719b5780601f106171705761010080835404028352916020019161719b565b820191906000526020600020905b81548152906001019060200180831161717e57829003601f168201915b505050505081526020016001820180546171b490618358565b80601f01602080910402602001604051908101604052809291908181526020018280546171e090618358565b801561722d5780601f106172025761010080835404028352916020019161722d565b820191906000526020600020905b81548152906001019060200180831161721057829003601f168201915b5050505050815260200160028201805461724690618358565b80601f016020809104026020016040519081016040528092919081815260200182805461727290618358565b80156172bf5780601f10617294576101008083540402835291602001916172bf565b820191906000526020600020905b8154815290600101906020018083116172a257829003601f168201915b5050505050815260200160038201548152505090506172e1898989898561511e565b617315578e600080516020618b5d833981519152604051617301906183f7565b60405180910390a260009350505050617477565b506000828152606a60205260409020546001600160a01b03908116908d8116908b16148015906173575750896001600160a01b0316816001600160a01b031614155b801561737657506173678a613a9a565b8061737657506173768a612a45565b156173c2578e600080516020618b5d83398151915260405161730190602080825260169082015275496e76616c696420726577617264206164647265737360501b604082015260600190565b506000828152606760205260409020546001600160a01b03908116908d8116908c161480159061740457508a6001600160a01b0316816001600160a01b031614155b801561742357506174148b613a9a565b8061742357506174238b612a45565b1561746f578e600080516020618b5d83398151915260405161730190602080825260169082015275496e76616c696420766f74657273206164647265737360501b604082015260600190565b506001925050505b9b9a5050505050505050505050565b61748e614acc565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa1580156174d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906174f89190618163565b614ac95760405162461bcd60e51b81526004016110fb90618180565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561754c57617547836176bb565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156175a6575060408051601f3d908101601f191682019092526175a391810190618242565b60015b6175c25760405162461bcd60e51b81526004016110fb9061825b565b600080516020618b1d83398151915281146175ef5760405162461bcd60e51b81526004016110fb906182a9565b50617547838383617757565b600080617606614b63565b6001600160a01b0316638c7be692846040518263ffffffff1660e01b815260040161763391815260200190565b6040805180830381865afa15801561764f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906176739190618ae5565b91509150915091565b617684614dbc565b604051637eee288d60e01b81526001600160a01b038481166004830152602482018490529190911690637eee288d90604401614bb3565b6001600160a01b0381163b6177285760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016110fb565b600080516020618b1d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6177608361777c565b60008251118061776d5750805b1561754757611e7f83836177bc565b617785816176bb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606150188383604051806060016040528060278152602001618b7d6027913960606001600160a01b0384163b6178445760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016110fb565b600080856001600160a01b03168560405161785f919061838c565b600060405180830381855af49150503d806000811461789a576040519150601f19603f3d011682016040523d82523d6000602084013e61789f565b606091505b50915091506178af8282866178b9565b9695505050505050565b606083156178c8575081615018565b8251156178d85782518084602001fd5b8160405162461bcd60e51b81526004016110fb9190618b09565b8280546178fe90618358565b90600052602060002090601f0160209004810192826179205760008555617966565b82601f1061793957805160ff1916838001178555617966565b82800160010185558215617966579182015b8281111561796657825182559160200191906001019061794b565b50617972929150617a27565b5090565b82805461798290618358565b90600052602060002090601f0160209004810192826179a45760008555617966565b82601f106179b55780548555617966565b8280016001018555821561796657600052602060002091601f016020900482015b828111156179665782548255916001019190600101906179d6565b5080546179fd90618358565b6000825580601f10617a0d575050565b601f016020900490600052602060002090810190614ac991905b5b808211156179725760008155600101617a28565b6001600160a01b0381168114614ac957600080fd5b8035612e9181617a3c565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715617a9557617a95617a5c565b60405290565b604051601f8201601f191681016001600160401b0381118282101715617ac357617ac3617a5c565b604052919050565b60006001600160401b03821115617ae457617ae4617a5c565b50601f01601f191660200190565b600082601f830112617b0357600080fd5b8135617b16617b1182617acb565b617a9b565b818152846020838601011115617b2b57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215617b5d57600080fd5b8335617b6881617a3c565b925060208401356001600160401b03811115617b8357600080fd5b617b8f86828701617af2565b925050604084013590509250925092565b600060208284031215617bb257600080fd5b813561501881617a3c565b600060208284031215617bcf57600080fd5b5035919050565b600080600060608486031215617beb57600080fd5b8335617bf681617a3c565b92506020840135915060408401356001600160401b03811115617c1857600080fd5b617c2486828701617af2565b9150509250925092565b60006101408284031215617c4157600080fd5b617c49617a72565b9050617c5482617a51565b8152617c6260208301617a51565b6020820152617c7360408301617a51565b604082015260608201356001600160401b0380821115617c9257600080fd5b617c9e85838601617af2565b60608401526080840135915080821115617cb757600080fd5b617cc385838601617af2565b608084015260a0840135915080821115617cdc57600080fd5b617ce885838601617af2565b60a084015260c084013560c084015260e084013560e084015261010091508184013581811115617d1757600080fd5b617d2386828701617af2565b8385015250505061012080830135818301525092915050565b600060208284031215617d4e57600080fd5b81356001600160401b03811115617d6457600080fd5b617d7084828501617c2e565b949350505050565b600080600060608486031215617d8d57600080fd5b8335617d9881617a3c565b9250602084013591506040840135617daf81617a3c565b809150509250925092565b60008060008060808587031215617dd057600080fd5b8435617ddb81617a3c565b935060208501356001600160401b0380821115617df757600080fd5b617e0388838901617af2565b94506040870135915080821115617e1957600080fd5b50617e2687828801617af2565b949793965093946060013593505050565b600080600080600060a08688031215617e4f57600080fd5b853594506020860135935060408601356001600160401b0380821115617e7457600080fd5b617e8089838a01617af2565b94506060880135915080821115617e9657600080fd5b50617ea388828901617af2565b95989497509295608001359392505050565b60005b83811015617ed0578181015183820152602001617eb8565b83811115611e7f5750506000910152565b60008151808452617ef9816020860160208601617eb5565b601f01601f19169290920160200192915050565b608081526000617f206080830187617ee1565b8281036020840152617f328187617ee1565b90508281036040840152617f468186617ee1565b91505082606083015295945050505050565b60008060408385031215617f6b57600080fd5b8235617f7681617a3c565b915060208301356001600160401b03811115617f9157600080fd5b617f9d85828601617af2565b9150509250929050565b60008060008060008060c08789031215617fc057600080fd5b8635617fcb81617a3c565b95506020870135945060408701356001600160401b03811115617fed57600080fd5b617ff989828a01617af2565b945050606087013592506080870135915060a087013590509295509295509295565b6000806000806080858703121561803157600080fd5b84356001600160401b0381111561804757600080fd5b61805387828801617c2e565b945050602085013561806481617a3c565b93969395505050506040820135916060013590565b60008060008060008060c0878903121561809257600080fd5b863561809d81617a3c565b95506020870135945060408701356001600160401b03808211156180c057600080fd5b6180cc8a838b01617af2565b955060608901359150808211156180e257600080fd5b6180ee8a838b01617af2565b9450608089013591508082111561810457600080fd5b5061811189828a01617af2565b92505060a087013590509295509295509295565b8015158114614ac957600080fd5b6000806040838503121561814657600080fd5b82359150602083013561815881618125565b809150509250929050565b60006020828403121561817557600080fd5b815161501881618125565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000828210156181cf576181cf6181a7565b500390565b6020808252601d908201527f43616e6e6f74206164642070726f706f73616c20746f6f206561726c79000000604082015260600190565b60208082526017908201527f496e76616c6964207374616b696e672062616c616e6365000000000000000000604082015260600190565b60006020828403121561825457600080fd5b5051919050565b6020808252602e908201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b606082015260800190565b60208082526029908201527f45524331393637557067726164653a20756e737570706f727465642070726f786040820152681a58589b195555525160ba1b606082015260800190565b60008219821115618305576183056181a7565b500190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600181811c9082168061836c57607f821691505b602082108103613a9457634e487b7160e01b600052602260045260246000fd5b6000825161839e818460208701617eb5565b9190910192915050565b600083516183ba818460208801617eb5565b9190910191825250602001919050565b602080825260139082015272125b9d985b1a59081b1bd8dac8185b5bdd5b9d606a1b604082015260600190565b6020808252601490820152734475706c696361746564206e6f646520696e666f60601b604082015260600190565b878152866020820152856040820152600060018060a01b0380871660608401528086166080840152508360a083015260e060c083015261846860e0830184617ee1565b9998505050505050505050565b87815286602082015285604082015260018060a01b03851660608201528360808201528260a082015260e060c0820152600061846860e0830184617ee1565b6000602082840312156184c657600080fd5b815161501881617a3c565b8051612e9181617a3c565b600082601f8301126184ed57600080fd5b81516184fb617b1182617acb565b81815284602083860101111561851057600080fd5b617d70826020830160208701617eb5565b6000806000806080858703121561853757600080fd5b84516001600160401b038082111561854e57600080fd5b61855a888389016184dc565b9550602087015191508082111561857057600080fd5b61857c888389016184dc565b9450604087015191508082111561859257600080fd5b5061859f878288016184dc565b606096909601519497939650505050565b828152604060208201526000617d706040830184617ee1565b6000806000606084860312156185de57600080fd5b83519250602084015191506040840151617daf81618125565b60008060006060848603121561860c57600080fd5b8351925060208401519150604084015190509250925092565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8c8152602081018c9052604081018b90526001600160a01b038a81166060830152898116608083015288811660a083015287811660c0830152861660e08201526000610180806101008401526186c881840188617ee1565b90508281036101208401526186dd8187617ee1565b90508281036101408401526186f28186617ee1565b915050826101608301529d9c50505050505050505050505050565b60008060006060848603121561872257600080fd5b835161872d81617a3c565b6020850151604086015191945092506001600160401b0381111561875057600080fd5b617c24868287016184dc565b60208082526023908201527f4e6f7720696e20766f74696e67207769746820646966666572656e742062616c6040820152621b1bdd60ea1b606082015260800190565b6000826187bc57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f496e73756666696369656e742062616c616e636520746861742063616e206265604082015266081b1bd8dad95960ca1b606082015260800190565b8054600090600181811c908083168061882257607f831692505b6020808410820361884357634e487b7160e01b600052602260045260246000fd5b818015618857576001811461886857618895565b60ff19861689528489019650618895565b60008881526020902060005b8681101561888d5781548b820152908501908301618874565b505084890196505b50505050505092915050565b60006150188284618808565b60006188b98285618808565b9283525050602001919050565b6000806000606084860312156188db57600080fd5b835192506020840151915060408401516001600160401b0381111561875057600080fd5b83815282602082015260606040820152600061891e6060830184617ee1565b95945050505050565b8381526060602082015260006189406060830185617ee1565b82810360408401526178af8185617ee1565b60008060008060008060008060008060006101608c8e03121561897457600080fd5b8b519a5060208c0151995060408c0151985060608c015161899481617a3c565b60808d01519098506001600160401b038111156189b057600080fd5b6189bc8e828f016184dc565b97505060a08c0151955060c08c0151945060e08c015193506101008c015192506101208c01516189eb81618125565b809250506101408c015190509295989b509295989b9093969950565b60008060008060008060008060006101208a8c031215618a2657600080fd5b618a2f8a6184d1565b9850618a3d60208b016184d1565b9750618a4b60408b016184d1565b9650618a5960608b016184d1565b955060808a01516001600160401b0380821115618a7557600080fd5b618a818d838e016184dc565b965060a08c0151915080821115618a9757600080fd5b618aa38d838e016184dc565b955060c08c0151915080821115618ab957600080fd5b50618ac68c828d016184dc565b93505060e08a015191506101008a015190509295985092959850929598565b60008060408385031215618af857600080fd5b505080516020909101519092909150565b6020815260006150186020830184617ee156fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249885e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209dfea10b5c3f59723a267d8b27b3a510120d9c4c19c0de8eb23e161703dede8364736f6c634300080e0033", -} - -// GovImpABI is the input ABI used to generate the binding from. -// Deprecated: Use GovImpMetaData.ABI instead. -var GovImpABI = GovImpMetaData.ABI - -// Deprecated: Use GovImpMetaData.Sigs instead. -// GovImpFuncSigs maps the 4-byte function signature to its string representation. -var GovImpFuncSigs = GovImpMetaData.Sigs - -// GovImpBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use GovImpMetaData.Bin instead. -var GovImpBin = GovImpMetaData.Bin - -// DeployGovImp deploys a new Ethereum contract, binding an instance of GovImp to it. -func DeployGovImp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GovImp, error) { - parsed, err := GovImpMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(GovImpBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &GovImp{GovImpCaller: GovImpCaller{contract: contract}, GovImpTransactor: GovImpTransactor{contract: contract}, GovImpFilterer: GovImpFilterer{contract: contract}}, nil -} - -// GovImp is an auto generated Go binding around an Ethereum contract. -type GovImp struct { - GovImpCaller // Read-only binding to the contract - GovImpTransactor // Write-only binding to the contract - GovImpFilterer // Log filterer for contract events -} - -// GovImpCaller is an auto generated read-only Go binding around an Ethereum contract. -type GovImpCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GovImpTransactor is an auto generated write-only Go binding around an Ethereum contract. -type GovImpTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GovImpFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type GovImpFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// GovImpSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type GovImpSession struct { - Contract *GovImp // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// GovImpCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type GovImpCallerSession struct { - Contract *GovImpCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// GovImpTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type GovImpTransactorSession struct { - Contract *GovImpTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// GovImpRaw is an auto generated low-level Go binding around an Ethereum contract. -type GovImpRaw struct { - Contract *GovImp // Generic contract binding to access the raw methods on -} - -// GovImpCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type GovImpCallerRaw struct { - Contract *GovImpCaller // Generic read-only contract binding to access the raw methods on -} - -// GovImpTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type GovImpTransactorRaw struct { - Contract *GovImpTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewGovImp creates a new instance of GovImp, bound to a specific deployed contract. -func NewGovImp(address common.Address, backend bind.ContractBackend) (*GovImp, error) { - contract, err := bindGovImp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &GovImp{GovImpCaller: GovImpCaller{contract: contract}, GovImpTransactor: GovImpTransactor{contract: contract}, GovImpFilterer: GovImpFilterer{contract: contract}}, nil -} - -// NewGovImpCaller creates a new read-only instance of GovImp, bound to a specific deployed contract. -func NewGovImpCaller(address common.Address, caller bind.ContractCaller) (*GovImpCaller, error) { - contract, err := bindGovImp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &GovImpCaller{contract: contract}, nil -} - -// NewGovImpTransactor creates a new write-only instance of GovImp, bound to a specific deployed contract. -func NewGovImpTransactor(address common.Address, transactor bind.ContractTransactor) (*GovImpTransactor, error) { - contract, err := bindGovImp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &GovImpTransactor{contract: contract}, nil -} - -// NewGovImpFilterer creates a new log filterer instance of GovImp, bound to a specific deployed contract. -func NewGovImpFilterer(address common.Address, filterer bind.ContractFilterer) (*GovImpFilterer, error) { - contract, err := bindGovImp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &GovImpFilterer{contract: contract}, nil -} - -// bindGovImp binds a generic wrapper to an already deployed contract. -func bindGovImp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(GovImpABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_GovImp *GovImpRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _GovImp.Contract.GovImpCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_GovImp *GovImpRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GovImp.Contract.GovImpTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_GovImp *GovImpRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _GovImp.Contract.GovImpTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_GovImp *GovImpCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _GovImp.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_GovImp *GovImpTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GovImp.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_GovImp *GovImpTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _GovImp.Contract.contract.Transact(opts, method, params...) -} - -// BALLOTDURATIONMAXNAME is a free data retrieval call binding the contract method 0x0015a73b. -// -// Solidity: function BALLOT_DURATION_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BALLOTDURATIONMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BALLOT_DURATION_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTDURATIONMAXNAME is a free data retrieval call binding the contract method 0x0015a73b. -// -// Solidity: function BALLOT_DURATION_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BALLOTDURATIONMAXNAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTDURATIONMAXNAME(&_GovImp.CallOpts) -} - -// BALLOTDURATIONMAXNAME is a free data retrieval call binding the contract method 0x0015a73b. -// -// Solidity: function BALLOT_DURATION_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BALLOTDURATIONMAXNAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTDURATIONMAXNAME(&_GovImp.CallOpts) -} - -// BALLOTDURATIONMINMAXNAME is a free data retrieval call binding the contract method 0x656e3052. -// -// Solidity: function BALLOT_DURATION_MIN_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BALLOTDURATIONMINMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BALLOT_DURATION_MIN_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTDURATIONMINMAXNAME is a free data retrieval call binding the contract method 0x656e3052. -// -// Solidity: function BALLOT_DURATION_MIN_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BALLOTDURATIONMINMAXNAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTDURATIONMINMAXNAME(&_GovImp.CallOpts) -} - -// BALLOTDURATIONMINMAXNAME is a free data retrieval call binding the contract method 0x656e3052. -// -// Solidity: function BALLOT_DURATION_MIN_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BALLOTDURATIONMINMAXNAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTDURATIONMINMAXNAME(&_GovImp.CallOpts) -} - -// BALLOTDURATIONMINNAME is a free data retrieval call binding the contract method 0x6d583ca7. -// -// Solidity: function BALLOT_DURATION_MIN_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BALLOTDURATIONMINNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BALLOT_DURATION_MIN_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTDURATIONMINNAME is a free data retrieval call binding the contract method 0x6d583ca7. -// -// Solidity: function BALLOT_DURATION_MIN_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BALLOTDURATIONMINNAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTDURATIONMINNAME(&_GovImp.CallOpts) -} - -// BALLOTDURATIONMINNAME is a free data retrieval call binding the contract method 0x6d583ca7. -// -// Solidity: function BALLOT_DURATION_MIN_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BALLOTDURATIONMINNAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTDURATIONMINNAME(&_GovImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BALLOTSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BALLOT_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTSTORAGENAME(&_GovImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _GovImp.Contract.BALLOTSTORAGENAME(&_GovImp.CallOpts) -} - -// BASEFEEMAXCHANGERATENAME is a free data retrieval call binding the contract method 0xc42a0abc. -// -// Solidity: function BASE_FEE_MAX_CHANGE_RATE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BASEFEEMAXCHANGERATENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BASE_FEE_MAX_CHANGE_RATE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BASEFEEMAXCHANGERATENAME is a free data retrieval call binding the contract method 0xc42a0abc. -// -// Solidity: function BASE_FEE_MAX_CHANGE_RATE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BASEFEEMAXCHANGERATENAME() ([32]byte, error) { - return _GovImp.Contract.BASEFEEMAXCHANGERATENAME(&_GovImp.CallOpts) -} - -// BASEFEEMAXCHANGERATENAME is a free data retrieval call binding the contract method 0xc42a0abc. -// -// Solidity: function BASE_FEE_MAX_CHANGE_RATE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BASEFEEMAXCHANGERATENAME() ([32]byte, error) { - return _GovImp.Contract.BASEFEEMAXCHANGERATENAME(&_GovImp.CallOpts) -} - -// BLOCKSPERNAME is a free data retrieval call binding the contract method 0x3f35c8fe. -// -// Solidity: function BLOCKS_PER_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKSPERNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCKS_PER_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKSPERNAME is a free data retrieval call binding the contract method 0x3f35c8fe. -// -// Solidity: function BLOCKS_PER_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKSPERNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKSPERNAME(&_GovImp.CallOpts) -} - -// BLOCKSPERNAME is a free data retrieval call binding the contract method 0x3f35c8fe. -// -// Solidity: function BLOCKS_PER_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKSPERNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKSPERNAME(&_GovImp.CallOpts) -} - -// BLOCKCREATIONTIMENAME is a free data retrieval call binding the contract method 0xc0b4fe15. -// -// Solidity: function BLOCK_CREATION_TIME_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKCREATIONTIMENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_CREATION_TIME_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKCREATIONTIMENAME is a free data retrieval call binding the contract method 0xc0b4fe15. -// -// Solidity: function BLOCK_CREATION_TIME_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKCREATIONTIMENAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKCREATIONTIMENAME(&_GovImp.CallOpts) -} - -// BLOCKCREATIONTIMENAME is a free data retrieval call binding the contract method 0xc0b4fe15. -// -// Solidity: function BLOCK_CREATION_TIME_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKCREATIONTIMENAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKCREATIONTIMENAME(&_GovImp.CallOpts) -} - -// BLOCKGASLIMITNAME is a free data retrieval call binding the contract method 0x238737b6. -// -// Solidity: function BLOCK_GASLIMIT_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKGASLIMITNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_GASLIMIT_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKGASLIMITNAME is a free data retrieval call binding the contract method 0x238737b6. -// -// Solidity: function BLOCK_GASLIMIT_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKGASLIMITNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKGASLIMITNAME(&_GovImp.CallOpts) -} - -// BLOCKGASLIMITNAME is a free data retrieval call binding the contract method 0x238737b6. -// -// Solidity: function BLOCK_GASLIMIT_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKGASLIMITNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKGASLIMITNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDAMOUNTNAME is a free data retrieval call binding the contract method 0xa9b629b2. -// -// Solidity: function BLOCK_REWARD_AMOUNT_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKREWARDAMOUNTNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_REWARD_AMOUNT_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDAMOUNTNAME is a free data retrieval call binding the contract method 0xa9b629b2. -// -// Solidity: function BLOCK_REWARD_AMOUNT_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKREWARDAMOUNTNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDAMOUNTNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDAMOUNTNAME is a free data retrieval call binding the contract method 0xa9b629b2. -// -// Solidity: function BLOCK_REWARD_AMOUNT_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKREWARDAMOUNTNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDAMOUNTNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME is a free data retrieval call binding the contract method 0xc6713baf. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME is a free data retrieval call binding the contract method 0xc6713baf. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME is a free data retrieval call binding the contract method 0xc6713baf. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONBLOCKPRODUCERNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME is a free data retrieval call binding the contract method 0x7b2bfb01. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME is a free data retrieval call binding the contract method 0x7b2bfb01. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME is a free data retrieval call binding the contract method 0x7b2bfb01. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONECOSYSTEMNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMAINTENANCENAME is a free data retrieval call binding the contract method 0x46946416. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKREWARDDISTRIBUTIONMAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONMAINTENANCENAME is a free data retrieval call binding the contract method 0x46946416. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKREWARDDISTRIBUTIONMAINTENANCENAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONMAINTENANCENAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMAINTENANCENAME is a free data retrieval call binding the contract method 0x46946416. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKREWARDDISTRIBUTIONMAINTENANCENAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONMAINTENANCENAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMETHODNAME is a free data retrieval call binding the contract method 0x278bb12a. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_METHOD_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKREWARDDISTRIBUTIONMETHODNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_METHOD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONMETHODNAME is a free data retrieval call binding the contract method 0x278bb12a. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_METHOD_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKREWARDDISTRIBUTIONMETHODNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONMETHODNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONMETHODNAME is a free data retrieval call binding the contract method 0x278bb12a. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_METHOD_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKREWARDDISTRIBUTIONMETHODNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONMETHODNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME is a free data retrieval call binding the contract method 0x6167eb45. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME is a free data retrieval call binding the contract method 0x6167eb45. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME(&_GovImp.CallOpts) -} - -// BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME is a free data retrieval call binding the contract method 0x6167eb45. -// -// Solidity: function BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME() ([32]byte, error) { - return _GovImp.Contract.BLOCKREWARDDISTRIBUTIONSTAKINGREWARDNAME(&_GovImp.CallOpts) -} - -// DENOMINATOR is a free data retrieval call binding the contract method 0x918f8674. -// -// Solidity: function DENOMINATOR() view returns(uint256) -func (_GovImp *GovImpCaller) DENOMINATOR(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "DENOMINATOR") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// DENOMINATOR is a free data retrieval call binding the contract method 0x918f8674. -// -// Solidity: function DENOMINATOR() view returns(uint256) -func (_GovImp *GovImpSession) DENOMINATOR() (*big.Int, error) { - return _GovImp.Contract.DENOMINATOR(&_GovImp.CallOpts) -} - -// DENOMINATOR is a free data retrieval call binding the contract method 0x918f8674. -// -// Solidity: function DENOMINATOR() view returns(uint256) -func (_GovImp *GovImpCallerSession) DENOMINATOR() (*big.Int, error) { - return _GovImp.Contract.DENOMINATOR(&_GovImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) ECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) ECOSYSTEMNAME() ([32]byte, error) { - return _GovImp.Contract.ECOSYSTEMNAME(&_GovImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) ECOSYSTEMNAME() ([32]byte, error) { - return _GovImp.Contract.ECOSYSTEMNAME(&_GovImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) ENVSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "ENV_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) ENVSTORAGENAME() ([32]byte, error) { - return _GovImp.Contract.ENVSTORAGENAME(&_GovImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) ENVSTORAGENAME() ([32]byte, error) { - return _GovImp.Contract.ENVSTORAGENAME(&_GovImp.CallOpts) -} - -// GASLIMITANDBASEFEENAME is a free data retrieval call binding the contract method 0xc7d3da34. -// -// Solidity: function GASLIMIT_AND_BASE_FEE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) GASLIMITANDBASEFEENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "GASLIMIT_AND_BASE_FEE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GASLIMITANDBASEFEENAME is a free data retrieval call binding the contract method 0xc7d3da34. -// -// Solidity: function GASLIMIT_AND_BASE_FEE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) GASLIMITANDBASEFEENAME() ([32]byte, error) { - return _GovImp.Contract.GASLIMITANDBASEFEENAME(&_GovImp.CallOpts) -} - -// GASLIMITANDBASEFEENAME is a free data retrieval call binding the contract method 0xc7d3da34. -// -// Solidity: function GASLIMIT_AND_BASE_FEE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) GASLIMITANDBASEFEENAME() ([32]byte, error) { - return _GovImp.Contract.GASLIMITANDBASEFEENAME(&_GovImp.CallOpts) -} - -// GASTARGETPERCENTAGENAME is a free data retrieval call binding the contract method 0x4d273e28. -// -// Solidity: function GAS_TARGET_PERCENTAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) GASTARGETPERCENTAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "GAS_TARGET_PERCENTAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GASTARGETPERCENTAGENAME is a free data retrieval call binding the contract method 0x4d273e28. -// -// Solidity: function GAS_TARGET_PERCENTAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) GASTARGETPERCENTAGENAME() ([32]byte, error) { - return _GovImp.Contract.GASTARGETPERCENTAGENAME(&_GovImp.CallOpts) -} - -// GASTARGETPERCENTAGENAME is a free data retrieval call binding the contract method 0x4d273e28. -// -// Solidity: function GAS_TARGET_PERCENTAGE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) GASTARGETPERCENTAGENAME() ([32]byte, error) { - return _GovImp.Contract.GASTARGETPERCENTAGENAME(&_GovImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) GOVNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "GOV_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) GOVNAME() ([32]byte, error) { - return _GovImp.Contract.GOVNAME(&_GovImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) GOVNAME() ([32]byte, error) { - return _GovImp.Contract.GOVNAME(&_GovImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) MAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) MAINTENANCENAME() ([32]byte, error) { - return _GovImp.Contract.MAINTENANCENAME(&_GovImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) MAINTENANCENAME() ([32]byte, error) { - return _GovImp.Contract.MAINTENANCENAME(&_GovImp.CallOpts) -} - -// MAXBASEFEENAME is a free data retrieval call binding the contract method 0xf38ecf47. -// -// Solidity: function MAX_BASE_FEE_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) MAXBASEFEENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "MAX_BASE_FEE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXBASEFEENAME is a free data retrieval call binding the contract method 0xf38ecf47. -// -// Solidity: function MAX_BASE_FEE_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) MAXBASEFEENAME() ([32]byte, error) { - return _GovImp.Contract.MAXBASEFEENAME(&_GovImp.CallOpts) -} - -// MAXBASEFEENAME is a free data retrieval call binding the contract method 0xf38ecf47. -// -// Solidity: function MAX_BASE_FEE_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) MAXBASEFEENAME() ([32]byte, error) { - return _GovImp.Contract.MAXBASEFEENAME(&_GovImp.CallOpts) -} - -// MAXIDLEBLOCKINTERVALNAME is a free data retrieval call binding the contract method 0xb128f880. -// -// Solidity: function MAX_IDLE_BLOCK_INTERVAL_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) MAXIDLEBLOCKINTERVALNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "MAX_IDLE_BLOCK_INTERVAL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXIDLEBLOCKINTERVALNAME is a free data retrieval call binding the contract method 0xb128f880. -// -// Solidity: function MAX_IDLE_BLOCK_INTERVAL_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) MAXIDLEBLOCKINTERVALNAME() ([32]byte, error) { - return _GovImp.Contract.MAXIDLEBLOCKINTERVALNAME(&_GovImp.CallOpts) -} - -// MAXIDLEBLOCKINTERVALNAME is a free data retrieval call binding the contract method 0xb128f880. -// -// Solidity: function MAX_IDLE_BLOCK_INTERVAL_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) MAXIDLEBLOCKINTERVALNAME() ([32]byte, error) { - return _GovImp.Contract.MAXIDLEBLOCKINTERVALNAME(&_GovImp.CallOpts) -} - -// MAXPRIORITYFEEPERGASNAME is a free data retrieval call binding the contract method 0x38294419. -// -// Solidity: function MAX_PRIORITY_FEE_PER_GAS_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) MAXPRIORITYFEEPERGASNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "MAX_PRIORITY_FEE_PER_GAS_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXPRIORITYFEEPERGASNAME is a free data retrieval call binding the contract method 0x38294419. -// -// Solidity: function MAX_PRIORITY_FEE_PER_GAS_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) MAXPRIORITYFEEPERGASNAME() ([32]byte, error) { - return _GovImp.Contract.MAXPRIORITYFEEPERGASNAME(&_GovImp.CallOpts) -} - -// MAXPRIORITYFEEPERGASNAME is a free data retrieval call binding the contract method 0x38294419. -// -// Solidity: function MAX_PRIORITY_FEE_PER_GAS_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) MAXPRIORITYFEEPERGASNAME() ([32]byte, error) { - return _GovImp.Contract.MAXPRIORITYFEEPERGASNAME(&_GovImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) REWARDPOOLNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "REWARD_POOL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) REWARDPOOLNAME() ([32]byte, error) { - return _GovImp.Contract.REWARDPOOLNAME(&_GovImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) REWARDPOOLNAME() ([32]byte, error) { - return _GovImp.Contract.REWARDPOOLNAME(&_GovImp.CallOpts) -} - -// STAKINGMAXNAME is a free data retrieval call binding the contract method 0xc00ace6c. -// -// Solidity: function STAKING_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) STAKINGMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "STAKING_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMAXNAME is a free data retrieval call binding the contract method 0xc00ace6c. -// -// Solidity: function STAKING_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) STAKINGMAXNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGMAXNAME(&_GovImp.CallOpts) -} - -// STAKINGMAXNAME is a free data retrieval call binding the contract method 0xc00ace6c. -// -// Solidity: function STAKING_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) STAKINGMAXNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGMAXNAME(&_GovImp.CallOpts) -} - -// STAKINGMINMAXNAME is a free data retrieval call binding the contract method 0xa6868b7d. -// -// Solidity: function STAKING_MIN_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) STAKINGMINMAXNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "STAKING_MIN_MAX_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMINMAXNAME is a free data retrieval call binding the contract method 0xa6868b7d. -// -// Solidity: function STAKING_MIN_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) STAKINGMINMAXNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGMINMAXNAME(&_GovImp.CallOpts) -} - -// STAKINGMINMAXNAME is a free data retrieval call binding the contract method 0xa6868b7d. -// -// Solidity: function STAKING_MIN_MAX_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) STAKINGMINMAXNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGMINMAXNAME(&_GovImp.CallOpts) -} - -// STAKINGMINNAME is a free data retrieval call binding the contract method 0x6fde207a. -// -// Solidity: function STAKING_MIN_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) STAKINGMINNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "STAKING_MIN_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGMINNAME is a free data retrieval call binding the contract method 0x6fde207a. -// -// Solidity: function STAKING_MIN_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) STAKINGMINNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGMINNAME(&_GovImp.CallOpts) -} - -// STAKINGMINNAME is a free data retrieval call binding the contract method 0x6fde207a. -// -// Solidity: function STAKING_MIN_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) STAKINGMINNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGMINNAME(&_GovImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) STAKINGNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "STAKING_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) STAKINGNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGNAME(&_GovImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) STAKINGNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGNAME(&_GovImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_GovImp *GovImpCaller) STAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_GovImp *GovImpSession) STAKINGREWARDNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGREWARDNAME(&_GovImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_GovImp *GovImpCallerSession) STAKINGREWARDNAME() ([32]byte, error) { - return _GovImp.Contract.STAKINGREWARDNAME(&_GovImp.CallOpts) -} - -// BallotLength is a free data retrieval call binding the contract method 0xd6f9cfce. -// -// Solidity: function ballotLength() view returns(uint256) -func (_GovImp *GovImpCaller) BallotLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "ballotLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// BallotLength is a free data retrieval call binding the contract method 0xd6f9cfce. -// -// Solidity: function ballotLength() view returns(uint256) -func (_GovImp *GovImpSession) BallotLength() (*big.Int, error) { - return _GovImp.Contract.BallotLength(&_GovImp.CallOpts) -} - -// BallotLength is a free data retrieval call binding the contract method 0xd6f9cfce. -// -// Solidity: function ballotLength() view returns(uint256) -func (_GovImp *GovImpCallerSession) BallotLength() (*big.Int, error) { - return _GovImp.Contract.BallotLength(&_GovImp.CallOpts) -} - -// CheckUnfinalized is a free data retrieval call binding the contract method 0x1c12b030. -// -// Solidity: function checkUnfinalized() view returns(bool) -func (_GovImp *GovImpCaller) CheckUnfinalized(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "checkUnfinalized") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// CheckUnfinalized is a free data retrieval call binding the contract method 0x1c12b030. -// -// Solidity: function checkUnfinalized() view returns(bool) -func (_GovImp *GovImpSession) CheckUnfinalized() (bool, error) { - return _GovImp.Contract.CheckUnfinalized(&_GovImp.CallOpts) -} - -// CheckUnfinalized is a free data retrieval call binding the contract method 0x1c12b030. -// -// Solidity: function checkUnfinalized() view returns(bool) -func (_GovImp *GovImpCallerSession) CheckUnfinalized() (bool, error) { - return _GovImp.Contract.CheckUnfinalized(&_GovImp.CallOpts) -} - -// GetBallotInVoting is a free data retrieval call binding the contract method 0xde09b377. -// -// Solidity: function getBallotInVoting() view returns(uint256) -func (_GovImp *GovImpCaller) GetBallotInVoting(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getBallotInVoting") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetBallotInVoting is a free data retrieval call binding the contract method 0xde09b377. -// -// Solidity: function getBallotInVoting() view returns(uint256) -func (_GovImp *GovImpSession) GetBallotInVoting() (*big.Int, error) { - return _GovImp.Contract.GetBallotInVoting(&_GovImp.CallOpts) -} - -// GetBallotInVoting is a free data retrieval call binding the contract method 0xde09b377. -// -// Solidity: function getBallotInVoting() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetBallotInVoting() (*big.Int, error) { - return _GovImp.Contract.GetBallotInVoting(&_GovImp.CallOpts) -} - -// GetMaxStaking is a free data retrieval call binding the contract method 0x5aaa4040. -// -// Solidity: function getMaxStaking() view returns(uint256) -func (_GovImp *GovImpCaller) GetMaxStaking(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMaxStaking") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxStaking is a free data retrieval call binding the contract method 0x5aaa4040. -// -// Solidity: function getMaxStaking() view returns(uint256) -func (_GovImp *GovImpSession) GetMaxStaking() (*big.Int, error) { - return _GovImp.Contract.GetMaxStaking(&_GovImp.CallOpts) -} - -// GetMaxStaking is a free data retrieval call binding the contract method 0x5aaa4040. -// -// Solidity: function getMaxStaking() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetMaxStaking() (*big.Int, error) { - return _GovImp.Contract.GetMaxStaking(&_GovImp.CallOpts) -} - -// GetMaxVotingDuration is a free data retrieval call binding the contract method 0xce04b9d4. -// -// Solidity: function getMaxVotingDuration() view returns(uint256) -func (_GovImp *GovImpCaller) GetMaxVotingDuration(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMaxVotingDuration") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxVotingDuration is a free data retrieval call binding the contract method 0xce04b9d4. -// -// Solidity: function getMaxVotingDuration() view returns(uint256) -func (_GovImp *GovImpSession) GetMaxVotingDuration() (*big.Int, error) { - return _GovImp.Contract.GetMaxVotingDuration(&_GovImp.CallOpts) -} - -// GetMaxVotingDuration is a free data retrieval call binding the contract method 0xce04b9d4. -// -// Solidity: function getMaxVotingDuration() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetMaxVotingDuration() (*big.Int, error) { - return _GovImp.Contract.GetMaxVotingDuration(&_GovImp.CallOpts) -} - -// GetMember is a free data retrieval call binding the contract method 0xab3545e5. -// -// Solidity: function getMember(uint256 idx) view returns(address) -func (_GovImp *GovImpCaller) GetMember(opts *bind.CallOpts, idx *big.Int) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMember", idx) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetMember is a free data retrieval call binding the contract method 0xab3545e5. -// -// Solidity: function getMember(uint256 idx) view returns(address) -func (_GovImp *GovImpSession) GetMember(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetMember(&_GovImp.CallOpts, idx) -} - -// GetMember is a free data retrieval call binding the contract method 0xab3545e5. -// -// Solidity: function getMember(uint256 idx) view returns(address) -func (_GovImp *GovImpCallerSession) GetMember(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetMember(&_GovImp.CallOpts, idx) -} - -// GetMemberFromNodeIdx is a free data retrieval call binding the contract method 0x15bf6b4d. -// -// Solidity: function getMemberFromNodeIdx(uint256 idx) view returns(address) -func (_GovImp *GovImpCaller) GetMemberFromNodeIdx(opts *bind.CallOpts, idx *big.Int) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMemberFromNodeIdx", idx) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetMemberFromNodeIdx is a free data retrieval call binding the contract method 0x15bf6b4d. -// -// Solidity: function getMemberFromNodeIdx(uint256 idx) view returns(address) -func (_GovImp *GovImpSession) GetMemberFromNodeIdx(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetMemberFromNodeIdx(&_GovImp.CallOpts, idx) -} - -// GetMemberFromNodeIdx is a free data retrieval call binding the contract method 0x15bf6b4d. -// -// Solidity: function getMemberFromNodeIdx(uint256 idx) view returns(address) -func (_GovImp *GovImpCallerSession) GetMemberFromNodeIdx(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetMemberFromNodeIdx(&_GovImp.CallOpts, idx) -} - -// GetMemberLength is a free data retrieval call binding the contract method 0xd965ea00. -// -// Solidity: function getMemberLength() view returns(uint256) -func (_GovImp *GovImpCaller) GetMemberLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMemberLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMemberLength is a free data retrieval call binding the contract method 0xd965ea00. -// -// Solidity: function getMemberLength() view returns(uint256) -func (_GovImp *GovImpSession) GetMemberLength() (*big.Int, error) { - return _GovImp.Contract.GetMemberLength(&_GovImp.CallOpts) -} - -// GetMemberLength is a free data retrieval call binding the contract method 0xd965ea00. -// -// Solidity: function getMemberLength() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetMemberLength() (*big.Int, error) { - return _GovImp.Contract.GetMemberLength(&_GovImp.CallOpts) -} - -// GetMinStaking is a free data retrieval call binding the contract method 0xaf6af2ff. -// -// Solidity: function getMinStaking() view returns(uint256) -func (_GovImp *GovImpCaller) GetMinStaking(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMinStaking") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMinStaking is a free data retrieval call binding the contract method 0xaf6af2ff. -// -// Solidity: function getMinStaking() view returns(uint256) -func (_GovImp *GovImpSession) GetMinStaking() (*big.Int, error) { - return _GovImp.Contract.GetMinStaking(&_GovImp.CallOpts) -} - -// GetMinStaking is a free data retrieval call binding the contract method 0xaf6af2ff. -// -// Solidity: function getMinStaking() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetMinStaking() (*big.Int, error) { - return _GovImp.Contract.GetMinStaking(&_GovImp.CallOpts) -} - -// GetMinVotingDuration is a free data retrieval call binding the contract method 0x1c150171. -// -// Solidity: function getMinVotingDuration() view returns(uint256) -func (_GovImp *GovImpCaller) GetMinVotingDuration(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getMinVotingDuration") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMinVotingDuration is a free data retrieval call binding the contract method 0x1c150171. -// -// Solidity: function getMinVotingDuration() view returns(uint256) -func (_GovImp *GovImpSession) GetMinVotingDuration() (*big.Int, error) { - return _GovImp.Contract.GetMinVotingDuration(&_GovImp.CallOpts) -} - -// GetMinVotingDuration is a free data retrieval call binding the contract method 0x1c150171. -// -// Solidity: function getMinVotingDuration() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetMinVotingDuration() (*big.Int, error) { - return _GovImp.Contract.GetMinVotingDuration(&_GovImp.CallOpts) -} - -// GetNode is a free data retrieval call binding the contract method 0x4f0f4aa9. -// -// Solidity: function getNode(uint256 idx) view returns(bytes name, bytes enode, bytes ip, uint256 port) -func (_GovImp *GovImpCaller) GetNode(opts *bind.CallOpts, idx *big.Int) (struct { - Name []byte - Enode []byte - Ip []byte - Port *big.Int -}, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getNode", idx) - - outstruct := new(struct { - Name []byte - Enode []byte - Ip []byte - Port *big.Int - }) - if err != nil { - return *outstruct, err - } - - outstruct.Name = *abi.ConvertType(out[0], new([]byte)).(*[]byte) - outstruct.Enode = *abi.ConvertType(out[1], new([]byte)).(*[]byte) - outstruct.Ip = *abi.ConvertType(out[2], new([]byte)).(*[]byte) - outstruct.Port = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - - return *outstruct, err - -} - -// GetNode is a free data retrieval call binding the contract method 0x4f0f4aa9. -// -// Solidity: function getNode(uint256 idx) view returns(bytes name, bytes enode, bytes ip, uint256 port) -func (_GovImp *GovImpSession) GetNode(idx *big.Int) (struct { - Name []byte - Enode []byte - Ip []byte - Port *big.Int -}, error) { - return _GovImp.Contract.GetNode(&_GovImp.CallOpts, idx) -} - -// GetNode is a free data retrieval call binding the contract method 0x4f0f4aa9. -// -// Solidity: function getNode(uint256 idx) view returns(bytes name, bytes enode, bytes ip, uint256 port) -func (_GovImp *GovImpCallerSession) GetNode(idx *big.Int) (struct { - Name []byte - Enode []byte - Ip []byte - Port *big.Int -}, error) { - return _GovImp.Contract.GetNode(&_GovImp.CallOpts, idx) -} - -// GetNodeIdxFromMember is a free data retrieval call binding the contract method 0xce6a54ff. -// -// Solidity: function getNodeIdxFromMember(address addr) view returns(uint256) -func (_GovImp *GovImpCaller) GetNodeIdxFromMember(opts *bind.CallOpts, addr common.Address) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getNodeIdxFromMember", addr) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetNodeIdxFromMember is a free data retrieval call binding the contract method 0xce6a54ff. -// -// Solidity: function getNodeIdxFromMember(address addr) view returns(uint256) -func (_GovImp *GovImpSession) GetNodeIdxFromMember(addr common.Address) (*big.Int, error) { - return _GovImp.Contract.GetNodeIdxFromMember(&_GovImp.CallOpts, addr) -} - -// GetNodeIdxFromMember is a free data retrieval call binding the contract method 0xce6a54ff. -// -// Solidity: function getNodeIdxFromMember(address addr) view returns(uint256) -func (_GovImp *GovImpCallerSession) GetNodeIdxFromMember(addr common.Address) (*big.Int, error) { - return _GovImp.Contract.GetNodeIdxFromMember(&_GovImp.CallOpts, addr) -} - -// GetNodeLength is a free data retrieval call binding the contract method 0x72016f75. -// -// Solidity: function getNodeLength() view returns(uint256) -func (_GovImp *GovImpCaller) GetNodeLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getNodeLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetNodeLength is a free data retrieval call binding the contract method 0x72016f75. -// -// Solidity: function getNodeLength() view returns(uint256) -func (_GovImp *GovImpSession) GetNodeLength() (*big.Int, error) { - return _GovImp.Contract.GetNodeLength(&_GovImp.CallOpts) -} - -// GetNodeLength is a free data retrieval call binding the contract method 0x72016f75. -// -// Solidity: function getNodeLength() view returns(uint256) -func (_GovImp *GovImpCallerSession) GetNodeLength() (*big.Int, error) { - return _GovImp.Contract.GetNodeLength(&_GovImp.CallOpts) -} - -// GetReward is a free data retrieval call binding the contract method 0x1c4b774b. -// -// Solidity: function getReward(uint256 idx) view returns(address) -func (_GovImp *GovImpCaller) GetReward(opts *bind.CallOpts, idx *big.Int) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getReward", idx) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetReward is a free data retrieval call binding the contract method 0x1c4b774b. -// -// Solidity: function getReward(uint256 idx) view returns(address) -func (_GovImp *GovImpSession) GetReward(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetReward(&_GovImp.CallOpts, idx) -} - -// GetReward is a free data retrieval call binding the contract method 0x1c4b774b. -// -// Solidity: function getReward(uint256 idx) view returns(address) -func (_GovImp *GovImpCallerSession) GetReward(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetReward(&_GovImp.CallOpts, idx) -} - -// GetStakerAddr is a free data retrieval call binding the contract method 0x6f6de96d. -// -// Solidity: function getStakerAddr(address _addr) view returns(address staker) -func (_GovImp *GovImpCaller) GetStakerAddr(opts *bind.CallOpts, _addr common.Address) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getStakerAddr", _addr) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetStakerAddr is a free data retrieval call binding the contract method 0x6f6de96d. -// -// Solidity: function getStakerAddr(address _addr) view returns(address staker) -func (_GovImp *GovImpSession) GetStakerAddr(_addr common.Address) (common.Address, error) { - return _GovImp.Contract.GetStakerAddr(&_GovImp.CallOpts, _addr) -} - -// GetStakerAddr is a free data retrieval call binding the contract method 0x6f6de96d. -// -// Solidity: function getStakerAddr(address _addr) view returns(address staker) -func (_GovImp *GovImpCallerSession) GetStakerAddr(_addr common.Address) (common.Address, error) { - return _GovImp.Contract.GetStakerAddr(&_GovImp.CallOpts, _addr) -} - -// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. -// -// Solidity: function getThreshold() pure returns(uint256) -func (_GovImp *GovImpCaller) GetThreshold(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getThreshold") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. -// -// Solidity: function getThreshold() pure returns(uint256) -func (_GovImp *GovImpSession) GetThreshold() (*big.Int, error) { - return _GovImp.Contract.GetThreshold(&_GovImp.CallOpts) -} - -// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. -// -// Solidity: function getThreshold() pure returns(uint256) -func (_GovImp *GovImpCallerSession) GetThreshold() (*big.Int, error) { - return _GovImp.Contract.GetThreshold(&_GovImp.CallOpts) -} - -// GetVoter is a free data retrieval call binding the contract method 0xd07bff0c. -// -// Solidity: function getVoter(uint256 idx) view returns(address) -func (_GovImp *GovImpCaller) GetVoter(opts *bind.CallOpts, idx *big.Int) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "getVoter", idx) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetVoter is a free data retrieval call binding the contract method 0xd07bff0c. -// -// Solidity: function getVoter(uint256 idx) view returns(address) -func (_GovImp *GovImpSession) GetVoter(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetVoter(&_GovImp.CallOpts, idx) -} - -// GetVoter is a free data retrieval call binding the contract method 0xd07bff0c. -// -// Solidity: function getVoter(uint256 idx) view returns(address) -func (_GovImp *GovImpCallerSession) GetVoter(idx *big.Int) (common.Address, error) { - return _GovImp.Contract.GetVoter(&_GovImp.CallOpts, idx) -} - -// IsMember is a free data retrieval call binding the contract method 0xa230c524. -// -// Solidity: function isMember(address addr) view returns(bool) -func (_GovImp *GovImpCaller) IsMember(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "isMember", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsMember is a free data retrieval call binding the contract method 0xa230c524. -// -// Solidity: function isMember(address addr) view returns(bool) -func (_GovImp *GovImpSession) IsMember(addr common.Address) (bool, error) { - return _GovImp.Contract.IsMember(&_GovImp.CallOpts, addr) -} - -// IsMember is a free data retrieval call binding the contract method 0xa230c524. -// -// Solidity: function isMember(address addr) view returns(bool) -func (_GovImp *GovImpCallerSession) IsMember(addr common.Address) (bool, error) { - return _GovImp.Contract.IsMember(&_GovImp.CallOpts, addr) -} - -// IsReward is a free data retrieval call binding the contract method 0x4d5ce038. -// -// Solidity: function isReward(address addr) view returns(bool) -func (_GovImp *GovImpCaller) IsReward(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "isReward", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsReward is a free data retrieval call binding the contract method 0x4d5ce038. -// -// Solidity: function isReward(address addr) view returns(bool) -func (_GovImp *GovImpSession) IsReward(addr common.Address) (bool, error) { - return _GovImp.Contract.IsReward(&_GovImp.CallOpts, addr) -} - -// IsReward is a free data retrieval call binding the contract method 0x4d5ce038. -// -// Solidity: function isReward(address addr) view returns(bool) -func (_GovImp *GovImpCallerSession) IsReward(addr common.Address) (bool, error) { - return _GovImp.Contract.IsReward(&_GovImp.CallOpts, addr) -} - -// IsStaker is a free data retrieval call binding the contract method 0x6f1e8533. -// -// Solidity: function isStaker(address addr) view returns(bool) -func (_GovImp *GovImpCaller) IsStaker(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "isStaker", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsStaker is a free data retrieval call binding the contract method 0x6f1e8533. -// -// Solidity: function isStaker(address addr) view returns(bool) -func (_GovImp *GovImpSession) IsStaker(addr common.Address) (bool, error) { - return _GovImp.Contract.IsStaker(&_GovImp.CallOpts, addr) -} - -// IsStaker is a free data retrieval call binding the contract method 0x6f1e8533. -// -// Solidity: function isStaker(address addr) view returns(bool) -func (_GovImp *GovImpCallerSession) IsStaker(addr common.Address) (bool, error) { - return _GovImp.Contract.IsStaker(&_GovImp.CallOpts, addr) -} - -// IsVoter is a free data retrieval call binding the contract method 0xa7771ee3. -// -// Solidity: function isVoter(address addr) view returns(bool) -func (_GovImp *GovImpCaller) IsVoter(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "isVoter", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsVoter is a free data retrieval call binding the contract method 0xa7771ee3. -// -// Solidity: function isVoter(address addr) view returns(bool) -func (_GovImp *GovImpSession) IsVoter(addr common.Address) (bool, error) { - return _GovImp.Contract.IsVoter(&_GovImp.CallOpts, addr) -} - -// IsVoter is a free data retrieval call binding the contract method 0xa7771ee3. -// -// Solidity: function isVoter(address addr) view returns(bool) -func (_GovImp *GovImpCallerSession) IsVoter(addr common.Address) (bool, error) { - return _GovImp.Contract.IsVoter(&_GovImp.CallOpts, addr) -} - -// LastAddProposalTime is a free data retrieval call binding the contract method 0x139d9dd3. -// -// Solidity: function lastAddProposalTime(address ) view returns(uint256) -func (_GovImp *GovImpCaller) LastAddProposalTime(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "lastAddProposalTime", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LastAddProposalTime is a free data retrieval call binding the contract method 0x139d9dd3. -// -// Solidity: function lastAddProposalTime(address ) view returns(uint256) -func (_GovImp *GovImpSession) LastAddProposalTime(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.LastAddProposalTime(&_GovImp.CallOpts, arg0) -} - -// LastAddProposalTime is a free data retrieval call binding the contract method 0x139d9dd3. -// -// Solidity: function lastAddProposalTime(address ) view returns(uint256) -func (_GovImp *GovImpCallerSession) LastAddProposalTime(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.LastAddProposalTime(&_GovImp.CallOpts, arg0) -} - -// ModifiedBlock is a free data retrieval call binding the contract method 0x7d10dd1b. -// -// Solidity: function modifiedBlock() view returns(uint256) -func (_GovImp *GovImpCaller) ModifiedBlock(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "modifiedBlock") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ModifiedBlock is a free data retrieval call binding the contract method 0x7d10dd1b. -// -// Solidity: function modifiedBlock() view returns(uint256) -func (_GovImp *GovImpSession) ModifiedBlock() (*big.Int, error) { - return _GovImp.Contract.ModifiedBlock(&_GovImp.CallOpts) -} - -// ModifiedBlock is a free data retrieval call binding the contract method 0x7d10dd1b. -// -// Solidity: function modifiedBlock() view returns(uint256) -func (_GovImp *GovImpCallerSession) ModifiedBlock() (*big.Int, error) { - return _GovImp.Contract.ModifiedBlock(&_GovImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_GovImp *GovImpCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_GovImp *GovImpSession) Owner() (common.Address, error) { - return _GovImp.Contract.Owner(&_GovImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_GovImp *GovImpCallerSession) Owner() (common.Address, error) { - return _GovImp.Contract.Owner(&_GovImp.CallOpts) -} - -// ProposalTimePeriod is a free data retrieval call binding the contract method 0x3310569c. -// -// Solidity: function proposal_time_period() view returns(uint256) -func (_GovImp *GovImpCaller) ProposalTimePeriod(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "proposal_time_period") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ProposalTimePeriod is a free data retrieval call binding the contract method 0x3310569c. -// -// Solidity: function proposal_time_period() view returns(uint256) -func (_GovImp *GovImpSession) ProposalTimePeriod() (*big.Int, error) { - return _GovImp.Contract.ProposalTimePeriod(&_GovImp.CallOpts) -} - -// ProposalTimePeriod is a free data retrieval call binding the contract method 0x3310569c. -// -// Solidity: function proposal_time_period() view returns(uint256) -func (_GovImp *GovImpCallerSession) ProposalTimePeriod() (*big.Int, error) { - return _GovImp.Contract.ProposalTimePeriod(&_GovImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_GovImp *GovImpCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "proxiableUUID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_GovImp *GovImpSession) ProxiableUUID() ([32]byte, error) { - return _GovImp.Contract.ProxiableUUID(&_GovImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_GovImp *GovImpCallerSession) ProxiableUUID() ([32]byte, error) { - return _GovImp.Contract.ProxiableUUID(&_GovImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_GovImp *GovImpCaller) Reg(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "reg") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_GovImp *GovImpSession) Reg() (common.Address, error) { - return _GovImp.Contract.Reg(&_GovImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_GovImp *GovImpCallerSession) Reg() (common.Address, error) { - return _GovImp.Contract.Reg(&_GovImp.CallOpts) -} - -// RewardIdx is a free data retrieval call binding the contract method 0xaaf0dd36. -// -// Solidity: function rewardIdx(address ) view returns(uint256) -func (_GovImp *GovImpCaller) RewardIdx(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "rewardIdx", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// RewardIdx is a free data retrieval call binding the contract method 0xaaf0dd36. -// -// Solidity: function rewardIdx(address ) view returns(uint256) -func (_GovImp *GovImpSession) RewardIdx(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.RewardIdx(&_GovImp.CallOpts, arg0) -} - -// RewardIdx is a free data retrieval call binding the contract method 0xaaf0dd36. -// -// Solidity: function rewardIdx(address ) view returns(uint256) -func (_GovImp *GovImpCallerSession) RewardIdx(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.RewardIdx(&_GovImp.CallOpts, arg0) -} - -// StakerIdx is a free data retrieval call binding the contract method 0xa0c12683. -// -// Solidity: function stakerIdx(address ) view returns(uint256) -func (_GovImp *GovImpCaller) StakerIdx(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "stakerIdx", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StakerIdx is a free data retrieval call binding the contract method 0xa0c12683. -// -// Solidity: function stakerIdx(address ) view returns(uint256) -func (_GovImp *GovImpSession) StakerIdx(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.StakerIdx(&_GovImp.CallOpts, arg0) -} - -// StakerIdx is a free data retrieval call binding the contract method 0xa0c12683. -// -// Solidity: function stakerIdx(address ) view returns(uint256) -func (_GovImp *GovImpCallerSession) StakerIdx(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.StakerIdx(&_GovImp.CallOpts, arg0) -} - -// VoteLength is a free data retrieval call binding the contract method 0xe9523fb5. -// -// Solidity: function voteLength() view returns(uint256) -func (_GovImp *GovImpCaller) VoteLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "voteLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// VoteLength is a free data retrieval call binding the contract method 0xe9523fb5. -// -// Solidity: function voteLength() view returns(uint256) -func (_GovImp *GovImpSession) VoteLength() (*big.Int, error) { - return _GovImp.Contract.VoteLength(&_GovImp.CallOpts) -} - -// VoteLength is a free data retrieval call binding the contract method 0xe9523fb5. -// -// Solidity: function voteLength() view returns(uint256) -func (_GovImp *GovImpCallerSession) VoteLength() (*big.Int, error) { - return _GovImp.Contract.VoteLength(&_GovImp.CallOpts) -} - -// VoterIdx is a free data retrieval call binding the contract method 0xcec5b622. -// -// Solidity: function voterIdx(address ) view returns(uint256) -func (_GovImp *GovImpCaller) VoterIdx(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var out []interface{} - err := _GovImp.contract.Call(opts, &out, "voterIdx", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// VoterIdx is a free data retrieval call binding the contract method 0xcec5b622. -// -// Solidity: function voterIdx(address ) view returns(uint256) -func (_GovImp *GovImpSession) VoterIdx(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.VoterIdx(&_GovImp.CallOpts, arg0) -} - -// VoterIdx is a free data retrieval call binding the contract method 0xcec5b622. -// -// Solidity: function voterIdx(address ) view returns(uint256) -func (_GovImp *GovImpCallerSession) VoterIdx(arg0 common.Address) (*big.Int, error) { - return _GovImp.Contract.VoterIdx(&_GovImp.CallOpts, arg0) -} - -// AddProposalToAddMember is a paid mutator transaction binding the contract method 0x36e83d83. -// -// Solidity: function addProposalToAddMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256) info) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactor) AddProposalToAddMember(opts *bind.TransactOpts, info GovImpMemberInfo) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "addProposalToAddMember", info) -} - -// AddProposalToAddMember is a paid mutator transaction binding the contract method 0x36e83d83. -// -// Solidity: function addProposalToAddMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256) info) returns(uint256 ballotIdx) -func (_GovImp *GovImpSession) AddProposalToAddMember(info GovImpMemberInfo) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToAddMember(&_GovImp.TransactOpts, info) -} - -// AddProposalToAddMember is a paid mutator transaction binding the contract method 0x36e83d83. -// -// Solidity: function addProposalToAddMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256) info) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactorSession) AddProposalToAddMember(info GovImpMemberInfo) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToAddMember(&_GovImp.TransactOpts, info) -} - -// AddProposalToChangeEnv is a paid mutator transaction binding the contract method 0x40690353. -// -// Solidity: function addProposalToChangeEnv(bytes32 envName, uint256 envType, bytes envVal, bytes memo, uint256 duration) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactor) AddProposalToChangeEnv(opts *bind.TransactOpts, envName [32]byte, envType *big.Int, envVal []byte, memo []byte, duration *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "addProposalToChangeEnv", envName, envType, envVal, memo, duration) -} - -// AddProposalToChangeEnv is a paid mutator transaction binding the contract method 0x40690353. -// -// Solidity: function addProposalToChangeEnv(bytes32 envName, uint256 envType, bytes envVal, bytes memo, uint256 duration) returns(uint256 ballotIdx) -func (_GovImp *GovImpSession) AddProposalToChangeEnv(envName [32]byte, envType *big.Int, envVal []byte, memo []byte, duration *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToChangeEnv(&_GovImp.TransactOpts, envName, envType, envVal, memo, duration) -} - -// AddProposalToChangeEnv is a paid mutator transaction binding the contract method 0x40690353. -// -// Solidity: function addProposalToChangeEnv(bytes32 envName, uint256 envType, bytes envVal, bytes memo, uint256 duration) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactorSession) AddProposalToChangeEnv(envName [32]byte, envType *big.Int, envVal []byte, memo []byte, duration *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToChangeEnv(&_GovImp.TransactOpts, envName, envType, envVal, memo, duration) -} - -// AddProposalToChangeGov is a paid mutator transaction binding the contract method 0x0efa4909. -// -// Solidity: function addProposalToChangeGov(address newGovAddr, bytes memo, uint256 duration) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactor) AddProposalToChangeGov(opts *bind.TransactOpts, newGovAddr common.Address, memo []byte, duration *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "addProposalToChangeGov", newGovAddr, memo, duration) -} - -// AddProposalToChangeGov is a paid mutator transaction binding the contract method 0x0efa4909. -// -// Solidity: function addProposalToChangeGov(address newGovAddr, bytes memo, uint256 duration) returns(uint256 ballotIdx) -func (_GovImp *GovImpSession) AddProposalToChangeGov(newGovAddr common.Address, memo []byte, duration *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToChangeGov(&_GovImp.TransactOpts, newGovAddr, memo, duration) -} - -// AddProposalToChangeGov is a paid mutator transaction binding the contract method 0x0efa4909. -// -// Solidity: function addProposalToChangeGov(address newGovAddr, bytes memo, uint256 duration) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactorSession) AddProposalToChangeGov(newGovAddr common.Address, memo []byte, duration *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToChangeGov(&_GovImp.TransactOpts, newGovAddr, memo, duration) -} - -// AddProposalToChangeMember is a paid mutator transaction binding the contract method 0xa78a8188. -// -// Solidity: function addProposalToChangeMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256) newInfo, address oldStaker, uint256 unlockAmount, uint256 slashing) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactor) AddProposalToChangeMember(opts *bind.TransactOpts, newInfo GovImpMemberInfo, oldStaker common.Address, unlockAmount *big.Int, slashing *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "addProposalToChangeMember", newInfo, oldStaker, unlockAmount, slashing) -} - -// AddProposalToChangeMember is a paid mutator transaction binding the contract method 0xa78a8188. -// -// Solidity: function addProposalToChangeMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256) newInfo, address oldStaker, uint256 unlockAmount, uint256 slashing) returns(uint256 ballotIdx) -func (_GovImp *GovImpSession) AddProposalToChangeMember(newInfo GovImpMemberInfo, oldStaker common.Address, unlockAmount *big.Int, slashing *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToChangeMember(&_GovImp.TransactOpts, newInfo, oldStaker, unlockAmount, slashing) -} - -// AddProposalToChangeMember is a paid mutator transaction binding the contract method 0xa78a8188. -// -// Solidity: function addProposalToChangeMember((address,address,address,bytes,bytes,bytes,uint256,uint256,bytes,uint256) newInfo, address oldStaker, uint256 unlockAmount, uint256 slashing) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactorSession) AddProposalToChangeMember(newInfo GovImpMemberInfo, oldStaker common.Address, unlockAmount *big.Int, slashing *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToChangeMember(&_GovImp.TransactOpts, newInfo, oldStaker, unlockAmount, slashing) -} - -// AddProposalToExecute is a paid mutator transaction binding the contract method 0x404e585d. -// -// Solidity: function addProposalToExecute(address _target, bytes _calldata, bytes _memo, uint256 _duration) payable returns() -func (_GovImp *GovImpTransactor) AddProposalToExecute(opts *bind.TransactOpts, _target common.Address, _calldata []byte, _memo []byte, _duration *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "addProposalToExecute", _target, _calldata, _memo, _duration) -} - -// AddProposalToExecute is a paid mutator transaction binding the contract method 0x404e585d. -// -// Solidity: function addProposalToExecute(address _target, bytes _calldata, bytes _memo, uint256 _duration) payable returns() -func (_GovImp *GovImpSession) AddProposalToExecute(_target common.Address, _calldata []byte, _memo []byte, _duration *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToExecute(&_GovImp.TransactOpts, _target, _calldata, _memo, _duration) -} - -// AddProposalToExecute is a paid mutator transaction binding the contract method 0x404e585d. -// -// Solidity: function addProposalToExecute(address _target, bytes _calldata, bytes _memo, uint256 _duration) payable returns() -func (_GovImp *GovImpTransactorSession) AddProposalToExecute(_target common.Address, _calldata []byte, _memo []byte, _duration *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToExecute(&_GovImp.TransactOpts, _target, _calldata, _memo, _duration) -} - -// AddProposalToRemoveMember is a paid mutator transaction binding the contract method 0x894f5111. -// -// Solidity: function addProposalToRemoveMember(address staker, uint256 lockAmount, bytes memo, uint256 duration, uint256 unlockAmount, uint256 slashing) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactor) AddProposalToRemoveMember(opts *bind.TransactOpts, staker common.Address, lockAmount *big.Int, memo []byte, duration *big.Int, unlockAmount *big.Int, slashing *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "addProposalToRemoveMember", staker, lockAmount, memo, duration, unlockAmount, slashing) -} - -// AddProposalToRemoveMember is a paid mutator transaction binding the contract method 0x894f5111. -// -// Solidity: function addProposalToRemoveMember(address staker, uint256 lockAmount, bytes memo, uint256 duration, uint256 unlockAmount, uint256 slashing) returns(uint256 ballotIdx) -func (_GovImp *GovImpSession) AddProposalToRemoveMember(staker common.Address, lockAmount *big.Int, memo []byte, duration *big.Int, unlockAmount *big.Int, slashing *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToRemoveMember(&_GovImp.TransactOpts, staker, lockAmount, memo, duration, unlockAmount, slashing) -} - -// AddProposalToRemoveMember is a paid mutator transaction binding the contract method 0x894f5111. -// -// Solidity: function addProposalToRemoveMember(address staker, uint256 lockAmount, bytes memo, uint256 duration, uint256 unlockAmount, uint256 slashing) returns(uint256 ballotIdx) -func (_GovImp *GovImpTransactorSession) AddProposalToRemoveMember(staker common.Address, lockAmount *big.Int, memo []byte, duration *big.Int, unlockAmount *big.Int, slashing *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.AddProposalToRemoveMember(&_GovImp.TransactOpts, staker, lockAmount, memo, duration, unlockAmount, slashing) -} - -// FinalizeEndedVote is a paid mutator transaction binding the contract method 0x6ba99181. -// -// Solidity: function finalizeEndedVote() returns() -func (_GovImp *GovImpTransactor) FinalizeEndedVote(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "finalizeEndedVote") -} - -// FinalizeEndedVote is a paid mutator transaction binding the contract method 0x6ba99181. -// -// Solidity: function finalizeEndedVote() returns() -func (_GovImp *GovImpSession) FinalizeEndedVote() (*types.Transaction, error) { - return _GovImp.Contract.FinalizeEndedVote(&_GovImp.TransactOpts) -} - -// FinalizeEndedVote is a paid mutator transaction binding the contract method 0x6ba99181. -// -// Solidity: function finalizeEndedVote() returns() -func (_GovImp *GovImpTransactorSession) FinalizeEndedVote() (*types.Transaction, error) { - return _GovImp.Contract.FinalizeEndedVote(&_GovImp.TransactOpts) -} - -// Init is a paid mutator transaction binding the contract method 0xa8915a3e. -// -// Solidity: function init(address registry, uint256 lockAmount, bytes name, bytes enode, bytes ip, uint256 port) returns() -func (_GovImp *GovImpTransactor) Init(opts *bind.TransactOpts, registry common.Address, lockAmount *big.Int, name []byte, enode []byte, ip []byte, port *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "init", registry, lockAmount, name, enode, ip, port) -} - -// Init is a paid mutator transaction binding the contract method 0xa8915a3e. -// -// Solidity: function init(address registry, uint256 lockAmount, bytes name, bytes enode, bytes ip, uint256 port) returns() -func (_GovImp *GovImpSession) Init(registry common.Address, lockAmount *big.Int, name []byte, enode []byte, ip []byte, port *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.Init(&_GovImp.TransactOpts, registry, lockAmount, name, enode, ip, port) -} - -// Init is a paid mutator transaction binding the contract method 0xa8915a3e. -// -// Solidity: function init(address registry, uint256 lockAmount, bytes name, bytes enode, bytes ip, uint256 port) returns() -func (_GovImp *GovImpTransactorSession) Init(registry common.Address, lockAmount *big.Int, name []byte, enode []byte, ip []byte, port *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.Init(&_GovImp.TransactOpts, registry, lockAmount, name, enode, ip, port) -} - -// InitMigration is a paid mutator transaction binding the contract method 0x397e38e7. -// -// Solidity: function initMigration(address registry, uint256 oldModifiedBlock, address oldOwner) returns() -func (_GovImp *GovImpTransactor) InitMigration(opts *bind.TransactOpts, registry common.Address, oldModifiedBlock *big.Int, oldOwner common.Address) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "initMigration", registry, oldModifiedBlock, oldOwner) -} - -// InitMigration is a paid mutator transaction binding the contract method 0x397e38e7. -// -// Solidity: function initMigration(address registry, uint256 oldModifiedBlock, address oldOwner) returns() -func (_GovImp *GovImpSession) InitMigration(registry common.Address, oldModifiedBlock *big.Int, oldOwner common.Address) (*types.Transaction, error) { - return _GovImp.Contract.InitMigration(&_GovImp.TransactOpts, registry, oldModifiedBlock, oldOwner) -} - -// InitMigration is a paid mutator transaction binding the contract method 0x397e38e7. -// -// Solidity: function initMigration(address registry, uint256 oldModifiedBlock, address oldOwner) returns() -func (_GovImp *GovImpTransactorSession) InitMigration(registry common.Address, oldModifiedBlock *big.Int, oldOwner common.Address) (*types.Transaction, error) { - return _GovImp.Contract.InitMigration(&_GovImp.TransactOpts, registry, oldModifiedBlock, oldOwner) -} - -// InitOnce is a paid mutator transaction binding the contract method 0x351bacda. -// -// Solidity: function initOnce(address registry, uint256 lockAmount, bytes data) returns() -func (_GovImp *GovImpTransactor) InitOnce(opts *bind.TransactOpts, registry common.Address, lockAmount *big.Int, data []byte) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "initOnce", registry, lockAmount, data) -} - -// InitOnce is a paid mutator transaction binding the contract method 0x351bacda. -// -// Solidity: function initOnce(address registry, uint256 lockAmount, bytes data) returns() -func (_GovImp *GovImpSession) InitOnce(registry common.Address, lockAmount *big.Int, data []byte) (*types.Transaction, error) { - return _GovImp.Contract.InitOnce(&_GovImp.TransactOpts, registry, lockAmount, data) -} - -// InitOnce is a paid mutator transaction binding the contract method 0x351bacda. -// -// Solidity: function initOnce(address registry, uint256 lockAmount, bytes data) returns() -func (_GovImp *GovImpTransactorSession) InitOnce(registry common.Address, lockAmount *big.Int, data []byte) (*types.Transaction, error) { - return _GovImp.Contract.InitOnce(&_GovImp.TransactOpts, registry, lockAmount, data) -} - -// MigrateFromLegacy is a paid mutator transaction binding the contract method 0x8d39e33a. -// -// Solidity: function migrateFromLegacy(address oldGov) returns(int256) -func (_GovImp *GovImpTransactor) MigrateFromLegacy(opts *bind.TransactOpts, oldGov common.Address) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "migrateFromLegacy", oldGov) -} - -// MigrateFromLegacy is a paid mutator transaction binding the contract method 0x8d39e33a. -// -// Solidity: function migrateFromLegacy(address oldGov) returns(int256) -func (_GovImp *GovImpSession) MigrateFromLegacy(oldGov common.Address) (*types.Transaction, error) { - return _GovImp.Contract.MigrateFromLegacy(&_GovImp.TransactOpts, oldGov) -} - -// MigrateFromLegacy is a paid mutator transaction binding the contract method 0x8d39e33a. -// -// Solidity: function migrateFromLegacy(address oldGov) returns(int256) -func (_GovImp *GovImpTransactorSession) MigrateFromLegacy(oldGov common.Address) (*types.Transaction, error) { - return _GovImp.Contract.MigrateFromLegacy(&_GovImp.TransactOpts, oldGov) -} - -// ReInit is a paid mutator transaction binding the contract method 0x16fbe831. -// -// Solidity: function reInit() returns() -func (_GovImp *GovImpTransactor) ReInit(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "reInit") -} - -// ReInit is a paid mutator transaction binding the contract method 0x16fbe831. -// -// Solidity: function reInit() returns() -func (_GovImp *GovImpSession) ReInit() (*types.Transaction, error) { - return _GovImp.Contract.ReInit(&_GovImp.TransactOpts) -} - -// ReInit is a paid mutator transaction binding the contract method 0x16fbe831. -// -// Solidity: function reInit() returns() -func (_GovImp *GovImpTransactorSession) ReInit() (*types.Transaction, error) { - return _GovImp.Contract.ReInit(&_GovImp.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_GovImp *GovImpTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_GovImp *GovImpSession) RenounceOwnership() (*types.Transaction, error) { - return _GovImp.Contract.RenounceOwnership(&_GovImp.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_GovImp *GovImpTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _GovImp.Contract.RenounceOwnership(&_GovImp.TransactOpts) -} - -// SetProposalTimePeriod is a paid mutator transaction binding the contract method 0xe27bdaef. -// -// Solidity: function setProposalTimePeriod(uint256 newPeriod) returns() -func (_GovImp *GovImpTransactor) SetProposalTimePeriod(opts *bind.TransactOpts, newPeriod *big.Int) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "setProposalTimePeriod", newPeriod) -} - -// SetProposalTimePeriod is a paid mutator transaction binding the contract method 0xe27bdaef. -// -// Solidity: function setProposalTimePeriod(uint256 newPeriod) returns() -func (_GovImp *GovImpSession) SetProposalTimePeriod(newPeriod *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.SetProposalTimePeriod(&_GovImp.TransactOpts, newPeriod) -} - -// SetProposalTimePeriod is a paid mutator transaction binding the contract method 0xe27bdaef. -// -// Solidity: function setProposalTimePeriod(uint256 newPeriod) returns() -func (_GovImp *GovImpTransactorSession) SetProposalTimePeriod(newPeriod *big.Int) (*types.Transaction, error) { - return _GovImp.Contract.SetProposalTimePeriod(&_GovImp.TransactOpts, newPeriod) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_GovImp *GovImpTransactor) SetRegistry(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "setRegistry", _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_GovImp *GovImpSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _GovImp.Contract.SetRegistry(&_GovImp.TransactOpts, _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_GovImp *GovImpTransactorSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _GovImp.Contract.SetRegistry(&_GovImp.TransactOpts, _addr) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_GovImp *GovImpTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_GovImp *GovImpSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _GovImp.Contract.TransferOwnership(&_GovImp.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_GovImp *GovImpTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _GovImp.Contract.TransferOwnership(&_GovImp.TransactOpts, newOwner) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address ) returns() -func (_GovImp *GovImpTransactor) UpgradeTo(opts *bind.TransactOpts, arg0 common.Address) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "upgradeTo", arg0) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address ) returns() -func (_GovImp *GovImpSession) UpgradeTo(arg0 common.Address) (*types.Transaction, error) { - return _GovImp.Contract.UpgradeTo(&_GovImp.TransactOpts, arg0) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address ) returns() -func (_GovImp *GovImpTransactorSession) UpgradeTo(arg0 common.Address) (*types.Transaction, error) { - return _GovImp.Contract.UpgradeTo(&_GovImp.TransactOpts, arg0) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address , bytes ) payable returns() -func (_GovImp *GovImpTransactor) UpgradeToAndCall(opts *bind.TransactOpts, arg0 common.Address, arg1 []byte) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "upgradeToAndCall", arg0, arg1) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address , bytes ) payable returns() -func (_GovImp *GovImpSession) UpgradeToAndCall(arg0 common.Address, arg1 []byte) (*types.Transaction, error) { - return _GovImp.Contract.UpgradeToAndCall(&_GovImp.TransactOpts, arg0, arg1) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address , bytes ) payable returns() -func (_GovImp *GovImpTransactorSession) UpgradeToAndCall(arg0 common.Address, arg1 []byte) (*types.Transaction, error) { - return _GovImp.Contract.UpgradeToAndCall(&_GovImp.TransactOpts, arg0, arg1) -} - -// Vote is a paid mutator transaction binding the contract method 0xc9d27afe. -// -// Solidity: function vote(uint256 ballotIdx, bool approval) returns() -func (_GovImp *GovImpTransactor) Vote(opts *bind.TransactOpts, ballotIdx *big.Int, approval bool) (*types.Transaction, error) { - return _GovImp.contract.Transact(opts, "vote", ballotIdx, approval) -} - -// Vote is a paid mutator transaction binding the contract method 0xc9d27afe. -// -// Solidity: function vote(uint256 ballotIdx, bool approval) returns() -func (_GovImp *GovImpSession) Vote(ballotIdx *big.Int, approval bool) (*types.Transaction, error) { - return _GovImp.Contract.Vote(&_GovImp.TransactOpts, ballotIdx, approval) -} - -// Vote is a paid mutator transaction binding the contract method 0xc9d27afe. -// -// Solidity: function vote(uint256 ballotIdx, bool approval) returns() -func (_GovImp *GovImpTransactorSession) Vote(ballotIdx *big.Int, approval bool) (*types.Transaction, error) { - return _GovImp.Contract.Vote(&_GovImp.TransactOpts, ballotIdx, approval) -} - -// GovImpAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the GovImp contract. -type GovImpAdminChangedIterator struct { - Event *GovImpAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpAdminChanged represents a AdminChanged event raised by the GovImp contract. -type GovImpAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_GovImp *GovImpFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*GovImpAdminChangedIterator, error) { - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &GovImpAdminChangedIterator{contract: _GovImp.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_GovImp *GovImpFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *GovImpAdminChanged) (event.Subscription, error) { - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpAdminChanged) - if err := _GovImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_GovImp *GovImpFilterer) ParseAdminChanged(log types.Log) (*GovImpAdminChanged, error) { - event := new(GovImpAdminChanged) - if err := _GovImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the GovImp contract. -type GovImpBeaconUpgradedIterator struct { - Event *GovImpBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpBeaconUpgraded represents a BeaconUpgraded event raised by the GovImp contract. -type GovImpBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_GovImp *GovImpFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*GovImpBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &GovImpBeaconUpgradedIterator{contract: _GovImp.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_GovImp *GovImpFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *GovImpBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpBeaconUpgraded) - if err := _GovImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_GovImp *GovImpFilterer) ParseBeaconUpgraded(log types.Log) (*GovImpBeaconUpgraded, error) { - event := new(GovImpBeaconUpgraded) - if err := _GovImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpEnvChangedIterator is returned from FilterEnvChanged and is used to iterate over the raw logs and unpacked data for EnvChanged events raised by the GovImp contract. -type GovImpEnvChangedIterator struct { - Event *GovImpEnvChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpEnvChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpEnvChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpEnvChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpEnvChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpEnvChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpEnvChanged represents a EnvChanged event raised by the GovImp contract. -type GovImpEnvChanged struct { - EnvName [32]byte - EnvType *big.Int - EnvVal []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterEnvChanged is a free log retrieval operation binding the contract event 0x701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c29. -// -// Solidity: event EnvChanged(bytes32 envName, uint256 envType, bytes envVal) -func (_GovImp *GovImpFilterer) FilterEnvChanged(opts *bind.FilterOpts) (*GovImpEnvChangedIterator, error) { - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "EnvChanged") - if err != nil { - return nil, err - } - return &GovImpEnvChangedIterator{contract: _GovImp.contract, event: "EnvChanged", logs: logs, sub: sub}, nil -} - -// WatchEnvChanged is a free log subscription operation binding the contract event 0x701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c29. -// -// Solidity: event EnvChanged(bytes32 envName, uint256 envType, bytes envVal) -func (_GovImp *GovImpFilterer) WatchEnvChanged(opts *bind.WatchOpts, sink chan<- *GovImpEnvChanged) (event.Subscription, error) { - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "EnvChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpEnvChanged) - if err := _GovImp.contract.UnpackLog(event, "EnvChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseEnvChanged is a log parse operation binding the contract event 0x701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c29. -// -// Solidity: event EnvChanged(bytes32 envName, uint256 envType, bytes envVal) -func (_GovImp *GovImpFilterer) ParseEnvChanged(log types.Log) (*GovImpEnvChanged, error) { - event := new(GovImpEnvChanged) - if err := _GovImp.contract.UnpackLog(event, "EnvChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpExecutedIterator is returned from FilterExecuted and is used to iterate over the raw logs and unpacked data for Executed events raised by the GovImp contract. -type GovImpExecutedIterator struct { - Event *GovImpExecuted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpExecutedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpExecuted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpExecuted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpExecutedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpExecutedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpExecuted represents a Executed event raised by the GovImp contract. -type GovImpExecuted struct { - Success bool - To common.Address - Value *big.Int - Calldatas []byte - ReturnData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterExecuted is a free log retrieval operation binding the contract event 0x57508e122d767c940c66fc3762dd79760bb534bd2f7c4902ae678853f7dec9af. -// -// Solidity: event Executed(bool indexed success, address indexed to, uint256 value, bytes calldatas, bytes returnData) -func (_GovImp *GovImpFilterer) FilterExecuted(opts *bind.FilterOpts, success []bool, to []common.Address) (*GovImpExecutedIterator, error) { - - var successRule []interface{} - for _, successItem := range success { - successRule = append(successRule, successItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "Executed", successRule, toRule) - if err != nil { - return nil, err - } - return &GovImpExecutedIterator{contract: _GovImp.contract, event: "Executed", logs: logs, sub: sub}, nil -} - -// WatchExecuted is a free log subscription operation binding the contract event 0x57508e122d767c940c66fc3762dd79760bb534bd2f7c4902ae678853f7dec9af. -// -// Solidity: event Executed(bool indexed success, address indexed to, uint256 value, bytes calldatas, bytes returnData) -func (_GovImp *GovImpFilterer) WatchExecuted(opts *bind.WatchOpts, sink chan<- *GovImpExecuted, success []bool, to []common.Address) (event.Subscription, error) { - - var successRule []interface{} - for _, successItem := range success { - successRule = append(successRule, successItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "Executed", successRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpExecuted) - if err := _GovImp.contract.UnpackLog(event, "Executed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseExecuted is a log parse operation binding the contract event 0x57508e122d767c940c66fc3762dd79760bb534bd2f7c4902ae678853f7dec9af. -// -// Solidity: event Executed(bool indexed success, address indexed to, uint256 value, bytes calldatas, bytes returnData) -func (_GovImp *GovImpFilterer) ParseExecuted(log types.Log) (*GovImpExecuted, error) { - event := new(GovImpExecuted) - if err := _GovImp.contract.UnpackLog(event, "Executed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpFailReturnValueIterator is returned from FilterFailReturnValue and is used to iterate over the raw logs and unpacked data for FailReturnValue events raised by the GovImp contract. -type GovImpFailReturnValueIterator struct { - Event *GovImpFailReturnValue // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpFailReturnValueIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpFailReturnValue) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpFailReturnValue) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpFailReturnValueIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpFailReturnValueIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpFailReturnValue represents a FailReturnValue event raised by the GovImp contract. -type GovImpFailReturnValue struct { - BallotIdx *big.Int - Creator common.Address - Value *big.Int - Result []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFailReturnValue is a free log retrieval operation binding the contract event 0x2c57f69ad84301745a13b9cc61ef37ef145f0db4f64480f09ccd360cc093dc66. -// -// Solidity: event FailReturnValue(uint256 indexed ballotIdx, address indexed creator, uint256 value, bytes result) -func (_GovImp *GovImpFilterer) FilterFailReturnValue(opts *bind.FilterOpts, ballotIdx []*big.Int, creator []common.Address) (*GovImpFailReturnValueIterator, error) { - - var ballotIdxRule []interface{} - for _, ballotIdxItem := range ballotIdx { - ballotIdxRule = append(ballotIdxRule, ballotIdxItem) - } - var creatorRule []interface{} - for _, creatorItem := range creator { - creatorRule = append(creatorRule, creatorItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "FailReturnValue", ballotIdxRule, creatorRule) - if err != nil { - return nil, err - } - return &GovImpFailReturnValueIterator{contract: _GovImp.contract, event: "FailReturnValue", logs: logs, sub: sub}, nil -} - -// WatchFailReturnValue is a free log subscription operation binding the contract event 0x2c57f69ad84301745a13b9cc61ef37ef145f0db4f64480f09ccd360cc093dc66. -// -// Solidity: event FailReturnValue(uint256 indexed ballotIdx, address indexed creator, uint256 value, bytes result) -func (_GovImp *GovImpFilterer) WatchFailReturnValue(opts *bind.WatchOpts, sink chan<- *GovImpFailReturnValue, ballotIdx []*big.Int, creator []common.Address) (event.Subscription, error) { - - var ballotIdxRule []interface{} - for _, ballotIdxItem := range ballotIdx { - ballotIdxRule = append(ballotIdxRule, ballotIdxItem) - } - var creatorRule []interface{} - for _, creatorItem := range creator { - creatorRule = append(creatorRule, creatorItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "FailReturnValue", ballotIdxRule, creatorRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpFailReturnValue) - if err := _GovImp.contract.UnpackLog(event, "FailReturnValue", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFailReturnValue is a log parse operation binding the contract event 0x2c57f69ad84301745a13b9cc61ef37ef145f0db4f64480f09ccd360cc093dc66. -// -// Solidity: event FailReturnValue(uint256 indexed ballotIdx, address indexed creator, uint256 value, bytes result) -func (_GovImp *GovImpFilterer) ParseFailReturnValue(log types.Log) (*GovImpFailReturnValue, error) { - event := new(GovImpFailReturnValue) - if err := _GovImp.contract.UnpackLog(event, "FailReturnValue", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpGovDataMigratedIterator is returned from FilterGovDataMigrated and is used to iterate over the raw logs and unpacked data for GovDataMigrated events raised by the GovImp contract. -type GovImpGovDataMigratedIterator struct { - Event *GovImpGovDataMigrated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpGovDataMigratedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpGovDataMigrated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpGovDataMigrated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpGovDataMigratedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpGovDataMigratedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpGovDataMigrated represents a GovDataMigrated event raised by the GovImp contract. -type GovImpGovDataMigrated struct { - From common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterGovDataMigrated is a free log retrieval operation binding the contract event 0xab2db0a6f442428b686ffa80eadcaabe7d5ee00049c6ae888a237edd3238d856. -// -// Solidity: event GovDataMigrated(address indexed from) -func (_GovImp *GovImpFilterer) FilterGovDataMigrated(opts *bind.FilterOpts, from []common.Address) (*GovImpGovDataMigratedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "GovDataMigrated", fromRule) - if err != nil { - return nil, err - } - return &GovImpGovDataMigratedIterator{contract: _GovImp.contract, event: "GovDataMigrated", logs: logs, sub: sub}, nil -} - -// WatchGovDataMigrated is a free log subscription operation binding the contract event 0xab2db0a6f442428b686ffa80eadcaabe7d5ee00049c6ae888a237edd3238d856. -// -// Solidity: event GovDataMigrated(address indexed from) -func (_GovImp *GovImpFilterer) WatchGovDataMigrated(opts *bind.WatchOpts, sink chan<- *GovImpGovDataMigrated, from []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "GovDataMigrated", fromRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpGovDataMigrated) - if err := _GovImp.contract.UnpackLog(event, "GovDataMigrated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseGovDataMigrated is a log parse operation binding the contract event 0xab2db0a6f442428b686ffa80eadcaabe7d5ee00049c6ae888a237edd3238d856. -// -// Solidity: event GovDataMigrated(address indexed from) -func (_GovImp *GovImpFilterer) ParseGovDataMigrated(log types.Log) (*GovImpGovDataMigrated, error) { - event := new(GovImpGovDataMigrated) - if err := _GovImp.contract.UnpackLog(event, "GovDataMigrated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the GovImp contract. -type GovImpInitializedIterator struct { - Event *GovImpInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpInitialized represents a Initialized event raised by the GovImp contract. -type GovImpInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_GovImp *GovImpFilterer) FilterInitialized(opts *bind.FilterOpts) (*GovImpInitializedIterator, error) { - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &GovImpInitializedIterator{contract: _GovImp.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_GovImp *GovImpFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *GovImpInitialized) (event.Subscription, error) { - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpInitialized) - if err := _GovImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_GovImp *GovImpFilterer) ParseInitialized(log types.Log) (*GovImpInitialized, error) { - event := new(GovImpInitialized) - if err := _GovImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpMemberAddedIterator is returned from FilterMemberAdded and is used to iterate over the raw logs and unpacked data for MemberAdded events raised by the GovImp contract. -type GovImpMemberAddedIterator struct { - Event *GovImpMemberAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpMemberAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpMemberAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpMemberAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpMemberAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpMemberAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpMemberAdded represents a MemberAdded event raised by the GovImp contract. -type GovImpMemberAdded struct { - Addr common.Address - Voter common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMemberAdded is a free log retrieval operation binding the contract event 0x6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba6. -// -// Solidity: event MemberAdded(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) FilterMemberAdded(opts *bind.FilterOpts, addr []common.Address, voter []common.Address) (*GovImpMemberAddedIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "MemberAdded", addrRule, voterRule) - if err != nil { - return nil, err - } - return &GovImpMemberAddedIterator{contract: _GovImp.contract, event: "MemberAdded", logs: logs, sub: sub}, nil -} - -// WatchMemberAdded is a free log subscription operation binding the contract event 0x6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba6. -// -// Solidity: event MemberAdded(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) WatchMemberAdded(opts *bind.WatchOpts, sink chan<- *GovImpMemberAdded, addr []common.Address, voter []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "MemberAdded", addrRule, voterRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpMemberAdded) - if err := _GovImp.contract.UnpackLog(event, "MemberAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMemberAdded is a log parse operation binding the contract event 0x6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba6. -// -// Solidity: event MemberAdded(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) ParseMemberAdded(log types.Log) (*GovImpMemberAdded, error) { - event := new(GovImpMemberAdded) - if err := _GovImp.contract.UnpackLog(event, "MemberAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpMemberChangedIterator is returned from FilterMemberChanged and is used to iterate over the raw logs and unpacked data for MemberChanged events raised by the GovImp contract. -type GovImpMemberChangedIterator struct { - Event *GovImpMemberChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpMemberChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpMemberChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpMemberChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpMemberChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpMemberChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpMemberChanged represents a MemberChanged event raised by the GovImp contract. -type GovImpMemberChanged struct { - OldAddr common.Address - NewAddr common.Address - NewVoter common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMemberChanged is a free log retrieval operation binding the contract event 0x15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be0. -// -// Solidity: event MemberChanged(address indexed oldAddr, address indexed newAddr, address indexed newVoter) -func (_GovImp *GovImpFilterer) FilterMemberChanged(opts *bind.FilterOpts, oldAddr []common.Address, newAddr []common.Address, newVoter []common.Address) (*GovImpMemberChangedIterator, error) { - - var oldAddrRule []interface{} - for _, oldAddrItem := range oldAddr { - oldAddrRule = append(oldAddrRule, oldAddrItem) - } - var newAddrRule []interface{} - for _, newAddrItem := range newAddr { - newAddrRule = append(newAddrRule, newAddrItem) - } - var newVoterRule []interface{} - for _, newVoterItem := range newVoter { - newVoterRule = append(newVoterRule, newVoterItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "MemberChanged", oldAddrRule, newAddrRule, newVoterRule) - if err != nil { - return nil, err - } - return &GovImpMemberChangedIterator{contract: _GovImp.contract, event: "MemberChanged", logs: logs, sub: sub}, nil -} - -// WatchMemberChanged is a free log subscription operation binding the contract event 0x15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be0. -// -// Solidity: event MemberChanged(address indexed oldAddr, address indexed newAddr, address indexed newVoter) -func (_GovImp *GovImpFilterer) WatchMemberChanged(opts *bind.WatchOpts, sink chan<- *GovImpMemberChanged, oldAddr []common.Address, newAddr []common.Address, newVoter []common.Address) (event.Subscription, error) { - - var oldAddrRule []interface{} - for _, oldAddrItem := range oldAddr { - oldAddrRule = append(oldAddrRule, oldAddrItem) - } - var newAddrRule []interface{} - for _, newAddrItem := range newAddr { - newAddrRule = append(newAddrRule, newAddrItem) - } - var newVoterRule []interface{} - for _, newVoterItem := range newVoter { - newVoterRule = append(newVoterRule, newVoterItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "MemberChanged", oldAddrRule, newAddrRule, newVoterRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpMemberChanged) - if err := _GovImp.contract.UnpackLog(event, "MemberChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMemberChanged is a log parse operation binding the contract event 0x15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be0. -// -// Solidity: event MemberChanged(address indexed oldAddr, address indexed newAddr, address indexed newVoter) -func (_GovImp *GovImpFilterer) ParseMemberChanged(log types.Log) (*GovImpMemberChanged, error) { - event := new(GovImpMemberChanged) - if err := _GovImp.contract.UnpackLog(event, "MemberChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpMemberRemovedIterator is returned from FilterMemberRemoved and is used to iterate over the raw logs and unpacked data for MemberRemoved events raised by the GovImp contract. -type GovImpMemberRemovedIterator struct { - Event *GovImpMemberRemoved // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpMemberRemovedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpMemberRemoved) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpMemberRemoved) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpMemberRemovedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpMemberRemovedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpMemberRemoved represents a MemberRemoved event raised by the GovImp contract. -type GovImpMemberRemoved struct { - Addr common.Address - Voter common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMemberRemoved is a free log retrieval operation binding the contract event 0xaa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c1. -// -// Solidity: event MemberRemoved(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) FilterMemberRemoved(opts *bind.FilterOpts, addr []common.Address, voter []common.Address) (*GovImpMemberRemovedIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "MemberRemoved", addrRule, voterRule) - if err != nil { - return nil, err - } - return &GovImpMemberRemovedIterator{contract: _GovImp.contract, event: "MemberRemoved", logs: logs, sub: sub}, nil -} - -// WatchMemberRemoved is a free log subscription operation binding the contract event 0xaa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c1. -// -// Solidity: event MemberRemoved(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) WatchMemberRemoved(opts *bind.WatchOpts, sink chan<- *GovImpMemberRemoved, addr []common.Address, voter []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "MemberRemoved", addrRule, voterRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpMemberRemoved) - if err := _GovImp.contract.UnpackLog(event, "MemberRemoved", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMemberRemoved is a log parse operation binding the contract event 0xaa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c1. -// -// Solidity: event MemberRemoved(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) ParseMemberRemoved(log types.Log) (*GovImpMemberRemoved, error) { - event := new(GovImpMemberRemoved) - if err := _GovImp.contract.UnpackLog(event, "MemberRemoved", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpMemberUpdatedIterator is returned from FilterMemberUpdated and is used to iterate over the raw logs and unpacked data for MemberUpdated events raised by the GovImp contract. -type GovImpMemberUpdatedIterator struct { - Event *GovImpMemberUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpMemberUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpMemberUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpMemberUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpMemberUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpMemberUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpMemberUpdated represents a MemberUpdated event raised by the GovImp contract. -type GovImpMemberUpdated struct { - Addr common.Address - Voter common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMemberUpdated is a free log retrieval operation binding the contract event 0x1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f. -// -// Solidity: event MemberUpdated(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) FilterMemberUpdated(opts *bind.FilterOpts, addr []common.Address, voter []common.Address) (*GovImpMemberUpdatedIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "MemberUpdated", addrRule, voterRule) - if err != nil { - return nil, err - } - return &GovImpMemberUpdatedIterator{contract: _GovImp.contract, event: "MemberUpdated", logs: logs, sub: sub}, nil -} - -// WatchMemberUpdated is a free log subscription operation binding the contract event 0x1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f. -// -// Solidity: event MemberUpdated(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) WatchMemberUpdated(opts *bind.WatchOpts, sink chan<- *GovImpMemberUpdated, addr []common.Address, voter []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - var voterRule []interface{} - for _, voterItem := range voter { - voterRule = append(voterRule, voterItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "MemberUpdated", addrRule, voterRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpMemberUpdated) - if err := _GovImp.contract.UnpackLog(event, "MemberUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMemberUpdated is a log parse operation binding the contract event 0x1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f. -// -// Solidity: event MemberUpdated(address indexed addr, address indexed voter) -func (_GovImp *GovImpFilterer) ParseMemberUpdated(log types.Log) (*GovImpMemberUpdated, error) { - event := new(GovImpMemberUpdated) - if err := _GovImp.contract.UnpackLog(event, "MemberUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpNotApplicableIterator is returned from FilterNotApplicable and is used to iterate over the raw logs and unpacked data for NotApplicable events raised by the GovImp contract. -type GovImpNotApplicableIterator struct { - Event *GovImpNotApplicable // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpNotApplicableIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpNotApplicable) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpNotApplicable) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpNotApplicableIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpNotApplicableIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpNotApplicable represents a NotApplicable event raised by the GovImp contract. -type GovImpNotApplicable struct { - BallotId *big.Int - Reason string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNotApplicable is a free log retrieval operation binding the contract event 0x85e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d. -// -// Solidity: event NotApplicable(uint256 indexed ballotId, string reason) -func (_GovImp *GovImpFilterer) FilterNotApplicable(opts *bind.FilterOpts, ballotId []*big.Int) (*GovImpNotApplicableIterator, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "NotApplicable", ballotIdRule) - if err != nil { - return nil, err - } - return &GovImpNotApplicableIterator{contract: _GovImp.contract, event: "NotApplicable", logs: logs, sub: sub}, nil -} - -// WatchNotApplicable is a free log subscription operation binding the contract event 0x85e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d. -// -// Solidity: event NotApplicable(uint256 indexed ballotId, string reason) -func (_GovImp *GovImpFilterer) WatchNotApplicable(opts *bind.WatchOpts, sink chan<- *GovImpNotApplicable, ballotId []*big.Int) (event.Subscription, error) { - - var ballotIdRule []interface{} - for _, ballotIdItem := range ballotId { - ballotIdRule = append(ballotIdRule, ballotIdItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "NotApplicable", ballotIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpNotApplicable) - if err := _GovImp.contract.UnpackLog(event, "NotApplicable", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseNotApplicable is a log parse operation binding the contract event 0x85e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d. -// -// Solidity: event NotApplicable(uint256 indexed ballotId, string reason) -func (_GovImp *GovImpFilterer) ParseNotApplicable(log types.Log) (*GovImpNotApplicable, error) { - event := new(GovImpNotApplicable) - if err := _GovImp.contract.UnpackLog(event, "NotApplicable", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the GovImp contract. -type GovImpOwnershipTransferredIterator struct { - Event *GovImpOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpOwnershipTransferred represents a OwnershipTransferred event raised by the GovImp contract. -type GovImpOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_GovImp *GovImpFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*GovImpOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &GovImpOwnershipTransferredIterator{contract: _GovImp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_GovImp *GovImpFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *GovImpOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpOwnershipTransferred) - if err := _GovImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_GovImp *GovImpFilterer) ParseOwnershipTransferred(log types.Log) (*GovImpOwnershipTransferred, error) { - event := new(GovImpOwnershipTransferred) - if err := _GovImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpSetProposalTimePeriodIterator is returned from FilterSetProposalTimePeriod and is used to iterate over the raw logs and unpacked data for SetProposalTimePeriod events raised by the GovImp contract. -type GovImpSetProposalTimePeriodIterator struct { - Event *GovImpSetProposalTimePeriod // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpSetProposalTimePeriodIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpSetProposalTimePeriod) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpSetProposalTimePeriod) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpSetProposalTimePeriodIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpSetProposalTimePeriodIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpSetProposalTimePeriod represents a SetProposalTimePeriod event raised by the GovImp contract. -type GovImpSetProposalTimePeriod struct { - NewPeriod *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetProposalTimePeriod is a free log retrieval operation binding the contract event 0x17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f. -// -// Solidity: event SetProposalTimePeriod(uint256 newPeriod) -func (_GovImp *GovImpFilterer) FilterSetProposalTimePeriod(opts *bind.FilterOpts) (*GovImpSetProposalTimePeriodIterator, error) { - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "SetProposalTimePeriod") - if err != nil { - return nil, err - } - return &GovImpSetProposalTimePeriodIterator{contract: _GovImp.contract, event: "SetProposalTimePeriod", logs: logs, sub: sub}, nil -} - -// WatchSetProposalTimePeriod is a free log subscription operation binding the contract event 0x17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f. -// -// Solidity: event SetProposalTimePeriod(uint256 newPeriod) -func (_GovImp *GovImpFilterer) WatchSetProposalTimePeriod(opts *bind.WatchOpts, sink chan<- *GovImpSetProposalTimePeriod) (event.Subscription, error) { - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "SetProposalTimePeriod") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpSetProposalTimePeriod) - if err := _GovImp.contract.UnpackLog(event, "SetProposalTimePeriod", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetProposalTimePeriod is a log parse operation binding the contract event 0x17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f. -// -// Solidity: event SetProposalTimePeriod(uint256 newPeriod) -func (_GovImp *GovImpFilterer) ParseSetProposalTimePeriod(log types.Log) (*GovImpSetProposalTimePeriod, error) { - event := new(GovImpSetProposalTimePeriod) - if err := _GovImp.contract.UnpackLog(event, "SetProposalTimePeriod", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpSetRegistryIterator is returned from FilterSetRegistry and is used to iterate over the raw logs and unpacked data for SetRegistry events raised by the GovImp contract. -type GovImpSetRegistryIterator struct { - Event *GovImpSetRegistry // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpSetRegistryIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpSetRegistryIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpSetRegistryIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpSetRegistry represents a SetRegistry event raised by the GovImp contract. -type GovImpSetRegistry struct { - Addr common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetRegistry is a free log retrieval operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_GovImp *GovImpFilterer) FilterSetRegistry(opts *bind.FilterOpts, addr []common.Address) (*GovImpSetRegistryIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return &GovImpSetRegistryIterator{contract: _GovImp.contract, event: "SetRegistry", logs: logs, sub: sub}, nil -} - -// WatchSetRegistry is a free log subscription operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_GovImp *GovImpFilterer) WatchSetRegistry(opts *bind.WatchOpts, sink chan<- *GovImpSetRegistry, addr []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpSetRegistry) - if err := _GovImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetRegistry is a log parse operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_GovImp *GovImpFilterer) ParseSetRegistry(log types.Log) (*GovImpSetRegistry, error) { - event := new(GovImpSetRegistry) - if err := _GovImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// GovImpUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the GovImp contract. -type GovImpUpgradedIterator struct { - Event *GovImpUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *GovImpUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(GovImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(GovImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *GovImpUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *GovImpUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// GovImpUpgraded represents a Upgraded event raised by the GovImp contract. -type GovImpUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_GovImp *GovImpFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*GovImpUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _GovImp.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &GovImpUpgradedIterator{contract: _GovImp.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_GovImp *GovImpFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *GovImpUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _GovImp.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(GovImpUpgraded) - if err := _GovImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_GovImp *GovImpFilterer) ParseUpgraded(log types.Log) (*GovImpUpgraded, error) { - event := new(GovImpUpgraded) - if err := _GovImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/wemix/bind/gen_ncpExit_abi.go b/wemix/bind/gen_ncpExit_abi.go deleted file mode 100644 index a1e325159c7c..000000000000 --- a/wemix/bind/gen_ncpExit_abi.go +++ /dev/null @@ -1,2439 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gov - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// NCPExitMetaData contains all meta data concerning the NCPExit contract. -var NCPExitMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "5c60da1b": "implementation()", - }, - Bin: "0x608060405234801561001057600080fd5b5060405161077238038061077283398101604081905261002f91610326565b604080516020810190915260008152819061006b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61034f565b60008051602061072b8339815191521461008757610087610374565b6100938282600061009b565b505050610405565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b61008b1760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610136838360405180606001604052806027815260200161074b602791396101fd565b9392505050565b610150816102db60201b6100b71760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061072b83398151915260001b6102ea60201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102655760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161028091906103b6565b600060405180830381855af49150503d80600081146102bb576040519150601f19603f3d011682016040523d82523d6000602084013e6102c0565b606091505b5090925090506102d18282866102ed565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102fc575081610136565b82511561030c5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103d2565b60006020828403121561033857600080fd5b81516001600160a01b038116811461013657600080fd5b60008282101561036f57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b60005b838110156103a557818101518382015260200161038d565b838111156100ca5750506000910152565b600082516103c881846020870161038a565b9190910192915050565b60208152600082518060208401526103f181604085016020870161038a565b601f01601f19169190910160400192915050565b610317806104146000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102bb60279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b60606001600160a01b0384163b61018d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a8919061026b565b600060405180830381855af49150503d80600081146101e3576040519150601f19603f3d011682016040523d82523d6000602084013e6101e8565b606091505b50915091506101f8828286610202565b9695505050505050565b606083156102115750816100b0565b8251156102215782518084602001fd5b8160405162461bcd60e51b81526004016101849190610287565b60005b8381101561025657818101518382015260200161023e565b83811115610265576000848401525b50505050565b6000825161027d81846020870161023b565b9190910192915050565b60208152600082518060208401526102a681604085016020870161023b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dd2ff9008a502a6cd20fd850732e8cc379eb87e2d3c001715aada60807a86a9864736f6c634300080e0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", -} - -// NCPExitABI is the input ABI used to generate the binding from. -// Deprecated: Use NCPExitMetaData.ABI instead. -var NCPExitABI = NCPExitMetaData.ABI - -// Deprecated: Use NCPExitMetaData.Sigs instead. -// NCPExitFuncSigs maps the 4-byte function signature to its string representation. -var NCPExitFuncSigs = NCPExitMetaData.Sigs - -// NCPExitBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use NCPExitMetaData.Bin instead. -var NCPExitBin = NCPExitMetaData.Bin - -// DeployNCPExit deploys a new Ethereum contract, binding an instance of NCPExit to it. -func DeployNCPExit(auth *bind.TransactOpts, backend bind.ContractBackend, _imp common.Address) (common.Address, *types.Transaction, *NCPExit, error) { - parsed, err := NCPExitMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(NCPExitBin), backend, _imp) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &NCPExit{NCPExitCaller: NCPExitCaller{contract: contract}, NCPExitTransactor: NCPExitTransactor{contract: contract}, NCPExitFilterer: NCPExitFilterer{contract: contract}}, nil -} - -// NCPExit is an auto generated Go binding around an Ethereum contract. -type NCPExit struct { - NCPExitCaller // Read-only binding to the contract - NCPExitTransactor // Write-only binding to the contract - NCPExitFilterer // Log filterer for contract events -} - -// NCPExitCaller is an auto generated read-only Go binding around an Ethereum contract. -type NCPExitCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// NCPExitTransactor is an auto generated write-only Go binding around an Ethereum contract. -type NCPExitTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// NCPExitFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type NCPExitFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// NCPExitSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type NCPExitSession struct { - Contract *NCPExit // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// NCPExitCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type NCPExitCallerSession struct { - Contract *NCPExitCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// NCPExitTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type NCPExitTransactorSession struct { - Contract *NCPExitTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// NCPExitRaw is an auto generated low-level Go binding around an Ethereum contract. -type NCPExitRaw struct { - Contract *NCPExit // Generic contract binding to access the raw methods on -} - -// NCPExitCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type NCPExitCallerRaw struct { - Contract *NCPExitCaller // Generic read-only contract binding to access the raw methods on -} - -// NCPExitTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type NCPExitTransactorRaw struct { - Contract *NCPExitTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewNCPExit creates a new instance of NCPExit, bound to a specific deployed contract. -func NewNCPExit(address common.Address, backend bind.ContractBackend) (*NCPExit, error) { - contract, err := bindNCPExit(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &NCPExit{NCPExitCaller: NCPExitCaller{contract: contract}, NCPExitTransactor: NCPExitTransactor{contract: contract}, NCPExitFilterer: NCPExitFilterer{contract: contract}}, nil -} - -// NewNCPExitCaller creates a new read-only instance of NCPExit, bound to a specific deployed contract. -func NewNCPExitCaller(address common.Address, caller bind.ContractCaller) (*NCPExitCaller, error) { - contract, err := bindNCPExit(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &NCPExitCaller{contract: contract}, nil -} - -// NewNCPExitTransactor creates a new write-only instance of NCPExit, bound to a specific deployed contract. -func NewNCPExitTransactor(address common.Address, transactor bind.ContractTransactor) (*NCPExitTransactor, error) { - contract, err := bindNCPExit(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &NCPExitTransactor{contract: contract}, nil -} - -// NewNCPExitFilterer creates a new log filterer instance of NCPExit, bound to a specific deployed contract. -func NewNCPExitFilterer(address common.Address, filterer bind.ContractFilterer) (*NCPExitFilterer, error) { - contract, err := bindNCPExit(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &NCPExitFilterer{contract: contract}, nil -} - -// bindNCPExit binds a generic wrapper to an already deployed contract. -func bindNCPExit(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(NCPExitABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_NCPExit *NCPExitRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _NCPExit.Contract.NCPExitCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_NCPExit *NCPExitRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExit.Contract.NCPExitTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_NCPExit *NCPExitRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _NCPExit.Contract.NCPExitTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_NCPExit *NCPExitCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _NCPExit.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_NCPExit *NCPExitTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExit.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_NCPExit *NCPExitTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _NCPExit.Contract.contract.Transact(opts, method, params...) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_NCPExit *NCPExitCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _NCPExit.contract.Call(opts, &out, "implementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_NCPExit *NCPExitSession) Implementation() (common.Address, error) { - return _NCPExit.Contract.Implementation(&_NCPExit.CallOpts) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_NCPExit *NCPExitCallerSession) Implementation() (common.Address, error) { - return _NCPExit.Contract.Implementation(&_NCPExit.CallOpts) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_NCPExit *NCPExitTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _NCPExit.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_NCPExit *NCPExitSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _NCPExit.Contract.Fallback(&_NCPExit.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_NCPExit *NCPExitTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _NCPExit.Contract.Fallback(&_NCPExit.TransactOpts, calldata) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_NCPExit *NCPExitTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExit.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_NCPExit *NCPExitSession) Receive() (*types.Transaction, error) { - return _NCPExit.Contract.Receive(&_NCPExit.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_NCPExit *NCPExitTransactorSession) Receive() (*types.Transaction, error) { - return _NCPExit.Contract.Receive(&_NCPExit.TransactOpts) -} - -// NCPExitAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the NCPExit contract. -type NCPExitAdminChangedIterator struct { - Event *NCPExitAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitAdminChanged represents a AdminChanged event raised by the NCPExit contract. -type NCPExitAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_NCPExit *NCPExitFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*NCPExitAdminChangedIterator, error) { - - logs, sub, err := _NCPExit.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &NCPExitAdminChangedIterator{contract: _NCPExit.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_NCPExit *NCPExitFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *NCPExitAdminChanged) (event.Subscription, error) { - - logs, sub, err := _NCPExit.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitAdminChanged) - if err := _NCPExit.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_NCPExit *NCPExitFilterer) ParseAdminChanged(log types.Log) (*NCPExitAdminChanged, error) { - event := new(NCPExitAdminChanged) - if err := _NCPExit.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the NCPExit contract. -type NCPExitBeaconUpgradedIterator struct { - Event *NCPExitBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitBeaconUpgraded represents a BeaconUpgraded event raised by the NCPExit contract. -type NCPExitBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_NCPExit *NCPExitFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*NCPExitBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _NCPExit.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &NCPExitBeaconUpgradedIterator{contract: _NCPExit.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_NCPExit *NCPExitFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *NCPExitBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _NCPExit.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitBeaconUpgraded) - if err := _NCPExit.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_NCPExit *NCPExitFilterer) ParseBeaconUpgraded(log types.Log) (*NCPExitBeaconUpgraded, error) { - event := new(NCPExitBeaconUpgraded) - if err := _NCPExit.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the NCPExit contract. -type NCPExitUpgradedIterator struct { - Event *NCPExitUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitUpgraded represents a Upgraded event raised by the NCPExit contract. -type NCPExitUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_NCPExit *NCPExitFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*NCPExitUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _NCPExit.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &NCPExitUpgradedIterator{contract: _NCPExit.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_NCPExit *NCPExitFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *NCPExitUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _NCPExit.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitUpgraded) - if err := _NCPExit.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_NCPExit *NCPExitFilterer) ParseUpgraded(log types.Log) (*NCPExitUpgraded, error) { - event := new(NCPExitUpgraded) - if err := _NCPExit.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitImpMetaData contains all meta data concerning the NCPExitImp contract. -var NCPExitImpMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SetRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BALLOT_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENV_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOV_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_POOL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"exitNcp\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockedUserBalanceToNCPTotal\",\"type\":\"uint256\"}],\"name\":\"depositExitAmount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"exitNcp\",\"type\":\"address\"}],\"name\":\"getAvailableAmountForAdministrator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"exitNcp\",\"type\":\"address\"}],\"name\":\"getLockedUserBalanceToNCPTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reg\",\"outputs\":[{\"internalType\":\"contractIRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newAdministrator\",\"type\":\"address\"}],\"name\":\"setAdministrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newAdministratorSetter\",\"type\":\"address\"}],\"name\":\"setAdministratorSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImp\",\"type\":\"address\"}],\"name\":\"upgradeNCPExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"exitNcp\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawForAdministrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"exitNcp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"exitUser\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawForUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "9986e4b9": "BALLOT_STORAGE_NAME()", - "34125c84": "ECOSYSTEM_NAME()", - "7bf46530": "ENV_STORAGE_NAME()", - "6c78d2cf": "GOV_NAME()", - "4bd1ed76": "MAINTENANCE_NAME()", - "2f40992e": "REWARD_POOL_NAME()", - "1e0cba0d": "STAKING_NAME()", - "5a731cca": "STAKING_REWARD_NAME()", - "8408bdb1": "depositExitAmount(address,uint256,uint256)", - "dd38f90b": "getAvailableAmountForAdministrator(address)", - "805c5ccc": "getLockedUserBalanceToNCPTotal(address)", - "c4d66de8": "initialize(address)", - "8da5cb5b": "owner()", - "52d1902d": "proxiableUUID()", - "738fdd1a": "reg()", - "715018a6": "renounceOwnership()", - "df8089ef": "setAdministrator(address)", - "8c56c8c3": "setAdministratorSetter(address)", - "a91ee0dc": "setRegistry(address)", - "f2fde38b": "transferOwnership(address)", - "1083fc6e": "upgradeNCPExit(address)", - "3659cfe6": "upgradeTo(address)", - "4f1ef286": "upgradeToAndCall(address,bytes)", - "00fc5701": "withdrawForAdministrator(address,uint256,address)", - "b007a5ad": "withdrawForUser(address,address,uint256)", - }, - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100e2565b600054610100900460ff161561008e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100e0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051611a67610119600039600081816105ee0152818161062e015281816106ae015281816106ee01526107810152611a676000f3fe6080604052600436106101695760003560e01c8063738fdd1a116100d15780639986e4b91161008a578063c4d66de811610064578063c4d66de814610439578063dd38f90b14610459578063df8089ef14610479578063f2fde38b1461049957600080fd5b80639986e4b9146103d5578063a91ee0dc146103f9578063b007a5ad1461041957600080fd5b8063738fdd1a146102f55780637bf465301461032d578063805c5ccc1461034e5780638408bdb1146103845780638c56c8c3146103975780638da5cb5b146103b757600080fd5b80634bd1ed76116101235780634bd1ed76146102495780634f1ef2861461026b57806352d1902d1461027e5780635a731cca146102935780636c78d2cf146102b7578063715018a6146102e057600080fd5b8062fc5701146101755780631083fc6e146101975780631e0cba0d146101b75780632f40992e146101e857806334125c84146102095780633659cfe61461022957600080fd5b3661017057005b600080fd5b34801561018157600080fd5b50610195610190366004611588565b6104b9565b005b3480156101a357600080fd5b506101956101b23660046115ca565b6105a5565b3480156101c357600080fd5b506101d5665374616b696e6760c81b81565b6040519081526020015b60405180910390f35b3480156101f457600080fd5b506101d56914995dd85c99141bdbdb60b21b81565b34801561021557600080fd5b506101d56845636f73797374656d60b81b81565b34801561023557600080fd5b506101956102443660046115ca565b6105e4565b34801561025557600080fd5b506101d56a4d61696e74656e616e636560a81b81565b6101956102793660046115fd565b6106a4565b34801561028a57600080fd5b506101d5610774565b34801561029f57600080fd5b506101d56c14dd185ada5b99d4995dd85c99609a1b81565b3480156102c357600080fd5b506101d57111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156102ec57600080fd5b50610195610827565b34801561030157600080fd5b50606554610315906001600160a01b031681565b6040516001600160a01b0390911681526020016101df565b34801561033957600080fd5b506101d569456e7653746f7261676560b01b81565b34801561035a57600080fd5b506101d56103693660046115ca565b6001600160a01b03166000908152609b602052604090205490565b6101956103923660046116c1565b61083b565b3480156103a357600080fd5b506101956103b23660046115ca565b610929565b3480156103c357600080fd5b506033546001600160a01b0316610315565b3480156103e157600080fd5b506101d56c42616c6c6f7453746f7261676560981b81565b34801561040557600080fd5b506101956104143660046115ca565b61099b565b34801561042557600080fd5b506101956104343660046116f6565b610a13565b34801561044557600080fd5b506101956104543660046115ca565b610c10565b34801561046557600080fd5b506101d56104743660046115ca565b610d5f565b34801561048557600080fd5b506101956104943660046115ca565b610dc1565b3480156104a557600080fd5b506101956104b43660046115ca565b610e33565b6002606654036104e45760405162461bcd60e51b81526004016104db90611737565b60405180910390fd5b60026066556098546001600160a01b031633146105135760405162461bcd60e51b81526004016104db9061176e565b6001600160a01b0383166000908152609b6020908152604080832054609a909252909120548391610543916117b8565b101561054e57600080fd5b6001600160a01b0383166000908152609a60205260409020546105729083906117b8565b6001600160a01b038085166000908152609a602052604090209190915561059b90821683610ea9565b5050600160665550565b6105ad610fc7565b6001600160a01b038116156105e1576105c581611021565b604080516000808252602082019092526105e191839190611029565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361062c5760405162461bcd60e51b81526004016104db906117dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106756000805160206119eb833981519152546001600160a01b031690565b6001600160a01b03161461069b5760405162461bcd60e51b81526004016104db90611829565b6105c581611021565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106ec5760405162461bcd60e51b81526004016104db906117dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107356000805160206119eb833981519152546001600160a01b031690565b6001600160a01b03161461075b5760405162461bcd60e51b81526004016104db90611829565b61076482611021565b61077082826001611029565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108145760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104db565b506000805160206119eb83398151915290565b61082f610fc7565b6108396000611194565b565b60026066540361085d5760405162461bcd60e51b81526004016104db90611737565b600260665561086a6111e6565b6001600160a01b0316336001600160a01b0316146108f05760405162461bcd60e51b815260206004820152603860248201527f4f6e6c7920676f7665726e616e6365207374616b696e6720636f6e747261637460448201527f2063616e2063616c6c20746869732066756e6374696f6e2e000000000000000060648201526084016104db565b3482146108fc57600080fd5b6001600160a01b039092166000908152609a6020908152604080832093909355609b905220556001606655565b6099546001600160a01b031633146109535760405162461bcd60e51b81526004016104db90611875565b6001600160a01b0381166109795760405162461bcd60e51b81526004016104db906118b7565b609980546001600160a01b0319166001600160a01b0392909216919091179055565b6109a3610fc7565b6001600160a01b0381166109c95760405162461bcd60e51b81526004016104db906118b7565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b600260665403610a355760405162461bcd60e51b81526004016104db90611737565b6002606655610a426111e6565b6001600160a01b031663f1b8aa1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa391906118ee565b6001600160a01b0316336001600160a01b031614610b135760405162461bcd60e51b815260206004820152602760248201527f4f6e6c79204e63705374616b696e672063616e2063616c6c20746869732066756044820152663731ba34b7b71760c91b60648201526084016104db565b6001600160a01b0383166000908152609b6020526040902054811115610b935760405162461bcd60e51b815260206004820152602f60248201527f5f6c6f636b65645573657242616c616e6365546f4e4350546f74616c5b65786960448201526e1d1398dc17480f8f48185b5bdd5b9d608a1b60648201526084016104db565b6001600160a01b0383166000908152609a6020526040902054610bb79082906117b8565b6001600160a01b0384166000908152609a6020908152604080832093909355609b90522054610be79082906117b8565b6001600160a01b038085166000908152609b602052604090209190915561059b90831682610ea9565b600054610100900460ff1615808015610c305750600054600160ff909116105b80610c4a5750303b158015610c4a575060005460ff166001145b610cad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104db565b6000805460ff191660011790558015610cd0576000805461ff0019166101001790555b610cd8611200565b610ce061122f565b610ce98261099b565b603354609880546001600160a01b039092166001600160a01b03199283168117909155609980549092161790558015610770576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6098546000906001600160a01b03163314610d8c5760405162461bcd60e51b81526004016104db9061176e565b6001600160a01b0382166000908152609b6020908152604080832054609a90925290912054610dbb91906117b8565b92915050565b6099546001600160a01b03163314610deb5760405162461bcd60e51b81526004016104db90611875565b6001600160a01b038116610e115760405162461bcd60e51b81526004016104db906118b7565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610e3b610fc7565b6001600160a01b038116610ea05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104db565b6105e181611194565b80471015610ef95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016104db565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f46576040519150601f19603f3d011682016040523d82523d6000602084013e610f4b565b606091505b5050905080610fc25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016104db565b505050565b6033546001600160a01b031633146108395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104db565b6105e1610fc7565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561105c57610fc28361125e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156110b6575060408051601f3d908101601f191682019092526110b39181019061190b565b60015b6111195760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104db565b6000805160206119eb83398151915281146111885760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104db565b50610fc28383836112fa565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006111fb665374616b696e6760c81b611325565b905090565b600054610100900460ff166112275760405162461bcd60e51b81526004016104db90611924565b610839611393565b600054610100900460ff166112565760405162461bcd60e51b81526004016104db90611924565b6108396113c3565b6001600160a01b0381163b6112cb5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104db565b6000805160206119eb83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611303836113f1565b6000825111806113105750805b15610fc25761131f8383611431565b50505050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd90602401602060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb91906118ee565b600054610100900460ff166113ba5760405162461bcd60e51b81526004016104db90611924565b61083933611194565b600054610100900460ff166113ea5760405162461bcd60e51b81526004016104db90611924565b6001606655565b6113fa8161125e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606114568383604051806060016040528060278152602001611a0b6027913961145d565b9392505050565b60606001600160a01b0384163b6114c55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104db565b600080856001600160a01b0316856040516114e0919061199b565b600060405180830381855af49150503d806000811461151b576040519150601f19603f3d011682016040523d82523d6000602084013e611520565b606091505b509150915061153082828661153a565b9695505050505050565b60608315611549575081611456565b8251156115595782518084602001fd5b8160405162461bcd60e51b81526004016104db91906119b7565b6001600160a01b03811681146105e157600080fd5b60008060006060848603121561159d57600080fd5b83356115a881611573565b92506020840135915060408401356115bf81611573565b809150509250925092565b6000602082840312156115dc57600080fd5b813561145681611573565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561161057600080fd5b823561161b81611573565b9150602083013567ffffffffffffffff8082111561163857600080fd5b818501915085601f83011261164c57600080fd5b81358181111561165e5761165e6115e7565b604051601f8201601f19908116603f01168101908382118183101715611686576116866115e7565b8160405282815288602084870101111561169f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000606084860312156116d657600080fd5b83356116e181611573565b95602085013595506040909401359392505050565b60008060006060848603121561170b57600080fd5b833561171681611573565b9250602084013561172681611573565b929592945050506040919091013590565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602a908201527f4f6e6c792041646d696e6973747261746f722063616e2063616c6c207468697360408201526910333ab731ba34b7b71760b11b606082015260800190565b6000828210156117d857634e487b7160e01b600052601160045260246000fd5b500390565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526022908201527f43616c6c6572206973206e6f742041646d696e6973747261746f725365747465604082015261391760f11b606082015260800190565b6020808252601a908201527f416464726573732073686f756c64206265206e6f6e2d7a65726f000000000000604082015260600190565b60006020828403121561190057600080fd5b815161145681611573565b60006020828403121561191d57600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b8381101561198a578181015183820152602001611972565b8381111561131f5750506000910152565b600082516119ad81846020870161196f565b9190910192915050565b60208152600082518060208401526119d681604085016020870161196f565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209b98f9fdbd4e76d93d2686578da71b4561cd700183355101dca0ebab51473b5164736f6c634300080e0033", -} - -// NCPExitImpABI is the input ABI used to generate the binding from. -// Deprecated: Use NCPExitImpMetaData.ABI instead. -var NCPExitImpABI = NCPExitImpMetaData.ABI - -// Deprecated: Use NCPExitImpMetaData.Sigs instead. -// NCPExitImpFuncSigs maps the 4-byte function signature to its string representation. -var NCPExitImpFuncSigs = NCPExitImpMetaData.Sigs - -// NCPExitImpBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use NCPExitImpMetaData.Bin instead. -var NCPExitImpBin = NCPExitImpMetaData.Bin - -// DeployNCPExitImp deploys a new Ethereum contract, binding an instance of NCPExitImp to it. -func DeployNCPExitImp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *NCPExitImp, error) { - parsed, err := NCPExitImpMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(NCPExitImpBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &NCPExitImp{NCPExitImpCaller: NCPExitImpCaller{contract: contract}, NCPExitImpTransactor: NCPExitImpTransactor{contract: contract}, NCPExitImpFilterer: NCPExitImpFilterer{contract: contract}}, nil -} - -// NCPExitImp is an auto generated Go binding around an Ethereum contract. -type NCPExitImp struct { - NCPExitImpCaller // Read-only binding to the contract - NCPExitImpTransactor // Write-only binding to the contract - NCPExitImpFilterer // Log filterer for contract events -} - -// NCPExitImpCaller is an auto generated read-only Go binding around an Ethereum contract. -type NCPExitImpCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// NCPExitImpTransactor is an auto generated write-only Go binding around an Ethereum contract. -type NCPExitImpTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// NCPExitImpFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type NCPExitImpFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// NCPExitImpSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type NCPExitImpSession struct { - Contract *NCPExitImp // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// NCPExitImpCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type NCPExitImpCallerSession struct { - Contract *NCPExitImpCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// NCPExitImpTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type NCPExitImpTransactorSession struct { - Contract *NCPExitImpTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// NCPExitImpRaw is an auto generated low-level Go binding around an Ethereum contract. -type NCPExitImpRaw struct { - Contract *NCPExitImp // Generic contract binding to access the raw methods on -} - -// NCPExitImpCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type NCPExitImpCallerRaw struct { - Contract *NCPExitImpCaller // Generic read-only contract binding to access the raw methods on -} - -// NCPExitImpTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type NCPExitImpTransactorRaw struct { - Contract *NCPExitImpTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewNCPExitImp creates a new instance of NCPExitImp, bound to a specific deployed contract. -func NewNCPExitImp(address common.Address, backend bind.ContractBackend) (*NCPExitImp, error) { - contract, err := bindNCPExitImp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &NCPExitImp{NCPExitImpCaller: NCPExitImpCaller{contract: contract}, NCPExitImpTransactor: NCPExitImpTransactor{contract: contract}, NCPExitImpFilterer: NCPExitImpFilterer{contract: contract}}, nil -} - -// NewNCPExitImpCaller creates a new read-only instance of NCPExitImp, bound to a specific deployed contract. -func NewNCPExitImpCaller(address common.Address, caller bind.ContractCaller) (*NCPExitImpCaller, error) { - contract, err := bindNCPExitImp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &NCPExitImpCaller{contract: contract}, nil -} - -// NewNCPExitImpTransactor creates a new write-only instance of NCPExitImp, bound to a specific deployed contract. -func NewNCPExitImpTransactor(address common.Address, transactor bind.ContractTransactor) (*NCPExitImpTransactor, error) { - contract, err := bindNCPExitImp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &NCPExitImpTransactor{contract: contract}, nil -} - -// NewNCPExitImpFilterer creates a new log filterer instance of NCPExitImp, bound to a specific deployed contract. -func NewNCPExitImpFilterer(address common.Address, filterer bind.ContractFilterer) (*NCPExitImpFilterer, error) { - contract, err := bindNCPExitImp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &NCPExitImpFilterer{contract: contract}, nil -} - -// bindNCPExitImp binds a generic wrapper to an already deployed contract. -func bindNCPExitImp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(NCPExitImpABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_NCPExitImp *NCPExitImpRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _NCPExitImp.Contract.NCPExitImpCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_NCPExitImp *NCPExitImpRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExitImp.Contract.NCPExitImpTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_NCPExitImp *NCPExitImpRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _NCPExitImp.Contract.NCPExitImpTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_NCPExitImp *NCPExitImpCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _NCPExitImp.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_NCPExitImp *NCPExitImpTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExitImp.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_NCPExitImp *NCPExitImpTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _NCPExitImp.Contract.contract.Transact(opts, method, params...) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) BALLOTSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "BALLOT_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _NCPExitImp.Contract.BALLOTSTORAGENAME(&_NCPExitImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _NCPExitImp.Contract.BALLOTSTORAGENAME(&_NCPExitImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) ECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) ECOSYSTEMNAME() ([32]byte, error) { - return _NCPExitImp.Contract.ECOSYSTEMNAME(&_NCPExitImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) ECOSYSTEMNAME() ([32]byte, error) { - return _NCPExitImp.Contract.ECOSYSTEMNAME(&_NCPExitImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) ENVSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "ENV_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) ENVSTORAGENAME() ([32]byte, error) { - return _NCPExitImp.Contract.ENVSTORAGENAME(&_NCPExitImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) ENVSTORAGENAME() ([32]byte, error) { - return _NCPExitImp.Contract.ENVSTORAGENAME(&_NCPExitImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) GOVNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "GOV_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) GOVNAME() ([32]byte, error) { - return _NCPExitImp.Contract.GOVNAME(&_NCPExitImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) GOVNAME() ([32]byte, error) { - return _NCPExitImp.Contract.GOVNAME(&_NCPExitImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) MAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) MAINTENANCENAME() ([32]byte, error) { - return _NCPExitImp.Contract.MAINTENANCENAME(&_NCPExitImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) MAINTENANCENAME() ([32]byte, error) { - return _NCPExitImp.Contract.MAINTENANCENAME(&_NCPExitImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) REWARDPOOLNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "REWARD_POOL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) REWARDPOOLNAME() ([32]byte, error) { - return _NCPExitImp.Contract.REWARDPOOLNAME(&_NCPExitImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) REWARDPOOLNAME() ([32]byte, error) { - return _NCPExitImp.Contract.REWARDPOOLNAME(&_NCPExitImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) STAKINGNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "STAKING_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) STAKINGNAME() ([32]byte, error) { - return _NCPExitImp.Contract.STAKINGNAME(&_NCPExitImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) STAKINGNAME() ([32]byte, error) { - return _NCPExitImp.Contract.STAKINGNAME(&_NCPExitImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) STAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) STAKINGREWARDNAME() ([32]byte, error) { - return _NCPExitImp.Contract.STAKINGREWARDNAME(&_NCPExitImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) STAKINGREWARDNAME() ([32]byte, error) { - return _NCPExitImp.Contract.STAKINGREWARDNAME(&_NCPExitImp.CallOpts) -} - -// GetAvailableAmountForAdministrator is a free data retrieval call binding the contract method 0xdd38f90b. -// -// Solidity: function getAvailableAmountForAdministrator(address exitNcp) view returns(uint256) -func (_NCPExitImp *NCPExitImpCaller) GetAvailableAmountForAdministrator(opts *bind.CallOpts, exitNcp common.Address) (*big.Int, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "getAvailableAmountForAdministrator", exitNcp) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetAvailableAmountForAdministrator is a free data retrieval call binding the contract method 0xdd38f90b. -// -// Solidity: function getAvailableAmountForAdministrator(address exitNcp) view returns(uint256) -func (_NCPExitImp *NCPExitImpSession) GetAvailableAmountForAdministrator(exitNcp common.Address) (*big.Int, error) { - return _NCPExitImp.Contract.GetAvailableAmountForAdministrator(&_NCPExitImp.CallOpts, exitNcp) -} - -// GetAvailableAmountForAdministrator is a free data retrieval call binding the contract method 0xdd38f90b. -// -// Solidity: function getAvailableAmountForAdministrator(address exitNcp) view returns(uint256) -func (_NCPExitImp *NCPExitImpCallerSession) GetAvailableAmountForAdministrator(exitNcp common.Address) (*big.Int, error) { - return _NCPExitImp.Contract.GetAvailableAmountForAdministrator(&_NCPExitImp.CallOpts, exitNcp) -} - -// GetLockedUserBalanceToNCPTotal is a free data retrieval call binding the contract method 0x805c5ccc. -// -// Solidity: function getLockedUserBalanceToNCPTotal(address exitNcp) view returns(uint256) -func (_NCPExitImp *NCPExitImpCaller) GetLockedUserBalanceToNCPTotal(opts *bind.CallOpts, exitNcp common.Address) (*big.Int, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "getLockedUserBalanceToNCPTotal", exitNcp) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetLockedUserBalanceToNCPTotal is a free data retrieval call binding the contract method 0x805c5ccc. -// -// Solidity: function getLockedUserBalanceToNCPTotal(address exitNcp) view returns(uint256) -func (_NCPExitImp *NCPExitImpSession) GetLockedUserBalanceToNCPTotal(exitNcp common.Address) (*big.Int, error) { - return _NCPExitImp.Contract.GetLockedUserBalanceToNCPTotal(&_NCPExitImp.CallOpts, exitNcp) -} - -// GetLockedUserBalanceToNCPTotal is a free data retrieval call binding the contract method 0x805c5ccc. -// -// Solidity: function getLockedUserBalanceToNCPTotal(address exitNcp) view returns(uint256) -func (_NCPExitImp *NCPExitImpCallerSession) GetLockedUserBalanceToNCPTotal(exitNcp common.Address) (*big.Int, error) { - return _NCPExitImp.Contract.GetLockedUserBalanceToNCPTotal(&_NCPExitImp.CallOpts, exitNcp) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_NCPExitImp *NCPExitImpCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_NCPExitImp *NCPExitImpSession) Owner() (common.Address, error) { - return _NCPExitImp.Contract.Owner(&_NCPExitImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_NCPExitImp *NCPExitImpCallerSession) Owner() (common.Address, error) { - return _NCPExitImp.Contract.Owner(&_NCPExitImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "proxiableUUID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_NCPExitImp *NCPExitImpSession) ProxiableUUID() ([32]byte, error) { - return _NCPExitImp.Contract.ProxiableUUID(&_NCPExitImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_NCPExitImp *NCPExitImpCallerSession) ProxiableUUID() ([32]byte, error) { - return _NCPExitImp.Contract.ProxiableUUID(&_NCPExitImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_NCPExitImp *NCPExitImpCaller) Reg(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _NCPExitImp.contract.Call(opts, &out, "reg") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_NCPExitImp *NCPExitImpSession) Reg() (common.Address, error) { - return _NCPExitImp.Contract.Reg(&_NCPExitImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_NCPExitImp *NCPExitImpCallerSession) Reg() (common.Address, error) { - return _NCPExitImp.Contract.Reg(&_NCPExitImp.CallOpts) -} - -// DepositExitAmount is a paid mutator transaction binding the contract method 0x8408bdb1. -// -// Solidity: function depositExitAmount(address exitNcp, uint256 totalAmount, uint256 lockedUserBalanceToNCPTotal) payable returns() -func (_NCPExitImp *NCPExitImpTransactor) DepositExitAmount(opts *bind.TransactOpts, exitNcp common.Address, totalAmount *big.Int, lockedUserBalanceToNCPTotal *big.Int) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "depositExitAmount", exitNcp, totalAmount, lockedUserBalanceToNCPTotal) -} - -// DepositExitAmount is a paid mutator transaction binding the contract method 0x8408bdb1. -// -// Solidity: function depositExitAmount(address exitNcp, uint256 totalAmount, uint256 lockedUserBalanceToNCPTotal) payable returns() -func (_NCPExitImp *NCPExitImpSession) DepositExitAmount(exitNcp common.Address, totalAmount *big.Int, lockedUserBalanceToNCPTotal *big.Int) (*types.Transaction, error) { - return _NCPExitImp.Contract.DepositExitAmount(&_NCPExitImp.TransactOpts, exitNcp, totalAmount, lockedUserBalanceToNCPTotal) -} - -// DepositExitAmount is a paid mutator transaction binding the contract method 0x8408bdb1. -// -// Solidity: function depositExitAmount(address exitNcp, uint256 totalAmount, uint256 lockedUserBalanceToNCPTotal) payable returns() -func (_NCPExitImp *NCPExitImpTransactorSession) DepositExitAmount(exitNcp common.Address, totalAmount *big.Int, lockedUserBalanceToNCPTotal *big.Int) (*types.Transaction, error) { - return _NCPExitImp.Contract.DepositExitAmount(&_NCPExitImp.TransactOpts, exitNcp, totalAmount, lockedUserBalanceToNCPTotal) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _registry) returns() -func (_NCPExitImp *NCPExitImpTransactor) Initialize(opts *bind.TransactOpts, _registry common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "initialize", _registry) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _registry) returns() -func (_NCPExitImp *NCPExitImpSession) Initialize(_registry common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.Initialize(&_NCPExitImp.TransactOpts, _registry) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address _registry) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) Initialize(_registry common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.Initialize(&_NCPExitImp.TransactOpts, _registry) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_NCPExitImp *NCPExitImpTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_NCPExitImp *NCPExitImpSession) RenounceOwnership() (*types.Transaction, error) { - return _NCPExitImp.Contract.RenounceOwnership(&_NCPExitImp.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_NCPExitImp *NCPExitImpTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _NCPExitImp.Contract.RenounceOwnership(&_NCPExitImp.TransactOpts) -} - -// SetAdministrator is a paid mutator transaction binding the contract method 0xdf8089ef. -// -// Solidity: function setAdministrator(address _newAdministrator) returns() -func (_NCPExitImp *NCPExitImpTransactor) SetAdministrator(opts *bind.TransactOpts, _newAdministrator common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "setAdministrator", _newAdministrator) -} - -// SetAdministrator is a paid mutator transaction binding the contract method 0xdf8089ef. -// -// Solidity: function setAdministrator(address _newAdministrator) returns() -func (_NCPExitImp *NCPExitImpSession) SetAdministrator(_newAdministrator common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.SetAdministrator(&_NCPExitImp.TransactOpts, _newAdministrator) -} - -// SetAdministrator is a paid mutator transaction binding the contract method 0xdf8089ef. -// -// Solidity: function setAdministrator(address _newAdministrator) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) SetAdministrator(_newAdministrator common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.SetAdministrator(&_NCPExitImp.TransactOpts, _newAdministrator) -} - -// SetAdministratorSetter is a paid mutator transaction binding the contract method 0x8c56c8c3. -// -// Solidity: function setAdministratorSetter(address _newAdministratorSetter) returns() -func (_NCPExitImp *NCPExitImpTransactor) SetAdministratorSetter(opts *bind.TransactOpts, _newAdministratorSetter common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "setAdministratorSetter", _newAdministratorSetter) -} - -// SetAdministratorSetter is a paid mutator transaction binding the contract method 0x8c56c8c3. -// -// Solidity: function setAdministratorSetter(address _newAdministratorSetter) returns() -func (_NCPExitImp *NCPExitImpSession) SetAdministratorSetter(_newAdministratorSetter common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.SetAdministratorSetter(&_NCPExitImp.TransactOpts, _newAdministratorSetter) -} - -// SetAdministratorSetter is a paid mutator transaction binding the contract method 0x8c56c8c3. -// -// Solidity: function setAdministratorSetter(address _newAdministratorSetter) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) SetAdministratorSetter(_newAdministratorSetter common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.SetAdministratorSetter(&_NCPExitImp.TransactOpts, _newAdministratorSetter) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_NCPExitImp *NCPExitImpTransactor) SetRegistry(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "setRegistry", _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_NCPExitImp *NCPExitImpSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.SetRegistry(&_NCPExitImp.TransactOpts, _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.SetRegistry(&_NCPExitImp.TransactOpts, _addr) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_NCPExitImp *NCPExitImpTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_NCPExitImp *NCPExitImpSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.TransferOwnership(&_NCPExitImp.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.TransferOwnership(&_NCPExitImp.TransactOpts, newOwner) -} - -// UpgradeNCPExit is a paid mutator transaction binding the contract method 0x1083fc6e. -// -// Solidity: function upgradeNCPExit(address newImp) returns() -func (_NCPExitImp *NCPExitImpTransactor) UpgradeNCPExit(opts *bind.TransactOpts, newImp common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "upgradeNCPExit", newImp) -} - -// UpgradeNCPExit is a paid mutator transaction binding the contract method 0x1083fc6e. -// -// Solidity: function upgradeNCPExit(address newImp) returns() -func (_NCPExitImp *NCPExitImpSession) UpgradeNCPExit(newImp common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.UpgradeNCPExit(&_NCPExitImp.TransactOpts, newImp) -} - -// UpgradeNCPExit is a paid mutator transaction binding the contract method 0x1083fc6e. -// -// Solidity: function upgradeNCPExit(address newImp) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) UpgradeNCPExit(newImp common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.UpgradeNCPExit(&_NCPExitImp.TransactOpts, newImp) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_NCPExitImp *NCPExitImpTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "upgradeTo", newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_NCPExitImp *NCPExitImpSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.UpgradeTo(&_NCPExitImp.TransactOpts, newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.UpgradeTo(&_NCPExitImp.TransactOpts, newImplementation) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_NCPExitImp *NCPExitImpTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_NCPExitImp *NCPExitImpSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _NCPExitImp.Contract.UpgradeToAndCall(&_NCPExitImp.TransactOpts, newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_NCPExitImp *NCPExitImpTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _NCPExitImp.Contract.UpgradeToAndCall(&_NCPExitImp.TransactOpts, newImplementation, data) -} - -// WithdrawForAdministrator is a paid mutator transaction binding the contract method 0x00fc5701. -// -// Solidity: function withdrawForAdministrator(address exitNcp, uint256 amount, address to) returns() -func (_NCPExitImp *NCPExitImpTransactor) WithdrawForAdministrator(opts *bind.TransactOpts, exitNcp common.Address, amount *big.Int, to common.Address) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "withdrawForAdministrator", exitNcp, amount, to) -} - -// WithdrawForAdministrator is a paid mutator transaction binding the contract method 0x00fc5701. -// -// Solidity: function withdrawForAdministrator(address exitNcp, uint256 amount, address to) returns() -func (_NCPExitImp *NCPExitImpSession) WithdrawForAdministrator(exitNcp common.Address, amount *big.Int, to common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.WithdrawForAdministrator(&_NCPExitImp.TransactOpts, exitNcp, amount, to) -} - -// WithdrawForAdministrator is a paid mutator transaction binding the contract method 0x00fc5701. -// -// Solidity: function withdrawForAdministrator(address exitNcp, uint256 amount, address to) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) WithdrawForAdministrator(exitNcp common.Address, amount *big.Int, to common.Address) (*types.Transaction, error) { - return _NCPExitImp.Contract.WithdrawForAdministrator(&_NCPExitImp.TransactOpts, exitNcp, amount, to) -} - -// WithdrawForUser is a paid mutator transaction binding the contract method 0xb007a5ad. -// -// Solidity: function withdrawForUser(address exitNcp, address exitUser, uint256 amount) returns() -func (_NCPExitImp *NCPExitImpTransactor) WithdrawForUser(opts *bind.TransactOpts, exitNcp common.Address, exitUser common.Address, amount *big.Int) (*types.Transaction, error) { - return _NCPExitImp.contract.Transact(opts, "withdrawForUser", exitNcp, exitUser, amount) -} - -// WithdrawForUser is a paid mutator transaction binding the contract method 0xb007a5ad. -// -// Solidity: function withdrawForUser(address exitNcp, address exitUser, uint256 amount) returns() -func (_NCPExitImp *NCPExitImpSession) WithdrawForUser(exitNcp common.Address, exitUser common.Address, amount *big.Int) (*types.Transaction, error) { - return _NCPExitImp.Contract.WithdrawForUser(&_NCPExitImp.TransactOpts, exitNcp, exitUser, amount) -} - -// WithdrawForUser is a paid mutator transaction binding the contract method 0xb007a5ad. -// -// Solidity: function withdrawForUser(address exitNcp, address exitUser, uint256 amount) returns() -func (_NCPExitImp *NCPExitImpTransactorSession) WithdrawForUser(exitNcp common.Address, exitUser common.Address, amount *big.Int) (*types.Transaction, error) { - return _NCPExitImp.Contract.WithdrawForUser(&_NCPExitImp.TransactOpts, exitNcp, exitUser, amount) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_NCPExitImp *NCPExitImpTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _NCPExitImp.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_NCPExitImp *NCPExitImpSession) Receive() (*types.Transaction, error) { - return _NCPExitImp.Contract.Receive(&_NCPExitImp.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_NCPExitImp *NCPExitImpTransactorSession) Receive() (*types.Transaction, error) { - return _NCPExitImp.Contract.Receive(&_NCPExitImp.TransactOpts) -} - -// NCPExitImpAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the NCPExitImp contract. -type NCPExitImpAdminChangedIterator struct { - Event *NCPExitImpAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitImpAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitImpAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitImpAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitImpAdminChanged represents a AdminChanged event raised by the NCPExitImp contract. -type NCPExitImpAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_NCPExitImp *NCPExitImpFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*NCPExitImpAdminChangedIterator, error) { - - logs, sub, err := _NCPExitImp.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &NCPExitImpAdminChangedIterator{contract: _NCPExitImp.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_NCPExitImp *NCPExitImpFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *NCPExitImpAdminChanged) (event.Subscription, error) { - - logs, sub, err := _NCPExitImp.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitImpAdminChanged) - if err := _NCPExitImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_NCPExitImp *NCPExitImpFilterer) ParseAdminChanged(log types.Log) (*NCPExitImpAdminChanged, error) { - event := new(NCPExitImpAdminChanged) - if err := _NCPExitImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitImpBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the NCPExitImp contract. -type NCPExitImpBeaconUpgradedIterator struct { - Event *NCPExitImpBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitImpBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitImpBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitImpBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitImpBeaconUpgraded represents a BeaconUpgraded event raised by the NCPExitImp contract. -type NCPExitImpBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_NCPExitImp *NCPExitImpFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*NCPExitImpBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _NCPExitImp.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &NCPExitImpBeaconUpgradedIterator{contract: _NCPExitImp.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_NCPExitImp *NCPExitImpFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *NCPExitImpBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _NCPExitImp.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitImpBeaconUpgraded) - if err := _NCPExitImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_NCPExitImp *NCPExitImpFilterer) ParseBeaconUpgraded(log types.Log) (*NCPExitImpBeaconUpgraded, error) { - event := new(NCPExitImpBeaconUpgraded) - if err := _NCPExitImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitImpInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NCPExitImp contract. -type NCPExitImpInitializedIterator struct { - Event *NCPExitImpInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitImpInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitImpInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitImpInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitImpInitialized represents a Initialized event raised by the NCPExitImp contract. -type NCPExitImpInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_NCPExitImp *NCPExitImpFilterer) FilterInitialized(opts *bind.FilterOpts) (*NCPExitImpInitializedIterator, error) { - - logs, sub, err := _NCPExitImp.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &NCPExitImpInitializedIterator{contract: _NCPExitImp.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_NCPExitImp *NCPExitImpFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NCPExitImpInitialized) (event.Subscription, error) { - - logs, sub, err := _NCPExitImp.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitImpInitialized) - if err := _NCPExitImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_NCPExitImp *NCPExitImpFilterer) ParseInitialized(log types.Log) (*NCPExitImpInitialized, error) { - event := new(NCPExitImpInitialized) - if err := _NCPExitImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitImpOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the NCPExitImp contract. -type NCPExitImpOwnershipTransferredIterator struct { - Event *NCPExitImpOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitImpOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitImpOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitImpOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitImpOwnershipTransferred represents a OwnershipTransferred event raised by the NCPExitImp contract. -type NCPExitImpOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_NCPExitImp *NCPExitImpFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*NCPExitImpOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _NCPExitImp.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &NCPExitImpOwnershipTransferredIterator{contract: _NCPExitImp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_NCPExitImp *NCPExitImpFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *NCPExitImpOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _NCPExitImp.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitImpOwnershipTransferred) - if err := _NCPExitImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_NCPExitImp *NCPExitImpFilterer) ParseOwnershipTransferred(log types.Log) (*NCPExitImpOwnershipTransferred, error) { - event := new(NCPExitImpOwnershipTransferred) - if err := _NCPExitImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitImpSetRegistryIterator is returned from FilterSetRegistry and is used to iterate over the raw logs and unpacked data for SetRegistry events raised by the NCPExitImp contract. -type NCPExitImpSetRegistryIterator struct { - Event *NCPExitImpSetRegistry // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitImpSetRegistryIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitImpSetRegistryIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitImpSetRegistryIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitImpSetRegistry represents a SetRegistry event raised by the NCPExitImp contract. -type NCPExitImpSetRegistry struct { - Addr common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetRegistry is a free log retrieval operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_NCPExitImp *NCPExitImpFilterer) FilterSetRegistry(opts *bind.FilterOpts, addr []common.Address) (*NCPExitImpSetRegistryIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _NCPExitImp.contract.FilterLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return &NCPExitImpSetRegistryIterator{contract: _NCPExitImp.contract, event: "SetRegistry", logs: logs, sub: sub}, nil -} - -// WatchSetRegistry is a free log subscription operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_NCPExitImp *NCPExitImpFilterer) WatchSetRegistry(opts *bind.WatchOpts, sink chan<- *NCPExitImpSetRegistry, addr []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _NCPExitImp.contract.WatchLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitImpSetRegistry) - if err := _NCPExitImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetRegistry is a log parse operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_NCPExitImp *NCPExitImpFilterer) ParseSetRegistry(log types.Log) (*NCPExitImpSetRegistry, error) { - event := new(NCPExitImpSetRegistry) - if err := _NCPExitImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// NCPExitImpUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the NCPExitImp contract. -type NCPExitImpUpgradedIterator struct { - Event *NCPExitImpUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NCPExitImpUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NCPExitImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NCPExitImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NCPExitImpUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NCPExitImpUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NCPExitImpUpgraded represents a Upgraded event raised by the NCPExitImp contract. -type NCPExitImpUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_NCPExitImp *NCPExitImpFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*NCPExitImpUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _NCPExitImp.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &NCPExitImpUpgradedIterator{contract: _NCPExitImp.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_NCPExitImp *NCPExitImpFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *NCPExitImpUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _NCPExitImp.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NCPExitImpUpgraded) - if err := _NCPExitImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_NCPExitImp *NCPExitImpFilterer) ParseUpgraded(log types.Log) (*NCPExitImpUpgraded, error) { - event := new(NCPExitImpUpgraded) - if err := _NCPExitImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/wemix/bind/gen_registry_abi.go b/wemix/bind/gen_registry_abi.go deleted file mode 100644 index c7e93d25f5e1..000000000000 --- a/wemix/bind/gen_registry_abi.go +++ /dev/null @@ -1,981 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gov - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// RegistryMetaData contains all meta data concerning the Registry contract. -var RegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"setter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SetContractDomain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_contract\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"granted\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"SetPermission\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"contracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"}],\"name\":\"getContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contract\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_granted\",\"type\":\"address\"}],\"name\":\"getPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"found\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"magic\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"modifiedBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"permissions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_name\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setContractDomain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contract\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_granted\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Sigs: map[string]string{ - "ec56a373": "contracts(bytes32)", - "0d2020dd": "getContractAddress(bytes32)", - "60d6c7cf": "getPermission(bytes32,address)", - "0d854646": "magic()", - "7d10dd1b": "modifiedBlock()", - "8da5cb5b": "owner()", - "3ec50c6c": "permissions(bytes32,address)", - "715018a6": "renounceOwnership()", - "04af66ad": "setContractDomain(bytes32,address)", - "599e4c70": "setPermission(bytes32,address,bool)", - "f2fde38b": "transferOwnership(address)", - }, - Bin: "0x60806040526d57656d697820526567697374727960015534801561002257600080fd5b5061002c33610031565b610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610659806100906000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806360d6c7cf1161007157806360d6c7cf14610159578063715018a6146101925780637d10dd1b1461019c5780638da5cb5b146101a5578063ec56a373146101b6578063f2fde38b146101df57600080fd5b806304af66ad146100ae5780630d2020dd146100d65780630d854646146101015780633ec50c6c14610118578063599e4c7014610146575b600080fd5b6100c16100bc36600461050b565b6101f2565b60405190151581526020015b60405180910390f35b6100e96100e4366004610537565b6102b9565b6040516001600160a01b0390911681526020016100cd565b61010a60015481565b6040519081526020016100cd565b6100c161012636600461050b565b600460209081526000928352604080842090915290825290205460ff1681565b6100c1610154366004610550565b610309565b6100c161016736600461050b565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61019a6103ce565b005b61010a60025481565b6000546001600160a01b03166100e9565b6100e96101c4366004610537565b6003602052600090815260409020546001600160a01b031681565b61019a6101ed366004610595565b610404565b600080546001600160a01b031633146102265760405162461bcd60e51b815260040161021d906105b7565b60405180910390fd5b6001600160a01b03821661024c5760405162461bcd60e51b815260040161021d906105ec565b60008381526003602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915543600255915133815285917f37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db910160405180910390a350600192915050565b6000818152600360205260408120546001600160a01b03166102ed5760405162461bcd60e51b815260040161021d906105ec565b506000908152600360205260409020546001600160a01b031690565b600080546001600160a01b031633146103345760405162461bcd60e51b815260040161021d906105b7565b6001600160a01b03831661035a5760405162461bcd60e51b815260040161021d906105ec565b60008481526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915543600255905190815286917fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818910160405180910390a35060019392505050565b6000546001600160a01b031633146103f85760405162461bcd60e51b815260040161021d906105b7565b610402600061049f565b565b6000546001600160a01b0316331461042e5760405162461bcd60e51b815260040161021d906105b7565b6001600160a01b0381166104935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161021d565b61049c8161049f565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461050657600080fd5b919050565b6000806040838503121561051e57600080fd5b8235915061052e602084016104ef565b90509250929050565b60006020828403121561054957600080fd5b5035919050565b60008060006060848603121561056557600080fd5b83359250610575602085016104ef565b91506040840135801515811461058a57600080fd5b809150509250925092565b6000602082840312156105a757600080fd5b6105b0826104ef565b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f616464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060408201526060019056fea2646970667358221220633900fa7f3051945359127e207b6a16b376a1f7b7a81e6048c76d8b2d2b625a64736f6c634300080e0033", -} - -// RegistryABI is the input ABI used to generate the binding from. -// Deprecated: Use RegistryMetaData.ABI instead. -var RegistryABI = RegistryMetaData.ABI - -// Deprecated: Use RegistryMetaData.Sigs instead. -// RegistryFuncSigs maps the 4-byte function signature to its string representation. -var RegistryFuncSigs = RegistryMetaData.Sigs - -// RegistryBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use RegistryMetaData.Bin instead. -var RegistryBin = RegistryMetaData.Bin - -// DeployRegistry deploys a new Ethereum contract, binding an instance of Registry to it. -func DeployRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Registry, error) { - parsed, err := RegistryMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RegistryBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Registry{RegistryCaller: RegistryCaller{contract: contract}, RegistryTransactor: RegistryTransactor{contract: contract}, RegistryFilterer: RegistryFilterer{contract: contract}}, nil -} - -// Registry is an auto generated Go binding around an Ethereum contract. -type Registry struct { - RegistryCaller // Read-only binding to the contract - RegistryTransactor // Write-only binding to the contract - RegistryFilterer // Log filterer for contract events -} - -// RegistryCaller is an auto generated read-only Go binding around an Ethereum contract. -type RegistryCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// RegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. -type RegistryTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// RegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type RegistryFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// RegistrySession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type RegistrySession struct { - Contract *Registry // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// RegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type RegistryCallerSession struct { - Contract *RegistryCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// RegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type RegistryTransactorSession struct { - Contract *RegistryTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// RegistryRaw is an auto generated low-level Go binding around an Ethereum contract. -type RegistryRaw struct { - Contract *Registry // Generic contract binding to access the raw methods on -} - -// RegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type RegistryCallerRaw struct { - Contract *RegistryCaller // Generic read-only contract binding to access the raw methods on -} - -// RegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type RegistryTransactorRaw struct { - Contract *RegistryTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewRegistry creates a new instance of Registry, bound to a specific deployed contract. -func NewRegistry(address common.Address, backend bind.ContractBackend) (*Registry, error) { - contract, err := bindRegistry(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Registry{RegistryCaller: RegistryCaller{contract: contract}, RegistryTransactor: RegistryTransactor{contract: contract}, RegistryFilterer: RegistryFilterer{contract: contract}}, nil -} - -// NewRegistryCaller creates a new read-only instance of Registry, bound to a specific deployed contract. -func NewRegistryCaller(address common.Address, caller bind.ContractCaller) (*RegistryCaller, error) { - contract, err := bindRegistry(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &RegistryCaller{contract: contract}, nil -} - -// NewRegistryTransactor creates a new write-only instance of Registry, bound to a specific deployed contract. -func NewRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*RegistryTransactor, error) { - contract, err := bindRegistry(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &RegistryTransactor{contract: contract}, nil -} - -// NewRegistryFilterer creates a new log filterer instance of Registry, bound to a specific deployed contract. -func NewRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*RegistryFilterer, error) { - contract, err := bindRegistry(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &RegistryFilterer{contract: contract}, nil -} - -// bindRegistry binds a generic wrapper to an already deployed contract. -func bindRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(RegistryABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Registry *RegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Registry.Contract.RegistryCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Registry *RegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Registry.Contract.RegistryTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Registry *RegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Registry.Contract.RegistryTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Registry *RegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Registry.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Registry *RegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Registry.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Registry *RegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Registry.Contract.contract.Transact(opts, method, params...) -} - -// Contracts is a free data retrieval call binding the contract method 0xec56a373. -// -// Solidity: function contracts(bytes32 ) view returns(address) -func (_Registry *RegistryCaller) Contracts(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "contracts", arg0) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Contracts is a free data retrieval call binding the contract method 0xec56a373. -// -// Solidity: function contracts(bytes32 ) view returns(address) -func (_Registry *RegistrySession) Contracts(arg0 [32]byte) (common.Address, error) { - return _Registry.Contract.Contracts(&_Registry.CallOpts, arg0) -} - -// Contracts is a free data retrieval call binding the contract method 0xec56a373. -// -// Solidity: function contracts(bytes32 ) view returns(address) -func (_Registry *RegistryCallerSession) Contracts(arg0 [32]byte) (common.Address, error) { - return _Registry.Contract.Contracts(&_Registry.CallOpts, arg0) -} - -// GetContractAddress is a free data retrieval call binding the contract method 0x0d2020dd. -// -// Solidity: function getContractAddress(bytes32 _name) view returns(address addr) -func (_Registry *RegistryCaller) GetContractAddress(opts *bind.CallOpts, _name [32]byte) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getContractAddress", _name) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetContractAddress is a free data retrieval call binding the contract method 0x0d2020dd. -// -// Solidity: function getContractAddress(bytes32 _name) view returns(address addr) -func (_Registry *RegistrySession) GetContractAddress(_name [32]byte) (common.Address, error) { - return _Registry.Contract.GetContractAddress(&_Registry.CallOpts, _name) -} - -// GetContractAddress is a free data retrieval call binding the contract method 0x0d2020dd. -// -// Solidity: function getContractAddress(bytes32 _name) view returns(address addr) -func (_Registry *RegistryCallerSession) GetContractAddress(_name [32]byte) (common.Address, error) { - return _Registry.Contract.GetContractAddress(&_Registry.CallOpts, _name) -} - -// GetPermission is a free data retrieval call binding the contract method 0x60d6c7cf. -// -// Solidity: function getPermission(bytes32 _contract, address _granted) view returns(bool found) -func (_Registry *RegistryCaller) GetPermission(opts *bind.CallOpts, _contract [32]byte, _granted common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getPermission", _contract, _granted) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// GetPermission is a free data retrieval call binding the contract method 0x60d6c7cf. -// -// Solidity: function getPermission(bytes32 _contract, address _granted) view returns(bool found) -func (_Registry *RegistrySession) GetPermission(_contract [32]byte, _granted common.Address) (bool, error) { - return _Registry.Contract.GetPermission(&_Registry.CallOpts, _contract, _granted) -} - -// GetPermission is a free data retrieval call binding the contract method 0x60d6c7cf. -// -// Solidity: function getPermission(bytes32 _contract, address _granted) view returns(bool found) -func (_Registry *RegistryCallerSession) GetPermission(_contract [32]byte, _granted common.Address) (bool, error) { - return _Registry.Contract.GetPermission(&_Registry.CallOpts, _contract, _granted) -} - -// Magic is a free data retrieval call binding the contract method 0x0d854646. -// -// Solidity: function magic() view returns(uint256) -func (_Registry *RegistryCaller) Magic(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "magic") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Magic is a free data retrieval call binding the contract method 0x0d854646. -// -// Solidity: function magic() view returns(uint256) -func (_Registry *RegistrySession) Magic() (*big.Int, error) { - return _Registry.Contract.Magic(&_Registry.CallOpts) -} - -// Magic is a free data retrieval call binding the contract method 0x0d854646. -// -// Solidity: function magic() view returns(uint256) -func (_Registry *RegistryCallerSession) Magic() (*big.Int, error) { - return _Registry.Contract.Magic(&_Registry.CallOpts) -} - -// ModifiedBlock is a free data retrieval call binding the contract method 0x7d10dd1b. -// -// Solidity: function modifiedBlock() view returns(uint256) -func (_Registry *RegistryCaller) ModifiedBlock(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "modifiedBlock") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ModifiedBlock is a free data retrieval call binding the contract method 0x7d10dd1b. -// -// Solidity: function modifiedBlock() view returns(uint256) -func (_Registry *RegistrySession) ModifiedBlock() (*big.Int, error) { - return _Registry.Contract.ModifiedBlock(&_Registry.CallOpts) -} - -// ModifiedBlock is a free data retrieval call binding the contract method 0x7d10dd1b. -// -// Solidity: function modifiedBlock() view returns(uint256) -func (_Registry *RegistryCallerSession) ModifiedBlock() (*big.Int, error) { - return _Registry.Contract.ModifiedBlock(&_Registry.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_Registry *RegistryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_Registry *RegistrySession) Owner() (common.Address, error) { - return _Registry.Contract.Owner(&_Registry.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_Registry *RegistryCallerSession) Owner() (common.Address, error) { - return _Registry.Contract.Owner(&_Registry.CallOpts) -} - -// Permissions is a free data retrieval call binding the contract method 0x3ec50c6c. -// -// Solidity: function permissions(bytes32 , address ) view returns(bool) -func (_Registry *RegistryCaller) Permissions(opts *bind.CallOpts, arg0 [32]byte, arg1 common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "permissions", arg0, arg1) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Permissions is a free data retrieval call binding the contract method 0x3ec50c6c. -// -// Solidity: function permissions(bytes32 , address ) view returns(bool) -func (_Registry *RegistrySession) Permissions(arg0 [32]byte, arg1 common.Address) (bool, error) { - return _Registry.Contract.Permissions(&_Registry.CallOpts, arg0, arg1) -} - -// Permissions is a free data retrieval call binding the contract method 0x3ec50c6c. -// -// Solidity: function permissions(bytes32 , address ) view returns(bool) -func (_Registry *RegistryCallerSession) Permissions(arg0 [32]byte, arg1 common.Address) (bool, error) { - return _Registry.Contract.Permissions(&_Registry.CallOpts, arg0, arg1) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_Registry *RegistryTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_Registry *RegistrySession) RenounceOwnership() (*types.Transaction, error) { - return _Registry.Contract.RenounceOwnership(&_Registry.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_Registry *RegistryTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _Registry.Contract.RenounceOwnership(&_Registry.TransactOpts) -} - -// SetContractDomain is a paid mutator transaction binding the contract method 0x04af66ad. -// -// Solidity: function setContractDomain(bytes32 _name, address _addr) returns(bool success) -func (_Registry *RegistryTransactor) SetContractDomain(opts *bind.TransactOpts, _name [32]byte, _addr common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setContractDomain", _name, _addr) -} - -// SetContractDomain is a paid mutator transaction binding the contract method 0x04af66ad. -// -// Solidity: function setContractDomain(bytes32 _name, address _addr) returns(bool success) -func (_Registry *RegistrySession) SetContractDomain(_name [32]byte, _addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetContractDomain(&_Registry.TransactOpts, _name, _addr) -} - -// SetContractDomain is a paid mutator transaction binding the contract method 0x04af66ad. -// -// Solidity: function setContractDomain(bytes32 _name, address _addr) returns(bool success) -func (_Registry *RegistryTransactorSession) SetContractDomain(_name [32]byte, _addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetContractDomain(&_Registry.TransactOpts, _name, _addr) -} - -// SetPermission is a paid mutator transaction binding the contract method 0x599e4c70. -// -// Solidity: function setPermission(bytes32 _contract, address _granted, bool _status) returns(bool success) -func (_Registry *RegistryTransactor) SetPermission(opts *bind.TransactOpts, _contract [32]byte, _granted common.Address, _status bool) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setPermission", _contract, _granted, _status) -} - -// SetPermission is a paid mutator transaction binding the contract method 0x599e4c70. -// -// Solidity: function setPermission(bytes32 _contract, address _granted, bool _status) returns(bool success) -func (_Registry *RegistrySession) SetPermission(_contract [32]byte, _granted common.Address, _status bool) (*types.Transaction, error) { - return _Registry.Contract.SetPermission(&_Registry.TransactOpts, _contract, _granted, _status) -} - -// SetPermission is a paid mutator transaction binding the contract method 0x599e4c70. -// -// Solidity: function setPermission(bytes32 _contract, address _granted, bool _status) returns(bool success) -func (_Registry *RegistryTransactorSession) SetPermission(_contract [32]byte, _granted common.Address, _status bool) (*types.Transaction, error) { - return _Registry.Contract.SetPermission(&_Registry.TransactOpts, _contract, _granted, _status) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_Registry *RegistryTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_Registry *RegistrySession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _Registry.Contract.TransferOwnership(&_Registry.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_Registry *RegistryTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _Registry.Contract.TransferOwnership(&_Registry.TransactOpts, newOwner) -} - -// RegistryOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Registry contract. -type RegistryOwnershipTransferredIterator struct { - Event *RegistryOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryOwnershipTransferred represents a OwnershipTransferred event raised by the Registry contract. -type RegistryOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_Registry *RegistryFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*RegistryOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &RegistryOwnershipTransferredIterator{contract: _Registry.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_Registry *RegistryFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RegistryOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryOwnershipTransferred) - if err := _Registry.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_Registry *RegistryFilterer) ParseOwnershipTransferred(log types.Log) (*RegistryOwnershipTransferred, error) { - event := new(RegistryOwnershipTransferred) - if err := _Registry.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySetContractDomainIterator is returned from FilterSetContractDomain and is used to iterate over the raw logs and unpacked data for SetContractDomain events raised by the Registry contract. -type RegistrySetContractDomainIterator struct { - Event *RegistrySetContractDomain // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySetContractDomainIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySetContractDomain) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySetContractDomain) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySetContractDomainIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySetContractDomainIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySetContractDomain represents a SetContractDomain event raised by the Registry contract. -type RegistrySetContractDomain struct { - Setter common.Address - Name [32]byte - Addr common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetContractDomain is a free log retrieval operation binding the contract event 0x37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db. -// -// Solidity: event SetContractDomain(address setter, bytes32 indexed name, address indexed addr) -func (_Registry *RegistryFilterer) FilterSetContractDomain(opts *bind.FilterOpts, name [][32]byte, addr []common.Address) (*RegistrySetContractDomainIterator, error) { - - var nameRule []interface{} - for _, nameItem := range name { - nameRule = append(nameRule, nameItem) - } - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SetContractDomain", nameRule, addrRule) - if err != nil { - return nil, err - } - return &RegistrySetContractDomainIterator{contract: _Registry.contract, event: "SetContractDomain", logs: logs, sub: sub}, nil -} - -// WatchSetContractDomain is a free log subscription operation binding the contract event 0x37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db. -// -// Solidity: event SetContractDomain(address setter, bytes32 indexed name, address indexed addr) -func (_Registry *RegistryFilterer) WatchSetContractDomain(opts *bind.WatchOpts, sink chan<- *RegistrySetContractDomain, name [][32]byte, addr []common.Address) (event.Subscription, error) { - - var nameRule []interface{} - for _, nameItem := range name { - nameRule = append(nameRule, nameItem) - } - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SetContractDomain", nameRule, addrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySetContractDomain) - if err := _Registry.contract.UnpackLog(event, "SetContractDomain", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetContractDomain is a log parse operation binding the contract event 0x37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db. -// -// Solidity: event SetContractDomain(address setter, bytes32 indexed name, address indexed addr) -func (_Registry *RegistryFilterer) ParseSetContractDomain(log types.Log) (*RegistrySetContractDomain, error) { - event := new(RegistrySetContractDomain) - if err := _Registry.contract.UnpackLog(event, "SetContractDomain", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySetPermissionIterator is returned from FilterSetPermission and is used to iterate over the raw logs and unpacked data for SetPermission events raised by the Registry contract. -type RegistrySetPermissionIterator struct { - Event *RegistrySetPermission // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySetPermissionIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySetPermission) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySetPermission) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySetPermissionIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySetPermissionIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySetPermission represents a SetPermission event raised by the Registry contract. -type RegistrySetPermission struct { - Contract [32]byte - Granted common.Address - Status bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetPermission is a free log retrieval operation binding the contract event 0xe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818. -// -// Solidity: event SetPermission(bytes32 indexed _contract, address indexed granted, bool status) -func (_Registry *RegistryFilterer) FilterSetPermission(opts *bind.FilterOpts, _contract [][32]byte, granted []common.Address) (*RegistrySetPermissionIterator, error) { - - var _contractRule []interface{} - for _, _contractItem := range _contract { - _contractRule = append(_contractRule, _contractItem) - } - var grantedRule []interface{} - for _, grantedItem := range granted { - grantedRule = append(grantedRule, grantedItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SetPermission", _contractRule, grantedRule) - if err != nil { - return nil, err - } - return &RegistrySetPermissionIterator{contract: _Registry.contract, event: "SetPermission", logs: logs, sub: sub}, nil -} - -// WatchSetPermission is a free log subscription operation binding the contract event 0xe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818. -// -// Solidity: event SetPermission(bytes32 indexed _contract, address indexed granted, bool status) -func (_Registry *RegistryFilterer) WatchSetPermission(opts *bind.WatchOpts, sink chan<- *RegistrySetPermission, _contract [][32]byte, granted []common.Address) (event.Subscription, error) { - - var _contractRule []interface{} - for _, _contractItem := range _contract { - _contractRule = append(_contractRule, _contractItem) - } - var grantedRule []interface{} - for _, grantedItem := range granted { - grantedRule = append(grantedRule, grantedItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SetPermission", _contractRule, grantedRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySetPermission) - if err := _Registry.contract.UnpackLog(event, "SetPermission", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetPermission is a log parse operation binding the contract event 0xe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818. -// -// Solidity: event SetPermission(bytes32 indexed _contract, address indexed granted, bool status) -func (_Registry *RegistryFilterer) ParseSetPermission(log types.Log) (*RegistrySetPermission, error) { - event := new(RegistrySetPermission) - if err := _Registry.contract.UnpackLog(event, "SetPermission", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/wemix/bind/gen_staking_abi.go b/wemix/bind/gen_staking_abi.go deleted file mode 100644 index e094c8e05b60..000000000000 --- a/wemix/bind/gen_staking_abi.go +++ /dev/null @@ -1,4177 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package gov - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// StakingMetaData contains all meta data concerning the Staking contract. -var StakingMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_imp\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "5c60da1b": "implementation()", - }, - Bin: "0x608060405234801561001057600080fd5b5060405161077238038061077283398101604081905261002f91610326565b604080516020810190915260008152819061006b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61034f565b60008051602061072b8339815191521461008757610087610374565b6100938282600061009b565b505050610405565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b61008b1760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610136838360405180606001604052806027815260200161074b602791396101fd565b9392505050565b610150816102db60201b6100b71760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061072b83398151915260001b6102ea60201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102655760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161028091906103b6565b600060405180830381855af49150503d80600081146102bb576040519150601f19603f3d011682016040523d82523d6000602084013e6102c0565b606091505b5090925090506102d18282866102ed565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102fc575081610136565b82511561030c5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103d2565b60006020828403121561033857600080fd5b81516001600160a01b038116811461013657600080fd5b60008282101561036f57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b60005b838110156103a557818101518382015260200161038d565b838111156100ca5750506000910152565b600082516103c881846020870161038a565b9190910192915050565b60208152600082518060208401526103f181604085016020870161038a565b601f01601f19169190910160400192915050565b610317806104146000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102bb60279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b60606001600160a01b0384163b61018d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101a8919061026b565b600060405180830381855af49150503d80600081146101e3576040519150601f19603f3d011682016040523d82523d6000602084013e6101e8565b606091505b50915091506101f8828286610202565b9695505050505050565b606083156102115750816100b0565b8251156102215782518084602001fd5b8160405162461bcd60e51b81526004016101849190610287565b60005b8381101561025657818101518382015260200161023e565b83811115610265576000848401525b50505050565b6000825161027d81846020870161023b565b9190910192915050565b60208152600082518060208401526102a681604085016020870161023b565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204c6da138e4aadf72357da99a86f99d8734efaebb1c66d7fcc80efea9db3acd3264736f6c634300080e0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", -} - -// StakingABI is the input ABI used to generate the binding from. -// Deprecated: Use StakingMetaData.ABI instead. -var StakingABI = StakingMetaData.ABI - -// Deprecated: Use StakingMetaData.Sigs instead. -// StakingFuncSigs maps the 4-byte function signature to its string representation. -var StakingFuncSigs = StakingMetaData.Sigs - -// StakingBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use StakingMetaData.Bin instead. -var StakingBin = StakingMetaData.Bin - -// DeployStaking deploys a new Ethereum contract, binding an instance of Staking to it. -func DeployStaking(auth *bind.TransactOpts, backend bind.ContractBackend, _imp common.Address) (common.Address, *types.Transaction, *Staking, error) { - parsed, err := StakingMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StakingBin), backend, _imp) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Staking{StakingCaller: StakingCaller{contract: contract}, StakingTransactor: StakingTransactor{contract: contract}, StakingFilterer: StakingFilterer{contract: contract}}, nil -} - -// Staking is an auto generated Go binding around an Ethereum contract. -type Staking struct { - StakingCaller // Read-only binding to the contract - StakingTransactor // Write-only binding to the contract - StakingFilterer // Log filterer for contract events -} - -// StakingCaller is an auto generated read-only Go binding around an Ethereum contract. -type StakingCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StakingTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StakingTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StakingFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StakingFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StakingSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StakingSession struct { - Contract *Staking // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StakingCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StakingCallerSession struct { - Contract *StakingCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StakingTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StakingTransactorSession struct { - Contract *StakingTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StakingRaw is an auto generated low-level Go binding around an Ethereum contract. -type StakingRaw struct { - Contract *Staking // Generic contract binding to access the raw methods on -} - -// StakingCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StakingCallerRaw struct { - Contract *StakingCaller // Generic read-only contract binding to access the raw methods on -} - -// StakingTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StakingTransactorRaw struct { - Contract *StakingTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStaking creates a new instance of Staking, bound to a specific deployed contract. -func NewStaking(address common.Address, backend bind.ContractBackend) (*Staking, error) { - contract, err := bindStaking(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Staking{StakingCaller: StakingCaller{contract: contract}, StakingTransactor: StakingTransactor{contract: contract}, StakingFilterer: StakingFilterer{contract: contract}}, nil -} - -// NewStakingCaller creates a new read-only instance of Staking, bound to a specific deployed contract. -func NewStakingCaller(address common.Address, caller bind.ContractCaller) (*StakingCaller, error) { - contract, err := bindStaking(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StakingCaller{contract: contract}, nil -} - -// NewStakingTransactor creates a new write-only instance of Staking, bound to a specific deployed contract. -func NewStakingTransactor(address common.Address, transactor bind.ContractTransactor) (*StakingTransactor, error) { - contract, err := bindStaking(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StakingTransactor{contract: contract}, nil -} - -// NewStakingFilterer creates a new log filterer instance of Staking, bound to a specific deployed contract. -func NewStakingFilterer(address common.Address, filterer bind.ContractFilterer) (*StakingFilterer, error) { - contract, err := bindStaking(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StakingFilterer{contract: contract}, nil -} - -// bindStaking binds a generic wrapper to an already deployed contract. -func bindStaking(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(StakingABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Staking *StakingRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Staking.Contract.StakingCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Staking *StakingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Staking.Contract.StakingTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Staking *StakingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Staking.Contract.StakingTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Staking *StakingCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Staking.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Staking *StakingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Staking.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Staking *StakingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Staking.Contract.contract.Transact(opts, method, params...) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_Staking *StakingCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Staking.contract.Call(opts, &out, "implementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_Staking *StakingSession) Implementation() (common.Address, error) { - return _Staking.Contract.Implementation(&_Staking.CallOpts) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_Staking *StakingCallerSession) Implementation() (common.Address, error) { - return _Staking.Contract.Implementation(&_Staking.CallOpts) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_Staking *StakingTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _Staking.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_Staking *StakingSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Staking.Contract.Fallback(&_Staking.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_Staking *StakingTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Staking.Contract.Fallback(&_Staking.TransactOpts, calldata) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Staking *StakingTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Staking.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Staking *StakingSession) Receive() (*types.Transaction, error) { - return _Staking.Contract.Receive(&_Staking.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_Staking *StakingTransactorSession) Receive() (*types.Transaction, error) { - return _Staking.Contract.Receive(&_Staking.TransactOpts) -} - -// StakingAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the Staking contract. -type StakingAdminChangedIterator struct { - Event *StakingAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingAdminChanged represents a AdminChanged event raised by the Staking contract. -type StakingAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_Staking *StakingFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*StakingAdminChangedIterator, error) { - - logs, sub, err := _Staking.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &StakingAdminChangedIterator{contract: _Staking.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_Staking *StakingFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *StakingAdminChanged) (event.Subscription, error) { - - logs, sub, err := _Staking.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingAdminChanged) - if err := _Staking.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_Staking *StakingFilterer) ParseAdminChanged(log types.Log) (*StakingAdminChanged, error) { - event := new(StakingAdminChanged) - if err := _Staking.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the Staking contract. -type StakingBeaconUpgradedIterator struct { - Event *StakingBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingBeaconUpgraded represents a BeaconUpgraded event raised by the Staking contract. -type StakingBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_Staking *StakingFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*StakingBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _Staking.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &StakingBeaconUpgradedIterator{contract: _Staking.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_Staking *StakingFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *StakingBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _Staking.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingBeaconUpgraded) - if err := _Staking.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_Staking *StakingFilterer) ParseBeaconUpgraded(log types.Log) (*StakingBeaconUpgraded, error) { - event := new(StakingBeaconUpgraded) - if err := _Staking.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Staking contract. -type StakingUpgradedIterator struct { - Event *StakingUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingUpgraded represents a Upgraded event raised by the Staking contract. -type StakingUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_Staking *StakingFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*StakingUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _Staking.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &StakingUpgradedIterator{contract: _Staking.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_Staking *StakingFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *StakingUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _Staking.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingUpgraded) - if err := _Staking.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_Staking *StakingFilterer) ParseUpgraded(log types.Log) (*StakingUpgraded, error) { - event := new(StakingUpgraded) - if err := _Staking.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpMetaData contains all meta data concerning the StakingImp contract. -var StakingImpMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ncpTotalLocked\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userTotalLocked\",\"type\":\"uint256\"}],\"name\":\"DelegateStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ncpTotalLocked\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userTotalLocked\",\"type\":\"uint256\"}],\"name\":\"DelegateUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"}],\"name\":\"NCPAddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Revoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"SetRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"Staked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"TransferLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"Unlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"Unstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BALLOT_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ECOSYSTEM_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENV_STORAGE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOV_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAINTENANCE_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_POOL_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKING_REWARD_NAME\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"availableBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"calcVotingWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"factor\",\"type\":\"uint32\"}],\"name\":\"calcVotingWeightWithScaleFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"}],\"name\":\"delegateDepositAndLockMore\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"delegateUnlockAndWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"}],\"name\":\"getRatioOfUserBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalLockedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isRevoked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lockAmount\",\"type\":\"uint256\"}],\"name\":\"lockMore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ncpStaking\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reg\",\"outputs\":[{\"internalType\":\"contractIRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ncpStaking\",\"type\":\"address\"}],\"name\":\"setNCPStaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"slashing\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ext\",\"type\":\"uint256\"}],\"name\":\"transferLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unlockAmount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImp\",\"type\":\"address\"}],\"name\":\"upgradeStaking\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"userBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ncp\",\"type\":\"address\"}],\"name\":\"userTotalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Sigs: map[string]string{ - "9986e4b9": "BALLOT_STORAGE_NAME()", - "34125c84": "ECOSYSTEM_NAME()", - "7bf46530": "ENV_STORAGE_NAME()", - "6c78d2cf": "GOV_NAME()", - "4bd1ed76": "MAINTENANCE_NAME()", - "2f40992e": "REWARD_POOL_NAME()", - "1e0cba0d": "STAKING_NAME()", - "5a731cca": "STAKING_REWARD_NAME()", - "25d998bb": "availableBalanceOf(address)", - "70a08231": "balanceOf(address)", - "884d97a7": "calcVotingWeight(address)", - "7d77a0eb": "calcVotingWeightWithScaleFactor(address,uint32)", - "bac4f338": "delegateDepositAndLockMore(address)", - "f6931822": "delegateUnlockAndWithdraw(address,uint256)", - "d0e30db0": "deposit()", - "2b0b9c5e": "getRatioOfUserBalance(address)", - "d5c25890": "getTotalLockedBalance()", - "c0d91eaf": "init(address,bytes)", - "2bc9ed02": "isRevoked()", - "282d3fdf": "lock(address,uint256)", - "9667e76a": "lockMore(uint256)", - "59355736": "lockedBalanceOf(address)", - "f1b8aa1d": "ncpStaking()", - "8da5cb5b": "owner()", - "52d1902d": "proxiableUUID()", - "738fdd1a": "reg()", - "715018a6": "renounceOwnership()", - "b6549f75": "revoke()", - "7f2f4c06": "setNCPStaking(address)", - "a91ee0dc": "setRegistry(address)", - "92a950b6": "transferLocked(address,uint256,uint256)", - "f2fde38b": "transferOwnership(address)", - "7eee288d": "unlock(address,uint256)", - "f3f63080": "upgradeStaking(address)", - "3659cfe6": "upgradeTo(address)", - "4f1ef286": "upgradeToAndCall(address,bytes)", - "12853615": "userBalanceOf(address,address)", - "193468ac": "userTotalBalanceOf(address)", - "2e1a7d4d": "withdraw(uint256)", - }, - Bin: "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516135176200012060003960008181610be601528181610c2601528181610cc501528181610d050152610d9401526135176000f3fe6080604052600436106102345760003560e01c8063738fdd1a1161012e578063a91ee0dc116100ab578063d5c258901161006f578063d5c25890146106b3578063f1b8aa1d146106c8578063f2fde38b146106e8578063f3f6308014610708578063f69318221461072857600080fd5b8063a91ee0dc14610643578063b6549f7514610663578063bac4f33814610678578063c0d91eaf1461068b578063d0e30db0146106ab57600080fd5b8063884d97a7116100f2578063884d97a7146105a15780638da5cb5b146105c157806392a950b6146105df5780639667e76a146105ff5780639986e4b91461061f57600080fd5b8063738fdd1a146104e85780637bf46530146105205780637d77a0eb146105415780637eee288d146105615780637f2f4c061461058157600080fd5b806334125c84116101bc5780635935573611610180578063593557361461041a5780635a731cca146104505780636c78d2cf1461047457806370a082311461049d578063715018a6146104d357600080fd5b806334125c84146103905780633659cfe6146103b05780634bd1ed76146103d05780634f1ef286146103f257806352d1902d1461040557600080fd5b8063282d3fdf11610203578063282d3fdf146102ea5780632b0b9c5e1461030c5780632bc9ed021461032c5780632e1a7d4d1461034f5780632f40992e1461036f57600080fd5b80631285361514610243578063193468ac146102765780631e0cba0d146102ac57806325d998bb146102ca57600080fd5b3661023e57600080fd5b600080fd5b34801561024f57600080fd5b5061026361025e366004612e48565b610748565b6040519081526020015b60405180910390f35b34801561028257600080fd5b50610263610291366004612e81565b6001600160a01b0316600090815260ce602052604090205490565b3480156102b857600080fd5b50610263665374616b696e6760c81b81565b3480156102d657600080fd5b506102636102e5366004612e81565b610775565b3480156102f657600080fd5b5061030a610305366004612e9e565b6107a3565b005b34801561031857600080fd5b50610263610327366004612e81565b6107e9565b34801561033857600080fd5b50609b5460ff16604051901515815260200161026d565b34801561035b57600080fd5b5061030a61036a366004612eca565b610845565b34801561037b57600080fd5b506102636914995dd85c99141bdbdb60b21b81565b34801561039c57600080fd5b506102636845636f73797374656d60b81b81565b3480156103bc57600080fd5b5061030a6103cb366004612e81565b610bdc565b3480156103dc57600080fd5b506102636a4d61696e74656e616e636560a81b81565b61030a610400366004612f2a565b610cbb565b34801561041157600080fd5b50610263610d87565b34801561042657600080fd5b50610263610435366004612e81565b6001600160a01b031660009081526099602052604090205490565b34801561045c57600080fd5b506102636c14dd185ada5b99d4995dd85c99609a1b81565b34801561048057600080fd5b506102637111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156104a957600080fd5b506102636104b8366004612e81565b6001600160a01b031660009081526098602052604090205490565b3480156104df57600080fd5b5061030a610e3a565b3480156104f457600080fd5b50606554610508906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561052c57600080fd5b5061026369456e7653746f7261676560b01b81565b34801561054d57600080fd5b5061026361055c366004612fd2565b610e4e565b34801561056d57600080fd5b5061030a61057c366004612e9e565b610ec2565b34801561058d57600080fd5b5061030a61059c366004612e81565b610efb565b3480156105ad57600080fd5b506102636105bc366004612e81565b610fa3565b3480156105cd57600080fd5b506033546001600160a01b0316610508565b3480156105eb57600080fd5b5061030a6105fa366004613009565b610fb0565b34801561060b57600080fd5b5061030a61061a366004612eca565b6112e6565b34801561062b57600080fd5b506102636c42616c6c6f7453746f7261676560981b81565b34801561064f57600080fd5b5061030a61065e366004612e81565b6114e1565b34801561066f57600080fd5b5061030a611589565b61030a610686366004612e81565b611693565b34801561069757600080fd5b5061030a6106a6366004612f2a565b611a85565b61030a611c36565b3480156106bf57600080fd5b50609a54610263565b3480156106d457600080fd5b5060cf54610508906001600160a01b031681565b3480156106f457600080fd5b5061030a610703366004612e81565b612000565b34801561071457600080fd5b5061030a610723366004612e81565b612076565b34801561073457600080fd5b5061030a610743366004612e9e565b612096565b6001600160a01b03808316600090815260cd60209081526040808320938516835292905220545b92915050565b6001600160a01b038116600090815260996020908152604080832054609890925282205461076f9190613054565b336107ac61249b565b6001600160a01b0316146107db5760405162461bcd60e51b81526004016107d29061306b565b60405180910390fd5b6107e582826124c0565b5050565b6001600160a01b038116600090815260ce60209081526040808320546099909252822054811580610818575080155b15610827575060009392505050565b80610833836064613092565b61083d91906130b1565b949350505050565b6002606654036108675760405162461bcd60e51b81526004016107d2906130d3565b6002606655609b5460ff161561088f5760405162461bcd60e51b81526004016107d29061310a565b600081116108af5760405162461bcd60e51b81526004016107d29061312e565b60006108b9612735565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a919061316f565b905060006109288383613188565b33600090815260ce602090815260408083205460999092529091205461094e9190613054565b106109615761095d338461274d565b5060015b61096a33610775565b8311156109895760405162461bcd60e51b81526004016107d2906131a0565b336000908152609860205260409020546109a4908490613054565b3360009081526098602052604090205560cf546001600160a01b0316158015906109cb5750805b15610add5760cf546040516000916001600160a01b03169085908381818185875af1925050503d8060008114610a1d576040519150601f19603f3d011682016040523d82523d6000602084013e610a22565b606091505b5050905080610a735760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c6564000060448201526064016107d2565b60cf546040516306aa67f960e01b8152600481018690523360248201526001600160a01b03909116906306aa67f990604401600060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b5050505050610b77565b604051600090339085908381818185875af1925050503d8060008114610b1f576040519150601f19603f3d011682016040523d82523d6000602084013e610b24565b606091505b5050905080610b755760405162461bcd60e51b815260206004820152601960248201527f5472616e7366657220746f2073656e646572206661696c65640000000000000060448201526064016107d2565b505b336000818152609860205260409020547f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00908590610bb484610775565b6040805193845260208401929092529082015260600160405180910390a25050600160665550565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c245760405162461bcd60e51b81526004016107d2906131f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c6d60008051602061349b833981519152546001600160a01b031690565b6001600160a01b031614610c935760405162461bcd60e51b81526004016107d290613240565b610c9c81612896565b60408051600080825260208201909252610cb89183919061289e565b50565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610d035760405162461bcd60e51b81526004016107d2906131f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610d4c60008051602061349b833981519152546001600160a01b031690565b6001600160a01b031614610d725760405162461bcd60e51b81526004016107d290613240565b610d7b82612896565b6107e58282600161289e565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e275760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016107d2565b5060008051602061349b83398151915290565b610e42612a09565b610e4c6000612a63565b565b6001600160a01b0382166000908152609960205260408120541580610e77575063ffffffff8216155b15610e845750600061076f565b609a546001600160a01b038416600090815260996020526040902054610eb19063ffffffff851690613092565b610ebb91906130b1565b9392505050565b33610ecb61249b565b6001600160a01b031614610ef15760405162461bcd60e51b81526004016107d29061306b565b6107e5828261274d565b610f03612a09565b6001600160a01b038116610f595760405162461bcd60e51b815260206004820152601e60248201527f4e43505374616b696e6720697320746865207a65726f2061646472657373000060448201526064016107d2565b60cf80546001600160a01b0319166001600160a01b0383169081179091556040517ffd5754300dde6066eda4fabd23616c1d560a3360c85c0716c46e00649bdeeddf90600090a250565b600061076f826064610e4e565b33610fb961249b565b6001600160a01b031614610fdf5760405162461bcd60e51b81526004016107d29061306b565b6000610ff4661390d4115e1a5d60ca1b612ab5565b90506110008484610ec2565b6001600160a01b038416600090815260986020526040902054611024908490613054565b6001600160a01b038516600090815260986020526040812091909155611048612b23565b6001600160a01b03811660009081526098602052604090205490915061106f908590613188565b6001600160a01b03808316600090815260986020908152604080832094909455918816815260ce909152908120546110a79085613054565b90506110b38682610ec2565b6001600160a01b03861660009081526099602090815260408083205460ce909252909120548110156111665760405162461bcd60e51b815260206004820152605060248201527f7472616e73666572656442616c616e6365206d7573742062652067726561746560448201527f72207468616e206f7220657175616c20746f205f6c6f636b656455736572426160648201526f3630b731b2aa37a721a82a37ba30b61760811b608482015260a4016107d2565b6111708782610ec2565b6001600160a01b038716600090815260986020526040902054611194908290613054565b6001600160a01b0388811660008181526098602090815260408083209590955560ce9052839020549251638408bdb160e01b81526004810191909152602481018490526044810192909252851690638408bdb19083906064016000604051808303818588803b15801561120657600080fd5b505af115801561121a573d6000803e3d6000fd5b505060cf546001600160a01b0316159250611268915050576001600160a01b03808816600090815260ce6020908152604080832083905560cd825280832060cf549094168352929052908120555b6001600160a01b0387167f2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e2461129d8389613188565b6001600160a01b038a166000908152609860205260409020546112bf8b610775565b6040805193845260208401929092529082015260600160405180910390a250505050505050565b6112ee61249b565b604051636f1e853360e01b81523360048201526001600160a01b039190911690636f1e853390602401602060405180830381865afa158015611334573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611358919061328c565b6113745760405162461bcd60e51b81526004016107d29061306b565b61137e33826124c0565b60cf546001600160a01b031615610cb85760cf5460405163bbc2611360e01b81523360048201526000916001600160a01b03169063bbc2611390602401602060405180830381865afa1580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc919061316f565b60cf54604051631069f3b560e01b8152600481018390523360248201529192506001600160a01b031690631069f3b59060440160a060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147091906132ae565b60800151156107e55760cf546040516301008e9960e61b8152600481018490523360248201526001600160a01b0390911690634023a64090604401600060405180830381600087803b1580156114c557600080fd5b505af11580156114d9573d6000803e3d6000fd5b505050505050565b6114e9612a09565b6001600160a01b03811661153f5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016107d2565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b611591612a09565b609b5460ff16156115b45760405162461bcd60e51b81526004016107d29061310a565b60006115c86033546001600160a01b031690565b905047806116065760405162461bcd60e51b815260206004820152600b60248201526a062616c616e6365203d20360ac1b60448201526064016107d2565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561163c573d6000803e3d6000fd5b50609b805460ff191660011790556040516001600160a01b038316907f713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4906116879084815260200190565b60405180910390a25050565b6002606654036116b55760405162461bcd60e51b81526004016107d2906130d3565b6002606655609b5460ff16156116dd5760405162461bcd60e51b81526004016107d29061310a565b60cf546001600160a01b031633146117075760405162461bcd60e51b81526004016107d29061331e565b600034116117275760405162461bcd60e51b81526004016107d29061336d565b61172f61249b565b60405163288c314960e21b81526001600160a01b038381166004830152919091169063a230c52490602401602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061328c565b6117e05760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b60448201526064016107d2565b6001600160a01b0381166000908152609860205260409020543490611806908290613188565b6001600160a01b03831660009081526098602052604081209190915561182a612735565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188b919061316f565b90506000611897612735565b6001600160a01b031663737c59b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f8919061316f565b6001600160a01b038516600090815260996020526040902054909150821180159061194757506001600160a01b0384166000908152609960205260409020548190611944908590613188565b11155b6119935760405162461bcd60e51b815260206004820152601f60248201527f757365722073686f756c6420626520696e207374616b696e672072616e67650060448201526064016107d2565b61199d84846124c0565b6001600160a01b038416600090815260cd602090815260408083203384529091529020546119cc908490613188565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce9091522054611a08908490613188565b6001600160a01b038516600081815260ce6020908152604080832085905560cd825280832033808552908352928190205481518981529283019590955281019390935290917f74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd9060600160405180910390a3505060016066555050565b600054610100900460ff1615808015611aa55750600054600160ff909116105b80611abf5750303b158015611abf575060005460ff166001145b611b225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107d2565b6000805460ff191660011790558015611b45576000805461ff0019166101001790555b6000609a55609b805460ff19169055611b5c612b3a565b611b64612b69565b611b6d836114e1565b815115611beb57600080600080602086019150855182611b8d9190613188565b90505b80821015611be65781519350611ba7602083613188565b9150808210611bb557600080fd5b81519250611bc4602083613188565b6001600160a01b03851660009081526098602052604090208490559150611b90565b505050505b8015611c31576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600260665403611c585760405162461bcd60e51b81526004016107d2906130d3565b6002606655609b5460ff1615611c805760405162461bcd60e51b81526004016107d29061310a565b60003411611ca05760405162461bcd60e51b81526004016107d29061336d565b33600090815260986020526040902054611cbb903490613188565b33600090815260986020526040902055611cd361249b565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c52490602401602060405180830381865afa158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d919061328c565b15611f9e576000611d4c612735565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dad919061316f565b3360009081526099602052604090205490915081118015611def575033600090815260996020526040902054611de39082613054565b611dec33610775565b10155b15611f9c5760cf546001600160a01b031615611f785760cf5460405163bbc2611360e01b81523360048201526000916001600160a01b03169063bbc2611390602401602060405180830381865afa158015611e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e72919061316f565b60cf54604051631069f3b560e01b8152600481018390523360248201529192506001600160a01b031690631069f3b59060440160a060405180830381865afa158015611ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee691906132ae565b6080015115611f765760cf54336000908152609960205260409020546001600160a01b0390911690634023a64090611f1e9085613054565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611f5d57600080fd5b505af1158015611f71573d6000803e3d6000fd5b505050505b505b33600081815260996020526040902054611f9c9190611f979084613054565b6124c0565b505b336000818152609860205260409020547fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed903490611fdb84610775565b6040805193845260208401929092529082015260600160405180910390a26001606655565b612008612a09565b6001600160a01b03811661206d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d2565b610cb881612a63565b61207e612a09565b6001600160a01b03811615610cb857610c9c81612896565b6002606654036120b85760405162461bcd60e51b81526004016107d2906130d3565b6002606655609b5460ff16156120e05760405162461bcd60e51b81526004016107d29061310a565b60cf546001600160a01b0316331461210a5760405162461bcd60e51b81526004016107d29061331e565b6000811161212a5760405162461bcd60e51b81526004016107d29061312e565b61213261249b565b60405163288c314960e21b81526001600160a01b038481166004830152919091169063a230c52490602401602060405180830381865afa15801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e919061328c565b6121e35760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b60448201526064016107d2565b8060006121ee612735565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f919061316f565b6001600160a01b038516600090815260cd6020908152604080832033845290915290205490915082118015906122ae575080826122a1866001600160a01b031660009081526099602052604090205490565b6122ab9190613054565b10155b6122ca5760405162461bcd60e51b81526004016107d2906131a0565b6122d4848361274d565b6001600160a01b0384166000908152609860205260409020546122f8908390613054565b6001600160a01b03851660009081526098602090815260408083209390935560cd815282822033835290522054612330908390613054565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce909152205461236c908390613054565b6001600160a01b03858116600090815260ce60205260408082209390935560cf54925190929091169084908381818185875af1925050503d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b50509050806124255760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c6564000060448201526064016107d2565b6001600160a01b038516600081815260ce602090815260408083205460cd835281842033808652908452938290205482518981529384019190915282820152517f03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda29181900360600190a350506001606655505050565b60006124bb7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612ab5565b905090565b806000036124cc575050565b6001600160a01b03821660009081526098602052604090205481111561254d5760405162461bcd60e51b815260206004820152603060248201527f4c6f636b20616d6f756e742073686f756c6420626520657175616c206f72206c60448201526f657373207468616e2062616c616e636560801b60648201526084016107d2565b8061255783610775565b10156125b55760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015266081b1bd8dad95960ca1b60648201526084016107d2565b60006125bf612735565b6001600160a01b031663737c59b86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612620919061316f565b6001600160a01b038416600090815260996020526040902054909150612647908390613188565b6001600160a01b03841660009081526099602052604090208190558110156126bb5760405162461bcd60e51b815260206004820152602160248201527f4c6f636b65642062616c616e6365206973206c6172676572207468616e206d616044820152600f60fb1b60648201526084016107d2565b81609a546126c99190613188565b609a556001600160a01b0383166000818152609860205260409020547f44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c1190849061271287610775565b6040805193845260208401929092529082015260600160405180910390a2505050565b60006124bb69456e7653746f7261676560b01b612ab5565b80600003612759575050565b6001600160a01b0382166000908152609960205260409020548111156127e75760405162461bcd60e51b815260206004820152603960248201527f556e6c6f636b20616d6f756e742073686f756c6420626520657175616c206f7260448201527f206c657373207468616e2062616c616e6365206c6f636b65640000000000000060648201526084016107d2565b6001600160a01b03821660009081526099602052604090205461280b908290613054565b6001600160a01b038316600090815260996020526040902055609a54612832908290613054565b609a556001600160a01b0382166000818152609860205260409020547f5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a890839061287b86610775565b60408051938452602084019290925290820152606001611687565b610cb8612a09565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156128d157611c3183612b98565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561292b575060408051601f3d908101601f191682019092526129289181019061316f565b60015b61298e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016107d2565b60008051602061349b83398151915281146129fd5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016107d2565b50611c31838383612c34565b6033546001600160a01b03163314610e4c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd90602401602060405180830381865afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076f91906133b7565b60006124bb6845636f73797374656d60b81b612ab5565b600054610100900460ff16612b615760405162461bcd60e51b81526004016107d2906133d4565b610e4c612c5f565b600054610100900460ff16612b905760405162461bcd60e51b81526004016107d2906133d4565b610e4c612c8d565b6001600160a01b0381163b612c055760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107d2565b60008051602061349b83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612c3d83612cbd565b600082511180612c4a5750805b15611c3157612c598383612cfd565b50505050565b600054610100900460ff16612c865760405162461bcd60e51b81526004016107d2906133d4565b6001606655565b600054610100900460ff16612cb45760405162461bcd60e51b81526004016107d2906133d4565b610e4c33612a63565b612cc681612b98565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610ebb83836040518060600160405280602781526020016134bb6027913960606001600160a01b0384163b612d855760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107d2565b600080856001600160a01b031685604051612da0919061344b565b600060405180830381855af49150503d8060008114612ddb576040519150601f19603f3d011682016040523d82523d6000602084013e612de0565b606091505b5091509150612df0828286612dfa565b9695505050505050565b60608315612e09575081610ebb565b825115612e195782518084602001fd5b8160405162461bcd60e51b81526004016107d29190613467565b6001600160a01b0381168114610cb857600080fd5b60008060408385031215612e5b57600080fd5b8235612e6681612e33565b91506020830135612e7681612e33565b809150509250929050565b600060208284031215612e9357600080fd5b8135610ebb81612e33565b60008060408385031215612eb157600080fd5b8235612ebc81612e33565b946020939093013593505050565b600060208284031215612edc57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612f2257612f22612ee3565b604052919050565b60008060408385031215612f3d57600080fd5b8235612f4881612e33565b915060208381013567ffffffffffffffff80821115612f6657600080fd5b818601915086601f830112612f7a57600080fd5b813581811115612f8c57612f8c612ee3565b612f9e601f8201601f19168501612ef9565b91508082528784828501011115612fb457600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060408385031215612fe557600080fd5b8235612ff081612e33565b9150602083013563ffffffff81168114612e7657600080fd5b60008060006060848603121561301e57600080fd5b833561302981612e33565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156130665761306661303e565b500390565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b60008160001904831182151516156130ac576130ac61303e565b500290565b6000826130ce57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600a9082015269125cc81c995d9bdad95960b21b604082015260600190565b60208082526021908201527f416d6f756e742073686f756c6420626520626967676572207468616e207a65726040820152606f60f81b606082015260800190565b60006020828403121561318157600080fd5b5051919050565b6000821982111561319b5761319b61303e565b500190565b60208082526034908201527f576974686472617720616d6f756e742073686f756c6420626520657175616c206040820152736f72206c657373207468616e2062616c616e636560601b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561329e57600080fd5b81518015158114610ebb57600080fd5b600060a082840312156132c057600080fd5b60405160a0810181811067ffffffffffffffff821117156132e3576132e3612ee3565b806040525082518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b6020808252602f908201527f4f6e6c79204e43505374616b696e6720636f6e74726163742063616e2063616c60408201526e36103a3434b990333ab731ba34b7b760891b606082015260800190565b6020808252602a908201527f4465706f73697420616d6f756e742073686f756c642062652067726561746572604082015269207468616e207a65726f60b01b606082015260800190565b6000602082840312156133c957600080fd5b8151610ebb81612e33565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b8381101561343a578181015183820152602001613422565b83811115612c595750506000910152565b6000825161345d81846020870161341f565b9190910192915050565b602081526000825180602084015261348681604085016020870161341f565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209be7b166904060c81e0f12d1750832c603d4a1e15c5cc3ca929ed8586bc93c0864736f6c634300080e0033", -} - -// StakingImpABI is the input ABI used to generate the binding from. -// Deprecated: Use StakingImpMetaData.ABI instead. -var StakingImpABI = StakingImpMetaData.ABI - -// Deprecated: Use StakingImpMetaData.Sigs instead. -// StakingImpFuncSigs maps the 4-byte function signature to its string representation. -var StakingImpFuncSigs = StakingImpMetaData.Sigs - -// StakingImpBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use StakingImpMetaData.Bin instead. -var StakingImpBin = StakingImpMetaData.Bin - -// DeployStakingImp deploys a new Ethereum contract, binding an instance of StakingImp to it. -func DeployStakingImp(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StakingImp, error) { - parsed, err := StakingImpMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StakingImpBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &StakingImp{StakingImpCaller: StakingImpCaller{contract: contract}, StakingImpTransactor: StakingImpTransactor{contract: contract}, StakingImpFilterer: StakingImpFilterer{contract: contract}}, nil -} - -// StakingImp is an auto generated Go binding around an Ethereum contract. -type StakingImp struct { - StakingImpCaller // Read-only binding to the contract - StakingImpTransactor // Write-only binding to the contract - StakingImpFilterer // Log filterer for contract events -} - -// StakingImpCaller is an auto generated read-only Go binding around an Ethereum contract. -type StakingImpCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StakingImpTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StakingImpTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StakingImpFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StakingImpFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StakingImpSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StakingImpSession struct { - Contract *StakingImp // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StakingImpCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StakingImpCallerSession struct { - Contract *StakingImpCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StakingImpTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StakingImpTransactorSession struct { - Contract *StakingImpTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StakingImpRaw is an auto generated low-level Go binding around an Ethereum contract. -type StakingImpRaw struct { - Contract *StakingImp // Generic contract binding to access the raw methods on -} - -// StakingImpCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StakingImpCallerRaw struct { - Contract *StakingImpCaller // Generic read-only contract binding to access the raw methods on -} - -// StakingImpTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StakingImpTransactorRaw struct { - Contract *StakingImpTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStakingImp creates a new instance of StakingImp, bound to a specific deployed contract. -func NewStakingImp(address common.Address, backend bind.ContractBackend) (*StakingImp, error) { - contract, err := bindStakingImp(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &StakingImp{StakingImpCaller: StakingImpCaller{contract: contract}, StakingImpTransactor: StakingImpTransactor{contract: contract}, StakingImpFilterer: StakingImpFilterer{contract: contract}}, nil -} - -// NewStakingImpCaller creates a new read-only instance of StakingImp, bound to a specific deployed contract. -func NewStakingImpCaller(address common.Address, caller bind.ContractCaller) (*StakingImpCaller, error) { - contract, err := bindStakingImp(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StakingImpCaller{contract: contract}, nil -} - -// NewStakingImpTransactor creates a new write-only instance of StakingImp, bound to a specific deployed contract. -func NewStakingImpTransactor(address common.Address, transactor bind.ContractTransactor) (*StakingImpTransactor, error) { - contract, err := bindStakingImp(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StakingImpTransactor{contract: contract}, nil -} - -// NewStakingImpFilterer creates a new log filterer instance of StakingImp, bound to a specific deployed contract. -func NewStakingImpFilterer(address common.Address, filterer bind.ContractFilterer) (*StakingImpFilterer, error) { - contract, err := bindStakingImp(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StakingImpFilterer{contract: contract}, nil -} - -// bindStakingImp binds a generic wrapper to an already deployed contract. -func bindStakingImp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(StakingImpABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StakingImp *StakingImpRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StakingImp.Contract.StakingImpCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StakingImp *StakingImpRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StakingImp.Contract.StakingImpTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StakingImp *StakingImpRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StakingImp.Contract.StakingImpTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_StakingImp *StakingImpCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StakingImp.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_StakingImp *StakingImpTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StakingImp.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StakingImp *StakingImpTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StakingImp.Contract.contract.Transact(opts, method, params...) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) BALLOTSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "BALLOT_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _StakingImp.Contract.BALLOTSTORAGENAME(&_StakingImp.CallOpts) -} - -// BALLOTSTORAGENAME is a free data retrieval call binding the contract method 0x9986e4b9. -// -// Solidity: function BALLOT_STORAGE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) BALLOTSTORAGENAME() ([32]byte, error) { - return _StakingImp.Contract.BALLOTSTORAGENAME(&_StakingImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) ECOSYSTEMNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "ECOSYSTEM_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) ECOSYSTEMNAME() ([32]byte, error) { - return _StakingImp.Contract.ECOSYSTEMNAME(&_StakingImp.CallOpts) -} - -// ECOSYSTEMNAME is a free data retrieval call binding the contract method 0x34125c84. -// -// Solidity: function ECOSYSTEM_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) ECOSYSTEMNAME() ([32]byte, error) { - return _StakingImp.Contract.ECOSYSTEMNAME(&_StakingImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) ENVSTORAGENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "ENV_STORAGE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) ENVSTORAGENAME() ([32]byte, error) { - return _StakingImp.Contract.ENVSTORAGENAME(&_StakingImp.CallOpts) -} - -// ENVSTORAGENAME is a free data retrieval call binding the contract method 0x7bf46530. -// -// Solidity: function ENV_STORAGE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) ENVSTORAGENAME() ([32]byte, error) { - return _StakingImp.Contract.ENVSTORAGENAME(&_StakingImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) GOVNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "GOV_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) GOVNAME() ([32]byte, error) { - return _StakingImp.Contract.GOVNAME(&_StakingImp.CallOpts) -} - -// GOVNAME is a free data retrieval call binding the contract method 0x6c78d2cf. -// -// Solidity: function GOV_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) GOVNAME() ([32]byte, error) { - return _StakingImp.Contract.GOVNAME(&_StakingImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) MAINTENANCENAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "MAINTENANCE_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) MAINTENANCENAME() ([32]byte, error) { - return _StakingImp.Contract.MAINTENANCENAME(&_StakingImp.CallOpts) -} - -// MAINTENANCENAME is a free data retrieval call binding the contract method 0x4bd1ed76. -// -// Solidity: function MAINTENANCE_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) MAINTENANCENAME() ([32]byte, error) { - return _StakingImp.Contract.MAINTENANCENAME(&_StakingImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) REWARDPOOLNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "REWARD_POOL_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) REWARDPOOLNAME() ([32]byte, error) { - return _StakingImp.Contract.REWARDPOOLNAME(&_StakingImp.CallOpts) -} - -// REWARDPOOLNAME is a free data retrieval call binding the contract method 0x2f40992e. -// -// Solidity: function REWARD_POOL_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) REWARDPOOLNAME() ([32]byte, error) { - return _StakingImp.Contract.REWARDPOOLNAME(&_StakingImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) STAKINGNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "STAKING_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) STAKINGNAME() ([32]byte, error) { - return _StakingImp.Contract.STAKINGNAME(&_StakingImp.CallOpts) -} - -// STAKINGNAME is a free data retrieval call binding the contract method 0x1e0cba0d. -// -// Solidity: function STAKING_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) STAKINGNAME() ([32]byte, error) { - return _StakingImp.Contract.STAKINGNAME(&_StakingImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCaller) STAKINGREWARDNAME(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "STAKING_REWARD_NAME") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_StakingImp *StakingImpSession) STAKINGREWARDNAME() ([32]byte, error) { - return _StakingImp.Contract.STAKINGREWARDNAME(&_StakingImp.CallOpts) -} - -// STAKINGREWARDNAME is a free data retrieval call binding the contract method 0x5a731cca. -// -// Solidity: function STAKING_REWARD_NAME() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) STAKINGREWARDNAME() ([32]byte, error) { - return _StakingImp.Contract.STAKINGREWARDNAME(&_StakingImp.CallOpts) -} - -// AvailableBalanceOf is a free data retrieval call binding the contract method 0x25d998bb. -// -// Solidity: function availableBalanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpCaller) AvailableBalanceOf(opts *bind.CallOpts, payee common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "availableBalanceOf", payee) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// AvailableBalanceOf is a free data retrieval call binding the contract method 0x25d998bb. -// -// Solidity: function availableBalanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpSession) AvailableBalanceOf(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.AvailableBalanceOf(&_StakingImp.CallOpts, payee) -} - -// AvailableBalanceOf is a free data retrieval call binding the contract method 0x25d998bb. -// -// Solidity: function availableBalanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) AvailableBalanceOf(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.AvailableBalanceOf(&_StakingImp.CallOpts, payee) -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpCaller) BalanceOf(opts *bind.CallOpts, payee common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "balanceOf", payee) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpSession) BalanceOf(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.BalanceOf(&_StakingImp.CallOpts, payee) -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) BalanceOf(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.BalanceOf(&_StakingImp.CallOpts, payee) -} - -// CalcVotingWeight is a free data retrieval call binding the contract method 0x884d97a7. -// -// Solidity: function calcVotingWeight(address payee) view returns(uint256) -func (_StakingImp *StakingImpCaller) CalcVotingWeight(opts *bind.CallOpts, payee common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "calcVotingWeight", payee) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// CalcVotingWeight is a free data retrieval call binding the contract method 0x884d97a7. -// -// Solidity: function calcVotingWeight(address payee) view returns(uint256) -func (_StakingImp *StakingImpSession) CalcVotingWeight(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.CalcVotingWeight(&_StakingImp.CallOpts, payee) -} - -// CalcVotingWeight is a free data retrieval call binding the contract method 0x884d97a7. -// -// Solidity: function calcVotingWeight(address payee) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) CalcVotingWeight(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.CalcVotingWeight(&_StakingImp.CallOpts, payee) -} - -// CalcVotingWeightWithScaleFactor is a free data retrieval call binding the contract method 0x7d77a0eb. -// -// Solidity: function calcVotingWeightWithScaleFactor(address payee, uint32 factor) view returns(uint256) -func (_StakingImp *StakingImpCaller) CalcVotingWeightWithScaleFactor(opts *bind.CallOpts, payee common.Address, factor uint32) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "calcVotingWeightWithScaleFactor", payee, factor) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// CalcVotingWeightWithScaleFactor is a free data retrieval call binding the contract method 0x7d77a0eb. -// -// Solidity: function calcVotingWeightWithScaleFactor(address payee, uint32 factor) view returns(uint256) -func (_StakingImp *StakingImpSession) CalcVotingWeightWithScaleFactor(payee common.Address, factor uint32) (*big.Int, error) { - return _StakingImp.Contract.CalcVotingWeightWithScaleFactor(&_StakingImp.CallOpts, payee, factor) -} - -// CalcVotingWeightWithScaleFactor is a free data retrieval call binding the contract method 0x7d77a0eb. -// -// Solidity: function calcVotingWeightWithScaleFactor(address payee, uint32 factor) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) CalcVotingWeightWithScaleFactor(payee common.Address, factor uint32) (*big.Int, error) { - return _StakingImp.Contract.CalcVotingWeightWithScaleFactor(&_StakingImp.CallOpts, payee, factor) -} - -// GetRatioOfUserBalance is a free data retrieval call binding the contract method 0x2b0b9c5e. -// -// Solidity: function getRatioOfUserBalance(address ncp) view returns(uint256) -func (_StakingImp *StakingImpCaller) GetRatioOfUserBalance(opts *bind.CallOpts, ncp common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "getRatioOfUserBalance", ncp) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetRatioOfUserBalance is a free data retrieval call binding the contract method 0x2b0b9c5e. -// -// Solidity: function getRatioOfUserBalance(address ncp) view returns(uint256) -func (_StakingImp *StakingImpSession) GetRatioOfUserBalance(ncp common.Address) (*big.Int, error) { - return _StakingImp.Contract.GetRatioOfUserBalance(&_StakingImp.CallOpts, ncp) -} - -// GetRatioOfUserBalance is a free data retrieval call binding the contract method 0x2b0b9c5e. -// -// Solidity: function getRatioOfUserBalance(address ncp) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) GetRatioOfUserBalance(ncp common.Address) (*big.Int, error) { - return _StakingImp.Contract.GetRatioOfUserBalance(&_StakingImp.CallOpts, ncp) -} - -// GetTotalLockedBalance is a free data retrieval call binding the contract method 0xd5c25890. -// -// Solidity: function getTotalLockedBalance() view returns(uint256) -func (_StakingImp *StakingImpCaller) GetTotalLockedBalance(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "getTotalLockedBalance") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTotalLockedBalance is a free data retrieval call binding the contract method 0xd5c25890. -// -// Solidity: function getTotalLockedBalance() view returns(uint256) -func (_StakingImp *StakingImpSession) GetTotalLockedBalance() (*big.Int, error) { - return _StakingImp.Contract.GetTotalLockedBalance(&_StakingImp.CallOpts) -} - -// GetTotalLockedBalance is a free data retrieval call binding the contract method 0xd5c25890. -// -// Solidity: function getTotalLockedBalance() view returns(uint256) -func (_StakingImp *StakingImpCallerSession) GetTotalLockedBalance() (*big.Int, error) { - return _StakingImp.Contract.GetTotalLockedBalance(&_StakingImp.CallOpts) -} - -// IsRevoked is a free data retrieval call binding the contract method 0x2bc9ed02. -// -// Solidity: function isRevoked() view returns(bool) -func (_StakingImp *StakingImpCaller) IsRevoked(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "isRevoked") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsRevoked is a free data retrieval call binding the contract method 0x2bc9ed02. -// -// Solidity: function isRevoked() view returns(bool) -func (_StakingImp *StakingImpSession) IsRevoked() (bool, error) { - return _StakingImp.Contract.IsRevoked(&_StakingImp.CallOpts) -} - -// IsRevoked is a free data retrieval call binding the contract method 0x2bc9ed02. -// -// Solidity: function isRevoked() view returns(bool) -func (_StakingImp *StakingImpCallerSession) IsRevoked() (bool, error) { - return _StakingImp.Contract.IsRevoked(&_StakingImp.CallOpts) -} - -// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736. -// -// Solidity: function lockedBalanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpCaller) LockedBalanceOf(opts *bind.CallOpts, payee common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "lockedBalanceOf", payee) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736. -// -// Solidity: function lockedBalanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpSession) LockedBalanceOf(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.LockedBalanceOf(&_StakingImp.CallOpts, payee) -} - -// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736. -// -// Solidity: function lockedBalanceOf(address payee) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) LockedBalanceOf(payee common.Address) (*big.Int, error) { - return _StakingImp.Contract.LockedBalanceOf(&_StakingImp.CallOpts, payee) -} - -// NcpStaking is a free data retrieval call binding the contract method 0xf1b8aa1d. -// -// Solidity: function ncpStaking() view returns(address) -func (_StakingImp *StakingImpCaller) NcpStaking(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "ncpStaking") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// NcpStaking is a free data retrieval call binding the contract method 0xf1b8aa1d. -// -// Solidity: function ncpStaking() view returns(address) -func (_StakingImp *StakingImpSession) NcpStaking() (common.Address, error) { - return _StakingImp.Contract.NcpStaking(&_StakingImp.CallOpts) -} - -// NcpStaking is a free data retrieval call binding the contract method 0xf1b8aa1d. -// -// Solidity: function ncpStaking() view returns(address) -func (_StakingImp *StakingImpCallerSession) NcpStaking() (common.Address, error) { - return _StakingImp.Contract.NcpStaking(&_StakingImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_StakingImp *StakingImpCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_StakingImp *StakingImpSession) Owner() (common.Address, error) { - return _StakingImp.Contract.Owner(&_StakingImp.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_StakingImp *StakingImpCallerSession) Owner() (common.Address, error) { - return _StakingImp.Contract.Owner(&_StakingImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_StakingImp *StakingImpCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "proxiableUUID") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_StakingImp *StakingImpSession) ProxiableUUID() ([32]byte, error) { - return _StakingImp.Contract.ProxiableUUID(&_StakingImp.CallOpts) -} - -// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. -// -// Solidity: function proxiableUUID() view returns(bytes32) -func (_StakingImp *StakingImpCallerSession) ProxiableUUID() ([32]byte, error) { - return _StakingImp.Contract.ProxiableUUID(&_StakingImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_StakingImp *StakingImpCaller) Reg(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "reg") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_StakingImp *StakingImpSession) Reg() (common.Address, error) { - return _StakingImp.Contract.Reg(&_StakingImp.CallOpts) -} - -// Reg is a free data retrieval call binding the contract method 0x738fdd1a. -// -// Solidity: function reg() view returns(address) -func (_StakingImp *StakingImpCallerSession) Reg() (common.Address, error) { - return _StakingImp.Contract.Reg(&_StakingImp.CallOpts) -} - -// UserBalanceOf is a free data retrieval call binding the contract method 0x12853615. -// -// Solidity: function userBalanceOf(address ncp, address user) view returns(uint256) -func (_StakingImp *StakingImpCaller) UserBalanceOf(opts *bind.CallOpts, ncp common.Address, user common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "userBalanceOf", ncp, user) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// UserBalanceOf is a free data retrieval call binding the contract method 0x12853615. -// -// Solidity: function userBalanceOf(address ncp, address user) view returns(uint256) -func (_StakingImp *StakingImpSession) UserBalanceOf(ncp common.Address, user common.Address) (*big.Int, error) { - return _StakingImp.Contract.UserBalanceOf(&_StakingImp.CallOpts, ncp, user) -} - -// UserBalanceOf is a free data retrieval call binding the contract method 0x12853615. -// -// Solidity: function userBalanceOf(address ncp, address user) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) UserBalanceOf(ncp common.Address, user common.Address) (*big.Int, error) { - return _StakingImp.Contract.UserBalanceOf(&_StakingImp.CallOpts, ncp, user) -} - -// UserTotalBalanceOf is a free data retrieval call binding the contract method 0x193468ac. -// -// Solidity: function userTotalBalanceOf(address ncp) view returns(uint256) -func (_StakingImp *StakingImpCaller) UserTotalBalanceOf(opts *bind.CallOpts, ncp common.Address) (*big.Int, error) { - var out []interface{} - err := _StakingImp.contract.Call(opts, &out, "userTotalBalanceOf", ncp) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// UserTotalBalanceOf is a free data retrieval call binding the contract method 0x193468ac. -// -// Solidity: function userTotalBalanceOf(address ncp) view returns(uint256) -func (_StakingImp *StakingImpSession) UserTotalBalanceOf(ncp common.Address) (*big.Int, error) { - return _StakingImp.Contract.UserTotalBalanceOf(&_StakingImp.CallOpts, ncp) -} - -// UserTotalBalanceOf is a free data retrieval call binding the contract method 0x193468ac. -// -// Solidity: function userTotalBalanceOf(address ncp) view returns(uint256) -func (_StakingImp *StakingImpCallerSession) UserTotalBalanceOf(ncp common.Address) (*big.Int, error) { - return _StakingImp.Contract.UserTotalBalanceOf(&_StakingImp.CallOpts, ncp) -} - -// DelegateDepositAndLockMore is a paid mutator transaction binding the contract method 0xbac4f338. -// -// Solidity: function delegateDepositAndLockMore(address ncp) payable returns() -func (_StakingImp *StakingImpTransactor) DelegateDepositAndLockMore(opts *bind.TransactOpts, ncp common.Address) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "delegateDepositAndLockMore", ncp) -} - -// DelegateDepositAndLockMore is a paid mutator transaction binding the contract method 0xbac4f338. -// -// Solidity: function delegateDepositAndLockMore(address ncp) payable returns() -func (_StakingImp *StakingImpSession) DelegateDepositAndLockMore(ncp common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.DelegateDepositAndLockMore(&_StakingImp.TransactOpts, ncp) -} - -// DelegateDepositAndLockMore is a paid mutator transaction binding the contract method 0xbac4f338. -// -// Solidity: function delegateDepositAndLockMore(address ncp) payable returns() -func (_StakingImp *StakingImpTransactorSession) DelegateDepositAndLockMore(ncp common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.DelegateDepositAndLockMore(&_StakingImp.TransactOpts, ncp) -} - -// DelegateUnlockAndWithdraw is a paid mutator transaction binding the contract method 0xf6931822. -// -// Solidity: function delegateUnlockAndWithdraw(address ncp, uint256 amount) returns() -func (_StakingImp *StakingImpTransactor) DelegateUnlockAndWithdraw(opts *bind.TransactOpts, ncp common.Address, amount *big.Int) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "delegateUnlockAndWithdraw", ncp, amount) -} - -// DelegateUnlockAndWithdraw is a paid mutator transaction binding the contract method 0xf6931822. -// -// Solidity: function delegateUnlockAndWithdraw(address ncp, uint256 amount) returns() -func (_StakingImp *StakingImpSession) DelegateUnlockAndWithdraw(ncp common.Address, amount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.DelegateUnlockAndWithdraw(&_StakingImp.TransactOpts, ncp, amount) -} - -// DelegateUnlockAndWithdraw is a paid mutator transaction binding the contract method 0xf6931822. -// -// Solidity: function delegateUnlockAndWithdraw(address ncp, uint256 amount) returns() -func (_StakingImp *StakingImpTransactorSession) DelegateUnlockAndWithdraw(ncp common.Address, amount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.DelegateUnlockAndWithdraw(&_StakingImp.TransactOpts, ncp, amount) -} - -// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. -// -// Solidity: function deposit() payable returns() -func (_StakingImp *StakingImpTransactor) Deposit(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "deposit") -} - -// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. -// -// Solidity: function deposit() payable returns() -func (_StakingImp *StakingImpSession) Deposit() (*types.Transaction, error) { - return _StakingImp.Contract.Deposit(&_StakingImp.TransactOpts) -} - -// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. -// -// Solidity: function deposit() payable returns() -func (_StakingImp *StakingImpTransactorSession) Deposit() (*types.Transaction, error) { - return _StakingImp.Contract.Deposit(&_StakingImp.TransactOpts) -} - -// Init is a paid mutator transaction binding the contract method 0xc0d91eaf. -// -// Solidity: function init(address registry, bytes data) returns() -func (_StakingImp *StakingImpTransactor) Init(opts *bind.TransactOpts, registry common.Address, data []byte) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "init", registry, data) -} - -// Init is a paid mutator transaction binding the contract method 0xc0d91eaf. -// -// Solidity: function init(address registry, bytes data) returns() -func (_StakingImp *StakingImpSession) Init(registry common.Address, data []byte) (*types.Transaction, error) { - return _StakingImp.Contract.Init(&_StakingImp.TransactOpts, registry, data) -} - -// Init is a paid mutator transaction binding the contract method 0xc0d91eaf. -// -// Solidity: function init(address registry, bytes data) returns() -func (_StakingImp *StakingImpTransactorSession) Init(registry common.Address, data []byte) (*types.Transaction, error) { - return _StakingImp.Contract.Init(&_StakingImp.TransactOpts, registry, data) -} - -// Lock is a paid mutator transaction binding the contract method 0x282d3fdf. -// -// Solidity: function lock(address payee, uint256 lockAmount) returns() -func (_StakingImp *StakingImpTransactor) Lock(opts *bind.TransactOpts, payee common.Address, lockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "lock", payee, lockAmount) -} - -// Lock is a paid mutator transaction binding the contract method 0x282d3fdf. -// -// Solidity: function lock(address payee, uint256 lockAmount) returns() -func (_StakingImp *StakingImpSession) Lock(payee common.Address, lockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.Lock(&_StakingImp.TransactOpts, payee, lockAmount) -} - -// Lock is a paid mutator transaction binding the contract method 0x282d3fdf. -// -// Solidity: function lock(address payee, uint256 lockAmount) returns() -func (_StakingImp *StakingImpTransactorSession) Lock(payee common.Address, lockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.Lock(&_StakingImp.TransactOpts, payee, lockAmount) -} - -// LockMore is a paid mutator transaction binding the contract method 0x9667e76a. -// -// Solidity: function lockMore(uint256 lockAmount) returns() -func (_StakingImp *StakingImpTransactor) LockMore(opts *bind.TransactOpts, lockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "lockMore", lockAmount) -} - -// LockMore is a paid mutator transaction binding the contract method 0x9667e76a. -// -// Solidity: function lockMore(uint256 lockAmount) returns() -func (_StakingImp *StakingImpSession) LockMore(lockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.LockMore(&_StakingImp.TransactOpts, lockAmount) -} - -// LockMore is a paid mutator transaction binding the contract method 0x9667e76a. -// -// Solidity: function lockMore(uint256 lockAmount) returns() -func (_StakingImp *StakingImpTransactorSession) LockMore(lockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.LockMore(&_StakingImp.TransactOpts, lockAmount) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_StakingImp *StakingImpTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_StakingImp *StakingImpSession) RenounceOwnership() (*types.Transaction, error) { - return _StakingImp.Contract.RenounceOwnership(&_StakingImp.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_StakingImp *StakingImpTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _StakingImp.Contract.RenounceOwnership(&_StakingImp.TransactOpts) -} - -// Revoke is a paid mutator transaction binding the contract method 0xb6549f75. -// -// Solidity: function revoke() returns() -func (_StakingImp *StakingImpTransactor) Revoke(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "revoke") -} - -// Revoke is a paid mutator transaction binding the contract method 0xb6549f75. -// -// Solidity: function revoke() returns() -func (_StakingImp *StakingImpSession) Revoke() (*types.Transaction, error) { - return _StakingImp.Contract.Revoke(&_StakingImp.TransactOpts) -} - -// Revoke is a paid mutator transaction binding the contract method 0xb6549f75. -// -// Solidity: function revoke() returns() -func (_StakingImp *StakingImpTransactorSession) Revoke() (*types.Transaction, error) { - return _StakingImp.Contract.Revoke(&_StakingImp.TransactOpts) -} - -// SetNCPStaking is a paid mutator transaction binding the contract method 0x7f2f4c06. -// -// Solidity: function setNCPStaking(address _ncpStaking) returns() -func (_StakingImp *StakingImpTransactor) SetNCPStaking(opts *bind.TransactOpts, _ncpStaking common.Address) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "setNCPStaking", _ncpStaking) -} - -// SetNCPStaking is a paid mutator transaction binding the contract method 0x7f2f4c06. -// -// Solidity: function setNCPStaking(address _ncpStaking) returns() -func (_StakingImp *StakingImpSession) SetNCPStaking(_ncpStaking common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.SetNCPStaking(&_StakingImp.TransactOpts, _ncpStaking) -} - -// SetNCPStaking is a paid mutator transaction binding the contract method 0x7f2f4c06. -// -// Solidity: function setNCPStaking(address _ncpStaking) returns() -func (_StakingImp *StakingImpTransactorSession) SetNCPStaking(_ncpStaking common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.SetNCPStaking(&_StakingImp.TransactOpts, _ncpStaking) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_StakingImp *StakingImpTransactor) SetRegistry(opts *bind.TransactOpts, _addr common.Address) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "setRegistry", _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_StakingImp *StakingImpSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.SetRegistry(&_StakingImp.TransactOpts, _addr) -} - -// SetRegistry is a paid mutator transaction binding the contract method 0xa91ee0dc. -// -// Solidity: function setRegistry(address _addr) returns() -func (_StakingImp *StakingImpTransactorSession) SetRegistry(_addr common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.SetRegistry(&_StakingImp.TransactOpts, _addr) -} - -// TransferLocked is a paid mutator transaction binding the contract method 0x92a950b6. -// -// Solidity: function transferLocked(address from, uint256 slashing, uint256 ext) returns() -func (_StakingImp *StakingImpTransactor) TransferLocked(opts *bind.TransactOpts, from common.Address, slashing *big.Int, ext *big.Int) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "transferLocked", from, slashing, ext) -} - -// TransferLocked is a paid mutator transaction binding the contract method 0x92a950b6. -// -// Solidity: function transferLocked(address from, uint256 slashing, uint256 ext) returns() -func (_StakingImp *StakingImpSession) TransferLocked(from common.Address, slashing *big.Int, ext *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.TransferLocked(&_StakingImp.TransactOpts, from, slashing, ext) -} - -// TransferLocked is a paid mutator transaction binding the contract method 0x92a950b6. -// -// Solidity: function transferLocked(address from, uint256 slashing, uint256 ext) returns() -func (_StakingImp *StakingImpTransactorSession) TransferLocked(from common.Address, slashing *big.Int, ext *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.TransferLocked(&_StakingImp.TransactOpts, from, slashing, ext) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_StakingImp *StakingImpTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_StakingImp *StakingImpSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.TransferOwnership(&_StakingImp.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_StakingImp *StakingImpTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.TransferOwnership(&_StakingImp.TransactOpts, newOwner) -} - -// Unlock is a paid mutator transaction binding the contract method 0x7eee288d. -// -// Solidity: function unlock(address payee, uint256 unlockAmount) returns() -func (_StakingImp *StakingImpTransactor) Unlock(opts *bind.TransactOpts, payee common.Address, unlockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "unlock", payee, unlockAmount) -} - -// Unlock is a paid mutator transaction binding the contract method 0x7eee288d. -// -// Solidity: function unlock(address payee, uint256 unlockAmount) returns() -func (_StakingImp *StakingImpSession) Unlock(payee common.Address, unlockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.Unlock(&_StakingImp.TransactOpts, payee, unlockAmount) -} - -// Unlock is a paid mutator transaction binding the contract method 0x7eee288d. -// -// Solidity: function unlock(address payee, uint256 unlockAmount) returns() -func (_StakingImp *StakingImpTransactorSession) Unlock(payee common.Address, unlockAmount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.Unlock(&_StakingImp.TransactOpts, payee, unlockAmount) -} - -// UpgradeStaking is a paid mutator transaction binding the contract method 0xf3f63080. -// -// Solidity: function upgradeStaking(address newImp) returns() -func (_StakingImp *StakingImpTransactor) UpgradeStaking(opts *bind.TransactOpts, newImp common.Address) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "upgradeStaking", newImp) -} - -// UpgradeStaking is a paid mutator transaction binding the contract method 0xf3f63080. -// -// Solidity: function upgradeStaking(address newImp) returns() -func (_StakingImp *StakingImpSession) UpgradeStaking(newImp common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.UpgradeStaking(&_StakingImp.TransactOpts, newImp) -} - -// UpgradeStaking is a paid mutator transaction binding the contract method 0xf3f63080. -// -// Solidity: function upgradeStaking(address newImp) returns() -func (_StakingImp *StakingImpTransactorSession) UpgradeStaking(newImp common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.UpgradeStaking(&_StakingImp.TransactOpts, newImp) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_StakingImp *StakingImpTransactor) UpgradeTo(opts *bind.TransactOpts, newImplementation common.Address) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "upgradeTo", newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_StakingImp *StakingImpSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.UpgradeTo(&_StakingImp.TransactOpts, newImplementation) -} - -// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. -// -// Solidity: function upgradeTo(address newImplementation) returns() -func (_StakingImp *StakingImpTransactorSession) UpgradeTo(newImplementation common.Address) (*types.Transaction, error) { - return _StakingImp.Contract.UpgradeTo(&_StakingImp.TransactOpts, newImplementation) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_StakingImp *StakingImpTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_StakingImp *StakingImpSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _StakingImp.Contract.UpgradeToAndCall(&_StakingImp.TransactOpts, newImplementation, data) -} - -// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. -// -// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() -func (_StakingImp *StakingImpTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { - return _StakingImp.Contract.UpgradeToAndCall(&_StakingImp.TransactOpts, newImplementation, data) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. -// -// Solidity: function withdraw(uint256 amount) returns() -func (_StakingImp *StakingImpTransactor) Withdraw(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _StakingImp.contract.Transact(opts, "withdraw", amount) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. -// -// Solidity: function withdraw(uint256 amount) returns() -func (_StakingImp *StakingImpSession) Withdraw(amount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.Withdraw(&_StakingImp.TransactOpts, amount) -} - -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. -// -// Solidity: function withdraw(uint256 amount) returns() -func (_StakingImp *StakingImpTransactorSession) Withdraw(amount *big.Int) (*types.Transaction, error) { - return _StakingImp.Contract.Withdraw(&_StakingImp.TransactOpts, amount) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_StakingImp *StakingImpTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StakingImp.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_StakingImp *StakingImpSession) Receive() (*types.Transaction, error) { - return _StakingImp.Contract.Receive(&_StakingImp.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_StakingImp *StakingImpTransactorSession) Receive() (*types.Transaction, error) { - return _StakingImp.Contract.Receive(&_StakingImp.TransactOpts) -} - -// StakingImpAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the StakingImp contract. -type StakingImpAdminChangedIterator struct { - Event *StakingImpAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpAdminChanged represents a AdminChanged event raised by the StakingImp contract. -type StakingImpAdminChanged struct { - PreviousAdmin common.Address - NewAdmin common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_StakingImp *StakingImpFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*StakingImpAdminChangedIterator, error) { - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return &StakingImpAdminChangedIterator{contract: _StakingImp.contract, event: "AdminChanged", logs: logs, sub: sub}, nil -} - -// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_StakingImp *StakingImpFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *StakingImpAdminChanged) (event.Subscription, error) { - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "AdminChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpAdminChanged) - if err := _StakingImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. -// -// Solidity: event AdminChanged(address previousAdmin, address newAdmin) -func (_StakingImp *StakingImpFilterer) ParseAdminChanged(log types.Log) (*StakingImpAdminChanged, error) { - event := new(StakingImpAdminChanged) - if err := _StakingImp.contract.UnpackLog(event, "AdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpBeaconUpgradedIterator is returned from FilterBeaconUpgraded and is used to iterate over the raw logs and unpacked data for BeaconUpgraded events raised by the StakingImp contract. -type StakingImpBeaconUpgradedIterator struct { - Event *StakingImpBeaconUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpBeaconUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpBeaconUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpBeaconUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpBeaconUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpBeaconUpgraded represents a BeaconUpgraded event raised by the StakingImp contract. -type StakingImpBeaconUpgraded struct { - Beacon common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeaconUpgraded is a free log retrieval operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_StakingImp *StakingImpFilterer) FilterBeaconUpgraded(opts *bind.FilterOpts, beacon []common.Address) (*StakingImpBeaconUpgradedIterator, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return &StakingImpBeaconUpgradedIterator{contract: _StakingImp.contract, event: "BeaconUpgraded", logs: logs, sub: sub}, nil -} - -// WatchBeaconUpgraded is a free log subscription operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_StakingImp *StakingImpFilterer) WatchBeaconUpgraded(opts *bind.WatchOpts, sink chan<- *StakingImpBeaconUpgraded, beacon []common.Address) (event.Subscription, error) { - - var beaconRule []interface{} - for _, beaconItem := range beacon { - beaconRule = append(beaconRule, beaconItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "BeaconUpgraded", beaconRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpBeaconUpgraded) - if err := _StakingImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeaconUpgraded is a log parse operation binding the contract event 0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e. -// -// Solidity: event BeaconUpgraded(address indexed beacon) -func (_StakingImp *StakingImpFilterer) ParseBeaconUpgraded(log types.Log) (*StakingImpBeaconUpgraded, error) { - event := new(StakingImpBeaconUpgraded) - if err := _StakingImp.contract.UnpackLog(event, "BeaconUpgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpDelegateStakedIterator is returned from FilterDelegateStaked and is used to iterate over the raw logs and unpacked data for DelegateStaked events raised by the StakingImp contract. -type StakingImpDelegateStakedIterator struct { - Event *StakingImpDelegateStaked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpDelegateStakedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpDelegateStaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpDelegateStaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpDelegateStakedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpDelegateStakedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpDelegateStaked represents a DelegateStaked event raised by the StakingImp contract. -type StakingImpDelegateStaked struct { - Payee common.Address - Amount *big.Int - Ncp common.Address - NcpTotalLocked *big.Int - UserTotalLocked *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDelegateStaked is a free log retrieval operation binding the contract event 0x74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd. -// -// Solidity: event DelegateStaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked) -func (_StakingImp *StakingImpFilterer) FilterDelegateStaked(opts *bind.FilterOpts, payee []common.Address, ncp []common.Address) (*StakingImpDelegateStakedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - var ncpRule []interface{} - for _, ncpItem := range ncp { - ncpRule = append(ncpRule, ncpItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "DelegateStaked", payeeRule, ncpRule) - if err != nil { - return nil, err - } - return &StakingImpDelegateStakedIterator{contract: _StakingImp.contract, event: "DelegateStaked", logs: logs, sub: sub}, nil -} - -// WatchDelegateStaked is a free log subscription operation binding the contract event 0x74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd. -// -// Solidity: event DelegateStaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked) -func (_StakingImp *StakingImpFilterer) WatchDelegateStaked(opts *bind.WatchOpts, sink chan<- *StakingImpDelegateStaked, payee []common.Address, ncp []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - var ncpRule []interface{} - for _, ncpItem := range ncp { - ncpRule = append(ncpRule, ncpItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "DelegateStaked", payeeRule, ncpRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpDelegateStaked) - if err := _StakingImp.contract.UnpackLog(event, "DelegateStaked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDelegateStaked is a log parse operation binding the contract event 0x74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd. -// -// Solidity: event DelegateStaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked) -func (_StakingImp *StakingImpFilterer) ParseDelegateStaked(log types.Log) (*StakingImpDelegateStaked, error) { - event := new(StakingImpDelegateStaked) - if err := _StakingImp.contract.UnpackLog(event, "DelegateStaked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpDelegateUnstakedIterator is returned from FilterDelegateUnstaked and is used to iterate over the raw logs and unpacked data for DelegateUnstaked events raised by the StakingImp contract. -type StakingImpDelegateUnstakedIterator struct { - Event *StakingImpDelegateUnstaked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpDelegateUnstakedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpDelegateUnstaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpDelegateUnstaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpDelegateUnstakedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpDelegateUnstakedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpDelegateUnstaked represents a DelegateUnstaked event raised by the StakingImp contract. -type StakingImpDelegateUnstaked struct { - Payee common.Address - Amount *big.Int - Ncp common.Address - NcpTotalLocked *big.Int - UserTotalLocked *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDelegateUnstaked is a free log retrieval operation binding the contract event 0x03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda2. -// -// Solidity: event DelegateUnstaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked) -func (_StakingImp *StakingImpFilterer) FilterDelegateUnstaked(opts *bind.FilterOpts, payee []common.Address, ncp []common.Address) (*StakingImpDelegateUnstakedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - var ncpRule []interface{} - for _, ncpItem := range ncp { - ncpRule = append(ncpRule, ncpItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "DelegateUnstaked", payeeRule, ncpRule) - if err != nil { - return nil, err - } - return &StakingImpDelegateUnstakedIterator{contract: _StakingImp.contract, event: "DelegateUnstaked", logs: logs, sub: sub}, nil -} - -// WatchDelegateUnstaked is a free log subscription operation binding the contract event 0x03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda2. -// -// Solidity: event DelegateUnstaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked) -func (_StakingImp *StakingImpFilterer) WatchDelegateUnstaked(opts *bind.WatchOpts, sink chan<- *StakingImpDelegateUnstaked, payee []common.Address, ncp []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - var ncpRule []interface{} - for _, ncpItem := range ncp { - ncpRule = append(ncpRule, ncpItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "DelegateUnstaked", payeeRule, ncpRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpDelegateUnstaked) - if err := _StakingImp.contract.UnpackLog(event, "DelegateUnstaked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDelegateUnstaked is a log parse operation binding the contract event 0x03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda2. -// -// Solidity: event DelegateUnstaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked) -func (_StakingImp *StakingImpFilterer) ParseDelegateUnstaked(log types.Log) (*StakingImpDelegateUnstaked, error) { - event := new(StakingImpDelegateUnstaked) - if err := _StakingImp.contract.UnpackLog(event, "DelegateUnstaked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StakingImp contract. -type StakingImpInitializedIterator struct { - Event *StakingImpInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpInitialized represents a Initialized event raised by the StakingImp contract. -type StakingImpInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_StakingImp *StakingImpFilterer) FilterInitialized(opts *bind.FilterOpts) (*StakingImpInitializedIterator, error) { - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &StakingImpInitializedIterator{contract: _StakingImp.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_StakingImp *StakingImpFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StakingImpInitialized) (event.Subscription, error) { - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpInitialized) - if err := _StakingImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_StakingImp *StakingImpFilterer) ParseInitialized(log types.Log) (*StakingImpInitialized, error) { - event := new(StakingImpInitialized) - if err := _StakingImp.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpLockedIterator is returned from FilterLocked and is used to iterate over the raw logs and unpacked data for Locked events raised by the StakingImp contract. -type StakingImpLockedIterator struct { - Event *StakingImpLocked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpLockedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpLocked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpLocked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpLockedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpLockedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpLocked represents a Locked event raised by the StakingImp contract. -type StakingImpLocked struct { - Payee common.Address - Amount *big.Int - Total *big.Int - Available *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLocked is a free log retrieval operation binding the contract event 0x44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c11. -// -// Solidity: event Locked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) FilterLocked(opts *bind.FilterOpts, payee []common.Address) (*StakingImpLockedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Locked", payeeRule) - if err != nil { - return nil, err - } - return &StakingImpLockedIterator{contract: _StakingImp.contract, event: "Locked", logs: logs, sub: sub}, nil -} - -// WatchLocked is a free log subscription operation binding the contract event 0x44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c11. -// -// Solidity: event Locked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *StakingImpLocked, payee []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Locked", payeeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpLocked) - if err := _StakingImp.contract.UnpackLog(event, "Locked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseLocked is a log parse operation binding the contract event 0x44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c11. -// -// Solidity: event Locked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) ParseLocked(log types.Log) (*StakingImpLocked, error) { - event := new(StakingImpLocked) - if err := _StakingImp.contract.UnpackLog(event, "Locked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpNCPAddrChangedIterator is returned from FilterNCPAddrChanged and is used to iterate over the raw logs and unpacked data for NCPAddrChanged events raised by the StakingImp contract. -type StakingImpNCPAddrChangedIterator struct { - Event *StakingImpNCPAddrChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpNCPAddrChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpNCPAddrChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpNCPAddrChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpNCPAddrChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpNCPAddrChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpNCPAddrChanged represents a NCPAddrChanged event raised by the StakingImp contract. -type StakingImpNCPAddrChanged struct { - Ncp common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNCPAddrChanged is a free log retrieval operation binding the contract event 0xfd5754300dde6066eda4fabd23616c1d560a3360c85c0716c46e00649bdeeddf. -// -// Solidity: event NCPAddrChanged(address indexed ncp) -func (_StakingImp *StakingImpFilterer) FilterNCPAddrChanged(opts *bind.FilterOpts, ncp []common.Address) (*StakingImpNCPAddrChangedIterator, error) { - - var ncpRule []interface{} - for _, ncpItem := range ncp { - ncpRule = append(ncpRule, ncpItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "NCPAddrChanged", ncpRule) - if err != nil { - return nil, err - } - return &StakingImpNCPAddrChangedIterator{contract: _StakingImp.contract, event: "NCPAddrChanged", logs: logs, sub: sub}, nil -} - -// WatchNCPAddrChanged is a free log subscription operation binding the contract event 0xfd5754300dde6066eda4fabd23616c1d560a3360c85c0716c46e00649bdeeddf. -// -// Solidity: event NCPAddrChanged(address indexed ncp) -func (_StakingImp *StakingImpFilterer) WatchNCPAddrChanged(opts *bind.WatchOpts, sink chan<- *StakingImpNCPAddrChanged, ncp []common.Address) (event.Subscription, error) { - - var ncpRule []interface{} - for _, ncpItem := range ncp { - ncpRule = append(ncpRule, ncpItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "NCPAddrChanged", ncpRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpNCPAddrChanged) - if err := _StakingImp.contract.UnpackLog(event, "NCPAddrChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseNCPAddrChanged is a log parse operation binding the contract event 0xfd5754300dde6066eda4fabd23616c1d560a3360c85c0716c46e00649bdeeddf. -// -// Solidity: event NCPAddrChanged(address indexed ncp) -func (_StakingImp *StakingImpFilterer) ParseNCPAddrChanged(log types.Log) (*StakingImpNCPAddrChanged, error) { - event := new(StakingImpNCPAddrChanged) - if err := _StakingImp.contract.UnpackLog(event, "NCPAddrChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the StakingImp contract. -type StakingImpOwnershipTransferredIterator struct { - Event *StakingImpOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpOwnershipTransferred represents a OwnershipTransferred event raised by the StakingImp contract. -type StakingImpOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_StakingImp *StakingImpFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*StakingImpOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &StakingImpOwnershipTransferredIterator{contract: _StakingImp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_StakingImp *StakingImpFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *StakingImpOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpOwnershipTransferred) - if err := _StakingImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_StakingImp *StakingImpFilterer) ParseOwnershipTransferred(log types.Log) (*StakingImpOwnershipTransferred, error) { - event := new(StakingImpOwnershipTransferred) - if err := _StakingImp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpRevokedIterator is returned from FilterRevoked and is used to iterate over the raw logs and unpacked data for Revoked events raised by the StakingImp contract. -type StakingImpRevokedIterator struct { - Event *StakingImpRevoked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpRevokedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpRevoked represents a Revoked event raised by the StakingImp contract. -type StakingImpRevoked struct { - Owner common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRevoked is a free log retrieval operation binding the contract event 0x713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4. -// -// Solidity: event Revoked(address indexed owner, uint256 amount) -func (_StakingImp *StakingImpFilterer) FilterRevoked(opts *bind.FilterOpts, owner []common.Address) (*StakingImpRevokedIterator, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Revoked", ownerRule) - if err != nil { - return nil, err - } - return &StakingImpRevokedIterator{contract: _StakingImp.contract, event: "Revoked", logs: logs, sub: sub}, nil -} - -// WatchRevoked is a free log subscription operation binding the contract event 0x713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4. -// -// Solidity: event Revoked(address indexed owner, uint256 amount) -func (_StakingImp *StakingImpFilterer) WatchRevoked(opts *bind.WatchOpts, sink chan<- *StakingImpRevoked, owner []common.Address) (event.Subscription, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Revoked", ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpRevoked) - if err := _StakingImp.contract.UnpackLog(event, "Revoked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRevoked is a log parse operation binding the contract event 0x713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4. -// -// Solidity: event Revoked(address indexed owner, uint256 amount) -func (_StakingImp *StakingImpFilterer) ParseRevoked(log types.Log) (*StakingImpRevoked, error) { - event := new(StakingImpRevoked) - if err := _StakingImp.contract.UnpackLog(event, "Revoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpSetRegistryIterator is returned from FilterSetRegistry and is used to iterate over the raw logs and unpacked data for SetRegistry events raised by the StakingImp contract. -type StakingImpSetRegistryIterator struct { - Event *StakingImpSetRegistry // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpSetRegistryIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpSetRegistry) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpSetRegistryIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpSetRegistryIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpSetRegistry represents a SetRegistry event raised by the StakingImp contract. -type StakingImpSetRegistry struct { - Addr common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetRegistry is a free log retrieval operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_StakingImp *StakingImpFilterer) FilterSetRegistry(opts *bind.FilterOpts, addr []common.Address) (*StakingImpSetRegistryIterator, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return &StakingImpSetRegistryIterator{contract: _StakingImp.contract, event: "SetRegistry", logs: logs, sub: sub}, nil -} - -// WatchSetRegistry is a free log subscription operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_StakingImp *StakingImpFilterer) WatchSetRegistry(opts *bind.WatchOpts, sink chan<- *StakingImpSetRegistry, addr []common.Address) (event.Subscription, error) { - - var addrRule []interface{} - for _, addrItem := range addr { - addrRule = append(addrRule, addrItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "SetRegistry", addrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpSetRegistry) - if err := _StakingImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetRegistry is a log parse operation binding the contract event 0x278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd. -// -// Solidity: event SetRegistry(address indexed addr) -func (_StakingImp *StakingImpFilterer) ParseSetRegistry(log types.Log) (*StakingImpSetRegistry, error) { - event := new(StakingImpSetRegistry) - if err := _StakingImp.contract.UnpackLog(event, "SetRegistry", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpStakedIterator is returned from FilterStaked and is used to iterate over the raw logs and unpacked data for Staked events raised by the StakingImp contract. -type StakingImpStakedIterator struct { - Event *StakingImpStaked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpStakedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpStaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpStaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpStakedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpStakedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpStaked represents a Staked event raised by the StakingImp contract. -type StakingImpStaked struct { - Payee common.Address - Amount *big.Int - Total *big.Int - Available *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStaked is a free log retrieval operation binding the contract event 0xb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed. -// -// Solidity: event Staked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) FilterStaked(opts *bind.FilterOpts, payee []common.Address) (*StakingImpStakedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Staked", payeeRule) - if err != nil { - return nil, err - } - return &StakingImpStakedIterator{contract: _StakingImp.contract, event: "Staked", logs: logs, sub: sub}, nil -} - -// WatchStaked is a free log subscription operation binding the contract event 0xb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed. -// -// Solidity: event Staked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) WatchStaked(opts *bind.WatchOpts, sink chan<- *StakingImpStaked, payee []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Staked", payeeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpStaked) - if err := _StakingImp.contract.UnpackLog(event, "Staked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStaked is a log parse operation binding the contract event 0xb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed. -// -// Solidity: event Staked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) ParseStaked(log types.Log) (*StakingImpStaked, error) { - event := new(StakingImpStaked) - if err := _StakingImp.contract.UnpackLog(event, "Staked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpTransferLockedIterator is returned from FilterTransferLocked and is used to iterate over the raw logs and unpacked data for TransferLocked events raised by the StakingImp contract. -type StakingImpTransferLockedIterator struct { - Event *StakingImpTransferLocked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpTransferLockedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpTransferLocked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpTransferLocked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpTransferLockedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpTransferLockedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpTransferLocked represents a TransferLocked event raised by the StakingImp contract. -type StakingImpTransferLocked struct { - Payee common.Address - Amount *big.Int - Total *big.Int - Available *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransferLocked is a free log retrieval operation binding the contract event 0x2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e24. -// -// Solidity: event TransferLocked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) FilterTransferLocked(opts *bind.FilterOpts, payee []common.Address) (*StakingImpTransferLockedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "TransferLocked", payeeRule) - if err != nil { - return nil, err - } - return &StakingImpTransferLockedIterator{contract: _StakingImp.contract, event: "TransferLocked", logs: logs, sub: sub}, nil -} - -// WatchTransferLocked is a free log subscription operation binding the contract event 0x2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e24. -// -// Solidity: event TransferLocked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) WatchTransferLocked(opts *bind.WatchOpts, sink chan<- *StakingImpTransferLocked, payee []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "TransferLocked", payeeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpTransferLocked) - if err := _StakingImp.contract.UnpackLog(event, "TransferLocked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransferLocked is a log parse operation binding the contract event 0x2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e24. -// -// Solidity: event TransferLocked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) ParseTransferLocked(log types.Log) (*StakingImpTransferLocked, error) { - event := new(StakingImpTransferLocked) - if err := _StakingImp.contract.UnpackLog(event, "TransferLocked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpUnlockedIterator is returned from FilterUnlocked and is used to iterate over the raw logs and unpacked data for Unlocked events raised by the StakingImp contract. -type StakingImpUnlockedIterator struct { - Event *StakingImpUnlocked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpUnlockedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpUnlocked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpUnlocked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpUnlockedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpUnlockedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpUnlocked represents a Unlocked event raised by the StakingImp contract. -type StakingImpUnlocked struct { - Payee common.Address - Amount *big.Int - Total *big.Int - Available *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnlocked is a free log retrieval operation binding the contract event 0x5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a8. -// -// Solidity: event Unlocked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) FilterUnlocked(opts *bind.FilterOpts, payee []common.Address) (*StakingImpUnlockedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Unlocked", payeeRule) - if err != nil { - return nil, err - } - return &StakingImpUnlockedIterator{contract: _StakingImp.contract, event: "Unlocked", logs: logs, sub: sub}, nil -} - -// WatchUnlocked is a free log subscription operation binding the contract event 0x5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a8. -// -// Solidity: event Unlocked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) WatchUnlocked(opts *bind.WatchOpts, sink chan<- *StakingImpUnlocked, payee []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Unlocked", payeeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpUnlocked) - if err := _StakingImp.contract.UnpackLog(event, "Unlocked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUnlocked is a log parse operation binding the contract event 0x5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a8. -// -// Solidity: event Unlocked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) ParseUnlocked(log types.Log) (*StakingImpUnlocked, error) { - event := new(StakingImpUnlocked) - if err := _StakingImp.contract.UnpackLog(event, "Unlocked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpUnstakedIterator is returned from FilterUnstaked and is used to iterate over the raw logs and unpacked data for Unstaked events raised by the StakingImp contract. -type StakingImpUnstakedIterator struct { - Event *StakingImpUnstaked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpUnstakedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpUnstaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpUnstaked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpUnstakedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpUnstakedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpUnstaked represents a Unstaked event raised by the StakingImp contract. -type StakingImpUnstaked struct { - Payee common.Address - Amount *big.Int - Total *big.Int - Available *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUnstaked is a free log retrieval operation binding the contract event 0x204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00. -// -// Solidity: event Unstaked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) FilterUnstaked(opts *bind.FilterOpts, payee []common.Address) (*StakingImpUnstakedIterator, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Unstaked", payeeRule) - if err != nil { - return nil, err - } - return &StakingImpUnstakedIterator{contract: _StakingImp.contract, event: "Unstaked", logs: logs, sub: sub}, nil -} - -// WatchUnstaked is a free log subscription operation binding the contract event 0x204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00. -// -// Solidity: event Unstaked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) WatchUnstaked(opts *bind.WatchOpts, sink chan<- *StakingImpUnstaked, payee []common.Address) (event.Subscription, error) { - - var payeeRule []interface{} - for _, payeeItem := range payee { - payeeRule = append(payeeRule, payeeItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Unstaked", payeeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpUnstaked) - if err := _StakingImp.contract.UnpackLog(event, "Unstaked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUnstaked is a log parse operation binding the contract event 0x204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00. -// -// Solidity: event Unstaked(address indexed payee, uint256 amount, uint256 total, uint256 available) -func (_StakingImp *StakingImpFilterer) ParseUnstaked(log types.Log) (*StakingImpUnstaked, error) { - event := new(StakingImpUnstaked) - if err := _StakingImp.contract.UnpackLog(event, "Unstaked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StakingImpUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the StakingImp contract. -type StakingImpUpgradedIterator struct { - Event *StakingImpUpgraded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *StakingImpUpgradedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(StakingImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(StakingImpUpgraded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *StakingImpUpgradedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StakingImpUpgradedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StakingImpUpgraded represents a Upgraded event raised by the StakingImp contract. -type StakingImpUpgraded struct { - Implementation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_StakingImp *StakingImpFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*StakingImpUpgradedIterator, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _StakingImp.contract.FilterLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return &StakingImpUpgradedIterator{contract: _StakingImp.contract, event: "Upgraded", logs: logs, sub: sub}, nil -} - -// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_StakingImp *StakingImpFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *StakingImpUpgraded, implementation []common.Address) (event.Subscription, error) { - - var implementationRule []interface{} - for _, implementationItem := range implementation { - implementationRule = append(implementationRule, implementationItem) - } - - logs, sub, err := _StakingImp.contract.WatchLogs(opts, "Upgraded", implementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(StakingImpUpgraded) - if err := _StakingImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. -// -// Solidity: event Upgraded(address indexed implementation) -func (_StakingImp *StakingImpFilterer) ParseUpgraded(log types.Log) (*StakingImpUpgraded, error) { - event := new(StakingImpUpgraded) - if err := _StakingImp.contract.UnpackLog(event, "Upgraded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/wemix/bind/structs.go b/wemix/bind/structs.go deleted file mode 100644 index 8a5039457007..000000000000 --- a/wemix/bind/structs.go +++ /dev/null @@ -1,473 +0,0 @@ -package gov - -import ( - "bytes" - "context" - "encoding/hex" - "fmt" - "math/big" - "reflect" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/wemix/metclient" - "github.com/pkg/errors" -) - -//go:generate go run ../governance-contract/contracts/abigen.go --root=../governance-contract/contracts - -var ( - magic = new(big.Int).SetBytes(hexutil.MustDecode("0x57656d6978205265676973747279")) -) - -type GovContracts struct { - Registry *Registry - Gov *Gov - GovImp *GovImp - Staking *Staking - StakingImp *StakingImp - BallotStorage *BallotStorage - BallotStorageImp *BallotStorageImp - EnvStorage *EnvStorage - EnvStorageImp *EnvStorageImp - NCPExit *NCPExit // not used; only used for deploying gov contracts - NCPExitImp *NCPExitImp // not used; only used for deploying gov contracts - address struct { - Registry common.Address - Gov common.Address - Staking common.Address - BallotStorage common.Address - EnvStorage common.Address - NCPExit common.Address - } -} - -func NewGovContracts(backend bind.ContractBackend, registry common.Address) (*GovContracts, error) { - ctx, cancel := context.WithCancel(context.TODO()) - defer cancel() - - gov := new(GovContracts) - - if contract, err := NewRegistry(registry, backend); err != nil { - return nil, err - } else { - gov.Registry, gov.address.Registry = contract, registry - } - var ( - err error - cfg = &uupsConfig{ - callOpts: &bind.CallOpts{Context: ctx}, - backend: backend, - registry: gov.Registry, - } - ) - - if gov.address.Gov, gov.Gov, gov.GovImp, err = newUUPSContracts(cfg, DOMAIN_Gov, NewGov, NewGovImp); err != nil { - return nil, errors.Wrap(err, DOMAIN_Gov) - } else if gov.address.Staking, gov.Staking, gov.StakingImp, err = newUUPSContracts(cfg, DOMAIN_Staking, NewStaking, NewStakingImp); err != nil { - return nil, errors.Wrap(err, DOMAIN_Staking) - } else if gov.address.BallotStorage, gov.BallotStorage, gov.BallotStorageImp, err = newUUPSContracts(cfg, DOMAIN_BallotStorage, NewBallotStorage, NewBallotStorageImp); err != nil { - return nil, errors.Wrap(err, DOMAIN_BallotStorage) - } else if gov.address.EnvStorage, gov.EnvStorage, gov.EnvStorageImp, err = newUUPSContracts(cfg, DOMAIN_EnvStorage, NewEnvStorage, NewEnvStorageImp); err != nil { - return nil, errors.Wrap(err, DOMAIN_EnvStorage) - } else { - // NCPExit and NCPExitImp are not loaded. It can be nil at the block that is gov contracts were deployed in - return gov, nil - } -} - -func DeployGovContracts(opts *bind.TransactOpts, backend iBackend, optionDomains map[string]common.Address) (*GovContracts, error) { - if opts.Context == nil { - ctx, cancel := context.WithCancel(context.Background()) - opts.Context = ctx - defer func() { cancel(); opts.Context = nil }() - } - - if optionDomains == nil { - optionDomains = make(map[string]common.Address) - } - - var ( - err error - - gov = new(GovContracts) - logger = log.New("func", "DeployGovContracts") - txPool = &txPool{backend: backend, logger: logger, opts: opts, txs: make([]*types.Transaction, 0)} - impAddress = struct { - Gov common.Address - Staking common.Address - BallotStorage common.Address - EnvStorage common.Address - NCPExit common.Address - }{} - ) - - // deploy registry - if address, tx, contract, err := DeployRegistry(opts, backend); err != nil { - return nil, errors.Wrap(err, REGISTRY) - } else { - logger.Info(fmt.Sprintf("Deploying Registry at %s...", address)) - txPool.AppendTx(tx, nil) - gov.address.Registry, gov.Registry = address, contract - } - - // deploy imps - logger.Info("Deploy Logic Contracts...") - if impAddress.Gov, err = deployLogic(txPool, DeployGovImp); err != nil { - return nil, errors.Wrap(err, GOV_IMP) - } else if impAddress.Staking, err = deployLogic(txPool, DeployStakingImp); err != nil { - return nil, errors.Wrap(err, STAKING_IMP) - } else if impAddress.BallotStorage, err = deployLogic(txPool, DeployBallotStorageImp); err != nil { - return nil, errors.Wrap(err, BALLOTSTORAGE_IMP) - } else if impAddress.EnvStorage, err = deployLogic(txPool, DeployEnvStorageImp); err != nil { - return nil, errors.Wrap(err, ENVSTORAGE_IMP) - } else if impAddress.NCPExit, err = deployLogic(txPool, DeployNCPExitImp); err != nil { - return nil, errors.Wrap(err, NCPEXIT_IMP) - } else if err = txPool.WaitMined(); err != nil { - return nil, err - } - - // deploy proxies - logger.Info("Deploy Governance Contracts...") - if gov.address.Gov, gov.Gov, err = deployProxy(txPool, impAddress.Gov, DeployGov); err != nil { - return nil, errors.Wrap(err, GOV) - } else if gov.address.Staking, gov.Staking, err = deployProxy(txPool, impAddress.Staking, DeployStaking); err != nil { - return nil, errors.Wrap(err, STAKING) - } else if gov.address.BallotStorage, gov.BallotStorage, err = deployProxy(txPool, impAddress.BallotStorage, DeployBallotStorage); err != nil { - return nil, errors.Wrap(err, BALLOTSTORAGE) - } else if gov.address.EnvStorage, gov.EnvStorage, err = deployProxy(txPool, impAddress.EnvStorage, DeployEnvStorage); err != nil { - return nil, errors.Wrap(err, ENVSTORAGE) - } else if gov.address.NCPExit, gov.NCPExit, err = deployProxy(txPool, impAddress.NCPExit, DeployNCPExit); err != nil { - return nil, errors.Wrap(err, NCPEXIT) - } else if err = txPool.WaitMined(); err != nil { - return nil, err - } else { - optionDomains[DOMAIN_Gov] = gov.address.Gov - optionDomains[DOMAIN_Staking] = gov.address.Staking - optionDomains[DOMAIN_BallotStorage] = gov.address.BallotStorage - optionDomains[DOMAIN_EnvStorage] = gov.address.EnvStorage - optionDomains[DOMAIN_NCPExit] = gov.address.NCPExit - } - - // setup registry - logger.Info("Setting Domains...") - for name, address := range optionDomains { - if err := txPool.AppendTx(gov.Registry.SetContractDomain(opts, metclient.ToBytes32(name), address)); err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("SetContractDomain(%s)", name)) - } - } - if err := txPool.WaitMined(); err != nil { - return nil, err - } - - // init impContracts - if gov.GovImp, err = NewGovImp(gov.address.Gov, backend); err != nil { - return nil, errors.Wrap(err, GOV_IMP) - } else if gov.StakingImp, err = NewStakingImp(gov.address.Staking, backend); err != nil { - return nil, errors.Wrap(err, STAKING_IMP) - } else if gov.BallotStorageImp, err = NewBallotStorageImp(gov.address.BallotStorage, backend); err != nil { - return nil, errors.Wrap(err, BALLOTSTORAGE_IMP) - } else if gov.EnvStorageImp, err = NewEnvStorageImp(gov.address.EnvStorage, backend); err != nil { - return nil, errors.Wrap(err, ENVSTORAGE_IMP) - } else if gov.NCPExitImp, err = NewNCPExitImp(gov.address.NCPExit, backend); err != nil { - return nil, errors.Wrap(err, NCPEXIT_IMP) - } else { - return gov, nil - } -} - -func ExecuteInitialize(gov *GovContracts, opts *bind.TransactOpts, backend iBackend, lockAmount *big.Int, envConfig InitEnvStorage, members InitMembers) error { - if lockAmount.Cmp(envConfig.STAKING_MIN) < 0 || lockAmount.Cmp(envConfig.STAKING_MAX) > 0 { - return fmt.Errorf("invalid lock amount, input:%v, min:%v, max:%v", lockAmount, envConfig.STAKING_MIN, envConfig.STAKING_MAX) - } - - var ( - registryAddress = gov.address.Registry - logger = log.New("func", "ExecuteInitialize") - txPool = &txPool{backend: backend, logger: logger, opts: opts, txs: make([]*types.Transaction, 0)} - ) - - logger.Info("Initializing Staking...") - if err := txPool.AppendTx(gov.StakingImp.Init(opts, registryAddress, members.StakingInit())); err != nil { - return errors.Wrap(err, "StakingImp.Init") - } - - logger.Info("Initializing BallotStorage...") - if err := txPool.AppendTx(gov.BallotStorageImp.Initialize(opts, registryAddress)); err != nil { - return errors.Wrap(err, "BallotStorageImp.Initialize") - } - - logger.Info("Initializing NCPExit...") - if err := txPool.AppendTx(gov.NCPExitImp.Initialize(opts, registryAddress)); err != nil { - return errors.Wrap(err, "NCPExitImp.Initialize") - } - - logger.Info("Initializing EnvStorage...") - envNames, envValues := envConfig.Args() - if err := txPool.AppendTx(gov.EnvStorageImp.Initialize(opts, registryAddress, envNames, envValues)); err != nil { - return errors.Wrap(err, "EnvStorageImp.Initialize") - } - if err := txPool.WaitMined(); err != nil { - return err - } - - logger.Info("Initializing Gov...") - if datas, err := members.GovInitOnce(); err != nil { - return errors.Wrap(err, "members.GovInitOnce") - } else if err := txPool.AppendTx(gov.GovImp.InitOnce(opts, registryAddress, lockAmount, datas)); err != nil { - return errors.Wrap(err, "GovImp.InitOnce") - } else { - return txPool.WaitMined() - } -} - -func (gov *GovContracts) Address() struct { - Registry common.Address - Gov common.Address - Staking common.Address - BallotStorage common.Address - EnvStorage common.Address - NCPExit common.Address -} { - return gov.address -} - -func (src *GovContracts) Equal(dst *GovContracts) bool { - return reflect.DeepEqual(src.address, dst.address) -} - -func GetGovContractsByOwner(opts *bind.CallOpts, backend bind.ContractBackend, owner common.Address) (*GovContracts, error) { - address, _, err := GetRegistryByOwner(opts, backend, owner) - if err != nil { - return nil, err - } - return NewGovContracts(backend, address) -} - -func GetRegistryByOwner(opts *bind.CallOpts, backend bind.ContractBackend, owner common.Address) (common.Address, *Registry, error) { - for i := uint64(0); i < 10; i++ { - address := crypto.CreateAddress(owner, i) - registry, err := GetRegistryByAddress(opts, backend, address) - if err == nil { - return address, registry, nil - } - } - return common.Address{}, nil, errors.Wrap(ethereum.NotFound, REGISTRY) -} - -func GetRegistryByAddress(opts *bind.CallOpts, backend bind.ContractBackend, address common.Address) (*Registry, error) { - if registry, err := NewRegistry(address, backend); err != nil { - return nil, err - } else if callMagic, err := registry.Magic(opts); err != nil { - return nil, err - } else if callMagic != nil && magic.Cmp(callMagic) == 0 { - return registry, nil - } else { - return nil, ethereum.NotFound - } -} - -// ////////////////////// -// InitEnvStorage // -// ////////////////////// - -type InitEnvStorage struct { - BLOCKS_PER *big.Int `name:"blocksPer"` - BALLOT_DURATION_MIN *big.Int `name:"ballotDurationMin"` - BALLOT_DURATION_MAX *big.Int `name:"ballotDurationMax"` - STAKING_MIN *big.Int `name:"stakingMin"` - STAKING_MAX *big.Int `name:"stakingMax"` - MAX_IDLE_BLOCK_INTERVAL *big.Int `name:"MaxIdleBlockInterval"` - BLOCK_CREATION_TIME *big.Int `name:"blockCreationTime"` - BLOCK_REWARD_AMOUNT *big.Int `name:"blockRewardAmount"` - MAX_PRIORITY_FEE_PER_GAS *big.Int `name:"maxPriorityFeePerGas"` - BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER *big.Int `name:"blockRewardDistributionBlockProducer"` - BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD *big.Int `name:"blockRewardDistributionStakingReward"` - BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM *big.Int `name:"blockRewardDistributionEcosystem"` - BLOCK_REWARD_DISTRIBUTION_MAINTENANCE *big.Int `name:"blockRewardDistributionMaintenance"` - MAX_BASE_FEE *big.Int `name:"maxBaseFee"` - BLOCK_GASLIMIT *big.Int `name:"blockGasLimit"` - BASE_FEE_MAX_CHANGE_RATE *big.Int `name:"baseFeeMaxChangeRate"` - GAS_TARGET_PERCENTAGE *big.Int `name:"gasTargetPercentage"` -} - -func (cfg InitEnvStorage) Args() (names [][32]byte, values []*big.Int) { - v := reflect.ValueOf(cfg) - t := reflect.TypeOf(cfg) - numField := v.NumField() - names = [][32]byte{} - values = []*big.Int{} - for i := 0; i < numField; i++ { - value, ok := v.Field(i).Interface().(*big.Int) - if ok && value != nil && value.Sign() > 0 { - tag := t.Field(i).Tag.Get("name") - names = append(names, crypto.Keccak256Hash([]byte(tag))) - values = append(values, value) - } - } - return -} - -var DefaultInitEnvStorage = InitEnvStorage{ - BLOCKS_PER: big.NewInt(1), - BALLOT_DURATION_MIN: big.NewInt(86400), - BALLOT_DURATION_MAX: big.NewInt(604800), - STAKING_MIN: new(big.Int).Mul(big.NewInt(1500000), big.NewInt(params.Ether)), - STAKING_MAX: new(big.Int).Sub(new(big.Int).Lsh(common.Big1, 256), common.Big1), // type(uint256).max - MAX_IDLE_BLOCK_INTERVAL: big.NewInt(5), - BLOCK_CREATION_TIME: big.NewInt(1000), - BLOCK_REWARD_AMOUNT: new(big.Int).Mul(big.NewInt(1), big.NewInt(params.Ether)), - MAX_PRIORITY_FEE_PER_GAS: new(big.Int).Mul(big.NewInt(100), big.NewInt(params.GWei)), - BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER: big.NewInt(5000), - BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD: big.NewInt(0), - BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM: big.NewInt(2500), - BLOCK_REWARD_DISTRIBUTION_MAINTENANCE: big.NewInt(2500), - MAX_BASE_FEE: new(big.Int).Mul(big.NewInt(5000), big.NewInt(params.GWei)), - BLOCK_GASLIMIT: big.NewInt(1050000000), - BASE_FEE_MAX_CHANGE_RATE: big.NewInt(46), - GAS_TARGET_PERCENTAGE: big.NewInt(30), -} - -// ///////////////////////// -// Init Governance Member // -// ///////////////////////// -type InitMember struct { - Staker common.Address `json:"staker"` - Voter common.Address `json:"voter"` - Reward common.Address `json:"reward"` - Name string `json:"name"` - Enode string `json:"enode"` - Ip string `json:"ip"` - Port int `json:"port"` - Deposit *big.Int `json:"deposit"` -} - -type InitMembers []InitMember - -func (members InitMembers) GovInitOnce() ([]byte, error) { - var datas bytes.Buffer - for _, m := range members { - var ( - staker, voter, reward *big.Int - id []byte - err error - ) - staker = new(big.Int).SetBytes(m.Staker[:]) - voter = new(big.Int).SetBytes(m.Voter[:]) - reward = new(big.Int).SetBytes(m.Reward[:]) - switch len(m.Enode) { - case 128: - id, err = hex.DecodeString(m.Enode) - case 130: - id, err = hex.DecodeString(m.Enode[2:]) - default: - err = fmt.Errorf("invalid enode id %s", m.Enode) - } - if err != nil { - return nil, err - } - - datas.Write(metclient.PackNum(reflect.ValueOf(staker))) - datas.Write(metclient.PackNum(reflect.ValueOf(voter))) - datas.Write(metclient.PackNum(reflect.ValueOf(reward))) - datas.Write(metclient.PackNum(reflect.ValueOf(len(m.Name)))) - datas.Write([]byte(m.Name)) - datas.Write(metclient.PackNum(reflect.ValueOf(len(id)))) - datas.Write(id) - datas.Write(metclient.PackNum(reflect.ValueOf(len(m.Ip)))) - datas.Write([]byte(m.Ip)) - datas.Write(metclient.PackNum(reflect.ValueOf(m.Port))) - } - - return datas.Bytes(), nil -} - -func (members InitMembers) StakingInit() []byte { - var datas bytes.Buffer - for _, m := range members { - staker := new(big.Int).SetBytes(m.Staker[:]) - datas.Write(metclient.PackNum(reflect.ValueOf(staker))) - datas.Write(metclient.PackNum(reflect.ValueOf(m.Deposit))) - } - return datas.Bytes() -} - -// //////// -// utils // -// //////// - -type uupsConfig struct { - backend bind.ContractBackend - callOpts *bind.CallOpts - registry *Registry -} - -func newUUPSContracts[P, L any]( - cfg *uupsConfig, - name string, - newProxy func(common.Address, bind.ContractBackend) (*P, error), - newLogic func(common.Address, bind.ContractBackend) (*L, error), -) (common.Address, *P, *L, error) { - if address, err := cfg.registry.GetContractAddress(cfg.callOpts, metclient.ToBytes32(name)); err != nil { - return common.Address{}, nil, nil, errors.Wrap(err, "GetContractAddress") - } else if proxy, err := newProxy(address, cfg.backend); err != nil { - return common.Address{}, nil, nil, errors.Wrap(err, "newProxy") - } else if imp, err := newLogic(address, cfg.backend); err != nil { - return common.Address{}, nil, nil, errors.Wrap(err, "newLogic") - } else { - return address, proxy, imp, nil - } -} - -type iBackend interface { - bind.ContractBackend - bind.DeployBackend -} - -type txPool struct { - backend iBackend - logger log.Logger - opts *bind.TransactOpts - txs []*types.Transaction -} - -func (pool *txPool) WaitMined() error { - pool.logger.Info("Waiting for receipts...", "count", len(pool.txs)) - - ctx, cancel := context.WithTimeout(context.Background(), 5e9) - defer cancel() - for _, tx := range pool.txs { - receipt, err := bind.WaitMined(ctx, pool.backend, tx) - if err != nil { - return err - } - if receipt.Status != types.ReceiptStatusSuccessful { - return errors.New("execute reverted") - } - } - pool.txs = pool.txs[:0] - return nil -} - -func (pool *txPool) AppendTx(tx *types.Transaction, err error) error { - if tx != nil { - pool.txs = append(pool.txs, tx) - } - return err -} - -func deployProxy[T any](pool *txPool, logic common.Address, deploy func(*bind.TransactOpts, bind.ContractBackend, common.Address) (common.Address, *types.Transaction, *T, error)) (common.Address, *T, error) { - address, tx, proxy, err := deploy(pool.opts, pool.backend, logic) - return address, proxy, pool.AppendTx(tx, err) -} - -func deployLogic[T any](pool *txPool, deploy func(*bind.TransactOpts, bind.ContractBackend) (common.Address, *types.Transaction, *T, error)) (common.Address, error) { - address, tx, _, err := deploy(pool.opts, pool.backend) - return address, pool.AppendTx(tx, err) -} diff --git a/wemix/contracts/WemixGovernance.js b/wemix/contracts/WemixGovernance.js new file mode 100644 index 000000000000..964906693af9 --- /dev/null +++ b/wemix/contracts/WemixGovernance.js @@ -0,0 +1,644 @@ +var Gov_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207465332dc618a2f5eb63fb7bbbf1a8bdc5122d00040dba21b4a8ec1e9ece14cc64736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var Gov_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_imp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); + +function Gov_new() { + return Gov_contract.new( + { + from: web3.eth.accounts[0], + data: Gov_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Gov_load(addr) { + return Gov_contract.at(addr); +} +var GovChecker_data = "0x608060405234801561001057600080fd5b5061044a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c5780638da5cb5b116100665780638da5cb5b146101b05780639986e4b9146101c1578063a91ee0dc146101d8578063f2fde38b146101eb57600080fd5b8063715018a614610167578063738fdd1a146101715780637bf465301461019c57600080fd5b80631e0cba0d146100d45780632f40992e146100f857806334125c841461010c5780634bd1ed761461011f5780635a731cca146101345780636c78d2cf1461014b575b600080fd5b6100e5665374616b696e6760c81b81565b6040519081526020015b60405180910390f35b6100e56914995dd85c99141bdbdb60b21b81565b6100e56845636f73797374656d60b81b81565b6100e56a4d61696e74656e616e636560a81b81565b6100e56c14dd185ada5b99d4995dd85c99609a1b81565b6100e57111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b61016f6101fe565b005b606554610184906001600160a01b031681565b6040516001600160a01b0390911681526020016100ef565b6100e569456e7653746f7261676560b01b81565b6033546001600160a01b0316610184565b6100e56c42616c6c6f7453746f7261676560981b81565b61016f6101e63660046103e4565b610212565b61016f6101f93660046103e4565b6102bf565b610206610338565b6102106000610392565b565b61021a610338565b6001600160a01b0381166102755760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064015b60405180910390fd5b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6102c7610338565b6001600160a01b03811661032c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161026c565b61033581610392565b50565b6033546001600160a01b031633146102105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161026c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156103f657600080fd5b81356001600160a01b038116811461040d57600080fd5b939250505056fea2646970667358221220b535bc527ced07912974506f7ab75828bfc3ac177e8912e3fd2555b419df60db64736f6c63430008060033"; +var GovChecker_contract = web3.eth.contract([{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]); + +function GovChecker_new() { + return GovChecker_contract.new( + { + from: web3.eth.accounts[0], + data: GovChecker_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function GovChecker_load(addr) { + return GovChecker_contract.at(addr); +} +var GovImp_data = "0x60a06040523060601b6080523480156200001857600080fd5b506200002362000029565b620000ea565b600054610100900460ff1615620000965760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e8576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c6177ba6200012560003960008181611dac01528181611dec015281816127380152818161277801526127f401526177ba6000f3fe6080604052600436106104515760003560e01c8063738fdd1a1161023f578063c00ace6c11610139578063d07bff0c116100b6578063e27bdaef1161007a578063e27bdaef14610f5d578063e75235b814610f7d578063e9523fb514610f92578063f2fde38b14610fa8578063f38ecf4714610fc857600080fd5b8063d07bff0c14610ec7578063d13a174414610efd578063d6f9cfce14610f1d578063d965ea0014610f33578063de09b37714610f4857600080fd5b8063c9d27afe116100fd578063c9d27afe14610e0f578063ce04b9d414610e2f578063ce6a54ff14610e44578063ce93a23614610e7a578063cec5b62214610e9a57600080fd5b8063c00ace6c14610d0b578063c0b4fe1514610d3f578063c42a0abc14610d73578063c6713baf14610da7578063c7d3da3414610ddb57600080fd5b8063a6868b7d116101c7578063aaf0dd361161018b578063aaf0dd3614610c3f578063ab3545e514610c6c578063af08557e14610ca2578063af6af2ff14610cc2578063b128f88014610cd757600080fd5b8063a6868b7d14610b5f578063a7771ee314610b93578063a8915a3e14610bcb578063a91ee0dc14610beb578063a9b629b214610c0b57600080fd5b80638da5cb5b1161020e5780638da5cb5b14610aba578063918f867414610ad85780639986e4b914610aee578063a0c1268314610b12578063a230c52414610b3f57600080fd5b8063738fdd1a14610a2f5780637b2bfb0114610a4f5780637bf4653014610a835780637d10dd1b14610aa457600080fd5b80633f35c8fe116103505780636167eb45116102d85780636f1e85331161029c5780636f1e8533146109795780636f6de96d146109b15780636fde207a146109d1578063715018a614610a0557806372016f7514610a1a57600080fd5b80636167eb451461089f578063656e3052146108d35780636ba99181146109075780636c78d2cf1461091c5780636d583ca71461094557600080fd5b80634f0f4aa91161031f5780634f0f4aa91461080e5780634f1ef2861461083e57806352d1902d146108515780635a731cca146108665780635aaa40401461088a57600080fd5b80633f35c8fe1461076457806340690353146107985780634bd1ed76146107b85780634d273e28146107da57600080fd5b80631e0cba0d116103de57806334125c84116103a257806334125c84146106b0578063351bacda146106d05780633659cfe6146106f057806336e83d8314610710578063382944191461073057600080fd5b80631e0cba0d146105f3578063238737b614610611578063278bb12a146106455780632f40992e146106795780633310569c1461069a57600080fd5b806315bf6b4d1161042557806315bf6b4d1461051e57806316fbe8311461056c5780631c12b030146105835780631c150171146105a85780631c4b774b146105bd57600080fd5b806215a73b146104565780630b1d39b81461049d5780630efa4909146104d1578063139d9dd3146104f1575b600080fd5b34801561046257600080fd5b5061048a7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b6040519081526020015b60405180910390f35b3480156104a957600080fd5b5061048a7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b3480156104dd57600080fd5b5061048a6104ec366004616ab6565b610ffc565b3480156104fd57600080fd5b5061048a61050c36600461694f565b60a86020526000908152604090205481565b34801561052a57600080fd5b50610554610539366004616ea5565b6000908152607060205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610494565b34801561057857600080fd5b50610581611346565b005b34801561058f57600080fd5b50610598611685565b6040519015158152602001610494565b3480156105b457600080fd5b5061048a6116d6565b3480156105c957600080fd5b506105546105d8366004616ea5565b6000908152606a60205260409020546001600160a01b031690565b3480156105ff57600080fd5b5061048a665374616b696e6760c81b81565b34801561061d57600080fd5b5061048a7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561065157600080fd5b5061048a7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b34801561068557600080fd5b5061048a6914995dd85c99141bdbdb60b21b81565b3480156106a657600080fd5b5061048a60a75481565b3480156106bc57600080fd5b5061048a6845636f73797374656d60b81b81565b3480156106dc57600080fd5b506105816106eb366004616b0e565b611755565b3480156106fc57600080fd5b5061058161070b36600461694f565b611da1565b34801561071c57600080fd5b5061048a61072b366004616e20565b611e87565b34801561073c57600080fd5b5061048a7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b34801561077057600080fd5b5061048a7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b3480156107a457600080fd5b5061048a6107b3366004616da2565b61229e565b3480156107c457600080fd5b5061048a6a4d61696e74656e616e636560a81b81565b3480156107e657600080fd5b5061048a7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b34801561081a57600080fd5b5061082e610829366004616ea5565b612550565b60405161049494939291906170b4565b61058161084c366004616a67565b61272d565b34801561085d57600080fd5b5061048a6127e7565b34801561087257600080fd5b5061048a6c14dd185ada5b99d4995dd85c99609a1b81565b34801561089657600080fd5b5061048a61289a565b3480156108ab57600080fd5b5061048a7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b3480156108df57600080fd5b5061048a7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b34801561091357600080fd5b506105816128dc565b34801561092857600080fd5b5061048a7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b34801561095157600080fd5b5061048a7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b34801561098557600080fd5b5061059861099436600461694f565b6001600160a01b03166000908152606d6020526040902054151590565b3480156109bd57600080fd5b506105546109cc36600461694f565b6129d9565b3480156109dd57600080fd5b5061048a7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b348015610a1157600080fd5b50610581612a48565b348015610a2657600080fd5b5060715461048a565b348015610a3b57600080fd5b50606554610554906001600160a01b031681565b348015610a5b57600080fd5b5061048a7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610a8f57600080fd5b5061048a69456e7653746f7261676560b01b81565b348015610ab057600080fd5b5061048a60665481565b348015610ac657600080fd5b506033546001600160a01b0316610554565b348015610ae457600080fd5b5061048a61271081565b348015610afa57600080fd5b5061048a6c42616c6c6f7453746f7261676560981b81565b348015610b1e57600080fd5b5061048a610b2d36600461694f565b606d6020526000908152604090205481565b348015610b4b57600080fd5b50610598610b5a36600461694f565b612a5c565b348015610b6b57600080fd5b5061048a7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b348015610b9f57600080fd5b50610598610bae36600461694f565b6001600160a01b0316600090815260686020526040902054151590565b348015610bd757600080fd5b50610581610be6366004616b66565b612a9f565b348015610bf757600080fd5b50610581610c0636600461694f565b612f0f565b348015610c1757600080fd5b5061048a7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b348015610c4b57600080fd5b5061048a610c5a36600461694f565b606b6020526000908152604090205481565b348015610c7857600080fd5b50610554610c87366004616ea5565b6000908152606c60205260409020546001600160a01b031690565b348015610cae57600080fd5b50610581610cbd366004616c72565b612fb7565b348015610cce57600080fd5b5061048a61322a565b348015610ce357600080fd5b5061048a7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b348015610d1757600080fd5b5061048a7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b348015610d4b57600080fd5b5061048a7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b348015610d7f57600080fd5b5061048a7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b348015610db357600080fd5b5061048a7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b348015610de757600080fd5b5061048a7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b348015610e1b57600080fd5b50610581610e2a366004616ebe565b61326c565b348015610e3b57600080fd5b5061048a613422565b348015610e5057600080fd5b5061048a610e5f36600461694f565b6001600160a01b03166000908152606f602052604090205490565b348015610e8657600080fd5b5061048a610e95366004616e54565b613464565b348015610ea657600080fd5b5061048a610eb536600461694f565b60686020526000908152604090205481565b348015610ed357600080fd5b50610554610ee2366004616ea5565b6000908152606760205260409020546001600160a01b031690565b348015610f0957600080fd5b5061048a610f18366004616c12565b61390b565b348015610f2957600080fd5b5061048a60725481565b348015610f3f57600080fd5b5060695461048a565b348015610f5457600080fd5b5060745461048a565b348015610f6957600080fd5b50610581610f78366004616ea5565b613c6b565b348015610f8957600080fd5b5061138961048a565b348015610f9e57600080fd5b5061048a60735481565b348015610fb457600080fd5b50610581610fc336600461694f565b613cf1565b348015610fd457600080fd5b5061048a7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f81565b6000611006613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561104757600080fd5b505afa15801561105b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107f9190616d27565b6110a45760405162461bcd60e51b815260040161109b90617288565b60405180910390fd5b60006110af336129d9565b90506110b961289a565b6110c282613d87565b111580156110df57506110d361322a565b6110dc82613d87565b10155b6110fb5760405162461bcd60e51b815260040161109b9061739b565b6001600160a01b0385166111515760405162461bcd60e51b815260206004820152601d60248201527f496d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640161109b565b611159613e0d565b6001600160a01b0316856001600160a01b031614156111b25760405162461bcd60e51b815260206004820152601560248201527453616d6520636f6e7472616374206164647265737360581b604482015260640161109b565b846001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111eb57600080fd5b505afa92505050801561121b575060408051601f3d908101601f1916820190925261121891810190616d44565b60015b6112375760405162461bcd60e51b815260040161109b906172dd565b6000805160206176fe83398151915281146112645760405162461bcd60e51b815260040161109b906171f1565b506072546112739060016175e0565b915061127d613e29565b6001600160a01b0316630a3a63fe607254600161129a91906175e0565b60046040516001600160e01b031960e085901b16815260048101929092526024820152604481018690523360648201526001600160a01b038816608482015260a401602060405180830381600087803b1580156112f657600080fd5b505af115801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190616d44565b506113398285613e44565b5060728190559392505050565b600054600290610100900460ff16158015611368575060005460ff8083169116105b6113845760405162461bcd60e51b815260040161109b9061723a565b6000805461ffff191660ff8316176101001790556113a0613eaf565b60005b606954811015611651576000818152606e60205260408082208151608081019092528054829082906113d49061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546114009061765d565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b505050505081526020016001820180546114669061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546114929061765d565b80156114df5780601f106114b4576101008083540402835291602001916114df565b820191906000526020600020905b8154815290600101906020018083116114c257829003601f168201915b505050505081526020016002820180546114f89061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546115249061765d565b80156115715780601f1061154657610100808354040283529160200191611571565b820191906000526020600020905b81548152906001019060200180831161155457829003601f168201915b505050505081526020016003820154815250509050600160a9826000015160405161159c9190617010565b90815260405160209181900382018120805460ff19169315159390931790925582015160019160aa916115ce91617010565b908152602001604051809103902060006101000a81548160ff021916908315150217905550600160ab60008360400151846060015160405160200161161492919061702c565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff1916911515919091179055506001016113a3565b506000805461ff001916905560405160ff8216815260008051602061771e833981519152906020015b60405180910390a150565b60006074546000146116d057600061169e607454613f09565b5091505060006116af607454613fa0565b5091505060028214156116cd57428110156116cd5760009250505090565b50505b50600190565b60006116e061402a565b6001600160a01b03166333be496e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561171857600080fd5b505afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117509190616d44565b905090565b600054610100900460ff16158080156117755750600054600160ff909116105b8061178f5750303b15801561178f575060005460ff166001145b6117ab5760405162461bcd60e51b815260040161109b9061723a565b6000805460ff1916600117905580156117ce576000805461ff0019166101001790555b6117d6614042565b6117de614071565b6117e784612f0f565b4360665560006117f56140a0565b90506117ff61322a565b841015801561181557508361181261289a565b10155b6118315760405162461bcd60e51b815260040161109b9061732b565b600080600060608060606000806000905060008060208d0191508c518261185891906175e0565b90505b80821015611d5357815199506118726020836175e0565b915080821061188057600080fd5b8151985061188f6020836175e0565b915080821061189d57600080fd5b815197506118ac6020836175e0565b91508082106118ba57600080fd5b819650865160206118cb91906175e0565b6118d590836175e0565b91508082106118e357600080fd5b819550855160206118f491906175e0565b6118fe90836175e0565b915080821061190c57600080fd5b8194508451602061191d91906175e0565b61192790836175e0565b915080821061193557600080fd5b815193506119446020836175e0565b91506119516001846175e0565b925061195c8a612a5c565b15801561196f575061196d89612a5c565b155b6119ac5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b604482015260640161109b565b886067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555087606a600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606b60008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555089606c600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606d60008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055508d8b6001600160a01b03166325d998bb8c6040518263ffffffff1660e01b8152600401611b0e91906001600160a01b0391909116815260200190565b60206040518083038186803b158015611b2657600080fd5b505afa158015611b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5e9190616d44565b1015611ba35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b604482015260640161109b565b611baf878787876140b5565b611bcb5760405162461bcd60e51b815260040161109b906172af565b611bd58a8f614164565b6000838152606e6020908152604090912088519091611bf89183918b01906165d0565b508651611c0e90600183019060208a01906165d0565b508551611c2490600283019060208901906165d0565b50848160030181905550600160a989604051611c409190617010565b908152604051908190036020018120805492151560ff199093169290921790915560019060aa90611c72908a90617010565b908152602001604051809103902060006101000a81548160ff021916908315150217905550600160ab60008888604051602001611cb092919061702c565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6070600086815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083606f60008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055505061185b565b50506069819055607155505086159550611d9b945050505050576000805461ff00191690556040516001815260008051602061771e8339815191529060200160405180910390a15b50505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611dea5760405162461bcd60e51b815260040161109b90617112565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e1c613e0d565b6001600160a01b031614611e425760405162461bcd60e51b815260040161109b906171a5565b611e4b816141a3565b611e848160005b6040519080825280601f01601f191660200182016040528015611e7c576020820181803683370190505b506000614240565b50565b6000611e91613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015611ed257600080fd5b505afa158015611ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0a9190616d27565b611f265760405162461bcd60e51b815260040161109b90617288565b6000611f31336129d9565b60a7546001600160a01b038216600090815260a8602052604090205491925090611f5b904261761a565b1015611f795760405162461bcd60e51b815260040161109b9061741d565b6000611f84336129d9565b9050611f8e61289a565b611f9782613d87565b11158015611fb45750611fa861322a565b611fb182613d87565b10155b611fd05760405162461bcd60e51b815260040161109b9061739b565b602084015184906001600160a01b031661201c5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b604482015260640161109b565b6000816060015151116120655760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b604482015260640161109b565b60008160a0015151116120ac5760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b604482015260640161109b565b60008160c00151116120f45760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b604482015260640161109b565b6120fc61322a565b8160e001511015801561211a575061211261289a565b8160e0015111155b61215c5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b604482015260640161109b565b845161216790612a5c565b156121a55760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b604482015260640161109b565b84602001516001600160a01b031685600001516001600160a01b0316146122045760405162461bcd60e51b815260206004820152601360248201527229ba30b5b2b91034b9903737ba103b37ba32b960691b604482015260640161109b565b612220856060015186608001518760a001518860c001516140b5565b61223c5760405162461bcd60e51b815260040161109b906172af565b60725461224a9060016175e0565b935061225b84600133600089614336565b612269848660e001516143d9565b61227884866101000151613e44565b505060728290556001600160a01b0316600090815260a860205260409020429055919050565b60006122a8613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156122e957600080fd5b505afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190616d27565b61233d5760405162461bcd60e51b815260040161109b90617288565b6000612348336129d9565b60a7546001600160a01b038216600090815260a8602052604090205491925090612372904261761a565b10156123905760405162461bcd60e51b815260040161109b9061741d565b600061239b336129d9565b90506123a561289a565b6123ae82613d87565b111580156123cb57506123bf61322a565b6123c882613d87565b10155b6123e75760405162461bcd60e51b815260040161109b9061739b565b866001111580156123f9575060098711155b6124345760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207479706560a01b604482015260640161109b565b61243e8887614417565b61247a5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b604482015260640161109b565b6072546124889060016175e0565b9250612492613e29565b6001600160a01b0316634a57823e84600587338d8d8d6040518863ffffffff1660e01b81526004016124ca97969594939291906174f1565b602060405180830381600087803b1580156124e457600080fd5b505af11580156124f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251c9190616d44565b506125278386613e44565b5060728290556001600160a01b0316600090815260a86020526040902042905595945050505050565b6000818152606e60205260408120600381015481546060938493849391929091600183019160028401919084906125869061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546125b29061765d565b80156125ff5780601f106125d4576101008083540402835291602001916125ff565b820191906000526020600020905b8154815290600101906020018083116125e257829003601f168201915b505050505093508280546126129061765d565b80601f016020809104026020016040519081016040528092919081815260200182805461263e9061765d565b801561268b5780601f106126605761010080835404028352916020019161268b565b820191906000526020600020905b81548152906001019060200180831161266e57829003601f168201915b5050505050925081805461269e9061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546126ca9061765d565b80156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b5050505050915093509350935093509193509193565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156127765760405162461bcd60e51b815260040161109b90617112565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127a8613e0d565b6001600160a01b0316146127ce5760405162461bcd60e51b815260040161109b906171a5565b6127d7826141a3565b6127e382826001614240565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128875760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161109b565b506000805160206176fe83398151915290565b60006128a461402a565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561171857600080fd5b6128e4613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561292557600080fd5b505afa158015612939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295d9190616d27565b6129795760405162461bcd60e51b815260040161109b90617288565b612981611685565b156129c45760405162461bcd60e51b8152602060048201526013602482015272159bdd1a5b99c81a5cc81b9bdd08195b991959606a1b604482015260640161109b565b6074546129d29060046144a5565b6000607455565b6001600160a01b0381166000908152606d6020526040812054156129fb575090565b6001600160a01b03821660009081526068602052604090205415612a4357506001600160a01b038082166000908152606860209081526040808320548352606c909152902054165b919050565b612a50613eaf565b612a5a60006144e3565b565b6001600160a01b0381166000908152606d6020526040812054151580612a9957506001600160a01b03821660009081526068602052604090205415155b92915050565b600054610100900460ff1615808015612abf5750600054600160ff909116105b80612ad95750303b158015612ad9575060005460ff166001145b612af55760405162461bcd60e51b815260040161109b9061723a565b6000805460ff191660011790558015612b18576000805461ff0019166101001790555b60008611612b745760405162461bcd60e51b815260206004820152602360248201527f6c6f636b416d6f756e742073686f756c64206265206d6f7265207468656e207a60448201526265726f60e81b606482015260840161109b565b612b7c614042565b612b84614071565b612b8d87612f0f565b6000612b976140a0565b6040516325d998bb60e01b815233600482015290915087906001600160a01b038316906325d998bb9060240160206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c139190616d44565b1015612c585760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b604482015260640161109b565b60405163282d3fdf60e01b8152336004820152602481018890526001600160a01b0382169063282d3fdf90604401600060405180830381600087803b158015612ca057600080fd5b505af1158015612cb4573d6000803e3d6000fd5b5050600160698190557f6bee784efeb983674392298ab585b22866bedf00ebb0eea949d1e66f3f50e71d8054336001600160a01b0319918216811790925560008281526068602090815260408083208690557ff585789965ba69220d5ce3dc1b444eb22ff546f2650694fef8fafe9c26560af98054851686179055606b82528083208690557fdcf345d7f6a8deb7427d0fee62009fa15100353a1c666b51bb5387b25addcfa98054909416909417909255606d82529182208390556071839055919052606e815288517f44e4f44bb0aae4b5d1e07207f82567d4201c1d09f6b5859dddcfb50647f55a709350612daf925083918a01906165d0565b508551612dc590600183019060208901906165d0565b508451612ddb90600283019060208801906165d0565b50838160030181905550600160a988604051612df79190617010565b908152604051908190036020018120805492151560ff199093169290921790915560019060aa90612e29908990617010565b908152602001604051809103902060006101000a81548160ff021916908315150217905550600160ab60008787604051602001612e6792919061702c565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff19169415159490941790935560715433808552606f83528385208290559084526070909152912080546001600160a01b03191690911790555050436066558015612f06576000805461ff00191690556040516001815260008051602061771e8339815191529060200160405180910390a15b50505050505050565b612f17613eaf565b6001600160a01b038116612f6d5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f000000000000604482015260640161109b565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b600054600390610100900460ff16158015612fd9575060005460ff8083169116105b612ff55760405162461bcd60e51b815260040161109b9061723a565b6000805461ffff191660ff831617610100179055613011613eaf565b60005b83518110156130a8576000818152606a602052604081205484516001600160a01b03909116919085906000198501908110613051576130516176ae565b6020908102919091018101516000858152606a8352604080822080546001600160a01b0319166001600160a01b039485169081179091558252606b9093528281208690559316835282209190915550600101613014565b506028600052606e60205260405160019060a9906130e7907f04079abe36e73820234ca7dbf98752b8db3cab495520d93e9301720bfccf3f4f9061704e565b90815260405160209181900382018120805460ff1916931515939093179092556028600052606e905260019060aa90613141907f04079abe36e73820234ca7dbf98752b8db3cab495520d93e9301720bfccf3f509061704e565b90815260405160209181900382018120805460ff19169315159390931790925560286000908152606e82527f04079abe36e73820234ca7dbf98752b8db3cab495520d93e9301720bfccf3f525460019360ab936131c2927f04079abe36e73820234ca7dbf98752b8db3cab495520d93e9301720bfccf3f519290910161705a565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355825461ff0019169092555160ff8316815260008051602061771e833981519152910160405180910390a1505050565b600061323461402a565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561171857600080fd5b613274613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156132b557600080fd5b505afa1580156132c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ed9190616d27565b6133095760405162461bcd60e51b815260040161109b90617288565b613311614535565b600061331c336129d9565b905061332661289a565b61332f82613d87565b1115801561334c575061334061322a565b61334982613d87565b10155b6133685760405162461bcd60e51b815260040161109b9061739b565b613370611685565b6133a65760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161109b565b60006133b18461458f565b90506133bd84846146a4565b6000806133c98661477e565b925092505060006133d961138990565b905080831015806133ea5750808210155b806133ff57506133fa82846175e0565b612710145b1561341357613413878584861160006147b8565b50505050506127e36001607555565b600061342c61402a565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561171857600080fd5b600061346e613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156134af57600080fd5b505afa1580156134c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e79190616d27565b6135035760405162461bcd60e51b815260040161109b90617288565b600061350e336129d9565b60a7546001600160a01b038216600090815260a8602052604090205491925090613538904261761a565b10156135565760405162461bcd60e51b815260040161109b9061741d565b6000613561336129d9565b905061356b61289a565b61357482613d87565b11158015613591575061358561322a565b61358e82613d87565b10155b6135ad5760405162461bcd60e51b815260040161109b9061739b565b602085015185906001600160a01b03166135f95760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b604482015260640161109b565b6000816060015151116136425760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b604482015260640161109b565b60008160a0015151116136895760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b604482015260640161109b565b60008160c00151116136d15760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b604482015260640161109b565b6136d961322a565b8160e00151101580156136f757506136ef61289a565b8160e0015111155b6137395760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b604482015260640161109b565b6001600160a01b0385166137855760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f6c64204164647265737360681b604482015260640161109b565b61378e85612a5c565b6137c75760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b604482015260640161109b565b6020808701516001600160a01b038781166000908152606d845260408082205482526067909452929092205482169116148061380d575061380b8660200151612a5c565b155b61384b5760405162461bcd60e51b815260206004820152600f60248201526e20b63932b0b23c9030903b37ba32b960891b604482015260640161109b565b6072546138599060016175e0565b935061386984600333888a614336565b613877848760e001516143d9565b61388684876101000151613e44565b6072849055336001600160a01b0386161480156138af575085516001600160a01b038681169116145b156138e95760006138bf85613fa0565b925050506138d9854283426138d491906175e0565b61484e565b6138e78560036001806147b8565b505b50506001600160a01b0316600090815260a86020526040902042905592915050565b6000613915613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561395657600080fd5b505afa15801561396a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398e9190616d27565b6139aa5760405162461bcd60e51b815260040161109b90617288565b60006139b5336129d9565b60a7546001600160a01b038216600090815260a86020526040902054919250906139df904261761a565b10156139fd5760405162461bcd60e51b815260040161109b9061741d565b6000613a08336129d9565b9050613a1261289a565b613a1b82613d87565b11158015613a385750613a2c61322a565b613a3582613d87565b10155b613a545760405162461bcd60e51b815260040161109b9061739b565b6001600160a01b038716613a9c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161109b565b613aa587612a5c565b613ade5760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b604482015260640161109b565b6001613ae960695490565b11613b365760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f7665206120736f6c65206d656d6265720000000000604482015260640161109b565b85613b4088613d87565b1015613ba15760405162461bcd60e51b815260206004820152602a60248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015269103ab73637b1b5b2b21760b11b606482015260840161109b565b607254613baf9060016175e0565b604080516101408101825260008082526020808301829052828401829052835182815280820185526060840152835182815280820185526080840152835182815290810190935260a082019290925260c081019190915260e0810188905261010081018790526101208101869052909350613c2e846002338b85614336565b613c3884886143d9565b613c428487613e44565b505060728290556001600160a01b0316600090815260a860205260409020429055949350505050565b613c73613eaf565b610e108110613cbc5760405162461bcd60e51b81526020600482015260156024820152746e6577506572696f6420697320746f6f206c6f6e6760581b604482015260640161109b565b60a78190556040518181527f17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f9060200161167a565b613cf9613eaf565b6001600160a01b038116613d5e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161109b565b611e84816144e3565b60006117507111dbdd995c9b985b98d950dbdb9d1c9858dd60721b6148bc565b6000613d916140a0565b604051632c9aab9b60e11b81526001600160a01b03848116600483015291909116906359355736906024015b60206040518083038186803b158015613dd557600080fd5b505afa158015613de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a999190616d44565b6000805160206176fe833981519152546001600160a01b031690565b60006117506c42616c6c6f7453746f7261676560981b6148bc565b613e4c613e29565b6001600160a01b031663bce0dbc183836040518363ffffffff1660e01b8152600401613e79929190617073565b600060405180830381600087803b158015613e9357600080fd5b505af1158015613ea7573d6000803e3d6000fd5b505050505050565b6033546001600160a01b03163314612a5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161109b565b6000806000613f16613e29565b6001600160a01b031663688ca5b2856040518263ffffffff1660e01b8152600401613f4391815260200190565b60606040518083038186803b158015613f5b57600080fd5b505afa158015613f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f939190616ee3565b9250925092509193909250565b6000806000613fad613e29565b6001600160a01b03166309970688856040518263ffffffff1660e01b8152600401613fda91815260200190565b60606040518083038186803b158015613ff257600080fd5b505afa158015614006573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f939190616f1c565b600061175069456e7653746f7261676560b01b6148bc565b600054610100900460ff166140695760405162461bcd60e51b815260040161109b906173d2565b612a5a614939565b600054610100900460ff166140985760405162461bcd60e51b815260040161109b906173d2565b612a5a614960565b6000611750665374616b696e6760c81b6148bc565b60405160019060aa906140c9908690617010565b9081526040519081900360200190205460ff16156140e5575060005b60a9856040516140f59190617010565b9081526040519081900360200190205460ff1615614111575060005b6000838360405160200161412692919061702c565b60408051601f198184030181529181528151602092830120600081815260ab90935291205490915060ff161561415b57600091505b50949350505050565b61416c6140a0565b60405163282d3fdf60e01b81526001600160a01b03848116600483015260248201849052919091169063282d3fdf90604401613e79565b6141ab613d67565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156141ec57600080fd5b505afa158015614200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142249190616d27565b611e845760405162461bcd60e51b815260040161109b90617288565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156142785761427383614990565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b157600080fd5b505afa9250505080156142e1575060408051601f3d908101601f191682019092526142de91810190616d44565b60015b6142fd5760405162461bcd60e51b815260040161109b906172dd565b6000805160206176fe833981519152811461432a5760405162461bcd60e51b815260040161109b906171f1565b50614273838383614a2c565b61433e613e29565b6001600160a01b031663daacbb95868684610120015187878760000151886020015189604001518a606001518b608001518c60a001518d60c001516040518d63ffffffff1660e01b81526004016143a09c9b9a99989796959493929190617454565b600060405180830381600087803b1580156143ba57600080fd5b505af11580156143ce573d6000803e3d6000fd5b505050505050505050565b6143e1613e29565b604051633968764960e11b815260048101849052602481018390526001600160a01b0391909116906372d0ec9290604401613e79565b600061442161402a565b6001600160a01b0316639801bff984846040518363ffffffff1660e01b815260040161444e929190617073565b60206040518083038186803b15801561446657600080fd5b505afa15801561447a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061449e9190616d27565b9392505050565b6144ad613e29565b60405163548f2cdd60e11b815260048101849052602481018390526001600160a01b03919091169063a91e59ba90604401613e79565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260755414156145885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161109b565b6002607555565b600080600061459d84613f09565b509092509050600181141561463c57607454156145cc5760405162461bcd60e51b815260040161109b90617358565b60006145d785613fa0565b925050506145e36116d6565b8110156146065761460185426145f76116d6565b6138d490426175e0565b614631565b8061460f613422565b10156146225761460185426145f7613422565b61463185426138d484826175e0565b50607484905561469d565b600281141561466b5760745484146146665760405162461bcd60e51b815260040161109b90617358565b61469d565b60405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161109b565b5092915050565b600060735460016146b591906175e0565b905060006146c2336129d9565b905060006146cf60695490565b6146db906127106175f8565b90506000846146eb5760026146ee565b60015b90506146f8613e29565b6040516325918ae760e21b815260048101869052602481018890526001600160a01b038581166044830152606482018490526084820185905291909116906396462b9c9060a401600060405180830381600087803b15801561475957600080fd5b505af115801561476d573d6000803e3d6000fd5b505050607394909455505050505050565b600080600061478b613e29565b6001600160a01b03166356ba988e856040518263ffffffff1660e01b8152600401613fda91815260200190565b6004821561482b5750600360018414156147e2576147d585614a51565b6147dd575060045b61482b565b60028414156147f4576147dd85614f15565b6003841415614807576147d58583615459565b6004841415614819576147dd85615db6565b600584141561482b5761482b85615e75565b61483585826144a5565b816148405760006074555b5050505050565b6001607555565b614856613e29565b60405163605b78c360e11b81526004810185905260248101849052604481018390526001600160a01b03919091169063c0b6f18690606401600060405180830381600087803b1580156148a857600080fd5b505af1158015612f06573d6000803e3d6000fd5b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b15801561490157600080fd5b505afa158015614915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a99919061696c565b600054610100900460ff166148475760405162461bcd60e51b815260040161109b906173d2565b600054610100900460ff166149875760405162461bcd60e51b815260040161109b906173d2565b612a5a336144e3565b6001600160a01b0381163b6149fd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161109b565b6000805160206176fe83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b614a3583615fc8565b600082511180614a425750805b1561427357611d9b8383616008565b6000614a5e82600161602d565b600080600080600080600080614a738a616134565b9850985098509850985098509850985050614a8d88612a5c565b15614aeb578960008051602061773e833981519152604051614ad39060208082526010908201526f20b63932b0b23c90309036b2b6b132b960811b604082015260600190565b60405180910390a25060009998505050505050505050565b614af361322a565b811080614b06575080614b0461289a565b105b15614b27578960008051602061773e833981519152604051614ad39061732b565b80614b31896161ea565b1015614b53578960008051602061773e833981519152604051614ad39061715e565b866001600160a01b0316886001600160a01b031614158015614b875750856001600160a01b0316886001600160a01b031614155b15614bd3578960008051602061773e833981519152604051614ad390602080825260169082015275496e76616c6964206d656d626572206164647265737360501b604082015260600190565b614bdd8882614164565b60006069546001614bee91906175e0565b9050876067600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606860008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555086606a600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606b6000896001600160a01b03166001600160a01b031681526020019081526020016000208190555088606c600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606d60008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060006071546001614d2791906175e0565b6000818152606e60209081526040909120895192935091614d4d918391908b01906165d0565b508651614d6390600183019060208a01906165d0565b508551614d7990600283019060208901906165d0565b50848160030181905550600160a989604051614d959190617010565b908152604051908190036020018120805492151560ff199093169290921790915560019060aa90614dc7908a90617010565b908152602001604051809103902060006101000a81548160ff021916908315150217905550600160ab60008888604051602001614e0592919061702c565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6070600084815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081606f60008d6001600160a01b03166001600160a01b031681526020019081526020016000208190555087816000019080519060200190614eba9291906165d0565b5060698390556071829055436066556040516001600160a01b03808c1691908d16907f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba690600090a35060019c9b505050505050505050505050565b614f2081600261602d565b600080614f2c83616134565b9850505050505050509150614f4082612a5c565b614f96578260008051602061773e833981519152604051614f89906020808252601490820152732737ba1030b63932b0b23c90309036b2b6b132b960611b604082015260600190565b60405180910390a2505050565b6001600160a01b038083166000818152606d6020818152604080842054606954808652606c8452828620548287526067855283872054606a865293872054979096529390925290949283169390831692169084146150fe57606980546000908152606c6020818152604080842080546001600160a01b038d8116808852606d80875285892080549e8a529787528589209087529b821688528488209c909c559486905581546001600160a01b03199081169092558954821690851617909855888452606b8083528185205486548652606a80855283872080548a881689528487528589208054948a529287528589209487528716808952858920939093559087905580548b16905581548a16179055978352606880825288842054945484526067808352898520805489861687528385528b872080548989529386528c882094909552909416808652998520559290558054861690558054909416851790935591929161517b565b606980546000908152606c6020908152604080832080546001600160a01b03199081169091556001600160a01b038b81168552606d845282852085905585548552606a84528285208054831690558681168552606b8452828520859055945484526067835281842080549091169055928516825260689052908120555b600160695461518a919061761a565b6069556000848152606e6020526040808220905190919060aa906151b290600185019061704e565b908152604051908190036020018120805492151560ff199093169290921790915560009060a9906151e490849061704e565b90815260405160209181900382018120805460ff191693151593909317909255600383015460009260ab9284926152209260028801920161705a565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556071546001600160a01b038b168452606f9091529120541461537a576001600160a01b038088166000908152606f602090815260408083205460715484526070835281842054606e90935292208054929850921695508291906152bb9061765d565b6152c6929190616654565b506071546000908152606e6020526040902060019081018054918301916152ec9061765d565b6152f7929190616654565b506071546000908152606e60205260409020600290810180549183019161531d9061765d565b615328929190616654565b506071546000908152606e60209081526040808320600390810154908501558783526070825280832080546001600160a01b0319166001600160a01b0389169081179091558352606f90915290208590555b60718054600090815260706020908152604080832080546001600160a01b03191690556001600160a01b038b168352606f825280832083905592548252606e9052908120906153c982826166cf565b6153d76001830160006166cf565b6153e56002830160006166cf565b6003820160009055505060016071546153fe919061761a565b6071554360665561540f8787616224565b826001600160a01b0316876001600160a01b03167faa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c160405160405180910390a35050505050505050565b60008161546b5761546b83600361602d565b60008060008060008060008060006154828c616134565b98509850985098509850985098509850985061549d89612a5c565b615509578b60008051602061773e8339815191526040516154ef906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a260009950505050505050505050612a99565b6001600160a01b03808a166000818152606d6020526040902054918a16146156d65761553489612a5c565b156155a2578c60008051602061773e833981519152604051615587906020808252601f908201527f6e6577206164647265737320697320616c72656164792061206d656d62657200604082015260600190565b60405180910390a260009a5050505050505050505050612a99565b876001600160a01b0316896001600160a01b0316141580156155d65750866001600160a01b0316896001600160a01b031614155b15615621578c60008051602061773e83398151915260405161558790602080825260159082015274496e76616c696420766f746572206164647265737360581b604082015260600190565b6000818152606c6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606d909252808320849055908c16825281205561566c61322a565b82108061567f57508161567d61289a565b105b156156a0578c60008051602061773e8339815191526040516155879061732b565b816156aa8a6161ea565b10156156cc578c60008051602061773e8339815191526040516155879061715e565b6156d68983614164565b6000606f60008c6001600160a01b03166001600160a01b031681526020019081526020016000205490506000606e600083815260200190815260200160002090506158ef888888888560405180608001604052908160008201805461573a9061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546157669061765d565b80156157b35780601f10615788576101008083540402835291602001916157b3565b820191906000526020600020905b81548152906001019060200180831161579657829003601f168201915b505050505081526020016001820180546157cc9061765d565b80601f01602080910402602001604051908101604052809291908181526020018280546157f89061765d565b80156158455780601f1061581a57610100808354040283529160200191615845565b820191906000526020600020905b81548152906001019060200180831161582857829003601f168201915b5050505050815260200160028201805461585e9061765d565b80601f016020809104026020016040519081016040528092919081815260200182805461588a9061765d565b80156158d75780601f106158ac576101008083540402835291602001916158d7565b820191906000526020600020905b8154815290600101906020018083116158ba57829003601f168201915b50505050508152602001600382015481525050616348565b61592c578e60008051602061773e83398151915260405161590f906172af565b60405180910390a260009c50505050505050505050505050612a99565b600060a982600001604051615941919061704e565b908152604051908190036020018120805492151560ff199093169290921790915560009060aa9061597690600185019061704e565b90815260405160209181900382018120805460ff191693151593909317909255600383015460009260ab9284926159b29260028801920161705a565b60408051808303601f1901815291815281516020928301208352828201939093529101600020805460ff19169215159290921790915588516159f9918391908b01906165d0565b508651615a0f90600183019060208a01906165d0565b508551615a2590600283019060208901906165d0565b50600381018590554360665560405160019060a990615a45908b90617010565b908152604051908190036020018120805492151560ff199093169290921790915560019060aa90615a77908a90617010565b908152602001604051809103902060006101000a81548160ff021916908315150217905550600160ab60008888604051602001615ab592919061702c565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355858352606a90529020546001600160a01b03908116915089168114615b51576000838152606a6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606b90925280832086905590831682528120555b506000828152606760205260409020546001600160a01b03908116908a168114615c61576001600160a01b038a1660009081526068602052604090205415615bd3578e60008051602061773e83398151915260405161590f906020808252600f908201526e20b63932b0b23c9030903b37ba32b960891b604082015260600190565b896067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060686000836001600160a01b03166001600160a01b03168152602001908152602001600020819055505b50896001600160a01b03168b6001600160a01b031614615d6157896070600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606f60008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000606f60008d6001600160a01b03166001600160a01b0316815260200190815260200160002081905550615d128b84616224565b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167f15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be060405160405180910390a4615da2565b896001600160a01b03168b6001600160a01b03167f1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f60405160405180910390a35b5060019d9c50505050505050505050505050565b615dc181600461602d565b6000615dcb613e29565b6001600160a01b0316637efa9ae3836040518263ffffffff1660e01b8152600401615df891815260200190565b60206040518083038186803b158015615e1057600080fd5b505afa158015615e24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615e48919061696c565b90506001600160a01b038116156127e357615e62816141a3565b615e6d816000611e52565b436066555050565b615e8081600561602d565b6000806000615e8d613e29565b6001600160a01b0316631d940da2856040518263ffffffff1660e01b8152600401615eba91815260200190565b60006040518083038186803b158015615ed257600080fd5b505afa158015615ee6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f0e9190810190616d5d565b9250925092506000615f1e61402a565b6040516388c2801960e01b81529091506001600160a01b038216906388c2801990615f4f9087908690600401617073565b600060405180830381600087803b158015615f6957600080fd5b505af1158015615f7d573d6000803e3d6000fd5b50504360665550506040517f701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c2990615fb99086908690869061708c565b60405180910390a15050505050565b615fd181614990565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061449e838360405180606001604052806027815260200161775e60279139616471565b60008061603984613f09565b50915091508282146160835760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420766f74696e67207479706560681b604482015260640161109b565b600281146160ca5760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74696e6720737461746560601b604482015260640161109b565b6000806160d68661477e565b92509250506160e461138990565b821015806160f457506113898110155b613ea75760405162461bcd60e51b8152602060048201526011602482015270139bdd081e595d08199a5b985b1a5e9959607a1b604482015260640161109b565b600080600080606080606060008061614a613e29565b6001600160a01b03166373df4e018b6040518263ffffffff1660e01b815260040161617791815260200190565b60006040518083038186803b15801561618f57600080fd5b505afa1580156161a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526161cb9190810190616989565b9850985098509850985098509850985098509193959799909294969850565b60006161f46140a0565b6040516325d998bb60e01b81526001600160a01b03848116600483015291909116906325d998bb90602401613dbd565b600061622e6140a0565b604051632c9aab9b60e11b81526001600160a01b03858116600483015291925060009183169063593557369060240160206040518083038186803b15801561627557600080fd5b505afa158015616289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906162ad9190616d44565b90508281111561633e576001600160a01b038216637756c908856162d1868561761a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561631757600080fd5b505af115801561632b573d6000803e3d6000fd5b5050505061633984846164e9565b611d9b565b611d9b84826164e9565b60006001905084805190602001208260200151805190602001201415801561638f575060aa8560405161637b9190617010565b9081526040519081900360200190205460ff165b15616398575060005b8580519060200120826000015180519060200120141580156163d9575060a9866040516163c59190617010565b9081526040519081900360200190205460ff165b156163e2575060005b600084846040516020016163f792919061702c565b604051602081830303815290604052805190602001209050808360400151846060015160405160200161642b92919061702c565b604051602081830303815290604052805190602001201415801561645d5750600081815260ab602052604090205460ff165b1561646757600091505b5095945050505050565b6060600080856001600160a01b03168560405161648e9190617010565b600060405180830381855af49150503d80600081146164c9576040519150601f19603f3d011682016040523d82523d6000602084013e6164ce565b606091505b50915091506164df86838387616528565b9695505050505050565b6164f16140a0565b604051637eee288d60e01b81526001600160a01b038481166004830152602482018490529190911690637eee288d90604401613e79565b6060831561659457825161658d576001600160a01b0385163b61658d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161109b565b508161659e565b61659e83836165a6565b949350505050565b8151156165b65781518083602001fd5b8060405162461bcd60e51b815260040161109b91906170ff565b8280546165dc9061765d565b90600052602060002090601f0160209004810192826165fe5760008555616644565b82601f1061661757805160ff1916838001178555616644565b82800160010185558215616644579182015b82811115616644578251825591602001919060010190616629565b50616650929150616705565b5090565b8280546166609061765d565b90600052602060002090601f0160209004810192826166825760008555616644565b82601f106166935780548555616644565b8280016001018555821561664457600052602060002091601f016020900482015b828111156166445782548255916001019190600101906166b4565b5080546166db9061765d565b6000825580601f106166eb575050565b601f016020900490600052602060002090810190611e8491905b5b808211156166505760008155600101616706565b8035612a43816176da565b8051612a43816176da565b600082601f83011261674157600080fd5b8135602061675661675183617596565b617566565b80838252828201915082860187848660051b890101111561677657600080fd5b60005b8581101561679e57813561678c816176da565b84529284019290840190600101616779565b5090979650505050505050565b600082601f8301126167bc57600080fd5b81356167ca616751826175b9565b8181528460208386010111156167df57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261680d57600080fd5b815161681b616751826175b9565b81815284602083860101111561683057600080fd5b61659e826020830160208701617631565b6000610140828403121561685457600080fd5b61685c61753d565b90506168678261671a565b81526168756020830161671a565b60208201526168866040830161671a565b604082015260608201356001600160401b03808211156168a557600080fd5b6168b1858386016167ab565b606084015260808401359150808211156168ca57600080fd5b6168d6858386016167ab565b608084015260a08401359150808211156168ef57600080fd5b6168fb858386016167ab565b60a084015260c084013560c084015260e084013560e08401526101009150818401358181111561692a57600080fd5b616936868287016167ab565b8385015250505061012080830135818301525092915050565b60006020828403121561696157600080fd5b813561449e816176da565b60006020828403121561697e57600080fd5b815161449e816176da565b60008060008060008060008060006101208a8c0312156169a857600080fd5b6169b18a616725565b98506169bf60208b01616725565b97506169cd60408b01616725565b96506169db60608b01616725565b955060808a01516001600160401b03808211156169f757600080fd5b616a038d838e016167fc565b965060a08c0151915080821115616a1957600080fd5b616a258d838e016167fc565b955060c08c0151915080821115616a3b57600080fd5b50616a488c828d016167fc565b93505060e08a015191506101008a015190509295985092959850929598565b60008060408385031215616a7a57600080fd5b8235616a85816176da565b915060208301356001600160401b03811115616aa057600080fd5b616aac858286016167ab565b9150509250929050565b600080600060608486031215616acb57600080fd5b8335616ad6816176da565b925060208401356001600160401b03811115616af157600080fd5b616afd868287016167ab565b925050604084013590509250925092565b600080600060608486031215616b2357600080fd5b8335616b2e816176da565b92506020840135915060408401356001600160401b03811115616b5057600080fd5b616b5c868287016167ab565b9150509250925092565b60008060008060008060c08789031215616b7f57600080fd5b8635616b8a816176da565b95506020870135945060408701356001600160401b0380821115616bad57600080fd5b616bb98a838b016167ab565b95506060890135915080821115616bcf57600080fd5b616bdb8a838b016167ab565b94506080890135915080821115616bf157600080fd5b50616bfe89828a016167ab565b92505060a087013590509295509295509295565b60008060008060808587031215616c2857600080fd5b8435616c33816176da565b93506020850135925060408501356001600160401b03811115616c5557600080fd5b616c61878288016167ab565b949793965093946060013593505050565b60008060408385031215616c8557600080fd5b82356001600160401b0380821115616c9c57600080fd5b818501915085601f830112616cb057600080fd5b81356020616cc061675183617596565b8083825282820191508286018a848660051b8901011115616ce057600080fd5b600096505b84871015616d03578035835260019690960195918301918301616ce5565b5096505086013592505080821115616d1a57600080fd5b50616aac85828601616730565b600060208284031215616d3957600080fd5b815161449e816176ef565b600060208284031215616d5657600080fd5b5051919050565b600080600060608486031215616d7257600080fd5b835192506020840151915060408401516001600160401b03811115616d9657600080fd5b616b5c868287016167fc565b600080600080600060a08688031215616dba57600080fd5b853594506020860135935060408601356001600160401b0380821115616ddf57600080fd5b616deb89838a016167ab565b94506060880135915080821115616e0157600080fd5b50616e0e888289016167ab565b95989497509295608001359392505050565b600060208284031215616e3257600080fd5b81356001600160401b03811115616e4857600080fd5b61659e84828501616841565b60008060408385031215616e6757600080fd5b82356001600160401b03811115616e7d57600080fd5b616e8985828601616841565b9250506020830135616e9a816176da565b809150509250929050565b600060208284031215616eb757600080fd5b5035919050565b60008060408385031215616ed157600080fd5b823591506020830135616e9a816176ef565b600080600060608486031215616ef857600080fd5b83519250602084015191506040840151616f11816176ef565b809150509250925092565b600080600060608486031215616f3157600080fd5b8351925060208401519150604084015190509250925092565b60008151808452616f62816020860160208601617631565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680616f9057607f831692505b6020808410821415616fb257634e487b7160e01b600052602260045260246000fd5b818015616fc65760018114616fd757617004565b60ff19861689528489019650617004565b60008881526020902060005b86811015616ffc5781548b820152908501908301616fe3565b505084890196505b50505050505092915050565b60008251617022818460208701617631565b9190910192915050565b6000835161703e818460208801617631565b9190910191825250602001919050565b600061449e8284616f76565b60006170668285616f76565b9283525050602001919050565b82815260406020820152600061659e6040830184616f4a565b8381528260208201526060604082015260006170ab6060830184616f4a565b95945050505050565b6080815260006170c76080830187616f4a565b82810360208401526170d98187616f4a565b905082810360408401526170ed8186616f4a565b91505082606083015295945050505050565b60208152600061449e6020830184616f4a565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b60208082526027908201527f496e73756666696369656e742062616c616e636520746861742063616e206265604082015266081b1bd8dad95960ca1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526029908201527f45524331393637557067726164653a20756e737570706f727465642070726f786040820152681a58589b195555525160ba1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252601490820152734475706c696361746564206e6f646520696e666f60601b604082015260600190565b6020808252602e908201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b606082015260800190565b602080825260139082015272125b9d985b1a59081b1bd8dac8185b5bdd5b9d606a1b604082015260600190565b60208082526023908201527f4e6f7720696e20766f74696e67207769746820646966666572656e742062616c6040820152621b1bdd60ea1b606082015260800190565b60208082526017908201527f496e76616c6964207374616b696e672062616c616e6365000000000000000000604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252601d908201527f43616e6e6f74206164642070726f706f73616c20746f6f206561726c79000000604082015260600190565b8c8152602081018c9052604081018b90526001600160a01b038a81166060830152898116608083015288811660a083015287811660c0830152861660e08201526000610180806101008401526174ac81840188616f4a565b90508281036101208401526174c18187616f4a565b90508281036101408401526174d68186616f4a565b915050826101608301529d9c50505050505050505050505050565b87815286602082015285604082015260018060a01b03851660608201528360808201528260a082015260e060c0820152600061753060e0830184616f4a565b9998505050505050505050565b60405161014081016001600160401b0381118282101715617560576175606176c4565b60405290565b604051601f8201601f191681016001600160401b038111828210171561758e5761758e6176c4565b604052919050565b60006001600160401b038211156175af576175af6176c4565b5060051b60200190565b60006001600160401b038211156175d2576175d26176c4565b50601f01601f191660200190565b600082198211156175f3576175f3617698565b500190565b60008261761557634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561762c5761762c617698565b500390565b60005b8381101561764c578181015183820152602001617634565b83811115611d9b5750506000910152565b600181811c9082168061767157607f821691505b6020821081141561769257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611e8457600080fd5b8015158114611e8457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249885e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203a2bbee45b822c4012cf11fc82497b3003f417d49c0f0e6d6062c409c902f88864736f6c63430008060033"; +var GovImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"envName","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"envType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"envVal","type":"bytes"}],"name":"EnvChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"MemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddr","type":"address"},{"indexed":true,"internalType":"address","name":"newAddr","type":"address"},{"indexed":true,"internalType":"address","name":"newVoter","type":"address"}],"name":"MemberChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"MemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"MemberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"NotApplicable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"SetProposalTimePeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BALLOT_DURATION_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_FEE_MAX_CHANGE_RATE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKS_PER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_CREATION_TIME_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_GASLIMIT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_AMOUNT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_MAINTANANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GASLIMIT_AND_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_TARGET_PERCENTAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IDLE_BLOCK_INTERVAL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRIORITY_FEE_PER_GAS_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct GovImp.MemberInfo","name":"info","type":"tuple"}],"name":"addProposalToAddMember","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"envName","type":"bytes32"},{"internalType":"uint256","name":"envType","type":"uint256"},{"internalType":"bytes","name":"envVal","type":"bytes"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addProposalToChangeEnv","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovAddr","type":"address"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addProposalToChangeGov","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct GovImp.MemberInfo","name":"newInfo","type":"tuple"},{"internalType":"address","name":"oldStaker","type":"address"}],"name":"addProposalToChangeMember","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addProposalToRemoveMember","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ballotLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkUnfinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeEndedVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBallotInVoting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getMemberFromNodeIdx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMemberLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getNode","outputs":[{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getNodeIdxFromMember","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodeLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getStakerAddr","outputs":[{"internalType":"address","name":"staker","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getVoter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initOnce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isStaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isVoter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastAddProposalTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modifiedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposal_time_period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reInit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indices","type":"uint256[]"},{"internalType":"address[]","name":"newRewards","type":"address[]"}],"name":"reInitV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setProposalTimePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voteLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voterIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]); + +function GovImp_new() { + return GovImp_contract.new( + { + from: web3.eth.accounts[0], + data: GovImp_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function GovImp_load(addr) { + return GovImp_contract.at(addr); +} +var Registry_data = "0x60806040526d57656d697820526567697374727960015534801561002257600080fd5b5061002c33610031565b610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105f8806100906000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806360d6c7cf1161007157806360d6c7cf14610159578063715018a6146101925780637d10dd1b1461019c5780638da5cb5b146101a5578063ec56a373146101b6578063f2fde38b146101df57600080fd5b806304af66ad146100ae5780630d2020dd146100d65780630d854646146101015780633ec50c6c14610118578063599e4c7014610146575b600080fd5b6100c16100bc36600461051a565b6101f2565b60405190151581526020015b60405180910390f35b6100e96100e4366004610501565b610298565b6040516001600160a01b0390911681526020016100cd565b61010a60015481565b6040519081526020016100cd565b6100c161012636600461051a565b600460209081526000928352604080842090915290825290205460ff1681565b6100c1610154366004610546565b6102e8565b6100c161016736600461051a565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61019a61038c565b005b61010a60025481565b6000546001600160a01b03166100e9565b6100e96101c4366004610501565b6003602052600090815260409020546001600160a01b031681565b61019a6101ed3660046104df565b6103a0565b60006101fc610419565b6001600160a01b03821661022b5760405162461bcd60e51b81526004016102229061058b565b60405180910390fd5b60008381526003602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915543600255915133815285917f37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db910160405180910390a350600192915050565b6000818152600360205260408120546001600160a01b03166102cc5760405162461bcd60e51b81526004016102229061058b565b506000908152600360205260409020546001600160a01b031690565b60006102f2610419565b6001600160a01b0383166103185760405162461bcd60e51b81526004016102229061058b565b60008481526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915543600255905190815286917fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818910160405180910390a35060019392505050565b610394610419565b61039e6000610473565b565b6103a8610419565b6001600160a01b03811661040d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b61041681610473565b50565b6000546001600160a01b0316331461039e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146104da57600080fd5b919050565b6000602082840312156104f157600080fd5b6104fa826104c3565b9392505050565b60006020828403121561051357600080fd5b5035919050565b6000806040838503121561052d57600080fd5b8235915061053d602084016104c3565b90509250929050565b60008060006060848603121561055b57600080fd5b8335925061056b602085016104c3565b91506040840135801515811461058057600080fd5b809150509250925092565b6020808252601a908201527f616464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060408201526060019056fea2646970667358221220ace1d66b72bec2834a1452da82bfec0907eb0c949c79ae3ed7e43001d360266964736f6c63430008060033"; +var Registry_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"setter","type":"address"},{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetContractDomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_contract","type":"bytes32"},{"indexed":true,"internalType":"address","name":"granted","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetPermission","type":"event"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"contracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"}],"name":"getContractAddress","outputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contract","type":"bytes32"},{"internalType":"address","name":"_granted","type":"address"}],"name":"getPermission","outputs":[{"internalType":"bool","name":"found","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"magic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modifiedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"},{"internalType":"address","name":"_addr","type":"address"}],"name":"setContractDomain","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contract","type":"bytes32"},{"internalType":"address","name":"_granted","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPermission","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]); + +function Registry_new() { + return Registry_contract.new( + { + from: web3.eth.accounts[0], + data: Registry_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Registry_load(addr) { + return Registry_contract.at(addr); +} +var StakingImp_data = "0x60a06040523060601b608052609b805460ff191690553480156200002257600080fd5b506200002d62000033565b620000f4565b600054610100900460ff1615620000a05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000f2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c612f216200012f60003960008181610b7101528181610bb101528181610c4e01528181610c8e0152610d1d0152612f216000f3fe6080604052600436106102345760003560e01c8063738fdd1a1161012e578063a91ee0dc116100ab578063d5c258901161006f578063d5c25890146106b3578063f1b8aa1d146106c8578063f2fde38b146106e8578063f3f6308014610708578063f69318221461072857600080fd5b8063a91ee0dc14610643578063b6549f7514610663578063bac4f33814610678578063c0d91eaf1461068b578063d0e30db0146106ab57600080fd5b80637f2f4c06116100f25780637f2f4c06146105a1578063884d97a7146105c15780638da5cb5b146105e15780639667e76a146105ff5780639986e4b91461061f57600080fd5b8063738fdd1a146104e85780637756c908146105205780637bf46530146105405780637d77a0eb146105615780637eee288d1461058157600080fd5b806334125c84116101bc5780635935573611610180578063593557361461041a5780635a731cca146104505780636c78d2cf1461047457806370a082311461049d578063715018a6146104d357600080fd5b806334125c84146103905780633659cfe6146103b05780634bd1ed76146103d05780634f1ef286146103f257806352d1902d1461040557600080fd5b8063282d3fdf11610203578063282d3fdf146102ea5780632b0b9c5e1461030c5780632bc9ed021461032c5780632e1a7d4d1461034f5780632f40992e1461036f57600080fd5b80631285361514610243578063193468ac146102765780631e0cba0d146102ac57806325d998bb146102ca57600080fd5b3661023e57600080fd5b600080fd5b34801561024f57600080fd5b5061026361025e366004612968565b610748565b6040519081526020015b60405180910390f35b34801561028257600080fd5b5061026361029136600461292e565b6001600160a01b0316600090815260ce602052604090205490565b3480156102b857600080fd5b50610263665374616b696e6760c81b81565b3480156102d657600080fd5b506102636102e536600461292e565b610775565b3480156102f657600080fd5b5061030a610305366004612a65565b6107a3565b005b34801561031857600080fd5b5061026361032736600461292e565b6107e9565b34801561033857600080fd5b50609b5460ff16604051901515815260200161026d565b34801561035b57600080fd5b5061030a61036a366004612b03565b610845565b34801561037b57600080fd5b506102636914995dd85c99141bdbdb60b21b81565b34801561039c57600080fd5b506102636845636f73797374656d60b81b81565b3480156103bc57600080fd5b5061030a6103cb36600461292e565b610b66565b3480156103dc57600080fd5b506102636a4d61696e74656e616e636560a81b81565b61030a6104003660046129a1565b610c43565b34801561041157600080fd5b50610263610d10565b34801561042657600080fd5b5061026361043536600461292e565b6001600160a01b031660009081526099602052604090205490565b34801561045c57600080fd5b506102636c14dd185ada5b99d4995dd85c99609a1b81565b34801561048057600080fd5b506102637111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156104a957600080fd5b506102636104b836600461292e565b6001600160a01b031660009081526098602052604090205490565b3480156104df57600080fd5b5061030a610dc3565b3480156104f457600080fd5b50606554610508906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561052c57600080fd5b5061030a61053b366004612a65565b610dd7565b34801561054c57600080fd5b5061026369456e7653746f7261676560b01b81565b34801561056d57600080fd5b5061026361057c366004612a91565b610f00565b34801561058d57600080fd5b5061030a61059c366004612a65565b610f74565b3480156105ad57600080fd5b5061030a6105bc36600461292e565b610fad565b3480156105cd57600080fd5b506102636105dc36600461292e565b61102d565b3480156105ed57600080fd5b506033546001600160a01b0316610508565b34801561060b57600080fd5b5061030a61061a366004612b03565b61103a565b34801561062b57600080fd5b506102636c42616c6c6f7453746f7261676560981b81565b34801561064f57600080fd5b5061030a61065e36600461292e565b611159565b34801561066f57600080fd5b5061030a611201565b61030a61068636600461292e565b61130b565b34801561069757600080fd5b5061030a6106a63660046129a1565b61170d565b61030a6118b8565b3480156106bf57600080fd5b50609a54610263565b3480156106d457600080fd5b5060cf54610508906001600160a01b031681565b3480156106f457600080fd5b5061030a61070336600461292e565b611b98565b34801561071457600080fd5b5061030a61072336600461292e565b611c0e565b34801561073457600080fd5b5061030a610743366004612a65565b611c2e565b6001600160a01b03808316600090815260cd60209081526040808320938516835292905220545b92915050565b6001600160a01b038116600090815260996020908152604080832054609890925282205461076f9190612e20565b336107ac611fc9565b6001600160a01b0316146107db5760405162461bcd60e51b81526004016107d290612c9c565b60405180910390fd5b6107e58282611fee565b5050565b6001600160a01b038116600090815260ce60209081526040808320546099909252822054811580610818575080155b15610827575060009392505050565b80610833836064612e01565b61083d9190612ddf565b949350505050565b61084d61224c565b609b5460ff16156108705760405162461bcd60e51b81526004016107d290612d17565b600081116108905760405162461bcd60e51b81526004016107d290612d3b565b600061089a6122a6565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d257600080fd5b505afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190612aea565b905060006109188383612dc7565b33600090815260ce602090815260408083205460999092529091205461093e9190612e20565b106109515761094d33846122be565b5060015b61095a33610775565b8311156109795760405162461bcd60e51b81526004016107d290612cc3565b33600090815260986020526040902054610994908490612e20565b3360009081526098602052604090205560cf546001600160a01b0316158015906109bb5750805b15610acd5760cf546040516000916001600160a01b03169085908381818185875af1925050503d8060008114610a0d576040519150601f19603f3d011682016040523d82523d6000602084013e610a12565b606091505b5050905080610a635760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c6564000060448201526064016107d2565b60cf546040516306aa67f960e01b8152600481018690523360248201526001600160a01b03909116906306aa67f990604401600060405180830381600087803b158015610aaf57600080fd5b505af1158015610ac3573d6000803e3d6000fd5b5050505050610afc565b604051339084156108fc029085906000818181858888f19350505050158015610afa573d6000803e3d6000fd5b505b336000818152609860205260409020547f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00908590610b3984610775565b6040805193845260208401929092529082015260600160405180910390a25050610b636001606655565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610baf5760405162461bcd60e51b81526004016107d290612bba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610bf8600080516020612ea5833981519152546001600160a01b031690565b6001600160a01b031614610c1e5760405162461bcd60e51b81526004016107d290612c06565b610c278161237d565b60408051600080825260208201909252610b6391839190612385565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610c8c5760405162461bcd60e51b81526004016107d290612bba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610cd5600080516020612ea5833981519152546001600160a01b031690565b6001600160a01b031614610cfb5760405162461bcd60e51b81526004016107d290612c06565b610d048261237d565b6107e582826001612385565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610db05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016107d2565b50600080516020612ea583398151915290565b610dcb6124ff565b610dd56000612559565b565b33610de0611fc9565b6001600160a01b031614610e065760405162461bcd60e51b81526004016107d290612c9c565b80610e0f575050565b610e198282610f74565b6001600160a01b038216600090815260986020526040902054610e3d908290612e20565b6001600160a01b038316600090815260986020526040812091909155610e616125ab565b6001600160a01b038116600090815260986020526040902054909150610e88908390612dc7565b6001600160a01b0380831660009081526098602052604080822093909355908516808252919020547f2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e24908490610edd87610775565b6040805193845260208401929092529082015260600160405180910390a2505050565b6001600160a01b0382166000908152609960205260408120541580610f29575063ffffffff8216155b15610f365750600061076f565b609a546001600160a01b038416600090815260996020526040902054610f639063ffffffff851690612e01565b610f6d9190612ddf565b9392505050565b33610f7d611fc9565b6001600160a01b031614610fa35760405162461bcd60e51b81526004016107d290612c9c565b6107e582826122be565b610fb56124ff565b6001600160a01b03811661100b5760405162461bcd60e51b815260206004820152601e60248201527f4e43505374616b696e6720697320746865207a65726f2061646472657373000060448201526064016107d2565b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b600061076f826064610f00565b611042611fc9565b604051636f1e853360e01b81523360048201526001600160a01b039190911690636f1e85339060240160206040518083038186803b15801561108357600080fd5b505afa158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190612ac8565b6110d75760405162461bcd60e51b81526004016107d290612c9c565b6110e13382611fee565b60cf546001600160a01b031615610b635760cf546040516301008e9960e61b8152600481018390523360248201526001600160a01b0390911690634023a64090604401600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b5050505050565b6111616124ff565b6001600160a01b0381166111b75760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016107d2565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6112096124ff565b609b5460ff161561122c5760405162461bcd60e51b81526004016107d290612d17565b60006112406033546001600160a01b031690565b9050478061127e5760405162461bcd60e51b815260206004820152600b60248201526a062616c616e6365203d20360ac1b60448201526064016107d2565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156112b4573d6000803e3d6000fd5b50609b805460ff191660011790556040516001600160a01b038316907f713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4906112ff9084815260200190565b60405180910390a25050565b61131361224c565b609b5460ff16156113365760405162461bcd60e51b81526004016107d290612d17565b60cf546001600160a01b031633146113605760405162461bcd60e51b81526004016107d290612b6b565b600034116113805760405162461bcd60e51b81526004016107d290612c52565b611388611fc9565b60405163288c314960e21b81526001600160a01b038381166004830152919091169063a230c5249060240160206040518083038186803b1580156113cb57600080fd5b505afa1580156113df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114039190612ac8565b6114485760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b60448201526064016107d2565b6001600160a01b038116600090815260986020526040902054349061146e908290612dc7565b6001600160a01b0383166000908152609860205260408120919091556114926122a6565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ca57600080fd5b505afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190612aea565b9050600061150e6122a6565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561154657600080fd5b505afa15801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e9190612aea565b6001600160a01b03851660009081526099602052604090205490915082118015906115cd57506001600160a01b03841660009081526099602052604090205481906115ca908590612dc7565b11155b6116195760405162461bcd60e51b815260206004820152601f60248201527f757365722073686f756c6420626520696e207374616b696e672072616e67650060448201526064016107d2565b6116238484611fee565b6001600160a01b038416600090815260cd60209081526040808320338452909152902054611652908490612dc7565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce909152205461168e908490612dc7565b6001600160a01b038516600081815260ce6020908152604080832085905560cd825280832033808552908352928190205481518981529283019590955281019390935290917f74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd9060600160405180910390a3505050610b636001606655565b600054610100900460ff161580801561172d5750600054600160ff909116105b806117475750303b158015611747575060005460ff166001145b6117aa5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107d2565b6000805460ff1916600117905580156117cd576000805461ff0019166101001790555b6000609a556117da6125c2565b6117e26125f1565b6117eb83611159565b81516117f65761186d565b60008060008060208601915085518261180f9190612dc7565b90505b808210156118685781519350611829602083612dc7565b915080821061183757600080fd5b81519250611846602083612dc7565b6001600160a01b03851660009081526098602052604090208490559150611812565b505050505b80156118b3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6118c061224c565b609b5460ff16156118e35760405162461bcd60e51b81526004016107d290612d17565b600034116119035760405162461bcd60e51b81526004016107d290612c52565b3360009081526098602052604090205461191e903490612dc7565b33600090815260986020526040902055611936611fc9565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190612ac8565b15611b335760006119be6122a6565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f657600080fd5b505afa158015611a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2e9190612aea565b3360009081526099602052604090205490915081118015611a70575033600090815260996020526040902054611a649082612e20565b611a6d33610775565b10155b15611b315733600081815260996020526040902054611a999190611a949084612e20565b611fee565b60cf546001600160a01b031615611b315760cf54336000908152609960205260409020546001600160a01b0390911690634023a64090611ad99084612e20565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611b1857600080fd5b505af1158015611b2c573d6000803e3d6000fd5b505050505b505b336000818152609860205260409020547fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed903490611b7084610775565b6040805193845260208401929092529082015260600160405180910390a2610dd56001606655565b611ba06124ff565b6001600160a01b038116611c055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d2565b610b6381612559565b611c166124ff565b6001600160a01b03811615610b6357610c278161237d565b611c3661224c565b609b5460ff1615611c595760405162461bcd60e51b81526004016107d290612d17565b60cf546001600160a01b03163314611c835760405162461bcd60e51b81526004016107d290612b6b565b60008111611ca35760405162461bcd60e51b81526004016107d290612d3b565b611cab611fc9565b60405163288c314960e21b81526001600160a01b038481166004830152919091169063a230c5249060240160206040518083038186803b158015611cee57600080fd5b505afa158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d269190612ac8565b611d6b5760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b60448201526064016107d2565b806000611d766122a6565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b158015611dae57600080fd5b505afa158015611dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de69190612aea565b6001600160a01b038516600090815260cd602090815260408083203384529091529020549091508211801590611e4557508082611e38866001600160a01b031660009081526099602052604090205490565b611e429190612e20565b10155b611e615760405162461bcd60e51b81526004016107d290612cc3565b611e6b84836122be565b6001600160a01b038416600090815260986020526040902054611e8f908390612e20565b6001600160a01b03851660009081526098602090815260408083209390935560cd815282822033835290522054611ec7908390612e20565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce9091522054611f03908390612e20565b6001600160a01b03808616600090815260ce60205260408082209390935560cf549251929091169184156108fc0291859190818181858888f19350505050158015611f52573d6000803e3d6000fd5b506001600160a01b038416600081815260ce602090815260408083205460cd835281842033808652908452938290205482518881529384019190915282820152517f03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda29181900360600190a350506107e56001606655565b6000611fe97111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612620565b905090565b80611ff7575050565b6001600160a01b0382166000908152609860205260409020548111156120785760405162461bcd60e51b815260206004820152603060248201527f4c6f636b20616d6f756e742073686f756c6420626520657175616c206f72206c60448201526f657373207468616e2062616c616e636560801b60648201526084016107d2565b8061208283610775565b10156120e05760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015266081b1bd8dad95960ca1b60648201526084016107d2565b60006120ea6122a6565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561212257600080fd5b505afa158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190612aea565b6001600160a01b038416600090815260996020526040902054909150612181908390612dc7565b6001600160a01b03841660009081526099602052604090208190558110156121f55760405162461bcd60e51b815260206004820152602160248201527f4c6f636b65642062616c616e6365206973206c6172676572207468616e206d616044820152600f60fb1b60648201526084016107d2565b81609a546122039190612dc7565b609a556001600160a01b0383166000818152609860205260409020547f44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c11908490610edd87610775565b6002606654141561229f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107d2565b6002606655565b6000611fe969456e7653746f7261676560b01b612620565b806122c7575050565b6001600160a01b0382166000908152609960205260409020546122eb908290612e20565b6001600160a01b038316600090815260996020526040902055609a54612312908290612e20565b609a556001600160a01b0382166000818152609860205260409020547f5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a890839061235b86610775565b604080519384526020840192909252908201526060016112ff565b6001606655565b610b636124ff565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156123b8576118b38361269d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123f157600080fd5b505afa925050508015612421575060408051601f3d908101601f1916820190925261241e91810190612aea565b60015b6124845760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016107d2565b600080516020612ea583398151915281146124f35760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016107d2565b506118b3838383612739565b6033546001600160a01b03163314610dd55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611fe96845636f73797374656d60b81b612620565b600054610100900460ff166125e95760405162461bcd60e51b81526004016107d290612d7c565b610dd5612764565b600054610100900460ff166126185760405162461bcd60e51b81526004016107d290612d7c565b610dd561278b565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b15801561266557600080fd5b505afa158015612679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076f919061294b565b6001600160a01b0381163b61270a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107d2565b600080516020612ea583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612742836127bb565b60008251118061274f5750805b156118b35761275e83836127fb565b50505050565b600054610100900460ff166123765760405162461bcd60e51b81526004016107d290612d7c565b600054610100900460ff166127b25760405162461bcd60e51b81526004016107d290612d7c565b610dd533612559565b6127c48161269d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610f6d8383604051806060016040528060278152602001612ec5602791396060600080856001600160a01b0316856040516128389190612b1c565b600060405180830381855af49150503d8060008114612873576040519150601f19603f3d011682016040523d82523d6000602084013e612878565b606091505b509150915061288986838387612893565b9695505050505050565b606083156128ff5782516128f8576001600160a01b0385163b6128f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d2565b508161083d565b61083d83838151156129145781518083602001fd5b8060405162461bcd60e51b81526004016107d29190612b38565b60006020828403121561294057600080fd5b8135610f6d81612e8f565b60006020828403121561295d57600080fd5b8151610f6d81612e8f565b6000806040838503121561297b57600080fd5b823561298681612e8f565b9150602083013561299681612e8f565b809150509250929050565b600080604083850312156129b457600080fd5b82356129bf81612e8f565b9150602083013567ffffffffffffffff808211156129dc57600080fd5b818501915085601f8301126129f057600080fd5b813581811115612a0257612a02612e79565b604051601f8201601f19908116603f01168101908382118183101715612a2a57612a2a612e79565b81604052828152886020848701011115612a4357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215612a7857600080fd5b8235612a8381612e8f565b946020939093013593505050565b60008060408385031215612aa457600080fd5b8235612aaf81612e8f565b9150602083013563ffffffff8116811461299657600080fd5b600060208284031215612ada57600080fd5b81518015158114610f6d57600080fd5b600060208284031215612afc57600080fd5b5051919050565b600060208284031215612b1557600080fd5b5035919050565b60008251612b2e818460208701612e37565b9190910192915050565b6020815260008251806020840152612b57816040850160208701612e37565b601f01601f19169190910160400192915050565b6020808252602f908201527f4f6e6c79204e43505374616b696e6720636f6e74726163742063616e2063616c60408201526e36103a3434b990333ab731ba34b7b760891b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602a908201527f4465706f73697420616d6f756e742073686f756c642062652067726561746572604082015269207468616e207a65726f60b01b606082015260800190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b60208082526034908201527f576974686472617720616d6f756e742073686f756c6420626520657175616c206040820152736f72206c657373207468616e2062616c616e636560601b606082015260800190565b6020808252600a9082015269125cc81c995d9bdad95960b21b604082015260600190565b60208082526021908201527f416d6f756e742073686f756c6420626520626967676572207468616e207a65726040820152606f60f81b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008219821115612dda57612dda612e63565b500190565b600082612dfc57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e1b57612e1b612e63565b500290565b600082821015612e3257612e32612e63565b500390565b60005b83811015612e52578181015183820152602001612e3a565b8381111561275e5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610b6357600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122042e83c34556c2fc1280f674a79356265caae9e5830724b9c1fe5109a1ac1a48c64736f6c63430008060033"; +var StakingImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"ncp","type":"address"},{"indexed":false,"internalType":"uint256","name":"ncpTotalLocked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userTotalLocked","type":"uint256"}],"name":"DelegateStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"ncp","type":"address"},{"indexed":false,"internalType":"uint256","name":"ncpTotalLocked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userTotalLocked","type":"uint256"}],"name":"DelegateUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Revoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"TransferLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Unlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"availableBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"calcVotingWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint32","name":"factor","type":"uint32"}],"name":"calcVotingWeightWithScaleFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"}],"name":"delegateDepositAndLockMore","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"delegateUnlockAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"}],"name":"getRatioOfUserBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"name":"lockMore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"lockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ncpStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ncpStaking","type":"address"}],"name":"setNCPStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"unlockAmount","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImp","type":"address"}],"name":"upgradeStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"userBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"}],"name":"userTotalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]); + +function StakingImp_new() { + return StakingImp_contract.new( + { + from: web3.eth.accounts[0], + data: StakingImp_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function StakingImp_load(addr) { + return StakingImp_contract.at(addr); +} + +function AEnvStorage_new() { + return AEnvStorage_contract.new( + { + from: web3.eth.accounts[0], + data: AEnvStorage_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function AEnvStorage_load(addr) { + return AEnvStorage_contract.at(addr); +} + +function AGov_new() { + return AGov_contract.new( + { + from: web3.eth.accounts[0], + data: AGov_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function AGov_load(addr) { + return AGov_contract.at(addr); +} +var BallotEnums_data = "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122091a15a61427e97bd4bc0a2766ba7c9d2f0fc00ff6d4c94d4b3851693f6a2a9db64736f6c63430008060033"; +var BallotEnums_contract = web3.eth.contract([]); + +function BallotEnums_new() { + return BallotEnums_contract.new( + { + from: web3.eth.accounts[0], + data: BallotEnums_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function BallotEnums_load(addr) { + return BallotEnums_contract.at(addr); +} +var EnvConstants_data = "0x608060405234801561001057600080fd5b506104ca806100206000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80637b2bfb01116100b8578063c00ace6c1161007c578063c00ace6c146103aa578063c0b4fe15146103d1578063c42a0abc146103f8578063c6713baf1461041f578063c7d3da3414610446578063f38ecf471461046d57600080fd5b80637b2bfb0114610305578063918f86741461032c578063a6868b7d14610335578063a9b629b21461035c578063b128f8801461038357600080fd5b80633f35c8fe1161010a5780633f35c8fe1461021b5780634d273e28146102425780636167eb4514610269578063656e3052146102905780636d583ca7146102b75780636fde207a146102de57600080fd5b806215a73b146101465780630b1d39b81461017f578063238737b6146101a6578063278bb12a146101cd57806338294419146101f4575b600080fd5b61016d7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b60405190815260200160405180910390f35b61016d7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b61016d7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b61016d7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b61016d7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b61016d7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b61016d7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b61016d7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b61016d7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b61016d7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b61016d7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b61016d7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b61016d61271081565b61016d7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b61016d7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b61016d7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b61016d7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b61016d7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b61016d7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b61016d7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b61016d7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b61016d7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f8156fea26469706673582212208e85eb98251b350efa0ef420d149d10a734f1d6332cbf74fab8178a917ce65ef64736f6c63430008060033"; +var EnvConstants_contract = web3.eth.contract([{"inputs":[],"name":"BALLOT_DURATION_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_FEE_MAX_CHANGE_RATE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKS_PER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_CREATION_TIME_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_GASLIMIT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_AMOUNT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_MAINTANANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GASLIMIT_AND_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_TARGET_PERCENTAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IDLE_BLOCK_INTERVAL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRIORITY_FEE_PER_GAS_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]); + +function EnvConstants_new() { + return EnvConstants_contract.new( + { + from: web3.eth.accounts[0], + data: EnvConstants_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function EnvConstants_load(addr) { + return EnvConstants_contract.at(addr); +} + +function IBallotStorage_new() { + return IBallotStorage_contract.new( + { + from: web3.eth.accounts[0], + data: IBallotStorage_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IBallotStorage_load(addr) { + return IBallotStorage_contract.at(addr); +} + +function IEnvStorage_new() { + return IEnvStorage_contract.new( + { + from: web3.eth.accounts[0], + data: IEnvStorage_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IEnvStorage_load(addr) { + return IEnvStorage_contract.at(addr); +} + +function IGov_new() { + return IGov_contract.new( + { + from: web3.eth.accounts[0], + data: IGov_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IGov_load(addr) { + return IGov_contract.at(addr); +} + +function INCPStaking_new() { + return INCPStaking_contract.new( + { + from: web3.eth.accounts[0], + data: INCPStaking_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function INCPStaking_load(addr) { + return INCPStaking_contract.at(addr); +} + +function IRegistry_new() { + return IRegistry_contract.new( + { + from: web3.eth.accounts[0], + data: IRegistry_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IRegistry_load(addr) { + return IRegistry_contract.at(addr); +} + +function IStaking_new() { + return IStaking_contract.new( + { + from: web3.eth.accounts[0], + data: IStaking_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IStaking_load(addr) { + return IStaking_contract.at(addr); +} +var BallotStorage_data = "0x60806040526000606d553480156200001657600080fd5b50604051620039cf380380620039cf8339810160408190526200003991620001b6565b620000443362000056565b6200004f81620000a8565b50620001e8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000b262000158565b6001600160a01b0381166200010e5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064015b60405180910390fd5b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6033546001600160a01b03163314620001b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000105565b565b600060208284031215620001c957600080fd5b81516001600160a01b0381168114620001e157600080fd5b9392505050565b6137d780620001f86000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80636c78d2cf1161013b578063a91e59ba116100b8578063c0b6f1861161007c578063c0b6f186146105a6578063ce04b9d4146105b9578063daacbb95146105c1578063f2fde38b146105d4578063f680e555146105e757600080fd5b8063a91e59ba14610554578063a91ee0dc14610567578063b23c676c1461057a578063b47414951461058b578063bce0dbc11461059357600080fd5b80637bf46530116100ff5780637bf46530146104d95780637efa9ae3146104ed5780638da5cb5b1461051957806396462b9c1461052a5780639986e4b91461053d57600080fd5b80636c78d2cf1461044f578063715018a61461046b57806372d0ec9214610473578063738fdd1a1461048657806373df4e01146104b157600080fd5b806334125c84116101c95780635a55c1f01161018d5780635a55c1f01461038f5780635a731cca146103dd578063656bc633146103f4578063688ca5b2146104075780636c57f5a91461043757600080fd5b806334125c841461033b5780634a57823e1461034e5780634bd1ed7614610361578063557ed1ba1461037657806356ba988e1461037c57600080fd5b80631c150171116102105780631c150171146102d95780631d940da2146102e15780631e0cba0d146103035780632a74f38c146103145780632f40992e1461032757600080fd5b806302b385fb1461024257806309970688146102755780630a3a63fe146102a3578063155ca224146102c4575b600080fd5b61025561025036600461306d565b61062b565b60405161026c9b9a999897969594939291906136a6565b60405180910390f35b61028861028336600461306d565b6107f6565b6040805193845260208401929092529082015260600161026c565b6102b66102b136600461317d565b610956565b60405190815260200161026c565b6102d76102d236600461306d565b610a6e565b005b6102b6610bcf565b6102f46102ef36600461306d565b610c4e565b60405161026c9392919061347e565b6102b6665374616b696e6760c81b81565b6102d761032236600461302c565b610d06565b6102b66914995dd85c99141bdbdb60b21b81565b6102b66845636f73797374656d60b81b81565b6102b661035c3660046132ed565b610da0565b6102b66a4d61696e74656e616e636560a81b81565b426102b6565b61028861038a36600461306d565b610ea7565b6103a261039d36600461306d565b610ff8565b6040805196875260208701959095526001600160a01b03909316938501939093526060840152608083019190915260a082015260c00161026c565b6102b66c14dd185ada5b99d4995dd85c99609a1b81565b6102d76104023660046130e6565b6110c6565b61041a61041536600461306d565b6112d9565b60408051938452602084019290925215159082015260600161026c565b61043f61142f565b604051901515815260200161026c565b6102b67111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b6102d7611453565b6102d76104813660046130e6565b611467565b606554610499906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6104c46104bf36600461306d565b611601565b60405161026c999897969594939291906133ff565b6102b669456e7653746f7261676560b01b81565b6104996104fb36600461306d565b6000908152606860205260409020600101546001600160a01b031690565b6033546001600160a01b0316610499565b6102d7610538366004613108565b61180e565b6102b66c42616c6c6f7453746f7261676560981b81565b6102d76105623660046130e6565b611af9565b6102d761057536600461302c565b611c77565b606c546001600160a01b0316610499565b606d546102b6565b6102d76105a136600461309f565b611d1f565b6102d76105b4366004613151565b611e64565b6102b6612044565b6102d76105cf3660046131d3565b612086565b6102d76105e236600461302c565b612396565b61043f6105f536600461336d565b66ffffffffffffff82166000908152606b602090815260408083206001600160a01b038516845290915290205460ff1692915050565b60008060008060606000806000806000806000606660008e815260200190815260200160002060405180610180016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016005820180546106c49061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f09061373b565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e00151955080610100015194508061012001519350806101400151925080610160015191505091939597999b90929496989a50565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a08401916108679061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546108939061373b565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519350806040015192508061016001519150509193909250565b60003361096161240f565b6001600160a01b0316146109905760405162461bcd60e51b815260040161098790613509565b60405180910390fd5b61099861242f565b6001600160a01b0316306001600160a01b0316146109c85760405162461bcd60e51b81526004016109879061361f565b600485146109e85760405162461bcd60e51b815260040161098790613567565b6001600160a01b038216610a0e5760405162461bcd60e51b815260040161098790613644565b610a1a8686868661244a565b506040805180820182528681526001600160a01b0392831660208083019182526000898152606890915292909220905181559051600190910180546001600160a01b03191691909216179055509192915050565b8033610a7861240f565b6001600160a01b03161480610aa657506000818152606660205260409020600401546001600160a01b031633145b610ac25760405162461bcd60e51b815260040161098790613509565b610aca61242f565b6001600160a01b0316306001600160a01b031614610afa5760405162461bcd60e51b81526004016109879061361f565b6000828152606660205260409020548214610b275760405162461bcd60e51b8152600401610987906134a6565b6000828152606660205260409020600a015460ff1615610b595760405162461bcd60e51b815260040161098790613594565b600160008381526066602052604090206009015414610b8a5760405162461bcd60e51b8152600401610987906135f6565b60008281526066602052604090206005600982015560405183907fd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc90600090a2505050565b6000610bd9612705565b6001600160a01b03166333be496e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190613086565b905090565b600081815260696020526040902060018101546002820154600383018054929391926060929190610c7e9061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610caa9061373b565b8015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b50505050509150509193909250565b610d0e61271d565b6001600160a01b038116610d565760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610987565b606c80546001600160a01b0319166001600160a01b0383169081179091556040517f3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb390600090a250565b600033610dab61240f565b6001600160a01b031614610dd15760405162461bcd60e51b815260040161098790613509565b610dd961242f565b6001600160a01b0316306001600160a01b031614610e095760405162461bcd60e51b81526004016109879061361f565b610e14878584612777565b610e305760405162461bcd60e51b815260040161098790613644565b610e3c8888888861244a565b6040805160808101825289815260208082018781528284018781526060840187815260008e81526069855295909520845181559151600183015551600282015592518051929384939092610e97926003850192910190612ef6565b50999a9950505050505050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a0840191610f189061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f449061373b565b8015610f915780601f10610f6657610100808354040283529160200191610f91565b820191906000526020600020905b815481529060010190602001808311610f7457829003601f168201915b505050918352505060068201546020820152600782015460408201526008820154606082015260098201546080820152600a82015460ff16151560a0820152600b9091015460c09182015281015160e0820151610100909201519097919650945092505050565b6000818152606a60205260408120548190819081908190819087146110545760405162461bcd60e51b81526020600482015260126024820152711b9bdd08195e1a5cdd1959081d9bdd19525960721b6044820152606401610987565b50505060009384525050606a6020908152604092839020835160c0810185528154808252600183015493820184905260028301546001600160a01b031695820186905260038301546060830181905260048401546080840181905260059094015460a090930183905290969395945092565b81336110d061240f565b6001600160a01b031614806110fe57506000818152606660205260409020600401546001600160a01b031633145b61111a5760405162461bcd60e51b815260040161098790613509565b61112261242f565b6001600160a01b0316306001600160a01b0316146111525760405162461bcd60e51b81526004016109879061361f565b818061115c610bcf565b11156111aa5760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610987565b6111b2612044565b8111156112015760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610987565b600084815260666020526040902054841461122e5760405162461bcd60e51b8152600401610987906134a6565b6000848152606660205260409020600a015460ff16156112605760405162461bcd60e51b815260040161098790613594565b6001600085815260666020526040902060090154146112915760405162461bcd60e51b8152600401610987906135f6565b600084815260666020526040808220600b810186905590519091339187917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a35050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a084019161134a9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546113769061373b565b80156113c35780601f10611398576101008083540402835291602001916113c3565b820191906000526020600020905b8154815290600101906020018083116113a657829003601f168201915b50505091835250506006820154602082015260078201546040820152600882015460608083019190915260098301546080830152600a83015460ff16151560a0830152600b9092015460c090910152810151610120820151610140909201519097919650945092505050565b600061143961242f565b6001600160a01b0316306001600160a01b03161415905090565b61145b61271d565b6114656000612856565b565b3361147061240f565b6001600160a01b0316146114965760405162461bcd60e51b815260040161098790613509565b61149e61242f565b6001600160a01b0316306001600160a01b0316146114ce5760405162461bcd60e51b81526004016109879061361f565b60008281526066602052604090205482146114fb5760405162461bcd60e51b8152600401610987906134a6565b60008281526067602052604090205482146115585760405162461bcd60e51b815260206004820152601860248201527f6e6f7420657869737465642042616c6c6f744d656d62657200000000000000006044820152606401610987565b6000828152606660205260409020600a015460ff161561158a5760405162461bcd60e51b815260040161098790613594565b6001600083815260666020526040902060090154146115bb5760405162461bcd60e51b8152600401610987906135f6565b6000828152606760205260408082206009810184905590519091339185917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a3505050565b600081815260676020526040812060018101546002820154600383015460048401546005850180546001600160a01b0395861697948616969386169590921693606093849384938392916116549061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546116809061373b565b80156116cd5780601f106116a2576101008083540402835291602001916116cd565b820191906000526020600020905b8154815290600101906020018083116116b057829003601f168201915b505050505095508060060180546116e39061373b565b80601f016020809104026020016040519081016040528092919081815260200182805461170f9061373b565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b505050505094508060070180546117729061373b565b80601f016020809104026020016040519081016040528092919081815260200182805461179e9061373b565b80156117eb5780601f106117c0576101008083540402835291602001916117eb565b820191906000526020600020905b8154815290600101906020018083116117ce57829003601f168201915b505050505093508060080154925080600901549150509193959799909294969850565b3361181761240f565b6001600160a01b03161461183d5760405162461bcd60e51b815260040161098790613509565b61184561242f565b6001600160a01b0316306001600160a01b0316146118755760405162461bcd60e51b81526004016109879061361f565b60018214806118845750600282145b6118c35760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610987565b60008481526066602052604090205484146118f05760405162461bcd60e51b8152600401610987906134a6565b6000858152606a60205260409020548514156119475760405162461bcd60e51b8152602060048201526016602482015275185b1c9958591e48195e1a5cdd1959081d9bdd19525960521b6044820152606401610987565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156119aa5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610987565b600260008581526066602052604090206009015414611a025760405162461bcd60e51b81526020600482015260146024820152734e6f7420496e50726f677265737320537461746560601b6044820152606401610987565b6040518060c00160405280868152602001858152602001846001600160a01b03168152602001838152602001828152602001611a3b4290565b90526000868152606a602090815260409182902083518155908301516001820155908201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a090910151600590910155611aad848484846128a8565b826001600160a01b031684867f41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d36760685604051611aea91815260200190565b60405180910390a45050505050565b33611b0261240f565b6001600160a01b031614611b285760405162461bcd60e51b815260040161098790613509565b611b3061242f565b6001600160a01b0316306001600160a01b031614611b605760405162461bcd60e51b81526004016109879061361f565b6000828152606660205260409020548214611b8d5760405162461bcd60e51b8152600401610987906134a6565b6000828152606660205260409020600a015460ff1615611bbf5760405162461bcd60e51b815260040161098790613594565b6003811480611bce5750600481145b611c115760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642042616c6c6f7420537461746560601b6044820152606401610987565b6000828152606660205260409081902060098101839055600a8101805460ff19166001179055905183907fdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f90611c6a9085815260200190565b60405180910390a2505050565b611c7f61271d565b6001600160a01b038116611cd55760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610987565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b8133611d2961240f565b6001600160a01b03161480611d5757506000818152606660205260409020600401546001600160a01b031633145b611d735760405162461bcd60e51b815260040161098790613509565b611d7b61242f565b6001600160a01b0316306001600160a01b031614611dab5760405162461bcd60e51b81526004016109879061361f565b6000838152606660205260409020548314611dd85760405162461bcd60e51b8152600401610987906134a6565b6000838152606660205260409020600a015460ff1615611e0a5760405162461bcd60e51b815260040161098790613594565b600083815260666020908152604090912083519091611e30916005840191860190612ef6565b50604051339085907ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a90600090a350505050565b33611e6d61240f565b6001600160a01b031614611e935760405162461bcd60e51b815260040161098790613509565b611e9b61242f565b6001600160a01b0316306001600160a01b031614611ecb5760405162461bcd60e51b81526004016109879061361f565b8181600082118015611edd5750600081115b611f1d5760405162461bcd60e51b815260206004820152601160248201527007374617274206f7220656e64206973203607c1b6044820152606401610987565b818111611f5b5760405162461bcd60e51b815260206004820152600c60248201526b1cdd185c9d080f8f48195b9960a21b6044820152606401610987565b6000858152606660205260409020548514611f885760405162461bcd60e51b8152600401610987906134a6565b6000858152606660205260409020600a015460ff1615611fba5760405162461bcd60e51b815260040161098790613594565b600160008681526066602052604090206009015414611feb5760405162461bcd60e51b8152600401610987906135f6565b600085815260666020526040902060018101859055600280820185905560098201556040518490869088907fd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c590600090a4505050505050565b600061204e612705565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b3361208f61240f565b6001600160a01b0316146120b55760405162461bcd60e51b815260040161098790613509565b6120bd61242f565b6001600160a01b0316306001600160a01b0316146120ed5760405162461bcd60e51b81526004016109879061361f565b6120fe8b8989898989898989612a11565b61211a5760405162461bcd60e51b815260040161098790613644565b6121268c8c8c8c61244a565b6121a06040518061014001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160008152602001600081525090565b8c8160000181815250508881602001906001600160a01b031690816001600160a01b0316815250508781604001906001600160a01b031690816001600160a01b0316815250508681606001906001600160a01b031690816001600160a01b0316815250508581608001906001600160a01b031690816001600160a01b031681525050848160a00181905250838160c00181905250828160e00181905250818161010001818152505080606760008f81526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005019080519060200190612336929190612ef6565b5060c08201518051612352916006840191602090910190612ef6565b5060e0820151805161236e916007840191602090910190612ef6565b5061010082015160088201556101209091015160099091015550505050505050505050505050565b61239e61271d565b6001600160a01b0381166124035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610987565b61240c81612856565b50565b6000610c497111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612e73565b6000610c496c42616c6c6f7453746f7261676560981b612e73565b8180612454610bcf565b11156124a25760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610987565b6124aa612044565b8111156124f95760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610987565b6000858152606660205260409020548514156125505760405162461bcd60e51b8152602060048201526016602482015275105b1c9958591e48195e1a5cdd19590818985b1b1bdd60521b6044820152606401610987565b6125bf6040518061018001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525090565b858152606081018590526001600160a01b0383166080820152600161012082015260006101408201819052610160820185905286815260666020908152604091829020835181558184015160018201559183015160028301556060830151600383015560808301516004830180546001600160a01b0319166001600160a01b0390921691909117905560a08301518051849392612663926005850192910190612ef6565b5060c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a8201805460ff191691151591909117905561016090910151600b90910155606d546126c2906001613715565b606d556040516001600160a01b03841690869088907fd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b90600090a4505050505050565b6000610c4969456e7653746f7261676560b01b612e73565b6033546001600160a01b031633146114655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610987565b6000600584146127995760405162461bcd60e51b815260040161098790613567565b826127f05760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c65206e616d6044820152606560f81b6064820152608401610987565b600082511161284c5760405162461bcd60e51b815260206004820152602260248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c652076616c604482015261756560f01b6064820152608401610987565b5060019392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018214806128b75750600282145b6128f65760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610987565b60008481526066602052604090205484146129235760405162461bcd60e51b8152600401610987906134a6565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156129865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610987565b6000848152606660209081526040808320606b83528184206001600160a01b0388168552909252909120805460ff1916600190811790915560068201546129cc91613715565b600682015560018314156129f4578181600701546129ea9190613715565b6007820155612a0a565b818160080154612a049190613715565b60088201555b5050505050565b600060018a10158015612a25575060038a11155b612a415760405162461bcd60e51b815260040161098790613567565b60028a1415612c01576001600160a01b038916612a705760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b03881615612a975760405162461bcd60e51b815260040161098790613530565b6001600160a01b03871615612abe5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b03861615612ae55760405162461bcd60e51b8152600401610987906134d2565b845115612b2c5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610987565b835115612b715760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610987565b825115612bb65760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610987565b8115612bfc5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610987565b612e63565b6000855111612c4a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610987565b8351604014612c915760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610987565b6000835111612cd85760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610987565b60008211612d205760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610987565b60018a1415612dc2576001600160a01b03891615612d505760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b038816612d765760405162461bcd60e51b815260040161098790613530565b6001600160a01b038716612d9c5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b038616612bfc5760405162461bcd60e51b8152600401610987906134d2565b60038a1415612e63576001600160a01b038916612df15760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b038816612e175760405162461bcd60e51b815260040161098790613530565b6001600160a01b038716612e3d5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b038616612e635760405162461bcd60e51b8152600401610987906134d2565b5060019998505050505050505050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612eb857600080fd5b505afa158015612ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef09190613050565b92915050565b828054612f029061373b565b90600052602060002090601f016020900481019282612f245760008555612f6a565b82601f10612f3d57805160ff1916838001178555612f6a565b82800160010185558215612f6a579182015b82811115612f6a578251825591602001919060010190612f4f565b50612f76929150612f7a565b5090565b5b80821115612f765760008155600101612f7b565b8035612f9a8161378c565b919050565b600082601f830112612fb057600080fd5b813567ffffffffffffffff80821115612fcb57612fcb613776565b604051601f8301601f19908116603f01168101908282118183101715612ff357612ff3613776565b8160405283815286602085880101111561300c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561303e57600080fd5b81356130498161378c565b9392505050565b60006020828403121561306257600080fd5b81516130498161378c565b60006020828403121561307f57600080fd5b5035919050565b60006020828403121561309857600080fd5b5051919050565b600080604083850312156130b257600080fd5b82359150602083013567ffffffffffffffff8111156130d057600080fd5b6130dc85828601612f9f565b9150509250929050565b600080604083850312156130f957600080fd5b50508035926020909101359150565b600080600080600060a0868803121561312057600080fd5b853594506020860135935060408601356131398161378c565b94979396509394606081013594506080013592915050565b60008060006060848603121561316657600080fd5b505081359360208301359350604090920135919050565b600080600080600060a0868803121561319557600080fd5b85359450602086013593506040860135925060608601356131b58161378c565b915060808601356131c58161378c565b809150509295509295909350565b6000806000806000806000806000806000806101808d8f0312156131f657600080fd5b8c359b5060208d01359a5060408d0135995061321460608e01612f8f565b985061322260808e01612f8f565b975061323060a08e01612f8f565b965061323e60c08e01612f8f565b955061324c60e08e01612f8f565b945067ffffffffffffffff6101008e0135111561326857600080fd5b6132798e6101008f01358f01612f9f565b935067ffffffffffffffff6101208e0135111561329557600080fd5b6132a68e6101208f01358f01612f9f565b925067ffffffffffffffff6101408e013511156132c257600080fd5b6132d38e6101408f01358f01612f9f565b91506101608d013590509295989b509295989b509295989b565b600080600080600080600060e0888a03121561330857600080fd5b87359650602088013595506040880135945060608801356133288161378c565b93506080880135925060a0880135915060c088013567ffffffffffffffff81111561335257600080fd5b61335e8a828b01612f9f565b91505092959891949750929550565b6000806040838503121561338057600080fd5b823566ffffffffffffff8116811461339757600080fd5b915060208301356133a78161378c565b809150509250929050565b6000815180845260005b818110156133d8576020818501810151868301820152016133bc565b818111156133ea576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038a8116825289811660208301528881166040830152871660608201526101206080820181905260009061343c838201896133b2565b905082810360a084015261345081886133b2565b905082810360c084015261346481876133b2565b60e084019590955250506101000152979650505050505050565b83815282602082015260606040820152600061349d60608301846133b2565b95945050505050565b6020808252601290820152711b9bdd08195e1a5cdd19590810985b1b1bdd60721b604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207265776172642061646472657373000000000000604082015260600190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207374616b65722061646472657373000000000000604082015260600190565b602080825260139082015272496e76616c69642042616c6c6f74205479706560681b604082015260600190565b602080825260119082015270185b1c9958591e48199a5b985b1a5e9959607a1b604082015260600190565b6020808252601a908201527f496e76616c6964206f6c64207374616b65722061646472657373000000000000604082015260600190565b6020808252600f908201526e4e6f7420526561647920537461746560881b604082015260600190565b6020808252600b908201526a125cc8111a5cd8589b195960aa1b604082015260600190565b60208082526011908201527024b73b30b634b2102830b930b6b2ba32b960791b604082015260600190565b60208082526019908201527f496e76616c6964206e657720766f746572206164647265737300000000000000604082015260600190565b60006101608d83528c60208401528b604084015260018060a01b038b1660608401528060808401526136da8184018b6133b2565b60a0840199909952505060c081019590955260e085019390935261010084019190915215156101208301526101409091015295945050505050565b6000821982111561373657634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061374f57607f821691505b6020821081141561377057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461240c57600080fdfea264697066735822122093b350b4e7739704fca6953d73448f06b7d3a325e6ae0e376a14d07e6cb03c8c64736f6c63430008060033"; +var BallotStorage_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"}],"name":"BallotCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ballotType","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"BallotCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"state","type":"uint256"}],"name":"BallotFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"BallotStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"updatedBy","type":"address"}],"name":"BallotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"}],"name":"SetPrevBallotStorage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"voteid","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"decision","type":"uint256"}],"name":"Voted","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"}],"name":"cancelBallot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_ballotType","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_newGovernanceAddress","type":"address"}],"name":"createBallotForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_ballotType","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_oldStakerAddress","type":"address"},{"internalType":"address","name":"_newStakerAddress","type":"address"},{"internalType":"address","name":"_newVoterAddress","type":"address"},{"internalType":"address","name":"_newRewardAddress","type":"address"},{"internalType":"bytes","name":"_newNodeName","type":"bytes"},{"internalType":"bytes","name":"_newNodeId","type":"bytes"},{"internalType":"bytes","name":"_newNodeIp","type":"bytes"},{"internalType":"uint256","name":"_newNodePort","type":"uint256"}],"name":"createBallotForMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_ballotType","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes32","name":"_envVariableName","type":"bytes32"},{"internalType":"uint256","name":"_envVariableType","type":"uint256"},{"internalType":"bytes","name":"_envVariableValue","type":"bytes"}],"name":"createBallotForVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"},{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"uint256","name":"_decision","type":"uint256"},{"internalType":"uint256","name":"_power","type":"uint256"}],"name":"createVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_ballotState","type":"uint256"}],"name":"finalizeBallot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotAddress","outputs":[{"internalType":"address","name":"newGovernanceAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotBasic","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"ballotType","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"totalVoters","type":"uint256"},{"internalType":"uint256","name":"powerOfAccepts","type":"uint256"},{"internalType":"uint256","name":"powerOfRejects","type":"uint256"},{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"bool","name":"isFinalized","type":"bool"},{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotMember","outputs":[{"internalType":"address","name":"oldStakerAddress","type":"address"},{"internalType":"address","name":"newStakerAddress","type":"address"},{"internalType":"address","name":"newVoterAddress","type":"address"},{"internalType":"address","name":"newRewardAddress","type":"address"},{"internalType":"bytes","name":"newNodeName","type":"bytes"},{"internalType":"bytes","name":"newNodeId","type":"bytes"},{"internalType":"bytes","name":"newNodeIp","type":"bytes"},{"internalType":"uint256","name":"newNodePort","type":"uint256"},{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotPeriod","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotState","outputs":[{"internalType":"uint256","name":"ballotType","type":"uint256"},{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"bool","name":"isFinalized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotVariable","outputs":[{"internalType":"bytes32","name":"envVariableName","type":"bytes32"},{"internalType":"uint256","name":"envVariableType","type":"uint256"},{"internalType":"bytes","name":"envVariableValue","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotVotingInfo","outputs":[{"internalType":"uint256","name":"totalVoters","type":"uint256"},{"internalType":"uint256","name":"powerOfAccepts","type":"uint256"},{"internalType":"uint256","name":"powerOfRejects","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreviousBallotStorage","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"}],"name":"getVote","outputs":[{"internalType":"uint256","name":"voteId","type":"uint256"},{"internalType":"uint256","name":"ballotId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"decision","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint56","name":"_ballotId","type":"uint56"},{"internalType":"address","name":"_voter","type":"address"}],"name":"hasAlreadyVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setPreviousBallotStorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"startBallot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"updateBallotDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_lockAmount","type":"uint256"}],"name":"updateBallotMemberLockAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"bytes","name":"_memo","type":"bytes"}],"name":"updateBallotMemo","outputs":[],"stateMutability":"nonpayable","type":"function"}]); + +function BallotStorage_new() { + return BallotStorage_contract.new( + { + from: web3.eth.accounts[0], + data: BallotStorage_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function BallotStorage_load(addr) { + return BallotStorage_contract.at(addr); +} +var EnvStorage_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a65c62f31a2c1fba0806287df9b2b67e8061271bff228f6d5e0129a412464b0764736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var EnvStorage_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); + +function EnvStorage_new() { + return EnvStorage_contract.new( + { + from: web3.eth.accounts[0], + data: EnvStorage_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function EnvStorage_load(addr) { + return EnvStorage_contract.at(addr); +} +var EnvStorageImp_data = "0x60a06040523060601b6080523480156200001857600080fd5b506200002362000029565b620000ea565b603854610100900460ff1615620000965760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60385460ff90811614620000e8576038805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c61369c6200011760003960008181611a1f01528181611aa40152611b7c015261369c6000f3fe6080604052600436106104e05760003560e01c80636fde207a11610281578063a6ed563e1161015a578063c42a0abc116100cc578063e078869f11610085578063e078869f146113d0578063ec3df879146113f0578063f2fde38b14611410578063f38ecf4714611430578063f6fd712914611452578063f82145911461147257600080fd5b8063c42a0abc146112a7578063c6713baf146112db578063c7d3da341461130f578063c95437be14611343578063cdb9f6431461138e578063dc97d962146113a357600080fd5b8063b4d6bd3b1161011e578063b4d6bd3b146111d6578063bd02d0f5146111f6578063be33732a14611223578063c00ace6c14611243578063c031a18014611265578063c0b4fe151461128557600080fd5b8063a6ed563e1461111b578063a91ee0dc14611148578063a9b629b214611168578063aba01fee1461118a578063b128f880146111b457600080fd5b80638c8b887e116101f35780639801bff9116101b75780639801bff914611036578063986e791a146110565780639986e4b914611083578063a36f259b146110a7578063a5d6a581146110c7578063a6868b7d146110e757600080fd5b80638c8b887e14610ee45780638d5cdd7e14610f045780638da5cb5b14610f245780638f6fe72514610f42578063918f86741461102057600080fd5b8063738fdd1a11610245578063738fdd1a14610e0f57806379e8585914610e2f5780637b2bfb0114610e4f5780637bf4653014610e83578063852cf38f14610ea457806388c2801914610ec457600080fd5b80636fde207a14610d4d5780636fe1317714610d6f578063715018a614610d8f57806371c6960d14610da4578063737c59b814610dc457600080fd5b806334125c84116103be5780634bd1ed76116103305780635dba8c4a116102e95780635dba8c4a14610b985780636167eb4514610be3578063656e305214610c1757806367d1a2e014610c4b5780636c78d2cf14610d025780636d583ca714610d2b57600080fd5b80634bd1ed7614610ad65780634d273e2814610af85780634f1ef28614610b2c57806352d1902d14610b3f578063539927be14610b545780635a731cca14610b7457600080fd5b80633d4c65f3116103825780633d4c65f314610a145780633e8daafe14610a345780633f35c8fe14610a54578063408d79cf14610a7657806344b8991414610a9657806345b5ec2914610ab657600080fd5b806334125c84146109275780633659cfe6146109475780633690057a1461096757806338294419146109b25780633848207a146109d457600080fd5b806321f8a721116104575780632eccd8321161041b5780632eccd832146108105780632ed19cd5146108305780632f40992e146108505780633305508e1461087157806333be496e1461089157806333e31184146108dc57600080fd5b806321f8a721146106ef578063238737b61461073d578063278bb12a146107715780632b2eaa92146107a55780632eb57c65146107f057600080fd5b80630fc238bf116104a95780630fc238bf146105db5780630fca11d2146105fb578063124cea371461061b578063185582f11461063b5780631b27e01b146106865780631e0cba0d146106d157600080fd5b806215a73b146104e5578063076cd77f1461051a5780630add66dd146105655780630b1d39b8146105875780630b90a39a146105bb575b600080fd5b3480156104f157600080fd5b5061050760008051602061354083398151915281565b6040519081526020015b60405180910390f35b34801561052657600080fd5b506000805160206135a083398151915260005260026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa69054610507565b34801561057157600080fd5b50610585610580366004613264565b611497565b005b34801561059357600080fd5b506105077fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b3480156105c757600080fd5b506105856105d63660046131e9565b6115ed565b3480156105e757600080fd5b506105856105f63660046131e9565b61162d565b34801561060757600080fd5b50610585610616366004613264565b61166a565b34801561062757600080fd5b506105856106363660046131e9565b61172f565b34801561064757600080fd5b5060008051602061350083398151915260005260026020527fbc779bbce8d4fef90926dc39b56d9135e8e3795964b3adae769767961d4a94d854610507565b34801561069257600080fd5b5060008051602061354083398151915260005260026020527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b54610507565b3480156106dd57600080fd5b50610507665374616b696e6760c81b81565b3480156106fb57600080fd5b5061072561070a366004613186565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610511565b34801561074957600080fd5b506105077f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561077d57600080fd5b506105077f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b3480156107b157600080fd5b5060008051602061358083398151915260005260026020527f270fb31b28afd06ad35288bc3cb901686a4c5a15239e966fd9b64269abd226c354610507565b3480156107fc57600080fd5b5061058561080b366004613186565b61176c565b34801561081c57600080fd5b5061058561082b3660046131e9565b6117b3565b34801561083c57600080fd5b5061058561084b366004613186565b6117f0565b34801561085c57600080fd5b506105076914995dd85c99141bdbdb60b21b81565b34801561087d57600080fd5b5061058561088c366004613186565b611837565b34801561089d57600080fd5b5060008051602061362783398151915260005260026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a4017554610507565b3480156108e857600080fd5b5060008051602061352083398151915260005260026020527ff3497fe1496bfc19eaef6d253f75ec2e9cfe1b4f6080c29192641567c6fc5d8754610507565b34801561093357600080fd5b506105076845636f73797374656d60b81b81565b34801561095357600080fd5b50610585610962366004613028565b61187e565b34801561097357600080fd5b5060008051602061360783398151915260005260026020527f14e650c949c7cc3fca2efe79b3711fc734b4df488cc27c4137f35bd0adaae7fa54610507565b3480156109be57600080fd5b5061050760008051602061358083398151915281565b3480156109e057600080fd5b50610a046109ef366004613186565b60009081526020819052604090205460ff1690565b6040519015158152602001610511565b348015610a2057600080fd5b50610585610a2f3660046131e9565b6118d8565b348015610a4057600080fd5b50610585610a4f3660046131e9565b611915565b348015610a6057600080fd5b5061050760008051602061360783398151915281565b348015610a8257600080fd5b50610585610a913660046131e9565b611952565b348015610aa257600080fd5b50610585610ab13660046131e9565b61198f565b348015610ac257600080fd5b50610585610ad13660046131e9565b6119cc565b348015610ae257600080fd5b506105076a4d61696e74656e616e636560a81b81565b348015610b0457600080fd5b506105077f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b610585610b3a366004613136565b611a14565b348015610b4b57600080fd5b50610507611b6f565b348015610b6057600080fd5b50610585610b6f366004613062565b611c22565b348015610b8057600080fd5b506105076c14dd185ada5b99d4995dd85c99609a1b81565b348015610ba457600080fd5b5060008051602061356083398151915260005260026020527f38eb620cc1355554391bc9d0c224a726d66edf7c3eb2d67af166d6e81fe4456254610507565b348015610bef57600080fd5b506105077f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b348015610c2357600080fd5b506105077fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b348015610c5757600080fd5b5060026020527fc77500645c8acbf6137a0e04460f85359483e3b08db30285cca2957db0c90904547fca55256fa8d248a334a7cb4ca72d9aec97700e81b3784b43c388b9a8d0e2b8e3547f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df08886000527fba5524e01c8da4a46e6f70a8f29f4dc63d299ad01d2f01ccae9666cb85f6f7c05460408051938452602084019290925290820152606001610511565b348015610d0e57600080fd5b506105077111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b348015610d3757600080fd5b5061050760008051602061362783398151915281565b348015610d5957600080fd5b506105076000805160206135a083398151915281565b348015610d7b57600080fd5b50610585610d8a366004613186565b611eba565b348015610d9b57600080fd5b50610585611f01565b348015610db057600080fd5b50610585610dbf3660046131e9565b611f15565b348015610dd057600080fd5b506000805160206134e083398151915260005260026020527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54610507565b348015610e1b57600080fd5b50609d54610725906001600160a01b031681565b348015610e3b57600080fd5b50610585610e4a366004613186565b611f52565b348015610e5b57600080fd5b506105077f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610e8f57600080fd5b5061050769456e7653746f7261676560b01b81565b348015610eb057600080fd5b50610585610ebf366004613186565b611f99565b348015610ed057600080fd5b50610585610edf3660046131b8565b611fe0565b348015610ef057600080fd5b50610585610eff3660046131e9565b61215e565b348015610f1057600080fd5b50610585610f1f36600461321e565b6121b4565b348015610f3057600080fd5b50606b546001600160a01b0316610725565b348015610f4e57600080fd5b5060026020527fe6679752544e0074a1c9bec26775117fd40d133ce43cc443fb5f2512ebd7c2af547f89fc1b873e9ef0767cf41719c69200c3f894c43d73c49eb537ca60ec0a2d14bc547fa04c555f883d07b5c5fe85061c632b6bfec696b67afa8ad5e9773b89249984b2547fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d6000527f286a480438fb7eb9f5465ec436e6de865b71284ceb2be7ff1cea98f38c26308254604080519485526020850193909352918301526060820152608001610511565b34801561102c57600080fd5b5061050761271081565b34801561104257600080fd5b50610a046110513660046131b8565b612289565b34801561106257600080fd5b50611076611071366004613186565b6123ea565b6040516105119190613314565b34801561108f57600080fd5b506105076c42616c6c6f7453746f7261676560981b81565b3480156110b357600080fd5b506105856110c2366004613186565b61248c565b3480156110d357600080fd5b506105856110e23660046131e9565b6124d3565b3480156110f357600080fd5b506105077f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b34801561112757600080fd5b50610507611136366004613186565b60009081526006602052604090205490565b34801561115457600080fd5b50610585611163366004613028565b612510565b34801561117457600080fd5b5061050760008051602061356083398151915281565b34801561119657600080fd5b5061119f6125b8565b60408051928352602083019190915201610511565b3480156111c057600080fd5b5061050760008051602061350083398151915281565b3480156111e257600080fd5b506105856111f136600461321e565b612622565b34801561120257600080fd5b50610507611211366004613186565b60009081526002602052604090205490565b34801561122f57600080fd5b5061058561123e3660046131e9565b6126f9565b34801561124f57600080fd5b506105076000805160206134e083398151915281565b34801561127157600080fd5b50611076611280366004613186565b612748565b34801561129157600080fd5b5061050760008051602061352083398151915281565b3480156112b357600080fd5b506105077fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b3480156112e757600080fd5b506105077fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b34801561131b57600080fd5b506105077f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b34801561134f57600080fd5b5060008051602061364783398151915260005260026020527f38ddebd16170f2328156b72e009b30efe6e74a1b9fc4389d05f50efa2a42c6f854610507565b34801561139a57600080fd5b5061119f612765565b3480156113af57600080fd5b506105076113be366004613186565b60009081526001602052604090205490565b3480156113dc57600080fd5b506105856113eb3660046131e9565b6127cb565b3480156113fc57600080fd5b5061058561140b366004613186565b61280e565b34801561141c57600080fd5b5061058561142b366004613028565b612855565b34801561143c57600080fd5b5061050760008051602061364783398151915281565b34801561145e57600080fd5b5061058561146d366004613186565b6128cb565b34801561147e57600080fd5b5061058561148d366004613186565b612912565b905090565b336114a0612959565b6001600160a01b0316146114cf5760405162461bcd60e51b81526004016114c690613327565b60405180910390fd5b61271081836114de86886133ee565b6114e891906133ee565b6114f291906133ee565b1461153f5760405162461bcd60e51b815260206004820152601e60248201527f57726f6e6720726577617264206469737472756274696f6e20726174696f000060448201526064016114c6565b6115697fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6085612979565b6115937f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505084612979565b6115bd7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa83612979565b6115e77fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d82612979565b50505050565b336115f6612959565b6001600160a01b03161461161c5760405162461bcd60e51b81526004016114c690613327565b61162a61146d826020015190565b50565b33611636612959565b6001600160a01b03161461165c5760405162461bcd60e51b81526004016114c690613327565b61162a61140b826020015190565b33611673612959565b6001600160a01b0316146116995760405162461bcd60e51b81526004016114c690613327565b6116c37f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27885612979565b6116ed7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747384612979565b6117177f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088883612979565b6115e760008051602061364783398151915282612979565b33611738612959565b6001600160a01b03161461175e5760405162461bcd60e51b81526004016114c690613327565b61162a6110c2826020015190565b33611775612959565b6001600160a01b03161461179b5760405162461bcd60e51b81526004016114c690613327565b61162a6000805160206135a083398151915282612979565b336117bc612959565b6001600160a01b0316146117e25760405162461bcd60e51b81526004016114c690613327565b61162a61148d826020015190565b336117f9612959565b6001600160a01b03161461181f5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061356083398151915282612979565b33611840612959565b6001600160a01b0316146118665760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061352083398151915282612979565b6118866129c8565b6118a181604051806020016040528060008152506000612a22565b6040516001600160a01b038216907f2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea970890600090a250565b336118e1612959565b6001600160a01b0316146119075760405162461bcd60e51b81526004016114c690613327565b61162a61084b826020015190565b3361191e612959565b6001600160a01b0316146119445760405162461bcd60e51b81526004016114c690613327565b61162a610e4a826020015190565b3361195b612959565b6001600160a01b0316146119815760405162461bcd60e51b81526004016114c690613327565b61162a610d8a826020015190565b33611998612959565b6001600160a01b0316146119be5760405162461bcd60e51b81526004016114c690613327565b61162a61088c826020015190565b336119d5612959565b6001600160a01b0316146119fb5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151611a0f8282612622565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611aa25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016114c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611aeb6000805160206135c0833981519152546001600160a01b031690565b6001600160a01b031614611b565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016114c6565b611b5f82612b9c565b611b6b82826001612a22565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c0f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016114c6565b506000805160206135c083398151915290565b603854610100900460ff1615808015611c425750603854600160ff909116105b80611c5c5750303b158015611c5c575060385460ff166001145b611cbf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016114c6565b6038805460ff191660011790558015611ce2576038805461ff0019166101001790555b6000805160206135c0833981519152546001600160a01b0385811691161415611d635760405162461bcd60e51b815260206004820152602d60248201527f72656769737472792073686f756c64206e6f742062652073616d65206173206960448201526c36b83632b6b2b73a30ba34b7b760991b60648201526084016114c6565b611d6b612bcb565b611d7484612510565b60005b8251811015611e6e576000611db1858381518110611d9757611d9761349e565b602002602001015160009081526002602052604090205490565b9050838281518110611dc557611dc561349e565b60200260200101516000141580611ddb57508015155b611e1a5760405162461bcd60e51b815260206004820152601060248201526f696e76616c6964207661726961626c6560801b60448201526064016114c6565b80611e5b57611e5b858381518110611e3457611e3461349e565b6020026020010151858481518110611e4e57611e4e61349e565b6020026020010151612979565b5080611e668161346d565b915050611d77565b5080156115e7576038805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b33611ec3612959565b6001600160a01b031614611ee95760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061364783398151915282612979565b611f096129c8565b611f136000612bfa565b565b33611f1e612959565b6001600160a01b031614611f445760405162461bcd60e51b81526004016114c690613327565b61162a61080b826020015190565b33611f5b612959565b6001600160a01b031614611f815760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061360783398151915282612979565b33611fa2612959565b6001600160a01b031614611fc85760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061354083398151915282612979565b600080516020613607833981519152821415611fff57611b6b81611915565b7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e782141561203057611b6b816119cc565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b82141561206157611b6b816127cb565b60008051602061350083398151915282141561208057611b6b816115ed565b60008051602061352083398151915282141561209f57611b6b8161198f565b6000805160206135608339815191528214156120be57611b6b816118d8565b6000805160206135808339815191528214156120dd57611b6b8161162d565b7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2282141561210e57611b6b8161215e565b7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc82141561213f57611b6b816126f9565b600080516020613647833981519152821415611b6b57611b6b81611952565b33612167612959565b6001600160a01b03161461218d5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151606083015160808401516121ad84848484611497565b5050505050565b336121bd612959565b6001600160a01b0316146121e35760405162461bcd60e51b81526004016114c690613327565b808211156122595760405162461bcd60e51b815260206004820152603e60248201527f4d696e696d756d207374616b696e67206d75737420626520736d616c6c65722060448201527f616e6420657175616c207468616e206d6178696d756d207374616b696e67000060648201526084016114c6565b6122716000805160206135a083398151915283612979565b611b6b6000805160206134e083398151915282612979565b60007f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2283141561231557600080600080858060200190518101906122cd9190613296565b9350935093509350612710818385876122e691906133ee565b6122f091906133ee565b6122fa91906133ee565b1461230c5760009450505050506123e4565b505050506123e0565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b83148061236257507fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e783145b1561239c576000808380602001905181019061237e9190613240565b9150915080821115612395576000925050506123e4565b50506123e0565b6000805160206135208339815191528314156123e0576000828060200190518101906123c8919061319f565b90506103e88110156123de5760009150506123e4565b505b5060015b92915050565b600081815260036020526040902080546060919061240790613432565b80601f016020809104026020016040519081016040528092919081815260200182805461243390613432565b80156124805780601f1061245557610100808354040283529160200191612480565b820191906000526020600020905b81548152906001019060200180831161246357829003601f168201915b50505050509050919050565b33612495612959565b6001600160a01b0316146124bb5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061362783398151915282612979565b336124dc612959565b6001600160a01b0316146125025760405162461bcd60e51b81526004016114c690613327565b61162a610ebf826020015190565b6125186129c8565b6001600160a01b03811661256e5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016114c6565b609d80546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b60026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa690546000805160206134e083398151915260009081527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54909182915b915091509091565b3361262b612959565b6001600160a01b0316146126515760405162461bcd60e51b81526004016114c690613327565b808211156126c9576040805162461bcd60e51b81526020600482015260248101919091527f4d696e696d756d206475726174696f6e206d75737420626520736d616c6c657260448201527f20616e6420657175616c207468616e206d6178696d756d206475726174696f6e60648201526084016114c6565b6126e160008051602061362783398151915283612979565b611b6b60008051602061354083398151915282612979565b33612702612959565b6001600160a01b0316146127285760405162461bcd60e51b81526004016114c690613327565b60208101516040820151606083015160808401516121ad8484848461166a565b600081815260056020526040902080546060919061240790613432565b60026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a401755460008051602061354083398151915260009081527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b549091829161261a565b336127d4612959565b6001600160a01b0316146127fa5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151611a0f82826121b4565b33612817612959565b6001600160a01b03161461283d5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061358083398151915282612979565b61285d6129c8565b6001600160a01b0381166128c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016114c6565b61162a81612bfa565b336128d4612959565b6001600160a01b0316146128fa5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061350083398151915282612979565b3361291b612959565b6001600160a01b0316146129415760405162461bcd60e51b81526004016114c690613327565b61162a6000805160206134e083398151915282612979565b60006114927111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612c4c565b6000828152600260205260409020819055817f58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612826040516129bc91815260200190565b60405180910390a25050565b606b546001600160a01b03163314611f135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016114c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612a5557611a0f83612cc9565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8e57600080fd5b505afa925050508015612abe575060408051601f3d908101601f19168201909252612abb9181019061319f565b60015b612b215760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016114c6565b6000805160206135c08339815191528114612b905760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016114c6565b50611a0f838383612d65565b33612ba5612959565b6001600160a01b03161461162a5760405162461bcd60e51b81526004016114c690613327565b603854610100900460ff16612bf25760405162461bcd60e51b81526004016114c69061334e565b611f13612d8a565b606b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609d54604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612c9157600080fd5b505afa158015612ca5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e49190613045565b6001600160a01b0381163b612d365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016114c6565b6000805160206135c083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612d6e83612dba565b600082511180612d7b5750805b15611a0f576115e78383612dfa565b603854610100900460ff16612db15760405162461bcd60e51b81526004016114c69061334e565b611f1333612bfa565b612dc381612cc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612e1f83836040518060600160405280602781526020016135e060279139612e26565b9392505050565b6060600080856001600160a01b031685604051612e4391906132f8565b600060405180830381855af49150503d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b5091509150612e9486838387612e9e565b9695505050505050565b60608315612f0a578251612f03576001600160a01b0385163b612f035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016114c6565b5081612f14565b612f148383612f1c565b949350505050565b815115612f2c5781518083602001fd5b8060405162461bcd60e51b81526004016114c69190613314565b600082601f830112612f5757600080fd5b81356020612f6c612f67836133ca565b613399565b80838252828201915082860187848660051b8901011115612f8c57600080fd5b60005b85811015612fab57813584529284019290840190600101612f8f565b5090979650505050505050565b600082601f830112612fc957600080fd5b813567ffffffffffffffff811115612fe357612fe36134b4565b612ff6601f8201601f1916602001613399565b81815284602083860101111561300b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561303a57600080fd5b8135612e1f816134ca565b60006020828403121561305757600080fd5b8151612e1f816134ca565b60008060006060848603121561307757600080fd5b8335613082816134ca565b925060208481013567ffffffffffffffff808211156130a057600080fd5b818701915087601f8301126130b457600080fd5b81356130c2612f67826133ca565b8082825285820191508585018b878560051b88010111156130e257600080fd5b600095505b838610156131055780358352600195909501949186019186016130e7565b5096505050604087013592508083111561311e57600080fd5b505061312c86828701612f46565b9150509250925092565b6000806040838503121561314957600080fd5b8235613154816134ca565b9150602083013567ffffffffffffffff81111561317057600080fd5b61317c85828601612fb8565b9150509250929050565b60006020828403121561319857600080fd5b5035919050565b6000602082840312156131b157600080fd5b5051919050565b600080604083850312156131cb57600080fd5b82359150602083013567ffffffffffffffff81111561317057600080fd5b6000602082840312156131fb57600080fd5b813567ffffffffffffffff81111561321257600080fd5b612f1484828501612fb8565b6000806040838503121561323157600080fd5b50508035926020909101359150565b6000806040838503121561325357600080fd5b505080516020909101519092909150565b6000806000806080858703121561327a57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080608085870312156132ac57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081518084526132e4816020860160208601613406565b601f01601f19169290920160200192915050565b6000825161330a818460208701613406565b9190910192915050565b602081526000612e1f60208301846132cc565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156133c2576133c26134b4565b604052919050565b600067ffffffffffffffff8211156133e4576133e46134b4565b5060051b60200190565b6000821982111561340157613401613488565b500190565b60005b83811015613421578181015183820152602001613409565b838111156115e75750506000910152565b600181811c9082168061344657607f821691505b6020821081141561346757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561348157613481613488565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461162a57600080fdfe18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb8829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b80578086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c10c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c3be90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65642a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd2c69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2fa26469706673582212203d0d7c516c225a1e9e44eb3f1a97e1ac44225723acf753cea15775b46f46d18d64736f6c63430008060033"; +var EnvStorageImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_value","type":"address"}],"name":"AddressVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"_value","type":"bytes32"}],"name":"Bytes32VarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_value","type":"bytes"}],"name":"BytesVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"int256","name":"_value","type":"int256"}],"name":"IntVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"string","name":"_value","type":"string"}],"name":"StringVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"UintVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"UpgradeImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"string","name":"_value","type":"string"}],"name":"VarableChanged","type":"event"},{"inputs":[],"name":"BALLOT_DURATION_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_FEE_MAX_CHANGE_RATE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKS_PER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_CREATION_TIME_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_GASLIMIT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_AMOUNT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_MAINTANANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GASLIMIT_AND_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_TARGET_PERCENTAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IDLE_BLOCK_INTERVAL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRIORITY_FEE_PER_GAS_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"envKey","type":"bytes32"},{"internalType":"bytes","name":"envVal","type":"bytes"}],"name":"checkVariableCondition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotDurationMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotDurationMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotDurationMinMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockCreationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockRewardDistributionMethod","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlocksPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBoolean","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasLimitAndBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getInt","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxIdleBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxPriorityFeePerGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingMinMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_registry","type":"address"},{"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"internalType":"uint256[]","name":"infos","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBallotDurationMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBallotDurationMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBallotDurationMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBallotDurationMinByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setBallotDurationMinMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBallotDurationMinMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBlockCreationTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlockCreationTimeByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBlockRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlockRewardAmountByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block_producer","type":"uint256"},{"internalType":"uint256","name":"_staking_reward","type":"uint256"},{"internalType":"uint256","name":"_ecofund","type":"uint256"},{"internalType":"uint256","name":"_maintanance","type":"uint256"}],"name":"setBlockRewardDistributionMethod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlockRewardDistributionMethodByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBlocksPer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlocksPerByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block_GasLimit","type":"uint256"},{"internalType":"uint256","name":"_baseFeeMaxChangeRate","type":"uint256"},{"internalType":"uint256","name":"_gasTargetPercentage","type":"uint256"},{"internalType":"uint256","name":"_maxBaseFee","type":"uint256"}],"name":"setGasLimitAndBaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setGasLimitAndBaseFeeByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxBaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setMaxBaseFeeByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxIdleBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setMaxIdleBlockIntervalByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxPriorityFeePerGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setMaxPriorityFeePerGasByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setStakingMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setStakingMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setStakingMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setStakingMinByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setStakingMinMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setStakingMinMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"envKey","type":"bytes32"},{"internalType":"bytes","name":"envVal","type":"bytes"}],"name":"setVariable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]); + +function EnvStorageImp_new() { + return EnvStorageImp_contract.new( + { + from: web3.eth.accounts[0], + data: EnvStorageImp_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function EnvStorageImp_load(addr) { + return EnvStorageImp_contract.at(addr); +} +var EternalStorage_data = "0x608060405234801561001057600080fd5b5061034c806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a6ed563e1161005b578063a6ed563e1461011b578063bd02d0f514610149578063c031a18014610169578063dc97d9621461017c57600080fd5b806321f8a721146100825780633848207a146100c8578063986e791a146100fb575b600080fd5b6100ab61009036600461025b565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100eb6100d636600461025b565b60009081526020819052604090205460ff1690565b60405190151581526020016100bf565b61010e61010936600461025b565b61019c565b6040516100bf91906102c1565b61013b61012936600461025b565b60009081526006602052604090205490565b6040519081526020016100bf565b61013b61015736600461025b565b60009081526002602052604090205490565b61010e61017736600461025b565b61023e565b61013b61018a36600461025b565b60009081526001602052604090205490565b60008181526003602052604090208054606091906101b9906102db565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906102db565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b50505050509050919050565b60008181526005602052604090208054606091906101b9906102db565b60006020828403121561026d57600080fd5b5035919050565b6000815180845260005b8181101561029a5760208185018101518683018201520161027e565b818111156102ac576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006102d46020830184610274565b9392505050565b600181811c908216806102ef57607f821691505b6020821081141561031057634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220440136bece647be28d2bce0900fbe7356621290d66623223b7b40d7694324e0e64736f6c63430008060033"; +var EternalStorage_contract = web3.eth.contract([{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBoolean","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getInt","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]); + +function EternalStorage_new() { + return EternalStorage_contract.new( + { + from: web3.eth.accounts[0], + data: EternalStorage_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function EternalStorage_load(addr) { + return EternalStorage_contract.at(addr); +} +var Staking_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a10fea0462338333c31ae085361141c74f28d2520a5fd6c61060049c7943e3e964736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var Staking_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_imp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); + +function Staking_new() { + return Staking_contract.new( + { + from: web3.eth.accounts[0], + data: Staking_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Staking_load(addr) { + return Staking_contract.at(addr); +} + +function OwnableUpgradeable_new() { + return OwnableUpgradeable_contract.new( + { + from: web3.eth.accounts[0], + data: OwnableUpgradeable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function OwnableUpgradeable_load(addr) { + return OwnableUpgradeable_contract.at(addr); +} + +function Initializable_new() { + return Initializable_contract.new( + { + from: web3.eth.accounts[0], + data: Initializable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Initializable_load(addr) { + return Initializable_contract.at(addr); +} + +function ReentrancyGuardUpgradeable_new() { + return ReentrancyGuardUpgradeable_contract.new( + { + from: web3.eth.accounts[0], + data: ReentrancyGuardUpgradeable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function ReentrancyGuardUpgradeable_load(addr) { + return ReentrancyGuardUpgradeable_contract.at(addr); +} +var AddressUpgradeable_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206b0e847059a4b7001b5ef6863728e46fc58585bdf365408604101487b61cca1e64736f6c63430008060033"; +var AddressUpgradeable_contract = web3.eth.contract([]); + +function AddressUpgradeable_new() { + return AddressUpgradeable_contract.new( + { + from: web3.eth.accounts[0], + data: AddressUpgradeable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function AddressUpgradeable_load(addr) { + return AddressUpgradeable_contract.at(addr); +} + +function ContextUpgradeable_new() { + return ContextUpgradeable_contract.new( + { + from: web3.eth.accounts[0], + data: ContextUpgradeable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function ContextUpgradeable_load(addr) { + return ContextUpgradeable_contract.at(addr); +} + +function Ownable_new() { + return Ownable_contract.new( + { + from: web3.eth.accounts[0], + data: Ownable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Ownable_load(addr) { + return Ownable_contract.at(addr); +} + +function IERC1967_new() { + return IERC1967_contract.new( + { + from: web3.eth.accounts[0], + data: IERC1967_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IERC1967_load(addr) { + return IERC1967_contract.at(addr); +} + +function IERC1822Proxiable_new() { + return IERC1822Proxiable_contract.new( + { + from: web3.eth.accounts[0], + data: IERC1822Proxiable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IERC1822Proxiable_load(addr) { + return IERC1822Proxiable_contract.at(addr); +} +var ERC1967Proxy_data = "0x6080604052604051610735380380610735833981016040819052610022916102dc565b61002e82826000610035565b505061043b565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d0838360405180606001604052806027815260200161070e602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103aa565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a0578251610299576001600160a01b0385163b6102995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102aa565b6102aa83836102b2565b949350505050565b8151156102c25781518083602001fd5b8060405162461bcd60e51b815260040161014891906103c6565b600080604083850312156102ef57600080fd5b82516001600160a01b038116811461030657600080fd5b60208401519092506001600160401b038082111561032357600080fd5b818501915085601f83011261033757600080fd5b81518181111561034957610349610425565b604051601f8201601f19908116603f0116810190838211818310171561037157610371610425565b8160405282815288602084870101111561038a57600080fd5b61039b8360208301602088016103f9565b80955050505050509250929050565b600082516103bc8184602087016103f9565b9190910192915050565b60208152600082518060208401526103e58160408501602087016103f9565b601f01601f19169190910160400192915050565b60005b838110156104145781810151838201526020016103fc565b838111156100645750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102c48061044a6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e091906101e8565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610204565b600082516101fa818460208701610237565b9190910192915050565b6020815260008251806020840152610223816040850160208701610237565b601f01601f19169190910160400192915050565b60005b8381101561025257818101518382015260200161023a565b83811115610261576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220059e761847875d75f9b210b6a55352ed3ac6fce44250ccd75e0a325e9c521e5b64736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var ERC1967Proxy_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]); + +function ERC1967Proxy_new() { + return ERC1967Proxy_contract.new( + { + from: web3.eth.accounts[0], + data: ERC1967Proxy_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function ERC1967Proxy_load(addr) { + return ERC1967Proxy_contract.at(addr); +} + +function ERC1967Upgrade_new() { + return ERC1967Upgrade_contract.new( + { + from: web3.eth.accounts[0], + data: ERC1967Upgrade_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function ERC1967Upgrade_load(addr) { + return ERC1967Upgrade_contract.at(addr); +} + +function Proxy_new() { + return Proxy_contract.new( + { + from: web3.eth.accounts[0], + data: Proxy_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Proxy_load(addr) { + return Proxy_contract.at(addr); +} + +function IBeacon_new() { + return IBeacon_contract.new( + { + from: web3.eth.accounts[0], + data: IBeacon_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function IBeacon_load(addr) { + return IBeacon_contract.at(addr); +} + +function UUPSUpgradeable_new() { + return UUPSUpgradeable_contract.new( + { + from: web3.eth.accounts[0], + data: UUPSUpgradeable_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function UUPSUpgradeable_load(addr) { + return UUPSUpgradeable_contract.at(addr); +} +var Address_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205e565b57bed130b3bed4a551be507c539301534f97d7962e91f5e757bee7fc1e64736f6c63430008060033"; +var Address_contract = web3.eth.contract([]); + +function Address_new() { + return Address_contract.new( + { + from: web3.eth.accounts[0], + data: Address_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Address_load(addr) { + return Address_contract.at(addr); +} + +function Context_new() { + return Context_contract.new( + { + from: web3.eth.accounts[0], + data: Context_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function Context_load(addr) { + return Context_contract.at(addr); +} +var StorageSlot_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209e7827207547a9bdd54a3dd6af4c0a39be8d39aedafd620acaa1cc7da83c8e7864736f6c63430008060033"; +var StorageSlot_contract = web3.eth.contract([]); + +function StorageSlot_new() { + return StorageSlot_contract.new( + { + from: web3.eth.accounts[0], + data: StorageSlot_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function StorageSlot_load(addr) { + return StorageSlot_contract.at(addr); +} diff --git a/wemix/governance-contract/.prettierrc b/wemix/governance-contract/.prettierrc deleted file mode 100644 index 0929f3aa3532..000000000000 --- a/wemix/governance-contract/.prettierrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "overrides": [ - { - "files": "*.sol", - "options": { - "printWidth": 150, - "tabWidth": 4, - "useTabs": false, - "singleQuote": false, - "bracketSpacing": true - } - } - ] -} \ No newline at end of file diff --git a/wemix/governance-contract/compiler.go b/wemix/governance-contract/compiler.go deleted file mode 100644 index 86e227af18bc..000000000000 --- a/wemix/governance-contract/compiler.go +++ /dev/null @@ -1,160 +0,0 @@ -package compile - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "os" - "os/exec" - "path/filepath" - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common/compiler" - "github.com/ethereum/go-ethereum/crypto" - "github.com/fabelx/go-solc-select/pkg/config" - "github.com/fabelx/go-solc-select/pkg/installer" - "github.com/fabelx/go-solc-select/pkg/versions" - "github.com/pkg/errors" -) - -var ( - solcVersion string = "0.8.14" - solcCmd string = fmt.Sprintf("solc-%s", solcVersion) -) - -func Compile(root string, sourceFiles ...string) (compiledTy, error) { - if err := installSolc(); err != nil { - return nil, err - } - if root == "" { - root = "../contracts" - } - args := []string{ - "--combined-json", "bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc,metadata,hashes", - "--optimize", // code optimizer switched on - "--allow-paths", ".,./,../", //default to support relative path: ./ ../ . - fmt.Sprintf("@openzeppelin/contracts/=%s/openzeppelin/contracts/contracts/", root), - fmt.Sprintf("@openzeppelin/contracts-upgradeable/=%s/openzeppelin/contracts-upgradeable/contracts/", root), - "--", - } - // ~/.gsolc-select/artifacts/solc-0.8.14/0.8.14 - cmd := exec.Command(filepath.Join(config.SolcArtifacts, solcCmd, solcCmd), append(args, sourceFiles...)...) - - var stderr, stdout bytes.Buffer - cmd.Stderr, cmd.Stdout = &stderr, &stdout - if err := cmd.Run(); err != nil { - return nil, fmt.Errorf("solc: %v\n%s", err, stderr.Bytes()) - } - - // compiler version - var compilerVersion = struct { - Version string - }{} - - if err := json.Unmarshal(stdout.Bytes(), &compilerVersion); err != nil { - return nil, err - } else if contracts, err := compiler.ParseCombinedJSON(stdout.Bytes(), "", "", compilerVersion.Version, strings.Join(args, " ")); err != nil { - return nil, err - } else { - out := make(compiledTy) - for name, v := range contracts { - n := strings.Split(name, ":")[1] - if _, ok := out[n]; ok { - return nil, fmt.Errorf("duplicated contract name: %s", name) - } else { - out[n] = v - } - } - return out, nil - } -} - -func installSolc() error { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - // check already installed - installedVersions := versions.GetInstalled() - if installedVersions[solcVersion] != "" { - return nil - } - - // install solc-0.8.14 - installed, _, err := installer.InstallSolcs(ctx, []string{solcVersion}) - if err != nil { - return err - } - - for _, v := range installed { - if v == solcVersion { - return nil - } - } - return fmt.Errorf("failed to install version %s", solcVersion) -} - -type compiledTy map[string]*compiler.Contract - -func (compiled compiledTy) BindContracts(pkg, filename string, contracts ...string) error { - var ( - length = len(contracts) - types = make([]string, length) - abis = make([]string, length) - bytecodes = make([]string, length) - sigs = make([]map[string]string, length) - ) - - var err error - for i, name := range contracts { - contract, ok := compiled[name] - if !ok { - return fmt.Errorf("not found contract : %v", name) - } - types[i] = name - if abis[i], err = abiToString(contract); err != nil { - return errors.Wrap(err, name) - } - bytecodes[i] = contract.Code - sigs[i] = contract.Hashes - } - - str, err := bind.Bind(types, abis, bytecodes, sigs, pkg, bind.LangGo, nil, nil) - if err != nil { - return err - } - - filedata := []byte(str) - if read, err := os.ReadFile(filename); err == nil { - // if out file is already exists, compare the file contents - if crypto.Keccak256Hash(read) == crypto.Keccak256Hash(filedata) { - return nil - } - } else { - // check dir is exist - outDir := filepath.Dir(filename) - if _, err := os.Stat(outDir); err != nil { - if !os.IsNotExist(err) { - return err - } - if err = os.MkdirAll(outDir, 0755); err != nil { - return err - } - } - } - - return os.WriteFile(filename, filedata, 0644) -} - -func abiToString(contract *compiler.Contract) (abi string, err error) { - switch v := contract.Info.AbiDefinition.(type) { - case string: - abi = v - default: - var bytes []byte - if bytes, err = json.Marshal(v); err == nil { - abi = string(bytes) - } - } - return -} diff --git a/wemix/governance-contract/contracts/Gov.sol b/wemix/governance-contract/contracts/Gov.sol deleted file mode 100644 index a8ed6e7b97a6..000000000000 --- a/wemix/governance-contract/contracts/Gov.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; - -contract Gov is ERC1967Proxy, IBeacon { - constructor(address _imp) ERC1967Proxy(_imp, "") {} - - function implementation() external view override returns (address) { - return _implementation(); - } -} diff --git a/wemix/governance-contract/contracts/GovChecker.sol b/wemix/governance-contract/contracts/GovChecker.sol deleted file mode 100644 index c8fef13b6597..000000000000 --- a/wemix/governance-contract/contracts/GovChecker.sol +++ /dev/null @@ -1,92 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import "./interface/IRegistry.sol"; -import "./interface/IGov.sol"; - -/** - * @title GovChecker - * @dev GovChecker Contract that uses Registry contract - */ -contract GovChecker is OwnableUpgradeable { - IRegistry public reg; - - bytes32 public constant GOV_NAME = "GovernanceContract"; - bytes32 public constant STAKING_NAME = "Staking"; - bytes32 public constant BALLOT_STORAGE_NAME = "BallotStorage"; - bytes32 public constant ENV_STORAGE_NAME = "EnvStorage"; - bytes32 public constant REWARD_POOL_NAME = "RewardPool"; - bytes32 public constant MAINTENANCE_NAME = "Maintenance"; - bytes32 public constant ECOSYSTEM_NAME = "Ecosystem"; - bytes32 public constant STAKING_REWARD_NAME = "StakingReward"; - - /* - * @dev Function to set registry address. Contract that wants to use registry should setRegistry first. - * @param _addr address of registry - * @return A boolean that indicates if the operation was successful. - */ - event SetRegistry(address indexed addr); - - function setRegistry(address _addr) public onlyOwner { - require(_addr != address(0), "Address should be non-zero"); - reg = IRegistry(_addr); - emit SetRegistry(_addr); - } - - modifier onlyGov() { - require(getGovAddress() == msg.sender, "No Permission"); - _; - } - - modifier onlyGovMem() { - require(IGov(getGovAddress()).isMember(msg.sender), "No Permission"); - _; - } - - modifier onlyGovStaker() { - require(IGov(getGovAddress()).isStaker(msg.sender), "No Permission"); - _; - } - - modifier anyGov() { - require(getGovAddress() == msg.sender || IGov(getGovAddress()).isMember(msg.sender), "No Permission"); - _; - } - - function getContractAddress(bytes32 name) internal view returns (address) { - return reg.getContractAddress(name); - } - - function getGovAddress() internal view returns (address) { - return getContractAddress(GOV_NAME); - } - - function getStakingAddress() internal view returns (address) { - return getContractAddress(STAKING_NAME); - } - - function getBallotStorageAddress() internal view returns (address) { - return getContractAddress(BALLOT_STORAGE_NAME); - } - - function getEnvStorageAddress() internal view returns (address) { - return getContractAddress(ENV_STORAGE_NAME); - } - - function getRewardPoolAddress() internal view returns (address) { - return getContractAddress(REWARD_POOL_NAME); - } - - function getEcosystemAddress() internal view returns (address) { - return getContractAddress(ECOSYSTEM_NAME); - } - - function getStakingRewardAddress() internal view returns (address) { - return getContractAddress(STAKING_REWARD_NAME); - } - - function getMaintenanceAddress() internal view returns (address) { - return getContractAddress(MAINTENANCE_NAME); - } -} diff --git a/wemix/governance-contract/contracts/GovImp.sol b/wemix/governance-contract/contracts/GovImp.sol deleted file mode 100644 index 416427b53135..000000000000 --- a/wemix/governance-contract/contracts/GovImp.sol +++ /dev/null @@ -1,1155 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import "./abstract/BallotEnums.sol"; -import "./abstract/EnvConstants.sol"; -import "./abstract/AGov.sol"; - -import "./interface/IBallotStorage.sol"; -import "./interface/IEnvStorage.sol"; -import "./interface/IStaking.sol"; - -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; - -contract GovImp is AGov, ReentrancyGuardUpgradeable, BallotEnums, EnvConstants, UUPSUpgradeable { - enum VariableTypes { - Invalid, - Int, - Uint, - Uint2, - Uint3, - Uint4, - Address, - Bytes32, - Bytes, - String - } - - address constant ZERO = address(0); - - event MemberAdded(address indexed addr, address indexed voter); - event MemberRemoved(address indexed addr, address indexed voter); - event MemberChanged(address indexed oldAddr, address indexed newAddr, address indexed newVoter); - event EnvChanged(bytes32 envName, uint256 envType, bytes envVal); - event MemberUpdated(address indexed addr, address indexed voter); - // added for case that ballot's result could not be applicable. - event NotApplicable(uint256 indexed ballotId, string reason); - - event SetProposalTimePeriod(uint256 newPeriod); - // added for announced that migration gov data - event GovDataMigrated(address indexed from); - - struct MemberInfo { - address staker; - address voter; // voter - address reward; - bytes name; - bytes enode; - bytes ip; - uint256 port; - uint256 lockAmount; - bytes memo; - uint256 duration; - } - - modifier checkLockedAmount() { - address staker = getStakerAddr(_msgSender()); - require(lockedBalanceOf(staker) <= getMaxStaking() && lockedBalanceOf(staker) >= getMinStaking(), "Invalid staking balance"); - _; - } - - modifier checkTimePeriod() { - address staker = getStakerAddr(_msgSender()); - require((block.timestamp - lastAddProposalTime[staker]) >= proposal_time_period, "Cannot add proposal too early"); - _; - lastAddProposalTime[staker] = block.timestamp; - } - - modifier checkMemberInfo(MemberInfo memory info) { - require(info.voter != ZERO, "Invalid voter"); - require(info.name.length > 0, "Invalid node name"); - require(info.ip.length > 0, "Invalid node IP"); - require(info.port > 0, "Invalid node port"); - require(info.enode.length > 0, "Invalid node enode"); - require(info.memo.length > 0, "Invalid memo"); - require(info.duration > 0, "Invalid duration"); - require(info.lockAmount >= getMinStaking() && info.lockAmount <= getMaxStaking(), "Invalid lock Amount"); - _; - } - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - function init(address registry, uint256 lockAmount, bytes memory name, bytes memory enode, bytes memory ip, uint port) public initializer { - __ReentrancyGuard_init(); - __Ownable_init(); - setRegistry(registry); - - require(lockAmount >= getMinStaking() && getMaxStaking() >= lockAmount, "Invalid lock amount"); - - // Lock - IStaking staking = IStaking(getStakingAddress()); - require(staking.availableBalanceOf(msg.sender) >= lockAmount, "Insufficient staking"); - staking.lock(msg.sender, lockAmount); - - // Add voting member - memberLength = 1; - voters[memberLength] = msg.sender; - voterIdx[msg.sender] = memberLength; - - // Add reward member - rewards[memberLength] = msg.sender; - rewardIdx[msg.sender] = memberLength; - - stakers[memberLength] = msg.sender; - stakerIdx[msg.sender] = memberLength; - - // Add node - nodeLength = 1; - Node storage node = nodes[nodeLength]; - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - - nodeIdxFromMember[msg.sender] = nodeLength; - nodeToMember[nodeLength] = msg.sender; - - modifiedBlock = block.number; - emit MemberAdded(msg.sender, msg.sender); - } - - function initOnce(address registry, uint256 lockAmount, bytes memory data) public initializer { - __ReentrancyGuard_init(); - __Ownable_init(); - setRegistry(registry); - - // _initialized = true; - modifiedBlock = block.number; - - // Lock - IStaking staking = IStaking(getStakingAddress()); - - require(lockAmount >= getMinStaking() && getMaxStaking() >= lockAmount, "Invalid lock amount"); - - // []{uint staker, uint voter, uint reward, bytes name, bytes enode, bytes ip, uint port} - // 32 bytes, 32 bytes, 32 bytes, [32 bytes, ] * 3, 32 bytes - address staker; - address voter; - address reward; - bytes memory name; - bytes memory enode; - bytes memory ip; - uint port; - uint idx = 0; - - uint ix; - uint eix; - assembly { - ix := add(data, 0x20) - } - eix = ix + data.length; - while (ix < eix) { - assembly { - staker := mload(ix) - } - ix += 0x20; - require(ix < eix); - - assembly { - voter := mload(ix) - } - ix += 0x20; - require(ix < eix); - - assembly { - reward := mload(ix) - } - ix += 0x20; - require(ix < eix); - - assembly { - name := ix - } - ix += 0x20 + name.length; - require(ix < eix); - - assembly { - enode := ix - } - ix += 0x20 + enode.length; - require(ix < eix); - - assembly { - ip := ix - } - ix += 0x20 + ip.length; - require(ix < eix); - - assembly { - port := mload(ix) - } - ix += 0x20; - - idx += 1; - require(!isMember(staker) && !isMember(voter) && !isReward(reward), "Already member"); - voters[idx] = voter; - voterIdx[voter] = idx; - rewards[idx] = reward; - rewardIdx[reward] = idx; - stakers[idx] = staker; - stakerIdx[staker] = idx; - emit MemberAdded(staker, voter); // staker, voter - - require(staking.availableBalanceOf(staker) >= lockAmount, "Insufficient staking"); - - require(checkNodeInfoAdd(name, enode, ip, port), "Duplicated node info"); - - lock(staker, lockAmount); - - Node storage node = nodes[idx]; - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - // checkNodeInfo[getNodeInfoHash(enode, ip, port)] = true; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - - nodeToMember[idx] = staker; - nodeIdxFromMember[staker] = idx; - } - memberLength = idx; - nodeLength = idx; - } - - //Add member address = staker address = voter address - function addProposalToAddMember( - MemberInfo memory info - ) external onlyGovMem checkTimePeriod checkLockedAmount checkMemberInfo(info) returns (uint256 ballotIdx) { - require(!isMember(info.staker) && !isReward(info.staker), "Already member"); - require(info.staker == info.voter && info.staker == info.reward, "Staker is not voter"); - require(checkNodeInfoAdd(info.name, info.enode, info.ip, info.port), "Duplicated node info"); - ballotIdx = ballotLength + 1; - createBallotForMember( - ballotIdx, // ballot id - uint256(BallotTypes.MemberAdd), // ballot type - msg.sender, // creator - ZERO, // old staker address - info - ); - updateBallotLock(ballotIdx, info.lockAmount); - updateBallotMemo(ballotIdx, info.memo); - ballotLength = ballotIdx; - } - - function addProposalToRemoveMember( - address staker, - uint256 lockAmount, - bytes memory memo, - uint256 duration, - uint256 unlockAmount, - uint256 slashing - ) external onlyGovMem checkTimePeriod checkLockedAmount returns (uint256 ballotIdx) { - require(staker != ZERO, "Invalid address"); - require(isMember(staker), "Non-member"); - require(getMemberLength() > 1, "Cannot remove a sole member"); - require(lockedBalanceOf(staker) >= lockAmount, "Insufficient balance that can be unlocked."); - ballotIdx = ballotLength + 1; - - MemberInfo memory info = MemberInfo( - ZERO, // new staker address - ZERO, - ZERO, - new bytes(0), // new name - new bytes(0), // new enode - new bytes(0), // new ip - 0, // new port - lockAmount, - memo, - duration - ); - createBallotForMember( - ballotIdx, // ballot id - uint256(BallotTypes.MemberRemoval), // ballot type - msg.sender, - staker, - info - ); - updateBallotLock(ballotIdx, lockAmount); - updateBallotMemo(ballotIdx, memo); - createBallotForExit(ballotIdx, unlockAmount, slashing); - ballotLength = ballotIdx; - } - - // voter A, staker A -> voter B, staker B Ok with voting - // voter A, staker B -> voter C, staker C Ok with voting - // voter A, staker B -> voter A, staker A Ok with voting - // voter A call : voter A, staker A -> voter A, staker B X - // staker A call : voter A, staker A-> voter B, staker A Ok without voting - // only staker A call : voter B, staker A, reward C -> voter B, staker A, reward D Ok without voting only (voter can not change reward) - // staker only change own info - // voter can propose and vote anything - function addProposalToChangeMember( - MemberInfo memory newInfo, - address oldStaker, - uint256 unlockAmount, - uint256 slashing - ) external onlyGovMem checkTimePeriod checkLockedAmount checkMemberInfo(newInfo) returns (uint256 ballotIdx) { - require(oldStaker != ZERO, "Invalid old Address"); - require(isMember(oldStaker), "Non-member"); - - require( - (voters[stakerIdx[oldStaker]] == newInfo.voter || - newInfo.voter == oldStaker || - ((!isMember(newInfo.voter)) && !isReward(newInfo.voter))) && - (rewards[stakerIdx[oldStaker]] == newInfo.reward || - newInfo.reward == oldStaker || - ((!isMember(newInfo.reward)) && !isReward(newInfo.reward))), - "Already a member" - ); - // For exit - if (msg.sender == oldStaker && oldStaker == newInfo.staker) { - // Change member enviroment, finalized - require(unlockAmount == 0 && slashing == 0, "Invalid proposal"); - } else if (oldStaker != newInfo.staker /* && msg.sender != oldStaker */) { - // Propose Change or Exit member by other. - require(unlockAmount + slashing <= getMinStaking(), "Invalid amount: (unlockAmount + slashing) must be equal or low to minStaking"); - } - - ballotIdx = ballotLength + 1; - createBallotForMember( - ballotIdx, // ballot id - uint256(BallotTypes.MemberChange), // ballot type - msg.sender, // creator - oldStaker, // old staker address - newInfo - ); - updateBallotLock(ballotIdx, newInfo.lockAmount); - updateBallotMemo(ballotIdx, newInfo.memo); - createBallotForExit(ballotIdx, unlockAmount, slashing); - ballotLength = ballotIdx; - // 요청자 == 변경할 voting 주소 - if (msg.sender == oldStaker && oldStaker == newInfo.staker) { - (, , uint256 duration) = getBallotPeriod(ballotIdx); - startBallot(ballotIdx, block.timestamp, block.timestamp + duration); - finalizeVote(ballotIdx, uint256(BallotTypes.MemberChange), true, true); - } - } - - function addProposalToChangeGov( - address newGovAddr, - bytes memory memo, - uint256 duration - ) external onlyGovMem checkTimePeriod checkLockedAmount returns (uint256 ballotIdx) { - require(newGovAddr != ZERO, "Implementation cannot be zero"); - require(newGovAddr != _getImplementation(), "Same contract address"); - //check newGov has proxiableUUID - try IERC1822Proxiable(newGovAddr).proxiableUUID() returns (bytes32 slot) { - require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); - } catch { - revert("ERC1967Upgrade: new implementation is not UUPS"); - } - ballotIdx = ballotLength + 1; - IBallotStorage(getBallotStorageAddress()).createBallotForAddress( - ballotLength + 1, // ballot id - uint256(BallotTypes.GovernanceChange), // ballot type - duration, - msg.sender, // creator - newGovAddr // new governance address - ); - updateBallotMemo(ballotIdx, memo); - ballotLength = ballotIdx; - } - - function addProposalToChangeEnv( - bytes32 envName, - uint256 envType, - bytes memory envVal, - bytes memory memo, - uint256 duration - ) external onlyGovMem checkTimePeriod checkLockedAmount returns (uint256 ballotIdx) { - // require(envName != 0, "Invalid name"); - require(uint256(VariableTypes.Int) <= envType && envType <= uint256(VariableTypes.String), "Invalid type"); - require(checkVariableCondition(envName, envVal), "Invalid value"); - - ballotIdx = ballotLength + 1; - IBallotStorage(getBallotStorageAddress()).createBallotForVariable( - ballotIdx, // ballot id - uint256(BallotTypes.EnvValChange), // ballot type - duration, - msg.sender, // creator - envName, // env name - envType, // env type - envVal // env value - ); - updateBallotMemo(ballotIdx, memo); - ballotLength = ballotIdx; - } - - function vote(uint256 ballotIdx, bool approval) external nonReentrant onlyGovMem checkLockedAmount { - // Check if some ballot is in progress - require(checkUnfinalized(), "Expired"); - - // Check if the ballot can be voted - uint256 ballotType = checkVotable(ballotIdx); - // Vote - createVote(ballotIdx, approval); - // Finalize - (, uint256 accept, uint256 reject) = getBallotVotingInfo(ballotIdx); - uint256 threshold = getThreshold(); - if (accept >= threshold || reject >= threshold || (accept + reject) == 10000) { - finalizeVote(ballotIdx, ballotType, accept > reject, false); - } - } - - function getMinStaking() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getStakingMin(); - } - - function getMaxStaking() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getStakingMax(); - } - - function getMinVotingDuration() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getBallotDurationMin(); - } - - function getMaxVotingDuration() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getBallotDurationMax(); - } - - function getThreshold() public pure returns (uint256) { - return 5001; - } // 50.01% from 5001 of 10000 - - function checkUnfinalized() public view returns (bool) { - if (ballotInVoting != 0) { - (, uint256 state, ) = getBallotState(ballotInVoting); - (, uint256 endTime, ) = getBallotPeriod(ballotInVoting); - if (state == uint256(BallotStates.InProgress)) { - if (endTime < block.timestamp) return false; - // require(endTime > block.timestamp, "Expired"); - // require(ballotIdx == ballotInVoting, "Now in voting with different ballot"); - // if (endTime < block.timestamp) { - - // finalizeBallot(ballotInVoting, uint256(BallotStates.Rejected)); - // ballotInVoting = 0; - // // console.log("vote is finalized %s", ballotInVoting); - // } else if (ballotIdx != ballotInVoting) { - // revert("Now in voting with different ballot"); - // } - } - } - return true; - } - - function finalizeEndedVote() public onlyGovMem { - require(!checkUnfinalized(), "Voting is not ended"); - finalizeBallot(ballotInVoting, uint256(BallotStates.Rejected)); - ballotInVoting = 0; - } - - function checkVotable(uint256 ballotIdx) private returns (uint256) { - (uint256 ballotType, uint256 state, ) = getBallotState(ballotIdx); - if (state == uint256(BallotStates.Ready)) { - require(ballotInVoting == 0, "Now in voting with different ballot"); - (, , uint256 duration) = getBallotPeriod(ballotIdx); - if (duration < getMinVotingDuration()) { - startBallot(ballotIdx, block.timestamp, block.timestamp + getMinVotingDuration()); - } else if (getMaxVotingDuration() < duration) { - startBallot(ballotIdx, block.timestamp, block.timestamp + getMaxVotingDuration()); - } else { - startBallot(ballotIdx, block.timestamp, block.timestamp + duration); - } - ballotInVoting = ballotIdx; - } else if (state == uint256(BallotStates.InProgress)) { - // Nothing to do - require(ballotIdx == ballotInVoting, "Now in voting with different ballot"); - } else { - // canceled - revert("Expired"); - } - return ballotType; - } - - function createVote(uint256 ballotIdx, bool approval) private { - uint256 voteIdx = voteLength + 1; - address staker = getStakerAddr(msg.sender); - uint256 weight = 10000 / getMemberLength(); //IStaking(getStakingAddress()).calcVotingWeightWithScaleFactor(staker, 10000); - uint256 decision = approval ? uint256(DecisionTypes.Accept) : uint256(DecisionTypes.Reject); - IBallotStorage(getBallotStorageAddress()).createVote(voteIdx, ballotIdx, staker, decision, weight); - voteLength = voteIdx; - } - - function finalizeVote(uint256 ballotIdx, uint256 ballotType, bool isAccepted, bool self) private { - uint256 ballotState = uint256(BallotStates.Rejected); - if (isAccepted) { - ballotState = uint256(BallotStates.Accepted); - - if (ballotType == uint256(BallotTypes.MemberAdd)) { - if (!addMember(ballotIdx)) { - ballotState = uint256(BallotStates.Rejected); - } - } else if (ballotType == uint256(BallotTypes.MemberRemoval)) { - removeMember(ballotIdx); - } else if (ballotType == uint256(BallotTypes.MemberChange)) { - if (!changeMember(ballotIdx, self)) { - ballotState = uint256(BallotStates.Rejected); - } - } else if (ballotType == uint256(BallotTypes.GovernanceChange)) { - changeGov(ballotIdx); - } else if (ballotType == uint256(BallotTypes.EnvValChange)) { - applyEnv(ballotIdx); - } else if (ballotType == uint256(BallotTypes.Execute)) { - _execute(ballotIdx); - } - } else { - if (ballotType == uint256(BallotTypes.Execute)) { - IBallotStorage _ballotStorage = IBallotStorage(getBallotStorageAddress()); - (, uint256 _value, ) = _ballotStorage.getBallotExecute(ballotIdx); - _returnValueToCreator(_ballotStorage, ballotIdx, _value); - } - } - finalizeBallot(ballotIdx, ballotState); - if (!self) ballotInVoting = 0; - } - - function fromValidBallot(uint256 ballotIdx, uint256 targetType) private view { - (uint256 ballotType, uint256 state, ) = getBallotState(ballotIdx); - require(ballotType == targetType, "Invalid voting type"); - require(state == uint(BallotStates.InProgress), "Invalid voting state"); - (, uint256 accept, uint256 reject) = getBallotVotingInfo(ballotIdx); - require(accept >= getThreshold() || reject >= getThreshold() || (accept + reject) == 10000, "Not yet finalized"); - } - - function addMember(uint256 ballotIdx) private returns (bool) { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberAdd)); - - ( - , - address newStaker, - address newVoter, - address newReward, - bytes memory name, - bytes memory enode, - bytes memory ip, - uint port, - uint256 lockAmount - ) = getBallotMember(ballotIdx); - if (isMember(newStaker)) { - // new staker is already a member or a voter/ - emit NotApplicable(ballotIdx, "Already a member"); - return false; - } - if (isReward(newReward)) { - // new staker is already a member or a voter/ - emit NotApplicable(ballotIdx, "Already a rewarder"); - return false; - } - - // Lock - if (lockAmount < getMinStaking() || getMaxStaking() < lockAmount) { - emit NotApplicable(ballotIdx, "Invalid lock amount"); - return false; - } - - if (availableBalanceOf(newStaker) < lockAmount) { - emit NotApplicable(ballotIdx, "Insufficient balance that can be locked"); - return false; - } - - if (newStaker != newVoter && newStaker != newReward) { - emit NotApplicable(ballotIdx, "Invalid member address"); - return false; - } - - lock(newStaker, lockAmount); - - // Add voting and reward member - uint256 nMemIdx = memberLength + 1; - voters[nMemIdx] = newVoter; - voterIdx[newVoter] = nMemIdx; - rewards[nMemIdx] = newReward; - rewardIdx[newReward] = nMemIdx; - stakers[nMemIdx] = newStaker; - stakerIdx[newStaker] = nMemIdx; - - // Add node - uint256 nNodeIdx = nodeLength + 1; - Node storage node = nodes[nNodeIdx]; - - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - // checkNodeInfo[getNodeInfoHash(enode, ip, port)] = true; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - - nodeToMember[nNodeIdx] = newStaker; - nodeIdxFromMember[newStaker] = nNodeIdx; - memberLength = nMemIdx; - nodeLength = nNodeIdx; - modifiedBlock = block.number; - emit MemberAdded(newStaker, newVoter); - return true; - } - - function removeMember(uint256 ballotIdx) private { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberRemoval)); - - (address oldStaker, , , , , , , , ) = getBallotMember(ballotIdx); - if (!isMember(oldStaker)) { - emit NotApplicable(ballotIdx, "Not already a member"); - return; // Non-member. it is abnormal case, but passed - } - - // Remove voting and reward member - uint256 removeIdx = stakerIdx[oldStaker]; - address endAddr = stakers[memberLength]; - address oldVoter = voters[removeIdx]; - address oldReward = rewards[removeIdx]; - - if (stakerIdx[oldStaker] != memberLength) { - (stakers[removeIdx], stakers[memberLength], stakerIdx[oldStaker], stakerIdx[endAddr]) = ( - stakers[memberLength], - ZERO, - 0, - stakerIdx[oldStaker] - ); - removeIdx = rewardIdx[oldStaker]; - endAddr = rewards[memberLength]; - (rewards[removeIdx], rewards[memberLength], rewardIdx[oldReward], rewardIdx[endAddr]) = ( - rewards[memberLength], - ZERO, - 0, - rewardIdx[oldReward] - ); - removeIdx = voterIdx[oldStaker]; - endAddr = voters[memberLength]; - (voters[removeIdx], voters[memberLength], voterIdx[oldVoter], voterIdx[endAddr]) = (voters[memberLength], ZERO, 0, voterIdx[oldVoter]); - } else { - stakers[memberLength] = ZERO; - stakerIdx[oldStaker] = 0; - rewards[memberLength] = ZERO; - rewardIdx[oldReward] = 0; - voters[memberLength] = ZERO; - voterIdx[oldVoter] = 0; - } - memberLength = memberLength - 1; - // Remove node - - Node storage node = nodes[removeIdx]; - checkNodeEnode[node.enode] = false; - checkNodeName[node.name] = false; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = false; - if (nodeIdxFromMember[oldStaker] != nodeLength) { - removeIdx = nodeIdxFromMember[oldStaker]; - endAddr = nodeToMember[nodeLength]; - - node.name = nodes[nodeLength].name; - node.enode = nodes[nodeLength].enode; - node.ip = nodes[nodeLength].ip; - node.port = nodes[nodeLength].port; - - nodeToMember[removeIdx] = endAddr; - nodeIdxFromMember[endAddr] = removeIdx; - } - nodeToMember[nodeLength] = ZERO; - nodeIdxFromMember[oldStaker] = 0; - delete nodes[nodeLength]; - nodeLength = nodeLength - 1; - modifiedBlock = block.number; - // Unlock and transfer remained to governance - transferLockedAndUnlock(ballotIdx, oldStaker); - - emit MemberRemoved(oldStaker, oldVoter); - } - - function checkChangeMember( - uint256 ballotIdx, - bool self, - address oldStaker, - address newStaker, - address newVoter, - address newReward, - bytes memory name, - bytes memory enode, - bytes memory ip, - uint256 port, - uint256 lockAmount - ) private returns (bool) { - if (!self) { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberChange)); - } - - if (!isMember(oldStaker)) { - emit NotApplicable(ballotIdx, "Old address is not a member"); - return false; // Non-member. it is abnormal case. - } - - //old staker - uint256 memberIdx = stakerIdx[oldStaker]; - if (oldStaker != newStaker) { - if (isMember(newStaker)) { - emit NotApplicable(ballotIdx, "new address is already a member"); - return false; // already member. it is abnormal case. - } - if (newStaker != newVoter && newStaker != newReward) { - emit NotApplicable(ballotIdx, "Invalid voter address"); - return false; - } - // Lock - if (lockAmount < getMinStaking() || getMaxStaking() < lockAmount) { - emit NotApplicable(ballotIdx, "Invalid lock amount"); - return false; - } - if (availableBalanceOf(newStaker) < lockAmount) { - emit NotApplicable(ballotIdx, "Insufficient balance that can be locked"); - return false; - } - } - // Change node - uint256 nodeIdx = nodeIdxFromMember[oldStaker]; - { - Node memory node = nodes[nodeIdx]; - - if ( - //if node info is not same - // node info can not duplicate - !checkNodeInfoChange(name, enode, ip, port, node) - ) { - emit NotApplicable(ballotIdx, "Duplicated node info"); - return false; - } - } - - { - address oldReward = rewards[memberIdx]; - if ((oldStaker != newReward) && (oldReward != newReward) && (isMember(newReward) || isReward(newReward))) { - emit NotApplicable(ballotIdx, "Invalid reward address"); - return false; - } - } - { - address oldVoter = voters[memberIdx]; - if ((oldStaker != newVoter) && (oldVoter != newVoter) && (isMember(newVoter) || isReward(newVoter))) { - emit NotApplicable(ballotIdx, "Invalid voters address"); - return false; - } - } - return true; - } - - // isMember=> isStaker and isVoter - // vote => onlyVoter, staker can change voter without voting, default = staker == voter - // voter can change staker with voting.(changeMember) - function changeMember(uint256 ballotIdx, bool self) private returns (bool) { - if (!self) { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberChange)); - } - - ( - address oldStaker, - address newStaker, - address newVoter, - address newReward, - bytes memory name, - bytes memory enode, - bytes memory ip, - uint port, - uint256 lockAmount - ) = getBallotMember(ballotIdx); - if (!isMember(oldStaker)) { - emit NotApplicable(ballotIdx, "Old address is not a member"); - return false; // Non-member. it is abnormal case. - } - - if (!checkChangeMember(ballotIdx, self, oldStaker, newStaker, newVoter, newReward, name, enode, ip, port, lockAmount)) return false; - - //old staker - uint256 memberIdx = stakerIdx[oldStaker]; - if (oldStaker != newStaker) { - // Change member - stakers[memberIdx] = newStaker; - stakerIdx[newStaker] = memberIdx; - stakerIdx[oldStaker] = 0; - - lock(newStaker, lockAmount); - } - // Change node - uint256 nodeIdx = nodeIdxFromMember[oldStaker]; - { - Node storage node = nodes[nodeIdx]; - - checkNodeName[node.name] = false; - checkNodeEnode[node.enode] = false; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = false; - - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - modifiedBlock = block.number; - // checkNodeInfo[getNodeInfoHash(enode, ip, port)] = true; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - } - - { - address oldReward = rewards[memberIdx]; - if (oldReward != newReward) { - rewards[memberIdx] = newReward; - rewardIdx[newReward] = memberIdx; - rewardIdx[oldReward] = 0; - } - } - { - address oldVoter = voters[memberIdx]; - if (oldVoter != newVoter) { - voters[memberIdx] = newVoter; - voterIdx[newVoter] = memberIdx; - voterIdx[oldVoter] = 0; - } - } - - if (oldStaker != newStaker) { - nodeToMember[nodeIdx] = newStaker; - nodeIdxFromMember[newStaker] = nodeIdx; - nodeIdxFromMember[oldStaker] = 0; - - // Unlock and transfer remained to governance - transferLockedAndUnlock(ballotIdx, oldStaker); - - emit MemberChanged(oldStaker, newStaker, newVoter); - } else { - emit MemberUpdated(oldStaker, newStaker); - } - return true; - } - - function changeGov(uint256 ballotIdx) private { - fromValidBallot(ballotIdx, uint256(BallotTypes.GovernanceChange)); - - address newImp = IBallotStorage(getBallotStorageAddress()).getBallotAddress(ballotIdx); - if (newImp != ZERO) { - _authorizeUpgrade(newImp); - _upgradeToAndCallUUPS(newImp, new bytes(0), false); - modifiedBlock = block.number; - } - } - - function applyEnv(uint256 ballotIdx) private { - fromValidBallot(ballotIdx, uint256(BallotTypes.EnvValChange)); - - (bytes32 envKey, uint256 envType, bytes memory envVal) = IBallotStorage(getBallotStorageAddress()).getBallotVariable(ballotIdx); - - IEnvStorage envStorage = IEnvStorage(getEnvStorageAddress()); - envStorage.setVariable(envKey, envVal); - modifiedBlock = block.number; - - emit EnvChanged(envKey, envType, envVal); - } - - //------------------ Code reduction for creation gas - function createBallotForMember(uint256 id, uint256 bType, address creator, address oAddr, MemberInfo memory info) private { - IBallotStorage(getBallotStorageAddress()).createBallotForMember( - id, // ballot id - bType, // ballot type - info.duration, - creator, // creator - oAddr, // old member address - info.staker, // new member address - info.voter, // old staker address - info.reward, // new staker address - info.name, // new name - info.enode, // new enode - info.ip, // new ip - info.port // new port - ); - } - - function updateBallotLock(uint256 id, uint256 amount) private { - IBallotStorage(getBallotStorageAddress()).updateBallotMemberLockAmount(id, amount); - } - - function updateBallotMemo(uint256 id, bytes memory memo) private { - IBallotStorage(getBallotStorageAddress()).updateBallotMemo(id, memo); - } - - function createBallotForExit(uint256 id, uint256 unlockAmount, uint256 slashing) private { - IBallotStorage(getBallotStorageAddress()).createBallotForExit(id, unlockAmount, slashing); - } - - function startBallot(uint256 id, uint256 s, uint256 e) private { - IBallotStorage(getBallotStorageAddress()).startBallot(id, s, e); - } - - function finalizeBallot(uint256 id, uint256 state) private { - IBallotStorage(getBallotStorageAddress()).finalizeBallot(id, state); - } - - function getBallotState(uint256 id) private view returns (uint256, uint256, bool) { - return IBallotStorage(getBallotStorageAddress()).getBallotState(id); - } - - function getBallotPeriod(uint256 id) private view returns (uint256, uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotPeriod(id); - } - - function getBallotVotingInfo(uint256 id) private view returns (uint256, uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotVotingInfo(id); - } - - function getBallotMember( - uint256 id - ) private view returns (address, address, address, address, bytes memory, bytes memory, bytes memory, uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotMember(id); - } - function getBallotForExit(uint256 id) private view returns (uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotForExit(id); - } - - function lock(address addr, uint256 amount) private { - IStaking(getStakingAddress()).lock(addr, amount); - } - - function unlock(address addr, uint256 amount) private { - IStaking(getStakingAddress()).unlock(addr, amount); - } - - function transferLockedAndUnlock(uint256 ballotIdx, address addr) private { - (uint256 unlockAmount, uint256 slashing) = getBallotForExit(ballotIdx); - - require(unlockAmount + slashing <= getMinStaking(), "minStaking value must be greater than or equal to the sum of unlockAmount, slashing"); - - IStaking staking = IStaking(getStakingAddress()); - uint256 locked = staking.lockedBalanceOf(addr); - uint256 ext = locked - getMinStaking(); - - if (locked > unlockAmount) { - unlock(addr, unlockAmount); - staking.transferLocked(addr, slashing, ext); - } else { - unlock(addr, locked); - } - } - - function lockedBalanceOf(address addr) private view returns (uint256) { - // IStaking staking = IStaking(getStakingAddress()).lockedBalanceOf(addr); - return IStaking(getStakingAddress()).lockedBalanceOf(addr); - } - - function availableBalanceOf(address addr) private view returns (uint256) { - return IStaking(getStakingAddress()).availableBalanceOf(addr); - } - - //------------------ Code reduction end - - //====NXTMeta=====/ - - function _authorizeUpgrade(address newImplementation) internal override onlyGovMem {} - - function checkVariableCondition(bytes32 envKey, bytes memory envVal) internal view returns (bool) { - return IEnvStorage(getEnvStorageAddress()).checkVariableCondition(envKey, envVal); - } - - function getStakerAddr(address _addr) public view returns (address staker) { - if (isStaker(_addr)) staker = _addr; - else if (isVoter(_addr)) staker = stakers[voterIdx[_addr]]; - } - - function setProposalTimePeriod(uint256 newPeriod) external onlyOwner { - require(newPeriod < 1 hours, "newPeriod is too long"); - proposal_time_period = newPeriod; - emit SetProposalTimePeriod(newPeriod); - } - - function checkNodeInfoAdd(bytes memory name, bytes memory enode, bytes memory ip, uint port) internal view returns (bool check) { - //Enode can not be duplicated - //IP:port can not be duplicated - //Name can not be duplicated - check = true; - if (checkNodeEnode[enode]) check = false; - if (checkNodeName[name]) check = false; - - bytes32 hvalue = keccak256(abi.encodePacked(ip, port)); - if (checkNodeIpPort[hvalue]) check = false; - } - - function checkNodeInfoChange( - bytes memory name, - bytes memory enode, - bytes memory ip, - uint port, - Node memory nodeInfo - ) internal view returns (bool check) { - //Enode can not be duplicated - //IP:port can not be duplicated - //Name can not be duplicated - check = true; - if ((keccak256(nodeInfo.enode) != keccak256(enode) && checkNodeEnode[enode])) check = false; - if ((keccak256(nodeInfo.name) != keccak256(name) && checkNodeName[name])) check = false; - - bytes32 hvalue = keccak256(abi.encodePacked(ip, port)); - if ((keccak256(abi.encodePacked(nodeInfo.ip, nodeInfo.port)) != hvalue && checkNodeIpPort[hvalue])) check = false; - } - - uint256 public proposal_time_period; - mapping(address => uint256) public lastAddProposalTime; - - // //For a node duplicate check - // // testnet value is here - // // mapping(bytes32=>bool) internal checkNodeInfo; - // mapping(bytes=>bool) internal checkNodeName; - // mapping(bytes=>bool) internal checkNodeEnode; - // mapping(bytes32=>bool) internal checkNodeIpPort; - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[46] private __gap; - - function reInit() external reinitializer(2) onlyOwner { - unchecked { - for (uint256 i = 0; i < getMemberLength(); i++) { - Node memory node = nodes[i]; - checkNodeName[node.name] = true; - checkNodeEnode[node.enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = true; - } - } - } - - function initMigration(address registry, uint256 oldModifiedBlock, address oldOwner) external override initializer { - __ReentrancyGuard_init(); - __Ownable_init(); - setRegistry(registry); - - modifiedBlock = oldModifiedBlock; - transferOwnership(oldOwner); - emit GovDataMigrated(msg.sender); - } - - function migrateFromLegacy(address oldGov) external initializer returns (int256) { - __ReentrancyGuard_init(); - __Ownable_init(); - - GovImp ogov = GovImp(oldGov); - setRegistry(address(ogov.reg())); - modifiedBlock = block.number; - transferOwnership(ogov.owner()); - - unchecked { - for (uint256 i = 1; i <= ogov.getMemberLength(); i++) { - stakers[i] = ogov.getMember(i); - stakerIdx[stakers[i]] = i; - voters[i] = ogov.getVoter(i); - voterIdx[voters[i]] = i; - rewards[i] = ogov.getReward(i); - rewardIdx[rewards[i]] = i; - memberLength = i; - - Node memory node; - (node.name, node.enode, node.ip, node.port) = ogov.getNode(i); - require(checkNodeInfoChange(node.name, node.enode, node.ip, node.port, node), "node info is duplicated"); - checkNodeName[node.name] = true; - checkNodeEnode[node.enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = true; - nodes[i] = node; - nodeIdxFromMember[stakers[i]] = i; - nodeToMember[i] = stakers[i]; - nodeLength = i; - lastAddProposalTime[stakers[i]] = ogov.lastAddProposalTime(stakers[i]); - } - } - - proposal_time_period = ogov.proposal_time_period(); - - ballotLength = ogov.ballotLength(); - voteLength = ogov.voteLength(); - ballotInVoting = ogov.getBallotInVoting(); - - return 0; - } - - // Critical - - function upgradeTo(address) external override { - revert("Invalid access"); - } - - function upgradeToAndCall(address, bytes memory) external payable override { - revert("Invalid access"); - } - - // Genernal Purpose - - event Executed(bool indexed success, address indexed to, uint256 value, bytes calldatas, bytes returnData); - event FailReturnValue(uint256 indexed ballotIdx, address indexed creator, uint256 value, bytes result); - - function addProposalToExecute( - address _target, - bytes memory _calldata, - bytes memory _memo, - uint256 _duration - ) external payable onlyGovMem checkTimePeriod checkLockedAmount { - require(_target != ZERO, "target cannot be zero"); - - address _creator = msg.sender; - if (msg.value != 0) { - (bool _ok, ) = _creator.call{ value: 0 }(""); - require(_ok, "creator is not payable"); - } - - uint256 _ballotIdx = ballotLength + 1; - - IBallotStorage(getBallotStorageAddress()).createBallotForExecute( - _ballotIdx, // ballot id - uint256(BallotTypes.Execute), // ballot type - _duration, - _creator, // creator - _target, - msg.value, - _calldata - ); - updateBallotMemo(_ballotIdx, _memo); - ballotLength = _ballotIdx; - } - - function _execute(uint256 _ballotIdx) private { - fromValidBallot(_ballotIdx, uint256(BallotTypes.Execute)); - IBallotStorage _ballotStorage = IBallotStorage(getBallotStorageAddress()); - - (address _target, uint256 _value, bytes memory _calldata) = _ballotStorage.getBallotExecute(_ballotIdx); - (bool _success, bytes memory _returnData) = _target.call{ value: _value }(_calldata); - - modifiedBlock = block.number; - emit Executed(_success, _target, _value, _calldata, _returnData); - - if (!_success) _returnValueToCreator(_ballotStorage, _ballotIdx, _value); - } - - function _returnValueToCreator(IBallotStorage _ballotStorage, uint256 _ballotIDx, uint256 _value) private { - if (_value == 0) return; - - (, , , address _creator, , , , , , , ) = _ballotStorage.getBallotBasic(_ballotIDx); - (bool _ok, bytes memory _returnData) = _creator.call{ value: _value }(""); - if (!_ok) { - emit FailReturnValue(_ballotIDx, _creator, _value, _returnData); - } - } -} diff --git a/wemix/governance-contract/contracts/NCPExit.sol b/wemix/governance-contract/contracts/NCPExit.sol deleted file mode 100644 index 5d92b4efc29f..000000000000 --- a/wemix/governance-contract/contracts/NCPExit.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; - -contract NCPExit is ERC1967Proxy, IBeacon { - constructor(address _imp) ERC1967Proxy(_imp, "") {} - - function implementation() external view override returns (address) { - return _implementation(); - } -} diff --git a/wemix/governance-contract/contracts/NCPExitImp.sol b/wemix/governance-contract/contracts/NCPExitImp.sol deleted file mode 100644 index be01d3ab871a..000000000000 --- a/wemix/governance-contract/contracts/NCPExitImp.sol +++ /dev/null @@ -1,115 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "./interface/INCPStaking.sol"; -import "./interface/INCPExit.sol"; -import "./interface/IGovStaking.sol"; -import "./GovChecker.sol"; -import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; - -contract NCPExitImp is GovChecker, INCPExit, UUPSUpgradeable, ReentrancyGuardUpgradeable { - /* =========== STATE VARIABLES ===========*/ - using AddressUpgradeable for address payable; - - address private _administrator; - address private _administratorSetter; - - mapping(address /* ncp address */ => /* user + a */ uint256) private _receivedTotalAmount; - mapping(address /* ncp address */ => /* user */ uint256) private _lockedUserBalanceToNCPTotal; - - /* =========== MODIFIERES ===========*/ - modifier onlyGovStaking() { - require(msg.sender == getStakingAddress(), "Only governance staking contract can call this function."); - _; - } - - modifier onlyNcpStaking() { - require(msg.sender == IGovStaking(getStakingAddress()).ncpStaking(), "Only NcpStaking can call this function."); - _; - } - - modifier onlyAdministrator() { - require(msg.sender == _administrator, "Only Administrator can call this function."); - _; - } - - modifier onlyAdministratorSetter() { - require(msg.sender == _administratorSetter, "Caller is not AdministratorSetter."); - _; - } - - receive() external payable {} - - /* =========== FUNCTIONS ===========*/ - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - function initialize(address _registry) external initializer { - __Ownable_init(); - __ReentrancyGuard_init(); - setRegistry(_registry); - _administrator = owner(); - _administratorSetter = owner(); - } - - function setAdministrator(address _newAdministrator) external override onlyAdministratorSetter { - require(_newAdministrator != address(0), "Address should be non-zero"); - _administrator = _newAdministrator; - } - - function setAdministratorSetter(address _newAdministratorSetter) external override onlyAdministratorSetter { - require(_newAdministratorSetter != address(0), "Address should be non-zero"); - _administratorSetter = _newAdministratorSetter; - } - - function depositExitAmount( - address exitNcp, - uint256 totalAmount, - uint256 lockedUserBalanceToNCPTotal - ) external payable override nonReentrant onlyGovStaking { - require(totalAmount == msg.value); - _receivedTotalAmount[exitNcp] = totalAmount; - - // administrator - _lockedUserBalanceToNCPTotal[exitNcp] = lockedUserBalanceToNCPTotal; - } - - function withdrawForUser(address exitNcp, address exitUser, uint256 amount) external override nonReentrant onlyNcpStaking { - require(_lockedUserBalanceToNCPTotal[exitNcp] >= amount, "_lockedUserBalanceToNCPTotal[exitNcp] >= amount"); - - _receivedTotalAmount[exitNcp] = _receivedTotalAmount[exitNcp] - amount; - _lockedUserBalanceToNCPTotal[exitNcp] = _lockedUserBalanceToNCPTotal[exitNcp] - amount; - - payable(exitUser).sendValue(amount); - } - - function withdrawForAdministrator(address exitNcp, uint256 amount, address to) external override nonReentrant onlyAdministrator { - // For admin - require(_receivedTotalAmount[exitNcp] - _lockedUserBalanceToNCPTotal[exitNcp] >= amount); - _receivedTotalAmount[exitNcp] = _receivedTotalAmount[exitNcp] - amount; - - payable(to).sendValue(amount); - } - - function getAvailableAmountForAdministrator(address exitNcp) external view override onlyAdministrator returns (uint256) { - // For admin - return _receivedTotalAmount[exitNcp] - _lockedUserBalanceToNCPTotal[exitNcp]; - } - - function upgradeNCPExit(address newImp) external onlyOwner { - if (newImp != address(0)) { - _authorizeUpgrade(newImp); - _upgradeToAndCallUUPS(newImp, new bytes(0), false); - } - } - - function getLockedUserBalanceToNCPTotal(address exitNcp) external view override returns (uint256) { - return _lockedUserBalanceToNCPTotal[exitNcp]; - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} -} diff --git a/wemix/governance-contract/contracts/Registry.sol b/wemix/governance-contract/contracts/Registry.sol deleted file mode 100644 index 7cc0ea380de3..000000000000 --- a/wemix/governance-contract/contracts/Registry.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/access/Ownable.sol"; -import "./interface/IRegistry.sol"; - -/** - * @title Registry - * @dev Registry Contract used to set domain and permission - * The contracts used by the permissioned user in ShowMe references permission in this contract. - * Not only contract address but also general address can be set in this contract. - * Owner should set domain and permission. - */ -contract Registry is Ownable, IRegistry { - // "Wemix Registry" - uint public magic = 0x57656d6978205265676973747279; - uint public modifiedBlock; - - mapping(bytes32 => address) public contracts; - mapping(bytes32 => mapping(address => bool)) public permissions; - - event SetContractDomain(address setter, bytes32 indexed name, address indexed addr); - event SetPermission(bytes32 indexed _contract, address indexed granted, bool status); - - constructor() Ownable() {} - - /* - * @dev Function to set contract(can be general address) domain - * Only owner can use this function - * @param _name name - * @param _addr address - * @return A boolean that indicates if the operation was successful. - */ - function setContractDomain(bytes32 _name, address _addr) public onlyOwner returns (bool success) { - require(_addr != address(0x0), "address should be non-zero"); - contracts[_name] = _addr; - modifiedBlock = block.number; - - emit SetContractDomain(msg.sender, _name, _addr); - return true; - } - - /* - * @dev Function to get contract(can be general address) address - * Anyone can use this function - * @param _name _name - * @return An address of the _name - */ - function getContractAddress(bytes32 _name) public view override returns (address addr) { - require(contracts[_name] != address(0x0), "address should be non-zero"); - return contracts[_name]; - } - - /* - * @dev Function to set permission on contract - * using modifier 'permissioned' references mapping variable 'permissions' - * Only owner can use this function - * @param _contract contract name - * @param _granted granted address - * @param _status true = can use, false = cannot use. default is false - * @return A boolean that indicates if the operation was successful. - */ - function setPermission(bytes32 _contract, address _granted, bool _status) public onlyOwner returns (bool success) { - require(_granted != address(0x0), "address should be non-zero"); - permissions[_contract][_granted] = _status; - modifiedBlock = block.number; - - emit SetPermission(_contract, _granted, _status); - return true; - } - - /* - * @dev Function to get permission on contract - * using modifier 'permissioned' references mapping variable 'permissions' - * @param _contract contract name - * @param _granted granted address - * @return permission result - */ - function getPermission(bytes32 _contract, address _granted) public view returns (bool found) { - return permissions[_contract][_granted]; - } -} diff --git a/wemix/governance-contract/contracts/Staking.sol b/wemix/governance-contract/contracts/Staking.sol deleted file mode 100644 index 03c109c5ae8a..000000000000 --- a/wemix/governance-contract/contracts/Staking.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; - -contract Staking is ERC1967Proxy, IBeacon { - constructor(address _imp) ERC1967Proxy(_imp, "") {} - - function implementation() external view override returns (address) { - return _implementation(); - } -} diff --git a/wemix/governance-contract/contracts/StakingImp.sol b/wemix/governance-contract/contracts/StakingImp.sol deleted file mode 100644 index a56c64646f59..000000000000 --- a/wemix/governance-contract/contracts/StakingImp.sol +++ /dev/null @@ -1,385 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -// import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; - -import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import "./GovChecker.sol"; -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import "./interface/IEnvStorage.sol"; -import "./interface/IStaking.sol"; -import "./interface/INCPStaking.sol"; -import "./interface/INCPExit.sol"; - -contract StakingImp is GovChecker, UUPSUpgradeable, ReentrancyGuardUpgradeable, IStaking { - //balance of each NCP - mapping(address => uint256) private _balance; - mapping(address => uint256) private _lockedBalance; - uint256 private _totalLockedBalance; - bool private revoked; - - //====NXTMeta====// - event Staked(address indexed payee, uint256 amount, uint256 total, uint256 available); - event Unstaked(address indexed payee, uint256 amount, uint256 total, uint256 available); - event Locked(address indexed payee, uint256 amount, uint256 total, uint256 available); - event Unlocked(address indexed payee, uint256 amount, uint256 total, uint256 available); - event TransferLocked(address indexed payee, uint256 amount, uint256 total, uint256 available); - event Revoked(address indexed owner, uint256 amount); - - //====Phase2-Staking====// - event DelegateStaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked); - event DelegateUnstaked(address indexed payee, uint256 amount, address indexed ncp, uint256 ncpTotalLocked, uint256 userTotalLocked); - event NCPAddrChanged(address indexed ncp); - - constructor() { - _disableInitializers(); - } - - function init(address registry, bytes memory data) external initializer { - _totalLockedBalance = 0; - revoked = false; - // _transferOwnership(_msgSender()); - __ReentrancyGuard_init(); - __Ownable_init(); - setRegistry(registry); - - // data is only for test purpose - if (data.length == 0) return; - - // []{address, amount} - address addr; - uint amount; - uint ix; - uint eix; - assembly { - ix := add(data, 0x20) - } - eix = ix + data.length; - while (ix < eix) { - assembly { - addr := mload(ix) - } - ix += 0x20; - require(ix < eix); - assembly { - amount := mload(ix) - } - ix += 0x20; - - _balance[addr] = amount; - } - } - - receive() external payable { - revert(); - } - - /** - * @dev Deposit from a sender. - */ - function deposit() external payable override nonReentrant notRevoked { - require(msg.value > 0, "Deposit amount should be greater than zero"); - - _balance[msg.sender] = _balance[msg.sender] + msg.value; - - if (IGov(getGovAddress()).isMember(msg.sender)) { - uint256 minimum_staking = IEnvStorage(getEnvStorageAddress()).getStakingMin(); - //if minimum lock is going higher than current locked value, lock more - if (minimum_staking > _lockedBalance[msg.sender] && availableBalanceOf(msg.sender) >= (minimum_staking - _lockedBalance[msg.sender])) { - if (ncpStaking != address(0)) { - uint256 pid = INCPStaking(ncpStaking).ncpToIdx(msg.sender); - if (INCPStaking(ncpStaking).getUserInfo(pid, msg.sender).lastRewardClaimed != 0) { - INCPStaking(ncpStaking).ncpDeposit(minimum_staking - _lockedBalance[msg.sender], payable(msg.sender)); - } - } - _lock(msg.sender, minimum_staking - _lockedBalance[msg.sender]); - } - } - - emit Staked(msg.sender, msg.value, _balance[msg.sender], availableBalanceOf(msg.sender)); - } - - /** - * @dev Withdraw for a sender. - * @param amount The amount of funds will be withdrawn and transferred to. - */ - function withdraw(uint256 amount) external override nonReentrant notRevoked { - require(amount > 0, "Amount should be bigger than zero"); - - //if minimum is changed unlock staked value - uint256 minimum_staking = IEnvStorage(getEnvStorageAddress()).getStakingMin(); - - bool unlockBalance = false; - if (lockedBalanceOf(msg.sender) - _lockedUserBalanceToNCPTotal[msg.sender] >= minimum_staking + amount) { - _unlock(msg.sender, amount); - unlockBalance = true; - } - - require(amount <= availableBalanceOf(msg.sender), "Withdraw amount should be equal or less than balance"); - - _balance[msg.sender] = _balance[msg.sender] - amount; - - if (ncpStaking != address(0) && unlockBalance) { - (bool succ, ) = payable(ncpStaking).call{ value: amount }(""); - require(succ, "Transfer to NCP staking failed"); - INCPStaking(ncpStaking).ncpWithdraw(amount, payable(msg.sender)); - } else { - //payable(msg.sender).transfer(amount); - (bool succ, ) = payable(msg.sender).call{ value: amount }(""); - require(succ, "Transfer to sender failed"); - } - - emit Unstaked(msg.sender, amount, _balance[msg.sender], availableBalanceOf(msg.sender)); - } - - /** - * @dev Lock fund - * @param payee The address whose funds will be locked. - * @param lockAmount The amount of funds will be locked. - */ - function lock(address payee, uint256 lockAmount) external override onlyGov { - _lock(payee, lockAmount); - } - - function lockMore(uint256 lockAmount) external onlyGovStaker { - _lock(msg.sender, lockAmount); - - if (ncpStaking != address(0)) { - uint256 pid = INCPStaking(ncpStaking).ncpToIdx(msg.sender); - if (INCPStaking(ncpStaking).getUserInfo(pid, msg.sender).lastRewardClaimed != 0) { - INCPStaking(ncpStaking).ncpDeposit(lockAmount, payable(msg.sender)); - } - } - } - - function _lock(address payee, uint256 lockAmount) internal { - if (lockAmount == 0) return; - require(_balance[payee] >= lockAmount, "Lock amount should be equal or less than balance"); - require(availableBalanceOf(payee) >= lockAmount, "Insufficient balance that can be locked"); - uint256 maximum = IEnvStorage(getEnvStorageAddress()).getStakingMax(); - - _lockedBalance[payee] = _lockedBalance[payee] + lockAmount; - require(_lockedBalance[payee] <= maximum, "Locked balance is larger than max"); - - _totalLockedBalance = _totalLockedBalance + lockAmount; - - emit Locked(payee, lockAmount, _balance[payee], availableBalanceOf(payee)); - } - - /** - * @dev Transfer locked value(slashing, ncpLockMore, ncpUserTotal) to Ecosystem, NCPExit - * @param from The address whose funds will be transfered. - * @param slashing The amount of funds will be transfered. - * @param ext ncpLockMore + ncpUserTotal - */ - function transferLocked(address from, uint256 slashing, uint256 ext) external override onlyGov { - INCPExit ncpExit = INCPExit(getContractAddress(bytes32("NCPExit"))); - - // Ecosystem - unlock(from, slashing); - _balance[from] = _balance[from] - slashing; - address ecosystem = getEcosystemAddress(); - _balance[ecosystem] = _balance[ecosystem] + slashing; - - // NCPLockMore - uint256 ncpLockMore = ext - _lockedUserBalanceToNCPTotal[from]; - unlock(from, ncpLockMore); - - // To NCPExit - uint256 transferedBalance = lockedBalanceOf(from); - require( - transferedBalance >= _lockedUserBalanceToNCPTotal[from], - "transferedBalance must be greater than or equal to _lockedUserBalanceToNCPTotal." - ); - - unlock(from, transferedBalance); - _balance[from] = _balance[from] - transferedBalance; - ncpExit.depositExitAmount{ value: transferedBalance }(from, transferedBalance, _lockedUserBalanceToNCPTotal[from]); - if (ncpStaking != address(0)) { - _lockedUserBalanceToNCPTotal[from] = 0; - _lockedUserBalanceToNCP[from][ncpStaking] = 0; - } - emit TransferLocked(from, slashing + transferedBalance, _balance[from], availableBalanceOf(from)); - } - - /** - * @dev Unlock fund - * @param payee The address whose funds will be unlocked. - * @param unlockAmount The amount of funds will be unlocked. - */ - function unlock(address payee, uint256 unlockAmount) public override onlyGov { - _unlock(payee, unlockAmount); - } - - function _unlock(address payee, uint256 unlockAmount) internal { - if (unlockAmount == 0) return; - require(_lockedBalance[payee] >= unlockAmount, "Unlock amount should be equal or less than balance locked"); - _lockedBalance[payee] = _lockedBalance[payee] - unlockAmount; - _totalLockedBalance = _totalLockedBalance - unlockAmount; - - emit Unlocked(payee, unlockAmount, _balance[payee], availableBalanceOf(payee)); - } - - function balanceOf(address payee) public view override returns (uint256) { - return _balance[payee]; - } - - function lockedBalanceOf(address payee) public view override returns (uint256) { - return _lockedBalance[payee]; - } - - function availableBalanceOf(address payee) public view override returns (uint256) { - return _balance[payee] - _lockedBalance[payee]; - } - - /** - * @dev Calculate voting weight which range between 0 and 100. - * @param payee The address whose funds were locked. - */ - function calcVotingWeight(address payee) public view override returns (uint256) { - return calcVotingWeightWithScaleFactor(payee, 1e2); - } - - /** - * @dev Calculate voting weight with a scale factor. - * @param payee The address whose funds were locked. - * @param factor The scale factor for weight. For instance: - * if 1e1, result range is between 0 ~ 10 - * if 1e2, result range is between 0 ~ 100 - * if 1e3, result range is between 0 ~ 1000 - */ - function calcVotingWeightWithScaleFactor(address payee, uint32 factor) public view override returns (uint256) { - if (_lockedBalance[payee] == 0 || factor == 0) return 0; - return (_lockedBalance[payee] * factor) / _totalLockedBalance; - } - - function isRevoked() public view returns (bool) { - return revoked; - } - - modifier notRevoked() { - require(!revoked, "Is revoked"); - _; - } - - /** - * @dev Allows the owner to revoke the staking. Funds already staked are returned to the owner - */ - function revoke() public onlyOwner notRevoked { - address contractOwner = owner(); - uint256 balance = address(this).balance; - - require(balance > 0, "balance = 0"); - - payable(contractOwner).transfer(balance); - revoked = true; - - emit Revoked(contractOwner, balance); - } - - function upgradeStaking(address newImp) external onlyOwner { - if (newImp != address(0)) { - _authorizeUpgrade(newImp); - _upgradeToAndCallUUPS(newImp, new bytes(0), false); - } - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[49] private __gap; - - //Phase2 - Staking - mapping(address /* NCP */ => mapping(address /* user */ => uint256 /* amount */)) private _lockedUserBalanceToNCP; - mapping(address /* NCP */ => uint256 /* amount */) private _lockedUserBalanceToNCPTotal; - - address public ncpStaking; - - modifier onlyNCPStaking() { - require(msg.sender == ncpStaking, "Only NCPStaking contract can call this function"); - _; - } - - function userBalanceOf(address ncp, address user) external view override returns (uint256) { - return _lockedUserBalanceToNCP[ncp][user]; - } - - function userTotalBalanceOf(address ncp) external view override returns (uint256) { - return _lockedUserBalanceToNCPTotal[ncp]; - } - - function getRatioOfUserBalance(address ncp) external view override returns (uint256) { - uint256 user = _lockedUserBalanceToNCPTotal[ncp]; - uint256 locked = _lockedBalance[ncp]; - if (user == 0 || locked == 0) return 0; - return (user * 1e2) / locked; - } - - function setNCPStaking(address _ncpStaking) external onlyOwner { - require(_ncpStaking != address(0), "NCPStaking is the zero address"); - ncpStaking = _ncpStaking; - emit NCPAddrChanged(_ncpStaking); - } - - /** - * @dev Deposit from a user for delegate staking. - */ - function delegateDepositAndLockMore(address ncp) external payable override nonReentrant notRevoked onlyNCPStaking { - require(msg.value > 0, "Deposit amount should be greater than zero"); - require(IGov(getGovAddress()).isMember(ncp), "NCP should be a member"); - - // console.log("delegateDepositAndLockMore: msg.value: %s",ncp); - - uint256 userDepositValue = msg.value; - //added value to ncp balance - _balance[ncp] = _balance[ncp] + userDepositValue; - - uint256 minimum_staking = IEnvStorage(getEnvStorageAddress()).getStakingMin(); - uint256 maximum_staking = IEnvStorage(getEnvStorageAddress()).getStakingMax(); - require( - minimum_staking <= _lockedBalance[ncp] && (_lockedBalance[ncp] + userDepositValue) <= maximum_staking, - "user should be in staking range" - ); - _lock(ncp, userDepositValue); - - _lockedUserBalanceToNCP[ncp][msg.sender] = _lockedUserBalanceToNCP[ncp][msg.sender] + userDepositValue; - _lockedUserBalanceToNCPTotal[ncp] = _lockedUserBalanceToNCPTotal[ncp] + userDepositValue; - - emit DelegateStaked(msg.sender, userDepositValue, ncp, _lockedUserBalanceToNCPTotal[ncp], _lockedUserBalanceToNCP[ncp][msg.sender]); - } - - /** - * @dev Withdraw for a user. - * @param amount The amount of funds will be unlocked, withdrawn and transferred to. - */ - function delegateUnlockAndWithdraw(address ncp, uint256 amount) external override nonReentrant notRevoked onlyNCPStaking { - require(amount > 0, "Amount should be bigger than zero"); - require(IGov(getGovAddress()).isMember(ncp), "NCP should be a member"); - - uint256 userWithdrawValue = amount; - uint256 minimum_staking = IEnvStorage(getEnvStorageAddress()).getStakingMin(); - require( - userWithdrawValue <= _lockedUserBalanceToNCP[ncp][msg.sender] && lockedBalanceOf(ncp) - userWithdrawValue >= minimum_staking, - "Withdraw amount should be equal or less than balance" - ); - _unlock(ncp, userWithdrawValue); - - _balance[ncp] = _balance[ncp] - userWithdrawValue; - _lockedUserBalanceToNCP[ncp][msg.sender] = _lockedUserBalanceToNCP[ncp][msg.sender] - userWithdrawValue; - _lockedUserBalanceToNCPTotal[ncp] = _lockedUserBalanceToNCPTotal[ncp] - userWithdrawValue; - - // payable(ncpStaking).transfer(userWithdrawValue); - (bool succ, ) = payable(ncpStaking).call{ value: userWithdrawValue }(""); - require(succ, "Transfer to NCP staking failed"); - - emit DelegateUnstaked(msg.sender, userWithdrawValue, ncp, _lockedUserBalanceToNCPTotal[ncp], _lockedUserBalanceToNCP[ncp][msg.sender]); - } - - function getTotalLockedBalance() external view override returns (uint256) { - return _totalLockedBalance; - } -} diff --git a/wemix/governance-contract/contracts/TestnetGovImp.sol b/wemix/governance-contract/contracts/TestnetGovImp.sol deleted file mode 100644 index a6d0d450863f..000000000000 --- a/wemix/governance-contract/contracts/TestnetGovImp.sol +++ /dev/null @@ -1,1031 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import "./abstract/BallotEnums.sol"; -import "./abstract/EnvConstants.sol"; -import "./abstract/TestnetAGov.sol"; - -import "./interface/IBallotStorage.sol"; -import "./interface/IEnvStorage.sol"; -import "./interface/IStaking.sol"; - -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; - -contract TestnetGovImp is TestnetAGov, ReentrancyGuardUpgradeable, BallotEnums, EnvConstants, UUPSUpgradeable { - enum VariableTypes { - Invalid, - Int, - Uint, - Uint2, - Uint3, - Uint4, - Address, - Bytes32, - Bytes, - String - } - - address constant ZERO = address(0); - - event MemberAdded(address indexed addr, address indexed voter); - event MemberRemoved(address indexed addr, address indexed voter); - event MemberChanged(address indexed oldAddr, address indexed newAddr, address indexed newVoter); - event EnvChanged(bytes32 envName, uint256 envType, bytes envVal); - event MemberUpdated(address indexed addr, address indexed voter); - // added for case that ballot's result could not be applicable. - event NotApplicable(uint256 indexed ballotId, string reason); - - event SetProposalTimePeriod(uint256 newPeriod); - - struct MemberInfo { - address staker; - address voter; // voter - address reward; - bytes name; - bytes enode; - bytes ip; - uint256 port; - uint256 lockAmount; - bytes memo; - uint256 duration; - } - - modifier checkLockedAmount() { - address staker = getStakerAddr(_msgSender()); - require(lockedBalanceOf(staker) <= getMaxStaking() && lockedBalanceOf(staker) >= getMinStaking(), "Invalid staking balance"); - _; - } - - modifier checkTimePeriod() { - address staker = getStakerAddr(_msgSender()); - require((block.timestamp - lastAddProposalTime[staker]) >= proposal_time_period, "Cannot add proposal too early"); - _; - lastAddProposalTime[staker] = block.timestamp; - } - - modifier checkMemberInfo(MemberInfo memory info) { - require(info.voter != ZERO, "Invalid voter"); - require(info.name.length > 0, "Invalid node name"); - require(info.ip.length > 0, "Invalid node IP"); - require(info.port > 0, "Invalid node port"); - require(info.lockAmount >= getMinStaking() && info.lockAmount <= getMaxStaking(), "Invalid lock Amount"); - _; - } - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - function init(address registry, uint256 lockAmount, bytes memory name, bytes memory enode, bytes memory ip, uint port) public initializer { - require(lockAmount > 0, "lockAmount should be more then zero"); - __ReentrancyGuard_init(); - __Ownable_init(); - setRegistry(registry); - - // Lock - IStaking staking = IStaking(getStakingAddress()); - require(staking.availableBalanceOf(msg.sender) >= lockAmount, "Insufficient staking"); - staking.lock(msg.sender, lockAmount); - - // Add voting member - memberLength = 1; - voters[memberLength] = msg.sender; - voterIdx[msg.sender] = memberLength; - - // Add reward member - rewards[memberLength] = msg.sender; - rewardIdx[msg.sender] = memberLength; - - stakers[memberLength] = msg.sender; - stakerIdx[msg.sender] = memberLength; - - // Add node - nodeLength = 1; - Node storage node = nodes[nodeLength]; - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - - nodeIdxFromMember[msg.sender] = nodeLength; - nodeToMember[nodeLength] = msg.sender; - - modifiedBlock = block.number; - } - - function initOnce(address registry, uint256 lockAmount, bytes memory data) public initializer { - __ReentrancyGuard_init(); - __Ownable_init(); - setRegistry(registry); - - // _initialized = true; - modifiedBlock = block.number; - - // Lock - IStaking staking = IStaking(getStakingAddress()); - - require(lockAmount >= getMinStaking() && getMaxStaking() >= lockAmount, "Invalid lock amount"); - - // []{uint staker, uint voter, uint reward, bytes name, bytes enode, bytes ip, uint port} - // 32 bytes, 32 bytes, 32 bytes, [32 bytes, ] * 3, 32 bytes - address staker; - address voter; - address reward; - bytes memory name; - bytes memory enode; - bytes memory ip; - uint port; - uint idx = 0; - - uint ix; - uint eix; - assembly { - ix := add(data, 0x20) - } - eix = ix + data.length; - while (ix < eix) { - assembly { - staker := mload(ix) - } - ix += 0x20; - require(ix < eix); - - assembly { - voter := mload(ix) - } - ix += 0x20; - require(ix < eix); - - assembly { - reward := mload(ix) - } - ix += 0x20; - require(ix < eix); - - assembly { - name := ix - } - ix += 0x20 + name.length; - require(ix < eix); - - assembly { - enode := ix - } - ix += 0x20 + enode.length; - require(ix < eix); - - assembly { - ip := ix - } - ix += 0x20 + ip.length; - require(ix < eix); - - assembly { - port := mload(ix) - } - ix += 0x20; - - idx += 1; - require(!isMember(staker) && !isMember(voter) && !isReward(reward), "Already member"); - voters[idx] = voter; - voterIdx[voter] = idx; - rewards[idx] = reward; - rewardIdx[reward] = idx; - stakers[idx] = staker; - stakerIdx[staker] = idx; - - require(staking.availableBalanceOf(staker) >= lockAmount, "Insufficient staking"); - - require(checkNodeInfoAdd(name, enode, ip, port), "Duplicated node info"); - - lock(staker, lockAmount); - - Node storage node = nodes[idx]; - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - // checkNodeInfo[getNodeInfoHash(enode, ip, port)] = true; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - - nodeToMember[idx] = staker; - nodeIdxFromMember[staker] = idx; - } - memberLength = idx; - nodeLength = idx; - } - - //Add member address = staker address = voter address - function addProposalToAddMember( - MemberInfo memory info - ) external onlyGovMem checkTimePeriod checkLockedAmount checkMemberInfo(info) returns (uint256 ballotIdx) { - require(!isMember(info.staker) && !isReward(info.staker), "Already member"); - require(info.staker == info.voter && info.staker == info.reward, "Staker is not voter"); - require(checkNodeInfoAdd(info.name, info.enode, info.ip, info.port), "Duplicated node info"); - ballotIdx = ballotLength + 1; - createBallotForMember( - ballotIdx, // ballot id - uint256(BallotTypes.MemberAdd), // ballot type - msg.sender, // creator - ZERO, // old staker address - info - ); - updateBallotLock(ballotIdx, info.lockAmount); - updateBallotMemo(ballotIdx, info.memo); - ballotLength = ballotIdx; - } - - function addProposalToRemoveMember( - address staker, - uint256 lockAmount, - bytes memory memo, - uint256 duration - ) external onlyGovMem checkTimePeriod checkLockedAmount returns (uint256 ballotIdx) { - require(staker != ZERO, "Invalid address"); - require(isMember(staker), "Non-member"); - require(getMemberLength() > 1, "Cannot remove a sole member"); - require(lockedBalanceOf(staker) >= lockAmount, "Insufficient balance that can be unlocked."); - ballotIdx = ballotLength + 1; - - MemberInfo memory info = MemberInfo( - ZERO, // new staker address - ZERO, - ZERO, - new bytes(0), // new name - new bytes(0), // new enode - new bytes(0), // new ip - 0, // new port - lockAmount, - memo, - duration - ); - createBallotForMember( - ballotIdx, // ballot id - uint256(BallotTypes.MemberRemoval), // ballot type - msg.sender, - staker, - info - ); - updateBallotLock(ballotIdx, lockAmount); - updateBallotMemo(ballotIdx, memo); - ballotLength = ballotIdx; - } - - // voter A, staker A -> voter B, staker B Ok with voting - // voter A, staker B -> voter C, staker C Ok with voting - // voter A, staker B -> voter A, staker A Ok with voting - // voter A call : voter A, staker A -> voter A, staker B X - // staker A call : voter A, staker A-> voter B, staker A Ok without voting - // only staker A call : voter B, staker A, reward C -> voter B, staker A, reward D Ok without voting only (voter can not change reward) - // staker only change own info - // voter can propose and vote anything - function addProposalToChangeMember( - MemberInfo memory newInfo, - address oldStaker - ) external onlyGovMem checkTimePeriod checkLockedAmount checkMemberInfo(newInfo) returns (uint256 ballotIdx) { - require(oldStaker != ZERO, "Invalid old Address"); - require(isMember(oldStaker), "Non-member"); - - require( - (voters[stakerIdx[oldStaker]] == newInfo.voter || - newInfo.voter == oldStaker || - ((!isMember(newInfo.voter)) && !isReward(newInfo.voter))) && - (rewards[stakerIdx[oldStaker]] == newInfo.reward || - newInfo.reward == oldStaker || - ((!isMember(newInfo.reward)) && !isReward(newInfo.reward))), - "Already a member" - ); - - ballotIdx = ballotLength + 1; - createBallotForMember( - ballotIdx, // ballot id - uint256(BallotTypes.MemberChange), // ballot type - msg.sender, // creator - oldStaker, // old staker address - newInfo - ); - updateBallotLock(ballotIdx, newInfo.lockAmount); - updateBallotMemo(ballotIdx, newInfo.memo); - ballotLength = ballotIdx; - // 요청자 == 변경할 voting 주소 - if (msg.sender == oldStaker && oldStaker == newInfo.staker) { - (, , uint256 duration) = getBallotPeriod(ballotIdx); - startBallot(ballotIdx, block.timestamp, block.timestamp + duration); - finalizeVote(ballotIdx, uint256(BallotTypes.MemberChange), true, true); - } - } - - function addProposalToChangeGov( - address newGovAddr, - bytes memory memo, - uint256 duration - ) external onlyGovMem checkLockedAmount returns (uint256 ballotIdx) { - require(newGovAddr != ZERO, "Implementation cannot be zero"); - require(newGovAddr != _getImplementation(), "Same contract address"); - //check newGov has proxiableUUID - try IERC1822Proxiable(newGovAddr).proxiableUUID() returns (bytes32 slot) { - require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); - } catch { - revert("ERC1967Upgrade: new implementation is not UUPS"); - } - ballotIdx = ballotLength + 1; - IBallotStorage(getBallotStorageAddress()).createBallotForAddress( - ballotLength + 1, // ballot id - uint256(BallotTypes.GovernanceChange), // ballot type - duration, - msg.sender, // creator - newGovAddr // new governance address - ); - updateBallotMemo(ballotIdx, memo); - ballotLength = ballotIdx; - } - - function addProposalToChangeEnv( - bytes32 envName, - uint256 envType, - bytes memory envVal, - bytes memory memo, - uint256 duration - ) external onlyGovMem checkTimePeriod checkLockedAmount returns (uint256 ballotIdx) { - // require(envName != 0, "Invalid name"); - require(uint256(VariableTypes.Int) <= envType && envType <= uint256(VariableTypes.String), "Invalid type"); - require(checkVariableCondition(envName, envVal), "Invalid value"); - - ballotIdx = ballotLength + 1; - IBallotStorage(getBallotStorageAddress()).createBallotForVariable( - ballotIdx, // ballot id - uint256(BallotTypes.EnvValChange), // ballot type - duration, - msg.sender, // creator - envName, // env name - envType, // env type - envVal // env value - ); - updateBallotMemo(ballotIdx, memo); - ballotLength = ballotIdx; - } - - function vote(uint256 ballotIdx, bool approval) external onlyGovMem nonReentrant checkLockedAmount { - // Check if some ballot is in progress - require(checkUnfinalized(), "Expired"); - - // Check if the ballot can be voted - uint256 ballotType = checkVotable(ballotIdx); - // Vote - createVote(ballotIdx, approval); - // Finalize - (, uint256 accept, uint256 reject) = getBallotVotingInfo(ballotIdx); - uint256 threshold = getThreshold(); - if (accept >= threshold || reject >= threshold || (accept + reject) == 10000) { - finalizeVote(ballotIdx, ballotType, accept > reject, false); - } - } - - function getMinStaking() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getStakingMin(); - } - - function getMaxStaking() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getStakingMax(); - } - - function getMinVotingDuration() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getBallotDurationMin(); - } - - function getMaxVotingDuration() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getBallotDurationMax(); - } - - function getThreshold() public pure returns (uint256) { - return 5001; - } // 50.01% from 5001 of 10000 - - function checkUnfinalized() public view returns (bool) { - if (ballotInVoting != 0) { - (, uint256 state, ) = getBallotState(ballotInVoting); - (, uint256 endTime, ) = getBallotPeriod(ballotInVoting); - if (state == uint256(BallotStates.InProgress)) { - if (endTime < block.timestamp) return false; - // require(endTime > block.timestamp, "Expired"); - // require(ballotIdx == ballotInVoting, "Now in voting with different ballot"); - // if (endTime < block.timestamp) { - - // finalizeBallot(ballotInVoting, uint256(BallotStates.Rejected)); - // ballotInVoting = 0; - // // console.log("vote is finalized %s", ballotInVoting); - // } else if (ballotIdx != ballotInVoting) { - // revert("Now in voting with different ballot"); - // } - } - } - return true; - } - - function finalizeEndedVote() public onlyGovMem { - require(!checkUnfinalized(), "Voting is not ended"); - finalizeBallot(ballotInVoting, uint256(BallotStates.Rejected)); - ballotInVoting = 0; - } - - function checkVotable(uint256 ballotIdx) private returns (uint256) { - (uint256 ballotType, uint256 state, ) = getBallotState(ballotIdx); - if (state == uint256(BallotStates.Ready)) { - require(ballotInVoting == 0, "Now in voting with different ballot"); - (, , uint256 duration) = getBallotPeriod(ballotIdx); - if (duration < getMinVotingDuration()) { - startBallot(ballotIdx, block.timestamp, block.timestamp + getMinVotingDuration()); - } else if (getMaxVotingDuration() < duration) { - startBallot(ballotIdx, block.timestamp, block.timestamp + getMaxVotingDuration()); - } else { - startBallot(ballotIdx, block.timestamp, block.timestamp + duration); - } - ballotInVoting = ballotIdx; - } else if (state == uint256(BallotStates.InProgress)) { - // Nothing to do - require(ballotIdx == ballotInVoting, "Now in voting with different ballot"); - } else { - // canceled - revert("Expired"); - } - return ballotType; - } - - function createVote(uint256 ballotIdx, bool approval) private { - uint256 voteIdx = voteLength + 1; - address staker = getStakerAddr(msg.sender); - uint256 weight = 10000 / getMemberLength(); //IStaking(getStakingAddress()).calcVotingWeightWithScaleFactor(staker, 10000); - uint256 decision = approval ? uint256(DecisionTypes.Accept) : uint256(DecisionTypes.Reject); - IBallotStorage(getBallotStorageAddress()).createVote(voteIdx, ballotIdx, staker, decision, weight); - voteLength = voteIdx; - } - - function finalizeVote(uint256 ballotIdx, uint256 ballotType, bool isAccepted, bool self) private { - uint256 ballotState = uint256(BallotStates.Rejected); - if (isAccepted) { - ballotState = uint256(BallotStates.Accepted); - - if (ballotType == uint256(BallotTypes.MemberAdd)) { - if (!addMember(ballotIdx)) { - ballotState = uint256(BallotStates.Rejected); - } - } else if (ballotType == uint256(BallotTypes.MemberRemoval)) { - removeMember(ballotIdx); - } else if (ballotType == uint256(BallotTypes.MemberChange)) { - if (!changeMember(ballotIdx, self)) { - ballotState = uint256(BallotStates.Rejected); - } - } else if (ballotType == uint256(BallotTypes.GovernanceChange)) { - changeGov(ballotIdx); - } else if (ballotType == uint256(BallotTypes.EnvValChange)) { - applyEnv(ballotIdx); - } - } - finalizeBallot(ballotIdx, ballotState); - if (!self) ballotInVoting = 0; - } - - function fromValidBallot(uint256 ballotIdx, uint256 targetType) private view { - (uint256 ballotType, uint256 state, ) = getBallotState(ballotIdx); - require(ballotType == targetType, "Invalid voting type"); - require(state == uint(BallotStates.InProgress), "Invalid voting state"); - (, uint256 accept, uint256 reject) = getBallotVotingInfo(ballotIdx); - require(accept >= getThreshold() || reject >= getThreshold(), "Not yet finalized"); - } - - function addMember(uint256 ballotIdx) private returns (bool) { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberAdd)); - - ( - , - address newStaker, - address newVoter, - address newReward, - bytes memory name, - bytes memory enode, - bytes memory ip, - uint port, - uint256 lockAmount - ) = getBallotMember(ballotIdx); - if (isMember(newStaker)) { - // new staker is already a member or a voter/ - emit NotApplicable(ballotIdx, "Already a member"); - return false; - } - if (isReward(newReward)) { - // new staker is already a member or a voter/ - emit NotApplicable(ballotIdx, "Already a rewarder"); - return false; - } - - // Lock - if (lockAmount < getMinStaking() || getMaxStaking() < lockAmount) { - emit NotApplicable(ballotIdx, "Invalid lock amount"); - return false; - } - - if (availableBalanceOf(newStaker) < lockAmount) { - emit NotApplicable(ballotIdx, "Insufficient balance that can be locked"); - return false; - } - - if (newStaker != newVoter && newStaker != newReward) { - emit NotApplicable(ballotIdx, "Invalid member address"); - return false; - } - - lock(newStaker, lockAmount); - - // Add voting and reward member - uint256 nMemIdx = memberLength + 1; - voters[nMemIdx] = newVoter; - voterIdx[newVoter] = nMemIdx; - rewards[nMemIdx] = newReward; - rewardIdx[newReward] = nMemIdx; - stakers[nMemIdx] = newStaker; - stakerIdx[newStaker] = nMemIdx; - - // Add node - uint256 nNodeIdx = nodeLength + 1; - Node storage node = nodes[nNodeIdx]; - - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - // checkNodeInfo[getNodeInfoHash(enode, ip, port)] = true; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - - nodeToMember[nNodeIdx] = newStaker; - nodeIdxFromMember[newStaker] = nNodeIdx; - node.name = name; - memberLength = nMemIdx; - nodeLength = nNodeIdx; - modifiedBlock = block.number; - emit MemberAdded(newStaker, newVoter); - return true; - } - - function removeMember(uint256 ballotIdx) private { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberRemoval)); - - (address oldStaker, , , , , , , , uint256 unlockAmount) = getBallotMember(ballotIdx); - if (!isMember(oldStaker)) { - emit NotApplicable(ballotIdx, "Not already a member"); - return; // Non-member. it is abnormal case, but passed - } - - // Remove voting and reward member - uint256 removeIdx = stakerIdx[oldStaker]; - address endAddr = stakers[memberLength]; - address oldVoter = voters[removeIdx]; - address oldReward = rewards[removeIdx]; - - if (stakerIdx[oldStaker] != memberLength) { - (stakers[removeIdx], stakers[memberLength], stakerIdx[oldStaker], stakerIdx[endAddr]) = ( - stakers[memberLength], - ZERO, - 0, - stakerIdx[oldStaker] - ); - removeIdx = rewardIdx[oldStaker]; - endAddr = rewards[memberLength]; - (rewards[removeIdx], rewards[memberLength], rewardIdx[oldReward], rewardIdx[endAddr]) = ( - rewards[memberLength], - ZERO, - 0, - rewardIdx[oldReward] - ); - removeIdx = voterIdx[oldStaker]; - endAddr = voters[memberLength]; - (voters[removeIdx], voters[memberLength], voterIdx[oldVoter], voterIdx[endAddr]) = (voters[memberLength], ZERO, 0, voterIdx[oldVoter]); - } else { - stakers[memberLength] = ZERO; - stakerIdx[oldStaker] = 0; - rewards[memberLength] = ZERO; - rewardIdx[oldReward] = 0; - voters[memberLength] = ZERO; - voterIdx[oldVoter] = 0; - } - memberLength = memberLength - 1; - // Remove node - - Node storage node = nodes[removeIdx]; - checkNodeEnode[node.enode] = false; - checkNodeName[node.name] = false; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = false; - if (nodeIdxFromMember[oldStaker] != nodeLength) { - removeIdx = nodeIdxFromMember[oldStaker]; - endAddr = nodeToMember[nodeLength]; - - node.name = nodes[nodeLength].name; - node.enode = nodes[nodeLength].enode; - node.ip = nodes[nodeLength].ip; - node.port = nodes[nodeLength].port; - - nodeToMember[removeIdx] = endAddr; - nodeIdxFromMember[endAddr] = removeIdx; - } - nodeToMember[nodeLength] = ZERO; - nodeIdxFromMember[oldStaker] = 0; - delete nodes[nodeLength]; - nodeLength = nodeLength - 1; - modifiedBlock = block.number; - // Unlock and transfer remained to governance - transferLockedAndUnlock(oldStaker, unlockAmount); - - emit MemberRemoved(oldStaker, oldVoter); - } - - function checkChangeMember( - uint256 ballotIdx, - bool self, - address oldStaker, - address newStaker, - address newVoter, - address newReward, - bytes memory name, - bytes memory enode, - bytes memory ip, - uint256 port, - uint256 lockAmount - ) private returns (bool) { - if (!self) { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberChange)); - } - - if (!isMember(oldStaker)) { - emit NotApplicable(ballotIdx, "Old address is not a member"); - return false; // Non-member. it is abnormal case. - } - - //old staker - uint256 memberIdx = stakerIdx[oldStaker]; - if (oldStaker != newStaker) { - if (isMember(newStaker)) { - emit NotApplicable(ballotIdx, "new address is already a member"); - return false; // already member. it is abnormal case. - } - if (newStaker != newVoter && newStaker != newReward) { - emit NotApplicable(ballotIdx, "Invalid voter address"); - return false; - } - // Lock - if (lockAmount < getMinStaking() || getMaxStaking() < lockAmount) { - emit NotApplicable(ballotIdx, "Invalid lock amount"); - return false; - } - if (availableBalanceOf(newStaker) < lockAmount) { - emit NotApplicable(ballotIdx, "Insufficient balance that can be locked"); - return false; - } - } - // Change node - uint256 nodeIdx = nodeIdxFromMember[oldStaker]; - { - Node memory node = nodes[nodeIdx]; - - if ( - //if node info is not same - // node info can not duplicate - !checkNodeInfoChange(name, enode, ip, port, node) - ) { - emit NotApplicable(ballotIdx, "Duplicated node info"); - return false; - } - } - - { - address oldReward = rewards[memberIdx]; - if ((oldStaker != newReward) && (oldReward != newReward) && (isMember(newReward) || isReward(newReward))) { - emit NotApplicable(ballotIdx, "Invalid reward address"); - return false; - } - } - { - address oldVoter = voters[memberIdx]; - if ((oldStaker != newVoter) && (oldVoter != newVoter) && (isMember(newVoter) || isReward(newVoter))) { - emit NotApplicable(ballotIdx, "Invalid voters address"); - return false; - } - } - return true; - } - - // isMember=> isStaker and isVoter - // vote => onlyVoter, staker can change voter without voting, default = staker == voter - // voter can change staker with voting.(changeMember) - function changeMember(uint256 ballotIdx, bool self) private returns (bool) { - if (!self) { - fromValidBallot(ballotIdx, uint256(BallotTypes.MemberChange)); - } - - ( - address oldStaker, - address newStaker, - address newVoter, - address newReward, - bytes memory name, - bytes memory enode, - bytes memory ip, - uint port, - uint256 lockAmount - ) = getBallotMember(ballotIdx); - if (!isMember(oldStaker)) { - emit NotApplicable(ballotIdx, "Old address is not a member"); - return false; // Non-member. it is abnormal case. - } - - if (!checkChangeMember(ballotIdx, self, oldStaker, newStaker, newVoter, newReward, name, enode, ip, port, lockAmount)) return false; - - //old staker - uint256 memberIdx = stakerIdx[oldStaker]; - if (oldStaker != newStaker) { - // Change member - stakers[memberIdx] = newStaker; - stakerIdx[newStaker] = memberIdx; - stakerIdx[oldStaker] = 0; - - lock(newStaker, lockAmount); - } - // Change node - uint256 nodeIdx = nodeIdxFromMember[oldStaker]; - { - Node storage node = nodes[nodeIdx]; - - checkNodeName[node.name] = false; - checkNodeEnode[node.enode] = false; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = false; - - node.name = name; - node.enode = enode; - node.ip = ip; - node.port = port; - modifiedBlock = block.number; - // checkNodeInfo[getNodeInfoHash(enode, ip, port)] = true; - checkNodeName[name] = true; - checkNodeEnode[enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(ip, port))] = true; - } - - { - address oldReward = rewards[memberIdx]; - if (oldReward != newReward) { - rewards[memberIdx] = newReward; - rewardIdx[newReward] = memberIdx; - rewardIdx[oldReward] = 0; - } - } - { - address oldVoter = voters[memberIdx]; - if (oldVoter != newVoter) { - voters[memberIdx] = newVoter; - voterIdx[newVoter] = memberIdx; - voterIdx[oldVoter] = 0; - } - } - - if (oldStaker != newStaker) { - nodeToMember[nodeIdx] = newStaker; - nodeIdxFromMember[newStaker] = nodeIdx; - nodeIdxFromMember[oldStaker] = 0; - - // Unlock and transfer remained to governance - transferLockedAndUnlock(oldStaker, lockAmount); - - emit MemberChanged(oldStaker, newStaker, newVoter); - } else { - emit MemberUpdated(oldStaker, newStaker); - } - return true; - } - - function changeGov(uint256 ballotIdx) private { - fromValidBallot(ballotIdx, uint256(BallotTypes.GovernanceChange)); - - address newImp = IBallotStorage(getBallotStorageAddress()).getBallotAddress(ballotIdx); - if (newImp != ZERO) { - _authorizeUpgrade(newImp); - _upgradeToAndCallUUPS(newImp, new bytes(0), false); - modifiedBlock = block.number; - } - } - - function applyEnv(uint256 ballotIdx) private { - fromValidBallot(ballotIdx, uint256(BallotTypes.EnvValChange)); - - (bytes32 envKey, uint256 envType, bytes memory envVal) = IBallotStorage(getBallotStorageAddress()).getBallotVariable(ballotIdx); - - IEnvStorage envStorage = IEnvStorage(getEnvStorageAddress()); - envStorage.setVariable(envKey, envVal); - modifiedBlock = block.number; - - emit EnvChanged(envKey, envType, envVal); - } - - //------------------ Code reduction for creation gas - function createBallotForMember(uint256 id, uint256 bType, address creator, address oAddr, MemberInfo memory info) private { - IBallotStorage(getBallotStorageAddress()).createBallotForMember( - id, // ballot id - bType, // ballot type - info.duration, - creator, // creator - oAddr, // old member address - info.staker, // new member address - info.voter, // old staker address - info.reward, // new staker address - info.name, // new name - info.enode, // new enode - info.ip, // new ip - info.port // new port - ); - } - - function updateBallotLock(uint256 id, uint256 amount) private { - IBallotStorage(getBallotStorageAddress()).updateBallotMemberLockAmount(id, amount); - } - - function updateBallotMemo(uint256 id, bytes memory memo) private { - IBallotStorage(getBallotStorageAddress()).updateBallotMemo(id, memo); - } - - function startBallot(uint256 id, uint256 s, uint256 e) private { - IBallotStorage(getBallotStorageAddress()).startBallot(id, s, e); - } - - function finalizeBallot(uint256 id, uint256 state) private { - IBallotStorage(getBallotStorageAddress()).finalizeBallot(id, state); - } - - function getBallotState(uint256 id) private view returns (uint256, uint256, bool) { - return IBallotStorage(getBallotStorageAddress()).getBallotState(id); - } - - function getBallotPeriod(uint256 id) private view returns (uint256, uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotPeriod(id); - } - - function getBallotVotingInfo(uint256 id) private view returns (uint256, uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotVotingInfo(id); - } - - function getBallotMember( - uint256 id - ) private view returns (address, address, address, address, bytes memory, bytes memory, bytes memory, uint256, uint256) { - return IBallotStorage(getBallotStorageAddress()).getBallotMember(id); - } - - function lock(address addr, uint256 amount) private { - IStaking(getStakingAddress()).lock(addr, amount); - } - - function unlock(address addr, uint256 amount) private { - IStaking(getStakingAddress()).unlock(addr, amount); - } - - function transferLockedAndUnlock(address addr, uint256 unlockAmount) private { - IStaking staking = IStaking(getStakingAddress()); - uint256 locked = staking.lockedBalanceOf(addr); - if (locked > unlockAmount) { - staking.transferLocked(addr, locked - unlockAmount); - unlock(addr, unlockAmount); - } else { - unlock(addr, locked); - } - } - - function lockedBalanceOf(address addr) private view returns (uint256) { - // IStaking staking = IStaking(getStakingAddress()).lockedBalanceOf(addr); - return IStaking(getStakingAddress()).lockedBalanceOf(addr); - } - - function availableBalanceOf(address addr) private view returns (uint256) { - return IStaking(getStakingAddress()).availableBalanceOf(addr); - } - - //------------------ Code reduction end - - //====NXTMeta=====/ - - function _authorizeUpgrade(address newImplementation) internal override onlyGovMem {} - - function checkVariableCondition(bytes32 envKey, bytes memory envVal) internal view returns (bool) { - return IEnvStorage(getEnvStorageAddress()).checkVariableCondition(envKey, envVal); - } - - function getStakerAddr(address _addr) public view returns (address staker) { - if (isStaker(_addr)) staker = _addr; - else if (isVoter(_addr)) staker = stakers[voterIdx[_addr]]; - } - - function setProposalTimePeriod(uint256 newPeriod) external onlyOwner { - require(newPeriod < 1 hours, "newPeriod is too long"); - proposal_time_period = newPeriod; - emit SetProposalTimePeriod(newPeriod); - } - - function checkNodeInfoAdd(bytes memory name, bytes memory enode, bytes memory ip, uint port) internal view returns (bool check) { - //Enode can not be duplicated - //IP:port can not be duplicated - //Name can not be duplicated - check = true; - if (checkNodeEnode[enode]) check = false; - if (checkNodeName[name]) check = false; - - bytes32 hvalue = keccak256(abi.encodePacked(ip, port)); - if (checkNodeIpPort[hvalue]) check = false; - } - - function checkNodeInfoChange( - bytes memory name, - bytes memory enode, - bytes memory ip, - uint port, - Node memory nodeInfo - ) internal view returns (bool check) { - //Enode can not be duplicated - //IP:port can not be duplicated - //Name can not be duplicated - check = true; - if ((keccak256(nodeInfo.enode) != keccak256(enode) && checkNodeEnode[enode])) check = false; - if ((keccak256(nodeInfo.name) != keccak256(name) && checkNodeName[name])) check = false; - - bytes32 hvalue = keccak256(abi.encodePacked(ip, port)); - if ((keccak256(abi.encodePacked(nodeInfo.ip, nodeInfo.port)) != hvalue && checkNodeIpPort[hvalue])) check = false; - } - - uint256 public proposal_time_period; - mapping(address => uint256) public lastAddProposalTime; - - //For a node duplicate check - // testnet value is here - // mapping(bytes32=>bool) internal checkNodeInfo; - mapping(bytes => bool) internal checkNodeName; - mapping(bytes => bool) internal checkNodeEnode; - mapping(bytes32 => bool) internal checkNodeIpPort; - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[46] private __gap; - - function reInit() external reinitializer(2) onlyOwner { - unchecked { - for (uint256 i = 0; i < getMemberLength(); i++) { - Node memory node = nodes[i]; - checkNodeName[node.name] = true; - checkNodeEnode[node.enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(node.ip, node.port))] = true; - } - } - } - - function reInitV3(uint256[] memory indices, address[] memory newRewards) external reinitializer(3) onlyOwner { - unchecked { - for (uint256 i = 0; i < indices.length; i++) { - address oldReward = rewards[i]; - address newReward = newRewards[i - 1]; - rewards[i] = newReward; - rewardIdx[newReward] = i; - rewardIdx[oldReward] = 0; - } - } - //for the testnet - checkNodeName[nodes[40].name] = true; - checkNodeEnode[nodes[40].enode] = true; - checkNodeIpPort[keccak256(abi.encodePacked(nodes[40].ip, nodes[40].port))] = true; - } - - function maigration(address newGov) external onlyOwner { - IGov(newGov).initMigration(address(reg), modifiedBlock, owner()); - unchecked { - for (uint256 i = 1; i < getMemberLength() + 1; i++) { - IGov(newGov).setMembersForMigration( - i, - stakers[i], - voters[i], - rewards[i], - lastAddProposalTime[stakers[i]], - nodes[i].name, - nodes[i].enode, - nodes[i].ip, - nodes[i].port - ); - } - } - IGov(newGov).setBallotForMigration(ballotLength, voteLength, ballotInVoting); - IGov(newGov).setProposalTimePeriodForMigration(proposal_time_period); - } -} diff --git a/wemix/governance-contract/contracts/abigen.go b/wemix/governance-contract/contracts/abigen.go deleted file mode 100644 index f968434ae0f1..000000000000 --- a/wemix/governance-contract/contracts/abigen.go +++ /dev/null @@ -1,51 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "path/filepath" - - gov "github.com/ethereum/go-ethereum/wemix/bind" - compile "github.com/ethereum/go-ethereum/wemix/governance-contract" -) - -const pkg string = "gov" - -var ( - rootFlag = flag.String("root", "../contracts", "") -) - -func main() { - flag.Parse() - root := *rootFlag - outDir := filepath.Join(root, "../../bind") - if contracts, err := compile.Compile(root, - filepath.Join(root, "Registry.sol"), - filepath.Join(root, "Gov.sol"), - filepath.Join(root, "GovImp.sol"), - filepath.Join(root, "NCPExit.sol"), - filepath.Join(root, "NCPExitImp.sol"), - filepath.Join(root, "Staking.sol"), - filepath.Join(root, "StakingImp.sol"), - filepath.Join(root, "storage", "BallotStorage.sol"), - filepath.Join(root, "storage", "BallotStorageImp.sol"), - filepath.Join(root, "storage", "EnvStorage.sol"), - filepath.Join(root, "storage", "EnvStorageImp.sol"), - ); err != nil { - panic(err) - } else if err := contracts.BindContracts(pkg, filepath.Join(outDir, "gen_registry_abi.go"), gov.REGISTRY); err != nil { - panic(err) - } else if err := contracts.BindContracts(pkg, filepath.Join(outDir, "gen_gov_abi.go"), gov.GOV, gov.GOV_IMP); err != nil { - panic(err) - } else if err := contracts.BindContracts(pkg, filepath.Join(outDir, "gen_ncpExit_abi.go"), gov.NCPEXIT, gov.NCPEXIT_IMP); err != nil { - panic(err) - } else if err := contracts.BindContracts(pkg, filepath.Join(outDir, "gen_staking_abi.go"), gov.STAKING, gov.STAKING_IMP); err != nil { - panic(err) - } else if err := contracts.BindContracts(pkg, filepath.Join(outDir, "gen_ballotStorage_abi.go"), gov.BALLOTSTORAGE, gov.BALLOTSTORAGE_IMP); err != nil { - panic(err) - } else if err := contracts.BindContracts(pkg, filepath.Join(outDir, "gen_envStorage_abi.go"), gov.ENVSTORAGE, gov.ENVSTORAGE_IMP); err != nil { - panic(err) - } else { - fmt.Println("success!") - } -} diff --git a/wemix/governance-contract/contracts/abstract/AEnvStorage.sol b/wemix/governance-contract/contracts/abstract/AEnvStorage.sol deleted file mode 100644 index 7b1fd0286ec4..000000000000 --- a/wemix/governance-contract/contracts/abstract/AEnvStorage.sol +++ /dev/null @@ -1,134 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../GovChecker.sol"; -import "../storage/EternalStorage.sol"; - -abstract contract AEnvStorage is EternalStorage, GovChecker { - event StringVarableChanged(bytes32 indexed _name, string _value); - - event UintVarableChanged(bytes32 indexed _name, uint _value); - - event IntVarableChanged(bytes32 indexed _name, int _value); - - event AddressVarableChanged(bytes32 indexed _name, address _value); - - event Bytes32VarableChanged(bytes32 indexed _name, bytes32 _value); - - event BytesVarableChanged(bytes32 indexed _name, bytes _value); - - event VarableChanged(bytes32 indexed _name, uint256 indexed _type, string _value); - - /** - * @dev Allows the owner to set a value for a int variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function setInt(bytes32 h, int256 v) internal { - _setInt(h, v); - emit IntVarableChanged(h, v); - } - - /** - * @dev Allows the owner to set a value for a boolean variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function setUint(bytes32 h, uint256 v) internal { - _setUint(h, v); - emit UintVarableChanged(h, v); - } - - /** - * @dev Allows the owner to set a value for a address variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function setAddress(bytes32 h, address v) internal { - _setAddress(h, v); - emit AddressVarableChanged(h, v); - } - - /** - * @dev Allows the owner to set a value for a string variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function setString(bytes32 h, string memory v) internal { - _setString(h, v); - emit StringVarableChanged(h, v); - } - - /** - * @dev Allows the owner to set a value for a bytes variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function setBytes(bytes32 h, bytes memory v) internal { - _setBytes(h, v); - emit BytesVarableChanged(h, v); - } - - /** - * @dev Allows the owner to set a value for a bytes32 variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function setBytes32(bytes32 h, bytes32 v) internal { - _setBytes32(h, v); - emit Bytes32VarableChanged(h, v); - } - - // mapping(bytes32 => Variable) internal s; - - // /** - // * @dev Add a new variable . - // * @param _h The keccak256 hash of the variable name - // * @param _t The type of value - // * @param _v The value to be stored - // */ - // function _add(bytes32 _h, uint256 _t, string _v) internal { - // require(s[_h]._name == "","not found"); - // s[_h] = Variable(_h,_t,_v); - // emit VarableAdded(_h,_t,_v); - // } - // /** - // * @dev Update a new variable . - // * @param _h The keccak256 hash of the variable name - // * @param _t The type of value - // * @param _v The value to be stored - // */ - // function _change(bytes32 _h, uint256 _t, string _v) internal { - // require(s[_h]._name == _h,"not found"); - // Variable storage v = s[_h]; - // v._name = _h; - // v._type = _t; - // v._value = _v; - // emit VarableChanged(_h,_t,_v); - - // } - // /** - // * @dev Get the type & value stored of a string variable by the hash name - // * @param _h The keccak256 hash of the variable name - // */ - // function get(bytes32 _h) public view returns (uint256 varType, string varVal){ - // //require(s[_h]._name == _h,"not found"); - // return (s[_h]._type, s[_h]._value); - // } - // /** - // * @dev Get the type stored of a string variable by the hash name - // * @param _h The keccak256 hash of the variable name - // */ - // function getType(bytes32 _h) public view returns (uint256){ - // require(s[_h]._name == _h,"not found"); - // return s[_h]._type; - // } - // /** - // * @dev Get the value stored of a string variable by the hash name - // * @param _h The keccak256 hash of the variable name - // */ - // function getValue(bytes32 _h) public view returns (string){ - // require(s[_h]._name == _h,"not found"); - // return s[_h]._value; - // } -} diff --git a/wemix/governance-contract/contracts/abstract/AGov.sol b/wemix/governance-contract/contracts/abstract/AGov.sol deleted file mode 100644 index 53d33e142cea..000000000000 --- a/wemix/governance-contract/contracts/abstract/AGov.sol +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../interface/IStaking.sol"; -import "../interface/IGov.sol"; -import "../GovChecker.sol"; - -abstract contract AGov is GovChecker, IGov { - uint public modifiedBlock; - - // For voting member - mapping(uint256 => address) internal voters; - mapping(address => uint256) public voterIdx; - uint256 internal memberLength; - - // For reward member - mapping(uint256 => address) internal rewards; - mapping(address => uint256) public rewardIdx; - - //For staking member - mapping(uint256 => address) internal stakers; - mapping(address => uint256) public stakerIdx; - - //For a node duplicate check - // mainnet value is here - // mapping(bytes32=>bool) internal checkNodeInfo; - mapping(bytes => bool) internal checkNodeName; - mapping(bytes => bool) internal checkNodeEnode; - mapping(bytes32 => bool) internal checkNodeIpPort; - - // For enode - struct Node { - bytes name; - bytes enode; - bytes ip; - uint port; - } - - mapping(uint256 => Node) internal nodes; - mapping(address => uint256) internal nodeIdxFromMember; - mapping(uint256 => address) internal nodeToMember; - uint256 internal nodeLength; - - // For ballot - uint256 public ballotLength; - uint256 public voteLength; - uint256 internal ballotInVoting; - - function isReward(address addr) public view override returns (bool) { - return (rewardIdx[addr] != 0); - } - function isVoter(address addr) public view override returns (bool) { - return (voterIdx[addr] != 0); - } - function isStaker(address addr) public view override returns (bool) { - return (stakerIdx[addr] != 0); - } - function isMember(address addr) public view override returns (bool) { - return (isStaker(addr) || isVoter(addr)); - } - function getMember(uint256 idx) public view override returns (address) { - return stakers[idx]; - } - function getMemberLength() public view override returns (uint256) { - return memberLength; - } - function getReward(uint256 idx) public view override returns (address) { - return rewards[idx]; - } - function getNodeIdxFromMember(address addr) public view override returns (uint256) { - return nodeIdxFromMember[addr]; - } - function getMemberFromNodeIdx(uint256 idx) public view override returns (address) { - return nodeToMember[idx]; - } - function getNodeLength() public view override returns (uint256) { - return nodeLength; - } - //====NxtMeta=====/ - function getVoter(uint256 idx) public view override returns (address) { - return voters[idx]; - } - - function getNode(uint256 idx) public view override returns (bytes memory name, bytes memory enode, bytes memory ip, uint port) { - return (nodes[idx].name, nodes[idx].enode, nodes[idx].ip, nodes[idx].port); - } - - function getBallotInVoting() public view override returns (uint256) { - return ballotInVoting; - } -} diff --git a/wemix/governance-contract/contracts/abstract/BallotEnums.sol b/wemix/governance-contract/contracts/abstract/BallotEnums.sol deleted file mode 100644 index 352db39eded3..000000000000 --- a/wemix/governance-contract/contracts/abstract/BallotEnums.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract BallotEnums { - enum BallotStates { - Invalid, - Ready, - InProgress, - Accepted, - Rejected, - Canceled - } - - enum DecisionTypes { - Invalid, - Accept, - Reject - } - - enum BallotTypes { - Invalid, - MemberAdd, // new Member Address, new Node id, new Node ip, new Node port - MemberRemoval, // old Member Address - MemberChange, // Old Member Address, New Member Address, new Node id, New Node ip, new Node port - GovernanceChange, // new Governace Impl Address - EnvValChange, // Env variable name, type , value - Execute // Genernal Purpose - } -} diff --git a/wemix/governance-contract/contracts/abstract/EnvConstants.sol b/wemix/governance-contract/contracts/abstract/EnvConstants.sol deleted file mode 100644 index d779d971310a..000000000000 --- a/wemix/governance-contract/contracts/abstract/EnvConstants.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract EnvConstants { - bytes32 public constant BLOCKS_PER_NAME = keccak256("blocksPer"); - - bytes32 public constant BALLOT_DURATION_MIN_NAME = keccak256("ballotDurationMin"); - - bytes32 public constant BALLOT_DURATION_MAX_NAME = keccak256("ballotDurationMax"); - - bytes32 public constant STAKING_MIN_NAME = keccak256("stakingMin"); - - bytes32 public constant STAKING_MAX_NAME = keccak256("stakingMax"); - - bytes32 public constant MAX_IDLE_BLOCK_INTERVAL_NAME = keccak256("MaxIdleBlockInterval"); - - //=======NXTMeta========/ - - bytes32 public constant BALLOT_DURATION_MIN_MAX_NAME = keccak256("ballotDurationMinMax"); - bytes32 public constant STAKING_MIN_MAX_NAME = keccak256("stakingMinMax"); - - bytes32 public constant BLOCK_CREATION_TIME_NAME = keccak256("blockCreationTime"); - bytes32 public constant BLOCK_REWARD_AMOUNT_NAME = keccak256("blockRewardAmount"); - // unit = gwei - bytes32 public constant MAX_PRIORITY_FEE_PER_GAS_NAME = keccak256("maxPriorityFeePerGas"); - - bytes32 public constant BLOCK_REWARD_DISTRIBUTION_METHOD_NAME = keccak256("blockRewardDistribution"); - bytes32 public constant BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME = keccak256("blockRewardDistributionBlockProducer"); - bytes32 public constant BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME = keccak256("blockRewardDistributionStakingReward"); - bytes32 public constant BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME = keccak256("blockRewardDistributionEcosystem"); - bytes32 public constant BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME = keccak256("blockRewardDistributionMaintenance"); - - bytes32 public constant GASLIMIT_AND_BASE_FEE_NAME = keccak256("gasLimitAndBaseFee"); - bytes32 public constant BLOCK_GASLIMIT_NAME = keccak256("blockGasLimit"); - bytes32 public constant BASE_FEE_MAX_CHANGE_RATE_NAME = keccak256("baseFeeMaxChangeRate"); - bytes32 public constant GAS_TARGET_PERCENTAGE_NAME = keccak256("gasTargetPercentage"); - - bytes32 public constant MAX_BASE_FEE_NAME = keccak256("maxBaseFee"); - - uint256 public constant DENOMINATOR = 10000; -} diff --git a/wemix/governance-contract/contracts/abstract/TestnetAGov.sol b/wemix/governance-contract/contracts/abstract/TestnetAGov.sol deleted file mode 100644 index 8df45ee91cc3..000000000000 --- a/wemix/governance-contract/contracts/abstract/TestnetAGov.sol +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../interface/IStaking.sol"; -import "../interface/ITestnetGov.sol"; -import "../GovChecker.sol"; - -abstract contract TestnetAGov is GovChecker, ITestnetGov { - uint public modifiedBlock; - - // For voting member - mapping(uint256 => address) internal voters; - mapping(address => uint256) public voterIdx; - uint256 internal memberLength; - - // For reward member - mapping(uint256 => address) internal rewards; - mapping(address => uint256) public rewardIdx; - - //For staking member - mapping(uint256 => address) internal stakers; - mapping(address => uint256) public stakerIdx; - - //For a node duplicate check - // mainnet value is here - // mapping(bytes32=>bool) internal checkNodeInfo; - // mapping(bytes=>bool) internal checkNodeName; - // mapping(bytes=>bool) internal checkNodeEnode; - // mapping(bytes32=>bool) internal checkNodeIpPort; - - // For enode - struct Node { - bytes name; - bytes enode; - bytes ip; - uint port; - } - - mapping(uint256 => Node) internal nodes; - mapping(address => uint256) internal nodeIdxFromMember; - mapping(uint256 => address) internal nodeToMember; - uint256 internal nodeLength; - - // For ballot - uint256 public ballotLength; - uint256 public voteLength; - uint256 internal ballotInVoting; - - function isReward(address addr) public view override returns (bool) { - return (rewardIdx[addr] != 0); - } - function isVoter(address addr) public view override returns (bool) { - return (voterIdx[addr] != 0); - } - function isStaker(address addr) public view override returns (bool) { - return (stakerIdx[addr] != 0); - } - function isMember(address addr) public view override returns (bool) { - return (isStaker(addr) || isVoter(addr)); - } - function getMember(uint256 idx) public view override returns (address) { - return stakers[idx]; - } - function getMemberLength() public view override returns (uint256) { - return memberLength; - } - function getReward(uint256 idx) public view override returns (address) { - return rewards[idx]; - } - function getNodeIdxFromMember(address addr) public view override returns (uint256) { - return nodeIdxFromMember[addr]; - } - function getMemberFromNodeIdx(uint256 idx) public view override returns (address) { - return nodeToMember[idx]; - } - function getNodeLength() public view override returns (uint256) { - return nodeLength; - } - //====NxtMeta=====/ - function getVoter(uint256 idx) public view override returns (address) { - return voters[idx]; - } - - function getNode(uint256 idx) public view override returns (bytes memory name, bytes memory enode, bytes memory ip, uint port) { - return (nodes[idx].name, nodes[idx].enode, nodes[idx].ip, nodes[idx].port); - } - - function getBallotInVoting() public view override returns (uint256) { - return ballotInVoting; - } -} diff --git a/wemix/governance-contract/contracts/interface/IBallotStorage.sol b/wemix/governance-contract/contracts/interface/IBallotStorage.sol deleted file mode 100644 index 191f06a13ebf..000000000000 --- a/wemix/governance-contract/contracts/interface/IBallotStorage.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IBallotStorage { - function createBallotForMember( - uint256, - uint256, - uint256, - address, - address, - address, - address, - address, - bytes memory, - bytes memory, - bytes memory, - uint - ) external; - - function createBallotForAddress(uint256, uint256, uint256, address, address) external returns (uint256); - function createBallotForVariable(uint256, uint256, uint256, address, bytes32, uint256, bytes memory) external returns (uint256); - function createBallotForExit(uint256, uint256, uint256) external; - function createVote(uint256, uint256, address, uint256, uint256) external; - function finalizeBallot(uint256, uint256) external; - function startBallot(uint256, uint256, uint256) external; - function updateBallotMemo(uint256, bytes memory) external; - function updateBallotDuration(uint256, uint256) external; - function updateBallotMemberLockAmount(uint256, uint256) external; - - function getBallotPeriod(uint256) external view returns (uint256, uint256, uint256); - function getBallotVotingInfo(uint256) external view returns (uint256, uint256, uint256); - function getBallotState(uint256) external view returns (uint256, uint256, bool); - - function getBallotBasic( - uint256 - ) external view returns (uint256, uint256, uint256, address, bytes memory, uint256, uint256, uint256, uint256, bool, uint256); - - function getBallotMember( - uint256 - ) external view returns (address, address, address, address, bytes memory, bytes memory, bytes memory, uint256, uint256); - function getBallotAddress(uint256) external view returns (address); - function getBallotVariable(uint256) external view returns (bytes32, uint256, bytes memory); - function getBallotForExit(uint256) external view returns (uint256, uint256); - - // Genernal Purpose - function createBallotForExecute(uint256, uint256, uint256, address, address, uint256, bytes memory) external; - function getBallotExecute(uint256) external view returns (address, uint256, bytes memory); -} diff --git a/wemix/governance-contract/contracts/interface/IEnvStorage.sol b/wemix/governance-contract/contracts/interface/IEnvStorage.sol deleted file mode 100644 index b2ed4ce1ec92..000000000000 --- a/wemix/governance-contract/contracts/interface/IEnvStorage.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IEnvStorage { - function setBlocksPerByBytes(bytes memory) external; - function setBallotDurationMinByBytes(bytes memory) external; - function setBallotDurationMaxByBytes(bytes memory) external; - function setStakingMinByBytes(bytes memory) external; - function setStakingMaxByBytes(bytes memory) external; - function setMaxIdleBlockIntervalByBytes(bytes memory) external; - function setBlockCreationTimeByBytes(bytes memory _value) external; - function setBlockRewardAmountByBytes(bytes memory _value) external; - function setMaxPriorityFeePerGasByBytes(bytes memory _value) external; - function setBallotDurationMinMax(uint256 _min, uint256 _max) external; - function setBlockRewardDistributionMethodByBytes(bytes memory _value) external; - function setGasLimitAndBaseFeeByBytes(bytes memory _value) external; - function setMaxBaseFeeByBytes(bytes memory _value) external; - function setBallotDurationMinMaxByBytes(bytes memory _value) external; - function setStakingMinMaxByBytes(bytes memory _value) external; - function getBlockCreationTime() external view returns (uint256); - function getBlockRewardAmount() external view returns (uint256); - function getMaxPriorityFeePerGas() external view returns (uint256); - function getStakingMinMax() external view returns (uint256, uint256); - function getBlockRewardDistributionMethod() external view returns (uint256, uint256, uint256, uint256); - function getGasLimitAndBaseFee() external view returns (uint256, uint256, uint256); - function getMaxBaseFee() external view returns (uint256); - function getBlocksPer() external view returns (uint256); - function getStakingMin() external view returns (uint256); - function getStakingMax() external view returns (uint256); - function getBallotDurationMin() external view returns (uint256); - function getBallotDurationMax() external view returns (uint256); - function getBallotDurationMinMax() external view returns (uint256, uint256); - function getMaxIdleBlockInterval() external view returns (uint256); - function checkVariableCondition(bytes32 envKey, bytes memory envVal) external pure returns (bool); - function setVariable(bytes32 envKey, bytes memory envVal) external; -} diff --git a/wemix/governance-contract/contracts/interface/IGov.sol b/wemix/governance-contract/contracts/interface/IGov.sol deleted file mode 100644 index 3d2c2e522f1b..000000000000 --- a/wemix/governance-contract/contracts/interface/IGov.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IGov { - function isReward(address addr) external view returns (bool); - function isVoter(address addr) external view returns (bool); - function isStaker(address addr) external view returns (bool); - function isMember(address) external view returns (bool); - function getMember(uint256) external view returns (address); - function getMemberLength() external view returns (uint256); - function getReward(uint256) external view returns (address); - function getNodeIdxFromMember(address) external view returns (uint256); - function getMemberFromNodeIdx(uint256) external view returns (address); - function getNodeLength() external view returns (uint256); - function getNode(uint256) external view returns (bytes memory, bytes memory, bytes memory, uint); - function getBallotInVoting() external view returns (uint256); - function getVoter(uint256 idx) external view returns (address); - function initMigration(address registry, uint256 oldModifiedBlock, address oldOwner) external; -} diff --git a/wemix/governance-contract/contracts/interface/IGovStaking.sol b/wemix/governance-contract/contracts/interface/IGovStaking.sol deleted file mode 100644 index 15d30e4210b3..000000000000 --- a/wemix/governance-contract/contracts/interface/IGovStaking.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IGovStaking { - function ncpStaking() external view returns (address); -} diff --git a/wemix/governance-contract/contracts/interface/INCPExit.sol b/wemix/governance-contract/contracts/interface/INCPExit.sol deleted file mode 100644 index 7be58769f619..000000000000 --- a/wemix/governance-contract/contracts/interface/INCPExit.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface INCPExit { - /** - * @dev Sets a new administrator. - * @param _newAdministrator Address of the new administrator. - */ - function setAdministrator(address _newAdministrator) external; - - /** - * @dev Sets a new administrator setter. - * @param _newAdministratorSetter Address of the new administrator setter. - */ - function setAdministratorSetter(address _newAdministratorSetter) external; - - /** - * @dev Exits from the contract. - * @param exitNcp Address of the NCP to exit. - * @param totalAmount Total amount of ether to exit with. - * @param lockedUserBalanceToNCPTotal Total locked user balance to NCP. - */ - function depositExitAmount(address exitNcp, uint256 totalAmount, uint256 lockedUserBalanceToNCPTotal) external payable; - - /** - * @dev Withdraws amount for a user. - * @param exitNcp Address of the ncp - * @param exitUser Address of the user to withdraw for. - * @param amount Amount to withdraw. - */ - function withdrawForUser(address exitNcp, address exitUser, uint256 amount) external; - - /** - * @dev Withdraws amount for the administrator. - * @param exitNcp Address of the NCP to withdraw from. - */ - function withdrawForAdministrator(address exitNcp, uint256 amount, address to) external; - - function getAvailableAmountForAdministrator(address exitNcp) external view returns (uint256); - - function getLockedUserBalanceToNCPTotal(address exitNcp) external view returns (uint256); -} diff --git a/wemix/governance-contract/contracts/interface/INCPStaking.sol b/wemix/governance-contract/contracts/interface/INCPStaking.sol deleted file mode 100644 index 1ba588cead5b..000000000000 --- a/wemix/governance-contract/contracts/interface/INCPStaking.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -/// @author @seunghwalee -interface INCPStaking { - struct UserInfo { - uint256 amount; - uint256 rewardDebt; - uint256 pendingReward; - uint256 pendingAmountReward; - uint256 lastRewardClaimed; - } - function ncpDeposit(uint256 amount, address payable to) external payable; - function ncpWithdraw(uint256 amount, address payable to) external payable; - function getUserInfo(uint256 pid, address account) external view returns (UserInfo memory info); - function ncpToIdx(address ncp) external view returns (uint256); -} diff --git a/wemix/governance-contract/contracts/interface/IRegistry.sol b/wemix/governance-contract/contracts/interface/IRegistry.sol deleted file mode 100644 index 6645818d06a7..000000000000 --- a/wemix/governance-contract/contracts/interface/IRegistry.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IRegistry { - function getContractAddress(bytes32) external view returns (address); -} diff --git a/wemix/governance-contract/contracts/interface/IStaking.sol b/wemix/governance-contract/contracts/interface/IStaking.sol deleted file mode 100644 index 07ed6c7337b1..000000000000 --- a/wemix/governance-contract/contracts/interface/IStaking.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IStaking { - function deposit() external payable; - function withdraw(uint256) external; - function lock(address, uint256) external; - function unlock(address, uint256) external; - function transferLocked(address, uint256, uint256) external; - function balanceOf(address) external view returns (uint256); - function lockedBalanceOf(address) external view returns (uint256); - function availableBalanceOf(address) external view returns (uint256); - function calcVotingWeight(address) external view returns (uint256); - function calcVotingWeightWithScaleFactor(address, uint32) external view returns (uint256); - // function isAllowed(address voter, address staker) external view returns(bool); - function userBalanceOf(address ncp, address user) external view returns (uint256); - function userTotalBalanceOf(address ncp) external view returns (uint256); - function getRatioOfUserBalance(address ncp) external view returns (uint256); - function delegateDepositAndLockMore(address ncp) external payable; - function delegateUnlockAndWithdraw(address ncp, uint256 amount) external; - function getTotalLockedBalance() external view returns (uint256); -} diff --git a/wemix/governance-contract/contracts/interface/ITestnetGov.sol b/wemix/governance-contract/contracts/interface/ITestnetGov.sol deleted file mode 100644 index c84e5e9d73ac..000000000000 --- a/wemix/governance-contract/contracts/interface/ITestnetGov.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface ITestnetGov { - function isReward(address addr) external view returns (bool); - function isVoter(address addr) external view returns (bool); - function isStaker(address addr) external view returns (bool); - function isMember(address) external view returns (bool); - function getMember(uint256) external view returns (address); - function getMemberLength() external view returns (uint256); - function getReward(uint256) external view returns (address); - function getNodeIdxFromMember(address) external view returns (uint256); - function getMemberFromNodeIdx(uint256) external view returns (address); - function getNodeLength() external view returns (uint256); - function getNode(uint256) external view returns (bytes memory, bytes memory, bytes memory, uint); - function getBallotInVoting() external view returns (uint256); - function getVoter(uint256 idx) external view returns (address); -} diff --git a/wemix/governance-contract/contracts/openzeppelin/contracts b/wemix/governance-contract/contracts/openzeppelin/contracts deleted file mode 160000 index d4fb3a89f9d0..000000000000 --- a/wemix/governance-contract/contracts/openzeppelin/contracts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d4fb3a89f9d0a39c7ee6f2601d33ffbf30085322 diff --git a/wemix/governance-contract/contracts/openzeppelin/contracts-upgradeable b/wemix/governance-contract/contracts/openzeppelin/contracts-upgradeable deleted file mode 160000 index 6b9807b0639e..000000000000 --- a/wemix/governance-contract/contracts/openzeppelin/contracts-upgradeable +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6b9807b0639e1dd75e07fa062e9432eb3f35dd8c diff --git a/wemix/governance-contract/contracts/storage/BallotStorage.sol b/wemix/governance-contract/contracts/storage/BallotStorage.sol deleted file mode 100644 index 09151ee2e92b..000000000000 --- a/wemix/governance-contract/contracts/storage/BallotStorage.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; - -contract BallotStorage is ERC1967Proxy, IBeacon { - constructor(address _imp) ERC1967Proxy(_imp, "") {} - - function implementation() external view override returns (address) { - return _implementation(); - } -} diff --git a/wemix/governance-contract/contracts/storage/BallotStorageImp.sol b/wemix/governance-contract/contracts/storage/BallotStorageImp.sol deleted file mode 100644 index a6b9c6ce0632..000000000000 --- a/wemix/governance-contract/contracts/storage/BallotStorageImp.sol +++ /dev/null @@ -1,608 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../abstract/BallotEnums.sol"; -import "../GovChecker.sol"; -import "../interface/IEnvStorage.sol"; -import "../interface/IBallotStorage.sol"; -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; - -contract BallotStorageImp is GovChecker, BallotEnums, IBallotStorage, UUPSUpgradeable { - struct BallotBasic { - //Ballot ID - uint256 id; - //시작 시간 - uint256 startTime; - //종료 시간 - uint256 endTime; - // 투표 종류 - uint256 ballotType; - // 제안자 - address creator; - // 투표 내용 - bytes memo; - //총 투표자수 - uint256 totalVoters; - // 진행상태 - uint256 powerOfAccepts; - // 진행상태 - uint256 powerOfRejects; - // 상태 - uint256 state; - // 완료유무 - bool isFinalized; - // 투표 기간 - uint256 duration; - } - - //For MemberAdding/MemberRemoval/MemberSwap - struct BallotMember { - uint256 id; - address oldStakerAddress; - address newStakerAddress; - address newVoterAddress; - address newRewardAddress; - bytes newNodeName; // name - bytes newNodeId; // admin.nodeInfo.id is 512 bit public key - bytes newNodeIp; - uint256 newNodePort; - uint256 lockAmount; - } - - //For GovernanceChange - struct BallotAddress { - uint256 id; - address newGovernanceAddress; - } - - //For EnvValChange - struct BallotVariable { - //Ballot ID - uint256 id; - bytes32 envVariableName; - uint256 envVariableType; - bytes envVariableValue; - } - - struct BallotExit { - // For exit - uint256 unlockAmount; - uint256 slashing; - } - - struct Vote { - uint256 voteId; - uint256 ballotId; - address voter; - uint256 decision; - uint256 power; - uint256 time; - } - - event BallotCreated(uint256 indexed ballotId, uint256 indexed ballotType, address indexed creator); - - event BallotStarted(uint256 indexed ballotId, uint256 indexed startTime, uint256 indexed endTime); - - event Voted(uint256 indexed voteid, uint256 indexed ballotId, address indexed voter, uint256 decision); - - event BallotFinalized(uint256 indexed ballotId, uint256 state); - - event BallotCanceled(uint256 indexed ballotId); - - event BallotUpdated(uint256 indexed ballotId, address indexed updatedBy); - - event SetPrevBallotStorage(address indexed previous); - - mapping(uint => BallotBasic) internal ballotBasicMap; - mapping(uint => BallotMember) internal ballotMemberMap; - mapping(uint => BallotAddress) internal ballotAddressMap; - mapping(uint => BallotVariable) internal ballotVariableMap; - - mapping(uint => Vote) internal voteMap; - mapping(uint => mapping(address => bool)) internal hasVotedMap; - - address internal previousBallotStorage; - - uint256 internal ballotCount; - - // For exit - mapping(uint => BallotExit) internal ballotExitMap; - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - function initialize(address _registry) external initializer { - __Ownable_init(); - setRegistry(_registry); - } - - modifier onlyValidTime(uint256 _startTime, uint256 _endTime) { - require(_startTime > 0 && _endTime > 0, "start or end is 0"); - require(_endTime > _startTime, "start >= end"); // && _startTime > getTime() - //uint256 diffTime = _endTime.sub(_startTime); - // require(diffTime > minBallotDuration()); - // require(diffTime <= maxBallotDuration()); - _; - } - - modifier onlyValidDuration(uint256 _duration) { - require(getMinVotingDuration() <= _duration, "Under min value of duration"); - require(_duration <= getMaxVotingDuration(), "Over max value of duration"); - _; - } - - modifier onlyGovOrCreator(uint256 _ballotId) { - require((getGovAddress() == msg.sender) || (ballotBasicMap[_ballotId].creator == msg.sender), "No Permission"); - _; - } - - modifier notDisabled() { - require(address(this) == getBallotStorageAddress(), "Is Disabled"); - _; - } - - function getMinVotingDuration() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getBallotDurationMin(); - } - - function getMaxVotingDuration() public view returns (uint256) { - return IEnvStorage(getEnvStorageAddress()).getBallotDurationMax(); - } - - function getTime() public view returns (uint256) { - return block.timestamp; - } - - function getPreviousBallotStorage() public view returns (address) { - return previousBallotStorage; - } - - function isDisabled() public view returns (bool) { - return (address(this) != getBallotStorageAddress()); - } - - function getBallotCount() public view returns (uint256) { - return ballotCount; - } - - function getBallotBasic( - uint256 _id - ) - public - view - override - returns ( - uint256 startTime, - uint256 endTime, - uint256 ballotType, - address creator, - bytes memory memo, - uint256 totalVoters, - uint256 powerOfAccepts, - uint256 powerOfRejects, - uint256 state, - bool isFinalized, - uint256 duration - ) - { - BallotBasic memory tBallot = ballotBasicMap[_id]; - startTime = tBallot.startTime; - endTime = tBallot.endTime; - ballotType = tBallot.ballotType; - creator = tBallot.creator; - memo = tBallot.memo; - totalVoters = tBallot.totalVoters; - powerOfAccepts = tBallot.powerOfAccepts; - powerOfRejects = tBallot.powerOfRejects; - state = tBallot.state; - isFinalized = tBallot.isFinalized; - duration = tBallot.duration; - } - - function getBallotMember( - uint256 _id - ) - public - view - override - returns ( - address oldStakerAddress, - address newStakerAddress, - address newVoterAddress, - address newRewardAddress, - bytes memory newNodeName, // name - bytes memory newNodeId, // admin.nodeInfo.id is 512 bit public key - bytes memory newNodeIp, - uint256 newNodePort, - uint256 lockAmount - ) - { - BallotMember storage tBallot = ballotMemberMap[_id]; - oldStakerAddress = tBallot.oldStakerAddress; - newStakerAddress = tBallot.newStakerAddress; - newVoterAddress = tBallot.newVoterAddress; - newRewardAddress = tBallot.newRewardAddress; - newNodeName = tBallot.newNodeName; - newNodeId = tBallot.newNodeId; - newNodeIp = tBallot.newNodeIp; - newNodePort = tBallot.newNodePort; - lockAmount = tBallot.lockAmount; - } - - function getBallotAddress(uint256 _id) public view override returns (address newGovernanceAddress) { - BallotAddress storage tBallot = ballotAddressMap[_id]; - newGovernanceAddress = tBallot.newGovernanceAddress; - } - - function getBallotVariable( - uint256 _id - ) public view override returns (bytes32 envVariableName, uint256 envVariableType, bytes memory envVariableValue) { - BallotVariable storage tBallot = ballotVariableMap[_id]; - envVariableName = tBallot.envVariableName; - envVariableType = tBallot.envVariableType; - envVariableValue = tBallot.envVariableValue; - } - - function setPreviousBallotStorage(address _address) public onlyOwner { - require(_address != address(0), "Invalid address"); - previousBallotStorage = _address; - emit SetPrevBallotStorage(_address); - } - - //For MemberAdding/MemberRemoval/MemberSwap - function createBallotForMember( - uint256 _id, - uint256 _ballotType, - uint256 _duration, - address _creator, - address _oldStakerAddress, - address _newStakerAddress, - address _newVoterAddress, - address _newRewardAddress, - bytes memory _newNodeName, // name - bytes memory _newNodeId, // admin.nodeInfo.id is 512 bit public key - bytes memory _newNodeIp, - uint _newNodePort - ) public override onlyGov notDisabled { - require( - _areMemberBallotParamValid( - _ballotType, - _oldStakerAddress, - _newStakerAddress, - _newVoterAddress, - _newRewardAddress, - _newNodeName, - _newNodeId, - _newNodeIp, - _newNodePort - ), - "Invalid Parameter" - ); - _createBallot(_id, _ballotType, _duration, _creator); - BallotMember memory newBallot; - newBallot.id = _id; - newBallot.oldStakerAddress = _oldStakerAddress; - newBallot.newStakerAddress = _newStakerAddress; - newBallot.newVoterAddress = _newVoterAddress; - newBallot.newRewardAddress = _newRewardAddress; - newBallot.newNodeName = _newNodeName; - newBallot.newNodeId = _newNodeId; - newBallot.newNodeIp = _newNodeIp; - newBallot.newNodePort = _newNodePort; - - ballotMemberMap[_id] = newBallot; - } - - function createBallotForExit(uint256 _id, uint256 _unlockAmount, uint256 _slashing) public override onlyGov notDisabled { - ballotExitMap[_id].unlockAmount = _unlockAmount; - ballotExitMap[_id].slashing = _slashing; - } - function getBallotForExit(uint256 _id) public view override returns (uint256 unlockAmount, uint256 slashing) { - unlockAmount = ballotExitMap[_id].unlockAmount; - slashing = ballotExitMap[_id].slashing; - } - - function createBallotForAddress( - uint256 _id, - uint256 _ballotType, - uint256 _duration, - address _creator, - address _newGovernanceAddress - ) public override onlyGov notDisabled returns (uint256) { - require(_ballotType == uint256(BallotTypes.GovernanceChange), "Invalid Ballot Type"); - require(_newGovernanceAddress != address(0), "Invalid Parameter"); - _createBallot(_id, _ballotType, _duration, _creator); - BallotAddress memory newBallot; - newBallot.id = _id; - newBallot.newGovernanceAddress = _newGovernanceAddress; - ballotAddressMap[_id] = newBallot; - return _id; - } - - function createBallotForVariable( - uint256 _id, - uint256 _ballotType, - uint256 _duration, - address _creator, - bytes32 _envVariableName, - uint256 _envVariableType, - bytes memory _envVariableValue - ) public override onlyGov notDisabled returns (uint256) { - require(_areVariableBallotParamValid(_ballotType, _envVariableName, _envVariableValue), "Invalid Parameter"); - _createBallot(_id, _ballotType, _duration, _creator); - BallotVariable memory newBallot; - newBallot.id = _id; - newBallot.envVariableName = _envVariableName; - newBallot.envVariableType = _envVariableType; - newBallot.envVariableValue = _envVariableValue; - ballotVariableMap[_id] = newBallot; - return _id; - } - - function createVote(uint256 _voteId, uint256 _ballotId, address _voter, uint256 _decision, uint256 _power) public override onlyGov notDisabled { - // Check decision type - require((_decision == uint256(DecisionTypes.Accept)) || (_decision == uint256(DecisionTypes.Reject)), "Invalid decision"); - // Check if ballot exists - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - // Check if vote exists - require(voteMap[_voteId].voteId != _voteId, "already existed voteId"); - // Check if voted - require(!hasVotedMap[_ballotId][_voter], "already voted"); - require(ballotBasicMap[_ballotId].state == uint256(BallotStates.InProgress), "Not InProgress State"); - - voteMap[_voteId] = Vote(_voteId, _ballotId, _voter, _decision, _power, getTime()); - _updateBallotForVote(_ballotId, _voter, _decision, _power); - - emit Voted(_voteId, _ballotId, _voter, _decision); - } - - function startBallot( - uint256 _ballotId, - uint256 _startTime, - uint256 _endTime - ) public override onlyGov notDisabled onlyValidTime(_startTime, _endTime) { - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - require(ballotBasicMap[_ballotId].isFinalized == false, "already finalized"); - require(ballotBasicMap[_ballotId].state == uint256(BallotStates.Ready), "Not Ready State"); - - BallotBasic storage _ballot = ballotBasicMap[_ballotId]; - _ballot.startTime = _startTime; - _ballot.endTime = _endTime; - _ballot.state = uint256(BallotStates.InProgress); - emit BallotStarted(_ballotId, _startTime, _endTime); - } - - function updateBallotMemo(uint256 _ballotId, bytes memory _memo) public override onlyGovOrCreator(_ballotId) notDisabled { - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - require(ballotBasicMap[_ballotId].isFinalized == false, "already finalized"); - BallotBasic storage _ballot = ballotBasicMap[_ballotId]; - _ballot.memo = _memo; - emit BallotUpdated(_ballotId, msg.sender); - } - - function updateBallotDuration( - uint256 _ballotId, - uint256 _duration - ) public override onlyGovOrCreator(_ballotId) notDisabled onlyValidDuration(_duration) { - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - require(ballotBasicMap[_ballotId].isFinalized == false, "already finalized"); - require(ballotBasicMap[_ballotId].state == uint256(BallotStates.Ready), "Not Ready State"); - - BallotBasic storage _ballot = ballotBasicMap[_ballotId]; - _ballot.duration = _duration; - emit BallotUpdated(_ballotId, msg.sender); - } - - function updateBallotMemberLockAmount(uint256 _ballotId, uint256 _lockAmount) public override onlyGov notDisabled { - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - require(ballotMemberMap[_ballotId].id == _ballotId, "not existed BallotMember"); - require(ballotBasicMap[_ballotId].isFinalized == false, "already finalized"); - require(ballotBasicMap[_ballotId].state == uint256(BallotStates.Ready), "Not Ready State"); - BallotMember storage _ballot = ballotMemberMap[_ballotId]; - _ballot.lockAmount = _lockAmount; - emit BallotUpdated(_ballotId, msg.sender); - } - - // cancel ballot info - function cancelBallot(uint256 _ballotId) public onlyGovOrCreator(_ballotId) notDisabled { - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - require(ballotBasicMap[_ballotId].isFinalized == false, "already finalized"); - - require(ballotBasicMap[_ballotId].state == uint256(BallotStates.Ready), "Not Ready State"); - BallotBasic storage _ballot = ballotBasicMap[_ballotId]; - _ballot.state = uint256(BallotStates.Canceled); - emit BallotCanceled(_ballotId); - } - - // finalize ballot info - function finalizeBallot(uint256 _ballotId, uint256 _ballotState) public override onlyGov notDisabled { - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - require(ballotBasicMap[_ballotId].isFinalized == false, "already finalized"); - require((_ballotState == uint256(BallotStates.Accepted)) || (_ballotState == uint256(BallotStates.Rejected)), "Invalid Ballot State"); - - BallotBasic storage _ballot = ballotBasicMap[_ballotId]; - _ballot.state = _ballotState; - _ballot.isFinalized = true; - emit BallotFinalized(_ballotId, _ballotState); - } - - function hasAlreadyVoted(uint56 _ballotId, address _voter) public view returns (bool) { - return hasVotedMap[_ballotId][_voter]; - } - - function getVote( - uint256 _voteId - ) public view returns (uint256 voteId, uint256 ballotId, address voter, uint256 decision, uint256 power, uint256 time) { - require(voteMap[_voteId].voteId == _voteId, "not existed voteId"); - Vote memory _vote = voteMap[_voteId]; - voteId = _vote.voteId; - ballotId = _vote.ballotId; - voter = _vote.voter; - decision = _vote.decision; - power = _vote.power; - time = _vote.time; - } - - function getBallotPeriod(uint256 _id) public view override returns (uint256 startTime, uint256 endTime, uint256 duration) { - BallotBasic memory tBallot = ballotBasicMap[_id]; - startTime = tBallot.startTime; - endTime = tBallot.endTime; - duration = tBallot.duration; - } - - function getBallotVotingInfo(uint256 _id) public view override returns (uint256 totalVoters, uint256 powerOfAccepts, uint256 powerOfRejects) { - BallotBasic memory tBallot = ballotBasicMap[_id]; - totalVoters = tBallot.totalVoters; - powerOfAccepts = tBallot.powerOfAccepts; - powerOfRejects = tBallot.powerOfRejects; - } - - function getBallotState(uint256 _id) public view override returns (uint256 ballotType, uint256 state, bool isFinalized) { - BallotBasic memory tBallot = ballotBasicMap[_id]; - ballotType = tBallot.ballotType; - state = tBallot.state; - isFinalized = tBallot.isFinalized; - } - - function _createBallot(uint256 _id, uint256 _ballotType, uint256 _duration, address _creator) internal onlyValidDuration(_duration) { - require(ballotBasicMap[_id].id != _id, "Already existed ballot"); - - BallotBasic memory newBallot; - newBallot.id = _id; - newBallot.ballotType = _ballotType; - newBallot.creator = _creator; - // newBallot.memo = _memo; - newBallot.state = uint256(BallotStates.Ready); - newBallot.isFinalized = false; - newBallot.duration = _duration; - ballotBasicMap[_id] = newBallot; - ballotCount = ballotCount + 1; - emit BallotCreated(_id, _ballotType, _creator); - } - - function _areMemberBallotParamValid( - uint256 _ballotType, - address _oldStakerAddress, - address _newStakerAddress, - address _newVoterAddress, - address _newRewardAddress, - bytes memory _newName, - bytes memory _newNodeId, // admin.nodeInfo.id is 512 bit public key - bytes memory _newNodeIp, - uint _newNodePort - ) internal pure returns (bool) { - require((_ballotType >= uint256(BallotTypes.MemberAdd)) && (_ballotType <= uint256(BallotTypes.MemberChange)), "Invalid Ballot Type"); - - if (_ballotType == uint256(BallotTypes.MemberRemoval)) { - require(_oldStakerAddress != address(0), "Invalid old staker address"); - require(_newStakerAddress == address(0), "Invalid new staker address"); - require(_newVoterAddress == address(0), "Invalid new voter address"); - require(_newRewardAddress == address(0), "Invalid new reward address"); - require(_newName.length == 0, "Invalid new node name"); - require(_newNodeId.length == 0, "Invalid new node id"); - require(_newNodeIp.length == 0, "Invalid new node IP"); - require(_newNodePort == 0, "Invalid new node Port"); - } else { - require(_newName.length > 0, "Invalid new node name"); - require(_newNodeId.length == 64, "Invalid new node id"); - require(_newNodeIp.length > 0, "Invalid new node IP"); - require(_newNodePort > 0, "Invalid new node Port"); - if (_ballotType == uint256(BallotTypes.MemberAdd)) { - require(_oldStakerAddress == address(0), "Invalid old staker address"); - require(_newStakerAddress != address(0), "Invalid new staker address"); - require(_newVoterAddress != address(0), "Invalid new voter address"); - require(_newRewardAddress != address(0), "Invalid new reward address"); - } else if (_ballotType == uint256(BallotTypes.MemberChange)) { - require(_oldStakerAddress != address(0), "Invalid old staker address"); - require(_newStakerAddress != address(0), "Invalid new staker address"); - require(_newVoterAddress != address(0), "Invalid new voter address"); - require(_newRewardAddress != address(0), "Invalid new reward address"); - } - } - - return true; - } - - function _areVariableBallotParamValid( - uint256 _ballotType, - bytes32 _envVariableName, - bytes memory _envVariableValue - ) internal pure returns (bool) { - require(_ballotType == uint256(BallotTypes.EnvValChange), "Invalid Ballot Type"); - require(_envVariableName > 0, "Invalid environment variable name"); - require(_envVariableValue.length > 0, "Invalid environment variable value"); - - return true; - } - - // update ballot - function _updateBallotForVote(uint256 _ballotId, address _voter, uint256 _decision, uint256 _power) internal { - // c1. actionType 범위 - require((_decision == uint256(DecisionTypes.Accept)) || (_decision == uint256(DecisionTypes.Reject)), "Invalid decision"); - // c2. ballotId 존재 하는지 확인 - require(ballotBasicMap[_ballotId].id == _ballotId, "not existed Ballot"); - // c3. 이미 vote 했는지 확인 - require(hasVotedMap[_ballotId][_voter] == false, "already voted"); - - //1.get ballotBasic - BallotBasic storage _ballot = ballotBasicMap[_ballotId]; - //2. 투표 여부 등록 - hasVotedMap[_ballotId][_voter] = true; - //3. update totalVoters - _ballot.totalVoters = _ballot.totalVoters + 1; - //4. Update power of accept/reject - if (_decision == uint256(DecisionTypes.Accept)) { - _ballot.powerOfAccepts = _ballot.powerOfAccepts + _power; - } else { - _ballot.powerOfRejects = _ballot.powerOfRejects + _power; - } - } - - function upgradeBallotStorage(address newImp) external onlyOwner { - if (newImp != address(0)) { - _authorizeUpgrade(newImp); - _upgradeToAndCallUUPS(newImp, new bytes(0), false); - } - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} - - // Genernal Purpose - - struct BallotExecute { - address target; - uint256 value; - bytes data; - } - mapping(uint => BallotExecute) private __ballotExecuteMap; - - function createBallotForExecute( - uint256 _id, - uint256 _ballotType, - uint256 _duration, - address _creator, - address _target, - uint256 _value, - bytes memory _calldata - ) external override onlyGov notDisabled { - require(_ballotType == uint256(BallotTypes.Execute), "Invalid Ballot Type"); - require(_target != address(0), "Invalid target address"); - // ballot basic - _createBallot(_id, _ballotType, _duration, _creator); - // ballot executeMap - __ballotExecuteMap[_id] = BallotExecute({ target: _target, value: _value, data: _calldata }); - } - - function getBallotExecute(uint256 _id) external view override returns (address, uint256, bytes memory) { - BallotExecute memory _ballot = __ballotExecuteMap[_id]; - return (_ballot.target, _ballot.value, _ballot.data); - } - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[40] private __gap; -} diff --git a/wemix/governance-contract/contracts/storage/EnvStorage.sol b/wemix/governance-contract/contracts/storage/EnvStorage.sol deleted file mode 100644 index c6dd88efdf7a..000000000000 --- a/wemix/governance-contract/contracts/storage/EnvStorage.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; - -contract EnvStorage is ERC1967Proxy, IBeacon { - constructor(address _implementation) ERC1967Proxy(_implementation, "") {} - - function implementation() external view override returns (address) { - return _implementation(); - } -} diff --git a/wemix/governance-contract/contracts/storage/EnvStorageImp.sol b/wemix/governance-contract/contracts/storage/EnvStorageImp.sol deleted file mode 100644 index e29644c92032..000000000000 --- a/wemix/governance-contract/contracts/storage/EnvStorageImp.sol +++ /dev/null @@ -1,362 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; -// pragma abicod - -import "../abstract/EnvConstants.sol"; -import "../abstract/AEnvStorage.sol"; -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import "../interface/IEnvStorage.sol"; - -contract EnvStorageImp is AEnvStorage, EnvConstants, UUPSUpgradeable, IEnvStorage { - event UpgradeImplementation(address indexed implementation); - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - function initialize(address _registry, bytes32[] memory names, uint256[] memory infos) public initializer { - require(_registry != _getImplementation(), "registry should not be same as implementation"); - __Ownable_init(); - setRegistry(_registry); - - for (uint i = 0; i < infos.length; i++) { - uint256 temp = getUint(names[i]); - require(infos[i] != 0 || temp != 0, "invalid variable"); - if (temp == 0) { - setUint(names[i], infos[i]); - } - } - } - function upgradeTo(address newImplementation) public override onlyOwner { - _upgradeToAndCallUUPS(newImplementation, "", false); - emit UpgradeImplementation(newImplementation); - } - - function getBlocksPer() public view override returns (uint256) { - return getUint(BLOCKS_PER_NAME); - } - - function getBallotDurationMin() public view override returns (uint256) { - return getUint(BALLOT_DURATION_MIN_NAME); - } - - function getBallotDurationMax() public view override returns (uint256) { - return getUint(BALLOT_DURATION_MAX_NAME); - } - - function getStakingMin() public view override returns (uint256) { - return getUint(STAKING_MIN_NAME); - } - - function getStakingMax() public view override returns (uint256) { - return getUint(STAKING_MAX_NAME); - } - - // function getGasPrice() public override view returns (uint256) { - // return getUint(GAS_PRICE_NAME); - // } - - function getMaxIdleBlockInterval() public view override returns (uint256) { - return getUint(MAX_IDLE_BLOCK_INTERVAL_NAME); - } - - function _authorizeUpgrade(address newImplementation) internal override onlyGov {} - - function setBlocksPer(uint256 _value) public onlyGov { - setUint(BLOCKS_PER_NAME, _value); - } - - function setBallotDurationMin(uint256 _value) public onlyGov { - setUint(BALLOT_DURATION_MIN_NAME, _value); - } - - function setBallotDurationMax(uint256 _value) public onlyGov { - setUint(BALLOT_DURATION_MAX_NAME, _value); - } - - function setStakingMin(uint256 _value) public onlyGov { - setUint(STAKING_MIN_NAME, _value); - } - - function setStakingMax(uint256 _value) public onlyGov { - setUint(STAKING_MAX_NAME, _value); - } - - // function setGasPrice(uint256 _value) public override onlyGov { - // setUint(GAS_PRICE_NAME, _value); - // } - - function setMaxIdleBlockInterval(uint256 _value) public onlyGov { - setUint(MAX_IDLE_BLOCK_INTERVAL_NAME, _value); - } - - function setBlocksPerByBytes(bytes memory _value) public override onlyGov { - setBlocksPer(toUint(_value)); - } - - function setBallotDurationMinByBytes(bytes memory _value) public override onlyGov { - setBallotDurationMin(toUint(_value)); - } - - function setBallotDurationMaxByBytes(bytes memory _value) public override onlyGov { - setBallotDurationMax(toUint(_value)); - } - - function setStakingMinByBytes(bytes memory _value) public override onlyGov { - setStakingMin(toUint(_value)); - } - - function setStakingMaxByBytes(bytes memory _value) public override onlyGov { - setStakingMax(toUint(_value)); - } - - // function setGasPriceByBytes(bytes memory _value ) public override onlyGov { - // setGasPrice(toUint(_value)); - // } - - function setMaxIdleBlockIntervalByBytes(bytes memory _value) public override onlyGov { - setMaxIdleBlockInterval(toUint(_value)); - } - - //=======NXTMeta=======/ - - function getBallotDurationMinMax() public view override returns (uint256, uint256) { - return (getUint(BALLOT_DURATION_MIN_NAME), getUint(BALLOT_DURATION_MAX_NAME)); - } - - function getStakingMinMax() public view override returns (uint256, uint256) { - return (getUint(STAKING_MIN_NAME), getUint(STAKING_MAX_NAME)); - } - - function getBlockCreationTime() public view override returns (uint256) { - return getUint(BLOCK_CREATION_TIME_NAME); - } - - function getBlockRewardAmount() public view override returns (uint256) { - return getUint(BLOCK_REWARD_AMOUNT_NAME); - } - - function getMaxPriorityFeePerGas() public view override returns (uint256) { - return getUint(MAX_PRIORITY_FEE_PER_GAS_NAME); - } - - function getMaxBaseFee() public view override returns (uint256) { - return getUint(MAX_BASE_FEE_NAME); - } - - function getBlockRewardDistributionMethod() public view override returns (uint256, uint256, uint256, uint256) { - return ( - getUint(BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME), - getUint(BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME), - getUint(BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME), - getUint(BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME) - ); - } - - function getGasLimitAndBaseFee() public view override returns (uint256, uint256, uint256) { - return (getUint(BLOCK_GASLIMIT_NAME), getUint(BASE_FEE_MAX_CHANGE_RATE_NAME), getUint(GAS_TARGET_PERCENTAGE_NAME)); - } - - // function getStakingRewardAddress() public override view returns(address){ - // return getAddress(STAKING_REWARD_ADDRESS_NAME); - // } - - // function getEcofundAddress() public override view returns(address){ - // return getAddress(ECOFUND_ADDRESS_NAME); - // } - - // function getMaintenanceAddress() public override view returns(address){ - // return getAddress(MAINTENANCE_ADDRESS_NAME); - // } - - function setBallotDurationMinMax(uint256 _min, uint256 _max) public override onlyGov { - require(_min <= _max, "Minimum duration must be smaller and equal than maximum duration"); - setUint(BALLOT_DURATION_MIN_NAME, _min); - setUint(BALLOT_DURATION_MAX_NAME, _max); - } - - function setStakingMinMax(uint256 _min, uint256 _max) public onlyGov { - require(_min <= _max, "Minimum staking must be smaller and equal than maximum staking"); - setUint(STAKING_MIN_NAME, _min); - setUint(STAKING_MAX_NAME, _max); - } - - function setBlockCreationTime(uint256 _value) public onlyGov { - setUint(BLOCK_CREATION_TIME_NAME, _value); - } - - function setBlockRewardAmount(uint256 _value) public onlyGov { - setUint(BLOCK_REWARD_AMOUNT_NAME, _value); - } - - function setMaxPriorityFeePerGas(uint256 _value) public onlyGov { - setUint(MAX_PRIORITY_FEE_PER_GAS_NAME, _value); - } - - function setMaxBaseFee(uint256 _value) public onlyGov { - setUint(MAX_BASE_FEE_NAME, _value); - } - - function setBlockRewardDistributionMethod( - uint256 _block_producer, - uint256 _staking_reward, - uint256 _ecofund, - uint256 _maintenance - ) public onlyGov { - require((_block_producer + _staking_reward + _ecofund + _maintenance) == DENOMINATOR, "Wrong reward distrubtion ratio"); - setUint(BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME, _block_producer); - setUint(BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME, _staking_reward); - setUint(BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME, _ecofund); - setUint(BLOCK_REWARD_DISTRIBUTION_MAINTENANCE_NAME, _maintenance); - } - - function setGasLimitAndBaseFee( - uint256 _block_GasLimit, - uint256 _baseFeeMaxChangeRate, - uint256 _gasTargetPercentage, - uint256 _maxBaseFee - ) public onlyGov { - setUint(BLOCK_GASLIMIT_NAME, _block_GasLimit); - setUint(BASE_FEE_MAX_CHANGE_RATE_NAME, _baseFeeMaxChangeRate); - setUint(GAS_TARGET_PERCENTAGE_NAME, _gasTargetPercentage); - setUint(MAX_BASE_FEE_NAME, _maxBaseFee); - } - - function setBallotDurationMinMaxByBytes(bytes memory _value) public override onlyGov { - (uint256 _min, uint256 _max) = to2Uint(_value); - setBallotDurationMinMax(_min, _max); - } - - function setStakingMinMaxByBytes(bytes memory _value) public override onlyGov { - (uint256 _min, uint256 _max) = to2Uint(_value); - setStakingMinMax(_min, _max); - } - - function setBlockCreationTimeByBytes(bytes memory _value) public override onlyGov { - setBlockCreationTime(toUint(_value)); - } - - function setBlockRewardAmountByBytes(bytes memory _value) public override onlyGov { - setBlockRewardAmount(toUint(_value)); - } - - function setMaxPriorityFeePerGasByBytes(bytes memory _value) public override onlyGov { - setMaxPriorityFeePerGas(toUint(_value)); - } - - function setMaxBaseFeeByBytes(bytes memory _value) public override onlyGov { - setMaxBaseFee(toUint(_value)); - } - - function setBlockRewardDistributionMethodByBytes(bytes memory _value) public override onlyGov { - (uint256 _block_producer, uint256 _staking_reward, uint256 _ecosystem, uint256 _maintenance) = to4Uint(_value); - setBlockRewardDistributionMethod(_block_producer, _staking_reward, _ecosystem, _maintenance); - } - - function setGasLimitAndBaseFeeByBytes(bytes memory _value) public override onlyGov { - (uint256 _block_GasLimit, uint256 _baseFeeMaxChangeRate, uint256 _gasTargetPercentage, uint256 _maxBaseFee) = to4Uint(_value); - setGasLimitAndBaseFee(_block_GasLimit, _baseFeeMaxChangeRate, _gasTargetPercentage, _maxBaseFee); - } - - function checkVariableCondition(bytes32 envKey, bytes memory envVal) external pure override returns (bool) { - if (envKey == BLOCK_REWARD_DISTRIBUTION_METHOD_NAME) { - (uint256 _block_producer, uint256 _staking_reward, uint256 _ecofund, uint256 _maintenance) = abi.decode( - envVal, - (uint256, uint256, uint256, uint256) - ); - if ((_block_producer + _staking_reward + _ecofund + _maintenance) != DENOMINATOR) return false; - } else if (envKey == STAKING_MIN_MAX_NAME || envKey == BALLOT_DURATION_MIN_MAX_NAME) { - (uint256 min, uint256 max) = abi.decode(envVal, (uint256, uint256)); - if (min > max) return false; - } else if (envKey == BLOCK_CREATION_TIME_NAME) { - uint256 time = abi.decode(envVal, (uint256)); - if (time < 1000) return false; - } - return true; - } - - function setVariable(bytes32 envKey, bytes memory envVal) external override { - if (envKey == BLOCKS_PER_NAME) { - setBlocksPerByBytes(envVal); - } else if (envKey == BALLOT_DURATION_MIN_MAX_NAME) { - setBallotDurationMinMaxByBytes(envVal); - } else if (envKey == STAKING_MIN_MAX_NAME) { - setStakingMinMaxByBytes(envVal); - } - // else if (envKey == GAS_PRICE_NAME) { - // setGasPriceByBytes(envVal); - // } - else if (envKey == MAX_IDLE_BLOCK_INTERVAL_NAME) { - setMaxIdleBlockIntervalByBytes(envVal); - } else if (envKey == BLOCK_CREATION_TIME_NAME) { - setBlockCreationTimeByBytes(envVal); - } else if (envKey == BLOCK_REWARD_AMOUNT_NAME) { - setBlockRewardAmountByBytes(envVal); - } else if (envKey == MAX_PRIORITY_FEE_PER_GAS_NAME) { - setMaxPriorityFeePerGasByBytes(envVal); - } else if (envKey == BLOCK_REWARD_DISTRIBUTION_METHOD_NAME) { - setBlockRewardDistributionMethodByBytes(envVal); - } else if (envKey == GASLIMIT_AND_BASE_FEE_NAME) { - setGasLimitAndBaseFeeByBytes(envVal); - } else if (envKey == MAX_BASE_FEE_NAME) { - setMaxBaseFeeByBytes(envVal); - } - } - - function toBytes32(bytes memory _input) internal pure returns (bytes32 _output) { - assembly { - _output := mload(add(_input, 32)) - } - } - - function toInt(bytes memory _input) internal pure returns (int256 _output) { - assembly { - _output := mload(add(_input, 32)) - } - } - - function toUint(bytes memory _input) internal pure returns (uint256 _output) { - assembly { - _output := mload(add(_input, 32)) - } - } - - function to2Uint(bytes memory _input) internal pure returns (uint256 _output0, uint256 _output1) { - assembly { - _output0 := mload(add(_input, 32)) - _output1 := mload(add(_input, 64)) - } - } - - function to3Uint(bytes memory _input) internal pure returns (uint256 _output0, uint256 _output1, uint256 _output2) { - assembly { - _output0 := mload(add(_input, 32)) - _output1 := mload(add(_input, 64)) - _output2 := mload(add(_input, 96)) - } - } - - function to4Uint(bytes memory _input) internal pure returns (uint256 _output0, uint256 _output1, uint256 _output2, uint256 _output3) { - assembly { - _output0 := mload(add(_input, 32)) - _output1 := mload(add(_input, 64)) - _output2 := mload(add(_input, 96)) - _output3 := mload(add(_input, 128)) - } - } - - function toAddress(bytes memory _input) internal pure returns (address _output) { - _output = abi.decode(_input, (address)); - // assembly { - // _output := mload(add(_input, 20)) - // } - } - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[49] private __gap; -} diff --git a/wemix/governance-contract/contracts/storage/EternalStorage.sol b/wemix/governance-contract/contracts/storage/EternalStorage.sol deleted file mode 100644 index b55908036a6a..000000000000 --- a/wemix/governance-contract/contracts/storage/EternalStorage.sol +++ /dev/null @@ -1,147 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/** - * @title EternalStorage - * @dev An ownable contract that can be used as a storage where the variables - * are stored in a set of mappings indexed by hash names. - */ -contract EternalStorage { - struct Storage { - mapping(bytes32 => bool) _bool; - mapping(bytes32 => int256) _int; - mapping(bytes32 => uint256) _uint; - mapping(bytes32 => string) _string; - mapping(bytes32 => address) _address; - mapping(bytes32 => bytes) _bytes; - mapping(bytes32 => bytes32) _bytes32; - } - - Storage internal s; - - /** - * @dev Get the value stored of a boolean variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getBoolean(bytes32 h) public view returns (bool) { - return s._bool[h]; - } - - /** - * @dev Get the value stored of a int variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getInt(bytes32 h) public view returns (int) { - return s._int[h]; - } - - /** - * @dev Get the value stored of a uint variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getUint(bytes32 h) public view returns (uint256) { - return s._uint[h]; - } - - /** - * @dev Get the value stored of a address variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getAddress(bytes32 h) public view returns (address) { - return s._address[h]; - } - - /** - * @dev Get the value stored of a string variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getString(bytes32 h) public view returns (string memory) { - return s._string[h]; - } - - /** - * @dev Get the value stored of a bytes variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getBytes(bytes32 h) public view returns (bytes memory) { - return s._bytes[h]; - } - - /** - * @dev Get the value stored of a bytes variable by the hash name - * @param h The keccak256 hash of the variable name - */ - function getBytes32(bytes32 h) public view returns (bytes32) { - return s._bytes32[h]; - } - - /** - * @dev Allows the owner to set a value for a boolean variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setBoolean(bytes32 h, bool v) internal { - s._bool[h] = v; - } - - /** - * @dev Allows the owner to set a value for a int variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setInt(bytes32 h, int256 v) internal { - s._int[h] = v; - } - - /** - * @dev Allows the owner to set a value for a boolean variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setUint(bytes32 h, uint256 v) internal { - s._uint[h] = v; - } - - /** - * @dev Allows the owner to set a value for a address variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setAddress(bytes32 h, address v) internal { - s._address[h] = v; - } - - /** - * @dev Allows the owner to set a value for a string variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setString(bytes32 h, string memory v) internal { - s._string[h] = v; - } - - /** - * @dev Allows the owner to set a value for a bytes variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setBytes(bytes32 h, bytes memory v) internal { - s._bytes[h] = v; - } - - /** - * @dev Allows the owner to set a value for a bytes32 variable - * @param h The keccak256 hash of the variable name - * @param v The value to be stored - */ - function _setBytes32(bytes32 h, bytes32 v) internal { - s._bytes32[h] = v; - } - - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[49] private __gap; -} diff --git a/wemix/governance-contract/remappings.txt b/wemix/governance-contract/remappings.txt deleted file mode 100644 index 7d85088bfd88..000000000000 --- a/wemix/governance-contract/remappings.txt +++ /dev/null @@ -1,2 +0,0 @@ -@openzeppelin/contracts/=contracts/openzeppelin/contracts/contracts/ -@openzeppelin/contracts-upgradeable/=contracts/openzeppelin/contracts-upgradeable/contracts/ \ No newline at end of file diff --git a/wemix/governance-contract/test/const.go b/wemix/governance-contract/test/const.go deleted file mode 100644 index d824be4521e6..000000000000 --- a/wemix/governance-contract/test/const.go +++ /dev/null @@ -1,110 +0,0 @@ -package test - -import ( - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" -) - -func towei(x int64) *big.Int { - return new(big.Int).Mul(big.NewInt(x), big.NewInt(params.Ether)) -} - -func toGwei(x int64) *big.Int { - return new(big.Int).Mul(big.NewInt(x), big.NewInt(params.GWei)) -} - -var ( - LOCK_AMOUNT *big.Int = towei(1500000) -) - -var EnvConstants = struct { - BLOCKS_PER env - BALLOT_DURATION_MIN env - BALLOT_DURATION_MAX env - STAKING_MIN env - STAKING_MAX env - MAX_IDLE_BLOCK_INTERVAL env - BLOCK_CREATION_TIME env - BLOCK_REWARD_AMOUNT env - MAX_PRIORITY_FEE_PER_GAS env - BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER env - BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD env - BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM env - BLOCK_REWARD_DISTRIBUTION_MAINTENANCE env - MAX_BASE_FEE env - BLOCK_GASLIMIT env - BASE_FEE_MAX_CHANGE_RATE env - GAS_TARGET_PERCENTAGE env -}{ - BLOCKS_PER: newEnvInt64("blocksPer", 1), - BALLOT_DURATION_MIN: newEnvInt64("ballotDurationMin", 86400), - BALLOT_DURATION_MAX: newEnvInt64("ballotDurationMax", 604800), - STAKING_MIN: newEnvBig("stakingMin", towei(1500000)), - STAKING_MAX: newEnvBig("stakingMax", towei(1500000)), - MAX_IDLE_BLOCK_INTERVAL: newEnvInt64("MaxIdleBlockInterval", 5), - BLOCK_CREATION_TIME: newEnvInt64("blockCreationTime", 1000), - BLOCK_REWARD_AMOUNT: newEnvBig("blockRewardAmount", towei(1)), - MAX_PRIORITY_FEE_PER_GAS: newEnvBig("maxPriorityFeePerGas", toGwei(100)), - BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER: newEnvInt64("blockRewardDistributionBlockProducer", 4000), - BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD: newEnvInt64("blockRewardDistributionStakingReward", 1000), - BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM: newEnvInt64("blockRewardDistributionEcosystem", 2500), - BLOCK_REWARD_DISTRIBUTION_MAINTENANCE: newEnvInt64("blockRewardDistributionMaintenance", 2500), - MAX_BASE_FEE: newEnvBig("maxBaseFee", toGwei(5000)), - BLOCK_GASLIMIT: newEnvInt64("blockGasLimit", 1050000000), - BASE_FEE_MAX_CHANGE_RATE: newEnvInt64("baseFeeMaxChangeRate", 46), - GAS_TARGET_PERCENTAGE: newEnvInt64("gasTargetPercentage", 30), -} - -type env struct { - Name [32]byte - Value *big.Int -} - -func newEnvInt64(name string, value int64) env { - return env{ - Name: crypto.Keccak256Hash([]byte(name)), - Value: big.NewInt(value), - } -} - -func newEnvBig(name string, value *big.Int) env { - if value == nil { - value = common.Big0 - } - return env{ - Name: crypto.Keccak256Hash([]byte(name)), - Value: value, - } -} - -func makeEnvParams(envs ...env) (names [][32]byte, values []*big.Int) { - length := len(envs) - names = make([][32]byte, length) - values = make([]*big.Int, length) - for i, e := range envs { - names[i] = e.Name - values[i] = e.Value - } - return -} - -var EnvTypes = struct { - Invalid *big.Int - Int *big.Int - Uint *big.Int - Address *big.Int - Bytes32 *big.Int - Bytes *big.Int - String *big.Int -}{big.NewInt(0), big.NewInt(1), big.NewInt(2), big.NewInt(3), big.NewInt(4), big.NewInt(5), big.NewInt(6)} - -var BallotStates = struct { - Invalid *big.Int - Ready *big.Int - InProgress *big.Int - Accepted *big.Int - Rejected *big.Int -}{big.NewInt(0), big.NewInt(1), big.NewInt(2), big.NewInt(3), big.NewInt(4)} diff --git a/wemix/governance-contract/test/contracts.go b/wemix/governance-contract/test/contracts.go deleted file mode 100644 index 9112f1038a11..000000000000 --- a/wemix/governance-contract/test/contracts.go +++ /dev/null @@ -1,304 +0,0 @@ -package test - -import ( - "context" - "encoding/json" - "math/big" - "path/filepath" - "strings" - "testing" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/compiler" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/params" - compile "github.com/ethereum/go-ethereum/wemix/governance-contract" - "github.com/pkg/errors" - "github.com/stretchr/testify/require" -) - -type Governance struct { - backend *backends.SimulatedBackend - owner *bind.TransactOpts - nodeInfos []nodeInfo - - registry common.Address - Registry, - Gov, GovImp, - NCPExit, NCPExitImp, - Staking, StakingImp, - BallotStorage, BallotStorageImp, - EnvStorage, EnvStorageImp *bind.BoundContract -} - -type nodeInfo struct { - name []byte - enode []byte - ip []byte - port *big.Int -} - -func NewGovernance(t *testing.T) *Governance { - owner := getTxOpt(t, "owner") - backend := backends.NewSimulatedBackend(core.GenesisAlloc{ - owner.From: {Balance: new(big.Int).Sub(new(big.Int).Lsh(common.Big1, 128), common.Big1)}, - }, params.MaxGasLimit) - - return &Governance{ - backend: backend, - owner: owner, - nodeInfos: []nodeInfo{{ - []byte("name"), - hexutil.MustDecode("0x6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0"), - []byte("127.0.0.1"), - big.NewInt(8542), - }}, - } -} - -func (g *Governance) DeployContracts(t *testing.T) *Governance { - // deploy registry - registry, Registry, err := g.Deploy(compiled.Registry.Deploy(g.backend, g.owner)) - require.NoError(t, err) - // deploy impls - govImp, _, err := g.Deploy(compiled.GovImp.Deploy(g.backend, g.owner)) - require.NoError(t, err) - ncpExitImp, _, err := g.Deploy(compiled.NCPExitImp.Deploy(g.backend, g.owner)) - require.NoError(t, err) - stakingImp, _, err := g.Deploy(compiled.StakingImp.Deploy(g.backend, g.owner)) - require.NoError(t, err) - ballotStorageImp, _, err := g.Deploy(compiled.BallotStorageImp.Deploy(g.backend, g.owner)) - require.NoError(t, err) - envStorageImp, _, err := g.Deploy(compiled.EnvStorageImp.Deploy(g.backend, g.owner)) - require.NoError(t, err) - - // deploy proxies - gov, Gov, err := g.Deploy(compiled.Gov.Deploy(g.backend, g.owner, govImp)) - require.NoError(t, err) - ncpExit, NCPExit, err := g.Deploy(compiled.NCPExit.Deploy(g.backend, g.owner, ncpExitImp)) - require.NoError(t, err) - staking, Staking, err := g.Deploy(compiled.Staking.Deploy(g.backend, g.owner, stakingImp)) - require.NoError(t, err) - ballotStorage, BallotStorage, err := g.Deploy(compiled.BallotStorage.Deploy(g.backend, g.owner, ballotStorageImp)) - require.NoError(t, err) - envStorage, EnvStorage, err := g.Deploy(compiled.EnvStorage.Deploy(g.backend, g.owner, envStorageImp)) - require.NoError(t, err) - - // set up g - g.registry = registry - g.Registry = Registry - g.Gov = Gov - g.NCPExit = NCPExit - g.Staking = Staking - g.BallotStorage = BallotStorage - g.EnvStorage = EnvStorage - - g.GovImp = compiled.GovImp.New(g.backend, gov) - g.NCPExitImp = compiled.NCPExitImp.New(g.backend, ncpExit) - g.StakingImp = compiled.StakingImp.New(g.backend, staking) - g.BallotStorageImp = compiled.BallotStorageImp.New(g.backend, ballotStorage) - g.EnvStorageImp = compiled.EnvStorageImp.New(g.backend, envStorage) - - // set Domains - require.NoError(t, g.ExpectedOk(g.Registry.Transact(g.owner, "setContractDomain", ToBytes32("GovernanceContract"), gov))) - require.NoError(t, g.ExpectedOk(g.Registry.Transact(g.owner, "setContractDomain", ToBytes32("Staking"), staking))) - require.NoError(t, g.ExpectedOk(g.Registry.Transact(g.owner, "setContractDomain", ToBytes32("EnvStorage"), envStorage))) - require.NoError(t, g.ExpectedOk(g.Registry.Transact(g.owner, "setContractDomain", ToBytes32("BallotStorage"), ballotStorage))) - - // initialize - require.NoError(t, g.ExpectedOk(g.NCPExitImp.Transact(g.owner, "initialize", registry))) - require.NoError(t, g.ExpectedOk(g.StakingImp.Transact(g.owner, "init", registry, []byte{}))) - require.NoError(t, g.ExpectedOk(g.BallotStorageImp.Transact(g.owner, "initialize", registry))) - envNames, envValues := makeEnvParams( - EnvConstants.BLOCKS_PER, - EnvConstants.BALLOT_DURATION_MIN, - EnvConstants.BALLOT_DURATION_MAX, - EnvConstants.STAKING_MIN, - EnvConstants.STAKING_MAX, - EnvConstants.MAX_IDLE_BLOCK_INTERVAL, - EnvConstants.BLOCK_CREATION_TIME, - EnvConstants.BLOCK_REWARD_AMOUNT, - EnvConstants.MAX_PRIORITY_FEE_PER_GAS, - EnvConstants.BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER, - EnvConstants.BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD, - EnvConstants.BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM, - EnvConstants.BLOCK_REWARD_DISTRIBUTION_MAINTENANCE, - EnvConstants.MAX_BASE_FEE, - EnvConstants.BLOCK_GASLIMIT, - EnvConstants.BASE_FEE_MAX_CHANGE_RATE, - EnvConstants.GAS_TARGET_PERCENTAGE, - ) - require.NoError(t, g.ExpectedOk(g.EnvStorageImp.Transact(g.owner, "initialize", registry, envNames, envValues))) - - // staking - { - g.owner.Value = LOCK_AMOUNT - require.NoError(t, g.ExpectedOk(g.StakingImp.Transact(g.owner, "deposit"))) - g.owner.Value = nil - } - node := g.nodeInfos[0] - require.NoError(t, g.ExpectedOk(g.GovImp.Transact(g.owner, "init", registry, LOCK_AMOUNT, node.name, node.enode, node.ip, node.port))) - - return g -} - -func (r *Governance) Deploy(address common.Address, tx *types.Transaction, contract *bind.BoundContract, err error) (common.Address, *bind.BoundContract, error) { - if err != nil { - return common.Address{}, nil, err - } - return address, contract, r.ExpectedOk(tx, err) -} - -func (r *Governance) ExpectedOk(tx *types.Transaction, err error) error { - r.backend.Commit() - if err != nil { - return err - } else if receipt, err := bind.WaitMined(context.TODO(), r.backend, tx); err != nil { - return err - } else if receipt.Status != types.ReceiptStatusSuccessful { - panic(vm.ErrExecutionReverted) - } else { - return nil - } -} - -func (r *Governance) ExpectedFail(tx *types.Transaction, err error) error { - r.backend.Commit() - if err != nil { - return err - } else if receipt, err := bind.WaitMined(context.TODO(), r.backend, tx); err != nil { - return err - } else if receipt.Status == types.ReceiptStatusSuccessful { - panic("execution not reverted") - } else { - return vm.ErrExecutionReverted - } -} - -type MemberInfo struct { - Staker common.Address `json:"staker"` - Voter common.Address `json:"voter"` - Reward common.Address `json:"reward"` - Name []byte `json:"name"` - Enode []byte `json:"enode"` - Ip []byte `json:"ip"` - Port *big.Int `json:"port"` - LockAmount *big.Int `json:"lockAmount"` - Memo []byte `json:"memo"` - Duration *big.Int `json:"duration"` -} - -type bindBackend interface { - bind.ContractBackend - bind.DeployBackend -} - -type bindContract struct { - Bin []byte - Abi abi.ABI -} - -func newBindContract(contract *compiler.Contract) (*bindContract, error) { - if contract == nil { - return nil, errors.New("nil contracts") - } - - if parsedAbi, err := parseABI(contract.Info.AbiDefinition); err != nil { - return nil, err - } else { - code := contract.Code - if !strings.HasPrefix(code, "0x") { - code = "0x" + code - } - return &bindContract{Bin: hexutil.MustDecode(code), Abi: *parsedAbi}, err - } -} - -func (bc *bindContract) New(backend bindBackend, address common.Address) *bind.BoundContract { - return bind.NewBoundContract(address, bc.Abi, backend, backend, backend) -} - -func (bc *bindContract) Deploy(backend bindBackend, opts *bind.TransactOpts, args ...interface{}) (common.Address, *types.Transaction, *bind.BoundContract, error) { - return bind.DeployContract(opts, bc.Abi, bc.Bin, backend, args...) -} - -var ( - compiled compiledContract -) - -func init() { - compiled.Compile("../contracts") -} - -type compiledContract struct { - Registry, - Gov, GovImp, - NCPExit, NCPExitImp, - Staking, StakingImp, - BallotStorage, BallotStorageImp, - EnvStorage, EnvStorageImp *bindContract -} - -func (c *compiledContract) Compile(root string) { - if contracts, err := compile.Compile("", - filepath.Join(root, "Registry.sol"), - filepath.Join(root, "Gov.sol"), - filepath.Join(root, "GovImp.sol"), - filepath.Join(root, "NCPExit.sol"), - filepath.Join(root, "NCPExitImp.sol"), - filepath.Join(root, "Staking.sol"), - filepath.Join(root, "StakingImp.sol"), - filepath.Join(root, "storage", "BallotStorage.sol"), - filepath.Join(root, "storage", "BallotStorageImp.sol"), - filepath.Join(root, "storage", "EnvStorage.sol"), - filepath.Join(root, "storage", "EnvStorageImp.sol"), - ); err != nil { - panic(err) - } else { - if c.Registry, err = newBindContract(contracts["Registry"]); err != nil { - panic(err) - } else if c.Gov, err = newBindContract(contracts["Gov"]); err != nil { - panic(err) - } else if c.GovImp, err = newBindContract(contracts["GovImp"]); err != nil { - panic(err) - } else if c.NCPExit, err = newBindContract(contracts["NCPExit"]); err != nil { - panic(err) - } else if c.NCPExitImp, err = newBindContract(contracts["NCPExitImp"]); err != nil { - panic(err) - } else if c.Staking, err = newBindContract(contracts["Staking"]); err != nil { - panic(err) - } else if c.StakingImp, err = newBindContract(contracts["StakingImp"]); err != nil { - panic(err) - } else if c.BallotStorage, err = newBindContract(contracts["BallotStorage"]); err != nil { - panic(err) - } else if c.BallotStorageImp, err = newBindContract(contracts["BallotStorageImp"]); err != nil { - panic(err) - } else if c.EnvStorage, err = newBindContract(contracts["EnvStorage"]); err != nil { - panic(err) - } else if c.EnvStorageImp, err = newBindContract(contracts["EnvStorageImp"]); err != nil { - panic(err) - } - } -} - -func parseABI(abiDefinition interface{}) (*abi.ABI, error) { - s, ok := abiDefinition.(string) - if !ok { - if bytes, err := json.Marshal(abiDefinition); err != nil { - return nil, err - } else { - s = string(bytes) - } - } - if abi, err := abi.JSON(strings.NewReader(s)); err != nil { - return nil, err - } else { - return &abi, nil - } -} diff --git a/wemix/governance-contract/test/gov_bind_test.go b/wemix/governance-contract/test/gov_bind_test.go deleted file mode 100644 index 1315edafc18b..000000000000 --- a/wemix/governance-contract/test/gov_bind_test.go +++ /dev/null @@ -1,114 +0,0 @@ -package test - -import ( - "context" - "testing" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethclient" - gov "github.com/ethereum/go-ethereum/wemix/bind" - "github.com/stretchr/testify/require" -) - -func TestDeploy(t *testing.T) { - client, opts := func() (*backends.SimulatedBackend, *bind.TransactOpts) { - g := NewGovernance(t) - return g.backend, g.owner - }() - go func() { - for { - time.Sleep(1e9) - client.Commit() - } - }() - contracts, err := gov.DeployGovContracts(opts, client, nil) - require.NoError(t, err) - lockAmount := gov.DefaultInitEnvStorage.STAKING_MIN - gov.ExecuteInitialize(contracts, opts, client, lockAmount, gov.DefaultInitEnvStorage, gov.InitMembers{ - { - Staker: opts.From, - Voter: opts.From, - Reward: opts.From, - Name: "name", - Enode: "0x6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0", - Ip: "127.0.0.1", - Port: 8542, - Deposit: lockAmount, - }, - }) - - checkMainnetEnvStorageValues(t, new(bind.CallOpts), contracts.EnvStorageImp) -} - -func TestCheckMainnetEnvStorageValues(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - client, err := ethclient.DialContext(ctx, "https://api.wemix.com/") - require.NoError(t, err) - - block, err := client.BlockByNumber(ctx, common.Big0) - require.NoError(t, err) - - callOpts := &bind.CallOpts{Context: ctx} - contracts, err := gov.GetGovContractsByOwner(callOpts, client, block.Coinbase()) - require.NoError(t, err) - - checkMainnetEnvStorageValues(t, callOpts, contracts.EnvStorageImp) -} - -func checkMainnetEnvStorageValues(t *testing.T, callOpts *bind.CallOpts, envStorage *gov.EnvStorageImp) { - BLOCKS_PER, _ := envStorage.GetBlocksPer(callOpts) - t.Log("BLOCKS_PER:", BLOCKS_PER) - - BALLOT_DURATION_MIN, _ := envStorage.GetBallotDurationMin(callOpts) - t.Log("BALLOT_DURATION_MIN:", BALLOT_DURATION_MIN) - - BALLOT_DURATION_MAX, _ := envStorage.GetBallotDurationMax(callOpts) - t.Log("BALLOT_DURATION_MAX:", BALLOT_DURATION_MAX) - - STAKING_MIN, _ := envStorage.GetStakingMin(callOpts) - t.Log("STAKING_MIN:", STAKING_MIN) - - STAKING_MAX, _ := envStorage.GetStakingMax(callOpts) - t.Log("STAKING_MAX:", STAKING_MAX) - - MAX_IDLE_BLOCK_INTERVAL, _ := envStorage.GetMaxIdleBlockInterval(callOpts) - t.Log("MAX_IDLE_BLOCK_INTERVAL:", MAX_IDLE_BLOCK_INTERVAL) - - BLOCK_CREATION_TIME, _ := envStorage.GetBlockCreationTime(callOpts) - t.Log("BLOCK_CREATION_TIME:", BLOCK_CREATION_TIME) - - BLOCK_REWARD_AMOUNT, _ := envStorage.GetBlockRewardAmount(callOpts) - t.Log("BLOCK_REWARD_AMOUNT:", BLOCK_REWARD_AMOUNT) - - MAX_PRIORITY_FEE_PER_GAS, _ := envStorage.GetMaxPriorityFeePerGas(callOpts) - t.Log("MAX_PRIORITY_FEE_PER_GAS:", MAX_PRIORITY_FEE_PER_GAS) - - BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("blockRewardDistributionBlockProducer"))) - t.Log("BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER:", BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER) - - BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("blockRewardDistributionStakingReward"))) - t.Log("BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD:", BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD) - - BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("blockRewardDistributionEcosystem"))) - t.Log("BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM:", BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM) - - BLOCK_REWARD_DISTRIBUTION_MAINTENANCE, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("blockRewardDistributionMaintenance"))) - t.Log("BLOCK_REWARD_DISTRIBUTION_MAINTENANCE:", BLOCK_REWARD_DISTRIBUTION_MAINTENANCE) - - MAX_BASE_FEE, _ := envStorage.GetMaxBaseFee(callOpts) - t.Log("MAX_BASE_FEE:", MAX_BASE_FEE) - - BLOCK_GASLIMIT, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("blockGasLimit"))) - t.Log("BLOCK_GASLIMIT:", BLOCK_GASLIMIT) - - BASE_FEE_MAX_CHANGE_RATE, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("baseFeeMaxChangeRate"))) - t.Log("BASE_FEE_MAX_CHANGE_RATE:", BASE_FEE_MAX_CHANGE_RATE) - - GAS_TARGET_PERCENTAGE, _ := envStorage.GetUint(callOpts, crypto.Keccak256Hash([]byte("gasTargetPercentage"))) - t.Log("GAS_TARGET_PERCENTAGE:", GAS_TARGET_PERCENTAGE) -} diff --git a/wemix/governance-contract/test/gov_test.go b/wemix/governance-contract/test/gov_test.go deleted file mode 100644 index 9341ba4563ea..000000000000 --- a/wemix/governance-contract/test/gov_test.go +++ /dev/null @@ -1,3459 +0,0 @@ -package test - -import ( - "context" - "math/big" - "os" - "path/filepath" - "testing" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - compile "github.com/ethereum/go-ethereum/wemix/governance-contract" - "github.com/stretchr/testify/require" -) - -func TestGov(t *testing.T) { - // for mute chain log - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(0), log.StreamHandler(os.Stdout, log.TerminalFormat(true)))) - callOpts := new(bind.CallOpts) - - node1 := nodeInfo{ - name: []byte("name1"), - enode: hexutil.MustDecode("0x777777777711c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0"), - ip: []byte("127.0.0.2"), - port: big.NewInt(8542), - } - - node2 := nodeInfo{ - name: []byte("name2"), - enode: hexutil.MustDecode("0x888777777711c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a1"), - ip: []byte("127.0.0.3"), - port: big.NewInt(8542), - } - - t.Run("Staker is voter", func(t *testing.T) { - t.Run("has enode and locked staking", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - locked *big.Int - idx *big.Int - name, enode, ip []uint8 - port *big.Int - ) - - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&locked}, "lockedBalanceOf", gov.owner.From)) - require.Equal(t, LOCK_AMOUNT, locked) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&idx}, "getNodeIdxFromMember", gov.owner.From)) - require.True(t, idx.Sign() != 0) - result := []interface{}{} - require.NoError(t, gov.GovImp.Call(callOpts, &result, "getNode", idx)) - name, enode, ip, port = result[0].([]byte), result[1].([]byte), result[2].([]byte), result[3].(*big.Int) - nodeinfo := gov.nodeInfos[0] - require.Equal(t, nodeinfo.name, name) - require.Equal(t, nodeinfo.enode, enode) - require.Equal(t, nodeinfo.ip, ip) - require.Equal(t, nodeinfo.port, port) - }) - t.Run("cannot init twice", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - node := gov.nodeInfos[0] - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "init", gov.registry, LOCK_AMOUNT, node.name, node.enode, node.ip, node.port)), - "Initializable: contract is already initialized", - ) - }) - t.Run("cannot addProposal to add member self", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("cannot addProposal to add member with different voter", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - member := gov.owner.From - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: member, - Voter: common.Address{1}, - Reward: member, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("cannot addProposal to add member with different reward", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - member := gov.owner.From - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: member, - Voter: member, - Reward: common.Address{1}, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("can addProposal to add member", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - govMem1 := getTxOpt(t, "govMem1") - // staking first - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - // proposal - gov.nodeInfos = append(gov.nodeInfos, node1) - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - // check proposal - var ( - length *big.Int - creator common.Address - memo []byte - newStakerAddress common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - - ballot, ballotDetail := []interface{}{}, []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &ballot, "getBallotBasic", length)) - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &ballotDetail, "getBallotMember", length)) - creator, memo = ballot[3].(common.Address), ballot[4].([]byte) - newStakerAddress = ballotDetail[1].(common.Address) - require.Equal(t, gov.owner.From, creator) - require.Equal(t, []byte("memo1"), memo) - require.Equal(t, govMem1.From, newStakerAddress) - - // govMem1 is not member yet - info.Memo = []byte("memo2") - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - }) - t.Run("cannot addProposal to remove non-member", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - govMem1 := getTxOpt(t, "govMem1").From - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", govMem1, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))), - "Non-member", - ) - }) - t.Run("cannot addProposal to remove a sole member", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", gov.owner.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))), - "Cannot remove a sole member", - ) - }) - t.Run("can addProposal to change member's other addresses self without voting", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - oldMember, oldVoter, oldReward common.Address - length *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldReward}, "getReward", common.Big1)) - - require.Equal(t, gov.owner.From, oldReward) - node := gov.nodeInfos[0] - voter1 := getTxOpt(t, "voter1") - user1 := getTxOpt(t, "user1") - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: voter1.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - }) - t.Run("can addProposal to change member's other addresses self without voting twice about node name", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - oldMember, oldVoter, oldReward common.Address - length *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldReward}, "getReward", common.Big1)) - - require.Equal(t, gov.owner.From, oldMember) - require.Equal(t, gov.owner.From, oldVoter) - require.Equal(t, gov.owner.From, oldReward) - node := gov.nodeInfos[0] - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: []byte("name1"), // change - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - newMember, newVoter, newReward common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - - info.Name = node.name - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - }) - t.Run("can addProposal to change member's other addresses self without voting twice about enode", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - oldMember, oldVoter, oldReward common.Address - length *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldReward}, "getReward", common.Big1)) - - require.Equal(t, gov.owner.From, oldMember) - require.Equal(t, gov.owner.From, oldVoter) - require.Equal(t, gov.owner.From, oldReward) - node := gov.nodeInfos[0] - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: []byte("name1"), - Enode: node1.enode, // change - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - newMember, newVoter, newReward common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - - info.Enode = node.enode - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - }) - t.Run("can addProposal to change member's other addresses self without voting twice about ipport", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - oldMember, oldVoter, oldReward common.Address - length *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldReward}, "getReward", common.Big1)) - - require.Equal(t, gov.owner.From, oldMember) - require.Equal(t, gov.owner.From, oldVoter) - require.Equal(t, gov.owner.From, oldReward) - node := gov.nodeInfos[0] - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: []byte("name1"), - Enode: node.enode, - Ip: node1.ip, // change - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - newMember, newVoter, newReward common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - - info.Ip = node.ip - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - }) - t.Run("can addProposal to change member's other addresses self without voting twice about import2", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - oldMember, oldVoter, oldReward common.Address - length *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldReward}, "getReward", common.Big1)) - - require.Equal(t, gov.owner.From, oldMember) - require.Equal(t, gov.owner.From, oldVoter) - require.Equal(t, gov.owner.From, oldReward) - node := gov.nodeInfos[0] - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: []byte("name1"), - Enode: node.enode, - Ip: node.ip, - Port: node1.port, // change - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - newMember, newVoter, newReward common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - - info.Port = node.port - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, gov.owner.From, newVoter) - require.Equal(t, gov.owner.From, newReward) - }) - t.Run("cannot addProposal to change non-member", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - govMem1, govMem2 := getTxOpt(t, "govMem1"), getTxOpt(t, "govMem2") - node := gov.nodeInfos[0] - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, govMem2.From, common.Big0, common.Big0)), - "Non-member", - ) - }) - t.Run("can addProposal to change governance", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - newGovImp, _, err := gov.Deploy(compiled.GovImp.Deploy(gov.backend, gov.owner)) - require.NoError(t, err) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeGov", newGovImp, []byte("memo"), big.NewInt(86400))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - }) - t.Run("can not addProposal to change governance using EOA", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeGov", getTxOpt(t, "govMem1").From, []byte("memo"), big.NewInt(86400))), - "", - ) - }) - t.Run("can not addProposal to change governance using non-UUPS", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeGov", gov.registry, []byte("memo"), big.NewInt(86400))), - "ERC1967Upgrade: new implementation is not UUPS", - ) - }) - t.Run("cannot addProposal to change governance with same address", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var govImp common.Address - require.NoError(t, gov.Gov.Call(callOpts, &[]interface{}{&govImp}, "implementation")) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeGov", govImp, []byte("memo"), big.NewInt(86400))), - "Same contract address", - ) - }) - t.Run("cannot addProposal to change governance with zero address", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeGov", common.Address{}, []byte("memo"), big.NewInt(86400))), - "Implementation cannot be zero", - ) - }) - t.Run("can addProposal to change environment", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", ToBytes32("key"), EnvTypes.Bytes32, []byte("value"), []byte("memo"), big.NewInt(86400))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big1, length) - }) - t.Run("cannot addProposal to change environment with wrong type", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", ToBytes32("key"), EnvTypes.Invalid, []byte("value"), []byte("memo"), big.NewInt(86400))), - "Invalid type", - ) - }) - t.Run("can vote approval to add member", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen, nodeLen, lock *big.Int - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLen)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLen)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLen)) - require.Equal(t, common.Big2, memberLen) - require.Equal(t, memberLen, nodeLen) - require.Equal(t, LOCK_AMOUNT, lock) - require.Equal(t, govMem1.From, newMember) - require.Equal(t, govMem1.From, newVoter) - require.Equal(t, govMem1.From, newReward) - }) - t.Run("cannot vote approval to add member with insufficient staking", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = new(big.Int).Div(LOCK_AMOUNT, common.Big2) - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - memberLen *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - }) - t.Run("can vote disapproval to deny adding member", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, false)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - memberLen *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, common.Big1, length) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - }) - t.Run("can vote approval to change member totally", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, common.Big1, length) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - var ( - preDeployerAvail, preGovmem1Avail *big.Int - ) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&preDeployerAvail}, "availableBalanceOf", govMem1.From)) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&preGovmem1Avail}, "availableBalanceOf", govMem2.From)) - - info = MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo2"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, govMem1.From, LOCK_AMOUNT, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big2, true)) - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", common.Big2, true)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, big.NewInt(3), length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen *big.Int - memberAddr common.Address - name, enode, ip []byte - port *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberAddr}, "getMember", common.Big2)) - getNode := []interface{}{} - require.NoError(t, gov.GovImp.Call(callOpts, &getNode, "getNode", common.Big2)) - require.Equal(t, common.Big2, memberLen) - require.Equal(t, govMem2.From, memberAddr) - name, enode, ip, port = getNode[0].([]byte), getNode[1].([]byte), getNode[2].([]byte), getNode[3].(*big.Int) - require.Equal(t, node1.name, name) - require.Equal(t, node1.enode, enode) - require.Equal(t, node1.ip, ip) - require.Equal(t, node1.port, port) - - var ( - nodeIdxFromDeployer, nodeIdxFromGovMem1 *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdxFromDeployer}, "getNodeIdxFromMember", govMem1.From)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdxFromGovMem1}, "getNodeIdxFromMember", govMem2.From)) - require.True(t, nodeIdxFromDeployer.Sign() == 0) - require.Equal(t, common.Big2, nodeIdxFromGovMem1) - - var ( - postDeployerAvail, postGovmem1Avail *big.Int - ) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&postDeployerAvail}, "availableBalanceOf", govMem1.From)) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&postGovmem1Avail}, "availableBalanceOf", govMem2.From)) - require.Equal(t, LOCK_AMOUNT, new(big.Int).Sub(postDeployerAvail, preDeployerAvail)) - require.Equal(t, LOCK_AMOUNT, new(big.Int).Sub(preGovmem1Avail, postGovmem1Avail)) - }) - t.Run("can vote approval to change enode only without voting", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.True(t, length.Sign() == 0) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen *big.Int - memberAddr common.Address - name, enode, ip []byte - port *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberAddr}, "getMember", common.Big1)) - getNode := []interface{}{} - require.NoError(t, gov.GovImp.Call(callOpts, &getNode, "getNode", common.Big1)) - require.Equal(t, common.Big1, memberLen) - require.Equal(t, gov.owner.From, memberAddr) - name, enode, ip, port = getNode[0].([]byte), getNode[1].([]byte), getNode[2].([]byte), getNode[3].(*big.Int) - require.Equal(t, node1.name, name) - require.Equal(t, node1.enode, enode) - require.Equal(t, node1.ip, ip) - require.Equal(t, node1.port, port) - }) - t.Run("cannot vote approval to change member with insufficient staking", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = new(big.Int).Sub(LOCK_AMOUNT, big.NewInt(1000000000)) - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - }) - t.Run("can vote approval to change governance", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - var ( - getGasLimitAndBaseFee []interface{} - MBF *big.Int - ) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &getGasLimitAndBaseFee, "getGasLimitAndBaseFee")) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&MBF}, "getMaxBaseFee")) - - newGovImp, _, err := gov.Deploy(compiled.GovImp.Deploy(gov.backend, gov.owner)) - require.NoError(t, err) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeGov", newGovImp, []byte("memo"), big.NewInt(86400))) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var imp common.Address - require.NoError(t, gov.Gov.Call(callOpts, &[]interface{}{&imp}, "implementation")) - require.Equal(t, newGovImp, imp) - - var ( - newGetGasLimitAndBaseFee []interface{} - NEW_MBF *big.Int - ) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &newGetGasLimitAndBaseFee, "getGasLimitAndBaseFee")) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&NEW_MBF}, "getMaxBaseFee")) - require.Equal(t, getGasLimitAndBaseFee[0], newGetGasLimitAndBaseFee[0]) - require.Equal(t, getGasLimitAndBaseFee[1], newGetGasLimitAndBaseFee[1]) - require.Equal(t, getGasLimitAndBaseFee[2], newGetGasLimitAndBaseFee[2]) - require.Equal(t, MBF, NEW_MBF) - }) - t.Run("can vote approval to change environment", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - var ( - blocksPer *big.Int - ) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&blocksPer}, "getBlocksPer")) - require.NotEqual(t, big.NewInt(100), blocksPer) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&blocksPer}, "getBlocksPer")) - require.Equal(t, big.NewInt(100), blocksPer) - }) - t.Run("cannot vote for a ballot already done", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = new(big.Int).Sub(LOCK_AMOUNT, big.NewInt(1000000000)) - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)), - "Expired", - ) - }) - t.Run("cannot add proposal during period time", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "setProposalTimePeriod", big.NewInt(60))) - - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )), "Cannot add proposal too early", - ) - }) - t.Run("cannot addProposal to add member which is already reward", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - gov.nodeInfos = append(gov.nodeInfos, node1) - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - var ( - ballotLength *big.Int - memberLength *big.Int - ) - gov.GovImp.Call(callOpts, &[]interface{}{&ballotLength}, "ballotLength") - require.Equal(t, common.Big1, ballotLength) - - gov.GovImp.Call(callOpts, &[]interface{}{&memberLength}, "getMemberLength") - node := gov.nodeInfos[0] - info = MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - gov.GovImp.Call(callOpts, &[]interface{}{&ballotLength}, "ballotLength") - require.Equal(t, common.Big2, ballotLength) - - var ( - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLength)) - require.Equal(t, gov.owner.From, newMember) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLength)) - require.Equal(t, gov.owner.From, newVoter) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLength)) - require.Equal(t, govMem1.From, newReward) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - var ( - memberLen, nodeLen *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.Equal(t, common.Big1, memberLen) - require.Equal(t, memberLen, nodeLen) - - var ( - lock, bal *big.Int - ) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.True(t, lock.Sign() == 0) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&bal}, "balanceOf", govMem1.From)) - require.Equal(t, LOCK_AMOUNT, bal) - }) - t.Run("cannot addProposal to change member which is already reward", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - var memberLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - info = MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - var ( - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLen)) - require.Equal(t, gov.owner.From, newMember) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLen)) - require.Equal(t, gov.owner.From, newVoter) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLen)) - require.Equal(t, govMem1.From, newReward) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - var ( - /* memberLen */ nodeLen, lock, bal *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.Equal(t, memberLen, nodeLen) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.True(t, lock.Sign() == 0) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&bal}, "balanceOf", govMem1.From)) - require.Equal(t, LOCK_AMOUNT, bal) - }) - }) - t.Run("Staker is not a voter", func(t *testing.T) { - deployGovernance := func(t *testing.T) (gov *Governance, voter *bind.TransactOpts) { - gov = NewGovernance(t).DeployContracts(t) - voter = getTxOpt(t, "voter") - user1 := getTxOpt(t, "user1") - balance, err := gov.backend.BalanceAt(context.TODO(), gov.owner.From, nil) - require.NoError(t, err) - - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Div(balance, common.Big2), &voter.From)) - - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: gov.owner.From, - Voter: voter.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - return - } - t.Run("cannot addProposal to add member self", func(t *testing.T) { - gov, voter := deployGovernance(t) - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("cannot addProposal to add member with different voter", func(t *testing.T) { - gov, voter := deployGovernance(t) - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: gov.owner.From, - Voter: voter.From, - Reward: gov.owner.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("cannot addProposal to add member with same voter", func(t *testing.T) { - gov, voter := deployGovernance(t) - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: voter.From, - Voter: voter.From, - Reward: voter.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("cannot addProposal to add member with same reward", func(t *testing.T) { - gov, voter := deployGovernance(t) - user1 := getTxOpt(t, "user1") - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: user1.From, - Voter: user1.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToAddMember", info)), - "Already member", - ) - }) - t.Run("can addProposal to add member", func(t *testing.T) { - gov, voter := deployGovernance(t) - govMem1 := getTxOpt(t, "govMem1") - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - - var ( - length *big.Int - creator common.Address - memo []byte - newStakerAddress common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - ballot, ballotDetail := []interface{}{}, []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &ballot, "getBallotBasic", length)) - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &ballotDetail, "getBallotMember", length)) - creator, memo, newStakerAddress = ballot[3].(common.Address), ballot[4].([]byte), ballotDetail[1].(common.Address) - require.Equal(t, voter.From, creator) - require.Equal(t, []byte("memo"), memo) - require.Equal(t, govMem1.From, newStakerAddress) - - info = MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, big.NewInt(3), length) - }) - t.Run("cannot addProposal to remove non-member", func(t *testing.T) { - gov, voter := deployGovernance(t) - govMem1 := getTxOpt(t, "govMem1") - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToRemoveMember", govMem1.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))), - "Non-member", - ) - }) - t.Run("cannot addProposal to remove a sole member", func(t *testing.T) { - gov, voter := deployGovernance(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToRemoveMember", gov.owner.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))), - "Cannot remove a sole member", - ) - }) - t.Run("can addProposal to change member's other addresses self without voting", func(t *testing.T) { - gov, voter := deployGovernance(t) - - voter1 := getTxOpt(t, "voter1") - user1 := getTxOpt(t, "user1") - var ( - oldMember, oldVoter, oldReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&oldReward}, "getReward", common.Big1)) - require.Equal(t, user1.From, oldReward) - - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: gov.owner.From, - Voter: voter1.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - newMember, newVoter, newReward common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", common.Big1)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, newMember) - require.Equal(t, voter1.From, newVoter) - require.Equal(t, user1.From, newReward) - }) - t.Run("cannot addProposal to change member's other addresses which is already member", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen, nodeLen, lock *big.Int - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLen)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLen)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLen)) - require.Equal(t, govMem1.From, newMember) - require.Equal(t, govMem1.From, newVoter) - require.Equal(t, govMem1.From, newReward) - - node := gov.nodeInfos[0] - info = MemberInfo{ - Staker: gov.owner.From, - Voter: govMem1.From, - Reward: getTxOpt(t, "user1").From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)), - "Already a member", - ) - }) - t.Run("cannot addProposal to add member which is already voter", func(t *testing.T) { - gov, voter := deployGovernance(t) - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - var memberLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - - node := gov.nodeInfos[0] - user1 := getTxOpt(t, "user1") - info = MemberInfo{ - Staker: gov.owner.From, - Voter: govMem1.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - var ( - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLen)) - require.Equal(t, gov.owner.From, newMember) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLen)) - require.Equal(t, govMem1.From, newVoter) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLen)) - require.Equal(t, user1.From, newReward) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big1)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - /*memberLen*/ nodeLen, lock, bal *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.Equal(t, memberLen, nodeLen) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.True(t, lock.Sign() == 0) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&bal}, "balanceOf", govMem1.From)) - require.Equal(t, LOCK_AMOUNT, bal) - }) - t.Run("cannot addProposal to change member which is already voter", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - var memberLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - - user1 := getTxOpt(t, "user1") - info = MemberInfo{ - Staker: gov.owner.From, - Voter: govMem1.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - - var ( - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLen)) - require.Equal(t, gov.owner.From, newMember) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLen)) - require.Equal(t, govMem1.From, newVoter) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLen)) - require.Equal(t, user1.From, newReward) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - var ( - /*memberLen*/ nodeLen, lock, bal *big.Int - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.Equal(t, memberLen, nodeLen) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.True(t, lock.Sign() == 0) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&bal}, "balanceOf", govMem1.From)) - require.Equal(t, LOCK_AMOUNT, bal) - }) - t.Run("cannot addProposal to change non-member", func(t *testing.T) { - gov, voter := deployGovernance(t) - govMem1, govMem2 := getTxOpt(t, "govMem1"), getTxOpt(t, "govMem2") - - node := gov.nodeInfos[0] - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, govMem2.From, common.Big0, common.Big0)), - "Non-member", - ) - }) - t.Run("can addProposal to change governance", func(t *testing.T) { - gov, voter := deployGovernance(t) - newGovImp, _, err := gov.Deploy(compiled.GovImp.Deploy(gov.backend, gov.owner)) - require.NoError(t, err) - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeGov", newGovImp, []byte("memo"), big.NewInt(86400))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - }) - t.Run("can not addProposal to change governance using EOA", func(t *testing.T) { - gov, voter := deployGovernance(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeGov", getTxOpt(t, "govMem1").From, []byte("memo"), big.NewInt(86400))), - "", - ) - }) - t.Run("can not addProposal to change governance using non-UUPS", func(t *testing.T) { - gov, voter := deployGovernance(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeGov", gov.registry, []byte("memo"), big.NewInt(86400))), - "ERC1967Upgrade: new implementation is not UUPS", - ) - }) - t.Run("cannot addProposal to change governance with same address", func(t *testing.T) { - gov, voter := deployGovernance(t) - var govImp common.Address - require.NoError(t, gov.Gov.Call(callOpts, &[]interface{}{&govImp}, "implementation")) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeGov", govImp, []byte("memo"), big.NewInt(86400))), - "Same contract address", - ) - }) - t.Run("cannot addProposal to change governance with zero address", func(t *testing.T) { - gov, voter := deployGovernance(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeGov", common.Address{}, []byte("memo"), big.NewInt(86400))), - "Implementation cannot be zero", - ) - }) - t.Run("can addProposal to change environment", func(t *testing.T) { - gov, voter := deployGovernance(t) - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeEnv", ToBytes32("key"), EnvTypes.Bytes32, []byte("value"), []byte("memo"), big.NewInt(86400))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - }) - t.Run("cannot addProposal to change environment with wrong type", func(t *testing.T) { - gov, voter := deployGovernance(t) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeEnv", ToBytes32("key"), EnvTypes.Invalid, []byte("value"), []byte("memo"), big.NewInt(86400))), - "Invalid type", - ) - }) - t.Run("can vote approval to add member", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen, nodeLen, lock *big.Int - newMember, newVoter, newReward common.Address - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&lock}, "lockedBalanceOf", govMem1.From)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newMember}, "getMember", memberLen)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newVoter}, "getVoter", memberLen)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&newReward}, "getReward", memberLen)) - require.Equal(t, common.Big2, memberLen) - require.Equal(t, memberLen, nodeLen) - require.Equal(t, LOCK_AMOUNT, lock) - require.Equal(t, govMem1.From, newMember) - require.Equal(t, govMem1.From, newVoter) - require.Equal(t, govMem1.From, newReward) - }) - t.Run("cannot vote approval to add member with insufficient staking", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = new(big.Int).Div(LOCK_AMOUNT, common.Big2) - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - - memberLen *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - }) - t.Run("can vote disapproval to deny adding member", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, false)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - }) - t.Run("can vote approval to change member totally", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, common.Big1, length) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - var ( - preDeployerAvail, preGovmem1Avail *big.Int - ) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&preDeployerAvail}, "availableBalanceOf", govMem1.From)) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&preGovmem1Avail}, "availableBalanceOf", govMem2.From)) - - info = MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo2"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, govMem1.From, LOCK_AMOUNT, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big3, true)) - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", common.Big3, true)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, big.NewInt(3), length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big3)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen *big.Int - memberAddr common.Address - name, enode, ip []byte - port *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberAddr}, "getMember", common.Big2)) - getNode := []interface{}{} - require.NoError(t, gov.GovImp.Call(callOpts, &getNode, "getNode", common.Big2)) - require.Equal(t, common.Big2, memberLen) - require.Equal(t, govMem2.From, memberAddr) - name, enode, ip, port = getNode[0].([]byte), getNode[1].([]byte), getNode[2].([]byte), getNode[3].(*big.Int) - require.Equal(t, node1.name, name) - require.Equal(t, node1.enode, enode) - require.Equal(t, node1.ip, ip) - require.Equal(t, node1.port, port) - - var ( - nodeIdxFromDeployer, nodeIdxFromGovMem1 *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdxFromDeployer}, "getNodeIdxFromMember", govMem1.From)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdxFromGovMem1}, "getNodeIdxFromMember", govMem2.From)) - require.True(t, nodeIdxFromDeployer.Sign() == 0) - require.Equal(t, common.Big2, nodeIdxFromGovMem1) - - var ( - postDeployerAvail, postGovmem1Avail *big.Int - ) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&postDeployerAvail}, "availableBalanceOf", govMem1.From)) - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&postGovmem1Avail}, "availableBalanceOf", govMem2.From)) - require.Equal(t, LOCK_AMOUNT, new(big.Int).Sub(postDeployerAvail, preDeployerAvail)) - require.Equal(t, LOCK_AMOUNT, new(big.Int).Sub(preGovmem1Avail, postGovmem1Avail)) - }) - t.Run("can vote approval to change enode only without voting", func(t *testing.T) { - gov, voter := deployGovernance(t) - - info := MemberInfo{ - Staker: gov.owner.From, - Voter: gov.owner.From, - Reward: gov.owner.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen *big.Int - memberAddr common.Address - name, enode, ip []byte - port *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberAddr}, "getMember", common.Big1)) - getNode := []interface{}{} - require.NoError(t, gov.GovImp.Call(callOpts, &getNode, "getNode", common.Big1)) - require.Equal(t, common.Big1, memberLen) - require.Equal(t, gov.owner.From, memberAddr) - name, enode, ip, port = getNode[0].([]byte), getNode[1].([]byte), getNode[2].([]byte), getNode[3].(*big.Int) - require.Equal(t, node1.name, name) - require.Equal(t, node1.enode, enode) - require.Equal(t, node1.ip, ip) - require.Equal(t, node1.port, port) - }) - t.Run("cannot vote approval to change member with insufficient staking", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = new(big.Int).Sub(LOCK_AMOUNT, big.NewInt(1000000000)) - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - }) - t.Run("can vote approval to change governance", func(t *testing.T) { - gov, voter := deployGovernance(t) - - var ( - getGasLimitAndBaseFee []interface{} - MBF *big.Int - ) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &getGasLimitAndBaseFee, "getGasLimitAndBaseFee")) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&MBF}, "getMaxBaseFee")) - - newGovImp, _, err := gov.Deploy(compiled.GovImp.Deploy(gov.backend, gov.owner)) - require.NoError(t, err) - - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeGov", newGovImp, []byte("memo"), big.NewInt(86400))) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var imp common.Address - require.NoError(t, gov.Gov.Call(callOpts, &[]interface{}{&imp}, "implementation")) - require.Equal(t, newGovImp, imp) - - var ( - newGetGasLimitAndBaseFee []interface{} - NEW_MBF *big.Int - ) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &newGetGasLimitAndBaseFee, "getGasLimitAndBaseFee")) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&NEW_MBF}, "getMaxBaseFee")) - require.Equal(t, getGasLimitAndBaseFee[0], newGetGasLimitAndBaseFee[0]) - require.Equal(t, getGasLimitAndBaseFee[1], newGetGasLimitAndBaseFee[1]) - require.Equal(t, getGasLimitAndBaseFee[2], newGetGasLimitAndBaseFee[2]) - require.Equal(t, MBF, NEW_MBF) - }) - t.Run("can vote approval to change environment", func(t *testing.T) { - gov, voter := deployGovernance(t) - var ( - blocksPer *big.Int - ) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&blocksPer}, "getBlocksPer")) - require.NotEqual(t, big.NewInt(100), blocksPer) - - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&blocksPer}, "getBlocksPer")) - require.Equal(t, big.NewInt(100), blocksPer) - }) - t.Run("cannot vote for a ballot already done", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem1.From)) - govMem1.Value = new(big.Int).Sub(LOCK_AMOUNT, big.NewInt(1000000000)) - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "vote", common.Big2, true)), - "Expired", - ) - }) - t.Run("cannot vote for a ballot already staker done", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = new(big.Int).Sub(LOCK_AMOUNT, big.NewInt(1000000000)) - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big2, true)) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "vote", common.Big2, true)), - "Expired", - ) - }) - t.Run("cannot vote for a ballot already voter done", func(t *testing.T) { - gov, voter := deployGovernance(t) - - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = new(big.Int).Sub(LOCK_AMOUNT, big.NewInt(1000000000)) - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeMember", info, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", common.Big2, true)) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "vote", common.Big2, true)), - "Expired", - ) - }) - t.Run("cannot add proposal during period time", func(t *testing.T) { - gov, voter := deployGovernance(t) - - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )) - - gov.ExpectedOk(gov.GovImp.Transact(voter, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "setProposalTimePeriod", big.NewInt(60))) - - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - big.NewInt(86400), - )), "Cannot add proposal too early", - ) - }) - }) - t.Run("Two Member", func(t *testing.T) { - deployGovernance := func(t *testing.T) (gov *Governance, govMem1 *bind.TransactOpts) { - gov = NewGovernance(t).DeployContracts(t) - govMem1 = getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem1, "deposit")) - govMem1.Value = nil - - info := MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - } - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", info)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var memberLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big2, memberLen) - - gov.nodeInfos = append(gov.nodeInfos, node1) - return - } - t.Run("cannot vote with changed voter address", func(t *testing.T) { - gov, _ := deployGovernance(t) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", ToBytes32("key"), EnvTypes.Bytes32, []byte("value"), []byte("memo"), big.NewInt(86400))) - var ( - ballotIdx *big.Int - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - node := gov.nodeInfos[0] - voter, voter1, user1 := getTxOpt(t, "voter"), getTxOpt(t, "voter1"), getTxOpt(t, "user1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, towei(1), &voter.From)) - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, towei(1), &voter1.From)) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", MemberInfo{ - Staker: gov.owner.From, - Voter: voter.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - }, gov.owner.From, common.Big0, common.Big0)) - gov.ExpectedOk(gov.GovImp.Transact(voter, "vote", ballotIdx, true)) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", MemberInfo{ - Staker: gov.owner.From, - Voter: voter1.From, - Reward: user1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - }, gov.owner.From, common.Big0, common.Big0)) - - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(voter1, "vote", ballotIdx, true)), - "already voted", - ) - }) - t.Run("cannot addProposal to add member self", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - node := gov.nodeInfos[0] - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "addProposalToAddMember", - MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - }, - )), "Already member", - ) - }) - t.Run("can addProposal to remove member", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", govMem1.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - }) - t.Run("can addProposal to add member where info is the removed member's with same govMem", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", govMem1.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, true)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - }) - t.Run("can addProposal to add member where info is the removed member's", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", govMem1.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, true)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - t.Log("member removed") - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, true)) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - }) - t.Run("can vote to add member", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node2.name, - Enode: node2.enode, - Ip: node2.ip, - Port: node2.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, true)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - }) - t.Run("can vote to deny adding member", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node2.name, - Enode: node2.enode, - Ip: node2.ip, - Port: node2.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, false)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, false)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - }) - t.Run("can vote to remove first member", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - var preAvail, postAvail *big.Int - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&preAvail}, "availableBalanceOf", gov.owner.From)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", gov.owner.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, true)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen, nodeLen, nodeIdx, nodeIdx2 *big.Int - isMem bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&isMem}, "isMember", gov.owner.From)) - require.False(t, isMem) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.Equal(t, common.Big1, nodeLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdx}, "getNodeIdxFromMember", gov.owner.From)) - require.True(t, nodeIdx.Sign() == 0) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdx2}, "getNodeIdxFromMember", govMem1.From)) - require.Equal(t, common.Big1, nodeIdx2) - - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&postAvail}, "availableBalanceOf", gov.owner.From)) - require.Equal(t, LOCK_AMOUNT, new(big.Int).Sub(postAvail, preAvail)) - }) - t.Run("can vote to remove last member", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - var preAvail, postAvail *big.Int - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&preAvail}, "availableBalanceOf", gov.owner.From)) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToRemoveMember", govMem1.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, true)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - var ( - memberLen, nodeLen, nodeIdx, nodeIdx2 *big.Int - isMem bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big1, memberLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&isMem}, "isMember", govMem1.From)) - require.False(t, isMem) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeLen}, "getNodeLength")) - require.Equal(t, common.Big1, nodeLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdx}, "getNodeIdxFromMember", govMem1.From)) - require.True(t, nodeIdx.Sign() == 0) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&nodeIdx2}, "getNodeIdxFromMember", gov.owner.From)) - require.Equal(t, common.Big1, nodeIdx2) - - require.NoError(t, gov.StakingImp.Call(callOpts, &[]interface{}{&postAvail}, "availableBalanceOf", govMem1.From)) - require.Equal(t, LOCK_AMOUNT, new(big.Int).Sub(postAvail, preAvail)) - }) - t.Run("cannot vote simultaneously", func(t *testing.T) { - gov, _ := deployGovernance(t) - - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node2.name, - Enode: node2.enode, - Ip: node2.ip, - Port: node2.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - - govMem3 := getTxOpt(t, "govMem3") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem3.From)) - govMem3.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem3, "deposit")) - govMem3.Value = nil - - node3 := nodeInfo{ - name: []byte("name3"), - enode: hexutil.MustDecode("0x999777777711c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a1"), - ip: []byte("127.0.0.4"), - port: big.NewInt(8542), - } - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem3.From, - Voter: govMem3.From, - Reward: govMem3.From, - Name: node3.name, - Enode: node3.enode, - Ip: node3.ip, - Port: node3.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", new(big.Int).Sub(length, common.Big1), true)) - var inVoting *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "vote", length, true)), - "Now in voting with different ballot", - ) - }) - t.Run("vote is ended when the sum of voting power is max", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - govMem2 := getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Mul(LOCK_AMOUNT, common.Big2), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(govMem2, "deposit")) - govMem2.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node2.name, - Enode: node2.enode, - Ip: node2.ip, - Port: node2.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "ballotLength")) - require.Equal(t, common.Big2, length) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", length, true)) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.ExpectedOk(gov.GovImp.Transact(govMem1, "vote", length, false)) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0, inVoting) - getBallotState = []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - }) - t.Run("cannot vote approval when the voting is ended", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - delay_time := big.NewInt(86400) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - delay_time, - )) - var ballotLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotLen}, "ballotLength")) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotLen, true)) - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big2, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.backend.AdjustTime(time.Second * time.Duration(new(big.Int).Mul(delay_time, big.NewInt(2000)).Int64())) - gov.backend.Commit() - - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "vote", ballotLen, false)), - "Expired", - ) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "finalizeEndedVote")) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - }) - t.Run("Non member cannot end voting", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - - delay_time := big.NewInt(86400) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToChangeEnv", - crypto.Keccak256Hash([]byte("blocksPer")), - EnvTypes.Uint, - hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000064"), // 32bytes, 100 - []byte("memo"), - delay_time, - )) - var ballotLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotLen}, "ballotLength")) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotLen, true)) - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big2, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, length, inVoting) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", length)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.InProgress, state) - require.False(t, isFinalized) - - gov.backend.AdjustTime(time.Second * time.Duration(new(big.Int).Mul(delay_time, big.NewInt(2000)).Int64())) - gov.backend.Commit() - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "vote", ballotLen, false)), - "Expired", - ) - govMem3 := getTxOpt(t, "getMem3") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, towei(1), &govMem3.From)) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem3, "finalizeEndedVote")), - "No Permission", - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.Equal(t, ballotLen, inVoting) - }) - t.Run("reject proposal without voting about changing voter address if voter is already registered", func(t *testing.T) { - gov, govMem1 := deployGovernance(t) - node := gov.nodeInfos[0] - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "addProposalToChangeMember", MemberInfo{ - Staker: gov.owner.From, - Voter: govMem1.From, - Reward: gov.owner.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo1"), - Duration: big.NewInt(86400), - }, gov.owner.From, common.Big0, common.Big0)), - "Already a member", - ) - var length *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, common.Big1, length) - - var ( - inVoting *big.Int - state *big.Int - isFinalized bool - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", common.Big2)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.True(t, state.Sign() == 0) - require.False(t, isFinalized) - - var ( - memberLen *big.Int - memberAddr, voterAddr, rewardAddr common.Address - ) - - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big2, memberLen) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberAddr}, "getMember", common.Big1)) - require.Equal(t, gov.owner.From, memberAddr) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&voterAddr}, "getVoter", common.Big1)) - require.Equal(t, gov.owner.From, voterAddr) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&rewardAddr}, "getReward", common.Big1)) - require.Equal(t, gov.owner.From, rewardAddr) - - var ( - name, enode, ip []byte - port *big.Int - ) - getNode := []interface{}{} - require.NoError(t, gov.GovImp.Call(callOpts, &getNode, "getNode", common.Big1)) - name, enode, ip, port = getNode[0].([]byte), getNode[1].([]byte), getNode[2].([]byte), getNode[3].(*big.Int) - require.Equal(t, node.name, name) - require.Equal(t, node.enode, enode) - require.Equal(t, node.ip, ip) - require.Equal(t, node.port, port) - }) - }) - t.Run("Others", func(t *testing.T) { - t.Run("cannot init", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - govMem1 := getTxOpt(t, "govMem1") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", common.Big1, true)) - - var memberLen *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&memberLen}, "getMemberLength")) - require.Equal(t, common.Big2, memberLen) - - node := gov.nodeInfos[0] - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "init", gov.registry, LOCK_AMOUNT, node.name, node.enode, node.ip, node.port)), - "Initializable: contract is already initialized", - ) - }) - t.Run("cannot addProposal", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - govMem1, govMem2 := getTxOpt(t, "govMem1"), getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, towei(1), &govMem1.From)) - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, towei(1), &govMem2.From)) - - node := gov.nodeInfos[0] - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "addProposalToAddMember", MemberInfo{ - Staker: govMem1.From, - Voter: govMem1.From, - Reward: govMem1.From, - Name: node.name, - Enode: node.enode, - Ip: node.ip, - Port: node.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })), - "No Permission", - ) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "addProposalToRemoveMember", govMem1.From, LOCK_AMOUNT, []byte("memo1"), big.NewInt(86400), LOCK_AMOUNT, new(big.Int))), - "No Permission", - ) - - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem1.From)) - govMem1.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem1"), "deposit")) - govMem1.Value = nil - - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "addProposalToChangeMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node1.name, - Enode: node1.enode, - Ip: node1.ip, - Port: node1.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - }, govMem1.From, common.Big0, common.Big0)), - "No Permission", - ) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "addProposalToChangeGov", govMem1.From, []byte("memo"), big.NewInt(86400))), - "No Permission", - ) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "addProposalToChangeEnv", ToBytes32("key"), EnvTypes.Bytes32, []byte("value"), []byte("memo"), big.NewInt(86400))), - "No Permission", - ) - }) - t.Run("cannot vote", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - govMem1, govMem2 := getTxOpt(t, "govMem1"), getTxOpt(t, "govMem2") - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, towei(1), &govMem1.From)) - gov.ExpectedOk(TransferCoin(gov.backend, gov.owner, new(big.Int).Add(LOCK_AMOUNT, towei(1)), &govMem2.From)) - govMem2.Value = LOCK_AMOUNT - gov.ExpectedOk(gov.StakingImp.Transact(getTxOpt(t, "govMem2"), "deposit")) - govMem2.Value = nil - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToAddMember", MemberInfo{ - Staker: govMem2.From, - Voter: govMem2.From, - Reward: govMem2.From, - Name: node2.name, - Enode: node2.enode, - Ip: node2.ip, - Port: node2.port, - LockAmount: LOCK_AMOUNT, - Memo: []byte("memo"), - Duration: big.NewInt(86400), - })) - ExpectedRevert(t, - gov.ExpectedFail(gov.GovImp.Transact(govMem1, "vote", common.Big1, true)), - "No Permission", - ) - }) - t.Run("upgradeTo", func(t *testing.T) { - gov := NewGovernance(t).DeployContracts(t) - - var ( - callOpts = new(bind.CallOpts) - - getGasLimitAndBaseFee []interface{} - MBF *big.Int - ) - - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &getGasLimitAndBaseFee, "getGasLimitAndBaseFee")) - require.NoError(t, gov.EnvStorageImp.Call(callOpts, &[]interface{}{&MBF}, "getMaxBaseFee")) - - newGovImp, _, err := gov.Deploy(compiled.GovImp.Deploy(gov.backend, gov.owner)) - require.NoError(t, err) - - ExpectedRevert(t, gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "upgradeTo", newGovImp)), "Invalid access") - ExpectedRevert(t, gov.ExpectedFail(gov.GovImp.Transact(gov.owner, "upgradeToAndCall", newGovImp, []byte{})), "Invalid access") - }) - }) -} - -func TestExecute(t *testing.T) { - var ( - callOpts = new(bind.CallOpts) - ) - - gov := NewGovernance(t).DeployContracts(t) - testAddress, testContract, testABI := func() (common.Address, *bind.BoundContract, *abi.ABI) { - var testSource string = ` -pragma solidity ^0.8.0; -contract Test { - uint256 public a; - - receive() external payable { - a += msg.value; - } - - function add(uint256 b) external payable { - a += b + msg.value; - } -}` - var ( - dir = t.TempDir() - filename = "Test.sol" - ) - - require.NoError(t, os.WriteFile(filepath.Join(dir, filename), []byte(testSource), 0700)) - - compiled, err := compile.Compile(dir, filepath.Join(dir, filename)) - require.NoError(t, err) - Test := compiled["Test"] - testBind, err := newBindContract(Test) - require.NoError(t, err) - - aBI, err := parseABI(Test.Info.AbiDefinition) - require.NoError(t, err) - ta, _, tc, err := testBind.Deploy(gov.backend, gov.owner) - require.NoError(t, err) - gov.backend.Commit() - - return ta, tc, aBI - }() - - callA := func(t *testing.T) *big.Int { - var a = new(big.Int) - require.NoError(t, testContract.Call(callOpts, &[]interface{}{&a}, "a")) - return a - } - - t.Run("accept add by params", func(t *testing.T) { - calldata, err := testABI.Pack("add", big.NewInt(1)) - require.NoError(t, err) - - beforeA := callA(t) - - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToExecute", testAddress, calldata, []byte("memo"), big.NewInt(86400)))) - var ballotIdx *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotIdx, true)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, ballotIdx, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", ballotIdx)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.Equal(t, callA(t), new(big.Int).Add(beforeA, common.Big1)) - }) - t.Run("accept add by msg.value", func(t *testing.T) { - calldata := []byte{} - - governanceAddress := common.Address{} - require.NoError(t, gov.Registry.Call(callOpts, &[]interface{}{&governanceAddress}, "getContractAddress", ToBytes32("GovernanceContract"))) - require.NotEqual(t, common.Address{}, governanceAddress) - - beforeA := callA(t) - - gov.owner.Value = common.Big1 - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToExecute", testAddress, calldata, []byte("memo"), big.NewInt(86400)))) - gov.owner.Value = nil - balance, err := gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.Equal(t, common.Big1, balance) - - var ballotIdx *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - beforeBalance, err := gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotIdx, true)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, ballotIdx, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", ballotIdx)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.Equal(t, callA(t), new(big.Int).Add(beforeA, common.Big1)) - - balance, err = gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.True(t, balance.Sign() == 0) - - balance, err = gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - require.Equal(t, big.NewInt(1), new(big.Int).Sub(balance, beforeBalance)) - }) - t.Run("accept add by params, msg.value", func(t *testing.T) { - calldata, err := testABI.Pack("add", big.NewInt(1)) - require.NoError(t, err) - - beforeA := callA(t) - - governanceAddress := common.Address{} - require.NoError(t, gov.Registry.Call(callOpts, &[]interface{}{&governanceAddress}, "getContractAddress", ToBytes32("GovernanceContract"))) - require.NotEqual(t, common.Address{}, governanceAddress) - - gov.owner.Value = common.Big1 - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToExecute", testAddress, calldata, []byte("memo"), big.NewInt(86400)))) - gov.owner.Value = nil - balance, err := gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.Equal(t, common.Big1, balance) - - var ballotIdx *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - beforeBalance, err := gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotIdx, true)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, ballotIdx, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", ballotIdx)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Accepted, state) - require.True(t, isFinalized) - - require.Equal(t, callA(t), new(big.Int).Add(beforeA, common.Big2)) - - balance, err = gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.True(t, balance.Sign() == 0) - - balance, err = gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - require.Equal(t, big.NewInt(1), new(big.Int).Sub(balance, beforeBalance)) - }) - t.Run("reject add by params", func(t *testing.T) { - calldata, err := testABI.Pack("add", big.NewInt(1)) - require.NoError(t, err) - - beforeA := callA(t) - - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToExecute", testAddress, calldata, []byte("memo"), big.NewInt(86400)))) - - var ballotIdx *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotIdx, false)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, ballotIdx, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", ballotIdx)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - require.True(t, new(big.Int).Sub(callA(t), beforeA).Sign() == 0) - }) - t.Run("reject add by msg.value", func(t *testing.T) { - calldata := []byte{} - - beforeA := callA(t) - - governanceAddress := common.Address{} - require.NoError(t, gov.Registry.Call(callOpts, &[]interface{}{&governanceAddress}, "getContractAddress", ToBytes32("GovernanceContract"))) - require.NotEqual(t, common.Address{}, governanceAddress) - - gov.owner.Value = common.Big1 - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToExecute", testAddress, calldata, []byte("memo"), big.NewInt(86400)))) - gov.owner.Value = nil - - balance, err := gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.Equal(t, common.Big1, balance) - - var ballotIdx *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - beforeBalance, err := gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - - gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotIdx, false)) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, ballotIdx, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", ballotIdx)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - require.True(t, new(big.Int).Sub(callA(t), beforeA).Sign() == 0) - - balance, err = gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.True(t, balance.Sign() == 0) - - balance, err = gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - require.True(t, new(big.Int).Sub(balance, beforeBalance).Sign() == 0) - }) - t.Run("reject add by params, msg.value", func(t *testing.T) { - calldata, err := testABI.Pack("add", big.NewInt(1)) - require.NoError(t, err) - - governanceAddress := common.Address{} - require.NoError(t, gov.Registry.Call(callOpts, &[]interface{}{&governanceAddress}, "getContractAddress", ToBytes32("GovernanceContract"))) - require.NotEqual(t, common.Address{}, governanceAddress) - - beforeA := callA(t) - - gov.owner.Value = common.Big1 - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "addProposalToExecute", testAddress, calldata, []byte("memo"), big.NewInt(86400)))) - gov.owner.Value = nil - balance, err := gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.Equal(t, common.Big1, balance) - - var ballotIdx *big.Int - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&ballotIdx}, "ballotLength")) - - beforeBalance, err := gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - - require.NoError(t, gov.ExpectedOk(gov.GovImp.Transact(gov.owner, "vote", ballotIdx, false))) - var ( - length *big.Int - inVoting *big.Int - state *big.Int - isFinalized bool - ) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&length}, "voteLength")) - require.Equal(t, ballotIdx, length) - require.NoError(t, gov.GovImp.Call(callOpts, &[]interface{}{&inVoting}, "getBallotInVoting")) - require.True(t, inVoting.Sign() == 0) - getBallotState := []interface{}{} - require.NoError(t, gov.BallotStorageImp.Call(callOpts, &getBallotState, "getBallotState", ballotIdx)) - state, isFinalized = getBallotState[1].(*big.Int), getBallotState[2].(bool) - require.Equal(t, BallotStates.Rejected, state) - require.True(t, isFinalized) - - require.True(t, new(big.Int).Sub(callA(t), beforeA).Sign() == 0) - - balance, err = gov.backend.BalanceAt(callOpts.Context, governanceAddress, nil) - require.NoError(t, err) - require.True(t, balance.Sign() == 0) - - balance, err = gov.backend.BalanceAt(callOpts.Context, testAddress, nil) - require.NoError(t, err) - require.True(t, new(big.Int).Sub(balance, beforeBalance).Sign() == 0) - }) -} diff --git a/wemix/governance-contract/test/utils.go b/wemix/governance-contract/test/utils.go deleted file mode 100644 index db02f6532450..000000000000 --- a/wemix/governance-contract/test/utils.go +++ /dev/null @@ -1,236 +0,0 @@ -package test - -import ( - "context" - "fmt" - "math/big" - "strings" - "sync" - "testing" - - "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" -) - -type allErrorsType map[[4]byte]abi.Error - -var ( - allErrorsLock = sync.RWMutex{} - allErrors = allErrorsType{} // eventID => abi.Event -) - -func collectErrors(errors map[string]abi.Error) error { - for _, e := range errors { - func() { - allErrorsLock.Lock() - defer allErrorsLock.Unlock() - sig := [4]byte{} - copy(sig[:], e.ID[:4]) - if _, ok := allErrors[sig]; !ok { - allErrors[sig] = e - } - }() - } - return nil -} - -type RevertError struct { - ABI abi.Error - Output interface{} -} - -func (r *RevertError) Error() string { - return fmt.Sprintf("%s: %s %v", vm.ErrExecutionReverted, r.ABI.Sig, r.Output) -} - -func UnpackError(err error) error { - if err == nil { - return nil - } - - var result []byte - if revert, ok := err.(interface { - ErrorData() interface{} - }); !ok { - return err - } else if data, ok := revert.ErrorData().(string); !ok { - return err - } else if bytes, decodeErr := hexutil.Decode(data); decodeErr != nil { - return err - } else { - result = bytes - } - - sig := [4]byte{} - copy(sig[:], result[:4]) - if errABI, ok := allErrors[sig]; !ok { - return err - } else if output, unpackErr := errABI.Unpack(result); unpackErr != nil { - return err - } else { - return &RevertError{errABI, output} - } -} - -func ExpectedRevert(t *testing.T, err error, args ...interface{}) { - require.Error(t, err) - length := len(args) - if revert, ok := err.(*RevertError); ok { - if length > 0 { - name, ok := args[0].(string) - require.True(t, ok) - require.Equal(t, revert.ABI.Name, name) - } - if length > 1 { - output, ok := revert.Output.([]interface{}) - require.True(t, ok) - for i := 1; i < length; i++ { - arg := args[i] - if arg != nil { - require.Equal(t, args[i], output[i-1]) - } - } - } - } else { - if length > 0 { - errStr := strings.TrimLeft(err.Error(), vm.ErrExecutionReverted.Error()+":") - message, ok := args[0].(string) - require.True(t, ok) - require.Equal(t, strings.TrimSpace(message), strings.TrimSpace(errStr)) - } - } -} - -func ToBytes32(str string) [32]byte { - bytes := []byte(str) - if len(bytes) > 32 { - bytes = bytes[:32] - } - var copied = [32]byte{} - copy(copied[:], bytes) - return copied -} - -var eoas = make(map[string]*bind.TransactOpts) - -func getTxOpt(t *testing.T, alias string) *bind.TransactOpts { - if eoa, ok := eoas[alias]; ok { - return eoa - } else { - pk, err := crypto.GenerateKey() - require.NoError(t, err) - opts, err := bind.NewKeyedTransactorWithChainID(pk, params.AllEthashProtocolChanges.ChainID) - require.NoError(t, err) - eoas[alias] = opts - return opts - } -} - -type IBackend interface { - bind.ContractBackend - bind.DeployBackend - SuggestGasTipCap(context.Context) (*big.Int, error) -} - -func CreateDynamicTx(backend IBackend, opts *bind.TransactOpts, to *common.Address, input []byte) (*types.Transaction, error) { - // Normalize value - value := opts.Value - if value == nil { - value = new(big.Int) - } - // Estimate TipCap - gasTipCap := opts.GasTipCap - if gasTipCap == nil { - tip, err := backend.SuggestGasTipCap(ensureContext(opts.Context)) - if err != nil { - return nil, err - } - gasTipCap = tip - } - // Estimate FeeCap - gasFeeCap := opts.GasFeeCap - if gasFeeCap == nil { - gasFeeCap = new(big.Int).Add(gasTipCap, big.NewInt(1e9)) // 101gwei is recommended for maxFeeCap - } - if gasFeeCap.Cmp(gasTipCap) < 0 { - return nil, fmt.Errorf("maxFeePerGas (%v) < maxPriorityFeePerGas (%v)", gasFeeCap, gasTipCap) - } - // Estimate GasLimit - gasLimit := opts.GasLimit - if opts.GasLimit == 0 { - var err error - gasLimit, err = estimateGasLimit(backend, opts, to, input, nil, gasTipCap, gasFeeCap, value) - if err != nil { - return nil, err - } - } - // create the transaction - nonce, err := getNonce(backend, opts) - if err != nil { - return nil, err - } - - baseTx := &types.DynamicFeeTx{ - To: to, - Nonce: nonce, - GasFeeCap: gasFeeCap, - GasTipCap: gasTipCap, - Gas: gasLimit, - Value: value, - Data: input, - } - - return opts.Signer(opts.From, types.NewTx(baseTx)) -} - -func TransferCoin(backend IBackend, opts *bind.TransactOpts, value *big.Int, to *common.Address) (*types.Transaction, error) { - opts.Value = value - defer func() { opts.Value = nil }() - if tx, err := CreateDynamicTx(backend, opts, to, []byte{}); err != nil { - return nil, err - } else { - return tx, backend.SendTransaction(ensureContext(opts.Context), tx) - } -} - -// ensureContext is a helper method to ensure a context is not nil, even if the -// user specified it as such. -func ensureContext(ctx context.Context) context.Context { - if ctx == nil { - return context.Background() - } - return ctx -} - -func estimateGasLimit(backend interface { - EstimateGas(ctx context.Context, call ethereum.CallMsg) (uint64, error) -}, opts *bind.TransactOpts, to *common.Address, input []byte, gasPrice, gasTipCap, gasFeeCap, value *big.Int) (uint64, error) { - msg := ethereum.CallMsg{ - From: opts.From, - To: to, - GasPrice: gasPrice, - GasTipCap: gasTipCap, - GasFeeCap: gasFeeCap, - Value: value, - Data: input, - } - return backend.EstimateGas(ensureContext(opts.Context), msg) -} - -func getNonce(backend interface { - PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) -}, opts *bind.TransactOpts) (uint64, error) { - if opts.Nonce == nil { - return backend.PendingNonceAt(ensureContext(opts.Context), opts.From) - } else { - return opts.Nonce.Uint64(), nil - } -} diff --git a/wemix/metclient/util.go b/wemix/metclient/util.go index bf3154fa3412..52227ab78b77 100644 --- a/wemix/metclient/util.go +++ b/wemix/metclient/util.go @@ -95,7 +95,7 @@ func LoadJsonContract(r io.Reader) (*ContractData, error) { } if data.ContractName == "" || len(data.Abi) == 0 { - return nil, fmt.Errorf("invalid contract json file") + return nil, fmt.Errorf("Invalid contract json file") } name = data.ContractName @@ -204,6 +204,20 @@ func LoadContract(fn string, name string) (*ContractData, error) { } } +// packNum packs the given number (using the reflect value) and will cast it to appropriate number representation +func PackNum(value reflect.Value) []byte { + switch kind := value.Kind(); kind { + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return math.U256Bytes(new(big.Int).SetUint64(value.Uint())) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return math.U256Bytes(big.NewInt(value.Int())) + case reflect.Ptr: + return math.U256Bytes(new(big.Int).Set(value.Interface().(*big.Int))) + default: + panic("abi: fatal error") + } +} + func getReceipt(ctx context.Context, cli *ethclient.Client, hash common.Hash, isContract bool, msinterval, count int) (receipt *types.Receipt, err error) { d := time.Millisecond * time.Duration(msinterval) nilAddr := common.Address{} @@ -217,7 +231,7 @@ func getReceipt(ctx context.Context, cli *ethclient.Client, hash common.Hash, is } time.Sleep(d) } - err = fmt.Errorf("timed out") + err = fmt.Errorf("Timed out") return } @@ -322,13 +336,13 @@ func CallContract(ctx context.Context, contract *RemoteContract, if !IsArray(output) { if output == nil { - return fmt.Errorf("output is nil") + return fmt.Errorf("Output is nil") } else { err = contract.Abi.UnpackIntoInterface(output, method, out) } } else { if len(output.([]interface{})) == 0 { - return fmt.Errorf("output is empty array") + return fmt.Errorf("Output is empty array") } else { err = contract.Abi.UnpackIntoInterface(output.([]interface{}), method, out) } @@ -417,22 +431,9 @@ func ToBytes32(b string) [32]byte { if len(b) > len(b32) { b = b[len(b)-len(b32):] } + //copy(b32[32-len(b):], []byte(b)) copy(b32[:], []byte(b)) return b32 } -// packNum packs the given number (using the reflect value) and will cast it to appropriate number representation -func PackNum(value reflect.Value) []byte { - switch value.Kind() { - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return math.U256Bytes(new(big.Int).SetUint64(value.Uint())) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return math.U256Bytes(big.NewInt(value.Int())) - case reflect.Ptr: - return math.U256Bytes(new(big.Int).Set(value.Interface().(*big.Int))) - default: - panic("abi: fatal error") - } -} - // EOF diff --git a/wemix/miner_limit.go b/wemix/miner_limit.go index 25e91b1222a6..d1283152ea3b 100644 --- a/wemix/miner_limit.go +++ b/wemix/miner_limit.go @@ -11,26 +11,26 @@ import ( "time" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" wemixapi "github.com/ethereum/go-ethereum/wemix/api" - gov "github.com/ethereum/go-ethereum/wemix/bind" + "github.com/ethereum/go-ethereum/wemix/metclient" wemixminer "github.com/ethereum/go-ethereum/wemix/miner" ) // collect mining peers states func (ma *wemixAdmin) collectMinerStates(height *big.Int) []*wemixapi.WemixMinerStatus { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - contracts, err := ma.getRegGovEnvContracts(ctx, height) - if err != nil { + var ( + ctx context.Context + gov *metclient.RemoteContract + err error + ) + ctx = context.Background() + if _, gov, _, _, err = ma.getRegGovEnvContracts(ctx, height); err != nil { return nil } - - e, err := getCoinbaseEnodeCache(ctx, height, contracts.GovImp) + e, err := getCoinbaseEnodeCache(ctx, height, gov) if err != nil { return nil } @@ -47,46 +47,40 @@ func (ma *wemixAdmin) collectMinerStates(height *big.Int) []*wemixapi.WemixMiner } // get governance nodes at modifiedBlock at height -func getCoinbaseEnodeCache(ctx context.Context, height *big.Int, gov *gov.GovImp) (*coinbaseEnodeEntry, error) { - opts := &bind.CallOpts{Context: ctx, BlockNumber: height} - modifiedBlock, err := gov.ModifiedBlock(opts) - if err != nil { +func getCoinbaseEnodeCache(ctx context.Context, height *big.Int, gov *metclient.RemoteContract) (*coinbaseEnodeEntry, error) { + var modifiedBlock *big.Int + if err := metclient.CallContract(ctx, gov, "modifiedBlock", nil, &modifiedBlock, height); err != nil { return nil, err - } - if modifiedBlock.Sign() == 0 { + } else if modifiedBlock.Int64() == 0 { return nil, wemixminer.ErrNotInitialized } - // if found in cache, use it if e, ok := coinbaseEnodeCache.Load(modifiedBlock.Int64()); ok { return e.(*coinbaseEnodeEntry), nil } // otherwise, load it from the governance var ( - count *big.Int - addr common.Address - name, enode []byte - e = &coinbaseEnodeEntry{ + count, port *big.Int + addr common.Address + name, enode, ip []byte + output = []interface{}{&name, &enode, &ip, &port} + e = &coinbaseEnodeEntry{ modifiedBlock: modifiedBlock, coinbase2enode: map[string][]byte{}, enode2index: map[string]int{}, } ) - if count, err = gov.GetNodeLength(opts); err != nil { + if err := metclient.CallContract(ctx, gov, "getNodeLength", nil, &count, height); err != nil { return nil, err } for i := int64(1); i <= count.Int64(); i++ { ix := big.NewInt(i) - if addr, err = gov.GetReward(opts, ix); err != nil { + if err := metclient.CallContract(ctx, gov, "getReward", &ix, &addr, height); err != nil { return nil, err } - - if output, err := gov.GetNode(opts, ix); err != nil { + if err := metclient.CallContract(ctx, gov, "getNode", &ix, &output, height); err != nil { return nil, err - } else { - name, enode = output.Name, output.Enode } - idv4, _ := toIdv4(hex.EncodeToString(enode)) e.nodes = append(e.nodes, &wemixNode{ Name: string(name), @@ -102,7 +96,7 @@ func getCoinbaseEnodeCache(ctx context.Context, height *big.Int, gov *gov.GovImp } // returns coinbase's enode if exists in governance at given height - 1 -func coinbaseExists(ctx context.Context, height *big.Int, gov *gov.GovImp, coinbase *common.Address) ([]byte, error) { +func coinbaseExists(ctx context.Context, height *big.Int, gov *metclient.RemoteContract, coinbase *common.Address) ([]byte, error) { e, err := getCoinbaseEnodeCache(ctx, new(big.Int).Sub(height, common.Big1), gov) if err != nil { return nil, err @@ -115,7 +109,7 @@ func coinbaseExists(ctx context.Context, height *big.Int, gov *gov.GovImp, coinb } // returns true if enode exists in governance at given height-1 -func enodeExists(ctx context.Context, height *big.Int, gov *gov.GovImp, enode []byte) (common.Address, error) { +func enodeExists(ctx context.Context, height *big.Int, gov *metclient.RemoteContract, enode []byte) (common.Address, error) { e, err := getCoinbaseEnodeCache(ctx, new(big.Int).Sub(height, common.Big1), gov) if err != nil { return common.Address{}, err @@ -130,9 +124,9 @@ func enodeExists(ctx context.Context, height *big.Int, gov *gov.GovImp, enode [] // returns wemix nodes at given height func getNodesAt(height *big.Int) ([]*wemixNode, error) { ctx := context.Background() - if contracts, err := admin.getRegGovEnvContracts(ctx, height); err != nil { + if _, gov, _, _, err := admin.getRegGovEnvContracts(ctx, height); err != nil { return nil, wemixminer.ErrNotInitialized - } else if e, err := getCoinbaseEnodeCache(ctx, height, contracts.GovImp); err != nil { + } else if e, err := getCoinbaseEnodeCache(ctx, height, gov); err != nil { return nil, err } else { return e.nodes, nil @@ -169,7 +163,7 @@ func getBlockMiner(ctx context.Context, cli *ethclient.Client, entry *coinbaseEn // It's reset when governance gets updated, i.e. search doesn't go back // beyond modifiedBlock + 1. // Not enforced if member count <= 2. -func (ma *wemixAdmin) verifyMinerLimit(ctx context.Context, height *big.Int, gov *gov.GovImp, coinbase *common.Address, enode []byte) (bool, error) { +func (ma *wemixAdmin) verifyMinerLimit(ctx context.Context, height *big.Int, gov *metclient.RemoteContract, coinbase *common.Address, enode []byte) (bool, error) { // parent block number prev := new(big.Int).Sub(height, common.Big1) e, err := getCoinbaseEnodeCache(ctx, prev, gov) @@ -209,37 +203,34 @@ func (ma *wemixAdmin) verifyMinerLimit(ctx context.Context, height *big.Int, gov // check if self is eligible to mine height block at height-1 func (ma *wemixAdmin) isEligibleMiner(height *big.Int) (bool, error) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - + var ( + ctx context.Context + enode []byte + gov *metclient.RemoteContract + err error + ) + ctx = context.Background() prev := new(big.Int).Sub(height, common.Big1) - enode, err := hex.DecodeString(ma.self.Enode) + enode, err = hex.DecodeString(ma.self.Enode) if err != nil { return false, wemixminer.ErrNotInitialized } - var gov *gov.GovImp - if contracts, err := ma.getRegGovEnvContracts(ctx, prev); err != nil { + if _, gov, _, _, err = ma.getRegGovEnvContracts(ctx, prev); err != nil { return false, wemixminer.ErrNotInitialized - } else { - gov = contracts.GovImp } - e, err := getCoinbaseEnodeCache(ctx, prev, gov) if err != nil { return false, err } - // if count <= 2, not enforced if len(e.nodes) <= 2 { return true, nil } - // the enode should not appear within the last (member count / 2) blocks limit := len(e.nodes) / 2 if limit > int(height.Int64()-e.modifiedBlock.Int64()-1) { limit = int(height.Int64() - e.modifiedBlock.Int64() - 1) } - for h := new(big.Int).Set(prev); limit > 0; h, limit = h.Sub(h, common.Big1), limit-1 { blockMinerEnode, err := getBlockMiner(ctx, ma.cli, e, h) if err != nil { @@ -256,21 +247,19 @@ func (ma *wemixAdmin) isEligibleMiner(height *big.Int) (bool, error) { // beyond modifiedBlock + 1. // Not enforced if member count <= 2. func (ma *wemixAdmin) nextMinerCandidates(height *big.Int) ([]*wemixNode, error) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - var gov *gov.GovImp - if contracts, err := ma.getRegGovEnvContracts(ctx, height); err != nil { + var ( + ctx context.Context + gov *metclient.RemoteContract + err error + ) + ctx = context.Background() + if _, gov, _, _, err = ma.getRegGovEnvContracts(ctx, height); err != nil { return nil, wemixminer.ErrNotInitialized - } else { - gov = contracts.GovImp } - e, err := getCoinbaseEnodeCache(ctx, height, gov) if err != nil { return nil, err } - m := map[string]float64{} dix := (int(height.Int64()) + 1) % len(e.nodes) // default miner = height % member count for i, n := range e.nodes { diff --git a/wemix/rewards_test.go b/wemix/rewards_test.go index 50049d3af19f..dcafac7732e8 100644 --- a/wemix/rewards_test.go +++ b/wemix/rewards_test.go @@ -3,6 +3,7 @@ package wemix import ( + "bytes" "crypto/ecdsa" "encoding/json" "math/big" @@ -202,7 +203,10 @@ func verifyBlockSigForTest(height *big.Int, coinbase common.Address, nodeId []by return false } signer := crypto.PubkeyToAddress(*pubKey) - return coinbase == signer + if err != nil || !bytes.Equal(coinbase.Bytes(), signer.Bytes()) { + return false + } + return true } func TestRewardValidation(t *testing.T) { diff --git a/wemix/scripts/deploy-governance.js b/wemix/scripts/deploy-governance.js new file mode 100644 index 000000000000..70ef961acc2f --- /dev/null +++ b/wemix/scripts/deploy-governance.js @@ -0,0 +1,400 @@ +// deploy-governance.js + +// uses offline wallet +var GovernanceDeployer = new function() { + this.wallet = null + this.from = null + this.gas = 21000 * 1400 + this.gasPrice = eth.gasPrice + this._nonce = 0 + this.receiptCheckParams = { "interval": 100, "count": 300 } + + // bool log(var args...) + this.log = function() { + var msg = "" + for (var i in arguments) { + if (msg.length > 0) + msg += " " + msg += arguments[i] + } + console.log(msg) + return true + } + + // void verifyCfg(json data) + // verifies config data, and normalize addresses + // throws exception on failure + this.verifyCfg = function(data) { + if (data.accounts.length == 0 || data.members.length == 0) + throw "At least one account and node are required" + var bootnodeExists = false + for (var i in data.members) { + var m = data.members[i] + if (!web3.isAddress(m.addr)) + throw "Invalid address 1 " + m.addr + data.members[i].addr = web3.toChecksumAddress(m.addr) + if (m.bootnode) + bootnodeExists = true + } + if (!bootnodeExists) + throw "Bootnode is not designated" + for (var i in data.accounts) { + var a = data.accounts[i] + if (!web3.isAddress(a.addr)) + throw "Invalid address " + a.addr + data.accounts[i].addr = web3.toChecksumAddress(a.addr) + } + if (data.staker) { + if (!web3.isAddress(data.staker)) + throw "Invalid staker address " + data.staker + data.staker = web3.toChecksumAddress(data.staker) + } + if (data.ecosystem) { + if (!web3.isAddress(data.ecosystem)) + throw "Invalid ecosystem address " + data.ecosystem + data.ecosystem = web3.toChecksumAddress(data.ecosystem) + } + if (data.maintenance) { + if (!web3.isAddress(data.maintenance)) + throw "Invalid maintenance address " + data.maintenance + data.maintenance = web3.toChecksumAddress(data.maintenance) + } + if (data.feecollector) { + if (!web3.isAddress(data.feecollector)) + throw "Invalid feecollector address " + data.feecollector + data.feecollector = web3.toChecksumAddress(data.feecollector) + } + } + + // bytes packNum(int num) + // pack a number into 256 bit bytes + this.packNum = function(num) { + return web3.padLeft(web3.toHex(num).substr(2), 64, "0") + } + + // { "nodes": string, "stakes": string, "staker": address, + // "ecosystem": address, "maintenance": address, "feecollector": address, + // "env": { env variables } } + // getInitialGovernanceMembersAndNodes(json data) + this.getInitialGovernanceMembersAndNodes = function(data) { + var nodes = "0x", stakes = "0x" + + for (var i = 0, l = data.members.length; i < l; i++) { + var m = data.members[i], id + if (m.id.length != 128 && m.id.length != 130) + throw "Invalid enode id " + m.id + id = m.id.length == 128 ? m.id : m.id.substr(2) + if (m.addr) { + if (m.addr.indexOf("0x") == 0) + m.addr = m.addr.substr(2) + if (!m.staker) + m.staker = m.addr + if (!m.voter) + m.voter = m.addr + if (!m.reward) + m.reward = m.addr + } + if (m.staker) { + if (m.staker.indexOf("0x") == 0) + m.staker = m.staker.substr(2) + if (!m.addr) + m.addr = m.staker + if (!m.voter) + m.voter = m.staker + if (!m.reward) + m.reward = m.staker + } + if (!m.addr && !m.staker) + throw "Address & staker are missing" + nodes += web3.padLeft(m.staker, 64, "0") + + web3.padLeft(m.voter, 64, "0") + + web3.padLeft(m.reward, 64, "0") + + this.packNum(m.name.length) + web3.fromAscii(m.name).substr(2) + + this.packNum(id.length/2) + id + + this.packNum(m.ip.length) + web3.fromAscii(m.ip).substr(2) + + this.packNum(m.port) + + stakes += web3.padLeft(m.staker, 64, "0") + + this.packNum(m.stake) + } + return { + "nodes": nodes, + "stakes": stakes, + "staker": data.staker, + "ecosystem": data.ecosystem, + "maintenance": data.maintenance, + "feecollector": data.feecollector, + "env": data.env + } + } + + this.nonce = function() { + return this._nonce++ + } + + // returns transaction hash, or throws error + this.deployContract = function(data) { + var tx = { + from: this.from, + data: data, + gas: this.gas, + gasPrice: this.gasPrice, + nonce: this.nonce() + } + var stx = offlineWalletSignTx(this.wallet.id, tx, eth.chainId()) + return eth.sendRawTransaction(stx) + } + + // wait for transaction receipt for contract address, then + // load a contract + // Contract resolveContract(ABI abi, hash txh) + this.resolveContract = function(abi, txh) { + for (var i = 0; i < this.receiptCheckParams.count; i++ ) { + var r = eth.getTransactionReceipt(txh) + if (r != null && r.contractAddress != null) { + var ctr = web3.eth.contract(abi).at(r.contractAddress) + ctr.transactionHash = txh + return ctr + } + msleep(this.receiptCheckParams.interval) + } + throw "Cannot get contract address for " + txh + } + + // sends a simple or method transaction, returns transaction hash + this.sendTx = function(to, value, data) { + var tx = {from:this.from, to:to, gas:this.gas, + gasPrice:this.gasPrice, nonce:this.nonce()} + if (value) + tx.value = value + if (data) + tx.data = data + var stx = offlineWalletSignTx(this.wallet.id, tx, eth.chainId()) + return eth.sendRawTransaction(stx) + } + + this.checkReceipt = function(tx) { + for (var i = 0; i < this.receiptCheckParams.count; i++ ) { + var r = eth.getTransactionReceipt(tx) + if (r != null) + return web3.toBigNumber(r.status) == 1 + msleep(this.receiptCheckParams.interval) + } + throw "Cannot get a transaction receipt for " + tx + } + + this.sendStakingDeposit = function (to, data, stake) { + var tx = { from: this.from, to: to, gas: this.gas, gasPrice: this.gasPrice, nonce: this.nonce(), value: "0" } + tx.value = stake + if (data) tx.data = data + var stx = offlineWalletSignTx(this.wallet.id, tx, eth.chainId()) + + return eth.sendRawTransaction(stx) + } + + // bool deploy(string walletUrl, string password, string cfg) + this.deploy = function(walletUrl, password, cfg, doInitOnce) { + w = offlineWalletOpen(walletUrl, password) + if (!w || !w.id || !w.address) { + throw "Offline wallet is not loaded" + } + this.wallet = w + this.from = this.wallet.address + this._nonce = eth.getTransactionCount(this.from, 'pending') + + var data + if (!(data = loadFile(cfg))) + throw "cannot load governance contract .js or config .json file" + + // check if contracts exist + var contractNames = [ "Registry", "EnvStorageImp", "Staking", "StakingImp", + "BallotStorage", "EnvStorage", "GovImp", "Gov" ] + for (var i in contractNames) { + var cn = contractNames[i] + if (eval("typeof " + cn + "_data") == "undefined" || + eval("typeof " + cn + "_contract") == "undefined") + throw cn + " not found" + } + + // check config.js + eval("var data = " + data) + this.verifyCfg(data) + + // initial members and nodes data + var initData = this.getInitialGovernanceMembersAndNodes(data) + + // bootnode + var bootNode = { + "name": web3.fromAscii(data.members[0].name), + "id": data.members[0].id, + "ip": web3.fromAscii(data.members[0].ip), + "port": data.members[0].port, + "stake": data.members[0].stake + } + + // contacts, transactions to be deployed + var registry, envStorageImp, staking, stakingImp, ballotStorage, envStorage, govImp, gov + var txs = new Array() + + // 1. deploy Registry and EnvStorageImp contracts + this.log("Deploying Registry and EnvStorageImp...") + registry = this.deployContract(Registry_data) + envStorageImp = this.deployContract(EnvStorageImp_data) + stakingImp = this.deployContract(StakingImp_data) + + this.log("Waiting for receipts...") + envStorageImp = this.resolveContract(EnvStorageImp_contract.abi, envStorageImp) + registry = this.resolveContract(Registry_contract.abi, registry) + stakingImp = this.resolveContract(StakingImp_contract.abi, stakingImp); + + // 2. deploy Staking, BallotStorage, EnvStorage, GovImp, Gov + this.log("Deploying Staking, BallotStorage, EnvStorage, GovImp & Gov...") + var code = Staking_contract.getData(stakingImp.address, {data: Staking_data}) + staking = this.deployContract(code) + var code = BallotStorage_contract.getData(registry.address, {data: BallotStorage_data}) + ballotStorage = this.deployContract(code) + code = EnvStorage_contract.getData(envStorageImp.address, {data: EnvStorage_data}) + envStorage = this.deployContract(code) + govImp = this.deployContract(GovImp_data) + + this.log("Waiting for receipts...") + govImp = this.resolveContract(GovImp_contract.abi, govImp) + code = Gov_contract.getData(govImp.address, { data: Gov_data }) + gov = this.deployContract(code) + + this.log("Waiting for gov contract...") + gov = this.resolveContract(Gov_contract.abi, gov) + envStorage = this.resolveContract(EnvStorage_contract.abi, envStorage) + ballotStorage = this.resolveContract(BallotStorage_contract.abi, ballotStorage) + staking = this.resolveContract(Staking_contract.abi, staking) + + // 3. setup registry + this.log("Setting registry...") + txs.length = 0 + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "Staking", staking.address)) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "BallotStorage", ballotStorage.address)) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "EnvStorage", envStorage.address)) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "GovernanceContract", gov.address)) + if (initData.staker) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "StakingReward", initData.staker)) + if (initData.ecosystem) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "Ecosystem", initData.ecosystem)) + if (initData.maintenance) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "Maintenance", initData.maintenance)) + if (initData.feecollector) + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "FeeCollector", initData.feecollector)) + + // no need to wait for the receipts for the above + + // 4. initialize environment storage data: + this.log("Initializing environment storage...") + data.env = data.env || {} + // Just changing address doesn't work here. Address is embedded in + // the methods. Have to re-construct temporary EnvStorageImp here. + var tmpEnvStorageImp = web3.eth.contract(envStorageImp.abi).at(envStorage.address) + var envNames = [ + web3.sha3("blocksPer"), + web3.sha3("ballotDurationMin"), web3.sha3("ballotDurationMax"), + web3.sha3("stakingMin"), web3.sha3("stakingMax"), + web3.sha3("MaxIdleBlockInterval"), + web3.sha3("blockCreationTime"), + web3.sha3("blockRewardAmount"), + web3.sha3("maxPriorityFeePerGas"), + web3.sha3("blockRewardDistributionBlockProducer"), + web3.sha3("blockRewardDistributionStakingReward"), + web3.sha3("blockRewardDistributionEcosystem"), + web3.sha3("blockRewardDistributionMaintenance"), + web3.sha3("maxBaseFee"), + web3.sha3("blockGasLimit"), + web3.sha3("baseFeeMaxChangeRate"), + web3.sha3("gasTargetPercentage") ] + var rewardDistributionMethod = data.env.rewardDistributionMethod || [ 4000, 1000, 2500, 2500 ] + var envValues = [ + 1, + data.env.ballotDurationMin || 86400, + data.env.ballotDurationMax || 604800, + data.env.stakingMin || 1500000000000000000000000, + data.env.stakingMax || 1500000000000000000000000, + data.env.MaxIdleBlockInterval || 5, + data.env.blockCreationTime || 1000, + // mint amount: 1 wemix + data.env.blockRewardAmount || web3.toWei(1, 'ether'), + // tip: 100 gwei + data.env.maxPriorityFeePerGas || web3.toWei(100, 'gwei'), + // NCPs, WEMIX Staker, Eco System, Maintenance + rewardDistributionMethod[0], + rewardDistributionMethod[1], + rewardDistributionMethod[2], + rewardDistributionMethod[3], + // maxBaseFee * 21000 -> 1.05 wemix + data.env.maxBaseFee || web3.toWei(50000, 'gwei'), + data.env.blockGasLimit || 5000 * 21000, + data.env.baseFeeMaxChangeRate || 55, + data.env.gasTargetPercentage || 30 ] + txs[txs.length] = this.sendTx(envStorage.address, null, + tmpEnvStorageImp.initialize.getData(registry.address, envNames, envValues)) + + // 5. deposit staking + var tmpStakingImp = web3.eth.contract(stakingImp.abi).at(staking.address) + code = tmpStakingImp.init.getData(registry.address, + doInitOnce ? initData.stakes : "", {data: Staking_data}) + txs[txs.length] = this.sendTx(staking.address, null, code); + txs[txs.length] = this.sendStakingDeposit(staking.address, tmpStakingImp.deposit.getData(), web3.toBigNumber(bootNode.stake).toString(10)); + for(i=0;i $d/.rc wait } -# void init_gov(String node, String config_json, String account_file, Number gov_lock_amount (wei) ) +# void init_gov(String node, String config_json, String account_file, bool doInitOnce) # account_file can be # 1. keystore file: "" # 2. nano ledger: "ledger:" @@ -77,16 +77,10 @@ function init_gov () NODE="$1" CONFIG="$2" ACCT="$3" - PASSWORD="$4" - LOCKAMOUNT="$5" + [ "$4" = "0" ] && INIT_ONCE=false || INIT_ONCE=true if [ ! -f "$CONFIG" ]; then - echo "Cannot find config file: $CONFIG" - return 1 - fi - - if [ ! -f "$ACCT" ]; then - echo "Cannot find account file: $ACCT" + echo "Cannot find config file: $2" return 1 fi @@ -98,13 +92,15 @@ function init_gov () return 1 fi - if [ -z "$PASSWORD" ]; then - exec ${GWEMIX} wemix deploy-governance --url "$d/gwemix.ipc" ${CONFIG} ${ACCT} ${LOCKAMOUNT} - elif [ -f "$PASSWORD" ]; then - exec ${GWEMIX} wemix deploy-governance --url "$d/gwemix.ipc" --password ${PASSWORD} ${CONFIG} ${ACCT} ${LOCKAMOUNT} - else - exec ${GWEMIX} wemix deploy-governance --url "$d/gwemix.ipc" --password <(echo ${PASSWORD}) ${CONFIG} ${ACCT} ${LOCKAMOUNT} + if [ ! -f "${d}/conf/WemixGovernance.js" ]; then + echo "Cannot find ${d}/conf/WemixGovernance.js" + return 1 fi + + PORT=$(grep PORT ${d}/.rc | sed -e 's/PORT=//') + [ "$PORT" = "" ] && PORT=8588 + + exec ${GWEMIX} attach http://localhost:${PORT} --preload "$d/conf/WemixGovernance.js,$d/conf/deploy-governance.js" --exec 'GovernanceDeployer.deploy("'${ACCT}'", "", "'${CONFIG}'", '${INIT_ONCE}')' } function wipe () @@ -237,7 +233,7 @@ case "$1" in if [ $# -lt 4 ]; then usage; else - init_gov "$2" "$3" "$4" "$5" "$6" + init_gov "$2" "$3" "$4" "$5" fi ;; diff --git a/wemix/scripts/solc.sh b/wemix/scripts/solc.sh new file mode 100755 index 000000000000..2e3cc16c50b1 --- /dev/null +++ b/wemix/scripts/solc.sh @@ -0,0 +1,188 @@ +#!/bin/bash + +[ "${SOL_GAS}" = "" ] && SOL_GAS="0x10000000" + +SOLC= +solc --version > /dev/null 2>&1 +if [ $? = 0 ]; then + SOLC=solc +else +# docker --version > /dev/null 2>&1 && SOLC="docker run -v $(pwd):/tmp --workdir /tmp --rm ethereum/solc:stable" + docker --version > /dev/null 2>&1 && SOLC="docker run -v $(pwd):/tmp --workdir /tmp --rm ethereum/solc:0.4.24" +fi + +if [ "$SOLC" = "" ]; then + echo "Cannot find solc or docker." + exit 1 +fi + +function usage () +{ + echo "$(basename $0) [-f ] [-g gas] [-p gas-price] [-l :]+ + [ | ] + +-f : oupput format: \"js\" || \"json\", default is \"js\". +-g : gas amount to spend. +-p : gas price +-l :: library name and address pair separated by ':'. + Multiple -l options can be used to specify multiple libraries. +-r =: remap paths, e.g. \"wherever=/foo/bar\" + +Output Formats: + \"js\": creates 'remix'-generated .js style file that can be loaded to + geth/gmet console. + \"json\": creates 'truffle'-generated .json style file. + +Environment Variables: + SOL_GAS for gas amount, equivalent to -g option. + SOL_LIBS for libaries, equivalent to -l option. Pairs should be separated by + space, e.g. \"name1:0x123..456 name2:abc..def\". +" +} + +# int compile(string solFile, string jsFile) +function compile () +{ + ${SOLC} ${PATH_REMAP} --optimize --abi --bin $1 | awk -v gas="$SOL_GAS" -v gas_price="$SOL_GASPRICE" -v libs="$SOL_LIBS" -v outfmt=$outfmt ' +function flush2js() { + if (length(gas_price) != 0) { + gas_price_2 = ",\ + gasPrice: \"" gas_price "\""; + } + if (length(code_name) > 0) { + printf "\n\ +function %s_new() {\n\ + return %s_contract.new(\n\ + {\n\ + from: web3.eth.accounts[0],\n\ + data: %s_data,\n\ + gas: \"%s\"%s\n\ + }, function (e, contract) {\n\ + if (typeof contract.address !== \"undefined\") {\n\ + console.log(\"Contract mined! address: \" + contract.address + \" transactionHash: \" + contract.transactionHash);\n\ + }\n\ + });\n\ +}\n\ +\n\ +function %s_load(addr) {\n\ + return %s_contract.at(addr);\n\ +}\n\ +", code_name, code_name, code_name, gas, gas_price_2, code_name, code_name; + } +} + +function flush2json() { + if (length(code_name) > 0) { + printf "{\n\ + \"contractName\": \"%s\",\n\ + \"abi\": %s,\n\ + \"bytecode\": \"0x%s\"\n\ +}\n\ +", code_name, abi, code; + } +} + +function flush2abi() { + if (length(code_name) > 0) { + printf "{\n\ + \"contractName\": \"%s\",\n\ + \"abi\": %s\n\ +}\n\ +", code_name, abi, code; + } +} + +function flush() { + if (outfmt == "js") + flush2js(); + else if (outfmt == "json") + flush2json(); + else + flush2abi(); +} + +END { + flush() +} + +/^$/ { + flush() + code_name = "" +} + +/^=======/ { + code_name = $0 + sub("^=.*:", "", code_name) + sub(" =======$", "", code_name) +} + +# abi +/^\[/ { + if (length(code_name) > 0) { + abi = $0 + if (outfmt == "js") + print "var " code_name "_contract = web3.eth.contract(" abi ");"; + } +} + +# binary: 60606040, 60806040 for contracts, 610eb861 for libraries +/^6[01]/ { + if (length(code_name) > 0) { + code = $0; + n = split(libs, alibs, " +"); + for (i = 1; i <= n; i++) { + if (split(alibs[i], nv, ":") != 2) + continue; + sub("^0x", "", nv[2]); + gsub("_+[^_]*" nv[1] "_+", nv[2], code); + } + if (outfmt == "js") + print "var " code_name "_data = \"0x" code "\";"; + } +} +' > $2; +} + +args=`getopt f:g:l:p:r: $*` +if [ $? != 0 ]; then + usage; + exit 1; +fi +set -- $args + +outfmt=js +for i; do + case "$i" in + -f) + outfmt=$2 + shift; + shift;; + -g) + SOL_GAS=$2 + shift; + shift;; + -p) + SOL_GASPRICE=$2 + shift; + shift;; + -l) + [ "$SOL_LIBS" = "" ] || SOL_LIBS="$SOL_LIBS " + SOL_LIBS="${SOL_LIBS}$2"; + shift; + shift;; + -r) + [ "$PATH_REMAP" = "" ] || PATH_REMAP="$PATH_REMAP " + PATH_REMAP="${PATH_REMAP}$2"; + shift; + shift;; + esac +done + +if [ $# != 3 -o "$outfmt" != "js" -a "$outfmt" != "json" -a "$outfmt" != "abi" ]; then + usage + exit 1 +fi + +compile "$2" "$3" + +# EOF diff --git a/wemix/sync.go b/wemix/sync.go index 5032f38f65fa..75a8e7fcd1ab 100644 --- a/wemix/sync.go +++ b/wemix/sync.go @@ -3,6 +3,7 @@ package wemix import ( + "bytes" "context" "encoding/json" "fmt" @@ -323,7 +324,7 @@ func syncCheck() error { } // if we're in sync, nothing we can do - if work != nil && work.Height == header.Number.Int64() && work.Hash == header.Hash() { + if work != nil && work.Height == header.Number.Int64() && bytes.Equal(work.Hash.Bytes(), header.Hash().Bytes()) { log.Debug("sync check: in sync", "height", work.Height, "hash", work.Hash) return err } @@ -354,7 +355,7 @@ func syncCheck() error { if state.LatestBlockHeight == nil { continue } - if state.LatestBlockHeight.Int64() == work.Height && work.Hash == state.LatestBlockHash { + if state.LatestBlockHeight.Int64() == work.Height && bytes.Equal(work.Hash.Bytes(), state.LatestBlockHash.Bytes()) { exists = true break }