mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-18 19:00:46 +00:00
Merge branch 'master' into p2p-discover-whoareyou-resend-2
This commit is contained in:
commit
6331ef7e37
892 changed files with 99760 additions and 31381 deletions
27
.gitea/workflows/release-azure-cleanup.yml
Normal file
27
.gitea/workflows/release-azure-cleanup.yml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
### Note we cannot use cron-triggered builds right now, Gitea seems to have
|
||||
### a few bugs in that area. So this workflow is scheduled using an external
|
||||
### triggering mechanism and workflow_dispatch.
|
||||
#
|
||||
# schedule:
|
||||
# - cron: '0 15 * * *'
|
||||
|
||||
jobs:
|
||||
azure-cleanup:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
- name: Run cleanup script
|
||||
run: |
|
||||
go run build/ci.go purge -store gethstore/builds -days 14
|
||||
env:
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
46
.gitea/workflows/release-ppa.yml
Normal file
46
.gitea/workflows/release-ppa.yml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
workflow_dispatch:
|
||||
|
||||
### Note we cannot use cron-triggered builds right now, Gitea seems to have
|
||||
### a few bugs in that area. So this workflow is scheduled using an external
|
||||
### triggering mechanism and workflow_dispatch.
|
||||
#
|
||||
# schedule:
|
||||
# - cron: '0 16 * * *'
|
||||
|
||||
|
||||
jobs:
|
||||
ppa:
|
||||
name: PPA Upload
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Show environment
|
||||
run: |
|
||||
env
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
- name: Install deb toolchain
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get -yq --no-install-suggests --no-install-recommends install devscripts debhelper dput fakeroot
|
||||
|
||||
- name: Add launchpad to known_hosts
|
||||
run: |
|
||||
echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Run ci.go
|
||||
run: |
|
||||
go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder <geth-ci@ethereum.org>"
|
||||
env:
|
||||
PPA_SIGNING_KEY: ${{ secrets.PPA_SIGNING_KEY }}
|
||||
PPA_SSH_KEY: ${{ secrets.PPA_SSH_KEY }}
|
||||
200
.gitea/workflows/release.yml
Normal file
200
.gitea/workflows/release.yml
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- "master"
|
||||
tags:
|
||||
- "v*"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
linux-intel:
|
||||
name: Linux Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
- name: Install cross toolchain
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib
|
||||
|
||||
- name: Build (amd64)
|
||||
run: |
|
||||
go run build/ci.go install -static -arch amd64 -dlgo
|
||||
|
||||
- name: Create/upload archive (amd64)
|
||||
run: |
|
||||
go run build/ci.go archive -arch amd64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds
|
||||
rm -f build/bin/*
|
||||
env:
|
||||
LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
|
||||
- name: Build (386)
|
||||
run: |
|
||||
go run build/ci.go install -static -arch 386 -dlgo
|
||||
|
||||
- name: Create/upload archive (386)
|
||||
run: |
|
||||
go run build/ci.go archive -arch 386 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds
|
||||
rm -f build/bin/*
|
||||
env:
|
||||
LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
|
||||
linux-arm:
|
||||
name: Linux Build (arm)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
- name: Install cross toolchain
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get -yq --no-install-suggests --no-install-recommends install gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-arm-linux-gnueabihf libc6-dev-armhf-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
||||
ln -s /usr/include/asm-generic /usr/include/asm
|
||||
|
||||
- name: Build (arm64)
|
||||
run: |
|
||||
go run build/ci.go install -static -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc
|
||||
|
||||
- name: Create/upload archive (arm64)
|
||||
run: |
|
||||
go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds
|
||||
rm -fr build/bin/*
|
||||
env:
|
||||
LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
|
||||
- name: Run build (arm5)
|
||||
run: |
|
||||
go run build/ci.go install -static -dlgo -arch arm -cc arm-linux-gnueabi-gcc
|
||||
env:
|
||||
GOARM: "5"
|
||||
|
||||
- name: Create/upload archive (arm5)
|
||||
run: |
|
||||
go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds
|
||||
env:
|
||||
GOARM: "5"
|
||||
LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
|
||||
- name: Run build (arm6)
|
||||
run: |
|
||||
go run build/ci.go install -static -dlgo -arch arm -cc arm-linux-gnueabi-gcc
|
||||
env:
|
||||
GOARM: "6"
|
||||
|
||||
- name: Create/upload archive (arm6)
|
||||
run: |
|
||||
go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds
|
||||
rm -fr build/bin/*
|
||||
env:
|
||||
GOARM: "6"
|
||||
LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
|
||||
- name: Run build (arm7)
|
||||
run: |
|
||||
go run build/ci.go install -static -dlgo -arch arm -cc arm-linux-gnueabi-gcc
|
||||
env:
|
||||
GOARM: "7"
|
||||
|
||||
- name: Create/upload archive (arm7)
|
||||
run: |
|
||||
go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds
|
||||
rm -fr build/bin/*
|
||||
env:
|
||||
GOARM: "7"
|
||||
LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }}
|
||||
AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
|
||||
|
||||
keeper:
|
||||
name: Keeper Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
- name: Install cross toolchain
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib
|
||||
|
||||
- name: Build (amd64)
|
||||
run: |
|
||||
go run build/ci.go keeper -dlgo
|
||||
|
||||
windows:
|
||||
name: Windows Build
|
||||
runs-on: "win-11"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
# Note: gcc.exe only works properly if the corresponding bin/ directory is
|
||||
# contained in PATH.
|
||||
|
||||
- name: "Build (amd64)"
|
||||
shell: cmd
|
||||
run: |
|
||||
set PATH=%GETH_MINGW%\bin;%PATH%
|
||||
go run build/ci.go install -dlgo -arch amd64 -cc %GETH_MINGW%\bin\gcc.exe
|
||||
env:
|
||||
GETH_MINGW: 'C:\msys64\mingw64'
|
||||
|
||||
- name: "Build (386)"
|
||||
shell: cmd
|
||||
run: |
|
||||
set PATH=%GETH_MINGW%\bin;%PATH%
|
||||
go run build/ci.go install -dlgo -arch 386 -cc %GETH_MINGW%\bin\gcc.exe
|
||||
env:
|
||||
GETH_MINGW: 'C:\msys64\mingw32'
|
||||
|
||||
docker:
|
||||
name: Docker Image
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24
|
||||
cache: false
|
||||
|
||||
- name: Run docker build
|
||||
env:
|
||||
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
|
||||
run: |
|
||||
go run build/ci.go dockerx -platform linux/amd64,linux/arm64,linux/riscv64 -upload
|
||||
21
.github/CODEOWNERS
vendored
21
.github/CODEOWNERS
vendored
|
|
@ -9,28 +9,25 @@ beacon/light/ @zsfelfoldi
|
|||
beacon/merkle/ @zsfelfoldi
|
||||
beacon/types/ @zsfelfoldi @fjl
|
||||
beacon/params/ @zsfelfoldi @fjl
|
||||
cmd/clef/ @holiman
|
||||
cmd/evm/ @holiman @MariusVanDerWijden @lightclient
|
||||
core/state/ @rjl493456442 @holiman
|
||||
crypto/ @gballet @jwasinger @holiman @fjl
|
||||
core/ @holiman @rjl493456442
|
||||
eth/ @holiman @rjl493456442
|
||||
cmd/evm/ @MariusVanDerWijden @lightclient
|
||||
core/state/ @rjl493456442
|
||||
crypto/ @gballet @jwasinger @fjl
|
||||
core/ @rjl493456442
|
||||
eth/ @rjl493456442
|
||||
eth/catalyst/ @MariusVanDerWijden @lightclient @fjl @jwasinger
|
||||
eth/tracers/ @s1na
|
||||
ethclient/ @fjl
|
||||
ethdb/ @rjl493456442
|
||||
event/ @fjl
|
||||
trie/ @rjl493456442
|
||||
trie/ @rjl493456442 @gballet
|
||||
triedb/ @rjl493456442
|
||||
core/tracing/ @s1na
|
||||
graphql/ @s1na
|
||||
internal/ethapi/ @fjl @s1na @lightclient
|
||||
internal/era/ @lightclient
|
||||
metrics/ @holiman
|
||||
miner/ @MariusVanDerWijden @holiman @fjl @rjl493456442
|
||||
miner/ @MariusVanDerWijden @fjl @rjl493456442
|
||||
node/ @fjl
|
||||
p2p/ @fjl @zsfelfoldi
|
||||
rlp/ @fjl
|
||||
params/ @fjl @holiman @karalabe @gballet @rjl493456442 @zsfelfoldi
|
||||
rpc/ @fjl @holiman
|
||||
signer/ @holiman
|
||||
params/ @fjl @gballet @rjl493456442 @zsfelfoldi
|
||||
rpc/ @fjl
|
||||
|
|
|
|||
77
.github/workflows/go.yml
vendored
77
.github/workflows/go.yml
vendored
|
|
@ -1,18 +1,20 @@
|
|||
name: i386 linux tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: self-hosted
|
||||
runs-on: [self-hosted-ghr, size-s-x64]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: false
|
||||
|
||||
# Cache build tools to avoid downloading them each time
|
||||
- uses: actions/cache@v4
|
||||
|
|
@ -23,7 +25,7 @@ jobs:
|
|||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.23.0
|
||||
go-version: 1.25
|
||||
cache: false
|
||||
|
||||
- name: Run linters
|
||||
|
|
@ -32,17 +34,66 @@ jobs:
|
|||
go run build/ci.go check_generate
|
||||
go run build/ci.go check_baddeps
|
||||
|
||||
build:
|
||||
runs-on: self-hosted
|
||||
keeper:
|
||||
name: Keeper Builds
|
||||
needs: test
|
||||
runs-on: [self-hosted-ghr, size-l-x64]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.24.0
|
||||
go-version: '1.25'
|
||||
cache: false
|
||||
|
||||
- name: Build
|
||||
run: go run build/ci.go keeper
|
||||
|
||||
test-32bit:
|
||||
name: "32bit tests"
|
||||
needs: test
|
||||
runs-on: [self-hosted-ghr, size-l-x64]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: false
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.25'
|
||||
cache: false
|
||||
|
||||
- name: Install cross toolchain
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib
|
||||
|
||||
- name: Build
|
||||
run: go run build/ci.go test -arch 386 -short -p 8
|
||||
|
||||
test:
|
||||
name: Test
|
||||
needs: lint
|
||||
runs-on: [self-hosted-ghr, size-l-x64]
|
||||
strategy:
|
||||
matrix:
|
||||
go:
|
||||
- '1.25'
|
||||
- '1.24'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go }}
|
||||
cache: false
|
||||
|
||||
- name: Run tests
|
||||
run: go test -short ./...
|
||||
env:
|
||||
GOOS: linux
|
||||
GOARCH: 386
|
||||
run: go run build/ci.go test -p 8
|
||||
|
|
|
|||
83
.github/workflows/validate_pr.yml
vendored
Normal file
83
.github/workflows/validate_pr.yml
vendored
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
name: PR Format Validation
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, edited, synchronize]
|
||||
|
||||
jobs:
|
||||
validate-pr:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check for Spam PR
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const prTitle = context.payload.pull_request.title;
|
||||
const spamRegex = /^(feat|chore|fix)(\(.*\))?\s*:/i;
|
||||
|
||||
if (spamRegex.test(prTitle)) {
|
||||
// Leave a comment explaining why
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.payload.pull_request.number,
|
||||
body: `## PR Closed as Spam
|
||||
|
||||
This PR was automatically closed because the title format \`feat:\`, \`fix:\`, or \`chore:\` is commonly associated with spam contributions.
|
||||
|
||||
If this is a legitimate contribution, please:
|
||||
1. Review our contribution guidelines
|
||||
2. Use the correct PR title format: \`directory, ...: description\`
|
||||
3. Open a new PR with the proper title format
|
||||
|
||||
Thank you for your understanding.`
|
||||
});
|
||||
|
||||
// Close the PR
|
||||
await github.rest.pulls.update({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.payload.pull_request.number,
|
||||
state: 'closed'
|
||||
});
|
||||
|
||||
core.setFailed('PR closed as spam due to suspicious title format');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('✅ PR passed spam check');
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Check PR Title Format
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const prTitle = context.payload.pull_request.title;
|
||||
const titleRegex = /^([\w\s,{}/.]+): .+/;
|
||||
|
||||
if (!titleRegex.test(prTitle)) {
|
||||
core.setFailed(`PR title "${prTitle}" does not match required format: directory, ...: description`);
|
||||
return;
|
||||
}
|
||||
|
||||
const match = prTitle.match(titleRegex);
|
||||
const dirPart = match[1];
|
||||
const directories = dirPart.split(',').map(d => d.trim());
|
||||
const missingDirs = [];
|
||||
for (const dir of directories) {
|
||||
const fullPath = path.join(process.env.GITHUB_WORKSPACE, dir);
|
||||
if (!fs.existsSync(fullPath)) {
|
||||
missingDirs.push(dir);
|
||||
}
|
||||
}
|
||||
|
||||
if (missingDirs.length > 0) {
|
||||
core.setFailed(`The following directories in the PR title do not exist: ${missingDirs.join(', ')}`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('✅ PR title format is valid');
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -55,4 +55,5 @@ cmd/ethkey/ethkey
|
|||
cmd/evm/evm
|
||||
cmd/geth/geth
|
||||
cmd/rlpdump/rlpdump
|
||||
cmd/workload/workload
|
||||
cmd/workload/workload
|
||||
cmd/keeper/keeper
|
||||
|
|
|
|||
131
.golangci.yml
131
.golangci.yml
|
|
@ -1,31 +1,25 @@
|
|||
# This file configures github.com/golangci/golangci-lint.
|
||||
|
||||
version: '2'
|
||||
run:
|
||||
timeout: 20m
|
||||
tests: true
|
||||
|
||||
linters:
|
||||
disable-all: true
|
||||
default: none
|
||||
enable:
|
||||
- goimports
|
||||
- gosimple
|
||||
- govet
|
||||
- ineffassign
|
||||
- misspell
|
||||
- unconvert
|
||||
- typecheck
|
||||
- unused
|
||||
- staticcheck
|
||||
- bidichk
|
||||
- durationcheck
|
||||
- copyloopvar
|
||||
- whitespace
|
||||
- revive # only certain checks enabled
|
||||
- durationcheck
|
||||
- gocheckcompilerdirectives
|
||||
- reassign
|
||||
- govet
|
||||
- ineffassign
|
||||
- mirror
|
||||
- misspell
|
||||
- reassign
|
||||
- revive # only certain checks enabled
|
||||
- staticcheck
|
||||
- unconvert
|
||||
- unused
|
||||
- usetesting
|
||||
- whitespace
|
||||
### linters we tried and will not be using:
|
||||
###
|
||||
# - structcheck # lots of false positives
|
||||
|
|
@ -36,44 +30,67 @@ linters:
|
|||
# - exhaustive # silly check
|
||||
# - makezero # false positives
|
||||
# - nilerr # several intentional
|
||||
|
||||
linters-settings:
|
||||
gofmt:
|
||||
simplify: true
|
||||
revive:
|
||||
enable-all-rules: false
|
||||
# here we enable specific useful rules
|
||||
# see https://golangci-lint.run/usage/linters/#revive for supported rules
|
||||
settings:
|
||||
staticcheck:
|
||||
checks:
|
||||
# disable Quickfixes
|
||||
- -QF1*
|
||||
revive:
|
||||
enable-all-rules: false
|
||||
# here we enable specific useful rules
|
||||
# see https://golangci-lint.run/usage/linters/#revive for supported rules
|
||||
rules:
|
||||
- name: receiver-naming
|
||||
severity: warning
|
||||
disabled: false
|
||||
exclude:
|
||||
- ''
|
||||
exclusions:
|
||||
generated: lax
|
||||
presets:
|
||||
- comments
|
||||
- common-false-positives
|
||||
- legacy
|
||||
- std-error-handling
|
||||
rules:
|
||||
- name: receiver-naming
|
||||
severity: warning
|
||||
disabled: false
|
||||
exclude: [""]
|
||||
|
||||
issues:
|
||||
# default is true. Enables skipping of directories:
|
||||
# vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
|
||||
exclude-dirs-use-default: true
|
||||
exclude-files:
|
||||
- core/genesis_alloc.go
|
||||
exclude-rules:
|
||||
- path: crypto/bn256/cloudflare/optate.go
|
||||
linters:
|
||||
- deadcode
|
||||
- staticcheck
|
||||
- path: crypto/bn256/
|
||||
linters:
|
||||
- revive
|
||||
- path: cmd/utils/flags.go
|
||||
text: "SA1019: cfg.TxLookupLimit is deprecated: use 'TransactionHistory' instead."
|
||||
- path: cmd/utils/flags.go
|
||||
text: "SA1019: ethconfig.Defaults.TxLookupLimit is deprecated: use 'TransactionHistory' instead."
|
||||
- path: internal/build/pgp.go
|
||||
text: 'SA1019: "golang.org/x/crypto/openpgp" is deprecated: this package is unmaintained except for security fixes.'
|
||||
- path: core/vm/contracts.go
|
||||
text: 'SA1019: "golang.org/x/crypto/ripemd160" is deprecated: RIPEMD-160 is a legacy hash and should not be used for new applications.'
|
||||
exclude:
|
||||
- 'SA1019: event.TypeMux is deprecated: use Feed'
|
||||
- 'SA1019: strings.Title is deprecated'
|
||||
- 'SA1019: strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly. Use golang.org/x/text/cases instead.'
|
||||
- 'SA1029: should not use built-in type string as key for value'
|
||||
- linters:
|
||||
- deadcode
|
||||
- staticcheck
|
||||
path: crypto/bn256/cloudflare/optate.go
|
||||
- linters:
|
||||
- revive
|
||||
path: crypto/bn256/
|
||||
- path: cmd/utils/flags.go
|
||||
text: "SA1019: cfg.TxLookupLimit is deprecated: use 'TransactionHistory' instead."
|
||||
- path: cmd/utils/flags.go
|
||||
text: "SA1019: ethconfig.Defaults.TxLookupLimit is deprecated: use 'TransactionHistory' instead."
|
||||
- path: internal/build/pgp.go
|
||||
text: 'SA1019: "golang.org/x/crypto/openpgp" is deprecated: this package is unmaintained except for security fixes.'
|
||||
- path: core/vm/contracts.go
|
||||
text: 'SA1019: "golang.org/x/crypto/ripemd160" is deprecated: RIPEMD-160 is a legacy hash and should not be used for new applications.'
|
||||
- path: (.+)\.go$
|
||||
text: 'SA1019: event.TypeMux is deprecated: use Feed'
|
||||
- path: (.+)\.go$
|
||||
text: 'SA1019: strings.Title is deprecated'
|
||||
- path: (.+)\.go$
|
||||
text: 'SA1019: strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly. Use golang.org/x/text/cases instead.'
|
||||
- path: (.+)\.go$
|
||||
text: 'SA1029: should not use built-in type string as key for value'
|
||||
paths:
|
||||
- core/genesis_alloc.go
|
||||
- third_party$
|
||||
- builtin$
|
||||
- examples$
|
||||
formatters:
|
||||
enable:
|
||||
- goimports
|
||||
settings:
|
||||
gofmt:
|
||||
simplify: true
|
||||
exclusions:
|
||||
generated: lax
|
||||
paths:
|
||||
- core/genesis_alloc.go
|
||||
- third_party$
|
||||
- builtin$
|
||||
- examples$
|
||||
|
|
|
|||
7
.mailmap
7
.mailmap
|
|
@ -50,6 +50,10 @@ Boqin Qin <bobbqqin@bupt.edu.cn> <Bobbqqin@gmail.com>
|
|||
|
||||
Casey Detrio <cdetrio@gmail.com>
|
||||
|
||||
Charlotte <tqpcharlie@proton.me>
|
||||
Charlotte <tqpcharlie@proton.me> <Zachinquarantine@protonmail.com>
|
||||
Charlotte <tqpcharlie@proton.me> <zachinquarantine@yahoo.com>
|
||||
|
||||
Cheng Li <lob4tt@gmail.com>
|
||||
|
||||
Chris Ziogas <ziogaschr@gmail.com>
|
||||
|
|
@ -301,9 +305,6 @@ Yohann Léon <sybiload@gmail.com>
|
|||
yzb <335357057@qq.com>
|
||||
yzb <335357057@qq.com> <flyingyzb@gmail.com>
|
||||
|
||||
Zachinquarantine <Zachinquarantine@protonmail.com>
|
||||
Zachinquarantine <Zachinquarantine@protonmail.com> <zachinquarantine@yahoo.com>
|
||||
|
||||
Ziyuan Zhong <zzy.albert@163.com>
|
||||
|
||||
Zsolt Felföldi <zsfelfoldi@gmail.com>
|
||||
|
|
|
|||
115
.travis.yml
115
.travis.yml
|
|
@ -1,115 +0,0 @@
|
|||
language: go
|
||||
go_import_path: github.com/ethereum/go-ethereum
|
||||
sudo: false
|
||||
jobs:
|
||||
include:
|
||||
# This builder create and push the Docker images for all architectures
|
||||
- stage: build
|
||||
if: type = push
|
||||
os: linux
|
||||
arch: amd64
|
||||
dist: focal
|
||||
go: 1.24.x
|
||||
env:
|
||||
- docker
|
||||
services:
|
||||
- docker
|
||||
git:
|
||||
submodules: false # avoid cloning ethereum/tests
|
||||
before_install:
|
||||
- export DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
script:
|
||||
- go run build/ci.go dockerx -platform "linux/amd64,linux/arm64,linux/riscv64" -hub ethereum/client-go -upload
|
||||
|
||||
# This builder does the Linux Azure uploads
|
||||
- stage: build
|
||||
if: type = push
|
||||
os: linux
|
||||
dist: focal
|
||||
sudo: required
|
||||
go: 1.24.x
|
||||
env:
|
||||
- azure-linux
|
||||
git:
|
||||
submodules: false # avoid cloning ethereum/tests
|
||||
script:
|
||||
# build amd64
|
||||
- go run build/ci.go install -dlgo
|
||||
- go run build/ci.go archive -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
|
||||
|
||||
# build 386
|
||||
- sudo -E apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib
|
||||
- git status --porcelain
|
||||
- go run build/ci.go install -dlgo -arch 386
|
||||
- go run build/ci.go archive -arch 386 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
|
||||
|
||||
# Switch over GCC to cross compilation (breaks 386, hence why do it here only)
|
||||
- sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-arm-linux-gnueabihf libc6-dev-armhf-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
||||
- sudo ln -s /usr/include/asm-generic /usr/include/asm
|
||||
|
||||
- GOARM=5 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc
|
||||
- GOARM=5 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
|
||||
- GOARM=6 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc
|
||||
- GOARM=6 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
|
||||
- GOARM=7 go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabihf-gcc
|
||||
- GOARM=7 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
|
||||
- go run build/ci.go install -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc
|
||||
- go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
|
||||
|
||||
# These builders run the tests
|
||||
- stage: build
|
||||
if: type = push
|
||||
os: linux
|
||||
arch: amd64
|
||||
dist: focal
|
||||
go: 1.24.x
|
||||
script:
|
||||
- travis_wait 45 go run build/ci.go test $TEST_PACKAGES
|
||||
|
||||
- stage: build
|
||||
if: type = push
|
||||
os: linux
|
||||
dist: focal
|
||||
go: 1.23.x
|
||||
script:
|
||||
- travis_wait 45 go run build/ci.go test $TEST_PACKAGES
|
||||
|
||||
# This builder does the Ubuntu PPA nightly uploads
|
||||
- stage: build
|
||||
if: type = cron || (type = push && tag ~= /^v[0-9]/)
|
||||
os: linux
|
||||
dist: focal
|
||||
go: 1.24.x
|
||||
env:
|
||||
- ubuntu-ppa
|
||||
git:
|
||||
submodules: false # avoid cloning ethereum/tests
|
||||
before_install:
|
||||
- sudo -E apt-get -yq --no-install-suggests --no-install-recommends install devscripts debhelper dput fakeroot
|
||||
script:
|
||||
- echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts
|
||||
- go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder <geth-ci@ethereum.org>"
|
||||
|
||||
# This builder does the Azure archive purges to avoid accumulating junk
|
||||
- stage: build
|
||||
if: type = cron
|
||||
os: linux
|
||||
dist: focal
|
||||
go: 1.24.x
|
||||
env:
|
||||
- azure-purge
|
||||
git:
|
||||
submodules: false # avoid cloning ethereum/tests
|
||||
script:
|
||||
- go run build/ci.go purge -store gethstore/builds -days 14
|
||||
|
||||
# This builder executes race tests
|
||||
- stage: build
|
||||
if: type = cron
|
||||
os: linux
|
||||
dist: focal
|
||||
go: 1.24.x
|
||||
env:
|
||||
- racetests
|
||||
script:
|
||||
- travis_wait 60 go run build/ci.go test -race $TEST_PACKAGES
|
||||
2
AUTHORS
2
AUTHORS
|
|
@ -123,6 +123,7 @@ Ceyhun Onur <ceyhun.onur@avalabs.org>
|
|||
chabashilah <doumodoumo@gmail.com>
|
||||
changhong <changhong.yu@shanbay.com>
|
||||
Charles Cooper <cooper.charles.m@gmail.com>
|
||||
Charlotte <tqpcharlie@proton.me>
|
||||
Chase Wright <mysticryuujin@gmail.com>
|
||||
Chawin Aiemvaravutigul <nick41746@hotmail.com>
|
||||
Chen Quan <terasum@163.com>
|
||||
|
|
@ -839,7 +840,6 @@ ywzqwwt <39263032+ywzqwwt@users.noreply.github.com>
|
|||
yzb <335357057@qq.com>
|
||||
zaccoding <zaccoding725@gmail.com>
|
||||
Zach <zach.ramsay@gmail.com>
|
||||
Zachinquarantine <Zachinquarantine@protonmail.com>
|
||||
zah <zahary@gmail.com>
|
||||
Zahoor Mohamed <zahoor@zahoor.in>
|
||||
Zak Cole <zak@beattiecole.com>
|
||||
|
|
|
|||
8
Makefile
8
Makefile
|
|
@ -2,7 +2,7 @@
|
|||
# with Go source code. If you know what GOPATH is then you probably
|
||||
# don't need to bother with make.
|
||||
|
||||
.PHONY: geth all test lint fmt clean devtools help
|
||||
.PHONY: geth evm all test lint fmt clean devtools help
|
||||
|
||||
GOBIN = ./build/bin
|
||||
GO ?= latest
|
||||
|
|
@ -14,6 +14,12 @@ geth:
|
|||
@echo "Done building."
|
||||
@echo "Run \"$(GOBIN)/geth\" to launch geth."
|
||||
|
||||
#? evm: Build evm.
|
||||
evm:
|
||||
$(GORUN) build/ci.go install ./cmd/evm
|
||||
@echo "Done building."
|
||||
@echo "Run \"$(GOBIN)/evm\" to launch evm."
|
||||
|
||||
#? all: Build all packages and executables.
|
||||
all:
|
||||
$(GORUN) build/ci.go install
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ https://pkg.go.dev/badge/github.com/ethereum/go-ethereum
|
|||
[](https://goreportcard.com/report/github.com/ethereum/go-ethereum)
|
||||
[](https://app.travis-ci.com/github/ethereum/go-ethereum)
|
||||
[](https://discord.gg/nthXNEv)
|
||||
[](https://x.com/go_ethereum)
|
||||
|
||||
Automated builds are available for stable releases and the unstable master branch. Binary
|
||||
archives are published at https://geth.ethereum.org/downloads/.
|
||||
|
|
@ -162,7 +163,7 @@ accessible from the outside.
|
|||
|
||||
As a developer, sooner rather than later you'll want to start interacting with `geth` and the
|
||||
Ethereum network via your own programs and not manually through the console. To aid
|
||||
this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://ethereum.github.io/execution-apis/api-documentation/)
|
||||
this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://ethereum.org/en/developers/docs/apis/json-rpc/)
|
||||
and [`geth` specific APIs](https://geth.ethereum.org/docs/interacting-with-geth/rpc)).
|
||||
These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based
|
||||
platforms, and named pipes on Windows).
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ Audit reports are published in the `docs` folder: https://github.com/ethereum/go
|
|||
|
||||
To find out how to disclose a vulnerability in Ethereum visit [https://bounty.ethereum.org](https://bounty.ethereum.org) or email bounty@ethereum.org. Please read the [disclosure page](https://github.com/ethereum/go-ethereum/security/advisories?state=published) for more information about publicly disclosed security vulnerabilities.
|
||||
|
||||
Use the built-in `geth version-check` feature to check whether the software is affected by any known vulnerability. This command will fetch the latest [`vulnerabilities.json`](https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json) file which contains known security vulnerabilities concerning `geth`, and cross-check the data against its own version number.
|
||||
|
||||
The following key may be used to communicate sensitive information to developers.
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,10 @@ import (
|
|||
"github.com/ethereum/go-ethereum/log"
|
||||
)
|
||||
|
||||
var (
|
||||
intRegex = regexp.MustCompile(`(u)?int([0-9]*)`)
|
||||
)
|
||||
|
||||
func isKeyWord(arg string) bool {
|
||||
switch arg {
|
||||
case "break":
|
||||
|
|
@ -299,7 +303,7 @@ func bindBasicType(kind abi.Type) string {
|
|||
case abi.AddressTy:
|
||||
return "common.Address"
|
||||
case abi.IntTy, abi.UintTy:
|
||||
parts := regexp.MustCompile(`(u)?int([0-9]*)`).FindStringSubmatch(kind.String())
|
||||
parts := intRegex.FindStringSubmatch(kind.String())
|
||||
switch parts[2] {
|
||||
case "8", "16", "32", "64":
|
||||
return fmt.Sprintf("%sint%s", parts[1], parts[2])
|
||||
|
|
|
|||
|
|
@ -485,13 +485,13 @@ var bindTests = []struct {
|
|||
contract Defaulter {
|
||||
address public caller;
|
||||
|
||||
function() {
|
||||
fallback() external payable {
|
||||
caller = msg.sender;
|
||||
}
|
||||
}
|
||||
`,
|
||||
[]string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`},
|
||||
[]string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`},
|
||||
[]string{`608060405234801561000f575f80fd5b5061013d8061001d5f395ff3fe608060405260043610610021575f3560e01c8063fc9c8d391461006257610022565b5b335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055005b34801561006d575f80fd5b5061007661008c565b60405161008391906100ee565b60405180910390f35b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100d8826100af565b9050919050565b6100e8816100ce565b82525050565b5f6020820190506101015f8301846100df565b9291505056fea26469706673582212201e9273ecfb1f534644c77f09a25c21baaba81cf1c444ebc071e12a225a23c72964736f6c63430008140033`},
|
||||
[]string{`[{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"caller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]`},
|
||||
`
|
||||
"math/big"
|
||||
|
||||
|
|
@ -939,6 +939,7 @@ var bindTests = []struct {
|
|||
if _, err := eventer.RaiseSimpleEvent(auth, common.Address{byte(j)}, [32]byte{byte(j)}, true, big.NewInt(int64(10*i+j))); err != nil {
|
||||
t.Fatalf("block %d, event %d: raise failed: %v", i, j, err)
|
||||
}
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
}
|
||||
sim.Commit()
|
||||
}
|
||||
|
|
@ -1495,7 +1496,7 @@ var bindTests = []struct {
|
|||
if n != 3 {
|
||||
t.Fatalf("Invalid bar0 event")
|
||||
}
|
||||
case <-time.NewTimer(3 * time.Second).C:
|
||||
case <-time.NewTimer(10 * time.Second).C:
|
||||
t.Fatalf("Wait bar0 event timeout")
|
||||
}
|
||||
|
||||
|
|
@ -1506,7 +1507,7 @@ var bindTests = []struct {
|
|||
if n != 1 {
|
||||
t.Fatalf("Invalid bar event")
|
||||
}
|
||||
case <-time.NewTimer(3 * time.Second).C:
|
||||
case <-time.NewTimer(10 * time.Second).C:
|
||||
t.Fatalf("Wait bar event timeout")
|
||||
}
|
||||
close(stopCh)
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ func TestBindingV2ConvertedV1Tests(t *testing.T) {
|
|||
}
|
||||
// Set this environment variable to regenerate the test outputs.
|
||||
if os.Getenv("WRITE_TEST_FILES") != "" {
|
||||
if err := os.WriteFile((fname), []byte(have), 0666); err != nil {
|
||||
if err := os.WriteFile(fname, []byte(have), 0666); err != nil {
|
||||
t.Fatalf("err writing expected output to file: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,7 +90,8 @@ var (
|
|||
|
||||
{{range .Calls}}
|
||||
// Pack{{.Normalized.Name}} is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x{{printf "%x" .Original.ID}}.
|
||||
// the contract method with ID 0x{{printf "%x" .Original.ID}}. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: {{.Original.String}}
|
||||
func ({{ decapitalise $contract.Type}} *{{$contract.Type}}) Pack{{.Normalized.Name}}({{range .Normalized.Inputs}} {{.Name}} {{bindtype .Type $structs}}, {{end}}) []byte {
|
||||
|
|
@ -101,6 +102,15 @@ var (
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPack{{.Normalized.Name}} is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x{{printf "%x" .Original.ID}}. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: {{.Original.String}}
|
||||
func ({{ decapitalise $contract.Type}} *{{$contract.Type}}) TryPack{{.Normalized.Name}}({{range .Normalized.Inputs}} {{.Name}} {{bindtype .Type $structs}}, {{end}}) ([]byte, error) {
|
||||
return {{ decapitalise $contract.Type}}.abi.Pack("{{.Original.Name}}" {{range .Normalized.Inputs}}, {{.Name}}{{end}})
|
||||
}
|
||||
|
||||
{{/* Unpack method is needed only when there are return args */}}
|
||||
{{if .Normalized.Outputs }}
|
||||
{{ if .Structured }}
|
||||
|
|
@ -133,8 +143,7 @@ var (
|
|||
outstruct.{{capitalise .Name}} = *abi.ConvertType(out[{{$i}}], new({{bindtype .Type $structs}})).(*{{bindtype .Type $structs}})
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
return *outstruct, err
|
||||
{{else}}
|
||||
return *outstruct, nil{{else}}
|
||||
if err != nil {
|
||||
return {{range $i, $_ := .Normalized.Outputs}}{{if ispointertype .Type}}new({{underlyingbindtype .Type }}), {{else}}*new({{bindtype .Type $structs}}), {{end}}{{end}} err
|
||||
}
|
||||
|
|
@ -145,8 +154,8 @@ var (
|
|||
out{{$i}} := *abi.ConvertType(out[{{$i}}], new({{bindtype .Type $structs}})).(*{{bindtype .Type $structs}})
|
||||
{{- end }}
|
||||
{{- end}}
|
||||
return {{range $i, $t := .Normalized.Outputs}}out{{$i}}, {{end}} err
|
||||
{{- end}}
|
||||
return {{range $i, $t := .Normalized.Outputs}}out{{$i}}, {{end}} nil
|
||||
{{- end}}
|
||||
}
|
||||
{{end}}
|
||||
{{end}}
|
||||
|
|
@ -174,7 +183,7 @@ var (
|
|||
// Solidity: {{.Original.String}}
|
||||
func ({{ decapitalise $contract.Type}} *{{$contract.Type}}) Unpack{{.Normalized.Name}}Event(log *types.Log) (*{{$contract.Type}}{{.Normalized.Name}}, error) {
|
||||
event := "{{.Original.Name}}"
|
||||
if log.Topics[0] != {{ decapitalise $contract.Type}}.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != {{ decapitalise $contract.Type}}.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new({{$contract.Type}}{{.Normalized.Name}})
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *CallbackParam) Instance(backend bind.ContractBackend, addr common.Addre
|
|||
}
|
||||
|
||||
// PackTest is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd7a5aba2.
|
||||
// the contract method with ID 0xd7a5aba2. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function test(function callback) returns()
|
||||
func (callbackParam *CallbackParam) PackTest(callback [24]byte) []byte {
|
||||
|
|
@ -62,3 +63,12 @@ func (callbackParam *CallbackParam) PackTest(callback [24]byte) []byte {
|
|||
}
|
||||
return enc
|
||||
}
|
||||
|
||||
// TryPackTest is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd7a5aba2. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function test(function callback) returns()
|
||||
func (callbackParam *CallbackParam) TryPackTest(callback [24]byte) ([]byte, error) {
|
||||
return callbackParam.abi.Pack("test", callback)
|
||||
}
|
||||
|
|
|
|||
113
accounts/abi/abigen/testdata/v2/crowdsale.go.txt
vendored
113
accounts/abi/abigen/testdata/v2/crowdsale.go.txt
vendored
|
|
@ -64,7 +64,8 @@ func (crowdsale *Crowdsale) PackConstructor(ifSuccessfulSendTo common.Address, f
|
|||
}
|
||||
|
||||
// PackAmountRaised is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x7b3e5e7b.
|
||||
// the contract method with ID 0x7b3e5e7b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function amountRaised() returns(uint256)
|
||||
func (crowdsale *Crowdsale) PackAmountRaised() []byte {
|
||||
|
|
@ -75,6 +76,15 @@ func (crowdsale *Crowdsale) PackAmountRaised() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAmountRaised is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x7b3e5e7b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function amountRaised() returns(uint256)
|
||||
func (crowdsale *Crowdsale) TryPackAmountRaised() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("amountRaised")
|
||||
}
|
||||
|
||||
// UnpackAmountRaised is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x7b3e5e7b.
|
||||
//
|
||||
|
|
@ -85,11 +95,12 @@ func (crowdsale *Crowdsale) UnpackAmountRaised(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackBeneficiary is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x38af3eed.
|
||||
// the contract method with ID 0x38af3eed. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function beneficiary() returns(address)
|
||||
func (crowdsale *Crowdsale) PackBeneficiary() []byte {
|
||||
|
|
@ -100,6 +111,15 @@ func (crowdsale *Crowdsale) PackBeneficiary() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackBeneficiary is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x38af3eed. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function beneficiary() returns(address)
|
||||
func (crowdsale *Crowdsale) TryPackBeneficiary() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("beneficiary")
|
||||
}
|
||||
|
||||
// UnpackBeneficiary is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x38af3eed.
|
||||
//
|
||||
|
|
@ -110,11 +130,12 @@ func (crowdsale *Crowdsale) UnpackBeneficiary(data []byte) (common.Address, erro
|
|||
return *new(common.Address), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackCheckGoalReached is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x01cb3b20.
|
||||
// the contract method with ID 0x01cb3b20. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function checkGoalReached() returns()
|
||||
func (crowdsale *Crowdsale) PackCheckGoalReached() []byte {
|
||||
|
|
@ -125,8 +146,18 @@ func (crowdsale *Crowdsale) PackCheckGoalReached() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackCheckGoalReached is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x01cb3b20. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function checkGoalReached() returns()
|
||||
func (crowdsale *Crowdsale) TryPackCheckGoalReached() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("checkGoalReached")
|
||||
}
|
||||
|
||||
// PackDeadline is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x29dcb0cf.
|
||||
// the contract method with ID 0x29dcb0cf. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function deadline() returns(uint256)
|
||||
func (crowdsale *Crowdsale) PackDeadline() []byte {
|
||||
|
|
@ -137,6 +168,15 @@ func (crowdsale *Crowdsale) PackDeadline() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDeadline is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x29dcb0cf. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function deadline() returns(uint256)
|
||||
func (crowdsale *Crowdsale) TryPackDeadline() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("deadline")
|
||||
}
|
||||
|
||||
// UnpackDeadline is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x29dcb0cf.
|
||||
//
|
||||
|
|
@ -147,11 +187,12 @@ func (crowdsale *Crowdsale) UnpackDeadline(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackFunders is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xdc0d3dff.
|
||||
// the contract method with ID 0xdc0d3dff. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function funders(uint256 ) returns(address addr, uint256 amount)
|
||||
func (crowdsale *Crowdsale) PackFunders(arg0 *big.Int) []byte {
|
||||
|
|
@ -162,6 +203,15 @@ func (crowdsale *Crowdsale) PackFunders(arg0 *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFunders is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xdc0d3dff. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function funders(uint256 ) returns(address addr, uint256 amount)
|
||||
func (crowdsale *Crowdsale) TryPackFunders(arg0 *big.Int) ([]byte, error) {
|
||||
return crowdsale.abi.Pack("funders", arg0)
|
||||
}
|
||||
|
||||
// FundersOutput serves as a container for the return parameters of contract
|
||||
// method Funders.
|
||||
type FundersOutput struct {
|
||||
|
|
@ -181,12 +231,12 @@ func (crowdsale *Crowdsale) UnpackFunders(data []byte) (FundersOutput, error) {
|
|||
}
|
||||
outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
|
||||
outstruct.Amount = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackFundingGoal is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x7a3a0e84.
|
||||
// the contract method with ID 0x7a3a0e84. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function fundingGoal() returns(uint256)
|
||||
func (crowdsale *Crowdsale) PackFundingGoal() []byte {
|
||||
|
|
@ -197,6 +247,15 @@ func (crowdsale *Crowdsale) PackFundingGoal() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFundingGoal is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x7a3a0e84. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function fundingGoal() returns(uint256)
|
||||
func (crowdsale *Crowdsale) TryPackFundingGoal() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("fundingGoal")
|
||||
}
|
||||
|
||||
// UnpackFundingGoal is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x7a3a0e84.
|
||||
//
|
||||
|
|
@ -207,11 +266,12 @@ func (crowdsale *Crowdsale) UnpackFundingGoal(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackPrice is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xa035b1fe.
|
||||
// the contract method with ID 0xa035b1fe. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function price() returns(uint256)
|
||||
func (crowdsale *Crowdsale) PackPrice() []byte {
|
||||
|
|
@ -222,6 +282,15 @@ func (crowdsale *Crowdsale) PackPrice() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackPrice is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xa035b1fe. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function price() returns(uint256)
|
||||
func (crowdsale *Crowdsale) TryPackPrice() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("price")
|
||||
}
|
||||
|
||||
// UnpackPrice is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xa035b1fe.
|
||||
//
|
||||
|
|
@ -232,11 +301,12 @@ func (crowdsale *Crowdsale) UnpackPrice(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackTokenReward is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6e66f6e9.
|
||||
// the contract method with ID 0x6e66f6e9. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function tokenReward() returns(address)
|
||||
func (crowdsale *Crowdsale) PackTokenReward() []byte {
|
||||
|
|
@ -247,6 +317,15 @@ func (crowdsale *Crowdsale) PackTokenReward() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTokenReward is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6e66f6e9. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function tokenReward() returns(address)
|
||||
func (crowdsale *Crowdsale) TryPackTokenReward() ([]byte, error) {
|
||||
return crowdsale.abi.Pack("tokenReward")
|
||||
}
|
||||
|
||||
// UnpackTokenReward is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x6e66f6e9.
|
||||
//
|
||||
|
|
@ -257,7 +336,7 @@ func (crowdsale *Crowdsale) UnpackTokenReward(data []byte) (common.Address, erro
|
|||
return *new(common.Address), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// CrowdsaleFundTransfer represents a FundTransfer event raised by the Crowdsale contract.
|
||||
|
|
@ -281,7 +360,7 @@ func (CrowdsaleFundTransfer) ContractEventName() string {
|
|||
// Solidity: event FundTransfer(address backer, uint256 amount, bool isContribution)
|
||||
func (crowdsale *Crowdsale) UnpackFundTransferEvent(log *types.Log) (*CrowdsaleFundTransfer, error) {
|
||||
event := "FundTransfer"
|
||||
if log.Topics[0] != crowdsale.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != crowdsale.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(CrowdsaleFundTransfer)
|
||||
|
|
|
|||
216
accounts/abi/abigen/testdata/v2/dao.go.txt
vendored
216
accounts/abi/abigen/testdata/v2/dao.go.txt
vendored
|
|
@ -64,7 +64,8 @@ func (dAO *DAO) PackConstructor(minimumQuorumForProposals *big.Int, minutesForDe
|
|||
}
|
||||
|
||||
// PackChangeMembership is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9644fcbd.
|
||||
// the contract method with ID 0x9644fcbd. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function changeMembership(address targetMember, bool canVote, string memberName) returns()
|
||||
func (dAO *DAO) PackChangeMembership(targetMember common.Address, canVote bool, memberName string) []byte {
|
||||
|
|
@ -75,8 +76,18 @@ func (dAO *DAO) PackChangeMembership(targetMember common.Address, canVote bool,
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackChangeMembership is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9644fcbd. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function changeMembership(address targetMember, bool canVote, string memberName) returns()
|
||||
func (dAO *DAO) TryPackChangeMembership(targetMember common.Address, canVote bool, memberName string) ([]byte, error) {
|
||||
return dAO.abi.Pack("changeMembership", targetMember, canVote, memberName)
|
||||
}
|
||||
|
||||
// PackChangeVotingRules is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbcca1fd3.
|
||||
// the contract method with ID 0xbcca1fd3. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function changeVotingRules(uint256 minimumQuorumForProposals, uint256 minutesForDebate, int256 marginOfVotesForMajority) returns()
|
||||
func (dAO *DAO) PackChangeVotingRules(minimumQuorumForProposals *big.Int, minutesForDebate *big.Int, marginOfVotesForMajority *big.Int) []byte {
|
||||
|
|
@ -87,8 +98,18 @@ func (dAO *DAO) PackChangeVotingRules(minimumQuorumForProposals *big.Int, minute
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackChangeVotingRules is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbcca1fd3. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function changeVotingRules(uint256 minimumQuorumForProposals, uint256 minutesForDebate, int256 marginOfVotesForMajority) returns()
|
||||
func (dAO *DAO) TryPackChangeVotingRules(minimumQuorumForProposals *big.Int, minutesForDebate *big.Int, marginOfVotesForMajority *big.Int) ([]byte, error) {
|
||||
return dAO.abi.Pack("changeVotingRules", minimumQuorumForProposals, minutesForDebate, marginOfVotesForMajority)
|
||||
}
|
||||
|
||||
// PackCheckProposalCode is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xeceb2945.
|
||||
// the contract method with ID 0xeceb2945. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function checkProposalCode(uint256 proposalNumber, address beneficiary, uint256 etherAmount, bytes transactionBytecode) returns(bool codeChecksOut)
|
||||
func (dAO *DAO) PackCheckProposalCode(proposalNumber *big.Int, beneficiary common.Address, etherAmount *big.Int, transactionBytecode []byte) []byte {
|
||||
|
|
@ -99,6 +120,15 @@ func (dAO *DAO) PackCheckProposalCode(proposalNumber *big.Int, beneficiary commo
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackCheckProposalCode is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xeceb2945. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function checkProposalCode(uint256 proposalNumber, address beneficiary, uint256 etherAmount, bytes transactionBytecode) returns(bool codeChecksOut)
|
||||
func (dAO *DAO) TryPackCheckProposalCode(proposalNumber *big.Int, beneficiary common.Address, etherAmount *big.Int, transactionBytecode []byte) ([]byte, error) {
|
||||
return dAO.abi.Pack("checkProposalCode", proposalNumber, beneficiary, etherAmount, transactionBytecode)
|
||||
}
|
||||
|
||||
// UnpackCheckProposalCode is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xeceb2945.
|
||||
//
|
||||
|
|
@ -109,11 +139,12 @@ func (dAO *DAO) UnpackCheckProposalCode(data []byte) (bool, error) {
|
|||
return *new(bool), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackDebatingPeriodInMinutes is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x69bd3436.
|
||||
// the contract method with ID 0x69bd3436. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function debatingPeriodInMinutes() returns(uint256)
|
||||
func (dAO *DAO) PackDebatingPeriodInMinutes() []byte {
|
||||
|
|
@ -124,6 +155,15 @@ func (dAO *DAO) PackDebatingPeriodInMinutes() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDebatingPeriodInMinutes is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x69bd3436. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function debatingPeriodInMinutes() returns(uint256)
|
||||
func (dAO *DAO) TryPackDebatingPeriodInMinutes() ([]byte, error) {
|
||||
return dAO.abi.Pack("debatingPeriodInMinutes")
|
||||
}
|
||||
|
||||
// UnpackDebatingPeriodInMinutes is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x69bd3436.
|
||||
//
|
||||
|
|
@ -134,11 +174,12 @@ func (dAO *DAO) UnpackDebatingPeriodInMinutes(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackExecuteProposal is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x237e9492.
|
||||
// the contract method with ID 0x237e9492. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function executeProposal(uint256 proposalNumber, bytes transactionBytecode) returns(int256 result)
|
||||
func (dAO *DAO) PackExecuteProposal(proposalNumber *big.Int, transactionBytecode []byte) []byte {
|
||||
|
|
@ -149,6 +190,15 @@ func (dAO *DAO) PackExecuteProposal(proposalNumber *big.Int, transactionBytecode
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackExecuteProposal is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x237e9492. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function executeProposal(uint256 proposalNumber, bytes transactionBytecode) returns(int256 result)
|
||||
func (dAO *DAO) TryPackExecuteProposal(proposalNumber *big.Int, transactionBytecode []byte) ([]byte, error) {
|
||||
return dAO.abi.Pack("executeProposal", proposalNumber, transactionBytecode)
|
||||
}
|
||||
|
||||
// UnpackExecuteProposal is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x237e9492.
|
||||
//
|
||||
|
|
@ -159,11 +209,12 @@ func (dAO *DAO) UnpackExecuteProposal(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackMajorityMargin is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xaa02a90f.
|
||||
// the contract method with ID 0xaa02a90f. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function majorityMargin() returns(int256)
|
||||
func (dAO *DAO) PackMajorityMargin() []byte {
|
||||
|
|
@ -174,6 +225,15 @@ func (dAO *DAO) PackMajorityMargin() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMajorityMargin is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xaa02a90f. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function majorityMargin() returns(int256)
|
||||
func (dAO *DAO) TryPackMajorityMargin() ([]byte, error) {
|
||||
return dAO.abi.Pack("majorityMargin")
|
||||
}
|
||||
|
||||
// UnpackMajorityMargin is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xaa02a90f.
|
||||
//
|
||||
|
|
@ -184,11 +244,12 @@ func (dAO *DAO) UnpackMajorityMargin(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackMemberId is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x39106821.
|
||||
// the contract method with ID 0x39106821. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function memberId(address ) returns(uint256)
|
||||
func (dAO *DAO) PackMemberId(arg0 common.Address) []byte {
|
||||
|
|
@ -199,6 +260,15 @@ func (dAO *DAO) PackMemberId(arg0 common.Address) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMemberId is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x39106821. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function memberId(address ) returns(uint256)
|
||||
func (dAO *DAO) TryPackMemberId(arg0 common.Address) ([]byte, error) {
|
||||
return dAO.abi.Pack("memberId", arg0)
|
||||
}
|
||||
|
||||
// UnpackMemberId is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x39106821.
|
||||
//
|
||||
|
|
@ -209,11 +279,12 @@ func (dAO *DAO) UnpackMemberId(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackMembers is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x5daf08ca.
|
||||
// the contract method with ID 0x5daf08ca. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function members(uint256 ) returns(address member, bool canVote, string name, uint256 memberSince)
|
||||
func (dAO *DAO) PackMembers(arg0 *big.Int) []byte {
|
||||
|
|
@ -224,6 +295,15 @@ func (dAO *DAO) PackMembers(arg0 *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMembers is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x5daf08ca. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function members(uint256 ) returns(address member, bool canVote, string name, uint256 memberSince)
|
||||
func (dAO *DAO) TryPackMembers(arg0 *big.Int) ([]byte, error) {
|
||||
return dAO.abi.Pack("members", arg0)
|
||||
}
|
||||
|
||||
// MembersOutput serves as a container for the return parameters of contract
|
||||
// method Members.
|
||||
type MembersOutput struct {
|
||||
|
|
@ -247,12 +327,12 @@ func (dAO *DAO) UnpackMembers(data []byte) (MembersOutput, error) {
|
|||
outstruct.CanVote = *abi.ConvertType(out[1], new(bool)).(*bool)
|
||||
outstruct.Name = *abi.ConvertType(out[2], new(string)).(*string)
|
||||
outstruct.MemberSince = abi.ConvertType(out[3], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackMinimumQuorum is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x8160f0b5.
|
||||
// the contract method with ID 0x8160f0b5. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function minimumQuorum() returns(uint256)
|
||||
func (dAO *DAO) PackMinimumQuorum() []byte {
|
||||
|
|
@ -263,6 +343,15 @@ func (dAO *DAO) PackMinimumQuorum() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMinimumQuorum is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x8160f0b5. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function minimumQuorum() returns(uint256)
|
||||
func (dAO *DAO) TryPackMinimumQuorum() ([]byte, error) {
|
||||
return dAO.abi.Pack("minimumQuorum")
|
||||
}
|
||||
|
||||
// UnpackMinimumQuorum is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x8160f0b5.
|
||||
//
|
||||
|
|
@ -273,11 +362,12 @@ func (dAO *DAO) UnpackMinimumQuorum(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackNewProposal is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xb1050da5.
|
||||
// the contract method with ID 0xb1050da5. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function newProposal(address beneficiary, uint256 etherAmount, string JobDescription, bytes transactionBytecode) returns(uint256 proposalID)
|
||||
func (dAO *DAO) PackNewProposal(beneficiary common.Address, etherAmount *big.Int, jobDescription string, transactionBytecode []byte) []byte {
|
||||
|
|
@ -288,6 +378,15 @@ func (dAO *DAO) PackNewProposal(beneficiary common.Address, etherAmount *big.Int
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackNewProposal is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xb1050da5. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function newProposal(address beneficiary, uint256 etherAmount, string JobDescription, bytes transactionBytecode) returns(uint256 proposalID)
|
||||
func (dAO *DAO) TryPackNewProposal(beneficiary common.Address, etherAmount *big.Int, jobDescription string, transactionBytecode []byte) ([]byte, error) {
|
||||
return dAO.abi.Pack("newProposal", beneficiary, etherAmount, jobDescription, transactionBytecode)
|
||||
}
|
||||
|
||||
// UnpackNewProposal is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xb1050da5.
|
||||
//
|
||||
|
|
@ -298,11 +397,12 @@ func (dAO *DAO) UnpackNewProposal(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackNumProposals is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x400e3949.
|
||||
// the contract method with ID 0x400e3949. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function numProposals() returns(uint256)
|
||||
func (dAO *DAO) PackNumProposals() []byte {
|
||||
|
|
@ -313,6 +413,15 @@ func (dAO *DAO) PackNumProposals() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackNumProposals is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x400e3949. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function numProposals() returns(uint256)
|
||||
func (dAO *DAO) TryPackNumProposals() ([]byte, error) {
|
||||
return dAO.abi.Pack("numProposals")
|
||||
}
|
||||
|
||||
// UnpackNumProposals is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x400e3949.
|
||||
//
|
||||
|
|
@ -323,11 +432,12 @@ func (dAO *DAO) UnpackNumProposals(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackOwner is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x8da5cb5b.
|
||||
// the contract method with ID 0x8da5cb5b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function owner() returns(address)
|
||||
func (dAO *DAO) PackOwner() []byte {
|
||||
|
|
@ -338,6 +448,15 @@ func (dAO *DAO) PackOwner() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackOwner is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x8da5cb5b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function owner() returns(address)
|
||||
func (dAO *DAO) TryPackOwner() ([]byte, error) {
|
||||
return dAO.abi.Pack("owner")
|
||||
}
|
||||
|
||||
// UnpackOwner is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x8da5cb5b.
|
||||
//
|
||||
|
|
@ -348,11 +467,12 @@ func (dAO *DAO) UnpackOwner(data []byte) (common.Address, error) {
|
|||
return *new(common.Address), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackProposals is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x013cf08b.
|
||||
// the contract method with ID 0x013cf08b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function proposals(uint256 ) returns(address recipient, uint256 amount, string description, uint256 votingDeadline, bool executed, bool proposalPassed, uint256 numberOfVotes, int256 currentResult, bytes32 proposalHash)
|
||||
func (dAO *DAO) PackProposals(arg0 *big.Int) []byte {
|
||||
|
|
@ -363,6 +483,15 @@ func (dAO *DAO) PackProposals(arg0 *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackProposals is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x013cf08b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function proposals(uint256 ) returns(address recipient, uint256 amount, string description, uint256 votingDeadline, bool executed, bool proposalPassed, uint256 numberOfVotes, int256 currentResult, bytes32 proposalHash)
|
||||
func (dAO *DAO) TryPackProposals(arg0 *big.Int) ([]byte, error) {
|
||||
return dAO.abi.Pack("proposals", arg0)
|
||||
}
|
||||
|
||||
// ProposalsOutput serves as a container for the return parameters of contract
|
||||
// method Proposals.
|
||||
type ProposalsOutput struct {
|
||||
|
|
@ -396,12 +525,12 @@ func (dAO *DAO) UnpackProposals(data []byte) (ProposalsOutput, error) {
|
|||
outstruct.NumberOfVotes = abi.ConvertType(out[6], new(big.Int)).(*big.Int)
|
||||
outstruct.CurrentResult = abi.ConvertType(out[7], new(big.Int)).(*big.Int)
|
||||
outstruct.ProposalHash = *abi.ConvertType(out[8], new([32]byte)).(*[32]byte)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackTransferOwnership is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xf2fde38b.
|
||||
// the contract method with ID 0xf2fde38b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function transferOwnership(address newOwner) returns()
|
||||
func (dAO *DAO) PackTransferOwnership(newOwner common.Address) []byte {
|
||||
|
|
@ -412,8 +541,18 @@ func (dAO *DAO) PackTransferOwnership(newOwner common.Address) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTransferOwnership is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xf2fde38b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function transferOwnership(address newOwner) returns()
|
||||
func (dAO *DAO) TryPackTransferOwnership(newOwner common.Address) ([]byte, error) {
|
||||
return dAO.abi.Pack("transferOwnership", newOwner)
|
||||
}
|
||||
|
||||
// PackVote is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd3c0715b.
|
||||
// the contract method with ID 0xd3c0715b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function vote(uint256 proposalNumber, bool supportsProposal, string justificationText) returns(uint256 voteID)
|
||||
func (dAO *DAO) PackVote(proposalNumber *big.Int, supportsProposal bool, justificationText string) []byte {
|
||||
|
|
@ -424,6 +563,15 @@ func (dAO *DAO) PackVote(proposalNumber *big.Int, supportsProposal bool, justifi
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackVote is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd3c0715b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function vote(uint256 proposalNumber, bool supportsProposal, string justificationText) returns(uint256 voteID)
|
||||
func (dAO *DAO) TryPackVote(proposalNumber *big.Int, supportsProposal bool, justificationText string) ([]byte, error) {
|
||||
return dAO.abi.Pack("vote", proposalNumber, supportsProposal, justificationText)
|
||||
}
|
||||
|
||||
// UnpackVote is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xd3c0715b.
|
||||
//
|
||||
|
|
@ -434,7 +582,7 @@ func (dAO *DAO) UnpackVote(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// DAOChangeOfRules represents a ChangeOfRules event raised by the DAO contract.
|
||||
|
|
@ -458,7 +606,7 @@ func (DAOChangeOfRules) ContractEventName() string {
|
|||
// Solidity: event ChangeOfRules(uint256 minimumQuorum, uint256 debatingPeriodInMinutes, int256 majorityMargin)
|
||||
func (dAO *DAO) UnpackChangeOfRulesEvent(log *types.Log) (*DAOChangeOfRules, error) {
|
||||
event := "ChangeOfRules"
|
||||
if log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DAOChangeOfRules)
|
||||
|
|
@ -500,7 +648,7 @@ func (DAOMembershipChanged) ContractEventName() string {
|
|||
// Solidity: event MembershipChanged(address member, bool isMember)
|
||||
func (dAO *DAO) UnpackMembershipChangedEvent(log *types.Log) (*DAOMembershipChanged, error) {
|
||||
event := "MembershipChanged"
|
||||
if log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DAOMembershipChanged)
|
||||
|
|
@ -544,7 +692,7 @@ func (DAOProposalAdded) ContractEventName() string {
|
|||
// Solidity: event ProposalAdded(uint256 proposalID, address recipient, uint256 amount, string description)
|
||||
func (dAO *DAO) UnpackProposalAddedEvent(log *types.Log) (*DAOProposalAdded, error) {
|
||||
event := "ProposalAdded"
|
||||
if log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DAOProposalAdded)
|
||||
|
|
@ -588,7 +736,7 @@ func (DAOProposalTallied) ContractEventName() string {
|
|||
// Solidity: event ProposalTallied(uint256 proposalID, int256 result, uint256 quorum, bool active)
|
||||
func (dAO *DAO) UnpackProposalTalliedEvent(log *types.Log) (*DAOProposalTallied, error) {
|
||||
event := "ProposalTallied"
|
||||
if log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DAOProposalTallied)
|
||||
|
|
@ -632,7 +780,7 @@ func (DAOVoted) ContractEventName() string {
|
|||
// Solidity: event Voted(uint256 proposalID, bool position, address voter, string justification)
|
||||
func (dAO *DAO) UnpackVotedEvent(log *types.Log) (*DAOVoted, error) {
|
||||
event := "Voted"
|
||||
if log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dAO.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DAOVoted)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *DeeplyNestedArray) Instance(backend bind.ContractBackend, addr common.A
|
|||
}
|
||||
|
||||
// PackDeepUint64Array is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x98ed1856.
|
||||
// the contract method with ID 0x98ed1856. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function deepUint64Array(uint256 , uint256 , uint256 ) view returns(uint64)
|
||||
func (deeplyNestedArray *DeeplyNestedArray) PackDeepUint64Array(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int) []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (deeplyNestedArray *DeeplyNestedArray) PackDeepUint64Array(arg0 *big.Int, a
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDeepUint64Array is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x98ed1856. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function deepUint64Array(uint256 , uint256 , uint256 ) view returns(uint64)
|
||||
func (deeplyNestedArray *DeeplyNestedArray) TryPackDeepUint64Array(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int) ([]byte, error) {
|
||||
return deeplyNestedArray.abi.Pack("deepUint64Array", arg0, arg1, arg2)
|
||||
}
|
||||
|
||||
// UnpackDeepUint64Array is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x98ed1856.
|
||||
//
|
||||
|
|
@ -73,11 +83,12 @@ func (deeplyNestedArray *DeeplyNestedArray) UnpackDeepUint64Array(data []byte) (
|
|||
return *new(uint64), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackRetrieveDeepArray is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x8ed4573a.
|
||||
// the contract method with ID 0x8ed4573a. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function retrieveDeepArray() view returns(uint64[3][4][5])
|
||||
func (deeplyNestedArray *DeeplyNestedArray) PackRetrieveDeepArray() []byte {
|
||||
|
|
@ -88,6 +99,15 @@ func (deeplyNestedArray *DeeplyNestedArray) PackRetrieveDeepArray() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackRetrieveDeepArray is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x8ed4573a. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function retrieveDeepArray() view returns(uint64[3][4][5])
|
||||
func (deeplyNestedArray *DeeplyNestedArray) TryPackRetrieveDeepArray() ([]byte, error) {
|
||||
return deeplyNestedArray.abi.Pack("retrieveDeepArray")
|
||||
}
|
||||
|
||||
// UnpackRetrieveDeepArray is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x8ed4573a.
|
||||
//
|
||||
|
|
@ -98,11 +118,12 @@ func (deeplyNestedArray *DeeplyNestedArray) UnpackRetrieveDeepArray(data []byte)
|
|||
return *new([5][4][3]uint64), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([5][4][3]uint64)).(*[5][4][3]uint64)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackStoreDeepUintArray is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x34424855.
|
||||
// the contract method with ID 0x34424855. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function storeDeepUintArray(uint64[3][4][5] arr) returns()
|
||||
func (deeplyNestedArray *DeeplyNestedArray) PackStoreDeepUintArray(arr [5][4][3]uint64) []byte {
|
||||
|
|
@ -112,3 +133,12 @@ func (deeplyNestedArray *DeeplyNestedArray) PackStoreDeepUintArray(arr [5][4][3]
|
|||
}
|
||||
return enc
|
||||
}
|
||||
|
||||
// TryPackStoreDeepUintArray is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x34424855. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function storeDeepUintArray(uint64[3][4][5] arr) returns()
|
||||
func (deeplyNestedArray *DeeplyNestedArray) TryPackStoreDeepUintArray(arr [5][4][3]uint64) ([]byte, error) {
|
||||
return deeplyNestedArray.abi.Pack("storeDeepUintArray", arr)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ func (EventCheckerDynamic) ContractEventName() string {
|
|||
// Solidity: event dynamic(string indexed idxStr, bytes indexed idxDat, string str, bytes dat)
|
||||
func (eventChecker *EventChecker) UnpackDynamicEvent(log *types.Log) (*EventCheckerDynamic, error) {
|
||||
event := "dynamic"
|
||||
if log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(EventCheckerDynamic)
|
||||
|
|
@ -112,7 +112,7 @@ func (EventCheckerEmpty) ContractEventName() string {
|
|||
// Solidity: event empty()
|
||||
func (eventChecker *EventChecker) UnpackEmptyEvent(log *types.Log) (*EventCheckerEmpty, error) {
|
||||
event := "empty"
|
||||
if log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(EventCheckerEmpty)
|
||||
|
|
@ -154,7 +154,7 @@ func (EventCheckerIndexed) ContractEventName() string {
|
|||
// Solidity: event indexed(address indexed addr, int256 indexed num)
|
||||
func (eventChecker *EventChecker) UnpackIndexedEvent(log *types.Log) (*EventCheckerIndexed, error) {
|
||||
event := "indexed"
|
||||
if log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(EventCheckerIndexed)
|
||||
|
|
@ -196,7 +196,7 @@ func (EventCheckerMixed) ContractEventName() string {
|
|||
// Solidity: event mixed(address indexed addr, int256 num)
|
||||
func (eventChecker *EventChecker) UnpackMixedEvent(log *types.Log) (*EventCheckerMixed, error) {
|
||||
event := "mixed"
|
||||
if log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(EventCheckerMixed)
|
||||
|
|
@ -238,7 +238,7 @@ func (EventCheckerUnnamed) ContractEventName() string {
|
|||
// Solidity: event unnamed(uint256 indexed arg0, uint256 indexed arg1)
|
||||
func (eventChecker *EventChecker) UnpackUnnamedEvent(log *types.Log) (*EventCheckerUnnamed, error) {
|
||||
event := "unnamed"
|
||||
if log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != eventChecker.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(EventCheckerUnnamed)
|
||||
|
|
|
|||
15
accounts/abi/abigen/testdata/v2/getter.go.txt
vendored
15
accounts/abi/abigen/testdata/v2/getter.go.txt
vendored
|
|
@ -52,7 +52,8 @@ func (c *Getter) Instance(backend bind.ContractBackend, addr common.Address) *bi
|
|||
}
|
||||
|
||||
// PackGetter is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x993a04b7.
|
||||
// the contract method with ID 0x993a04b7. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function getter() returns(string, int256, bytes32)
|
||||
func (getter *Getter) PackGetter() []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (getter *Getter) PackGetter() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGetter is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x993a04b7. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function getter() returns(string, int256, bytes32)
|
||||
func (getter *Getter) TryPackGetter() ([]byte, error) {
|
||||
return getter.abi.Pack("getter")
|
||||
}
|
||||
|
||||
// GetterOutput serves as a container for the return parameters of contract
|
||||
// method Getter.
|
||||
type GetterOutput struct {
|
||||
|
|
@ -84,6 +94,5 @@ func (getter *Getter) UnpackGetter(data []byte) (GetterOutput, error) {
|
|||
outstruct.Arg0 = *abi.ConvertType(out[0], new(string)).(*string)
|
||||
outstruct.Arg1 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
outstruct.Arg2 = *abi.ConvertType(out[2], new([32]byte)).(*[32]byte)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *IdentifierCollision) Instance(backend bind.ContractBackend, addr common
|
|||
}
|
||||
|
||||
// PackMyVar is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x4ef1f0ad.
|
||||
// the contract method with ID 0x4ef1f0ad. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function MyVar() view returns(uint256)
|
||||
func (identifierCollision *IdentifierCollision) PackMyVar() []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (identifierCollision *IdentifierCollision) PackMyVar() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMyVar is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x4ef1f0ad. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function MyVar() view returns(uint256)
|
||||
func (identifierCollision *IdentifierCollision) TryPackMyVar() ([]byte, error) {
|
||||
return identifierCollision.abi.Pack("MyVar")
|
||||
}
|
||||
|
||||
// UnpackMyVar is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x4ef1f0ad.
|
||||
//
|
||||
|
|
@ -73,11 +83,12 @@ func (identifierCollision *IdentifierCollision) UnpackMyVar(data []byte) (*big.I
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackPubVar is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x01ad4d87.
|
||||
// the contract method with ID 0x01ad4d87. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function _myVar() view returns(uint256)
|
||||
func (identifierCollision *IdentifierCollision) PackPubVar() []byte {
|
||||
|
|
@ -88,6 +99,15 @@ func (identifierCollision *IdentifierCollision) PackPubVar() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackPubVar is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x01ad4d87. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function _myVar() view returns(uint256)
|
||||
func (identifierCollision *IdentifierCollision) TryPackPubVar() ([]byte, error) {
|
||||
return identifierCollision.abi.Pack("_myVar")
|
||||
}
|
||||
|
||||
// UnpackPubVar is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x01ad4d87.
|
||||
//
|
||||
|
|
@ -98,5 +118,5 @@ func (identifierCollision *IdentifierCollision) UnpackPubVar(data []byte) (*big.
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@ func (c *InputChecker) Instance(backend bind.ContractBackend, addr common.Addres
|
|||
}
|
||||
|
||||
// PackAnonInput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x3e708e82.
|
||||
// the contract method with ID 0x3e708e82. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function anonInput(string ) returns()
|
||||
func (inputChecker *InputChecker) PackAnonInput(arg0 string) []byte {
|
||||
|
|
@ -62,8 +63,18 @@ func (inputChecker *InputChecker) PackAnonInput(arg0 string) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAnonInput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x3e708e82. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function anonInput(string ) returns()
|
||||
func (inputChecker *InputChecker) TryPackAnonInput(arg0 string) ([]byte, error) {
|
||||
return inputChecker.abi.Pack("anonInput", arg0)
|
||||
}
|
||||
|
||||
// PackAnonInputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x28160527.
|
||||
// the contract method with ID 0x28160527. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function anonInputs(string , string ) returns()
|
||||
func (inputChecker *InputChecker) PackAnonInputs(arg0 string, arg1 string) []byte {
|
||||
|
|
@ -74,8 +85,18 @@ func (inputChecker *InputChecker) PackAnonInputs(arg0 string, arg1 string) []byt
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAnonInputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x28160527. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function anonInputs(string , string ) returns()
|
||||
func (inputChecker *InputChecker) TryPackAnonInputs(arg0 string, arg1 string) ([]byte, error) {
|
||||
return inputChecker.abi.Pack("anonInputs", arg0, arg1)
|
||||
}
|
||||
|
||||
// PackMixedInputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xc689ebdc.
|
||||
// the contract method with ID 0xc689ebdc. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function mixedInputs(string , string str) returns()
|
||||
func (inputChecker *InputChecker) PackMixedInputs(arg0 string, str string) []byte {
|
||||
|
|
@ -86,8 +107,18 @@ func (inputChecker *InputChecker) PackMixedInputs(arg0 string, str string) []byt
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMixedInputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xc689ebdc. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function mixedInputs(string , string str) returns()
|
||||
func (inputChecker *InputChecker) TryPackMixedInputs(arg0 string, str string) ([]byte, error) {
|
||||
return inputChecker.abi.Pack("mixedInputs", arg0, str)
|
||||
}
|
||||
|
||||
// PackNamedInput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x0d402005.
|
||||
// the contract method with ID 0x0d402005. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function namedInput(string str) returns()
|
||||
func (inputChecker *InputChecker) PackNamedInput(str string) []byte {
|
||||
|
|
@ -98,8 +129,18 @@ func (inputChecker *InputChecker) PackNamedInput(str string) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackNamedInput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x0d402005. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function namedInput(string str) returns()
|
||||
func (inputChecker *InputChecker) TryPackNamedInput(str string) ([]byte, error) {
|
||||
return inputChecker.abi.Pack("namedInput", str)
|
||||
}
|
||||
|
||||
// PackNamedInputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x63c796ed.
|
||||
// the contract method with ID 0x63c796ed. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function namedInputs(string str1, string str2) returns()
|
||||
func (inputChecker *InputChecker) PackNamedInputs(str1 string, str2 string) []byte {
|
||||
|
|
@ -110,8 +151,18 @@ func (inputChecker *InputChecker) PackNamedInputs(str1 string, str2 string) []by
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackNamedInputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x63c796ed. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function namedInputs(string str1, string str2) returns()
|
||||
func (inputChecker *InputChecker) TryPackNamedInputs(str1 string, str2 string) ([]byte, error) {
|
||||
return inputChecker.abi.Pack("namedInputs", str1, str2)
|
||||
}
|
||||
|
||||
// PackNoInput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x53539029.
|
||||
// the contract method with ID 0x53539029. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function noInput() returns()
|
||||
func (inputChecker *InputChecker) PackNoInput() []byte {
|
||||
|
|
@ -121,3 +172,12 @@ func (inputChecker *InputChecker) PackNoInput() []byte {
|
|||
}
|
||||
return enc
|
||||
}
|
||||
|
||||
// TryPackNoInput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x53539029. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function noInput() returns()
|
||||
func (inputChecker *InputChecker) TryPackNoInput() ([]byte, error) {
|
||||
return inputChecker.abi.Pack("noInput")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,7 +64,8 @@ func (interactor *Interactor) PackConstructor(str string) []byte {
|
|||
}
|
||||
|
||||
// PackDeployString is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6874e809.
|
||||
// the contract method with ID 0x6874e809. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function deployString() returns(string)
|
||||
func (interactor *Interactor) PackDeployString() []byte {
|
||||
|
|
@ -75,6 +76,15 @@ func (interactor *Interactor) PackDeployString() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDeployString is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6874e809. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function deployString() returns(string)
|
||||
func (interactor *Interactor) TryPackDeployString() ([]byte, error) {
|
||||
return interactor.abi.Pack("deployString")
|
||||
}
|
||||
|
||||
// UnpackDeployString is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x6874e809.
|
||||
//
|
||||
|
|
@ -85,11 +95,12 @@ func (interactor *Interactor) UnpackDeployString(data []byte) (string, error) {
|
|||
return *new(string), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(string)).(*string)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackTransact is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd736c513.
|
||||
// the contract method with ID 0xd736c513. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function transact(string str) returns()
|
||||
func (interactor *Interactor) PackTransact(str string) []byte {
|
||||
|
|
@ -100,8 +111,18 @@ func (interactor *Interactor) PackTransact(str string) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTransact is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd736c513. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function transact(string str) returns()
|
||||
func (interactor *Interactor) TryPackTransact(str string) ([]byte, error) {
|
||||
return interactor.abi.Pack("transact", str)
|
||||
}
|
||||
|
||||
// PackTransactString is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x0d86a0e1.
|
||||
// the contract method with ID 0x0d86a0e1. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function transactString() returns(string)
|
||||
func (interactor *Interactor) PackTransactString() []byte {
|
||||
|
|
@ -112,6 +133,15 @@ func (interactor *Interactor) PackTransactString() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTransactString is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x0d86a0e1. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function transactString() returns(string)
|
||||
func (interactor *Interactor) TryPackTransactString() ([]byte, error) {
|
||||
return interactor.abi.Pack("transactString")
|
||||
}
|
||||
|
||||
// UnpackTransactString is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x0d86a0e1.
|
||||
//
|
||||
|
|
@ -122,5 +152,5 @@ func (interactor *Interactor) UnpackTransactString(data []byte) (string, error)
|
|||
return *new(string), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(string)).(*string)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,8 @@ func (c *NameConflict) Instance(backend bind.ContractBackend, addr common.Addres
|
|||
}
|
||||
|
||||
// PackAddRequest is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xcce7b048.
|
||||
// the contract method with ID 0xcce7b048. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function addRequest((bytes,bytes) req) pure returns()
|
||||
func (nameConflict *NameConflict) PackAddRequest(req Oraclerequest) []byte {
|
||||
|
|
@ -69,8 +70,18 @@ func (nameConflict *NameConflict) PackAddRequest(req Oraclerequest) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAddRequest is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xcce7b048. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function addRequest((bytes,bytes) req) pure returns()
|
||||
func (nameConflict *NameConflict) TryPackAddRequest(req Oraclerequest) ([]byte, error) {
|
||||
return nameConflict.abi.Pack("addRequest", req)
|
||||
}
|
||||
|
||||
// PackGetRequest is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xc2bb515f.
|
||||
// the contract method with ID 0xc2bb515f. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function getRequest() pure returns((bytes,bytes))
|
||||
func (nameConflict *NameConflict) PackGetRequest() []byte {
|
||||
|
|
@ -81,6 +92,15 @@ func (nameConflict *NameConflict) PackGetRequest() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGetRequest is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xc2bb515f. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function getRequest() pure returns((bytes,bytes))
|
||||
func (nameConflict *NameConflict) TryPackGetRequest() ([]byte, error) {
|
||||
return nameConflict.abi.Pack("getRequest")
|
||||
}
|
||||
|
||||
// UnpackGetRequest is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xc2bb515f.
|
||||
//
|
||||
|
|
@ -91,7 +111,7 @@ func (nameConflict *NameConflict) UnpackGetRequest(data []byte) (Oraclerequest,
|
|||
return *new(Oraclerequest), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(Oraclerequest)).(*Oraclerequest)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// NameConflictLog represents a log event raised by the NameConflict contract.
|
||||
|
|
@ -114,7 +134,7 @@ func (NameConflictLog) ContractEventName() string {
|
|||
// Solidity: event log(int256 msg, int256 _msg)
|
||||
func (nameConflict *NameConflict) UnpackLogEvent(log *types.Log) (*NameConflictLog, error) {
|
||||
event := "log"
|
||||
if log.Topics[0] != nameConflict.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != nameConflict.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(NameConflictLog)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *NumericMethodName) Instance(backend bind.ContractBackend, addr common.A
|
|||
}
|
||||
|
||||
// PackE1test is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xffa02795.
|
||||
// the contract method with ID 0xffa02795. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function _1test() pure returns()
|
||||
func (numericMethodName *NumericMethodName) PackE1test() []byte {
|
||||
|
|
@ -63,8 +64,18 @@ func (numericMethodName *NumericMethodName) PackE1test() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackE1test is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xffa02795. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function _1test() pure returns()
|
||||
func (numericMethodName *NumericMethodName) TryPackE1test() ([]byte, error) {
|
||||
return numericMethodName.abi.Pack("_1test")
|
||||
}
|
||||
|
||||
// PackE1test0 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd02767c7.
|
||||
// the contract method with ID 0xd02767c7. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function __1test() pure returns()
|
||||
func (numericMethodName *NumericMethodName) PackE1test0() []byte {
|
||||
|
|
@ -75,8 +86,18 @@ func (numericMethodName *NumericMethodName) PackE1test0() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackE1test0 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd02767c7. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function __1test() pure returns()
|
||||
func (numericMethodName *NumericMethodName) TryPackE1test0() ([]byte, error) {
|
||||
return numericMethodName.abi.Pack("__1test")
|
||||
}
|
||||
|
||||
// PackE2test is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9d993132.
|
||||
// the contract method with ID 0x9d993132. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function __2test() pure returns()
|
||||
func (numericMethodName *NumericMethodName) PackE2test() []byte {
|
||||
|
|
@ -87,6 +108,15 @@ func (numericMethodName *NumericMethodName) PackE2test() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackE2test is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9d993132. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function __2test() pure returns()
|
||||
func (numericMethodName *NumericMethodName) TryPackE2test() ([]byte, error) {
|
||||
return numericMethodName.abi.Pack("__2test")
|
||||
}
|
||||
|
||||
// NumericMethodNameE1TestEvent represents a _1TestEvent event raised by the NumericMethodName contract.
|
||||
type NumericMethodNameE1TestEvent struct {
|
||||
Param common.Address
|
||||
|
|
@ -106,7 +136,7 @@ func (NumericMethodNameE1TestEvent) ContractEventName() string {
|
|||
// Solidity: event _1TestEvent(address _param)
|
||||
func (numericMethodName *NumericMethodName) UnpackE1TestEventEvent(log *types.Log) (*NumericMethodNameE1TestEvent, error) {
|
||||
event := "_1TestEvent"
|
||||
if log.Topics[0] != numericMethodName.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != numericMethodName.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(NumericMethodNameE1TestEvent)
|
||||
|
|
|
|||
100
accounts/abi/abigen/testdata/v2/outputchecker.go.txt
vendored
100
accounts/abi/abigen/testdata/v2/outputchecker.go.txt
vendored
|
|
@ -51,7 +51,8 @@ func (c *OutputChecker) Instance(backend bind.ContractBackend, addr common.Addre
|
|||
}
|
||||
|
||||
// PackAnonOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x008bda05.
|
||||
// the contract method with ID 0x008bda05. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function anonOutput() returns(string)
|
||||
func (outputChecker *OutputChecker) PackAnonOutput() []byte {
|
||||
|
|
@ -62,6 +63,15 @@ func (outputChecker *OutputChecker) PackAnonOutput() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAnonOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x008bda05. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function anonOutput() returns(string)
|
||||
func (outputChecker *OutputChecker) TryPackAnonOutput() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("anonOutput")
|
||||
}
|
||||
|
||||
// UnpackAnonOutput is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x008bda05.
|
||||
//
|
||||
|
|
@ -72,11 +82,12 @@ func (outputChecker *OutputChecker) UnpackAnonOutput(data []byte) (string, error
|
|||
return *new(string), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(string)).(*string)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackAnonOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x3c401115.
|
||||
// the contract method with ID 0x3c401115. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function anonOutputs() returns(string, string)
|
||||
func (outputChecker *OutputChecker) PackAnonOutputs() []byte {
|
||||
|
|
@ -87,6 +98,15 @@ func (outputChecker *OutputChecker) PackAnonOutputs() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAnonOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x3c401115. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function anonOutputs() returns(string, string)
|
||||
func (outputChecker *OutputChecker) TryPackAnonOutputs() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("anonOutputs")
|
||||
}
|
||||
|
||||
// AnonOutputsOutput serves as a container for the return parameters of contract
|
||||
// method AnonOutputs.
|
||||
type AnonOutputsOutput struct {
|
||||
|
|
@ -106,12 +126,12 @@ func (outputChecker *OutputChecker) UnpackAnonOutputs(data []byte) (AnonOutputsO
|
|||
}
|
||||
outstruct.Arg0 = *abi.ConvertType(out[0], new(string)).(*string)
|
||||
outstruct.Arg1 = *abi.ConvertType(out[1], new(string)).(*string)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackCollidingOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xeccbc1ee.
|
||||
// the contract method with ID 0xeccbc1ee. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function collidingOutputs() returns(string str, string Str)
|
||||
func (outputChecker *OutputChecker) PackCollidingOutputs() []byte {
|
||||
|
|
@ -122,6 +142,15 @@ func (outputChecker *OutputChecker) PackCollidingOutputs() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackCollidingOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xeccbc1ee. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function collidingOutputs() returns(string str, string Str)
|
||||
func (outputChecker *OutputChecker) TryPackCollidingOutputs() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("collidingOutputs")
|
||||
}
|
||||
|
||||
// CollidingOutputsOutput serves as a container for the return parameters of contract
|
||||
// method CollidingOutputs.
|
||||
type CollidingOutputsOutput struct {
|
||||
|
|
@ -141,12 +170,12 @@ func (outputChecker *OutputChecker) UnpackCollidingOutputs(data []byte) (Collidi
|
|||
}
|
||||
outstruct.Str = *abi.ConvertType(out[0], new(string)).(*string)
|
||||
outstruct.Str0 = *abi.ConvertType(out[1], new(string)).(*string)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackMixedOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x21b77b44.
|
||||
// the contract method with ID 0x21b77b44. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function mixedOutputs() returns(string, string str)
|
||||
func (outputChecker *OutputChecker) PackMixedOutputs() []byte {
|
||||
|
|
@ -157,6 +186,15 @@ func (outputChecker *OutputChecker) PackMixedOutputs() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackMixedOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x21b77b44. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function mixedOutputs() returns(string, string str)
|
||||
func (outputChecker *OutputChecker) TryPackMixedOutputs() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("mixedOutputs")
|
||||
}
|
||||
|
||||
// MixedOutputsOutput serves as a container for the return parameters of contract
|
||||
// method MixedOutputs.
|
||||
type MixedOutputsOutput struct {
|
||||
|
|
@ -176,12 +214,12 @@ func (outputChecker *OutputChecker) UnpackMixedOutputs(data []byte) (MixedOutput
|
|||
}
|
||||
outstruct.Arg0 = *abi.ConvertType(out[0], new(string)).(*string)
|
||||
outstruct.Str = *abi.ConvertType(out[1], new(string)).(*string)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackNamedOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x5e632bd5.
|
||||
// the contract method with ID 0x5e632bd5. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function namedOutput() returns(string str)
|
||||
func (outputChecker *OutputChecker) PackNamedOutput() []byte {
|
||||
|
|
@ -192,6 +230,15 @@ func (outputChecker *OutputChecker) PackNamedOutput() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackNamedOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x5e632bd5. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function namedOutput() returns(string str)
|
||||
func (outputChecker *OutputChecker) TryPackNamedOutput() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("namedOutput")
|
||||
}
|
||||
|
||||
// UnpackNamedOutput is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x5e632bd5.
|
||||
//
|
||||
|
|
@ -202,11 +249,12 @@ func (outputChecker *OutputChecker) UnpackNamedOutput(data []byte) (string, erro
|
|||
return *new(string), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(string)).(*string)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackNamedOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x7970a189.
|
||||
// the contract method with ID 0x7970a189. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function namedOutputs() returns(string str1, string str2)
|
||||
func (outputChecker *OutputChecker) PackNamedOutputs() []byte {
|
||||
|
|
@ -217,6 +265,15 @@ func (outputChecker *OutputChecker) PackNamedOutputs() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackNamedOutputs is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x7970a189. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function namedOutputs() returns(string str1, string str2)
|
||||
func (outputChecker *OutputChecker) TryPackNamedOutputs() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("namedOutputs")
|
||||
}
|
||||
|
||||
// NamedOutputsOutput serves as a container for the return parameters of contract
|
||||
// method NamedOutputs.
|
||||
type NamedOutputsOutput struct {
|
||||
|
|
@ -236,12 +293,12 @@ func (outputChecker *OutputChecker) UnpackNamedOutputs(data []byte) (NamedOutput
|
|||
}
|
||||
outstruct.Str1 = *abi.ConvertType(out[0], new(string)).(*string)
|
||||
outstruct.Str2 = *abi.ConvertType(out[1], new(string)).(*string)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackNoOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x625f0306.
|
||||
// the contract method with ID 0x625f0306. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function noOutput() returns()
|
||||
func (outputChecker *OutputChecker) PackNoOutput() []byte {
|
||||
|
|
@ -251,3 +308,12 @@ func (outputChecker *OutputChecker) PackNoOutput() []byte {
|
|||
}
|
||||
return enc
|
||||
}
|
||||
|
||||
// TryPackNoOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x625f0306. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function noOutput() returns()
|
||||
func (outputChecker *OutputChecker) TryPackNoOutput() ([]byte, error) {
|
||||
return outputChecker.abi.Pack("noOutput")
|
||||
}
|
||||
|
|
|
|||
28
accounts/abi/abigen/testdata/v2/overload.go.txt
vendored
28
accounts/abi/abigen/testdata/v2/overload.go.txt
vendored
|
|
@ -52,7 +52,8 @@ func (c *Overload) Instance(backend bind.ContractBackend, addr common.Address) *
|
|||
}
|
||||
|
||||
// PackFoo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x04bc52f8.
|
||||
// the contract method with ID 0x04bc52f8. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function foo(uint256 i, uint256 j) returns()
|
||||
func (overload *Overload) PackFoo(i *big.Int, j *big.Int) []byte {
|
||||
|
|
@ -63,8 +64,18 @@ func (overload *Overload) PackFoo(i *big.Int, j *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFoo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x04bc52f8. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function foo(uint256 i, uint256 j) returns()
|
||||
func (overload *Overload) TryPackFoo(i *big.Int, j *big.Int) ([]byte, error) {
|
||||
return overload.abi.Pack("foo", i, j)
|
||||
}
|
||||
|
||||
// PackFoo0 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2fbebd38.
|
||||
// the contract method with ID 0x2fbebd38. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function foo(uint256 i) returns()
|
||||
func (overload *Overload) PackFoo0(i *big.Int) []byte {
|
||||
|
|
@ -75,6 +86,15 @@ func (overload *Overload) PackFoo0(i *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFoo0 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2fbebd38. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function foo(uint256 i) returns()
|
||||
func (overload *Overload) TryPackFoo0(i *big.Int) ([]byte, error) {
|
||||
return overload.abi.Pack("foo0", i)
|
||||
}
|
||||
|
||||
// OverloadBar represents a bar event raised by the Overload contract.
|
||||
type OverloadBar struct {
|
||||
I *big.Int
|
||||
|
|
@ -94,7 +114,7 @@ func (OverloadBar) ContractEventName() string {
|
|||
// Solidity: event bar(uint256 i)
|
||||
func (overload *Overload) UnpackBarEvent(log *types.Log) (*OverloadBar, error) {
|
||||
event := "bar"
|
||||
if log.Topics[0] != overload.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != overload.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(OverloadBar)
|
||||
|
|
@ -136,7 +156,7 @@ func (OverloadBar0) ContractEventName() string {
|
|||
// Solidity: event bar(uint256 i, uint256 j)
|
||||
func (overload *Overload) UnpackBar0Event(log *types.Log) (*OverloadBar0, error) {
|
||||
event := "bar0"
|
||||
if log.Topics[0] != overload.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != overload.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(OverloadBar0)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *RangeKeyword) Instance(backend bind.ContractBackend, addr common.Addres
|
|||
}
|
||||
|
||||
// PackFunctionWithKeywordParameter is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x527a119f.
|
||||
// the contract method with ID 0x527a119f. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function functionWithKeywordParameter(uint256 range) pure returns()
|
||||
func (rangeKeyword *RangeKeyword) PackFunctionWithKeywordParameter(arg0 *big.Int) []byte {
|
||||
|
|
@ -62,3 +63,12 @@ func (rangeKeyword *RangeKeyword) PackFunctionWithKeywordParameter(arg0 *big.Int
|
|||
}
|
||||
return enc
|
||||
}
|
||||
|
||||
// TryPackFunctionWithKeywordParameter is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x527a119f. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function functionWithKeywordParameter(uint256 range) pure returns()
|
||||
func (rangeKeyword *RangeKeyword) TryPackFunctionWithKeywordParameter(arg0 *big.Int) ([]byte, error) {
|
||||
return rangeKeyword.abi.Pack("functionWithKeywordParameter", arg0)
|
||||
}
|
||||
|
|
|
|||
56
accounts/abi/abigen/testdata/v2/slicer.go.txt
vendored
56
accounts/abi/abigen/testdata/v2/slicer.go.txt
vendored
|
|
@ -52,7 +52,8 @@ func (c *Slicer) Instance(backend bind.ContractBackend, addr common.Address) *bi
|
|||
}
|
||||
|
||||
// PackEchoAddresses is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbe1127a3.
|
||||
// the contract method with ID 0xbe1127a3. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function echoAddresses(address[] input) returns(address[] output)
|
||||
func (slicer *Slicer) PackEchoAddresses(input []common.Address) []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (slicer *Slicer) PackEchoAddresses(input []common.Address) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackEchoAddresses is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbe1127a3. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function echoAddresses(address[] input) returns(address[] output)
|
||||
func (slicer *Slicer) TryPackEchoAddresses(input []common.Address) ([]byte, error) {
|
||||
return slicer.abi.Pack("echoAddresses", input)
|
||||
}
|
||||
|
||||
// UnpackEchoAddresses is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xbe1127a3.
|
||||
//
|
||||
|
|
@ -73,11 +83,12 @@ func (slicer *Slicer) UnpackEchoAddresses(data []byte) ([]common.Address, error)
|
|||
return *new([]common.Address), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackEchoBools is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xf637e589.
|
||||
// the contract method with ID 0xf637e589. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function echoBools(bool[] input) returns(bool[] output)
|
||||
func (slicer *Slicer) PackEchoBools(input []bool) []byte {
|
||||
|
|
@ -88,6 +99,15 @@ func (slicer *Slicer) PackEchoBools(input []bool) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackEchoBools is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xf637e589. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function echoBools(bool[] input) returns(bool[] output)
|
||||
func (slicer *Slicer) TryPackEchoBools(input []bool) ([]byte, error) {
|
||||
return slicer.abi.Pack("echoBools", input)
|
||||
}
|
||||
|
||||
// UnpackEchoBools is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xf637e589.
|
||||
//
|
||||
|
|
@ -98,11 +118,12 @@ func (slicer *Slicer) UnpackEchoBools(data []byte) ([]bool, error) {
|
|||
return *new([]bool), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([]bool)).(*[]bool)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackEchoFancyInts is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd88becc0.
|
||||
// the contract method with ID 0xd88becc0. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function echoFancyInts(uint24[23] input) returns(uint24[23] output)
|
||||
func (slicer *Slicer) PackEchoFancyInts(input [23]*big.Int) []byte {
|
||||
|
|
@ -113,6 +134,15 @@ func (slicer *Slicer) PackEchoFancyInts(input [23]*big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackEchoFancyInts is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd88becc0. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function echoFancyInts(uint24[23] input) returns(uint24[23] output)
|
||||
func (slicer *Slicer) TryPackEchoFancyInts(input [23]*big.Int) ([]byte, error) {
|
||||
return slicer.abi.Pack("echoFancyInts", input)
|
||||
}
|
||||
|
||||
// UnpackEchoFancyInts is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xd88becc0.
|
||||
//
|
||||
|
|
@ -123,11 +153,12 @@ func (slicer *Slicer) UnpackEchoFancyInts(data []byte) ([23]*big.Int, error) {
|
|||
return *new([23]*big.Int), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([23]*big.Int)).(*[23]*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackEchoInts is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe15a3db7.
|
||||
// the contract method with ID 0xe15a3db7. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function echoInts(int256[] input) returns(int256[] output)
|
||||
func (slicer *Slicer) PackEchoInts(input []*big.Int) []byte {
|
||||
|
|
@ -138,6 +169,15 @@ func (slicer *Slicer) PackEchoInts(input []*big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackEchoInts is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe15a3db7. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function echoInts(int256[] input) returns(int256[] output)
|
||||
func (slicer *Slicer) TryPackEchoInts(input []*big.Int) ([]byte, error) {
|
||||
return slicer.abi.Pack("echoInts", input)
|
||||
}
|
||||
|
||||
// UnpackEchoInts is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xe15a3db7.
|
||||
//
|
||||
|
|
@ -148,5 +188,5 @@ func (slicer *Slicer) UnpackEchoInts(data []byte) ([]*big.Int, error) {
|
|||
return *new([]*big.Int), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
116
accounts/abi/abigen/testdata/v2/structs-abi.go.txt
vendored
116
accounts/abi/abigen/testdata/v2/structs-abi.go.txt
vendored
|
|
@ -1,116 +0,0 @@
|
|||
// Code generated via abigen V2 - DO NOT EDIT.
|
||||
// This file is a generated binding and any manual changes will be lost.
|
||||
|
||||
package v1bindtests
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi/bind/v2"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var (
|
||||
_ = bytes.Equal
|
||||
_ = errors.New
|
||||
_ = big.NewInt
|
||||
_ = common.Big1
|
||||
_ = types.BloomLookup
|
||||
_ = abi.ConvertType
|
||||
)
|
||||
|
||||
// Struct0 is an auto generated low-level Go binding around an user-defined struct.
|
||||
type Struct0 struct {
|
||||
B [32]byte
|
||||
}
|
||||
|
||||
// StructsMetaData contains all meta data concerning the Structs contract.
|
||||
var StructsMetaData = bind.MetaData{
|
||||
ABI: "[{\"inputs\":[],\"name\":\"F\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"B\",\"type\":\"bytes32\"}],\"internalType\":\"structStructs.A[]\",\"name\":\"a\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"c\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"d\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"G\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"B\",\"type\":\"bytes32\"}],\"internalType\":\"structStructs.A[]\",\"name\":\"a\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
|
||||
ID: "Structs",
|
||||
}
|
||||
|
||||
// Structs is an auto generated Go binding around an Ethereum contract.
|
||||
type Structs struct {
|
||||
abi abi.ABI
|
||||
}
|
||||
|
||||
// NewStructs creates a new instance of Structs.
|
||||
func NewStructs() *Structs {
|
||||
parsed, err := StructsMetaData.ParseABI()
|
||||
if err != nil {
|
||||
panic(errors.New("invalid ABI: " + err.Error()))
|
||||
}
|
||||
return &Structs{abi: *parsed}
|
||||
}
|
||||
|
||||
// Instance creates a wrapper for a deployed contract instance at the given address.
|
||||
<<<<<<< HEAD
|
||||
// Use this to create the instance object passed to abigen v2 library functions Call, Transact, etc.
|
||||
func (c *Structs) Instance(backend bind.ContractBackend, addr common.Address) *bind.BoundContract {
|
||||
return bind.NewBoundContract(addr, c.abi, backend, backend, backend)
|
||||
=======
|
||||
// Use this to create the instance object passed to abigen v2 library functions Call,
|
||||
// Transact, etc.
|
||||
func (c *Structs) Instance(backend bind.ContractBackend, addr common.Address) bind.BoundContract {
|
||||
return bind.NewBoundContract(backend, addr, c.abi)
|
||||
>>>>>>> 854c25e086 (accounts/abi/abigen: improve v2 template)
|
||||
}
|
||||
|
||||
// F is the Go binding used to pack the parameters required for calling
|
||||
// the contract method 0x28811f59.
|
||||
//
|
||||
// Solidity: function F() view returns((bytes32)[] a, uint256[] c, bool[] d)
|
||||
func (structs *Structs) PackF() ([]byte, error) {
|
||||
return structs.abi.Pack("F")
|
||||
}
|
||||
|
||||
// FOutput serves as a container for the return parameters of contract
|
||||
// method F.
|
||||
type FOutput struct {
|
||||
A []Struct0
|
||||
C []*big.Int
|
||||
D []bool
|
||||
}
|
||||
|
||||
// UnpackF is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x28811f59.
|
||||
//
|
||||
// Solidity: function F() view returns((bytes32)[] a, uint256[] c, bool[] d)
|
||||
func (structs *Structs) UnpackF(data []byte) (*FOutput, error) {
|
||||
out, err := structs.abi.Unpack("F", data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ret := new(FOutput)
|
||||
ret.A = *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0)
|
||||
ret.C = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int)
|
||||
ret.D = *abi.ConvertType(out[2], new([]bool)).(*[]bool)
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
// G is the Go binding used to pack the parameters required for calling
|
||||
// the contract method 0x6fecb623.
|
||||
//
|
||||
// Solidity: function G() view returns((bytes32)[] a)
|
||||
func (structs *Structs) PackG() ([]byte, error) {
|
||||
return structs.abi.Pack("G")
|
||||
}
|
||||
|
||||
// UnpackG is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x6fecb623.
|
||||
//
|
||||
// Solidity: function G() view returns((bytes32)[] a)
|
||||
func (structs *Structs) UnpackG(data []byte) (*[]Struct0, error) {
|
||||
out, err := structs.abi.Unpack("G", data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0)
|
||||
return &out0, nil
|
||||
}
|
||||
29
accounts/abi/abigen/testdata/v2/structs.go.txt
vendored
29
accounts/abi/abigen/testdata/v2/structs.go.txt
vendored
|
|
@ -57,7 +57,8 @@ func (c *Structs) Instance(backend bind.ContractBackend, addr common.Address) *b
|
|||
}
|
||||
|
||||
// PackF is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x28811f59.
|
||||
// the contract method with ID 0x28811f59. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function F() view returns((bytes32)[] a, uint256[] c, bool[] d)
|
||||
func (structs *Structs) PackF() []byte {
|
||||
|
|
@ -68,6 +69,15 @@ func (structs *Structs) PackF() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackF is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x28811f59. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function F() view returns((bytes32)[] a, uint256[] c, bool[] d)
|
||||
func (structs *Structs) TryPackF() ([]byte, error) {
|
||||
return structs.abi.Pack("F")
|
||||
}
|
||||
|
||||
// FOutput serves as a container for the return parameters of contract
|
||||
// method F.
|
||||
type FOutput struct {
|
||||
|
|
@ -89,12 +99,12 @@ func (structs *Structs) UnpackF(data []byte) (FOutput, error) {
|
|||
outstruct.A = *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0)
|
||||
outstruct.C = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int)
|
||||
outstruct.D = *abi.ConvertType(out[2], new([]bool)).(*[]bool)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackG is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6fecb623.
|
||||
// the contract method with ID 0x6fecb623. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function G() view returns((bytes32)[] a)
|
||||
func (structs *Structs) PackG() []byte {
|
||||
|
|
@ -105,6 +115,15 @@ func (structs *Structs) PackG() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackG is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6fecb623. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function G() view returns((bytes32)[] a)
|
||||
func (structs *Structs) TryPackG() ([]byte, error) {
|
||||
return structs.abi.Pack("G")
|
||||
}
|
||||
|
||||
// UnpackG is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x6fecb623.
|
||||
//
|
||||
|
|
@ -115,5 +134,5 @@ func (structs *Structs) UnpackG(data []byte) ([]Struct0, error) {
|
|||
return *new([]Struct0), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([]Struct0)).(*[]Struct0)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
126
accounts/abi/abigen/testdata/v2/token.go.txt
vendored
126
accounts/abi/abigen/testdata/v2/token.go.txt
vendored
|
|
@ -64,7 +64,8 @@ func (token *Token) PackConstructor(initialSupply *big.Int, tokenName string, de
|
|||
}
|
||||
|
||||
// PackAllowance is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xdd62ed3e.
|
||||
// the contract method with ID 0xdd62ed3e. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function allowance(address , address ) returns(uint256)
|
||||
func (token *Token) PackAllowance(arg0 common.Address, arg1 common.Address) []byte {
|
||||
|
|
@ -75,6 +76,15 @@ func (token *Token) PackAllowance(arg0 common.Address, arg1 common.Address) []by
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAllowance is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xdd62ed3e. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function allowance(address , address ) returns(uint256)
|
||||
func (token *Token) TryPackAllowance(arg0 common.Address, arg1 common.Address) ([]byte, error) {
|
||||
return token.abi.Pack("allowance", arg0, arg1)
|
||||
}
|
||||
|
||||
// UnpackAllowance is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xdd62ed3e.
|
||||
//
|
||||
|
|
@ -85,11 +95,12 @@ func (token *Token) UnpackAllowance(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackApproveAndCall is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xcae9ca51.
|
||||
// the contract method with ID 0xcae9ca51. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns(bool success)
|
||||
func (token *Token) PackApproveAndCall(spender common.Address, value *big.Int, extraData []byte) []byte {
|
||||
|
|
@ -100,6 +111,15 @@ func (token *Token) PackApproveAndCall(spender common.Address, value *big.Int, e
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackApproveAndCall is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xcae9ca51. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns(bool success)
|
||||
func (token *Token) TryPackApproveAndCall(spender common.Address, value *big.Int, extraData []byte) ([]byte, error) {
|
||||
return token.abi.Pack("approveAndCall", spender, value, extraData)
|
||||
}
|
||||
|
||||
// UnpackApproveAndCall is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xcae9ca51.
|
||||
//
|
||||
|
|
@ -110,11 +130,12 @@ func (token *Token) UnpackApproveAndCall(data []byte) (bool, error) {
|
|||
return *new(bool), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackBalanceOf is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x70a08231.
|
||||
// the contract method with ID 0x70a08231. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function balanceOf(address ) returns(uint256)
|
||||
func (token *Token) PackBalanceOf(arg0 common.Address) []byte {
|
||||
|
|
@ -125,6 +146,15 @@ func (token *Token) PackBalanceOf(arg0 common.Address) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackBalanceOf is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x70a08231. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function balanceOf(address ) returns(uint256)
|
||||
func (token *Token) TryPackBalanceOf(arg0 common.Address) ([]byte, error) {
|
||||
return token.abi.Pack("balanceOf", arg0)
|
||||
}
|
||||
|
||||
// UnpackBalanceOf is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x70a08231.
|
||||
//
|
||||
|
|
@ -135,11 +165,12 @@ func (token *Token) UnpackBalanceOf(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackDecimals is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x313ce567.
|
||||
// the contract method with ID 0x313ce567. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function decimals() returns(uint8)
|
||||
func (token *Token) PackDecimals() []byte {
|
||||
|
|
@ -150,6 +181,15 @@ func (token *Token) PackDecimals() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDecimals is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x313ce567. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function decimals() returns(uint8)
|
||||
func (token *Token) TryPackDecimals() ([]byte, error) {
|
||||
return token.abi.Pack("decimals")
|
||||
}
|
||||
|
||||
// UnpackDecimals is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x313ce567.
|
||||
//
|
||||
|
|
@ -160,11 +200,12 @@ func (token *Token) UnpackDecimals(data []byte) (uint8, error) {
|
|||
return *new(uint8), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackName is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x06fdde03.
|
||||
// the contract method with ID 0x06fdde03. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function name() returns(string)
|
||||
func (token *Token) PackName() []byte {
|
||||
|
|
@ -175,6 +216,15 @@ func (token *Token) PackName() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackName is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x06fdde03. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function name() returns(string)
|
||||
func (token *Token) TryPackName() ([]byte, error) {
|
||||
return token.abi.Pack("name")
|
||||
}
|
||||
|
||||
// UnpackName is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x06fdde03.
|
||||
//
|
||||
|
|
@ -185,11 +235,12 @@ func (token *Token) UnpackName(data []byte) (string, error) {
|
|||
return *new(string), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(string)).(*string)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackSpentAllowance is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xdc3080f2.
|
||||
// the contract method with ID 0xdc3080f2. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function spentAllowance(address , address ) returns(uint256)
|
||||
func (token *Token) PackSpentAllowance(arg0 common.Address, arg1 common.Address) []byte {
|
||||
|
|
@ -200,6 +251,15 @@ func (token *Token) PackSpentAllowance(arg0 common.Address, arg1 common.Address)
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackSpentAllowance is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xdc3080f2. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function spentAllowance(address , address ) returns(uint256)
|
||||
func (token *Token) TryPackSpentAllowance(arg0 common.Address, arg1 common.Address) ([]byte, error) {
|
||||
return token.abi.Pack("spentAllowance", arg0, arg1)
|
||||
}
|
||||
|
||||
// UnpackSpentAllowance is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xdc3080f2.
|
||||
//
|
||||
|
|
@ -210,11 +270,12 @@ func (token *Token) UnpackSpentAllowance(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackSymbol is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x95d89b41.
|
||||
// the contract method with ID 0x95d89b41. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function symbol() returns(string)
|
||||
func (token *Token) PackSymbol() []byte {
|
||||
|
|
@ -225,6 +286,15 @@ func (token *Token) PackSymbol() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackSymbol is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x95d89b41. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function symbol() returns(string)
|
||||
func (token *Token) TryPackSymbol() ([]byte, error) {
|
||||
return token.abi.Pack("symbol")
|
||||
}
|
||||
|
||||
// UnpackSymbol is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x95d89b41.
|
||||
//
|
||||
|
|
@ -235,11 +305,12 @@ func (token *Token) UnpackSymbol(data []byte) (string, error) {
|
|||
return *new(string), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(string)).(*string)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackTransfer is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xa9059cbb.
|
||||
// the contract method with ID 0xa9059cbb. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function transfer(address _to, uint256 _value) returns()
|
||||
func (token *Token) PackTransfer(to common.Address, value *big.Int) []byte {
|
||||
|
|
@ -250,8 +321,18 @@ func (token *Token) PackTransfer(to common.Address, value *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTransfer is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xa9059cbb. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function transfer(address _to, uint256 _value) returns()
|
||||
func (token *Token) TryPackTransfer(to common.Address, value *big.Int) ([]byte, error) {
|
||||
return token.abi.Pack("transfer", to, value)
|
||||
}
|
||||
|
||||
// PackTransferFrom is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x23b872dd.
|
||||
// the contract method with ID 0x23b872dd. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function transferFrom(address _from, address _to, uint256 _value) returns(bool success)
|
||||
func (token *Token) PackTransferFrom(from common.Address, to common.Address, value *big.Int) []byte {
|
||||
|
|
@ -262,6 +343,15 @@ func (token *Token) PackTransferFrom(from common.Address, to common.Address, val
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTransferFrom is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x23b872dd. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function transferFrom(address _from, address _to, uint256 _value) returns(bool success)
|
||||
func (token *Token) TryPackTransferFrom(from common.Address, to common.Address, value *big.Int) ([]byte, error) {
|
||||
return token.abi.Pack("transferFrom", from, to, value)
|
||||
}
|
||||
|
||||
// UnpackTransferFrom is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x23b872dd.
|
||||
//
|
||||
|
|
@ -272,7 +362,7 @@ func (token *Token) UnpackTransferFrom(data []byte) (bool, error) {
|
|||
return *new(bool), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// TokenTransfer represents a Transfer event raised by the Token contract.
|
||||
|
|
@ -296,7 +386,7 @@ func (TokenTransfer) ContractEventName() string {
|
|||
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
|
||||
func (token *Token) UnpackTransferEvent(log *types.Log) (*TokenTransfer, error) {
|
||||
event := "Transfer"
|
||||
if log.Topics[0] != token.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != token.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(TokenTransfer)
|
||||
|
|
|
|||
43
accounts/abi/abigen/testdata/v2/tuple.go.txt
vendored
43
accounts/abi/abigen/testdata/v2/tuple.go.txt
vendored
|
|
@ -77,7 +77,8 @@ func (c *Tuple) Instance(backend bind.ContractBackend, addr common.Address) *bin
|
|||
}
|
||||
|
||||
// PackFunc1 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x443c79b4.
|
||||
// the contract method with ID 0x443c79b4. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function func1((uint256,uint256[],(uint256,uint256)[]) a, (uint256,uint256)[2][] b, (uint256,uint256)[][2] c, (uint256,uint256[],(uint256,uint256)[])[] d, uint256[] e) pure returns((uint256,uint256[],(uint256,uint256)[]), (uint256,uint256)[2][], (uint256,uint256)[][2], (uint256,uint256[],(uint256,uint256)[])[], uint256[])
|
||||
func (tuple *Tuple) PackFunc1(a TupleS, b [][2]TupleT, c [2][]TupleT, d []TupleS, e []*big.Int) []byte {
|
||||
|
|
@ -88,6 +89,15 @@ func (tuple *Tuple) PackFunc1(a TupleS, b [][2]TupleT, c [2][]TupleT, d []TupleS
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFunc1 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x443c79b4. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function func1((uint256,uint256[],(uint256,uint256)[]) a, (uint256,uint256)[2][] b, (uint256,uint256)[][2] c, (uint256,uint256[],(uint256,uint256)[])[] d, uint256[] e) pure returns((uint256,uint256[],(uint256,uint256)[]), (uint256,uint256)[2][], (uint256,uint256)[][2], (uint256,uint256[],(uint256,uint256)[])[], uint256[])
|
||||
func (tuple *Tuple) TryPackFunc1(a TupleS, b [][2]TupleT, c [2][]TupleT, d []TupleS, e []*big.Int) ([]byte, error) {
|
||||
return tuple.abi.Pack("func1", a, b, c, d, e)
|
||||
}
|
||||
|
||||
// Func1Output serves as a container for the return parameters of contract
|
||||
// method Func1.
|
||||
type Func1Output struct {
|
||||
|
|
@ -113,12 +123,12 @@ func (tuple *Tuple) UnpackFunc1(data []byte) (Func1Output, error) {
|
|||
outstruct.Arg2 = *abi.ConvertType(out[2], new([2][]TupleT)).(*[2][]TupleT)
|
||||
outstruct.Arg3 = *abi.ConvertType(out[3], new([]TupleS)).(*[]TupleS)
|
||||
outstruct.Arg4 = *abi.ConvertType(out[4], new([]*big.Int)).(*[]*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackFunc2 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd0062cdd.
|
||||
// the contract method with ID 0xd0062cdd. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function func2((uint256,uint256[],(uint256,uint256)[]) a, (uint256,uint256)[2][] b, (uint256,uint256)[][2] c, (uint256,uint256[],(uint256,uint256)[])[] d, uint256[] e) returns()
|
||||
func (tuple *Tuple) PackFunc2(a TupleS, b [][2]TupleT, c [2][]TupleT, d []TupleS, e []*big.Int) []byte {
|
||||
|
|
@ -129,8 +139,18 @@ func (tuple *Tuple) PackFunc2(a TupleS, b [][2]TupleT, c [2][]TupleT, d []TupleS
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFunc2 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xd0062cdd. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function func2((uint256,uint256[],(uint256,uint256)[]) a, (uint256,uint256)[2][] b, (uint256,uint256)[][2] c, (uint256,uint256[],(uint256,uint256)[])[] d, uint256[] e) returns()
|
||||
func (tuple *Tuple) TryPackFunc2(a TupleS, b [][2]TupleT, c [2][]TupleT, d []TupleS, e []*big.Int) ([]byte, error) {
|
||||
return tuple.abi.Pack("func2", a, b, c, d, e)
|
||||
}
|
||||
|
||||
// PackFunc3 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe4d9a43b.
|
||||
// the contract method with ID 0xe4d9a43b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function func3((uint16,uint16)[] ) pure returns()
|
||||
func (tuple *Tuple) PackFunc3(arg0 []TupleQ) []byte {
|
||||
|
|
@ -141,6 +161,15 @@ func (tuple *Tuple) PackFunc3(arg0 []TupleQ) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFunc3 is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe4d9a43b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function func3((uint16,uint16)[] ) pure returns()
|
||||
func (tuple *Tuple) TryPackFunc3(arg0 []TupleQ) ([]byte, error) {
|
||||
return tuple.abi.Pack("func3", arg0)
|
||||
}
|
||||
|
||||
// TupleTupleEvent represents a TupleEvent event raised by the Tuple contract.
|
||||
type TupleTupleEvent struct {
|
||||
A TupleS
|
||||
|
|
@ -164,7 +193,7 @@ func (TupleTupleEvent) ContractEventName() string {
|
|||
// Solidity: event TupleEvent((uint256,uint256[],(uint256,uint256)[]) a, (uint256,uint256)[2][] b, (uint256,uint256)[][2] c, (uint256,uint256[],(uint256,uint256)[])[] d, uint256[] e)
|
||||
func (tuple *Tuple) UnpackTupleEventEvent(log *types.Log) (*TupleTupleEvent, error) {
|
||||
event := "TupleEvent"
|
||||
if log.Topics[0] != tuple.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != tuple.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(TupleTupleEvent)
|
||||
|
|
@ -205,7 +234,7 @@ func (TupleTupleEvent2) ContractEventName() string {
|
|||
// Solidity: event TupleEvent2((uint8,uint8)[] arg0)
|
||||
func (tuple *Tuple) UnpackTupleEvent2Event(log *types.Log) (*TupleTupleEvent2, error) {
|
||||
event := "TupleEvent2"
|
||||
if log.Topics[0] != tuple.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != tuple.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(TupleTupleEvent2)
|
||||
|
|
|
|||
15
accounts/abi/abigen/testdata/v2/tupler.go.txt
vendored
15
accounts/abi/abigen/testdata/v2/tupler.go.txt
vendored
|
|
@ -52,7 +52,8 @@ func (c *Tupler) Instance(backend bind.ContractBackend, addr common.Address) *bi
|
|||
}
|
||||
|
||||
// PackTuple is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x3175aae2.
|
||||
// the contract method with ID 0x3175aae2. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function tuple() returns(string a, int256 b, bytes32 c)
|
||||
func (tupler *Tupler) PackTuple() []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (tupler *Tupler) PackTuple() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackTuple is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x3175aae2. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function tuple() returns(string a, int256 b, bytes32 c)
|
||||
func (tupler *Tupler) TryPackTuple() ([]byte, error) {
|
||||
return tupler.abi.Pack("tuple")
|
||||
}
|
||||
|
||||
// TupleOutput serves as a container for the return parameters of contract
|
||||
// method Tuple.
|
||||
type TupleOutput struct {
|
||||
|
|
@ -84,6 +94,5 @@ func (tupler *Tupler) UnpackTuple(data []byte) (TupleOutput, error) {
|
|||
outstruct.A = *abi.ConvertType(out[0], new(string)).(*string)
|
||||
outstruct.B = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
outstruct.C = *abi.ConvertType(out[2], new([32]byte)).(*[32]byte)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
|
|
|||
119
accounts/abi/abigen/testdata/v2/underscorer.go.txt
vendored
119
accounts/abi/abigen/testdata/v2/underscorer.go.txt
vendored
|
|
@ -52,7 +52,8 @@ func (c *Underscorer) Instance(backend bind.ContractBackend, addr common.Address
|
|||
}
|
||||
|
||||
// PackAllPurelyUnderscoredOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xb564b34d.
|
||||
// the contract method with ID 0xb564b34d. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function AllPurelyUnderscoredOutput() view returns(int256 _, int256 __)
|
||||
func (underscorer *Underscorer) PackAllPurelyUnderscoredOutput() []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (underscorer *Underscorer) PackAllPurelyUnderscoredOutput() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackAllPurelyUnderscoredOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xb564b34d. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function AllPurelyUnderscoredOutput() view returns(int256 _, int256 __)
|
||||
func (underscorer *Underscorer) TryPackAllPurelyUnderscoredOutput() ([]byte, error) {
|
||||
return underscorer.abi.Pack("AllPurelyUnderscoredOutput")
|
||||
}
|
||||
|
||||
// AllPurelyUnderscoredOutputOutput serves as a container for the return parameters of contract
|
||||
// method AllPurelyUnderscoredOutput.
|
||||
type AllPurelyUnderscoredOutputOutput struct {
|
||||
|
|
@ -82,12 +92,12 @@ func (underscorer *Underscorer) UnpackAllPurelyUnderscoredOutput(data []byte) (A
|
|||
}
|
||||
outstruct.Arg0 = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Arg1 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackLowerLowerCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe409ca45.
|
||||
// the contract method with ID 0xe409ca45. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function LowerLowerCollision() view returns(int256 _res, int256 res)
|
||||
func (underscorer *Underscorer) PackLowerLowerCollision() []byte {
|
||||
|
|
@ -98,6 +108,15 @@ func (underscorer *Underscorer) PackLowerLowerCollision() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackLowerLowerCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe409ca45. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function LowerLowerCollision() view returns(int256 _res, int256 res)
|
||||
func (underscorer *Underscorer) TryPackLowerLowerCollision() ([]byte, error) {
|
||||
return underscorer.abi.Pack("LowerLowerCollision")
|
||||
}
|
||||
|
||||
// LowerLowerCollisionOutput serves as a container for the return parameters of contract
|
||||
// method LowerLowerCollision.
|
||||
type LowerLowerCollisionOutput struct {
|
||||
|
|
@ -117,12 +136,12 @@ func (underscorer *Underscorer) UnpackLowerLowerCollision(data []byte) (LowerLow
|
|||
}
|
||||
outstruct.Res = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Res0 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackLowerUpperCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x03a59213.
|
||||
// the contract method with ID 0x03a59213. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function LowerUpperCollision() view returns(int256 _res, int256 Res)
|
||||
func (underscorer *Underscorer) PackLowerUpperCollision() []byte {
|
||||
|
|
@ -133,6 +152,15 @@ func (underscorer *Underscorer) PackLowerUpperCollision() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackLowerUpperCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x03a59213. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function LowerUpperCollision() view returns(int256 _res, int256 Res)
|
||||
func (underscorer *Underscorer) TryPackLowerUpperCollision() ([]byte, error) {
|
||||
return underscorer.abi.Pack("LowerUpperCollision")
|
||||
}
|
||||
|
||||
// LowerUpperCollisionOutput serves as a container for the return parameters of contract
|
||||
// method LowerUpperCollision.
|
||||
type LowerUpperCollisionOutput struct {
|
||||
|
|
@ -152,12 +180,12 @@ func (underscorer *Underscorer) UnpackLowerUpperCollision(data []byte) (LowerUpp
|
|||
}
|
||||
outstruct.Res = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Res0 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackPurelyUnderscoredOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9df48485.
|
||||
// the contract method with ID 0x9df48485. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function PurelyUnderscoredOutput() view returns(int256 _, int256 res)
|
||||
func (underscorer *Underscorer) PackPurelyUnderscoredOutput() []byte {
|
||||
|
|
@ -168,6 +196,15 @@ func (underscorer *Underscorer) PackPurelyUnderscoredOutput() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackPurelyUnderscoredOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9df48485. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function PurelyUnderscoredOutput() view returns(int256 _, int256 res)
|
||||
func (underscorer *Underscorer) TryPackPurelyUnderscoredOutput() ([]byte, error) {
|
||||
return underscorer.abi.Pack("PurelyUnderscoredOutput")
|
||||
}
|
||||
|
||||
// PurelyUnderscoredOutputOutput serves as a container for the return parameters of contract
|
||||
// method PurelyUnderscoredOutput.
|
||||
type PurelyUnderscoredOutputOutput struct {
|
||||
|
|
@ -187,12 +224,12 @@ func (underscorer *Underscorer) UnpackPurelyUnderscoredOutput(data []byte) (Pure
|
|||
}
|
||||
outstruct.Arg0 = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Res = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackUnderscoredOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x67e6633d.
|
||||
// the contract method with ID 0x67e6633d. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function UnderscoredOutput() view returns(int256 _int, string _string)
|
||||
func (underscorer *Underscorer) PackUnderscoredOutput() []byte {
|
||||
|
|
@ -203,6 +240,15 @@ func (underscorer *Underscorer) PackUnderscoredOutput() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackUnderscoredOutput is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x67e6633d. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function UnderscoredOutput() view returns(int256 _int, string _string)
|
||||
func (underscorer *Underscorer) TryPackUnderscoredOutput() ([]byte, error) {
|
||||
return underscorer.abi.Pack("UnderscoredOutput")
|
||||
}
|
||||
|
||||
// UnderscoredOutputOutput serves as a container for the return parameters of contract
|
||||
// method UnderscoredOutput.
|
||||
type UnderscoredOutputOutput struct {
|
||||
|
|
@ -222,12 +268,12 @@ func (underscorer *Underscorer) UnpackUnderscoredOutput(data []byte) (Underscore
|
|||
}
|
||||
outstruct.Int = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.String = *abi.ConvertType(out[1], new(string)).(*string)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackUpperLowerCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xaf7486ab.
|
||||
// the contract method with ID 0xaf7486ab. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function UpperLowerCollision() view returns(int256 _Res, int256 res)
|
||||
func (underscorer *Underscorer) PackUpperLowerCollision() []byte {
|
||||
|
|
@ -238,6 +284,15 @@ func (underscorer *Underscorer) PackUpperLowerCollision() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackUpperLowerCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xaf7486ab. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function UpperLowerCollision() view returns(int256 _Res, int256 res)
|
||||
func (underscorer *Underscorer) TryPackUpperLowerCollision() ([]byte, error) {
|
||||
return underscorer.abi.Pack("UpperLowerCollision")
|
||||
}
|
||||
|
||||
// UpperLowerCollisionOutput serves as a container for the return parameters of contract
|
||||
// method UpperLowerCollision.
|
||||
type UpperLowerCollisionOutput struct {
|
||||
|
|
@ -257,12 +312,12 @@ func (underscorer *Underscorer) UnpackUpperLowerCollision(data []byte) (UpperLow
|
|||
}
|
||||
outstruct.Res = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Res0 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackUpperUpperCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe02ab24d.
|
||||
// the contract method with ID 0xe02ab24d. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function UpperUpperCollision() view returns(int256 _Res, int256 Res)
|
||||
func (underscorer *Underscorer) PackUpperUpperCollision() []byte {
|
||||
|
|
@ -273,6 +328,15 @@ func (underscorer *Underscorer) PackUpperUpperCollision() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackUpperUpperCollision is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe02ab24d. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function UpperUpperCollision() view returns(int256 _Res, int256 Res)
|
||||
func (underscorer *Underscorer) TryPackUpperUpperCollision() ([]byte, error) {
|
||||
return underscorer.abi.Pack("UpperUpperCollision")
|
||||
}
|
||||
|
||||
// UpperUpperCollisionOutput serves as a container for the return parameters of contract
|
||||
// method UpperUpperCollision.
|
||||
type UpperUpperCollisionOutput struct {
|
||||
|
|
@ -292,12 +356,12 @@ func (underscorer *Underscorer) UnpackUpperUpperCollision(data []byte) (UpperUpp
|
|||
}
|
||||
outstruct.Res = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Res0 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackUnderScoredFunc is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x46546dbe.
|
||||
// the contract method with ID 0x46546dbe. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function _under_scored_func() view returns(int256 _int)
|
||||
func (underscorer *Underscorer) PackUnderScoredFunc() []byte {
|
||||
|
|
@ -308,6 +372,15 @@ func (underscorer *Underscorer) PackUnderScoredFunc() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackUnderScoredFunc is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x46546dbe. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function _under_scored_func() view returns(int256 _int)
|
||||
func (underscorer *Underscorer) TryPackUnderScoredFunc() ([]byte, error) {
|
||||
return underscorer.abi.Pack("_under_scored_func")
|
||||
}
|
||||
|
||||
// UnpackUnderScoredFunc is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x46546dbe.
|
||||
//
|
||||
|
|
@ -318,5 +391,5 @@ func (underscorer *Underscorer) UnpackUnderScoredFunc(data []byte) (*big.Int, er
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,6 +150,11 @@ func NewBoundContract(address common.Address, abi abi.ABI, caller ContractCaller
|
|||
}
|
||||
}
|
||||
|
||||
// Address returns the deployment address of the contract.
|
||||
func (c *BoundContract) Address() common.Address {
|
||||
return c.address
|
||||
}
|
||||
|
||||
// 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
|
||||
|
|
@ -272,8 +277,10 @@ func (c *BoundContract) RawCreationTransact(opts *TransactOpts, calldata []byte)
|
|||
// Transfer initiates a plain transaction to move funds to the contract, calling
|
||||
// its default method if one is available.
|
||||
func (c *BoundContract) Transfer(opts *TransactOpts) (*types.Transaction, error) {
|
||||
// todo(rjl493456442) check the payable fallback or receive is defined
|
||||
// or not, reject invalid transaction at the first place
|
||||
// Check if payable fallback or receive is defined
|
||||
if !c.abi.HasReceive() && !(c.abi.HasFallback() && c.abi.Fallback.IsPayable()) {
|
||||
return nil, fmt.Errorf("contract does not have a payable fallback or receive function")
|
||||
}
|
||||
return c.transact(opts, &c.address, nil)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -158,10 +158,10 @@ func testLinkCase(tcInput linkTestCaseInput) error {
|
|||
overrideAddrs = make(map[rune]common.Address)
|
||||
)
|
||||
// generate deterministic addresses for the override set.
|
||||
rand.Seed(42)
|
||||
rng := rand.New(rand.NewSource(42))
|
||||
for contract := range tcInput.overrides {
|
||||
var addr common.Address
|
||||
rand.Read(addr[:])
|
||||
rng.Read(addr[:])
|
||||
overrideAddrs[contract] = addr
|
||||
overridesAddrs[addr] = struct{}{}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@ func (c *DB) Instance(backend bind.ContractBackend, addr common.Address) *bind.B
|
|||
}
|
||||
|
||||
// PackGet is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9507d39a.
|
||||
// the contract method with ID 0x9507d39a. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function get(uint256 k) returns(uint256)
|
||||
func (dB *DB) PackGet(k *big.Int) []byte {
|
||||
|
|
@ -70,6 +71,15 @@ func (dB *DB) PackGet(k *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGet is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x9507d39a. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function get(uint256 k) returns(uint256)
|
||||
func (dB *DB) TryPackGet(k *big.Int) ([]byte, error) {
|
||||
return dB.abi.Pack("get", k)
|
||||
}
|
||||
|
||||
// UnpackGet is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x9507d39a.
|
||||
//
|
||||
|
|
@ -80,11 +90,12 @@ func (dB *DB) UnpackGet(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackGetNamedStatParams is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe369ba3b.
|
||||
// the contract method with ID 0xe369ba3b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function getNamedStatParams() view returns(uint256 gets, uint256 inserts, uint256 mods)
|
||||
func (dB *DB) PackGetNamedStatParams() []byte {
|
||||
|
|
@ -95,6 +106,15 @@ func (dB *DB) PackGetNamedStatParams() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGetNamedStatParams is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe369ba3b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function getNamedStatParams() view returns(uint256 gets, uint256 inserts, uint256 mods)
|
||||
func (dB *DB) TryPackGetNamedStatParams() ([]byte, error) {
|
||||
return dB.abi.Pack("getNamedStatParams")
|
||||
}
|
||||
|
||||
// GetNamedStatParamsOutput serves as a container for the return parameters of contract
|
||||
// method GetNamedStatParams.
|
||||
type GetNamedStatParamsOutput struct {
|
||||
|
|
@ -116,12 +136,12 @@ func (dB *DB) UnpackGetNamedStatParams(data []byte) (GetNamedStatParamsOutput, e
|
|||
outstruct.Gets = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Inserts = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
outstruct.Mods = abi.ConvertType(out[2], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackGetStatParams is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6fcb9c70.
|
||||
// the contract method with ID 0x6fcb9c70. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function getStatParams() view returns(uint256, uint256, uint256)
|
||||
func (dB *DB) PackGetStatParams() []byte {
|
||||
|
|
@ -132,6 +152,15 @@ func (dB *DB) PackGetStatParams() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGetStatParams is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x6fcb9c70. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function getStatParams() view returns(uint256, uint256, uint256)
|
||||
func (dB *DB) TryPackGetStatParams() ([]byte, error) {
|
||||
return dB.abi.Pack("getStatParams")
|
||||
}
|
||||
|
||||
// GetStatParamsOutput serves as a container for the return parameters of contract
|
||||
// method GetStatParams.
|
||||
type GetStatParamsOutput struct {
|
||||
|
|
@ -153,12 +182,12 @@ func (dB *DB) UnpackGetStatParams(data []byte) (GetStatParamsOutput, error) {
|
|||
outstruct.Arg0 = abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
outstruct.Arg1 = abi.ConvertType(out[1], new(big.Int)).(*big.Int)
|
||||
outstruct.Arg2 = abi.ConvertType(out[2], new(big.Int)).(*big.Int)
|
||||
return *outstruct, err
|
||||
|
||||
return *outstruct, nil
|
||||
}
|
||||
|
||||
// PackGetStatsStruct is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xee8161e0.
|
||||
// the contract method with ID 0xee8161e0. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function getStatsStruct() view returns((uint256,uint256,uint256))
|
||||
func (dB *DB) PackGetStatsStruct() []byte {
|
||||
|
|
@ -169,6 +198,15 @@ func (dB *DB) PackGetStatsStruct() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGetStatsStruct is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xee8161e0. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function getStatsStruct() view returns((uint256,uint256,uint256))
|
||||
func (dB *DB) TryPackGetStatsStruct() ([]byte, error) {
|
||||
return dB.abi.Pack("getStatsStruct")
|
||||
}
|
||||
|
||||
// UnpackGetStatsStruct is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xee8161e0.
|
||||
//
|
||||
|
|
@ -179,11 +217,12 @@ func (dB *DB) UnpackGetStatsStruct(data []byte) (DBStats, error) {
|
|||
return *new(DBStats), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new(DBStats)).(*DBStats)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// PackInsert is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x1d834a1b.
|
||||
// the contract method with ID 0x1d834a1b. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function insert(uint256 k, uint256 v) returns(uint256)
|
||||
func (dB *DB) PackInsert(k *big.Int, v *big.Int) []byte {
|
||||
|
|
@ -194,6 +233,15 @@ func (dB *DB) PackInsert(k *big.Int, v *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackInsert is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x1d834a1b. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function insert(uint256 k, uint256 v) returns(uint256)
|
||||
func (dB *DB) TryPackInsert(k *big.Int, v *big.Int) ([]byte, error) {
|
||||
return dB.abi.Pack("insert", k, v)
|
||||
}
|
||||
|
||||
// UnpackInsert is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x1d834a1b.
|
||||
//
|
||||
|
|
@ -204,7 +252,7 @@ func (dB *DB) UnpackInsert(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// DBInsert represents a Insert event raised by the DB contract.
|
||||
|
|
@ -228,7 +276,7 @@ func (DBInsert) ContractEventName() string {
|
|||
// Solidity: event Insert(uint256 key, uint256 value, uint256 length)
|
||||
func (dB *DB) UnpackInsertEvent(log *types.Log) (*DBInsert, error) {
|
||||
event := "Insert"
|
||||
if log.Topics[0] != dB.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dB.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DBInsert)
|
||||
|
|
@ -270,7 +318,7 @@ func (DBKeyedInsert) ContractEventName() string {
|
|||
// Solidity: event KeyedInsert(uint256 indexed key, uint256 value)
|
||||
func (dB *DB) UnpackKeyedInsertEvent(log *types.Log) (*DBKeyedInsert, error) {
|
||||
event := "KeyedInsert"
|
||||
if log.Topics[0] != dB.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != dB.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(DBKeyedInsert)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *C) Instance(backend bind.ContractBackend, addr common.Address) *bind.Bo
|
|||
}
|
||||
|
||||
// PackEmitMulti is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xcb493749.
|
||||
// the contract method with ID 0xcb493749. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function EmitMulti() returns()
|
||||
func (c *C) PackEmitMulti() []byte {
|
||||
|
|
@ -63,8 +64,18 @@ func (c *C) PackEmitMulti() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackEmitMulti is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xcb493749. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function EmitMulti() returns()
|
||||
func (c *C) TryPackEmitMulti() ([]byte, error) {
|
||||
return c.abi.Pack("EmitMulti")
|
||||
}
|
||||
|
||||
// PackEmitOne is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe8e49a71.
|
||||
// the contract method with ID 0xe8e49a71. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function EmitOne() returns()
|
||||
func (c *C) PackEmitOne() []byte {
|
||||
|
|
@ -75,6 +86,15 @@ func (c *C) PackEmitOne() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackEmitOne is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xe8e49a71. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function EmitOne() returns()
|
||||
func (c *C) TryPackEmitOne() ([]byte, error) {
|
||||
return c.abi.Pack("EmitOne")
|
||||
}
|
||||
|
||||
// CBasic1 represents a basic1 event raised by the C contract.
|
||||
type CBasic1 struct {
|
||||
Id *big.Int
|
||||
|
|
@ -95,7 +115,7 @@ func (CBasic1) ContractEventName() string {
|
|||
// Solidity: event basic1(uint256 indexed id, uint256 data)
|
||||
func (c *C) UnpackBasic1Event(log *types.Log) (*CBasic1, error) {
|
||||
event := "basic1"
|
||||
if log.Topics[0] != c.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != c.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(CBasic1)
|
||||
|
|
@ -137,7 +157,7 @@ func (CBasic2) ContractEventName() string {
|
|||
// Solidity: event basic2(bool indexed flag, uint256 data)
|
||||
func (c *C) UnpackBasic2Event(log *types.Log) (*CBasic2, error) {
|
||||
event := "basic2"
|
||||
if log.Topics[0] != c.abi.Events[event].ID {
|
||||
if len(log.Topics) == 0 || log.Topics[0] != c.abi.Events[event].ID {
|
||||
return nil, errors.New("event signature mismatch")
|
||||
}
|
||||
out := new(CBasic2)
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ func (c1 *C1) PackConstructor(v1 *big.Int, v2 *big.Int) []byte {
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256 res)
|
||||
func (c1 *C1) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -79,6 +80,15 @@ func (c1 *C1) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256 res)
|
||||
func (c1 *C1) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return c1.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -89,7 +99,7 @@ func (c1 *C1) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// C2MetaData contains all meta data concerning the C2 contract.
|
||||
|
|
@ -136,7 +146,8 @@ func (c2 *C2) PackConstructor(v1 *big.Int, v2 *big.Int) []byte {
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256 res)
|
||||
func (c2 *C2) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -147,6 +158,15 @@ func (c2 *C2) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256 res)
|
||||
func (c2 *C2) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return c2.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -157,7 +177,7 @@ func (c2 *C2) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// L1MetaData contains all meta data concerning the L1 contract.
|
||||
|
|
@ -188,7 +208,8 @@ func (c *L1) Instance(backend bind.ContractBackend, addr common.Address) *bind.B
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l1 *L1) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -199,6 +220,15 @@ func (l1 *L1) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l1 *L1) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return l1.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -209,7 +239,7 @@ func (l1 *L1) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// L2MetaData contains all meta data concerning the L2 contract.
|
||||
|
|
@ -243,7 +273,8 @@ func (c *L2) Instance(backend bind.ContractBackend, addr common.Address) *bind.B
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l2 *L2) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -254,6 +285,15 @@ func (l2 *L2) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l2 *L2) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return l2.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -264,7 +304,7 @@ func (l2 *L2) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// L2bMetaData contains all meta data concerning the L2b contract.
|
||||
|
|
@ -298,7 +338,8 @@ func (c *L2b) Instance(backend bind.ContractBackend, addr common.Address) *bind.
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l2b *L2b) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -309,6 +350,15 @@ func (l2b *L2b) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l2b *L2b) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return l2b.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -319,7 +369,7 @@ func (l2b *L2b) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// L3MetaData contains all meta data concerning the L3 contract.
|
||||
|
|
@ -350,7 +400,8 @@ func (c *L3) Instance(backend bind.ContractBackend, addr common.Address) *bind.B
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l3 *L3) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -361,6 +412,15 @@ func (l3 *L3) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l3 *L3) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return l3.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -371,7 +431,7 @@ func (l3 *L3) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// L4MetaData contains all meta data concerning the L4 contract.
|
||||
|
|
@ -406,7 +466,8 @@ func (c *L4) Instance(backend bind.ContractBackend, addr common.Address) *bind.B
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l4 *L4) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -417,6 +478,15 @@ func (l4 *L4) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l4 *L4) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return l4.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -427,7 +497,7 @@ func (l4 *L4) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
||||
// L4bMetaData contains all meta data concerning the L4b contract.
|
||||
|
|
@ -461,7 +531,8 @@ func (c *L4b) Instance(backend bind.ContractBackend, addr common.Address) *bind.
|
|||
}
|
||||
|
||||
// PackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272.
|
||||
// the contract method with ID 0x2ad11272. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l4b *L4b) PackDo(val *big.Int) []byte {
|
||||
|
|
@ -472,6 +543,15 @@ func (l4b *L4b) PackDo(val *big.Int) []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackDo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0x2ad11272. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Do(uint256 val) pure returns(uint256)
|
||||
func (l4b *L4b) TryPackDo(val *big.Int) ([]byte, error) {
|
||||
return l4b.abi.Pack("Do", val)
|
||||
}
|
||||
|
||||
// UnpackDo is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0x2ad11272.
|
||||
//
|
||||
|
|
@ -482,5 +562,5 @@ func (l4b *L4b) UnpackDo(data []byte) (*big.Int, error) {
|
|||
return new(big.Int), err
|
||||
}
|
||||
out0 := abi.ConvertType(out[0], new(big.Int)).(*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *C) Instance(backend bind.ContractBackend, addr common.Address) *bind.Bo
|
|||
}
|
||||
|
||||
// PackBar is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xb0a378b0.
|
||||
// the contract method with ID 0xb0a378b0. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Bar() pure returns()
|
||||
func (c *C) PackBar() []byte {
|
||||
|
|
@ -63,8 +64,18 @@ func (c *C) PackBar() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackBar is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xb0a378b0. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Bar() pure returns()
|
||||
func (c *C) TryPackBar() ([]byte, error) {
|
||||
return c.abi.Pack("Bar")
|
||||
}
|
||||
|
||||
// PackFoo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbfb4ebcf.
|
||||
// the contract method with ID 0xbfb4ebcf. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Foo() pure returns()
|
||||
func (c *C) PackFoo() []byte {
|
||||
|
|
@ -75,6 +86,15 @@ func (c *C) PackFoo() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFoo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbfb4ebcf. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Foo() pure returns()
|
||||
func (c *C) TryPackFoo() ([]byte, error) {
|
||||
return c.abi.Pack("Foo")
|
||||
}
|
||||
|
||||
// UnpackError attempts to decode the provided error data using user-defined
|
||||
// error definitions.
|
||||
func (c *C) UnpackError(raw []byte) (any, error) {
|
||||
|
|
@ -169,7 +189,8 @@ func (c *C2) Instance(backend bind.ContractBackend, addr common.Address) *bind.B
|
|||
}
|
||||
|
||||
// PackFoo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbfb4ebcf.
|
||||
// the contract method with ID 0xbfb4ebcf. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function Foo() pure returns()
|
||||
func (c2 *C2) PackFoo() []byte {
|
||||
|
|
@ -180,6 +201,15 @@ func (c2 *C2) PackFoo() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackFoo is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbfb4ebcf. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function Foo() pure returns()
|
||||
func (c2 *C2) TryPackFoo() ([]byte, error) {
|
||||
return c2.abi.Pack("Foo")
|
||||
}
|
||||
|
||||
// UnpackError attempts to decode the provided error data using user-defined
|
||||
// error definitions.
|
||||
func (c2 *C2) UnpackError(raw []byte) (any, error) {
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ func (c *MyContract) Instance(backend bind.ContractBackend, addr common.Address)
|
|||
}
|
||||
|
||||
// PackGetNums is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbd6d1007.
|
||||
// the contract method with ID 0xbd6d1007. This method will panic if any
|
||||
// invalid/nil inputs are passed.
|
||||
//
|
||||
// Solidity: function GetNums() pure returns(uint256[5])
|
||||
func (myContract *MyContract) PackGetNums() []byte {
|
||||
|
|
@ -63,6 +64,15 @@ func (myContract *MyContract) PackGetNums() []byte {
|
|||
return enc
|
||||
}
|
||||
|
||||
// TryPackGetNums is the Go binding used to pack the parameters required for calling
|
||||
// the contract method with ID 0xbd6d1007. This method will return an error
|
||||
// if any inputs are invalid/nil.
|
||||
//
|
||||
// Solidity: function GetNums() pure returns(uint256[5])
|
||||
func (myContract *MyContract) TryPackGetNums() ([]byte, error) {
|
||||
return myContract.abi.Pack("GetNums")
|
||||
}
|
||||
|
||||
// UnpackGetNums is the Go binding that unpacks the parameters returned
|
||||
// from invoking the contract method with ID 0xbd6d1007.
|
||||
//
|
||||
|
|
@ -73,5 +83,5 @@ func (myContract *MyContract) UnpackGetNums(data []byte) ([5]*big.Int, error) {
|
|||
return *new([5]*big.Int), err
|
||||
}
|
||||
out0 := *abi.ConvertType(out[0], new([5]*big.Int)).(*[5]*big.Int)
|
||||
return out0, err
|
||||
return out0, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ package bind
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum"
|
||||
"github.com/ethereum/go-ethereum/accounts/abi"
|
||||
|
|
@ -241,3 +242,27 @@ func DefaultDeployer(opts *TransactOpts, backend ContractBackend) DeployFn {
|
|||
return addr, tx, nil
|
||||
}
|
||||
}
|
||||
|
||||
// DeployerWithNonceAssignment is basically identical to DefaultDeployer,
|
||||
// but it additionally tracks the nonce to enable automatic assignment.
|
||||
//
|
||||
// This is especially useful when deploying multiple contracts
|
||||
// from the same address — whether they are independent contracts
|
||||
// or part of a dependency chain that must be deployed in order.
|
||||
func DeployerWithNonceAssignment(opts *TransactOpts, backend ContractBackend) DeployFn {
|
||||
var pendingNonce int64
|
||||
if opts.Nonce != nil {
|
||||
pendingNonce = opts.Nonce.Int64()
|
||||
}
|
||||
return func(input []byte, deployer []byte) (common.Address, *types.Transaction, error) {
|
||||
if pendingNonce != 0 {
|
||||
opts.Nonce = big.NewInt(pendingNonce)
|
||||
}
|
||||
addr, tx, err := DeployContract(opts, deployer, backend, input)
|
||||
if err != nil {
|
||||
return common.Address{}, nil, err
|
||||
}
|
||||
pendingNonce = int64(tx.Nonce() + 1)
|
||||
return addr, tx, nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,6 +65,14 @@ func makeTestDeployer(backend simulated.Client) func(input, deployer []byte) (co
|
|||
return bind.DefaultDeployer(bind.NewKeyedTransactor(testKey, chainId), backend)
|
||||
}
|
||||
|
||||
// makeTestDeployerWithNonceAssignment is similar to makeTestDeployer,
|
||||
// but it returns a deployer that automatically tracks nonce,
|
||||
// enabling the deployment of multiple contracts from the same account.
|
||||
func makeTestDeployerWithNonceAssignment(backend simulated.Client) func(input, deployer []byte) (common.Address, *types.Transaction, error) {
|
||||
chainId, _ := backend.ChainID(context.Background())
|
||||
return bind.DeployerWithNonceAssignment(bind.NewKeyedTransactor(testKey, chainId), backend)
|
||||
}
|
||||
|
||||
// test that deploying a contract with library dependencies works,
|
||||
// verifying by calling method on the deployed contract.
|
||||
func TestDeploymentLibraries(t *testing.T) {
|
||||
|
|
@ -80,7 +88,7 @@ func TestDeploymentLibraries(t *testing.T) {
|
|||
Contracts: []*bind.MetaData{&nested_libraries.C1MetaData},
|
||||
Inputs: map[string][]byte{nested_libraries.C1MetaData.ID: constructorInput},
|
||||
}
|
||||
res, err := bind.LinkAndDeploy(deploymentParams, makeTestDeployer(bindBackend.Client))
|
||||
res, err := bind.LinkAndDeploy(deploymentParams, makeTestDeployerWithNonceAssignment(bindBackend.Client))
|
||||
if err != nil {
|
||||
t.Fatalf("err: %+v\n", err)
|
||||
}
|
||||
|
|
@ -122,7 +130,7 @@ func TestDeploymentWithOverrides(t *testing.T) {
|
|||
deploymentParams := &bind.DeploymentParams{
|
||||
Contracts: nested_libraries.C1MetaData.Deps,
|
||||
}
|
||||
res, err := bind.LinkAndDeploy(deploymentParams, makeTestDeployer(bindBackend))
|
||||
res, err := bind.LinkAndDeploy(deploymentParams, makeTestDeployerWithNonceAssignment(bindBackend))
|
||||
if err != nil {
|
||||
t.Fatalf("err: %+v\n", err)
|
||||
}
|
||||
|
|
@ -359,3 +367,28 @@ func TestErrors(t *testing.T) {
|
|||
t.Fatalf("bad unpacked error result: expected Arg4 to be false. got true")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventUnpackEmptyTopics(t *testing.T) {
|
||||
c := events.NewC()
|
||||
|
||||
for _, log := range []*types.Log{
|
||||
{Topics: []common.Hash{}},
|
||||
{Topics: nil},
|
||||
} {
|
||||
_, err := c.UnpackBasic1Event(log)
|
||||
if err == nil {
|
||||
t.Fatal("expected error when unpacking event with empty topics, got nil")
|
||||
}
|
||||
if err.Error() != "event signature mismatch" {
|
||||
t.Fatalf("expected 'event signature mismatch' error, got: %v", err)
|
||||
}
|
||||
|
||||
_, err = c.UnpackBasic2Event(log)
|
||||
if err == nil {
|
||||
t.Fatal("expected error when unpacking event with empty topics, got nil")
|
||||
}
|
||||
if err.Error() != "event signature mismatch" {
|
||||
t.Fatalf("expected 'event signature mismatch' error, got: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,22 +100,29 @@ func TestWaitDeployed(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestWaitDeployedCornerCases(t *testing.T) {
|
||||
backend := simulated.NewBackend(
|
||||
types.GenesisAlloc{
|
||||
crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)},
|
||||
},
|
||||
var (
|
||||
backend = simulated.NewBackend(
|
||||
types.GenesisAlloc{
|
||||
crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)},
|
||||
},
|
||||
)
|
||||
head, _ = backend.Client().HeaderByNumber(t.Context(), nil) // Should be child's, good enough
|
||||
gasPrice = new(big.Int).Add(head.BaseFee, big.NewInt(1))
|
||||
signer = types.LatestSigner(params.AllDevChainProtocolChanges)
|
||||
code = common.FromHex("6060604052600a8060106000396000f360606040526008565b00")
|
||||
ctx, cancel = context.WithCancel(t.Context())
|
||||
)
|
||||
defer backend.Close()
|
||||
|
||||
head, _ := backend.Client().HeaderByNumber(context.Background(), nil) // Should be child's, good enough
|
||||
gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1))
|
||||
|
||||
// Create a transaction to an account.
|
||||
code := "6060604052600a8060106000396000f360606040526008565b00"
|
||||
tx := types.NewTransaction(0, common.HexToAddress("0x01"), big.NewInt(0), 3000000, gasPrice, common.FromHex(code))
|
||||
tx, _ = types.SignTx(tx, types.LatestSigner(params.AllDevChainProtocolChanges), testKey)
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
// 1. WaitDeploy on a transaction that does not deploy a contract, verify it
|
||||
// returns an error.
|
||||
tx := types.MustSignNewTx(testKey, signer, &types.LegacyTx{
|
||||
Nonce: 0,
|
||||
To: &common.Address{0x01},
|
||||
Gas: 300000,
|
||||
GasPrice: gasPrice,
|
||||
Data: code,
|
||||
})
|
||||
if err := backend.Client().SendTransaction(ctx, tx); err != nil {
|
||||
t.Errorf("failed to send transaction: %q", err)
|
||||
}
|
||||
|
|
@ -124,14 +131,22 @@ func TestWaitDeployedCornerCases(t *testing.T) {
|
|||
t.Errorf("error mismatch: want %q, got %q, ", bind.ErrNoAddressInReceipt, err)
|
||||
}
|
||||
|
||||
// Create a transaction that is not mined.
|
||||
tx = types.NewContractCreation(1, big.NewInt(0), 3000000, gasPrice, common.FromHex(code))
|
||||
tx, _ = types.SignTx(tx, types.LatestSigner(params.AllDevChainProtocolChanges), testKey)
|
||||
// 2. Create a contract, but cancel the WaitDeploy before it is mined.
|
||||
tx = types.MustSignNewTx(testKey, signer, &types.LegacyTx{
|
||||
Nonce: 1,
|
||||
Gas: 300000,
|
||||
GasPrice: gasPrice,
|
||||
Data: code,
|
||||
})
|
||||
|
||||
// Wait in another thread so that we can quickly cancel it after submitting
|
||||
// the transaction.
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
contextCanceled := errors.New("context canceled")
|
||||
if _, err := bind.WaitDeployed(ctx, backend.Client(), tx.Hash()); err.Error() != contextCanceled.Error() {
|
||||
t.Errorf("error mismatch: want %q, got %q, ", contextCanceled, err)
|
||||
defer close(done)
|
||||
_, err := bind.WaitDeployed(ctx, backend.Client(), tx.Hash())
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
t.Errorf("error mismatch: want %v, got %v", context.Canceled, err)
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
@ -139,4 +154,11 @@ func TestWaitDeployedCornerCases(t *testing.T) {
|
|||
t.Errorf("failed to send transaction: %q", err)
|
||||
}
|
||||
cancel()
|
||||
|
||||
// Wait for goroutine to exit or for a timeout.
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(time.Second * 2):
|
||||
t.Fatalf("failed to cancel wait deploy")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,15 +23,16 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
errBadBool = errors.New("abi: improperly encoded boolean value")
|
||||
errBadUint8 = errors.New("abi: improperly encoded uint8 value")
|
||||
errBadUint16 = errors.New("abi: improperly encoded uint16 value")
|
||||
errBadUint32 = errors.New("abi: improperly encoded uint32 value")
|
||||
errBadUint64 = errors.New("abi: improperly encoded uint64 value")
|
||||
errBadInt8 = errors.New("abi: improperly encoded int8 value")
|
||||
errBadInt16 = errors.New("abi: improperly encoded int16 value")
|
||||
errBadInt32 = errors.New("abi: improperly encoded int32 value")
|
||||
errBadInt64 = errors.New("abi: improperly encoded int64 value")
|
||||
errBadBool = errors.New("abi: improperly encoded boolean value")
|
||||
errBadUint8 = errors.New("abi: improperly encoded uint8 value")
|
||||
errBadUint16 = errors.New("abi: improperly encoded uint16 value")
|
||||
errBadUint32 = errors.New("abi: improperly encoded uint32 value")
|
||||
errBadUint64 = errors.New("abi: improperly encoded uint64 value")
|
||||
errBadInt8 = errors.New("abi: improperly encoded int8 value")
|
||||
errBadInt16 = errors.New("abi: improperly encoded int16 value")
|
||||
errBadInt32 = errors.New("abi: improperly encoded int32 value")
|
||||
errBadInt64 = errors.New("abi: improperly encoded int64 value")
|
||||
errInvalidSign = errors.New("abi: negatively-signed value cannot be packed into uint parameter")
|
||||
)
|
||||
|
||||
// formatSliceString formats the reflection kind with the given slice size
|
||||
|
|
|
|||
|
|
@ -37,7 +37,16 @@ func packBytesSlice(bytes []byte, l int) []byte {
|
|||
// t.
|
||||
func packElement(t Type, reflectValue reflect.Value) ([]byte, error) {
|
||||
switch t.T {
|
||||
case IntTy, UintTy:
|
||||
case UintTy:
|
||||
// make sure to not pack a negative value into a uint type.
|
||||
if reflectValue.Kind() == reflect.Ptr {
|
||||
val := new(big.Int).Set(reflectValue.Interface().(*big.Int))
|
||||
if val.Sign() == -1 {
|
||||
return nil, errInvalidSign
|
||||
}
|
||||
}
|
||||
return packNum(reflectValue), nil
|
||||
case IntTy:
|
||||
return packNum(reflectValue), nil
|
||||
case StringTy:
|
||||
return packBytesSlice([]byte(reflectValue.String()), reflectValue.Len()), nil
|
||||
|
|
|
|||
|
|
@ -177,6 +177,11 @@ func TestMethodPack(t *testing.T) {
|
|||
if !bytes.Equal(packed, sig) {
|
||||
t.Errorf("expected %x got %x", sig, packed)
|
||||
}
|
||||
|
||||
// test that we can't pack a negative value for a parameter that is specified as a uint
|
||||
if _, err := abi.Pack("send", big.NewInt(-1)); err == nil {
|
||||
t.Fatal("expected error when trying to pack negative big.Int into uint256 value")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPackNumber(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ func ConvertType(in interface{}, proto interface{}) interface{} {
|
|||
// indirect recursively dereferences the value until it either gets the value
|
||||
// or finds a big.Int
|
||||
func indirect(v reflect.Value) reflect.Value {
|
||||
if v.Kind() == reflect.Ptr && v.Elem().Type() != reflect.TypeOf(big.Int{}) {
|
||||
if v.Kind() == reflect.Ptr && v.Elem().Type() != reflect.TypeFor[big.Int]() {
|
||||
return indirect(v.Elem())
|
||||
}
|
||||
return v
|
||||
|
|
@ -65,32 +65,32 @@ func reflectIntType(unsigned bool, size int) reflect.Type {
|
|||
if unsigned {
|
||||
switch size {
|
||||
case 8:
|
||||
return reflect.TypeOf(uint8(0))
|
||||
return reflect.TypeFor[uint8]()
|
||||
case 16:
|
||||
return reflect.TypeOf(uint16(0))
|
||||
return reflect.TypeFor[uint16]()
|
||||
case 32:
|
||||
return reflect.TypeOf(uint32(0))
|
||||
return reflect.TypeFor[uint32]()
|
||||
case 64:
|
||||
return reflect.TypeOf(uint64(0))
|
||||
return reflect.TypeFor[uint64]()
|
||||
}
|
||||
}
|
||||
switch size {
|
||||
case 8:
|
||||
return reflect.TypeOf(int8(0))
|
||||
return reflect.TypeFor[int8]()
|
||||
case 16:
|
||||
return reflect.TypeOf(int16(0))
|
||||
return reflect.TypeFor[int16]()
|
||||
case 32:
|
||||
return reflect.TypeOf(int32(0))
|
||||
return reflect.TypeFor[int32]()
|
||||
case 64:
|
||||
return reflect.TypeOf(int64(0))
|
||||
return reflect.TypeFor[int64]()
|
||||
}
|
||||
return reflect.TypeOf(&big.Int{})
|
||||
return reflect.TypeFor[*big.Int]()
|
||||
}
|
||||
|
||||
// mustArrayToByteSlice creates a new byte slice with the exact same size as value
|
||||
// and copies the bytes in value to the new slice.
|
||||
func mustArrayToByteSlice(value reflect.Value) reflect.Value {
|
||||
slice := reflect.MakeSlice(reflect.TypeOf([]byte{}), value.Len(), value.Len())
|
||||
slice := reflect.ValueOf(make([]byte, value.Len()))
|
||||
reflect.Copy(slice, value)
|
||||
return slice
|
||||
}
|
||||
|
|
@ -104,7 +104,7 @@ func set(dst, src reflect.Value) error {
|
|||
switch {
|
||||
case dstType.Kind() == reflect.Interface && dst.Elem().IsValid() && (dst.Elem().Type().Kind() == reflect.Ptr || dst.Elem().CanSet()):
|
||||
return set(dst.Elem(), src)
|
||||
case dstType.Kind() == reflect.Ptr && dstType.Elem() != reflect.TypeOf(big.Int{}):
|
||||
case dstType.Kind() == reflect.Ptr && dstType.Elem() != reflect.TypeFor[big.Int]():
|
||||
return set(dst.Elem(), src)
|
||||
case srcType.AssignableTo(dstType) && dst.CanSet():
|
||||
dst.Set(src)
|
||||
|
|
|
|||
|
|
@ -204,12 +204,12 @@ func TestConvertType(t *testing.T) {
|
|||
var fields []reflect.StructField
|
||||
fields = append(fields, reflect.StructField{
|
||||
Name: "X",
|
||||
Type: reflect.TypeOf(new(big.Int)),
|
||||
Type: reflect.TypeFor[*big.Int](),
|
||||
Tag: "json:\"" + "x" + "\"",
|
||||
})
|
||||
fields = append(fields, reflect.StructField{
|
||||
Name: "Y",
|
||||
Type: reflect.TypeOf(new(big.Int)),
|
||||
Type: reflect.TypeFor[*big.Int](),
|
||||
Tag: "json:\"" + "y" + "\"",
|
||||
})
|
||||
val := reflect.New(reflect.StructOf(fields))
|
||||
|
|
|
|||
|
|
@ -238,9 +238,9 @@ func (t Type) GetType() reflect.Type {
|
|||
case UintTy:
|
||||
return reflectIntType(true, t.Size)
|
||||
case BoolTy:
|
||||
return reflect.TypeOf(false)
|
||||
return reflect.TypeFor[bool]()
|
||||
case StringTy:
|
||||
return reflect.TypeOf("")
|
||||
return reflect.TypeFor[string]()
|
||||
case SliceTy:
|
||||
return reflect.SliceOf(t.Elem.GetType())
|
||||
case ArrayTy:
|
||||
|
|
@ -248,19 +248,15 @@ func (t Type) GetType() reflect.Type {
|
|||
case TupleTy:
|
||||
return t.TupleType
|
||||
case AddressTy:
|
||||
return reflect.TypeOf(common.Address{})
|
||||
return reflect.TypeFor[common.Address]()
|
||||
case FixedBytesTy:
|
||||
return reflect.ArrayOf(t.Size, reflect.TypeOf(byte(0)))
|
||||
return reflect.ArrayOf(t.Size, reflect.TypeFor[byte]())
|
||||
case BytesTy:
|
||||
return reflect.SliceOf(reflect.TypeOf(byte(0)))
|
||||
case HashTy:
|
||||
// hashtype currently not used
|
||||
return reflect.ArrayOf(32, reflect.TypeOf(byte(0)))
|
||||
case FixedPointTy:
|
||||
// fixedpoint type currently not used
|
||||
return reflect.ArrayOf(32, reflect.TypeOf(byte(0)))
|
||||
return reflect.TypeFor[[]byte]()
|
||||
case HashTy, FixedPointTy: // currently not used
|
||||
return reflect.TypeFor[[32]byte]()
|
||||
case FunctionTy:
|
||||
return reflect.ArrayOf(24, reflect.TypeOf(byte(0)))
|
||||
return reflect.TypeFor[[24]byte]()
|
||||
default:
|
||||
panic("Invalid type")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1014,128 +1014,134 @@ func TestPackAndUnpackIncompatibleNumber(t *testing.T) {
|
|||
cases := []struct {
|
||||
decodeType string
|
||||
inputValue *big.Int
|
||||
err error
|
||||
unpackErr error
|
||||
packErr error
|
||||
expectValue interface{}
|
||||
}{
|
||||
{
|
||||
decodeType: "uint8",
|
||||
inputValue: big.NewInt(math.MaxUint8 + 1),
|
||||
err: errBadUint8,
|
||||
unpackErr: errBadUint8,
|
||||
},
|
||||
{
|
||||
decodeType: "uint8",
|
||||
inputValue: big.NewInt(math.MaxUint8),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: uint8(math.MaxUint8),
|
||||
},
|
||||
{
|
||||
decodeType: "uint16",
|
||||
inputValue: big.NewInt(math.MaxUint16 + 1),
|
||||
err: errBadUint16,
|
||||
unpackErr: errBadUint16,
|
||||
},
|
||||
{
|
||||
decodeType: "uint16",
|
||||
inputValue: big.NewInt(math.MaxUint16),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: uint16(math.MaxUint16),
|
||||
},
|
||||
{
|
||||
decodeType: "uint32",
|
||||
inputValue: big.NewInt(math.MaxUint32 + 1),
|
||||
err: errBadUint32,
|
||||
unpackErr: errBadUint32,
|
||||
},
|
||||
{
|
||||
decodeType: "uint32",
|
||||
inputValue: big.NewInt(math.MaxUint32),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: uint32(math.MaxUint32),
|
||||
},
|
||||
{
|
||||
decodeType: "uint64",
|
||||
inputValue: maxU64Plus1,
|
||||
err: errBadUint64,
|
||||
unpackErr: errBadUint64,
|
||||
},
|
||||
{
|
||||
decodeType: "uint64",
|
||||
inputValue: maxU64,
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: uint64(math.MaxUint64),
|
||||
},
|
||||
{
|
||||
decodeType: "uint256",
|
||||
inputValue: maxU64Plus1,
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: maxU64Plus1,
|
||||
},
|
||||
{
|
||||
decodeType: "int8",
|
||||
inputValue: big.NewInt(math.MaxInt8 + 1),
|
||||
err: errBadInt8,
|
||||
unpackErr: errBadInt8,
|
||||
},
|
||||
{
|
||||
decodeType: "int8",
|
||||
inputValue: big.NewInt(math.MinInt8 - 1),
|
||||
err: errBadInt8,
|
||||
packErr: errInvalidSign,
|
||||
},
|
||||
{
|
||||
decodeType: "int8",
|
||||
inputValue: big.NewInt(math.MaxInt8),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: int8(math.MaxInt8),
|
||||
},
|
||||
{
|
||||
decodeType: "int16",
|
||||
inputValue: big.NewInt(math.MaxInt16 + 1),
|
||||
err: errBadInt16,
|
||||
unpackErr: errBadInt16,
|
||||
},
|
||||
{
|
||||
decodeType: "int16",
|
||||
inputValue: big.NewInt(math.MinInt16 - 1),
|
||||
err: errBadInt16,
|
||||
packErr: errInvalidSign,
|
||||
},
|
||||
{
|
||||
decodeType: "int16",
|
||||
inputValue: big.NewInt(math.MaxInt16),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: int16(math.MaxInt16),
|
||||
},
|
||||
{
|
||||
decodeType: "int32",
|
||||
inputValue: big.NewInt(math.MaxInt32 + 1),
|
||||
err: errBadInt32,
|
||||
unpackErr: errBadInt32,
|
||||
},
|
||||
{
|
||||
decodeType: "int32",
|
||||
inputValue: big.NewInt(math.MinInt32 - 1),
|
||||
err: errBadInt32,
|
||||
packErr: errInvalidSign,
|
||||
},
|
||||
{
|
||||
decodeType: "int32",
|
||||
inputValue: big.NewInt(math.MaxInt32),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: int32(math.MaxInt32),
|
||||
},
|
||||
{
|
||||
decodeType: "int64",
|
||||
inputValue: new(big.Int).Add(big.NewInt(math.MaxInt64), big.NewInt(1)),
|
||||
err: errBadInt64,
|
||||
unpackErr: errBadInt64,
|
||||
},
|
||||
{
|
||||
decodeType: "int64",
|
||||
inputValue: new(big.Int).Sub(big.NewInt(math.MinInt64), big.NewInt(1)),
|
||||
err: errBadInt64,
|
||||
packErr: errInvalidSign,
|
||||
},
|
||||
{
|
||||
decodeType: "int64",
|
||||
inputValue: big.NewInt(math.MaxInt64),
|
||||
err: nil,
|
||||
unpackErr: nil,
|
||||
expectValue: int64(math.MaxInt64),
|
||||
},
|
||||
}
|
||||
for i, testCase := range cases {
|
||||
packed, err := encodeABI.Pack(testCase.inputValue)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
if testCase.packErr != nil {
|
||||
if err == nil {
|
||||
t.Fatalf("expected packing of testcase input value to fail")
|
||||
}
|
||||
if err != testCase.packErr {
|
||||
t.Fatalf("expected error '%v', got '%v'", testCase.packErr, err)
|
||||
}
|
||||
continue
|
||||
}
|
||||
if err != nil && err != testCase.packErr {
|
||||
panic(fmt.Errorf("unexpected error packing test-case input: %v", err))
|
||||
}
|
||||
ty, err := NewType(testCase.decodeType, "", nil)
|
||||
if err != nil {
|
||||
|
|
@ -1145,8 +1151,8 @@ func TestPackAndUnpackIncompatibleNumber(t *testing.T) {
|
|||
{Type: ty},
|
||||
}
|
||||
decoded, err := decodeABI.Unpack(packed)
|
||||
if err != testCase.err {
|
||||
t.Fatalf("Expected error %v, actual error %v. case %d", testCase.err, err, i)
|
||||
if err != testCase.unpackErr {
|
||||
t.Fatalf("Expected error %v, actual error %v. case %d", testCase.unpackErr, err, i)
|
||||
}
|
||||
if err != nil {
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ import (
|
|||
"github.com/ethereum/go-ethereum"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/crypto/keccak"
|
||||
"github.com/ethereum/go-ethereum/event"
|
||||
"golang.org/x/crypto/sha3"
|
||||
)
|
||||
|
||||
// Account represents an Ethereum account located at a specific location defined
|
||||
|
|
@ -196,7 +196,7 @@ func TextHash(data []byte) []byte {
|
|||
// This gives context to the signed message and prevents signing of transactions.
|
||||
func TextAndHash(data []byte) ([]byte, string) {
|
||||
msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data)
|
||||
hasher := sha3.NewLegacyKeccak256()
|
||||
hasher := keccak.NewLegacyKeccak256()
|
||||
hasher.Write([]byte(msg))
|
||||
return hasher.Sum(nil), msg
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
// Package keystore implements encrypted storage of secp256k1 private keys.
|
||||
//
|
||||
// Keys are stored as encrypted JSON files according to the Web3 Secret Storage specification.
|
||||
// See https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition for more information.
|
||||
// See https://ethereum.org/en/developers/docs/data-structures-and-encoding/web3-secret-storage/ for more information.
|
||||
package keystore
|
||||
|
||||
import (
|
||||
|
|
@ -50,7 +50,7 @@ var (
|
|||
)
|
||||
|
||||
// KeyStoreType is the reflect type of a keystore backend.
|
||||
var KeyStoreType = reflect.TypeOf(&KeyStore{})
|
||||
var KeyStoreType = reflect.TypeFor[*KeyStore]()
|
||||
|
||||
// KeyStoreScheme is the protocol scheme prefixing account and wallet URLs.
|
||||
const KeyStoreScheme = "keystore"
|
||||
|
|
@ -99,9 +99,10 @@ func (ks *KeyStore) init(keydir string) {
|
|||
// TODO: In order for this finalizer to work, there must be no references
|
||||
// to ks. addressCache doesn't keep a reference but unlocked keys do,
|
||||
// so the finalizer will not trigger until all timed unlocks have expired.
|
||||
runtime.SetFinalizer(ks, func(m *KeyStore) {
|
||||
m.cache.close()
|
||||
})
|
||||
runtime.AddCleanup(ks, func(c *accountCache) {
|
||||
c.close()
|
||||
}, ks.cache)
|
||||
|
||||
// Create the initial list of wallets from the cache
|
||||
accs := ks.cache.accounts()
|
||||
ks.wallets = make([]accounts.Wallet, len(accs))
|
||||
|
|
@ -195,11 +196,14 @@ func (ks *KeyStore) Subscribe(sink chan<- accounts.WalletEvent) event.Subscripti
|
|||
// forces a manual refresh (only triggers for systems where the filesystem notifier
|
||||
// is not running).
|
||||
func (ks *KeyStore) updater() {
|
||||
ticker := time.NewTicker(walletRefreshCycle)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
// Wait for an account update or a refresh timeout
|
||||
select {
|
||||
case <-ks.changes:
|
||||
case <-time.After(walletRefreshCycle):
|
||||
case <-ticker.C:
|
||||
}
|
||||
// Run the wallet refresher
|
||||
ks.refreshWallets()
|
||||
|
|
@ -414,6 +418,7 @@ func (ks *KeyStore) Export(a accounts.Account, passphrase, newPassphrase string)
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer zeroKey(key.PrivateKey)
|
||||
var N, P int
|
||||
if store, ok := ks.storage.(*keyStorePassphrase); ok {
|
||||
N, P = store.scryptN, store.scryptP
|
||||
|
|
@ -473,6 +478,7 @@ func (ks *KeyStore) Update(a accounts.Account, passphrase, newPassphrase string)
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer zeroKey(key.PrivateKey)
|
||||
return ks.storage.StoreKey(a.URL.Path, key, newPassphrase)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
This key store behaves as KeyStorePlain with the difference that
|
||||
the private key is encrypted and on disk uses another JSON encoding.
|
||||
|
||||
The crypto is documented at https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition
|
||||
The crypto is documented at https://ethereum.org/en/developers/docs/data-structures-and-encoding/web3-secret-storage/
|
||||
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,9 @@ func decryptPreSaleKey(fileContent []byte, password string) (key *Key, err error
|
|||
*/
|
||||
passBytes := []byte(password)
|
||||
derivedKey := pbkdf2.Key(passBytes, passBytes, 2000, 16, sha256.New)
|
||||
if len(cipherText)%aes.BlockSize != 0 {
|
||||
return nil, errors.New("ciphertext must be a multiple of block size")
|
||||
}
|
||||
plainText, err := aesCBCDecrypt(derivedKey, cipherText, iv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
|||
|
|
@ -93,9 +93,6 @@ func NewManager(config *Config, backends ...Backend) *Manager {
|
|||
|
||||
// Close terminates the account manager's internal notification processes.
|
||||
func (am *Manager) Close() error {
|
||||
for _, w := range am.wallets {
|
||||
w.Close()
|
||||
}
|
||||
errc := make(chan error)
|
||||
am.quit <- errc
|
||||
return <-errc
|
||||
|
|
@ -149,6 +146,10 @@ func (am *Manager) update() {
|
|||
am.lock.Unlock()
|
||||
close(event.processed)
|
||||
case errc := <-am.quit:
|
||||
// Close all owned wallets
|
||||
for _, w := range am.wallets {
|
||||
w.Close()
|
||||
}
|
||||
// Manager terminating, return
|
||||
errc <- nil
|
||||
// Signals event emitters the loop is not receiving values
|
||||
|
|
|
|||
|
|
@ -300,6 +300,10 @@ func (s *SecureChannelSession) decryptAPDU(data []byte) ([]byte, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if len(data) == 0 || len(data)%aes.BlockSize != 0 {
|
||||
return nil, fmt.Errorf("invalid ciphertext length: %d", len(data))
|
||||
}
|
||||
|
||||
ret := make([]byte, len(data))
|
||||
|
||||
crypter := cipher.NewCBCDecrypter(a, s.iv)
|
||||
|
|
|
|||
|
|
@ -472,6 +472,11 @@ func (w *Wallet) selfDerive() {
|
|||
continue
|
||||
}
|
||||
pairing := w.Hub.pairing(w)
|
||||
if pairing == nil {
|
||||
w.lock.Unlock()
|
||||
reqc <- struct{}{}
|
||||
continue
|
||||
}
|
||||
|
||||
// Device lock obtained, derive the next batch of accounts
|
||||
var (
|
||||
|
|
@ -631,13 +636,13 @@ func (w *Wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Accoun
|
|||
}
|
||||
|
||||
if pin {
|
||||
pairing := w.Hub.pairing(w)
|
||||
pairing.Accounts[account.Address] = path
|
||||
if err := w.Hub.setPairing(w, pairing); err != nil {
|
||||
return accounts.Account{}, err
|
||||
if pairing := w.Hub.pairing(w); pairing != nil {
|
||||
pairing.Accounts[account.Address] = path
|
||||
if err := w.Hub.setPairing(w, pairing); err != nil {
|
||||
return accounts.Account{}, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return account, nil
|
||||
}
|
||||
|
||||
|
|
@ -774,11 +779,11 @@ func (w *Wallet) SignTxWithPassphrase(account accounts.Account, passphrase strin
|
|||
// It first checks for the address in the list of pinned accounts, and if it is
|
||||
// not found, attempts to parse the derivation path from the account's URL.
|
||||
func (w *Wallet) findAccountPath(account accounts.Account) (accounts.DerivationPath, error) {
|
||||
pairing := w.Hub.pairing(w)
|
||||
if path, ok := pairing.Accounts[account.Address]; ok {
|
||||
return path, nil
|
||||
if pairing := w.Hub.pairing(w); pairing != nil {
|
||||
if path, ok := pairing.Accounts[account.Address]; ok {
|
||||
return path, nil
|
||||
}
|
||||
}
|
||||
|
||||
// Look for the path in the URL
|
||||
if account.URL.Scheme != w.Hub.scheme {
|
||||
return nil, fmt.Errorf("scheme %s does not match wallet scheme %s", account.URL.Scheme, w.Hub.scheme)
|
||||
|
|
|
|||
|
|
@ -43,6 +43,14 @@ const refreshCycle = time.Second
|
|||
// trashing.
|
||||
const refreshThrottling = 500 * time.Millisecond
|
||||
|
||||
const (
|
||||
// deviceUsagePage identifies Ledger devices by HID usage page (0xffa0) on Windows and macOS.
|
||||
// See: https://github.com/LedgerHQ/ledger-live/blob/05a2980e838955a11a1418da638ef8ac3df4fb74/libs/ledgerjs/packages/hw-transport-node-hid-noevents/src/TransportNodeHid.ts
|
||||
deviceUsagePage = 0xffa0
|
||||
// deviceInterface identifies Ledger devices by USB interface number (0) on Linux.
|
||||
deviceInterface = 0
|
||||
)
|
||||
|
||||
// Hub is a accounts.Backend that can find and handle generic USB hardware wallets.
|
||||
type Hub struct {
|
||||
scheme string // Protocol scheme prefixing account and wallet URLs.
|
||||
|
|
@ -82,6 +90,7 @@ func NewLedgerHub() (*Hub, error) {
|
|||
0x0005, /* Ledger Nano S Plus */
|
||||
0x0006, /* Ledger Nano FTS */
|
||||
0x0007, /* Ledger Flex */
|
||||
0x0008, /* Ledger Nano Gen5 */
|
||||
|
||||
0x0000, /* WebUSB Ledger Blue */
|
||||
0x1000, /* WebUSB Ledger Nano S */
|
||||
|
|
@ -89,7 +98,8 @@ func NewLedgerHub() (*Hub, error) {
|
|||
0x5000, /* WebUSB Ledger Nano S Plus */
|
||||
0x6000, /* WebUSB Ledger Nano FTS */
|
||||
0x7000, /* WebUSB Ledger Flex */
|
||||
}, 0xffa0, 0, newLedgerDriver)
|
||||
0x8000, /* WebUSB Ledger Nano Gen5 */
|
||||
}, deviceUsagePage, deviceInterface, newLedgerDriver)
|
||||
}
|
||||
|
||||
// NewTrezorHubWithHID creates a new hardware wallet manager for Trezor devices.
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ func (w *ledgerDriver) SignTx(path accounts.DerivationPath, tx *types.Transactio
|
|||
return common.Address{}, nil, accounts.ErrWalletClosed
|
||||
}
|
||||
// Ensure the wallet is capable of signing the given transaction
|
||||
if chainID != nil && w.version[0] <= 1 && w.version[1] <= 0 && w.version[2] <= 2 {
|
||||
if chainID != nil && (w.version[0] < 1 || (w.version[0] == 1 && w.version[1] == 0 && w.version[2] < 3)) {
|
||||
//lint:ignore ST1005 brand name displayed on the console
|
||||
return common.Address{}, nil, fmt.Errorf("Ledger v%d.%d.%d doesn't support signing this transaction, please update to v1.0.3 at least", w.version[0], w.version[1], w.version[2])
|
||||
}
|
||||
|
|
@ -184,7 +184,7 @@ func (w *ledgerDriver) SignTypedMessage(path accounts.DerivationPath, domainHash
|
|||
return nil, accounts.ErrWalletClosed
|
||||
}
|
||||
// Ensure the wallet is capable of signing the given transaction
|
||||
if w.version[0] < 1 && w.version[1] < 5 {
|
||||
if w.version[0] < 1 || (w.version[0] == 1 && w.version[1] < 5) {
|
||||
//lint:ignore ST1005 brand name displayed on the console
|
||||
return nil, fmt.Errorf("Ledger version >= 1.5.0 required for EIP-712 signing (found version v%d.%d.%d)", w.version[0], w.version[1], w.version[2])
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/accounts"
|
||||
|
|
@ -249,7 +250,11 @@ func (w *trezorDriver) trezorSign(derivationPath []uint32, tx *types.Transaction
|
|||
}
|
||||
}
|
||||
// Extract the Ethereum signature and do a sanity validation
|
||||
if len(response.GetSignatureR()) == 0 || len(response.GetSignatureS()) == 0 || response.GetSignatureV() == 0 {
|
||||
if len(response.GetSignatureR()) == 0 || len(response.GetSignatureS()) == 0 {
|
||||
return common.Address{}, nil, errors.New("reply lacks signature")
|
||||
} else if response.GetSignatureV() == 0 && int(chainID.Int64()) <= (math.MaxUint32-36)/2 {
|
||||
// for chainId >= (MaxUint32-36)/2, Trezor returns signature bit only
|
||||
// https://github.com/trezor/trezor-mcu/pull/399
|
||||
return common.Address{}, nil, errors.New("reply lacks signature")
|
||||
}
|
||||
signature := append(append(response.GetSignatureR(), response.GetSignatureS()...), byte(response.GetSignatureV()))
|
||||
|
|
@ -261,7 +266,11 @@ func (w *trezorDriver) trezorSign(derivationPath []uint32, tx *types.Transaction
|
|||
} else {
|
||||
// Trezor backend does not support typed transactions yet.
|
||||
signer = types.NewEIP155Signer(chainID)
|
||||
signature[64] -= byte(chainID.Uint64()*2 + 35)
|
||||
// if chainId is above (MaxUint32 - 36) / 2 then the final v values is returned
|
||||
// directly. Otherwise, the returned value is 35 + chainid * 2.
|
||||
if signature[64] > 1 && int(chainID.Int64()) <= (math.MaxUint32-36)/2 {
|
||||
signature[64] -= byte(chainID.Uint64()*2 + 35)
|
||||
}
|
||||
}
|
||||
|
||||
// Inject the final signature into the transaction and sanity check the sender
|
||||
|
|
|
|||
|
|
@ -632,7 +632,7 @@ func (w *wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID
|
|||
// data is not supported for Ledger wallets, so this method will always return
|
||||
// an error.
|
||||
func (w *wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) {
|
||||
return w.SignText(account, accounts.TextHash(text))
|
||||
return w.SignText(account, text)
|
||||
}
|
||||
|
||||
// SignTxWithPassphrase implements accounts.Wallet, attempting to sign the given
|
||||
|
|
|
|||
20
appveyor.yml
20
appveyor.yml
|
|
@ -2,7 +2,6 @@ clone_depth: 5
|
|||
version: "{branch}.{build}"
|
||||
|
||||
image:
|
||||
- Ubuntu
|
||||
- Visual Studio 2019
|
||||
|
||||
environment:
|
||||
|
|
@ -17,25 +16,6 @@ install:
|
|||
- go version
|
||||
|
||||
for:
|
||||
# Linux has its own script without -arch and -cc.
|
||||
# The linux builder also runs lint.
|
||||
- matrix:
|
||||
only:
|
||||
- image: Ubuntu
|
||||
build_script:
|
||||
- go run build/ci.go lint
|
||||
- go run build/ci.go check_generate
|
||||
- go run build/ci.go check_baddeps
|
||||
- go run build/ci.go install -dlgo
|
||||
test_script:
|
||||
- go run build/ci.go test -dlgo -short
|
||||
|
||||
# linux/386 is disabled.
|
||||
- matrix:
|
||||
exclude:
|
||||
- image: Ubuntu
|
||||
GETH_ARCH: 386
|
||||
|
||||
# Windows builds for amd64 + 386.
|
||||
- matrix:
|
||||
only:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ var (
|
|||
testServer2 = testServer("testServer2")
|
||||
|
||||
testBlock1 = types.NewBeaconBlock(&deneb.BeaconBlock{
|
||||
Slot: 123,
|
||||
Slot: 127,
|
||||
Body: deneb.BeaconBlockBody{
|
||||
ExecutionPayload: deneb.ExecutionPayload{
|
||||
BlockNumber: 456,
|
||||
|
|
@ -41,7 +41,7 @@ var (
|
|||
},
|
||||
})
|
||||
testBlock2 = types.NewBeaconBlock(&deneb.BeaconBlock{
|
||||
Slot: 124,
|
||||
Slot: 128,
|
||||
Body: deneb.BeaconBlockBody{
|
||||
ExecutionPayload: deneb.ExecutionPayload{
|
||||
BlockNumber: 457,
|
||||
|
|
@ -49,6 +49,14 @@ var (
|
|||
},
|
||||
},
|
||||
})
|
||||
testFinal1 = types.NewExecutionHeader(&deneb.ExecutionPayloadHeader{
|
||||
BlockNumber: 395,
|
||||
BlockHash: zrntcommon.Hash32(common.HexToHash("abbe7625624bf8ddd84723709e2758956289465dd23475f02387e0854942666")),
|
||||
})
|
||||
testFinal2 = types.NewExecutionHeader(&deneb.ExecutionPayloadHeader{
|
||||
BlockNumber: 420,
|
||||
BlockHash: zrntcommon.Hash32(common.HexToHash("9182a6ef8723654de174283750932ccc092378549836bf4873657eeec474598")),
|
||||
})
|
||||
)
|
||||
|
||||
type testServer string
|
||||
|
|
@ -66,9 +74,10 @@ func TestBlockSync(t *testing.T) {
|
|||
ts.AddServer(testServer1, 1)
|
||||
ts.AddServer(testServer2, 1)
|
||||
|
||||
expHeadBlock := func(expHead *types.BeaconBlock) {
|
||||
expHeadEvent := func(expHead *types.BeaconBlock, expFinal *types.ExecutionHeader) {
|
||||
t.Helper()
|
||||
var expNumber, headNumber uint64
|
||||
var expFinalHash, finalHash common.Hash
|
||||
if expHead != nil {
|
||||
p, err := expHead.ExecutionPayload()
|
||||
if err != nil {
|
||||
|
|
@ -76,19 +85,26 @@ func TestBlockSync(t *testing.T) {
|
|||
}
|
||||
expNumber = p.NumberU64()
|
||||
}
|
||||
if expFinal != nil {
|
||||
expFinalHash = expFinal.BlockHash()
|
||||
}
|
||||
select {
|
||||
case event := <-headCh:
|
||||
headNumber = event.Block.NumberU64()
|
||||
finalHash = event.Finalized
|
||||
default:
|
||||
}
|
||||
if headNumber != expNumber {
|
||||
t.Errorf("Wrong head block, expected block number %d, got %d)", expNumber, headNumber)
|
||||
}
|
||||
if finalHash != expFinalHash {
|
||||
t.Errorf("Wrong finalized block, expected block hash %064x, got %064x)", expFinalHash[:], finalHash[:])
|
||||
}
|
||||
}
|
||||
|
||||
// no block requests expected until head tracker knows about a head
|
||||
ts.Run(1)
|
||||
expHeadBlock(nil)
|
||||
expHeadEvent(nil, nil)
|
||||
|
||||
// set block 1 as prefetch head, announced by server 2
|
||||
head1 := blockHeadInfo(testBlock1)
|
||||
|
|
@ -103,12 +119,13 @@ func TestBlockSync(t *testing.T) {
|
|||
ts.AddAllowance(testServer2, 1)
|
||||
ts.Run(3)
|
||||
// head block still not expected as the fetched block is not the validated head yet
|
||||
expHeadBlock(nil)
|
||||
expHeadEvent(nil, nil)
|
||||
|
||||
// set as validated head, expect no further requests but block 1 set as head block
|
||||
ht.validated.Header = testBlock1.Header()
|
||||
ht.finalized, ht.finalizedPayload = testBlock1.Header(), testFinal1
|
||||
ts.Run(4)
|
||||
expHeadBlock(testBlock1)
|
||||
expHeadEvent(testBlock1, testFinal1)
|
||||
|
||||
// set block 2 as prefetch head, announced by server 1
|
||||
head2 := blockHeadInfo(testBlock2)
|
||||
|
|
@ -126,17 +143,26 @@ func TestBlockSync(t *testing.T) {
|
|||
// expect req2 retry to server 2
|
||||
ts.Run(7, testServer2, sync.ReqBeaconBlock(head2.BlockRoot))
|
||||
// now head block should be unavailable again
|
||||
expHeadBlock(nil)
|
||||
expHeadEvent(nil, nil)
|
||||
|
||||
// valid response, now head block should be block 2 immediately as it is already validated
|
||||
// but head event is still not expected because an epoch boundary was crossed and the
|
||||
// expected finality update has not arrived yet
|
||||
ts.RequestEvent(request.EvResponse, ts.Request(7, 1), testBlock2)
|
||||
ts.Run(8)
|
||||
expHeadBlock(testBlock2)
|
||||
expHeadEvent(nil, nil)
|
||||
|
||||
// expected finality update arrived, now a head event is expected
|
||||
ht.finalized, ht.finalizedPayload = testBlock2.Header(), testFinal2
|
||||
ts.Run(9)
|
||||
expHeadEvent(testBlock2, testFinal2)
|
||||
}
|
||||
|
||||
type testHeadTracker struct {
|
||||
prefetch types.HeadInfo
|
||||
validated types.SignedHeader
|
||||
prefetch types.HeadInfo
|
||||
validated types.SignedHeader
|
||||
finalized types.Header
|
||||
finalizedPayload *types.ExecutionHeader
|
||||
}
|
||||
|
||||
func (h *testHeadTracker) PrefetchHead() types.HeadInfo {
|
||||
|
|
@ -151,13 +177,14 @@ func (h *testHeadTracker) ValidatedOptimistic() (types.OptimisticUpdate, bool) {
|
|||
}, h.validated.Header != (types.Header{})
|
||||
}
|
||||
|
||||
// TODO add test case for finality
|
||||
func (h *testHeadTracker) ValidatedFinality() (types.FinalityUpdate, bool) {
|
||||
finalized := types.NewExecutionHeader(new(deneb.ExecutionPayloadHeader))
|
||||
if h.validated.Header == (types.Header{}) || h.finalizedPayload == nil {
|
||||
return types.FinalityUpdate{}, false
|
||||
}
|
||||
return types.FinalityUpdate{
|
||||
Attested: types.HeaderWithExecProof{Header: h.validated.Header},
|
||||
Finalized: types.HeaderWithExecProof{PayloadHeader: finalized},
|
||||
Attested: types.HeaderWithExecProof{Header: h.finalized},
|
||||
Finalized: types.HeaderWithExecProof{Header: h.finalized, PayloadHeader: h.finalizedPayload},
|
||||
Signature: h.validated.Signature,
|
||||
SignatureSlot: h.validated.SignatureSlot,
|
||||
}, h.validated.Header != (types.Header{})
|
||||
}, true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,11 @@ import (
|
|||
"github.com/ethereum/go-ethereum/beacon/light/sync"
|
||||
"github.com/ethereum/go-ethereum/beacon/params"
|
||||
"github.com/ethereum/go-ethereum/beacon/types"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/mclock"
|
||||
"github.com/ethereum/go-ethereum/ethdb/memorydb"
|
||||
"github.com/ethereum/go-ethereum/event"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
)
|
||||
|
||||
|
|
@ -46,7 +48,13 @@ func NewClient(config params.ClientConfig) *Client {
|
|||
var (
|
||||
db = memorydb.New()
|
||||
committeeChain = light.NewCommitteeChain(db, &config.ChainConfig, config.Threshold, !config.NoFilter)
|
||||
headTracker = light.NewHeadTracker(committeeChain, config.Threshold)
|
||||
headTracker = light.NewHeadTracker(committeeChain, config.Threshold, func(checkpoint common.Hash) {
|
||||
if saved, err := config.SaveCheckpointToFile(checkpoint); saved {
|
||||
log.Debug("Saved beacon checkpoint", "file", config.CheckpointFile, "checkpoint", checkpoint)
|
||||
} else if err != nil {
|
||||
log.Error("Failed to save beacon checkpoint", "file", config.CheckpointFile, "checkpoint", checkpoint, "error", err)
|
||||
}
|
||||
})
|
||||
)
|
||||
headSync := sync.NewHeadSync(headTracker, committeeChain)
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"github.com/ethereum/go-ethereum/beacon/params"
|
||||
"github.com/ethereum/go-ethereum/beacon/types"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
ctypes "github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
|
|
@ -100,20 +101,24 @@ func (ec *engineClient) callNewPayload(fork string, event types.ChainHeadEvent)
|
|||
params = []any{execData}
|
||||
)
|
||||
switch fork {
|
||||
case "electra":
|
||||
method = "engine_newPayloadV4"
|
||||
parentBeaconRoot := event.BeaconHead.ParentRoot
|
||||
blobHashes := collectBlobHashes(event.Block)
|
||||
params = append(params, blobHashes, parentBeaconRoot, event.ExecRequests)
|
||||
case "altair", "bellatrix":
|
||||
method = "engine_newPayloadV1"
|
||||
case "capella":
|
||||
method = "engine_newPayloadV2"
|
||||
case "deneb":
|
||||
method = "engine_newPayloadV3"
|
||||
parentBeaconRoot := event.BeaconHead.ParentRoot
|
||||
blobHashes := collectBlobHashes(event.Block)
|
||||
params = append(params, blobHashes, parentBeaconRoot)
|
||||
case "capella":
|
||||
method = "engine_newPayloadV2"
|
||||
default:
|
||||
method = "engine_newPayloadV1"
|
||||
default: // electra, fulu and above
|
||||
method = "engine_newPayloadV4"
|
||||
parentBeaconRoot := event.BeaconHead.ParentRoot
|
||||
blobHashes := collectBlobHashes(event.Block)
|
||||
hexRequests := make([]hexutil.Bytes, len(event.ExecRequests))
|
||||
for i := range event.ExecRequests {
|
||||
hexRequests[i] = hexutil.Bytes(event.ExecRequests[i])
|
||||
}
|
||||
params = append(params, blobHashes, parentBeaconRoot, hexRequests)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(ec.rootCtx, time.Second*5)
|
||||
|
|
@ -140,12 +145,12 @@ func (ec *engineClient) callForkchoiceUpdated(fork string, event types.ChainHead
|
|||
|
||||
var method string
|
||||
switch fork {
|
||||
case "deneb", "electra":
|
||||
method = "engine_forkchoiceUpdatedV3"
|
||||
case "altair", "bellatrix":
|
||||
method = "engine_forkchoiceUpdatedV1"
|
||||
case "capella":
|
||||
method = "engine_forkchoiceUpdatedV2"
|
||||
default:
|
||||
method = "engine_forkchoiceUpdatedV1"
|
||||
default: // deneb, electra, fulu and above
|
||||
method = "engine_forkchoiceUpdatedV3"
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(ec.rootCtx, time.Second*5)
|
||||
|
|
|
|||
|
|
@ -17,24 +17,23 @@ var _ = (*executableDataMarshaling)(nil)
|
|||
// MarshalJSON marshals as JSON.
|
||||
func (e ExecutableData) MarshalJSON() ([]byte, error) {
|
||||
type ExecutableData struct {
|
||||
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
|
||||
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
|
||||
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
|
||||
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
|
||||
LogsBloom hexutil.Bytes `json:"logsBloom" gencodec:"required"`
|
||||
Random common.Hash `json:"prevRandao" gencodec:"required"`
|
||||
Number hexutil.Uint64 `json:"blockNumber" gencodec:"required"`
|
||||
GasLimit hexutil.Uint64 `json:"gasLimit" gencodec:"required"`
|
||||
GasUsed hexutil.Uint64 `json:"gasUsed" gencodec:"required"`
|
||||
Timestamp hexutil.Uint64 `json:"timestamp" gencodec:"required"`
|
||||
ExtraData hexutil.Bytes `json:"extraData" gencodec:"required"`
|
||||
BaseFeePerGas *hexutil.Big `json:"baseFeePerGas" gencodec:"required"`
|
||||
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
|
||||
Transactions []hexutil.Bytes `json:"transactions" gencodec:"required"`
|
||||
Withdrawals []*types.Withdrawal `json:"withdrawals"`
|
||||
BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"`
|
||||
ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"`
|
||||
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
|
||||
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
|
||||
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
|
||||
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
|
||||
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
|
||||
LogsBloom hexutil.Bytes `json:"logsBloom" gencodec:"required"`
|
||||
Random common.Hash `json:"prevRandao" gencodec:"required"`
|
||||
Number hexutil.Uint64 `json:"blockNumber" gencodec:"required"`
|
||||
GasLimit hexutil.Uint64 `json:"gasLimit" gencodec:"required"`
|
||||
GasUsed hexutil.Uint64 `json:"gasUsed" gencodec:"required"`
|
||||
Timestamp hexutil.Uint64 `json:"timestamp" gencodec:"required"`
|
||||
ExtraData hexutil.Bytes `json:"extraData" gencodec:"required"`
|
||||
BaseFeePerGas *hexutil.Big `json:"baseFeePerGas" gencodec:"required"`
|
||||
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
|
||||
Transactions []hexutil.Bytes `json:"transactions" gencodec:"required"`
|
||||
Withdrawals []*types.Withdrawal `json:"withdrawals"`
|
||||
BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"`
|
||||
ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"`
|
||||
}
|
||||
var enc ExecutableData
|
||||
enc.ParentHash = e.ParentHash
|
||||
|
|
@ -59,31 +58,29 @@ func (e ExecutableData) MarshalJSON() ([]byte, error) {
|
|||
enc.Withdrawals = e.Withdrawals
|
||||
enc.BlobGasUsed = (*hexutil.Uint64)(e.BlobGasUsed)
|
||||
enc.ExcessBlobGas = (*hexutil.Uint64)(e.ExcessBlobGas)
|
||||
enc.ExecutionWitness = e.ExecutionWitness
|
||||
return json.Marshal(&enc)
|
||||
}
|
||||
|
||||
// UnmarshalJSON unmarshals from JSON.
|
||||
func (e *ExecutableData) UnmarshalJSON(input []byte) error {
|
||||
type ExecutableData struct {
|
||||
ParentHash *common.Hash `json:"parentHash" gencodec:"required"`
|
||||
FeeRecipient *common.Address `json:"feeRecipient" gencodec:"required"`
|
||||
StateRoot *common.Hash `json:"stateRoot" gencodec:"required"`
|
||||
ReceiptsRoot *common.Hash `json:"receiptsRoot" gencodec:"required"`
|
||||
LogsBloom *hexutil.Bytes `json:"logsBloom" gencodec:"required"`
|
||||
Random *common.Hash `json:"prevRandao" gencodec:"required"`
|
||||
Number *hexutil.Uint64 `json:"blockNumber" gencodec:"required"`
|
||||
GasLimit *hexutil.Uint64 `json:"gasLimit" gencodec:"required"`
|
||||
GasUsed *hexutil.Uint64 `json:"gasUsed" gencodec:"required"`
|
||||
Timestamp *hexutil.Uint64 `json:"timestamp" gencodec:"required"`
|
||||
ExtraData *hexutil.Bytes `json:"extraData" gencodec:"required"`
|
||||
BaseFeePerGas *hexutil.Big `json:"baseFeePerGas" gencodec:"required"`
|
||||
BlockHash *common.Hash `json:"blockHash" gencodec:"required"`
|
||||
Transactions []hexutil.Bytes `json:"transactions" gencodec:"required"`
|
||||
Withdrawals []*types.Withdrawal `json:"withdrawals"`
|
||||
BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"`
|
||||
ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"`
|
||||
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
|
||||
ParentHash *common.Hash `json:"parentHash" gencodec:"required"`
|
||||
FeeRecipient *common.Address `json:"feeRecipient" gencodec:"required"`
|
||||
StateRoot *common.Hash `json:"stateRoot" gencodec:"required"`
|
||||
ReceiptsRoot *common.Hash `json:"receiptsRoot" gencodec:"required"`
|
||||
LogsBloom *hexutil.Bytes `json:"logsBloom" gencodec:"required"`
|
||||
Random *common.Hash `json:"prevRandao" gencodec:"required"`
|
||||
Number *hexutil.Uint64 `json:"blockNumber" gencodec:"required"`
|
||||
GasLimit *hexutil.Uint64 `json:"gasLimit" gencodec:"required"`
|
||||
GasUsed *hexutil.Uint64 `json:"gasUsed" gencodec:"required"`
|
||||
Timestamp *hexutil.Uint64 `json:"timestamp" gencodec:"required"`
|
||||
ExtraData *hexutil.Bytes `json:"extraData" gencodec:"required"`
|
||||
BaseFeePerGas *hexutil.Big `json:"baseFeePerGas" gencodec:"required"`
|
||||
BlockHash *common.Hash `json:"blockHash" gencodec:"required"`
|
||||
Transactions []hexutil.Bytes `json:"transactions" gencodec:"required"`
|
||||
Withdrawals []*types.Withdrawal `json:"withdrawals"`
|
||||
BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"`
|
||||
ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"`
|
||||
}
|
||||
var dec ExecutableData
|
||||
if err := json.Unmarshal(input, &dec); err != nil {
|
||||
|
|
@ -157,8 +154,5 @@ func (e *ExecutableData) UnmarshalJSON(input []byte) error {
|
|||
if dec.ExcessBlobGas != nil {
|
||||
e.ExcessBlobGas = (*uint64)(dec.ExcessBlobGas)
|
||||
}
|
||||
if dec.ExecutionWitness != nil {
|
||||
e.ExecutionWitness = dec.ExecutionWitness
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ func (e ExecutionPayloadEnvelope) MarshalJSON() ([]byte, error) {
|
|||
type ExecutionPayloadEnvelope struct {
|
||||
ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
|
||||
BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"`
|
||||
BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
|
||||
BlobsBundle *BlobsBundle `json:"blobsBundle"`
|
||||
Requests []hexutil.Bytes `json:"executionRequests"`
|
||||
Override bool `json:"shouldOverrideBuilder"`
|
||||
Witness *hexutil.Bytes `json:"witness,omitempty"`
|
||||
|
|
@ -42,7 +42,7 @@ func (e *ExecutionPayloadEnvelope) UnmarshalJSON(input []byte) error {
|
|||
type ExecutionPayloadEnvelope struct {
|
||||
ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
|
||||
BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"`
|
||||
BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
|
||||
BlobsBundle *BlobsBundle `json:"blobsBundle"`
|
||||
Requests []hexutil.Bytes `json:"executionRequests"`
|
||||
Override *bool `json:"shouldOverrideBuilder"`
|
||||
Witness *hexutil.Bytes `json:"witness,omitempty"`
|
||||
|
|
|
|||
|
|
@ -33,8 +33,22 @@ import (
|
|||
type PayloadVersion byte
|
||||
|
||||
var (
|
||||
// PayloadV1 is the identifier of ExecutionPayloadV1 introduced in paris fork.
|
||||
// https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#executionpayloadv1
|
||||
PayloadV1 PayloadVersion = 0x1
|
||||
|
||||
// PayloadV2 is the identifier of ExecutionPayloadV2 introduced in shanghai fork.
|
||||
//
|
||||
// https://github.com/ethereum/execution-apis/blob/main/src/engine/shanghai.md#executionpayloadv2
|
||||
// ExecutionPayloadV2 has the syntax of ExecutionPayloadV1 and appends a
|
||||
// single field: withdrawals.
|
||||
PayloadV2 PayloadVersion = 0x2
|
||||
|
||||
// PayloadV3 is the identifier of ExecutionPayloadV3 introduced in cancun fork.
|
||||
//
|
||||
// https://github.com/ethereum/execution-apis/blob/main/src/engine/cancun.md#executionpayloadv3
|
||||
// ExecutionPayloadV3 has the syntax of ExecutionPayloadV2 and appends the new
|
||||
// fields: blobGasUsed and excessBlobGas.
|
||||
PayloadV3 PayloadVersion = 0x3
|
||||
)
|
||||
|
||||
|
|
@ -59,24 +73,23 @@ type payloadAttributesMarshaling struct {
|
|||
|
||||
// ExecutableData is the data necessary to execute an EL payload.
|
||||
type ExecutableData struct {
|
||||
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
|
||||
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
|
||||
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
|
||||
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
|
||||
LogsBloom []byte `json:"logsBloom" gencodec:"required"`
|
||||
Random common.Hash `json:"prevRandao" gencodec:"required"`
|
||||
Number uint64 `json:"blockNumber" gencodec:"required"`
|
||||
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
|
||||
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
|
||||
Timestamp uint64 `json:"timestamp" gencodec:"required"`
|
||||
ExtraData []byte `json:"extraData" gencodec:"required"`
|
||||
BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"`
|
||||
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
|
||||
Transactions [][]byte `json:"transactions" gencodec:"required"`
|
||||
Withdrawals []*types.Withdrawal `json:"withdrawals"`
|
||||
BlobGasUsed *uint64 `json:"blobGasUsed"`
|
||||
ExcessBlobGas *uint64 `json:"excessBlobGas"`
|
||||
ExecutionWitness *types.ExecutionWitness `json:"executionWitness,omitempty"`
|
||||
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
|
||||
FeeRecipient common.Address `json:"feeRecipient" gencodec:"required"`
|
||||
StateRoot common.Hash `json:"stateRoot" gencodec:"required"`
|
||||
ReceiptsRoot common.Hash `json:"receiptsRoot" gencodec:"required"`
|
||||
LogsBloom []byte `json:"logsBloom" gencodec:"required"`
|
||||
Random common.Hash `json:"prevRandao" gencodec:"required"`
|
||||
Number uint64 `json:"blockNumber" gencodec:"required"`
|
||||
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
|
||||
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
|
||||
Timestamp uint64 `json:"timestamp" gencodec:"required"`
|
||||
ExtraData []byte `json:"extraData" gencodec:"required"`
|
||||
BaseFeePerGas *big.Int `json:"baseFeePerGas" gencodec:"required"`
|
||||
BlockHash common.Hash `json:"blockHash" gencodec:"required"`
|
||||
Transactions [][]byte `json:"transactions" gencodec:"required"`
|
||||
Withdrawals []*types.Withdrawal `json:"withdrawals"`
|
||||
BlobGasUsed *uint64 `json:"blobGasUsed"`
|
||||
ExcessBlobGas *uint64 `json:"excessBlobGas"`
|
||||
}
|
||||
|
||||
// JSON type overrides for executableData.
|
||||
|
|
@ -106,13 +119,18 @@ type StatelessPayloadStatusV1 struct {
|
|||
type ExecutionPayloadEnvelope struct {
|
||||
ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
|
||||
BlockValue *big.Int `json:"blockValue" gencodec:"required"`
|
||||
BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
|
||||
BlobsBundle *BlobsBundle `json:"blobsBundle"`
|
||||
Requests [][]byte `json:"executionRequests"`
|
||||
Override bool `json:"shouldOverrideBuilder"`
|
||||
Witness *hexutil.Bytes `json:"witness,omitempty"`
|
||||
}
|
||||
|
||||
type BlobsBundleV1 struct {
|
||||
// BlobsBundle includes the marshalled sidecar data. Note this structure is
|
||||
// shared by BlobsBundleV1 and BlobsBundleV2 for the sake of simplicity.
|
||||
//
|
||||
// - BlobsBundleV1: proofs contain exactly len(blobs) kzg proofs.
|
||||
// - BlobsBundleV2: proofs contain exactly CELLS_PER_EXT_BLOB * len(blobs) cell proofs.
|
||||
type BlobsBundle struct {
|
||||
Commitments []hexutil.Bytes `json:"commitments"`
|
||||
Proofs []hexutil.Bytes `json:"proofs"`
|
||||
Blobs []hexutil.Bytes `json:"blobs"`
|
||||
|
|
@ -123,6 +141,11 @@ type BlobAndProofV1 struct {
|
|||
Proof hexutil.Bytes `json:"proof"`
|
||||
}
|
||||
|
||||
type BlobAndProofV2 struct {
|
||||
Blob hexutil.Bytes `json:"blob"`
|
||||
CellProofs []hexutil.Bytes `json:"proofs"` // proofs MUST contain exactly CELLS_PER_EXT_BLOB cell proofs.
|
||||
}
|
||||
|
||||
// JSON type overrides for ExecutionPayloadEnvelope.
|
||||
type executionPayloadEnvelopeMarshaling struct {
|
||||
BlockValue *hexutil.Big
|
||||
|
|
@ -131,7 +154,7 @@ type executionPayloadEnvelopeMarshaling struct {
|
|||
|
||||
type PayloadStatusV1 struct {
|
||||
Status string `json:"status"`
|
||||
Witness *hexutil.Bytes `json:"witness"`
|
||||
Witness *hexutil.Bytes `json:"witness,omitempty"`
|
||||
LatestValidHash *common.Hash `json:"latestValidHash"`
|
||||
ValidationError *string `json:"validationError"`
|
||||
}
|
||||
|
|
@ -292,8 +315,7 @@ func ExecutableDataToBlockNoHash(data ExecutableData, versionedHashes []common.H
|
|||
RequestsHash: requestsHash,
|
||||
}
|
||||
return types.NewBlockWithHeader(header).
|
||||
WithBody(types.Body{Transactions: txs, Uncles: nil, Withdrawals: data.Withdrawals}).
|
||||
WithWitness(data.ExecutionWitness),
|
||||
WithBody(types.Body{Transactions: txs, Uncles: nil, Withdrawals: data.Withdrawals}),
|
||||
nil
|
||||
}
|
||||
|
||||
|
|
@ -301,37 +323,47 @@ func ExecutableDataToBlockNoHash(data ExecutableData, versionedHashes []common.H
|
|||
// fields from the given block. It assumes the given block is post-merge block.
|
||||
func BlockToExecutableData(block *types.Block, fees *big.Int, sidecars []*types.BlobTxSidecar, requests [][]byte) *ExecutionPayloadEnvelope {
|
||||
data := &ExecutableData{
|
||||
BlockHash: block.Hash(),
|
||||
ParentHash: block.ParentHash(),
|
||||
FeeRecipient: block.Coinbase(),
|
||||
StateRoot: block.Root(),
|
||||
Number: block.NumberU64(),
|
||||
GasLimit: block.GasLimit(),
|
||||
GasUsed: block.GasUsed(),
|
||||
BaseFeePerGas: block.BaseFee(),
|
||||
Timestamp: block.Time(),
|
||||
ReceiptsRoot: block.ReceiptHash(),
|
||||
LogsBloom: block.Bloom().Bytes(),
|
||||
Transactions: encodeTransactions(block.Transactions()),
|
||||
Random: block.MixDigest(),
|
||||
ExtraData: block.Extra(),
|
||||
Withdrawals: block.Withdrawals(),
|
||||
BlobGasUsed: block.BlobGasUsed(),
|
||||
ExcessBlobGas: block.ExcessBlobGas(),
|
||||
ExecutionWitness: block.ExecutionWitness(),
|
||||
BlockHash: block.Hash(),
|
||||
ParentHash: block.ParentHash(),
|
||||
FeeRecipient: block.Coinbase(),
|
||||
StateRoot: block.Root(),
|
||||
Number: block.NumberU64(),
|
||||
GasLimit: block.GasLimit(),
|
||||
GasUsed: block.GasUsed(),
|
||||
BaseFeePerGas: block.BaseFee(),
|
||||
Timestamp: block.Time(),
|
||||
ReceiptsRoot: block.ReceiptHash(),
|
||||
LogsBloom: block.Bloom().Bytes(),
|
||||
Transactions: encodeTransactions(block.Transactions()),
|
||||
Random: block.MixDigest(),
|
||||
ExtraData: block.Extra(),
|
||||
Withdrawals: block.Withdrawals(),
|
||||
BlobGasUsed: block.BlobGasUsed(),
|
||||
ExcessBlobGas: block.ExcessBlobGas(),
|
||||
}
|
||||
|
||||
// Add blobs.
|
||||
bundle := BlobsBundleV1{
|
||||
bundle := BlobsBundle{
|
||||
Commitments: make([]hexutil.Bytes, 0),
|
||||
Blobs: make([]hexutil.Bytes, 0),
|
||||
Proofs: make([]hexutil.Bytes, 0),
|
||||
}
|
||||
for _, sidecar := range sidecars {
|
||||
for j := range sidecar.Blobs {
|
||||
bundle.Blobs = append(bundle.Blobs, hexutil.Bytes(sidecar.Blobs[j][:]))
|
||||
bundle.Commitments = append(bundle.Commitments, hexutil.Bytes(sidecar.Commitments[j][:]))
|
||||
bundle.Proofs = append(bundle.Proofs, hexutil.Bytes(sidecar.Proofs[j][:]))
|
||||
bundle.Blobs = append(bundle.Blobs, sidecar.Blobs[j][:])
|
||||
bundle.Commitments = append(bundle.Commitments, sidecar.Commitments[j][:])
|
||||
}
|
||||
// - Before the Osaka fork, only version-0 blob transactions should be packed,
|
||||
// with the proof length equal to len(blobs).
|
||||
//
|
||||
// - After the Osaka fork, only version-1 blob transactions should be packed,
|
||||
// with the proof length equal to CELLS_PER_EXT_BLOB * len(blobs).
|
||||
//
|
||||
// Ideally, length validation should be performed based on the bundle version.
|
||||
// In practice, this is unnecessary because blob transaction filtering is
|
||||
// already done during payload construction.
|
||||
for _, proof := range sidecar.Proofs {
|
||||
bundle.Proofs = append(bundle.Proofs, proof[:])
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
48
beacon/engine/types_test.go
Normal file
48
beacon/engine/types_test.go
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
// Copyright 2025 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package engine
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/crypto/kzg4844"
|
||||
)
|
||||
|
||||
func TestBlobs(t *testing.T) {
|
||||
var (
|
||||
emptyBlob = new(kzg4844.Blob)
|
||||
emptyBlobCommit, _ = kzg4844.BlobToCommitment(emptyBlob)
|
||||
emptyBlobProof, _ = kzg4844.ComputeBlobProof(emptyBlob, emptyBlobCommit)
|
||||
emptyCellProof, _ = kzg4844.ComputeCellProofs(emptyBlob)
|
||||
)
|
||||
header := types.Header{}
|
||||
block := types.NewBlock(&header, &types.Body{}, nil, nil)
|
||||
|
||||
sidecarWithoutCellProofs := types.NewBlobTxSidecar(types.BlobSidecarVersion0, []kzg4844.Blob{*emptyBlob}, []kzg4844.Commitment{emptyBlobCommit}, []kzg4844.Proof{emptyBlobProof})
|
||||
env := BlockToExecutableData(block, common.Big0, []*types.BlobTxSidecar{sidecarWithoutCellProofs}, nil)
|
||||
if len(env.BlobsBundle.Proofs) != 1 {
|
||||
t.Fatalf("Expect 1 proof in blobs bundle, got %v", len(env.BlobsBundle.Proofs))
|
||||
}
|
||||
|
||||
sidecarWithCellProofs := types.NewBlobTxSidecar(types.BlobSidecarVersion0, []kzg4844.Blob{*emptyBlob}, []kzg4844.Commitment{emptyBlobCommit}, emptyCellProof)
|
||||
env = BlockToExecutableData(block, common.Big0, []*types.BlobTxSidecar{sidecarWithCellProofs}, nil)
|
||||
if len(env.BlobsBundle.Proofs) != 128 {
|
||||
t.Fatalf("Expect 128 proofs in blobs bundle, got %v", len(env.BlobsBundle.Proofs))
|
||||
}
|
||||
}
|
||||
|
|
@ -69,7 +69,10 @@ func newCanonicalStore[T any](db ethdb.Iteratee, keyPrefix []byte) (*canonicalSt
|
|||
|
||||
// databaseKey returns the database key belonging to the given period.
|
||||
func (cs *canonicalStore[T]) databaseKey(period uint64) []byte {
|
||||
return binary.BigEndian.AppendUint64(append([]byte{}, cs.keyPrefix...), period)
|
||||
key := make([]byte, len(cs.keyPrefix)+8)
|
||||
copy(key, cs.keyPrefix)
|
||||
binary.BigEndian.PutUint64(key[len(cs.keyPrefix):], period)
|
||||
return key
|
||||
}
|
||||
|
||||
// add adds the given item to the database. It also ensures that the range remains
|
||||
|
|
|
|||
|
|
@ -21,7 +21,9 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/beacon/params"
|
||||
"github.com/ethereum/go-ethereum/beacon/types"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
)
|
||||
|
||||
|
|
@ -38,13 +40,15 @@ type HeadTracker struct {
|
|||
hasFinalityUpdate bool
|
||||
prefetchHead types.HeadInfo
|
||||
changeCounter uint64
|
||||
saveCheckpoint func(common.Hash)
|
||||
}
|
||||
|
||||
// NewHeadTracker creates a new HeadTracker.
|
||||
func NewHeadTracker(committeeChain *CommitteeChain, minSignerCount int) *HeadTracker {
|
||||
func NewHeadTracker(committeeChain *CommitteeChain, minSignerCount int, saveCheckpoint func(common.Hash)) *HeadTracker {
|
||||
return &HeadTracker{
|
||||
committeeChain: committeeChain,
|
||||
minSignerCount: minSignerCount,
|
||||
saveCheckpoint: saveCheckpoint,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -100,6 +104,9 @@ func (h *HeadTracker) ValidateFinality(update types.FinalityUpdate) (bool, error
|
|||
if replace {
|
||||
h.finalityUpdate, h.hasFinalityUpdate = update, true
|
||||
h.changeCounter++
|
||||
if h.saveCheckpoint != nil && update.Finalized.Slot%params.EpochLength == 0 {
|
||||
h.saveCheckpoint(update.Finalized.Hash())
|
||||
}
|
||||
}
|
||||
return replace, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ func (s *Scheduler) addEvent(event Event) {
|
|||
s.Trigger()
|
||||
}
|
||||
|
||||
// filterEvent sorts each Event either as a request event or a server event,
|
||||
// filterEvents sorts each Event either as a request event or a server event,
|
||||
// depending on its type. Request events are also sorted in a map based on the
|
||||
// module that originally initiated the request. It also ensures that no events
|
||||
// related to a server are returned before EvRegistered or after EvUnregistered.
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ func (s *HeadSync) Process(requester request.Requester, events []request.Event)
|
|||
delete(s.serverHeads, event.Server)
|
||||
delete(s.unvalidatedOptimistic, event.Server)
|
||||
delete(s.unvalidatedFinality, event.Server)
|
||||
delete(s.reqFinalityEpoch, event.Server)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ type Value [32]byte
|
|||
// Values represent a series of merkle tree leaves/nodes.
|
||||
type Values []Value
|
||||
|
||||
var valueT = reflect.TypeOf(Value{})
|
||||
var valueT = reflect.TypeFor[Value]()
|
||||
|
||||
// UnmarshalJSON parses a merkle value in hex syntax.
|
||||
func (m *Value) UnmarshalJSON(input []byte) error {
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
0xf5606a019f0f1006e9ec2070695045f4334450362a48da4c5965314510e0b4c3
|
||||
0x4bae4b97deda095724560012cab1f80a5221ce0a37a4b5236d8ab63f595f29d9
|
||||
1
beacon/params/checkpoint_hoodi.hex
Normal file
1
beacon/params/checkpoint_hoodi.hex
Normal file
|
|
@ -0,0 +1 @@
|
|||
0xbb7a7f3c40d8ea0b450f91587db65d0f1c079669277e01a0426c8911702a863a
|
||||
|
|
@ -1 +1 @@
|
|||
0x3c0cb4aa83beded1803d262664ba4392b1023f334d9cca02dc3a6925987ebe91
|
||||
0x2af778d703186526a1b6304b423f338f11556206f618643c3f7fa0d7b1ef5c9b
|
||||
|
|
@ -1 +1 @@
|
|||
0xa8d56457aa414523d93659aef1f7409bbfb72ad75e94d917c8c0b1baa38153ef
|
||||
0x48a89c9ea7ba19de2931797974cf8722344ab231c0edada278b108ef74125478
|
||||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"crypto/sha256"
|
||||
"fmt"
|
||||
"math"
|
||||
"math/big"
|
||||
"os"
|
||||
"slices"
|
||||
"sort"
|
||||
|
|
@ -37,7 +38,7 @@ import (
|
|||
// across signing different data structures.
|
||||
const syncCommitteeDomain = 7
|
||||
|
||||
var knownForks = []string{"GENESIS", "ALTAIR", "BELLATRIX", "CAPELLA", "DENEB"}
|
||||
var knownForks = []string{"GENESIS", "ALTAIR", "BELLATRIX", "CAPELLA", "DENEB", "ELECTRA", "FULU"}
|
||||
|
||||
// ClientConfig contains beacon light client configuration.
|
||||
type ClientConfig struct {
|
||||
|
|
@ -54,6 +55,7 @@ type ChainConfig struct {
|
|||
GenesisValidatorsRoot common.Hash // Root hash of the genesis validator set, used for signature domain calculation
|
||||
Forks Forks
|
||||
Checkpoint common.Hash
|
||||
CheckpointFile string
|
||||
}
|
||||
|
||||
// ForkAtEpoch returns the latest active fork at the given epoch.
|
||||
|
|
@ -89,12 +91,8 @@ func (c *ChainConfig) AddFork(name string, epoch uint64, version []byte) *ChainC
|
|||
|
||||
// LoadForks parses the beacon chain configuration file (config.yaml) and extracts
|
||||
// the list of forks.
|
||||
func (c *ChainConfig) LoadForks(path string) error {
|
||||
file, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read beacon chain config file: %v", err)
|
||||
}
|
||||
config := make(map[string]string)
|
||||
func (c *ChainConfig) LoadForks(file []byte) error {
|
||||
config := make(map[string]any)
|
||||
if err := yaml.Unmarshal(file, &config); err != nil {
|
||||
return fmt.Errorf("failed to parse beacon chain config file: %v", err)
|
||||
}
|
||||
|
|
@ -105,20 +103,45 @@ func (c *ChainConfig) LoadForks(path string) error {
|
|||
epochs["GENESIS"] = 0
|
||||
|
||||
for key, value := range config {
|
||||
if value == nil {
|
||||
continue
|
||||
}
|
||||
if strings.HasSuffix(key, "_FORK_VERSION") {
|
||||
name := key[:len(key)-len("_FORK_VERSION")]
|
||||
if v, err := hexutil.Decode(value); err == nil {
|
||||
switch version := value.(type) {
|
||||
case int:
|
||||
versions[name] = new(big.Int).SetUint64(uint64(version)).FillBytes(make([]byte, 4))
|
||||
case int64:
|
||||
versions[name] = new(big.Int).SetUint64(uint64(version)).FillBytes(make([]byte, 4))
|
||||
case uint64:
|
||||
versions[name] = new(big.Int).SetUint64(version).FillBytes(make([]byte, 4))
|
||||
case string:
|
||||
v, err := hexutil.Decode(version)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to decode hex fork id %q in beacon chain config file: %v", version, err)
|
||||
}
|
||||
versions[name] = v
|
||||
} else {
|
||||
return fmt.Errorf("failed to decode hex fork id %q in beacon chain config file: %v", value, err)
|
||||
default:
|
||||
return fmt.Errorf("invalid fork version %q in beacon chain config file", version)
|
||||
}
|
||||
}
|
||||
if strings.HasSuffix(key, "_FORK_EPOCH") {
|
||||
name := key[:len(key)-len("_FORK_EPOCH")]
|
||||
if v, err := strconv.ParseUint(value, 10, 64); err == nil {
|
||||
switch epoch := value.(type) {
|
||||
case int:
|
||||
epochs[name] = uint64(epoch)
|
||||
case int64:
|
||||
epochs[name] = uint64(epoch)
|
||||
case uint64:
|
||||
epochs[name] = epoch
|
||||
case string:
|
||||
v, err := strconv.ParseUint(epoch, 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse epoch number %q in beacon chain config file: %v", epoch, err)
|
||||
}
|
||||
epochs[name] = v
|
||||
} else {
|
||||
return fmt.Errorf("failed to parse epoch number %q in beacon chain config file: %v", value, err)
|
||||
default:
|
||||
return fmt.Errorf("invalid fork epoch %q in beacon chain config file", epoch)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -211,3 +234,36 @@ func (f Forks) Less(i, j int) bool {
|
|||
}
|
||||
return f[i].knownIndex < f[j].knownIndex
|
||||
}
|
||||
|
||||
// SetCheckpointFile sets the checkpoint import/export file name and attempts to
|
||||
// read the checkpoint from the file if it already exists. It returns true if
|
||||
// a checkpoint has been loaded.
|
||||
func (c *ChainConfig) SetCheckpointFile(checkpointFile string) (bool, error) {
|
||||
c.CheckpointFile = checkpointFile
|
||||
file, err := os.ReadFile(checkpointFile)
|
||||
if os.IsNotExist(err) {
|
||||
return false, nil // did not load checkpoint
|
||||
}
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to read beacon checkpoint file: %v", err)
|
||||
}
|
||||
cp, err := hexutil.Decode(string(file))
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to decode hex string in beacon checkpoint file: %v", err)
|
||||
}
|
||||
if len(cp) != 32 {
|
||||
return false, fmt.Errorf("invalid hex string length in beacon checkpoint file: %d", len(cp))
|
||||
}
|
||||
copy(c.Checkpoint[:len(cp)], cp)
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// SaveCheckpointToFile saves the given checkpoint to file if a checkpoint
|
||||
// import/export file has been specified.
|
||||
func (c *ChainConfig) SaveCheckpointToFile(checkpoint common.Hash) (bool, error) {
|
||||
if c.CheckpointFile == "" {
|
||||
return false, nil
|
||||
}
|
||||
err := os.WriteFile(c.CheckpointFile, []byte(checkpoint.Hex()), 0600)
|
||||
return err == nil, err
|
||||
}
|
||||
|
|
|
|||
37
beacon/params/config_test.go
Normal file
37
beacon/params/config_test.go
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package params
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestChainConfig_LoadForks(t *testing.T) {
|
||||
const config = `
|
||||
GENESIS_FORK_VERSION: 0x00000000
|
||||
|
||||
ALTAIR_FORK_VERSION: 0x00000001
|
||||
ALTAIR_FORK_EPOCH: 1
|
||||
|
||||
EIP7928_FORK_VERSION: 0xb0000038
|
||||
EIP7928_FORK_EPOCH: 18446744073709551615
|
||||
|
||||
EIP7XXX_FORK_VERSION:
|
||||
EIP7XXX_FORK_EPOCH:
|
||||
|
||||
BLOB_SCHEDULE: []
|
||||
`
|
||||
c := &ChainConfig{}
|
||||
err := c.LoadForks([]byte(config))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
for _, fork := range c.Forks {
|
||||
if fork.Name == "GENESIS" && (fork.Epoch != 0) {
|
||||
t.Errorf("unexpected genesis fork epoch %d", fork.Epoch)
|
||||
}
|
||||
if fork.Name == "ALTAIR" && (fork.Epoch != 1 || !bytes.Equal(fork.Version, []byte{0, 0, 0, 1})) {
|
||||
t.Errorf("unexpected altair fork epoch %d version %x", fork.Epoch, fork.Version)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -31,46 +31,53 @@ var checkpointSepolia string
|
|||
//go:embed checkpoint_holesky.hex
|
||||
var checkpointHolesky string
|
||||
|
||||
//go:embed checkpoint_hoodi.hex
|
||||
var checkpointHoodi string
|
||||
|
||||
var (
|
||||
MainnetLightConfig = (&ChainConfig{
|
||||
GenesisValidatorsRoot: common.HexToHash("0x4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95"),
|
||||
GenesisTime: 1606824023,
|
||||
Checkpoint: common.HexToHash(checkpointMainnet),
|
||||
}).
|
||||
AddFork("GENESIS", 0, []byte{0, 0, 0, 0}).
|
||||
AddFork("ALTAIR", 74240, []byte{1, 0, 0, 0}).
|
||||
AddFork("BELLATRIX", 144896, []byte{2, 0, 0, 0}).
|
||||
AddFork("CAPELLA", 194048, []byte{3, 0, 0, 0}).
|
||||
AddFork("DENEB", 269568, []byte{4, 0, 0, 0})
|
||||
AddFork("GENESIS", 0, common.FromHex("0x00000000")).
|
||||
AddFork("ALTAIR", 74240, common.FromHex("0x01000000")).
|
||||
AddFork("BELLATRIX", 144896, common.FromHex("0x02000000")).
|
||||
AddFork("CAPELLA", 194048, common.FromHex("0x03000000")).
|
||||
AddFork("DENEB", 269568, common.FromHex("0x04000000")).
|
||||
AddFork("ELECTRA", 364032, common.FromHex("0x05000000")).
|
||||
AddFork("FULU", 411392, common.FromHex("0x06000000"))
|
||||
|
||||
SepoliaLightConfig = (&ChainConfig{
|
||||
GenesisValidatorsRoot: common.HexToHash("0xd8ea171f3c94aea21ebc42a1ed61052acf3f9209c00e4efbaaddac09ed9b8078"),
|
||||
GenesisTime: 1655733600,
|
||||
Checkpoint: common.HexToHash(checkpointSepolia),
|
||||
}).
|
||||
AddFork("GENESIS", 0, []byte{144, 0, 0, 105}).
|
||||
AddFork("ALTAIR", 50, []byte{144, 0, 0, 112}).
|
||||
AddFork("BELLATRIX", 100, []byte{144, 0, 0, 113}).
|
||||
AddFork("CAPELLA", 56832, []byte{144, 0, 0, 114}).
|
||||
AddFork("DENEB", 132608, []byte{144, 0, 0, 115}).
|
||||
AddFork("ELECTRA", 222464, []byte{144, 0, 0, 116})
|
||||
AddFork("GENESIS", 0, common.FromHex("0x90000069")).
|
||||
AddFork("ALTAIR", 50, common.FromHex("0x90000070")).
|
||||
AddFork("BELLATRIX", 100, common.FromHex("0x90000071")).
|
||||
AddFork("CAPELLA", 56832, common.FromHex("0x90000072")).
|
||||
AddFork("DENEB", 132608, common.FromHex("0x90000073")).
|
||||
AddFork("ELECTRA", 222464, common.FromHex("0x90000074")).
|
||||
AddFork("FULU", 272640, common.FromHex("0x90000075"))
|
||||
|
||||
HoleskyLightConfig = (&ChainConfig{
|
||||
GenesisValidatorsRoot: common.HexToHash("0x9143aa7c615a7f7115e2b6aac319c03529df8242ae705fba9df39b79c59fa8b1"),
|
||||
GenesisTime: 1695902400,
|
||||
Checkpoint: common.HexToHash(checkpointHolesky),
|
||||
}).
|
||||
AddFork("GENESIS", 0, []byte{1, 1, 112, 0}).
|
||||
AddFork("ALTAIR", 0, []byte{2, 1, 112, 0}).
|
||||
AddFork("BELLATRIX", 0, []byte{3, 1, 112, 0}).
|
||||
AddFork("CAPELLA", 256, []byte{4, 1, 112, 0}).
|
||||
AddFork("DENEB", 29696, []byte{5, 1, 112, 0}).
|
||||
AddFork("ELECTRA", 115968, []byte{6, 1, 112, 0})
|
||||
AddFork("GENESIS", 0, common.FromHex("0x01017000")).
|
||||
AddFork("ALTAIR", 0, common.FromHex("0x02017000")).
|
||||
AddFork("BELLATRIX", 0, common.FromHex("0x03017000")).
|
||||
AddFork("CAPELLA", 256, common.FromHex("0x04017000")).
|
||||
AddFork("DENEB", 29696, common.FromHex("0x05017000")).
|
||||
AddFork("ELECTRA", 115968, common.FromHex("0x06017000")).
|
||||
AddFork("FULU", 165120, common.FromHex("0x07017000"))
|
||||
|
||||
HoodiLightConfig = (&ChainConfig{
|
||||
GenesisValidatorsRoot: common.HexToHash("0x212f13fc4df078b6cb7db228f1c8307566dcecf900867401a92023d7ba99cb5f"),
|
||||
GenesisTime: 1742212800,
|
||||
Checkpoint: common.HexToHash(""),
|
||||
Checkpoint: common.HexToHash(checkpointHoodi),
|
||||
}).
|
||||
AddFork("GENESIS", 0, common.FromHex("0x10000910")).
|
||||
AddFork("ALTAIR", 0, common.FromHex("0x20000910")).
|
||||
|
|
@ -78,5 +85,5 @@ var (
|
|||
AddFork("CAPELLA", 0, common.FromHex("0x40000910")).
|
||||
AddFork("DENEB", 0, common.FromHex("0x50000910")).
|
||||
AddFork("ELECTRA", 2048, common.FromHex("0x60000910")).
|
||||
AddFork("FULU", 18446744073709551615, common.FromHex("0x70000910"))
|
||||
AddFork("FULU", 50688, common.FromHex("0x70000910"))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ func BlockFromJSON(forkName string, data []byte) (*BeaconBlock, error) {
|
|||
obj = new(capella.BeaconBlock)
|
||||
case "deneb":
|
||||
obj = new(deneb.BeaconBlock)
|
||||
case "electra":
|
||||
case "electra", "fulu":
|
||||
obj = new(electra.BeaconBlock)
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported fork: %s", forkName)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ func ExecutionHeaderFromJSON(forkName string, data []byte) (*ExecutionHeader, er
|
|||
switch forkName {
|
||||
case "capella":
|
||||
obj = new(capella.ExecutionPayloadHeader)
|
||||
case "deneb", "electra": // note: the payload type was not changed in electra
|
||||
case "deneb", "electra", "fulu": // note: the payload type was not changed in electra/fulu
|
||||
obj = new(deneb.ExecutionPayloadHeader)
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported fork: %s", forkName)
|
||||
|
|
|
|||
|
|
@ -1,113 +1,106 @@
|
|||
# This file contains sha256 checksums of optional build dependencies.
|
||||
|
||||
# version:spec-tests pectra-devnet-6@v1.0.0
|
||||
# version:spec-tests v5.1.0
|
||||
# https://github.com/ethereum/execution-spec-tests/releases
|
||||
# https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-6%40v1.0.0/
|
||||
b69211752a3029083c020dc635fe12156ca1a6725a08559da540a0337586a77e fixtures_pectra-devnet-6.tar.gz
|
||||
# https://github.com/ethereum/execution-spec-tests/releases/download/v5.1.0
|
||||
a3192784375acec7eaec492799d5c5d0c47a2909a3cc40178898e4ecd20cc416 fixtures_develop.tar.gz
|
||||
|
||||
# version:golang 1.24.1
|
||||
# version:golang 1.25.7
|
||||
# https://go.dev/dl/
|
||||
8244ebf46c65607db10222b5806aeb31c1fcf8979c1b6b12f60c677e9a3c0656 go1.24.1.src.tar.gz
|
||||
8d627dc163a4bffa2b1887112ad6194af175dce108d606ed1714a089fb806033 go1.24.1.aix-ppc64.tar.gz
|
||||
addbfce2056744962e2d7436313ab93486660cf7a2e066d171b9d6f2da7c7abe go1.24.1.darwin-amd64.tar.gz
|
||||
58d529334561cff11087cd4ab18fe0b46d8d5aad88f45c02b9645f847e014512 go1.24.1.darwin-amd64.pkg
|
||||
295581b5619acc92f5106e5bcb05c51869337eb19742fdfa6c8346c18e78ff88 go1.24.1.darwin-arm64.tar.gz
|
||||
78b0fc8ddc344eb499f1a952c687cb84cbd28ba2b739cfa0d4eb042f07e44e82 go1.24.1.darwin-arm64.pkg
|
||||
e70053f56f7eb93806d80cbd5726f78509a0a467602f7bea0e2c4ee8ed7c3968 go1.24.1.dragonfly-amd64.tar.gz
|
||||
3595e2674ed8fe72e604ca59c964d3e5277aafb08475c2b1aaca2d2fd69c24fc go1.24.1.freebsd-386.tar.gz
|
||||
47d7de8bb64d5c3ee7b6723aa62d5ecb11e3568ef2249bbe1d4bbd432d37c00c go1.24.1.freebsd-amd64.tar.gz
|
||||
04eec3bcfaa14c1370cdf98e8307fac7e4853496c3045afb9c3124a29cbca205 go1.24.1.freebsd-arm.tar.gz
|
||||
51aa70146e40cfdc20927424083dc86e6223f85dc08089913a1651973b55665b go1.24.1.freebsd-arm64.tar.gz
|
||||
3c131d8e3fc285a1340f87813153e24226d3ddbd6e54f3facbd6e4c46a84655e go1.24.1.freebsd-riscv64.tar.gz
|
||||
201d09da737ba39d5367f87d4e8b31edaeeb3dc9b9c407cb8cfb40f90c5a727a go1.24.1.illumos-amd64.tar.gz
|
||||
8c530ecedbc17e42ce10177bea07ccc96a3e77c792ea1ea72173a9675d16ffa5 go1.24.1.linux-386.tar.gz
|
||||
cb2396bae64183cdccf81a9a6df0aea3bce9511fc21469fb89a0c00470088073 go1.24.1.linux-amd64.tar.gz
|
||||
8df5750ffc0281017fb6070fba450f5d22b600a02081dceef47966ffaf36a3af go1.24.1.linux-arm64.tar.gz
|
||||
6d95f8d7884bfe2364644c837f080f2b585903d0b771eb5b06044e226a4f120a go1.24.1.linux-armv6l.tar.gz
|
||||
19304a4a56e46d04604547d2d83235dc4f9b192c79832560ce337d26cc7b835a go1.24.1.linux-loong64.tar.gz
|
||||
6347be77fa5359c12a5308c8ab87147c1fc4717b0c216493d1706c3b9fcde22d go1.24.1.linux-mips.tar.gz
|
||||
1647df415f7030b82d4105670192aa7e8910e18563bb0d505192d72800cc2d21 go1.24.1.linux-mips64.tar.gz
|
||||
762da594e4ec0f9cf6defae6ef971f5f7901203ee6a2d979e317adec96657317 go1.24.1.linux-mips64le.tar.gz
|
||||
9d8133c7b23a557399fab870b5cf464079c2b623a43b214a7567cf11c254a444 go1.24.1.linux-mipsle.tar.gz
|
||||
132f10999abbaccbada47fa85462db30c423955913b14d6c692de25f4636c766 go1.24.1.linux-ppc64.tar.gz
|
||||
0fb522efcefabae6e37e69bdc444094e75bfe824ea6d4cc3cbc70c7ae1b16858 go1.24.1.linux-ppc64le.tar.gz
|
||||
eaef4323d5467ff97fb1979c8491764060dade19f02f3275a9313f9a0da3b9c0 go1.24.1.linux-riscv64.tar.gz
|
||||
6c05e14d8f11094cb56a1c50f390b6b658bed8a7cbd8d1a57e926581b7eabfce go1.24.1.linux-s390x.tar.gz
|
||||
5dbb287d343ea00d58a70b11629f32ee716dc50a6875c459ea2018df0f294cd8 go1.24.1.netbsd-386.tar.gz
|
||||
617aa3faee50ce84c343db0888e9a210c310a7203666b4ed620f31030c9fb32f go1.24.1.netbsd-amd64.tar.gz
|
||||
59a928b7080c4a6ac985946274b7c65ce1cecc0b468ecd992d17b7c12fab9296 go1.24.1.netbsd-arm.tar.gz
|
||||
28daa8d0feb4aef2af60cefa3305bb9314de7e8a05cbca41ac548964cdfe89b7 go1.24.1.netbsd-arm64.tar.gz
|
||||
b7382b2f5d99813aeac14db482faa3bfbd47a68880b607fa2a7e669e26bab9cd go1.24.1.openbsd-386.tar.gz
|
||||
2513b6537c45deead5e641c7ce7502913e7d5e6f0b21c52542fb11f81578690f go1.24.1.openbsd-amd64.tar.gz
|
||||
853c1917d4fc7b144c55a02842aa48542d5cc798dde8db96dc0fdbc263200e04 go1.24.1.openbsd-arm.tar.gz
|
||||
6bc207b91e6f6ae3347fb54616a8fb2f5c11983713846a4cef111ff3f4f94d14 go1.24.1.openbsd-arm64.tar.gz
|
||||
4279260e2f2b94ee94e81470d13db7367f4393b061fee60985528fa0fa430df4 go1.24.1.openbsd-ppc64.tar.gz
|
||||
6fc4023a0a339ee0778522364a127d94c78e62122288d47d820dba703f81dc07 go1.24.1.openbsd-riscv64.tar.gz
|
||||
b5eb9fafd77146e7e1f748acfd95559580ecc8d2f15abf432a20f58c929c7cd2 go1.24.1.plan9-386.tar.gz
|
||||
24dcad6361b141fc8cced15b092351e12a99d2e58d7013204a3013c50daf9fdd go1.24.1.plan9-amd64.tar.gz
|
||||
a026ac3b55aa1e6fdc2aaab30207a117eafbe965ed81d3aa0676409f280ddc37 go1.24.1.plan9-arm.tar.gz
|
||||
8e4f6a77388dc6e5aa481efd5abdb3b9f5c9463bb82f4db074494e04e5c84992 go1.24.1.solaris-amd64.tar.gz
|
||||
b799f4ab264eef12a014c759383ed934056608c483e0f73e34ea6caf9f1df5f9 go1.24.1.windows-386.zip
|
||||
db128981033ac82a64688a123f631e61297b6b8f52ca913145e57caa8ce94cc3 go1.24.1.windows-386.msi
|
||||
95666b551453209a2b8869d29d177285ff9573af10f085d961d7ae5440f645ce go1.24.1.windows-amd64.zip
|
||||
5968e7adcf26e68a54f1cd41ad561275a670a8e2ca5263bc375b524638557dfb go1.24.1.windows-amd64.msi
|
||||
e28c4e6d0b913955765b46157ab88ae59bb636acaa12d7bec959aa6900f1cebd go1.24.1.windows-arm64.zip
|
||||
6d352c1f154a102a5b90c480cc64bab205ccf2681e34e78a3a4d3f1ddfbc81e4 go1.24.1.windows-arm64.msi
|
||||
178f2832820274b43e177d32f06a3ebb0129e427dd20a5e4c88df2c1763cf10a go1.25.7.src.tar.gz
|
||||
81bf2a1f20633f62d55d826d82dde3b0570cf1408a91e15781b266037299285b go1.25.7.aix-ppc64.tar.gz
|
||||
bf5050a2152f4053837b886e8d9640c829dbacbc3370f913351eb0904cb706f5 go1.25.7.darwin-amd64.tar.gz
|
||||
ff18369ffad05c57d5bed888b660b31385f3c913670a83ef557cdfd98ea9ae1b go1.25.7.darwin-arm64.tar.gz
|
||||
c5dccd7f192dd7b305dc209fb316ac1917776d74bd8e4d532ef2772f305bf42a go1.25.7.dragonfly-amd64.tar.gz
|
||||
a2de97c8ac74bf64b0ae73fe9d379e61af530e061bc7f8f825044172ffe61a8b go1.25.7.freebsd-386.tar.gz
|
||||
055f9e138787dcafa81eb0314c8ff70c6dd0f6dba1e8a6957fef5d5efd1ab8fd go1.25.7.freebsd-amd64.tar.gz
|
||||
60e7f7a7c990f0b9539ac8ed668155746997d404643a4eecd47b3dee1b7e710b go1.25.7.freebsd-arm.tar.gz
|
||||
631e03d5fd4c526e2f499154d8c6bf4cb081afb2fff171c428722afc9539d53a go1.25.7.freebsd-arm64.tar.gz
|
||||
8a264fd685823808140672812e3ad9c43f6ad59444c0dc14cdd3a1351839ddd5 go1.25.7.freebsd-riscv64.tar.gz
|
||||
57c672447d906a1bcab98f2b11492d54521a791aacbb4994a25169e59cbe289a go1.25.7.illumos-amd64.tar.gz
|
||||
2866517e9ca81e6a2e85a930e9b11bc8a05cfeb2fc6dc6cb2765e7fb3c14b715 go1.25.7.linux-386.tar.gz
|
||||
12e6d6a191091ae27dc31f6efc630e3a3b8ba409baf3573d955b196fdf086005 go1.25.7.linux-amd64.tar.gz
|
||||
ba611a53534135a81067240eff9508cd7e256c560edd5d8c2fef54f083c07129 go1.25.7.linux-arm64.tar.gz
|
||||
1ba07e0eb86b839e72467f4b5c7a5597d07f30bcf5563c951410454f7cda5266 go1.25.7.linux-armv6l.tar.gz
|
||||
775753fc5952a334c415f08768df2f0b73a3228a16e8f5f63d545daacb4e3357 go1.25.7.linux-loong64.tar.gz
|
||||
1a023bb367c5fbb4c637a2f6dc23ff17c6591ad929ce16ea88c74d857153b307 go1.25.7.linux-mips.tar.gz
|
||||
a8e97223d8aa6fdfd45f132a4784d2f536bbac5f3d63a24b63d33b6bfe1549af go1.25.7.linux-mips64.tar.gz
|
||||
eb9edb6223330d5e20275667c65dea076b064c08e595fe4eba5d7d6055cfaccf go1.25.7.linux-mips64le.tar.gz
|
||||
9c1e693552a5f9bb9e0012d1c5e01456ecefbc59bef53a77305222ce10aba368 go1.25.7.linux-mipsle.tar.gz
|
||||
28a788798e7329acbbc0ac2caa5e4368b1e5ede646cc24429c991214cfb45c63 go1.25.7.linux-ppc64.tar.gz
|
||||
42124c0edc92464e2b37b2d7fcd3658f0c47ebd6a098732415a522be8cb88e3f go1.25.7.linux-ppc64le.tar.gz
|
||||
88d59c6893c8425875d6eef8e3434bc2fa2552e5ad4c058c6cd8cd710a0301c8 go1.25.7.linux-riscv64.tar.gz
|
||||
c6b77facf666dc68195ecab05dbf0ebb4e755b2a8b7734c759880557f1c29b0c go1.25.7.linux-s390x.tar.gz
|
||||
f14c184d9ade0ee04c7735d4071257b90896ecbde1b32adae84135f055e6399b go1.25.7.netbsd-386.tar.gz
|
||||
7e7389e404dca1088c31f0fc07f1dd60891d7182bcd621469c14f7e79eceb3ff go1.25.7.netbsd-amd64.tar.gz
|
||||
70388bb3ef2f03dbf1357e9056bd09034a67e018262557354f8cf549766b3f9d go1.25.7.netbsd-arm.tar.gz
|
||||
8c1cda9d25bfc9b18d24d5f95fc23949dd3ff99fa408a6cfa40e2cf12b07e362 go1.25.7.netbsd-arm64.tar.gz
|
||||
42f0d1bfbe39b8401cccb84dd66b30795b97bfc9620dfdc17c5cd4fcf6495cb0 go1.25.7.openbsd-386.tar.gz
|
||||
e514879c0a28bc32123cd52c4c093de912477fe83f36a6d07517d066ef55391a go1.25.7.openbsd-amd64.tar.gz
|
||||
8cd22530695a0218232bf7efea8f162df1697a3106942ac4129b8c3de39ce4ef go1.25.7.openbsd-arm.tar.gz
|
||||
938720f6ebc0d1c53d7840321d3a31f29fd02496e84a6538f442a9311dc1cc9a go1.25.7.openbsd-arm64.tar.gz
|
||||
a4c378b73b98f89a3596c2ef51aabbb28783d9ca29f7e317d8ca07939660ce6f go1.25.7.openbsd-ppc64.tar.gz
|
||||
937b58734fbeaa8c7941a0e4285e7e84b7885396e8d11c23f9ab1a8ff10ff20e go1.25.7.openbsd-riscv64.tar.gz
|
||||
61a093c8c5244916f25740316386bb9f141545dcf01b06a79d1c78ece488403e go1.25.7.plan9-386.tar.gz
|
||||
7fc8f6689c9de8ccb7689d2278035fa83c2d601409101840df6ddfe09ba58699 go1.25.7.plan9-amd64.tar.gz
|
||||
9661dff8eaeeb62f1c3aadbc5ff189a2e6744e1ec885e32dbcb438f58a34def5 go1.25.7.plan9-arm.tar.gz
|
||||
28ecba0e1d7950c8b29a4a04962dd49c3bf5221f55a44f17d98f369f82859cf4 go1.25.7.solaris-amd64.tar.gz
|
||||
baa6b488291801642fa620026169e38bec2da2ac187cd3ae2145721cf826bbc3 go1.25.7.windows-386.zip
|
||||
c75e5f4ff62d085cc0017be3ad19d5536f46825fa05db06ec468941f847e3228 go1.25.7.windows-amd64.zip
|
||||
807033f85931bc4a589ca8497535dcbeb1f30d506e47fa200f5f04c4a71c3d9f go1.25.7.windows-arm64.zip
|
||||
|
||||
# version:golangci 1.64.6
|
||||
# version:golangci 2.10.1
|
||||
# https://github.com/golangci/golangci-lint/releases/
|
||||
# https://github.com/golangci/golangci-lint/releases/download/v1.64.6/
|
||||
08f9459e7125fed2612abd71596e04d172695921aff82120d1c1e5e9b6fff2a3 golangci-lint-1.64.6-darwin-amd64.tar.gz
|
||||
8c10d0c7c3935b8c2269d628b6a06a8f48d8fb4cc31af02fe4ce0cd18b0704c1 golangci-lint-1.64.6-darwin-arm64.tar.gz
|
||||
c07fcabb55deb8d2c4d390025568e76162d7f91b1d14bd2311be45d8d440a624 golangci-lint-1.64.6-freebsd-386.tar.gz
|
||||
8ed1ef1102e1a42983ffcaae8e06de6a540334c3a69e205c610b8a7c92d469cd golangci-lint-1.64.6-freebsd-amd64.tar.gz
|
||||
8f8dda66d1b4a85cc8a1daf1b69af6559c3eb0a41dd8033148a9ad85cfc0e1d9 golangci-lint-1.64.6-freebsd-armv6.tar.gz
|
||||
59e8ca1fa254661b2a55e96515b14a10cd02221d443054deac5b28c3c3e12d6b golangci-lint-1.64.6-freebsd-armv7.tar.gz
|
||||
e3d323d5f132e9b7593141bfe1d19c8460e65a55cea1008ec96945fed563f981 golangci-lint-1.64.6-illumos-amd64.tar.gz
|
||||
5ce910f2a864c5fbeb32a30cbd506e1b2ef215f7a0f422cd5be6370b13db6f03 golangci-lint-1.64.6-linux-386.deb
|
||||
2caab682a26b9a5fb94ba24e3a7e1404fa9eab2c12e36ae1c5548d80a1be190c golangci-lint-1.64.6-linux-386.rpm
|
||||
2d82d0a4716e6d9b70c95103054855cb4b5f20f7bbdee42297f0189955bd14b6 golangci-lint-1.64.6-linux-386.tar.gz
|
||||
9cd82503e9841abcaa57663fc899587fe90363c26d86a793a98d3080fd25e907 golangci-lint-1.64.6-linux-amd64.deb
|
||||
981aaca5e5202d4fbb162ec7080490eb67ef5d32add5fb62fb02210597acc9da golangci-lint-1.64.6-linux-amd64.rpm
|
||||
71e290acbacb7b3ba4f68f0540fb74dc180c4336ac8a6f3bdcd7fcc48b15148d golangci-lint-1.64.6-linux-amd64.tar.gz
|
||||
718016bb06c1f598a8d23c7964e2643de621dbe5808688cb38857eb0bb773c84 golangci-lint-1.64.6-linux-arm64.deb
|
||||
ddc0e7b4b10b47cf894aea157e89e3674bbb60f8f5c480110c21c49cc2c1634d golangci-lint-1.64.6-linux-arm64.rpm
|
||||
99a7ff13dec7a8781a68408b6ecb8a1c5e82786cba3189eaa91d5cdcc24362ce golangci-lint-1.64.6-linux-arm64.tar.gz
|
||||
90e360f89c244394912b8709fb83a900b6d56cf19141df2afaf9e902ef3057b1 golangci-lint-1.64.6-linux-armv6.deb
|
||||
46546ff7c98d873ffcdbee06b39dc1024fc08db4fbf1f6309360a44cf976b5c2 golangci-lint-1.64.6-linux-armv6.rpm
|
||||
e45c1a42868aca0b0ee54d14fb89da216f3b4409367cd7bce3b5f36788b4fc92 golangci-lint-1.64.6-linux-armv6.tar.gz
|
||||
3cf6ddbbbf358db3de4b64a24f9683bbe2da3f003cfdee86cb610124b57abafb golangci-lint-1.64.6-linux-armv7.deb
|
||||
508b6712710da10f11aab9ea5e63af415c932dfe7fff718e649d3100b838f797 golangci-lint-1.64.6-linux-armv7.rpm
|
||||
da9a8bbee86b4dfee73fbc17e0856ec84c5b04919eb09bf3dd5904c39ce41753 golangci-lint-1.64.6-linux-armv7.tar.gz
|
||||
ad496a58284e1e9c8ac6f993fec429dcd96c85a8c4715dbb6530a5af0dae7fbd golangci-lint-1.64.6-linux-loong64.deb
|
||||
3bd70fa737b224750254dce616d9a188570e49b894b0cdb2fd04155e2c061350 golangci-lint-1.64.6-linux-loong64.rpm
|
||||
a535af973499729f2215a84303eb0de61399057aad6901ddea1b4f73f68d5f2c golangci-lint-1.64.6-linux-loong64.tar.gz
|
||||
6ad2a1cd37ca30303a488abfca2de52aff57519901c6d8d2608656fe9fb05292 golangci-lint-1.64.6-linux-mips64.deb
|
||||
5f18369f0ca010a02c267352ebe6e3e0514c6debff49899c9e5520906c0da287 golangci-lint-1.64.6-linux-mips64.rpm
|
||||
3449d6c13307b91b0e8817f8911c07c3412cdb6931b8d101e42db3e9762e91ad golangci-lint-1.64.6-linux-mips64.tar.gz
|
||||
d4712a348f65dcaf9f6c58f1cfd6d0984d54a902873dca5e76f0d686f5c59499 golangci-lint-1.64.6-linux-mips64le.deb
|
||||
57cea4538894558cb8c956d6b69c5509e4304546abe4a467478fc9ada0c736d6 golangci-lint-1.64.6-linux-mips64le.rpm
|
||||
bc030977d44535b2152fddb2732f056d193c043992fe638ddecea21a40ef09fe golangci-lint-1.64.6-linux-mips64le.tar.gz
|
||||
1ceb4e492efa527d246c61798c581f49113756fab8c39bb3eefdb1fa97041f92 golangci-lint-1.64.6-linux-ppc64le.deb
|
||||
454e1c2b3583a8644e0c33a970fb4ce35b8f11848e1a770d9095d99d159ad0ab golangci-lint-1.64.6-linux-ppc64le.rpm
|
||||
fddf30d35923eb6c7bb57520d8645768f802bf86c4cbf5a3a13049efb9e71b82 golangci-lint-1.64.6-linux-ppc64le.tar.gz
|
||||
bd75f0dd6f65bee5821c433803b28f3c427ef3582764c3d0e7f7fae1c9d468b6 golangci-lint-1.64.6-linux-riscv64.deb
|
||||
58457207c225cbd5340c8dcb75d9a44aa890d604e28464115a3a9762febaed04 golangci-lint-1.64.6-linux-riscv64.rpm
|
||||
82639518a613a6705b7e2de5b28c278e875d782a5c97e9c1b2ac10b4ecd7852f golangci-lint-1.64.6-linux-riscv64.tar.gz
|
||||
131d69204f8ced200b1437731e987cc886edac30dc87e6e1dcbd4f833d351713 golangci-lint-1.64.6-linux-s390x.deb
|
||||
ca6caf28ca7a1df7cff720f8fd6ac4b8f2eac10c8cbfe7d2eade70876aded570 golangci-lint-1.64.6-linux-s390x.rpm
|
||||
ed966d28a6512bc2b1120029a9f78ed77f2015e330b589a731d67d59be30b0b1 golangci-lint-1.64.6-linux-s390x.tar.gz
|
||||
b181132b41943fc77ace7f9f5523085d12d3613f27774a0e35e17dd5e65ba589 golangci-lint-1.64.6-netbsd-386.tar.gz
|
||||
f7b81c426006e3c699dc8665797a462aecba8c2cd23ac4971472e55184d95bc9 golangci-lint-1.64.6-netbsd-amd64.tar.gz
|
||||
663d6fb4c3bef57b8aacdb1b1a4634075e55d294ed170724b443374860897ca6 golangci-lint-1.64.6-netbsd-arm64.tar.gz
|
||||
8c7a76ee822568cc19352bbb9b2b0863dc5e185eb07782adbbaf648afd02ebcd golangci-lint-1.64.6-netbsd-armv6.tar.gz
|
||||
0ce26d56ce78e516529e087118ba3f1bcd71d311b4c5b2bde6ec24a6e8966d85 golangci-lint-1.64.6-netbsd-armv7.tar.gz
|
||||
135d5d998168683f46e4fab308cef5aa3c282025b7de6b258f976aadfb820db7 golangci-lint-1.64.6-source.tar.gz
|
||||
ccdb0cc249531a205304a76308cfa7cda830083d083d557884416a2461148263 golangci-lint-1.64.6-windows-386.zip
|
||||
2d88f282e08e1853c70bc7c914b5f58beaa6509903d56098aeb9bc3df30ea9d5 golangci-lint-1.64.6-windows-amd64.zip
|
||||
6a3c6e7afc6916392679d7d6b95ac239827644e3e50ec4e8ca6ab1e4e6db65fe golangci-lint-1.64.6-windows-arm64.zip
|
||||
9c9c1ef9687651566987f93e76252f7526c386901d7d8aeee044ca88115da4b1 golangci-lint-1.64.6-windows-armv6.zip
|
||||
4f0df114155791799dfde8cd8cb6307fecfb17fed70b44205486ec925e2f39cf golangci-lint-1.64.6-windows-armv7.zip
|
||||
# https://github.com/golangci/golangci-lint/releases/download/v2.10.1
|
||||
66fb0da81b8033b477f97eea420d4b46b230ca172b8bb87c6610109f3772b6b6 golangci-lint-2.10.1-darwin-amd64.tar.gz
|
||||
03bfadf67e52b441b7ec21305e501c717df93c959836d66c7f97312654acb297 golangci-lint-2.10.1-darwin-arm64.tar.gz
|
||||
c9a44658ccc8f7b8dbbd4ae6020ba91c1a5d3987f4d91ced0f7d2bea013e57ca golangci-lint-2.10.1-freebsd-386.tar.gz
|
||||
a513c5cb4e0f5bd5767001af9d5e97e7868cfc2d9c46739a4df93e713cfb24af golangci-lint-2.10.1-freebsd-amd64.tar.gz
|
||||
2ef38eefc4b5cee2febacb75a30579526e5656c16338a921d80e59a8e87d4425 golangci-lint-2.10.1-freebsd-arm64.tar.gz
|
||||
8fea6766318b4829e766bbe325f10191d75297dcc44ae35bf374816037878e38 golangci-lint-2.10.1-freebsd-armv6.tar.gz
|
||||
30b629870574d6254f3e8804e5a74b34f98e1263c9d55465830d739c88b862ed golangci-lint-2.10.1-freebsd-armv7.tar.gz
|
||||
c0db839f866ce80b1b6c96167aa101cfe50d9c936f42d942a3c1cbdc1801af68 golangci-lint-2.10.1-illumos-amd64.tar.gz
|
||||
280eb56636e9175f671cd7b755d7d67f628ae2ed00a164d1e443c43c112034e5 golangci-lint-2.10.1-linux-386.deb
|
||||
065a7d99da61dc7dfbfef2e2d7053dd3fa6672598f2747117aa4bb5f45e7df7f golangci-lint-2.10.1-linux-386.rpm
|
||||
a55918c03bb413b2662287653ab2ae2fef4e37428b247dad6348724adde9d770 golangci-lint-2.10.1-linux-386.tar.gz
|
||||
8aa9b3aa14f39745eeb7fc7ff50bcac683e785397d1e4bc9afd2184b12c4ce86 golangci-lint-2.10.1-linux-amd64.deb
|
||||
62a111688e9e305032334a2cbc84f4d971b64bb3bffc99d3f80081d57fb25e32 golangci-lint-2.10.1-linux-amd64.rpm
|
||||
dfa775874cf0561b404a02a8f4481fc69b28091da95aa697259820d429b09c99 golangci-lint-2.10.1-linux-amd64.tar.gz
|
||||
b3f36937e8ea1660739dc0f5c892ea59c9c21ed4e75a91a25957c561f7f79a55 golangci-lint-2.10.1-linux-arm64.deb
|
||||
36d50314d53683b1f1a2a6cedfb5a9468451b481c64ab9e97a8e843ea088074d golangci-lint-2.10.1-linux-arm64.rpm
|
||||
6652b42ae02915eb2f9cb2a2e0cac99514c8eded8388d88ae3e06e1a52c00de8 golangci-lint-2.10.1-linux-arm64.tar.gz
|
||||
a32d8d318e803496812dd3461f250e52ccc7f53c47b95ce404a9cf55778ceb6a golangci-lint-2.10.1-linux-armv6.deb
|
||||
41d065f4c8ea165a1531abea644988ee2e973e4f0b49f9725ed3b979dac45112 golangci-lint-2.10.1-linux-armv6.rpm
|
||||
59159a4df03aabbde69d15c7b7b3df143363cbb41f4bd4b200caffb8e34fb734 golangci-lint-2.10.1-linux-armv6.tar.gz
|
||||
b2e8ec0e050a1e2251dfe1561434999d202f5a3f9fa47ce94378b0fd1662ea5a golangci-lint-2.10.1-linux-armv7.deb
|
||||
28c9331429a497da27e9c77846063bd0e8275e878ffedb4eb9e9f21d24771cc0 golangci-lint-2.10.1-linux-armv7.rpm
|
||||
818f33e95b273e3769284b25563b51ef6a294e9e25acf140fda5830c075a1a59 golangci-lint-2.10.1-linux-armv7.tar.gz
|
||||
6b6b85ed4b7c27f51097dd681523000409dde835e86e6e314e87be4bb013e2ab golangci-lint-2.10.1-linux-loong64.deb
|
||||
94050a0cf06169e2ae44afb307dcaafa7d7c3b38c0c23b5652cf9cb60f0c337f golangci-lint-2.10.1-linux-loong64.rpm
|
||||
25820300fccb8c961c1cdcb1f77928040c079e04c43a3a5ceb34b1cb4a1c5c8d golangci-lint-2.10.1-linux-loong64.tar.gz
|
||||
98bf39d10139fdcaa37f94950e9bbb8888660ae468847ae0bf1cb5bf67c1f68b golangci-lint-2.10.1-linux-mips64.deb
|
||||
df3ce5f03808dcceaa8b683d1d06e95c885f09b59dc8e15deb840fbe2b3e3299 golangci-lint-2.10.1-linux-mips64.rpm
|
||||
972508dda523067e6e6a1c8e6609d63bc7c4153819c11b947d439235cf17bac2 golangci-lint-2.10.1-linux-mips64.tar.gz
|
||||
1d37f2919e183b5bf8b1777ed8c4b163d3b491d0158355a7999d647655cbbeb6 golangci-lint-2.10.1-linux-mips64le.deb
|
||||
e341d031002cd09a416329ed40f674231051a38544b8f94deb2d1708ce1f4a6f golangci-lint-2.10.1-linux-mips64le.rpm
|
||||
393560122b9cb5538df0c357d30eb27b6ee563533fbb9b138c8db4fd264002af golangci-lint-2.10.1-linux-mips64le.tar.gz
|
||||
21ca46b6a96442e8957677a3ca059c6b93674a68a01b1c71f4e5df0ea2e96d19 golangci-lint-2.10.1-linux-ppc64le.deb
|
||||
57fe0cbca0a9bbdf1547c5e8aa7d278e6896b438d72a541bae6bc62c38b43d1e golangci-lint-2.10.1-linux-ppc64le.rpm
|
||||
e2883db9fa51584e5e203c64456f29993550a7faadc84e3faccdb48f0669992e golangci-lint-2.10.1-linux-ppc64le.tar.gz
|
||||
aa6da0e98ab0ba3bb7582e112174c349907d5edfeff90a551dca3c6eecf92fc0 golangci-lint-2.10.1-linux-riscv64.deb
|
||||
3c68d76cd884a7aad206223a980b9c20bb9ea74b560fa27ed02baf2389189234 golangci-lint-2.10.1-linux-riscv64.rpm
|
||||
3bca11bfac4197205639cbd4676a5415054e629ac6c12ea10fcbe33ef852d9c3 golangci-lint-2.10.1-linux-riscv64.tar.gz
|
||||
0c6aed2ce49db2586adbac72c80d871f06feb1caf4c0763a5ca98fec809a8f0b golangci-lint-2.10.1-linux-s390x.deb
|
||||
16c285adfe1061d69dd8e503be69f87c7202857c6f4add74ac02e3571158fbec golangci-lint-2.10.1-linux-s390x.rpm
|
||||
21011ad368eb04f024201b832095c6b5f96d0888de194cca5bfe4d9307d6364b golangci-lint-2.10.1-linux-s390x.tar.gz
|
||||
7b5191e77a70485918712e31ed55159956323e4911bab1b67569c9d86e1b75eb golangci-lint-2.10.1-netbsd-386.tar.gz
|
||||
07801fd38d293ebad10826f8285525a39ea91ce5ddad77d05bfa90bda9c884a9 golangci-lint-2.10.1-netbsd-amd64.tar.gz
|
||||
7e7219d71c1bf33b98c328c93dc0560706dd896a1c43c44696e5222fc9d7446e golangci-lint-2.10.1-netbsd-arm64.tar.gz
|
||||
92fbc90b9eec0e572269b0f5492a2895c426b086a68372fde49b7e4d4020863e golangci-lint-2.10.1-netbsd-armv6.tar.gz
|
||||
f67b3ae1f47caeefa507a4ebb0c8336958a19011fe48766443212030f75d004b golangci-lint-2.10.1-netbsd-armv7.tar.gz
|
||||
a40bc091c10cea84eaee1a90b84b65f5e8652113b0a600bb099e4e4d9d7caddb golangci-lint-2.10.1-windows-386.zip
|
||||
c60c87695e79db8e320f0e5be885059859de52bb5ee5f11be5577828570bc2a3 golangci-lint-2.10.1-windows-amd64.zip
|
||||
636ab790c8dcea8034aa34aba6031ca3893d68f7eda000460ab534341fadbab1 golangci-lint-2.10.1-windows-arm64.zip
|
||||
|
||||
# This is the builder on PPA that will build Go itself (inception-y), don't modify!
|
||||
#
|
||||
|
|
|
|||
298
build/ci.go
298
build/ci.go
|
|
@ -31,6 +31,9 @@ Available commands are:
|
|||
install [ -arch architecture ] [ -cc compiler ] [ packages... ] -- builds packages and executables
|
||||
test [ -coverage ] [ packages... ] -- runs the tests
|
||||
|
||||
keeper [ -dlgo ]
|
||||
keeper-archive [ -signer key-envvar ] [ -signify key-envvar ] [ -upload dest ]
|
||||
|
||||
archive [ -arch architecture ] [ -type zip|tar ] [ -signer key-envvar ] [ -signify key-envvar ] [ -upload dest ] -- archives build artifacts
|
||||
importkeys -- imports signing keys from env
|
||||
debsrc [ -signer key-id ] [ -upload dest ] -- creates a debian source package
|
||||
|
|
@ -57,12 +60,19 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/cespare/cp"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/crypto/signify"
|
||||
"github.com/ethereum/go-ethereum/internal/build"
|
||||
"github.com/ethereum/go-ethereum/internal/download"
|
||||
"github.com/ethereum/go-ethereum/internal/version"
|
||||
)
|
||||
|
||||
var (
|
||||
goModules = []string{
|
||||
".",
|
||||
"./cmd/keeper",
|
||||
}
|
||||
|
||||
// Files that end up in the geth*.zip archive.
|
||||
gethArchiveFiles = []string{
|
||||
"COPYING",
|
||||
|
|
@ -79,6 +89,42 @@ var (
|
|||
executablePath("clef"),
|
||||
}
|
||||
|
||||
// Keeper build targets with their configurations
|
||||
keeperTargets = []struct {
|
||||
Name string
|
||||
GOOS string
|
||||
GOARCH string
|
||||
CC string
|
||||
Tags string
|
||||
Env map[string]string
|
||||
}{
|
||||
{
|
||||
Name: "ziren",
|
||||
GOOS: "linux",
|
||||
GOARCH: "mipsle",
|
||||
// enable when cgo works
|
||||
// CC: "mipsel-linux-gnu-gcc",
|
||||
Tags: "ziren",
|
||||
Env: map[string]string{"GOMIPS": "softfloat", "CGO_ENABLED": "0"},
|
||||
},
|
||||
{
|
||||
Name: "wasm-js",
|
||||
GOOS: "js",
|
||||
GOARCH: "wasm",
|
||||
Tags: "example",
|
||||
},
|
||||
{
|
||||
Name: "wasm-wasi",
|
||||
GOOS: "wasip1",
|
||||
GOARCH: "wasm",
|
||||
Tags: "example",
|
||||
},
|
||||
{
|
||||
Name: "example",
|
||||
Tags: "example",
|
||||
},
|
||||
}
|
||||
|
||||
// A debian package is created for all executables listed here.
|
||||
debExecutables = []debExecutable{
|
||||
{
|
||||
|
|
@ -123,6 +169,7 @@ var (
|
|||
"jammy", // 22.04, EOL: 04/2032
|
||||
"noble", // 24.04, EOL: 04/2034
|
||||
"oracular", // 24.10, EOL: 07/2025
|
||||
"plucky", // 25.04, EOL: 01/2026
|
||||
}
|
||||
|
||||
// This is where the tests should be unpacked.
|
||||
|
|
@ -141,7 +188,7 @@ func executablePath(name string) string {
|
|||
func main() {
|
||||
log.SetFlags(log.Lshortfile)
|
||||
|
||||
if !build.FileExist(filepath.Join("build", "ci.go")) {
|
||||
if !common.FileExist(filepath.Join("build", "ci.go")) {
|
||||
log.Fatal("this script must be run from the root of the repository")
|
||||
}
|
||||
if len(os.Args) < 2 {
|
||||
|
|
@ -170,6 +217,10 @@ func main() {
|
|||
doPurge(os.Args[2:])
|
||||
case "sanitycheck":
|
||||
doSanityCheck()
|
||||
case "keeper":
|
||||
doInstallKeeper(os.Args[2:])
|
||||
case "keeper-archive":
|
||||
doKeeperArchive(os.Args[2:])
|
||||
default:
|
||||
log.Fatal("unknown command ", os.Args[1])
|
||||
}
|
||||
|
|
@ -190,7 +241,7 @@ func doInstall(cmdline []string) {
|
|||
// Configure the toolchain.
|
||||
tc := build.GoToolchain{GOARCH: *arch, CC: *cc}
|
||||
if *dlgo {
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
tc.Root = build.DownloadGo(csdb)
|
||||
}
|
||||
// Disable CLI markdown doc generation in release builds.
|
||||
|
|
@ -204,9 +255,6 @@ func doInstall(cmdline []string) {
|
|||
// Configure the build.
|
||||
gobuild := tc.Go("build", buildFlags(env, *staticlink, buildTags)...)
|
||||
|
||||
// We use -trimpath to avoid leaking local paths into the built executables.
|
||||
gobuild.Args = append(gobuild.Args, "-trimpath")
|
||||
|
||||
// Show packages during build.
|
||||
gobuild.Args = append(gobuild.Args, "-v")
|
||||
|
||||
|
|
@ -214,7 +262,7 @@ func doInstall(cmdline []string) {
|
|||
// Default: collect all 'main' packages in cmd/ and build those.
|
||||
packages := flag.Args()
|
||||
if len(packages) == 0 {
|
||||
packages = build.FindMainPackages("./cmd")
|
||||
packages = build.FindMainPackages(&tc, "./cmd/...")
|
||||
}
|
||||
|
||||
// Do the build!
|
||||
|
|
@ -226,6 +274,43 @@ func doInstall(cmdline []string) {
|
|||
}
|
||||
}
|
||||
|
||||
// doInstallKeeper builds keeper binaries for all supported targets.
|
||||
func doInstallKeeper(cmdline []string) {
|
||||
var dlgo = flag.Bool("dlgo", false, "Download Go and build with it")
|
||||
|
||||
flag.CommandLine.Parse(cmdline)
|
||||
env := build.Env()
|
||||
|
||||
// Configure the toolchain.
|
||||
tc := build.GoToolchain{}
|
||||
if *dlgo {
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
tc.Root = build.DownloadGo(csdb)
|
||||
}
|
||||
|
||||
for _, target := range keeperTargets {
|
||||
log.Printf("Building keeper-%s", target.Name)
|
||||
|
||||
// Configure the build.
|
||||
tc.GOARCH = target.GOARCH
|
||||
tc.GOOS = target.GOOS
|
||||
tc.CC = target.CC
|
||||
gobuild := tc.Go("build", buildFlags(env, true, []string{target.Tags})...)
|
||||
gobuild.Dir = "./cmd/keeper"
|
||||
gobuild.Args = append(gobuild.Args, "-v")
|
||||
|
||||
for key, value := range target.Env {
|
||||
gobuild.Env = append(gobuild.Env, key+"="+value)
|
||||
}
|
||||
outputName := fmt.Sprintf("keeper-%s", target.Name)
|
||||
|
||||
args := slices.Clone(gobuild.Args)
|
||||
args = append(args, "-o", executablePath(outputName))
|
||||
args = append(args, ".")
|
||||
build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env})
|
||||
}
|
||||
}
|
||||
|
||||
// buildFlags returns the go tool flags for building.
|
||||
func buildFlags(env build.Environment, staticLinking bool, buildTags []string) (flags []string) {
|
||||
var ld []string
|
||||
|
|
@ -258,12 +343,18 @@ func buildFlags(env build.Environment, staticLinking bool, buildTags []string) (
|
|||
}
|
||||
ld = append(ld, "-extldflags", "'"+strings.Join(extld, " ")+"'")
|
||||
}
|
||||
// TODO(gballet): revisit after the input api has been defined
|
||||
if runtime.GOARCH == "wasm" {
|
||||
ld = append(ld, "-gcflags=all=-d=softfloat")
|
||||
}
|
||||
if len(ld) > 0 {
|
||||
flags = append(flags, "-ldflags", strings.Join(ld, " "))
|
||||
}
|
||||
if len(buildTags) > 0 {
|
||||
flags = append(flags, "-tags", strings.Join(buildTags, ","))
|
||||
}
|
||||
// We use -trimpath to avoid leaking local paths into the built executables.
|
||||
flags = append(flags, "-trimpath")
|
||||
return flags
|
||||
}
|
||||
|
||||
|
|
@ -281,18 +372,24 @@ func doTest(cmdline []string) {
|
|||
race = flag.Bool("race", false, "Execute the race detector")
|
||||
short = flag.Bool("short", false, "Pass the 'short'-flag to go test")
|
||||
cachedir = flag.String("cachedir", "./build/cache", "directory for caching downloads")
|
||||
threads = flag.Int("p", 1, "Number of CPU threads to use for testing")
|
||||
)
|
||||
flag.CommandLine.Parse(cmdline)
|
||||
|
||||
// Load checksums file (needed for both spec tests and dlgo)
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
|
||||
// Get test fixtures.
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
downloadSpecTestFixtures(csdb, *cachedir)
|
||||
if !*short {
|
||||
downloadSpecTestFixtures(csdb, *cachedir)
|
||||
}
|
||||
|
||||
// Configure the toolchain.
|
||||
tc := build.GoToolchain{GOARCH: *arch, CC: *cc}
|
||||
if *dlgo {
|
||||
tc.Root = build.DownloadGo(csdb)
|
||||
}
|
||||
|
||||
gotest := tc.Go("test")
|
||||
|
||||
// CI needs a bit more time for the statetests (default 45m).
|
||||
|
|
@ -306,7 +403,7 @@ func doTest(cmdline []string) {
|
|||
|
||||
// Test a single package at a time. CI builders are slow
|
||||
// and some tests run into timeouts under load.
|
||||
gotest.Args = append(gotest.Args, "-p", "1")
|
||||
gotest.Args = append(gotest.Args, "-p", fmt.Sprintf("%d", *threads))
|
||||
if *coverage {
|
||||
gotest.Args = append(gotest.Args, "-covermode=atomic", "-cover")
|
||||
}
|
||||
|
|
@ -320,25 +417,28 @@ func doTest(cmdline []string) {
|
|||
gotest.Args = append(gotest.Args, "-short")
|
||||
}
|
||||
|
||||
packages := []string{"./..."}
|
||||
if len(flag.CommandLine.Args()) > 0 {
|
||||
packages = flag.CommandLine.Args()
|
||||
packages := flag.CommandLine.Args()
|
||||
if len(packages) > 0 {
|
||||
gotest.Args = append(gotest.Args, packages...)
|
||||
build.MustRun(gotest)
|
||||
return
|
||||
}
|
||||
|
||||
// No packages specified, run all tests for all modules.
|
||||
gotest.Args = append(gotest.Args, "./...")
|
||||
for _, mod := range goModules {
|
||||
test := *gotest
|
||||
test.Dir = mod
|
||||
build.MustRun(&test)
|
||||
}
|
||||
gotest.Args = append(gotest.Args, packages...)
|
||||
build.MustRun(gotest)
|
||||
}
|
||||
|
||||
// downloadSpecTestFixtures downloads and extracts the execution-spec-tests fixtures.
|
||||
func downloadSpecTestFixtures(csdb *build.ChecksumDB, cachedir string) string {
|
||||
executionSpecTestsVersion, err := build.Version(csdb, "spec-tests")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
func downloadSpecTestFixtures(csdb *download.ChecksumDB, cachedir string) string {
|
||||
ext := ".tar.gz"
|
||||
base := "fixtures_pectra-devnet-6" // TODO(s1na) rename once the version becomes part of the filename
|
||||
url := fmt.Sprintf("https://github.com/ethereum/execution-spec-tests/releases/download/%s/%s%s", executionSpecTestsVersion, base, ext)
|
||||
base := "fixtures_develop"
|
||||
archivePath := filepath.Join(cachedir, base+ext)
|
||||
if err := csdb.DownloadFile(url, archivePath); err != nil {
|
||||
if err := csdb.DownloadFileFromKnownURL(archivePath); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := build.ExtractArchive(archivePath, executionSpecTestsDir); err != nil {
|
||||
|
|
@ -347,10 +447,6 @@ func downloadSpecTestFixtures(csdb *build.ChecksumDB, cachedir string) string {
|
|||
return filepath.Join(cachedir, base)
|
||||
}
|
||||
|
||||
// doCheckTidy assets that the Go modules files are tidied already.
|
||||
func doCheckTidy() {
|
||||
}
|
||||
|
||||
// doCheckGenerate ensures that re-generating generated files does not cause
|
||||
// any mutations in the source file tree.
|
||||
func doCheckGenerate() {
|
||||
|
|
@ -358,40 +454,51 @@ func doCheckGenerate() {
|
|||
cachedir = flag.String("cachedir", "./build/cache", "directory for caching binaries.")
|
||||
tc = new(build.GoToolchain)
|
||||
)
|
||||
// Compute the origin hashes of all the files
|
||||
var hashes map[string][32]byte
|
||||
|
||||
var err error
|
||||
hashes, err = build.HashFolder(".", []string{"tests/testdata", "build/cache", ".git"})
|
||||
if err != nil {
|
||||
log.Fatal("Error computing hashes", "err", err)
|
||||
}
|
||||
// Run any go generate steps we might be missing
|
||||
var (
|
||||
protocPath = downloadProtoc(*cachedir)
|
||||
protocGenGoPath = downloadProtocGenGo(*cachedir)
|
||||
)
|
||||
c := tc.Go("generate", "./...")
|
||||
pathList := []string{filepath.Join(protocPath, "bin"), protocGenGoPath, os.Getenv("PATH")}
|
||||
c.Env = append(c.Env, "PATH="+strings.Join(pathList, string(os.PathListSeparator)))
|
||||
build.MustRun(c)
|
||||
|
||||
// Check if generate file hashes have changed
|
||||
generated, err := build.HashFolder(".", []string{"tests/testdata", "build/cache", ".git"})
|
||||
if err != nil {
|
||||
log.Fatalf("Error re-computing hashes: %v", err)
|
||||
excludes := []string{"tests/testdata", "build/cache", ".git"}
|
||||
for i := range excludes {
|
||||
excludes[i] = filepath.FromSlash(excludes[i])
|
||||
}
|
||||
updates := build.DiffHashes(hashes, generated)
|
||||
for _, file := range updates {
|
||||
log.Printf("File changed: %s", file)
|
||||
}
|
||||
if len(updates) != 0 {
|
||||
log.Fatal("One or more generated files were updated by running 'go generate ./...'")
|
||||
|
||||
for _, mod := range goModules {
|
||||
// Compute the origin hashes of all the files
|
||||
hashes, err := build.HashFolder(mod, excludes)
|
||||
if err != nil {
|
||||
log.Fatal("Error computing hashes", "err", err)
|
||||
}
|
||||
|
||||
c := tc.Go("generate", "./...")
|
||||
c.Env = append(c.Env, "PATH="+strings.Join(pathList, string(os.PathListSeparator)))
|
||||
c.Dir = mod
|
||||
build.MustRun(c)
|
||||
// Check if generate file hashes have changed
|
||||
generated, err := build.HashFolder(mod, excludes)
|
||||
if err != nil {
|
||||
log.Fatalf("Error re-computing hashes: %v", err)
|
||||
}
|
||||
updates := build.DiffHashes(hashes, generated)
|
||||
for _, file := range updates {
|
||||
log.Printf("File changed: %s", file)
|
||||
}
|
||||
if len(updates) != 0 {
|
||||
log.Fatal("One or more generated files were updated by running 'go generate ./...'")
|
||||
}
|
||||
}
|
||||
fmt.Println("No stale files detected.")
|
||||
|
||||
// Run go mod tidy check.
|
||||
build.MustRun(tc.Go("mod", "tidy", "-diff"))
|
||||
for _, mod := range goModules {
|
||||
tidy := tc.Go("mod", "tidy", "-diff")
|
||||
tidy.Dir = mod
|
||||
build.MustRun(tidy)
|
||||
}
|
||||
fmt.Println("No untidy module files detected.")
|
||||
}
|
||||
|
||||
|
|
@ -431,27 +538,42 @@ func doLint(cmdline []string) {
|
|||
cachedir = flag.String("cachedir", "./build/cache", "directory for caching golangci-lint binary.")
|
||||
)
|
||||
flag.CommandLine.Parse(cmdline)
|
||||
packages := []string{"./..."}
|
||||
if len(flag.CommandLine.Args()) > 0 {
|
||||
packages = flag.CommandLine.Args()
|
||||
}
|
||||
|
||||
linter := downloadLinter(*cachedir)
|
||||
lflags := []string{"run", "--config", ".golangci.yml"}
|
||||
build.MustRunCommandWithOutput(linter, append(lflags, packages...)...)
|
||||
linter, err := filepath.Abs(linter)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
config, err := filepath.Abs(".golangci.yml")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
lflags := []string{"run", "--config", config}
|
||||
packages := flag.CommandLine.Args()
|
||||
if len(packages) > 0 {
|
||||
build.MustRunCommandWithOutput(linter, append(lflags, packages...)...)
|
||||
} else {
|
||||
// Run for all modules in workspace.
|
||||
for _, mod := range goModules {
|
||||
args := append(lflags, "./...")
|
||||
lintcmd := exec.Command(linter, args...)
|
||||
lintcmd.Dir = mod
|
||||
build.MustRunWithOutput(lintcmd)
|
||||
}
|
||||
}
|
||||
fmt.Println("You have achieved perfection.")
|
||||
}
|
||||
|
||||
// downloadLinter downloads and unpacks golangci-lint.
|
||||
func downloadLinter(cachedir string) string {
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
version, err := build.Version(csdb, "golangci")
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
version, err := csdb.FindVersion("golangci")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
arch := runtime.GOARCH
|
||||
ext := ".tar.gz"
|
||||
|
||||
if runtime.GOOS == "windows" {
|
||||
ext = ".zip"
|
||||
}
|
||||
|
|
@ -459,9 +581,8 @@ func downloadLinter(cachedir string) string {
|
|||
arch += "v" + os.Getenv("GOARM")
|
||||
}
|
||||
base := fmt.Sprintf("golangci-lint-%s-%s-%s", version, runtime.GOOS, arch)
|
||||
url := fmt.Sprintf("https://github.com/golangci/golangci-lint/releases/download/v%s/%s%s", version, base, ext)
|
||||
archivePath := filepath.Join(cachedir, base+ext)
|
||||
if err := csdb.DownloadFile(url, archivePath); err != nil {
|
||||
if err := csdb.DownloadFileFromKnownURL(archivePath); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := build.ExtractArchive(archivePath, cachedir); err != nil {
|
||||
|
|
@ -497,8 +618,8 @@ func protocArchiveBaseName() (string, error) {
|
|||
// in the generate command. It returns the full path of the directory
|
||||
// containing the 'protoc-gen-go' executable.
|
||||
func downloadProtocGenGo(cachedir string) string {
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
version, err := build.Version(csdb, "protoc-gen-go")
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
version, err := csdb.FindVersion("protoc-gen-go")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
|
@ -510,10 +631,8 @@ func downloadProtocGenGo(cachedir string) string {
|
|||
archiveName += ".tar.gz"
|
||||
}
|
||||
|
||||
url := fmt.Sprintf("https://github.com/protocolbuffers/protobuf-go/releases/download/v%s/%s", version, archiveName)
|
||||
|
||||
archivePath := path.Join(cachedir, archiveName)
|
||||
if err := csdb.DownloadFile(url, archivePath); err != nil {
|
||||
if err := csdb.DownloadFileFromKnownURL(archivePath); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
extractDest := filepath.Join(cachedir, baseName)
|
||||
|
|
@ -531,8 +650,8 @@ func downloadProtocGenGo(cachedir string) string {
|
|||
// files as a CI step. It returns the full path to the directory containing
|
||||
// the protoc executable.
|
||||
func downloadProtoc(cachedir string) string {
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
version, err := build.Version(csdb, "protoc")
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
version, err := csdb.FindVersion("protoc")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
|
@ -543,10 +662,8 @@ func downloadProtoc(cachedir string) string {
|
|||
|
||||
fileName := fmt.Sprintf("protoc-%s-%s", version, baseName)
|
||||
archiveFileName := fileName + ".zip"
|
||||
url := fmt.Sprintf("https://github.com/protocolbuffers/protobuf/releases/download/v%s/%s", version, archiveFileName)
|
||||
archivePath := filepath.Join(cachedir, archiveFileName)
|
||||
|
||||
if err := csdb.DownloadFile(url, archivePath); err != nil {
|
||||
if err := csdb.DownloadFileFromKnownURL(archivePath); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
extractDest := filepath.Join(cachedir, fileName)
|
||||
|
|
@ -600,6 +717,32 @@ func doArchive(cmdline []string) {
|
|||
}
|
||||
}
|
||||
|
||||
func doKeeperArchive(cmdline []string) {
|
||||
var (
|
||||
signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. LINUX_SIGNING_KEY)`)
|
||||
signify = flag.String("signify", "", `Environment variable holding the signify key (e.g. LINUX_SIGNIFY_KEY)`)
|
||||
upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`)
|
||||
)
|
||||
flag.CommandLine.Parse(cmdline)
|
||||
|
||||
var (
|
||||
env = build.Env()
|
||||
vsn = version.Archive(env.Commit)
|
||||
keeper = "keeper-" + vsn + ".tar.gz"
|
||||
)
|
||||
maybeSkipArchive(env)
|
||||
files := []string{"COPYING"}
|
||||
for _, target := range keeperTargets {
|
||||
files = append(files, executablePath(fmt.Sprintf("keeper-%s", target.Name)))
|
||||
}
|
||||
if err := build.WriteArchive(keeper, files); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := archiveUpload(keeper, *upload, *signer, *signify); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func archiveBasename(arch string, archiveVersion string) string {
|
||||
platform := runtime.GOOS + "-" + arch
|
||||
if arch == "arm" {
|
||||
|
|
@ -826,18 +969,17 @@ func doDebianSource(cmdline []string) {
|
|||
// downloadGoBootstrapSources downloads the Go source tarball(s) that will be used
|
||||
// to bootstrap the builder Go.
|
||||
func downloadGoBootstrapSources(cachedir string) []string {
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
|
||||
var bundles []string
|
||||
for _, booter := range []string{"ppa-builder-1.19", "ppa-builder-1.21", "ppa-builder-1.23"} {
|
||||
gobootVersion, err := build.Version(csdb, booter)
|
||||
gobootVersion, err := csdb.FindVersion(booter)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
file := fmt.Sprintf("go%s.src.tar.gz", gobootVersion)
|
||||
url := "https://dl.google.com/go/" + file
|
||||
dst := filepath.Join(cachedir, file)
|
||||
if err := csdb.DownloadFile(url, dst); err != nil {
|
||||
if err := csdb.DownloadFileFromKnownURL(dst); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
bundles = append(bundles, dst)
|
||||
|
|
@ -847,15 +989,14 @@ func downloadGoBootstrapSources(cachedir string) []string {
|
|||
|
||||
// downloadGoSources downloads the Go source tarball.
|
||||
func downloadGoSources(cachedir string) string {
|
||||
csdb := build.MustLoadChecksums("build/checksums.txt")
|
||||
dlgoVersion, err := build.Version(csdb, "golang")
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
dlgoVersion, err := csdb.FindVersion("golang")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
file := fmt.Sprintf("go%s.src.tar.gz", dlgoVersion)
|
||||
url := "https://dl.google.com/go/" + file
|
||||
dst := filepath.Join(cachedir, file)
|
||||
if err := csdb.DownloadFile(url, dst); err != nil {
|
||||
if err := csdb.DownloadFileFromKnownURL(dst); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return dst
|
||||
|
|
@ -874,7 +1015,7 @@ func ppaUpload(workdir, ppa, sshUser string, files []string) {
|
|||
var idfile string
|
||||
if sshkey := getenvBase64("PPA_SSH_KEY"); len(sshkey) > 0 {
|
||||
idfile = filepath.Join(workdir, "sshkey")
|
||||
if !build.FileExist(idfile) {
|
||||
if !common.FileExist(idfile) {
|
||||
os.WriteFile(idfile, sshkey, 0600)
|
||||
}
|
||||
}
|
||||
|
|
@ -1181,5 +1322,6 @@ func doPurge(cmdline []string) {
|
|||
}
|
||||
|
||||
func doSanityCheck() {
|
||||
build.DownloadAndVerifyChecksums(build.MustLoadChecksums("build/checksums.txt"))
|
||||
csdb := download.MustLoadChecksums("build/checksums.txt")
|
||||
csdb.DownloadAndVerifyAll()
|
||||
}
|
||||
|
|
|
|||
32
circle.yml
32
circle.yml
|
|
@ -1,32 +0,0 @@
|
|||
machine:
|
||||
services:
|
||||
- docker
|
||||
|
||||
dependencies:
|
||||
cache_directories:
|
||||
- "~/.ethash" # Cache the ethash DAG generated by hive for consecutive builds
|
||||
- "~/.docker" # Cache all docker images manually to avoid lengthy rebuilds
|
||||
override:
|
||||
# Restore all previously cached docker images
|
||||
- mkdir -p ~/.docker
|
||||
- for img in `ls ~/.docker`; do docker load -i ~/.docker/$img; done
|
||||
|
||||
# Pull in and hive, restore cached ethash DAGs and do a dry run
|
||||
- go get -u github.com/karalabe/hive
|
||||
- (cd ~/.go_workspace/src/github.com/karalabe/hive && mkdir -p workspace/ethash/ ~/.ethash)
|
||||
- (cd ~/.go_workspace/src/github.com/karalabe/hive && cp -r ~/.ethash/. workspace/ethash/)
|
||||
- (cd ~/.go_workspace/src/github.com/karalabe/hive && hive --docker-noshell --client=NONE --test=. --sim=. --loglevel=6)
|
||||
|
||||
# Cache all the docker images and the ethash DAGs
|
||||
- for img in `docker images | grep -v "^<none>" | tail -n +2 | awk '{print $1}'`; do docker save $img > ~/.docker/`echo $img | tr '/' ':'`.tar; done
|
||||
- cp -r ~/.go_workspace/src/github.com/karalabe/hive/workspace/ethash/. ~/.ethash
|
||||
|
||||
test:
|
||||
override:
|
||||
# Build Geth and move into a known folder
|
||||
- make geth
|
||||
- cp ./build/bin/geth $HOME/geth
|
||||
|
||||
# Run hive and move all generated logs into the public artifacts folder
|
||||
- (cd ~/.go_workspace/src/github.com/karalabe/hive && hive --docker-noshell --client=go-ethereum:local --override=$HOME/geth --test=. --sim=.)
|
||||
- cp -r ~/.go_workspace/src/github.com/karalabe/hive/workspace/logs/* $CIRCLE_ARTIFACTS
|
||||
|
|
@ -43,6 +43,7 @@ func main() {
|
|||
utils.BeaconGenesisRootFlag,
|
||||
utils.BeaconGenesisTimeFlag,
|
||||
utils.BeaconCheckpointFlag,
|
||||
utils.BeaconCheckpointFileFlag,
|
||||
//TODO datadir for optional permanent database
|
||||
utils.MainnetFlag,
|
||||
utils.SepoliaFlag,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Clef
|
||||
|
||||
Clef can be used to sign transactions and data and is meant as a(n eventual) replacement for Geth's account management. This allows DApps to not depend on Geth's account management. When a DApp wants to sign data (or a transaction), it can send the content to Clef, which will then provide the user with context and asks for permission to sign the content. If the users grants the signing request, Clef will send the signature back to the DApp.
|
||||
Clef can be used to sign transactions and data and is meant as a(n eventual) replacement for Geth's account management. This allows DApps to not depend on Geth's account management. When a DApp wants to sign data (or a transaction), it can send the content to Clef, which will then provide the user with context and ask for permission to sign the content. If the user grants the signing request, Clef will send the signature back to the DApp.
|
||||
|
||||
This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can help in situations when a DApp is connected to an untrusted remote Ethereum node, because a local one is not available, not synchronized with the chain, or is a node that has no built-in (or limited) account management.
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ The External API is **untrusted**: it does not accept credentials, nor does it e
|
|||
|
||||
Clef has one native console-based UI, for operation without any standalone tools. However, there is also an API to communicate with an external UI. To enable that UI, the signer needs to be executed with the `--stdio-ui` option, which allocates `stdin` / `stdout` for the UI API.
|
||||
|
||||
An example (insecure) proof-of-concept of has been implemented in `pythonsigner.py`.
|
||||
An example (insecure) proof-of-concept has been implemented in `pythonsigner.py`.
|
||||
|
||||
The model is as follows:
|
||||
|
||||
|
|
@ -150,7 +150,7 @@ All hex encoded values must be prefixed with `0x`.
|
|||
|
||||
#### Create new password protected account
|
||||
|
||||
The signer will generate a new private key, encrypt it according to [web3 keystore spec](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) and store it in the keystore directory.
|
||||
The signer will generate a new private key, encrypt it according to [web3 keystore spec](https://ethereum.org/en/developers/docs/data-structures-and-encoding/web3-secret-storage/) and store it in the keystore directory.
|
||||
The client is responsible for creating a backup of the keystore. If the keystore is lost there is no method of retrieving lost accounts.
|
||||
|
||||
#### Arguments
|
||||
|
|
@ -335,7 +335,7 @@ Bash example:
|
|||
|
||||
#### Arguments
|
||||
- content type [string]: type of signed data
|
||||
- `text/validator`: hex data with custom validator defined in a contract
|
||||
- `text/validator`: hex data with a custom validator defined in a contract
|
||||
- `application/clique`: [clique](https://github.com/ethereum/EIPs/issues/225) headers
|
||||
- `text/plain`: simple hex data validated by `account_ecRecover`
|
||||
- account [address]: account to sign with
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ The API-method `account_signGnosisSafeTx` was added. This method takes two param
|
|||
```
|
||||
|
||||
Not all fields are required, though. This method is really just a UX helper, which massages the
|
||||
input to conform to the `EIP-712` [specification](https://docs.gnosis.io/safe/docs/contracts_tx_execution/#transaction-hash)
|
||||
input to conform to the `EIP-712` [specification](https://docs.safe.global/core-api/transaction-service-reference/gnosis)
|
||||
for the Gnosis Safe, and making the output be directly importable to by a relay service.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
The `signer` binary contains a ruleset engine, implemented with [OttoVM](https://github.com/robertkrimen/otto)
|
||||
|
||||
It enables usecases like the following:
|
||||
It enables use cases like the following:
|
||||
|
||||
* I want to auto-approve transactions with contract `CasinoDapp`, with up to `0.05 ether` in value to maximum `1 ether` per 24h period
|
||||
* I want to auto-approve transaction to contract `EthAlarmClock` with `data`=`0xdeadbeef`, if `value=0`, `gas < 44k` and `gasPrice < 40Gwei`
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ with our test chain. The chain files are located in `./cmd/devp2p/internal/ethte
|
|||
--nat=none \
|
||||
--networkid 3503995874084926 \
|
||||
--verbosity 5 \
|
||||
--authrpc.jwtsecret 0x7365637265747365637265747365637265747365637265747365637265747365
|
||||
--authrpc.jwtsecret jwt.secret
|
||||
|
||||
Note that the tests also require access to the engine API.
|
||||
The test suite can now be executed using the devp2p tool.
|
||||
|
|
@ -130,7 +130,7 @@ The test suite can now be executed using the devp2p tool.
|
|||
--chain internal/ethtest/testdata \
|
||||
--node enode://.... \
|
||||
--engineapi http://127.0.0.1:8551 \
|
||||
--jwtsecret 0x7365637265747365637265747365637265747365637265747365637265747365
|
||||
--jwtsecret $(cat jwt.secret)
|
||||
|
||||
Repeat the above process (re-initialising the node) in order to run the Eth Protocol test suite again.
|
||||
|
||||
|
|
|
|||
|
|
@ -66,10 +66,9 @@ func (s *Suite) dialAs(key *ecdsa.PrivateKey) (*Conn, error) {
|
|||
return nil, err
|
||||
}
|
||||
conn.caps = []p2p.Cap{
|
||||
{Name: "eth", Version: 67},
|
||||
{Name: "eth", Version: 68},
|
||||
{Name: "eth", Version: 69},
|
||||
}
|
||||
conn.ourHighestProtoVersion = 68
|
||||
conn.ourHighestProtoVersion = 69
|
||||
return &conn, nil
|
||||
}
|
||||
|
||||
|
|
@ -130,7 +129,7 @@ func (c *Conn) Write(proto Proto, code uint64, msg any) error {
|
|||
return err
|
||||
}
|
||||
|
||||
var errDisc error = fmt.Errorf("disconnect")
|
||||
var errDisc error = errors.New("disconnect")
|
||||
|
||||
// ReadEth reads an Eth sub-protocol wire message.
|
||||
func (c *Conn) ReadEth() (any, error) {
|
||||
|
|
@ -156,7 +155,7 @@ func (c *Conn) ReadEth() (any, error) {
|
|||
var msg any
|
||||
switch int(code) {
|
||||
case eth.StatusMsg:
|
||||
msg = new(eth.StatusPacket)
|
||||
msg = new(eth.StatusPacket69)
|
||||
case eth.GetBlockHeadersMsg:
|
||||
msg = new(eth.GetBlockHeadersPacket)
|
||||
case eth.BlockHeadersMsg:
|
||||
|
|
@ -229,9 +228,21 @@ func (c *Conn) ReadSnap() (any, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// dialAndPeer creates a peer connection and runs the handshake.
|
||||
func (s *Suite) dialAndPeer(status *eth.StatusPacket69) (*Conn, error) {
|
||||
c, err := s.dial()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err = c.peer(s.chain, status); err != nil {
|
||||
c.Close()
|
||||
}
|
||||
return c, err
|
||||
}
|
||||
|
||||
// peer performs both the protocol handshake and the status message
|
||||
// exchange with the node in order to peer with it.
|
||||
func (c *Conn) peer(chain *Chain, status *eth.StatusPacket) error {
|
||||
func (c *Conn) peer(chain *Chain, status *eth.StatusPacket69) error {
|
||||
if err := c.handshake(); err != nil {
|
||||
return fmt.Errorf("handshake failed: %v", err)
|
||||
}
|
||||
|
|
@ -304,7 +315,7 @@ func (c *Conn) negotiateEthProtocol(caps []p2p.Cap) {
|
|||
}
|
||||
|
||||
// statusExchange performs a `Status` message exchange with the given node.
|
||||
func (c *Conn) statusExchange(chain *Chain, status *eth.StatusPacket) error {
|
||||
func (c *Conn) statusExchange(chain *Chain, status *eth.StatusPacket69) error {
|
||||
loop:
|
||||
for {
|
||||
code, data, err := c.Read()
|
||||
|
|
@ -313,12 +324,16 @@ loop:
|
|||
}
|
||||
switch code {
|
||||
case eth.StatusMsg + protoOffset(ethProto):
|
||||
msg := new(eth.StatusPacket)
|
||||
msg := new(eth.StatusPacket69)
|
||||
if err := rlp.DecodeBytes(data, &msg); err != nil {
|
||||
return fmt.Errorf("error decoding status packet: %w", err)
|
||||
}
|
||||
if have, want := msg.Head, chain.blocks[chain.Len()-1].Hash(); have != want {
|
||||
return fmt.Errorf("wrong head block in status, want: %#x (block %d) have %#x",
|
||||
if have, want := msg.LatestBlock, chain.blocks[chain.Len()-1].NumberU64(); have != want {
|
||||
return fmt.Errorf("wrong head block in status, want: %d, have %d",
|
||||
want, have)
|
||||
}
|
||||
if have, want := msg.LatestBlockHash, chain.blocks[chain.Len()-1].Hash(); have != want {
|
||||
return fmt.Errorf("wrong head block in status, want: %#x (block %d) have %#x",
|
||||
want, chain.blocks[chain.Len()-1].NumberU64(), have)
|
||||
}
|
||||
if have, want := msg.ForkID, chain.ForkID(); !reflect.DeepEqual(have, want) {
|
||||
|
|
@ -348,13 +363,14 @@ loop:
|
|||
}
|
||||
if status == nil {
|
||||
// default status message
|
||||
status = ð.StatusPacket{
|
||||
status = ð.StatusPacket69{
|
||||
ProtocolVersion: uint32(c.negotiatedProtoVersion),
|
||||
NetworkID: chain.config.ChainID.Uint64(),
|
||||
TD: chain.TD(),
|
||||
Head: chain.blocks[chain.Len()-1].Hash(),
|
||||
Genesis: chain.blocks[0].Hash(),
|
||||
ForkID: chain.ForkID(),
|
||||
EarliestBlock: 0,
|
||||
LatestBlock: chain.blocks[chain.Len()-1].NumberU64(),
|
||||
LatestBlockHash: chain.blocks[chain.Len()-1].Hash(),
|
||||
}
|
||||
}
|
||||
if err := c.Write(ethProto, eth.StatusMsg, status); err != nil {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
hivechain generate \
|
||||
--pos \
|
||||
--fork-interval 6 \
|
||||
--tx-interval 1 \
|
||||
--length 500 \
|
||||
--length 600 \
|
||||
--outdir testdata \
|
||||
--lastfork cancun \
|
||||
--lastfork prague \
|
||||
--outputs accounts,genesis,chain,headstate,txinfo,headblock,headfcu,newpayload,forkenv
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ const (
|
|||
// Unexported devp2p protocol lengths from p2p package.
|
||||
const (
|
||||
baseProtoLen = 16
|
||||
ethProtoLen = 17
|
||||
ethProtoLen = 18
|
||||
snapProtoLen = 8
|
||||
)
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue