Skip to content
Open
Show file tree
Hide file tree
Changes from 63 commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
bc42e88
core: add basic chain history support in GenerateChain (#28428)
fjl Oct 31, 2023
285202a
cmd/evm: add --run option to blocktest command (#28421)
marioevz Oct 31, 2023
f4ac548
ethdb/pebble: cap memory table size as maxMemTableSize-1 (#28444)
rjl493456442 Oct 31, 2023
a3be381
core/vm: performance tweak of `OpCode.String()` (#28453)
lmittmann Nov 2, 2023
b1cec85
eth/tracers: add position field for callTracer logs (#28389)
alvarosevilla95 Nov 3, 2023
e91cdb4
ethclient: fix forwarding 1559 gas fields (#28462)
karalabe Nov 3, 2023
51b5ad3
.travis: enable cross building to macos arm64 (#28474)
karalabe Nov 7, 2023
97ae324
travis: use newer builder image (#28475)
karalabe Nov 7, 2023
f20b334
eth/filters: eth_getLogs fast exit for invalid block range (#28386)
jsvisa Nov 7, 2023
4d9f3cd
eth: set networkID to chainID by default (#28250)
MariusVanDerWijden Nov 7, 2023
470dba8
core/vm: set basefee to 0 internally on eth_call (#28470)
karalabe Nov 8, 2023
7ea860d
graphql: type of yParity from Long to BigInt (#28456)
jsvisa Nov 9, 2023
b77a9b1
cmd/geth: more testcases for logging (#28501)
holiman Nov 9, 2023
f7dde2a
ethdb/pebble: add `Errorf` function to panicLogger (#28491)
mcdee Nov 9, 2023
e38b9f1
eth/filters: exit early if topics-filter has more than 4 topics (#28494)
jsvisa Nov 10, 2023
326fa00
core/rawdb: fsync the index file after each freezer write (#28483)
rjl493456442 Nov 10, 2023
2f4833b
cmd/evm: allow state dump regardless if test passes in statetest (#28…
sorpaas Nov 10, 2023
ce5a480
ethclient: add empty/nonexist account testcase for eth_getProof RPC (…
jsvisa Nov 10, 2023
49b2c5f
build: upgrade -dlgo version to Go 1.21.4 (#28505)
sandakersmann Nov 10, 2023
f265cc2
cmd/geth: remove some whitespace in code and comments (#28148)
jsvisa Nov 10, 2023
fa8d398
cmd, core, trie: verkle-capable `geth init` (#28270)
gballet Nov 14, 2023
e803ef0
eth/tracers/js: fix isPush for push0 (#28520)
s1na Nov 14, 2023
24d4622
trie: spelling - fix comments in hasher (#28507)
sysvm Nov 14, 2023
2391fbc
tests/fuzzers: move fuzzers into native packages (#28467)
holiman Nov 14, 2023
c5b7cfa
tests: skip tests on windows 32bit CI (#28521)
holiman Nov 14, 2023
984f826
cmd/geth: more special cases logging tests (#28527)
jwasinger Nov 15, 2023
2814ee0
accounts,cmd,console,les,metrics: refactor some errors checked by (S…
BabyHalimao Nov 15, 2023
b9504e4
miner: run tests in parallel (#28506)
estensen Nov 15, 2023
fcc7ae1
internal/jsre/deps: fix typo in jsdoc (#28511)
aliening Nov 15, 2023
db7895d
accounts/abi: improve readability of method-to-string conversion (#2…
Halimao Nov 15, 2023
a75a2d6
all: replace some cases of strings.SplitN with strings.Cut (#28446)
estensen Nov 15, 2023
5bf8769
ethdb/memorydb, trie: reduced allocations (#28473)
holiman Nov 15, 2023
8b78d6a
Dockerfile: update Go to 1.21 (#28538)
estensen Nov 17, 2023
c8a2202
cmd/evm: validate blockchain tests poststate account storage (#28443)
danceratopz Nov 17, 2023
77cb21d
signer: run tests in parallel (#28536)
estensen Nov 20, 2023
a737482
accounts, cmd: fix typos (#28526)
levisyin Nov 20, 2023
14a1e96
core/txpool/legacypool: respect nolocals-setting (#28435)
jp-imx Nov 20, 2023
460cc16
cmd: run tests in parallel (#28546)
estensen Nov 20, 2023
661bd45
core/state/snapshot: print correct error from trie iterator (#28560)
rjl493456442 Nov 21, 2023
ad16f11
cmd/evm: capitalize evm commands (#28569)
tmelhao Nov 21, 2023
525db7b
accounts/abi: context info on unpack-errors (#28529)
levisyin Nov 21, 2023
146e8d9
core, trie, rpc: speed up tests (#28461)
MariusVanDerWijden Nov 21, 2023
6489a0d
ethdb/pebble: don't double-close iterator inside pebbleIterator (#28566)
magicxyyz Nov 21, 2023
e9f59b5
eth/filters: reuse error msg for invalid block range (#28479)
ucwong Nov 21, 2023
347fecd
core/types: make 'v' optional for DynamicFeeTx and BlobTx (#28564)
marioevz Nov 22, 2023
d6cea48
rpc: improve performance of subscription notification encoding (#28328)
jsvisa Nov 22, 2023
104dbf7
cmd/utils: validate pre-existing genesis in --dev mode (#28468)
jwasinger Nov 22, 2023
3cfcd25
cmd/geth: add support for --dev flag in dumpgenesis (#28463)
jwasinger Nov 22, 2023
5ff929c
les/vflux: run tests in parallel (#28524)
estensen Nov 22, 2023
d468c33
cmd/{geth,utils}: add cmd to export preimages in snap enumeration ord…
gballet Nov 22, 2023
63127f5
cmd/geth: fix build error (#28585)
fjl Nov 22, 2023
eec37e3
cmd/devp2p/internal/ethtest: undo debug-hack (#28588)
holiman Nov 23, 2023
d76efbb
params: update discV5 bootnodes (#28562)
cortze Nov 23, 2023
bdf5e38
cmd, les, tests: remove light client code (#28586)
MariusVanDerWijden Nov 23, 2023
90a0344
.github/workflows: add github action workflow
MariusVanDerWijden Nov 24, 2023
c133619
.github/workflows: add github action workflow
MariusVanDerWijden Nov 24, 2023
50ec012
.github/workflows: add github action workflow
MariusVanDerWijden Nov 24, 2023
5fa8c79
internal/build: fix build on latest windows
MariusVanDerWijden Nov 24, 2023
4ac5006
internal/build: fix build on latest windows
MariusVanDerWijden Nov 24, 2023
26135ed
.github/workflows: add github action workflow
MariusVanDerWijden Nov 24, 2023
6ce7fcf
internal/build: fix build on latest windows
MariusVanDerWijden Nov 24, 2023
aa64f0c
internal/build: prefer the self-hosted runner
MariusVanDerWijden Nov 24, 2023
a65ee54
internal/build: prefer the self-hosted runner
MariusVanDerWijden Nov 24, 2023
1810c1f
.github/workflows: move lint to self hosted
MariusVanDerWijden Nov 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: go-ethereum workflow

on:
push:
branches:
- master
tags:
- '**'
pull_request:
branches:
- master
workflow_dispatch:

jobs:
lint:
runs-on: ubuntu-latest
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a specific reason this doesn't run on self-hosted as well?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, my mistake. I stopped playing around with it at some point. Will pick it back up today

steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.20.5
- name: Lint
run: go run build/ci.go lint
- name: Build
run: go run build/ci.go install -dlgo

test:
runs-on: [self-hosted]

needs: lint
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.20.5
- name: Cache testdata
id: cache-testdata
uses: actions/cache@v3
with:
path: |
tests/testdata
key: ${{ runner.os }}-testdata

- name: Update git submodules
if: steps.cache-testdata.outputs.cache-hit != 'true'
run:
git submodule update --init --depth 1 --recursive
- name: Test
run: go run build/ci.go test -dlgo

3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ jobs:
- stage: build
if: type = push
os: osx
osx_image: xcode14.2
go: 1.21.x
env:
- azure-osx
Expand All @@ -104,6 +105,8 @@ jobs:
script:
- go run build/ci.go install -dlgo
- go run build/ci.go archive -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds
- go run build/ci.go install -dlgo -arch arm64
- go run build/ci.go archive -arch arm64 -type tar -signer OSX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds

# These builders run the tests
- stage: build
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.alltools
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ARG VERSION=""
ARG BUILDNUM=""

# Build Geth in a stock Go builder container
FROM golang:1.20-alpine as builder
FROM golang:1.21-alpine as builder

RUN apk add --no-cache gcc musl-dev linux-headers git

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,33 +22,31 @@ import (
"strings"
"testing"

"github.com/ethereum/go-ethereum/accounts/abi"
fuzz "github.com/google/gofuzz"
)

// TestReplicate can be used to replicate crashers from the fuzzing tests.
// Just replace testString with the data in .quoted
func TestReplicate(t *testing.T) {
testString := "\x20\x20\x20\x20\x20\x20\x20\x20\x80\x00\x00\x00\x20\x20\x20\x20\x00"
data := []byte(testString)
fuzzAbi(data)
//t.Skip("Test only useful for reproducing issues")
fuzzAbi([]byte("\x20\x20\x20\x20\x20\x20\x20\x20\x80\x00\x00\x00\x20\x20\x20\x20\x00"))
//fuzzAbi([]byte("asdfasdfkadsf;lasdf;lasd;lfk"))
}

func Fuzz(f *testing.F) {
// FuzzABI is the main entrypoint for fuzzing
func FuzzABI(f *testing.F) {
f.Fuzz(func(t *testing.T, data []byte) {
fuzzAbi(data)
})
}

var (
names = []string{"_name", "name", "NAME", "name_", "__", "_name_", "n"}
stateMut = []string{"", "pure", "view", "payable"}
stateMutabilites = []*string{&stateMut[0], &stateMut[1], &stateMut[2], &stateMut[3]}
pays = []string{"", "true", "false"}
payables = []*string{&pays[0], &pays[1]}
vNames = []string{"a", "b", "c", "d", "e", "f", "g"}
varNames = append(vNames, names...)
varTypes = []string{"bool", "address", "bytes", "string",
names = []string{"_name", "name", "NAME", "name_", "__", "_name_", "n"}
stateMut = []string{"pure", "view", "payable"}
pays = []string{"true", "false"}
vNames = []string{"a", "b", "c", "d", "e", "f", "g"}
varNames = append(vNames, names...)
varTypes = []string{"bool", "address", "bytes", "string",
"uint8", "int8", "uint8", "int8", "uint16", "int16",
"uint24", "int24", "uint32", "int32", "uint40", "int40", "uint48", "int48", "uint56", "int56",
"uint64", "int64", "uint72", "int72", "uint80", "int80", "uint88", "int88", "uint96", "int96",
Expand All @@ -62,7 +60,7 @@ var (
"bytes32", "bytes"}
)

func unpackPack(abi abi.ABI, method string, input []byte) ([]interface{}, bool) {
func unpackPack(abi ABI, method string, input []byte) ([]interface{}, bool) {
if out, err := abi.Unpack(method, input); err == nil {
_, err := abi.Pack(method, out...)
if err != nil {
Expand All @@ -78,7 +76,7 @@ func unpackPack(abi abi.ABI, method string, input []byte) ([]interface{}, bool)
return nil, false
}

func packUnpack(abi abi.ABI, method string, input *[]interface{}) bool {
func packUnpack(abi ABI, method string, input *[]interface{}) bool {
if packed, err := abi.Pack(method, input); err == nil {
outptr := reflect.New(reflect.TypeOf(input))
err := abi.UnpackIntoInterface(outptr.Interface(), method, packed)
Expand All @@ -94,12 +92,12 @@ func packUnpack(abi abi.ABI, method string, input *[]interface{}) bool {
return false
}

type args struct {
type arg struct {
name string
typ string
}

func createABI(name string, stateMutability, payable *string, inputs []args) (abi.ABI, error) {
func createABI(name string, stateMutability, payable *string, inputs []arg) (ABI, error) {
sig := fmt.Sprintf(`[{ "type" : "function", "name" : "%v" `, name)
if stateMutability != nil {
sig += fmt.Sprintf(`, "stateMutability": "%v" `, *stateMutability)
Expand All @@ -126,56 +124,55 @@ func createABI(name string, stateMutability, payable *string, inputs []args) (ab
sig += "} ]"
}
sig += `}]`

return abi.JSON(strings.NewReader(sig))
//fmt.Printf("sig: %s\n", sig)
return JSON(strings.NewReader(sig))
}

func fuzzAbi(input []byte) int {
good := false
fuzzer := fuzz.NewFromGoFuzz(input)

name := names[getUInt(fuzzer)%len(names)]
stateM := stateMutabilites[getUInt(fuzzer)%len(stateMutabilites)]
payable := payables[getUInt(fuzzer)%len(payables)]
maxLen := 5
for k := 1; k < maxLen; k++ {
var arg []args
for i := k; i > 0; i-- {
argName := varNames[i]
argTyp := varTypes[getUInt(fuzzer)%len(varTypes)]
if getUInt(fuzzer)%10 == 0 {
argTyp += "[]"
} else if getUInt(fuzzer)%10 == 0 {
arrayArgs := getUInt(fuzzer)%30 + 1
argTyp += fmt.Sprintf("[%d]", arrayArgs)
}
arg = append(arg, args{
name: argName,
typ: argTyp,
})
func fuzzAbi(input []byte) {
var (
fuzzer = fuzz.NewFromGoFuzz(input)
name = oneOf(fuzzer, names)
stateM = oneOfOrNil(fuzzer, stateMut)
payable = oneOfOrNil(fuzzer, pays)
arguments []arg
)
for i := 0; i < upTo(fuzzer, 10); i++ {
argName := oneOf(fuzzer, varNames)
argTyp := oneOf(fuzzer, varTypes)
switch upTo(fuzzer, 10) {
case 0: // 10% chance to make it a slice
argTyp += "[]"
case 1: // 10% chance to make it an array
argTyp += fmt.Sprintf("[%d]", 1+upTo(fuzzer, 30))
default:
}
abi, err := createABI(name, stateM, payable, arg)
if err != nil {
continue
}
structs, b := unpackPack(abi, name, input)
c := packUnpack(abi, name, &structs)
good = good || b || c
arguments = append(arguments, arg{name: argName, typ: argTyp})
}
if good {
return 1
abi, err := createABI(name, stateM, payable, arguments)
if err != nil {
//fmt.Printf("err: %v\n", err)
panic(err)
}
return 0
structs, _ := unpackPack(abi, name, input)
_ = packUnpack(abi, name, &structs)
}

func getUInt(fuzzer *fuzz.Fuzzer) int {
func upTo(fuzzer *fuzz.Fuzzer, max int) int {
var i int
fuzzer.Fuzz(&i)
if i < 0 {
i = -i
if i < 0 {
return 0
}
return (-1 - i) % max
}
return i % max
}

func oneOf(fuzzer *fuzz.Fuzzer, options []string) string {
return options[upTo(fuzzer, len(options))]
}

func oneOfOrNil(fuzzer *fuzz.Fuzzer, options []string) *string {
if i := upTo(fuzzer, len(options)+1); i < len(options) {
return &options[i]
}
return i
return nil
}
4 changes: 2 additions & 2 deletions accounts/abi/argument.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ func (arguments Arguments) isTuple() bool {
func (arguments Arguments) Unpack(data []byte) ([]interface{}, error) {
if len(data) == 0 {
if len(arguments.NonIndexed()) != 0 {
return nil, errors.New("abi: attempting to unmarshall an empty string while arguments are expected")
return nil, errors.New("abi: attempting to unmarshal an empty string while arguments are expected")
}
return make([]interface{}, 0), nil
}
Expand All @@ -95,7 +95,7 @@ func (arguments Arguments) UnpackIntoMap(v map[string]interface{}, data []byte)
}
if len(data) == 0 {
if len(arguments.NonIndexed()) != 0 {
return errors.New("abi: attempting to unmarshall an empty string while arguments are expected")
return errors.New("abi: attempting to unmarshal an empty string while arguments are expected")
}
return nil // Nothing to unmarshal, return
}
Expand Down
2 changes: 1 addition & 1 deletion accounts/abi/bind/backends/simulated.go
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,7 @@ func (b *SimulatedBackend) AdjustTime(adjustment time.Duration) error {
defer b.mu.Unlock()

if len(b.pendingBlock.Transactions()) != 0 {
return errors.New("Could not adjust time on non-empty block")
return errors.New("could not adjust time on non-empty block")
}
// Get the last block
block := b.blockchain.GetBlockByHash(b.pendingBlock.ParentHash())
Expand Down
4 changes: 2 additions & 2 deletions accounts/abi/bind/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func TestWaitDeployedCornerCases(t *testing.T) {
backend.Commit()
notContentCreation := errors.New("tx is not contract creation")
if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != notContentCreation.Error() {
t.Errorf("error missmatch: want %q, got %q, ", notContentCreation, err)
t.Errorf("error mismatch: want %q, got %q, ", notContentCreation, err)
}

// Create a transaction that is not mined.
Expand All @@ -131,7 +131,7 @@ func TestWaitDeployedCornerCases(t *testing.T) {
go func() {
contextCanceled := errors.New("context canceled")
if _, err := bind.WaitDeployed(ctx, backend, tx); err.Error() != contextCanceled.Error() {
t.Errorf("error missmatch: want %q, got %q, ", contextCanceled, err)
t.Errorf("error mismatch: want %q, got %q, ", contextCanceled, err)
}
}()

Expand Down
5 changes: 2 additions & 3 deletions accounts/abi/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package abi

import (
"bytes"
"errors"
"fmt"
"strings"

Expand Down Expand Up @@ -84,10 +83,10 @@ func (e Error) String() string {

func (e *Error) Unpack(data []byte) (interface{}, error) {
if len(data) < 4 {
return "", errors.New("invalid data for unpacking")
return "", fmt.Errorf("insufficient data for unpacking: have %d, want at least 4", len(data))
}
if !bytes.Equal(data[:4], e.ID[:4]) {
return "", errors.New("invalid data for unpacking")
return "", fmt.Errorf("invalid identifier, have %#x want %#x", data[:4], e.ID[:4])
}
return e.Inputs.Unpack(data[4:])
}
18 changes: 8 additions & 10 deletions accounts/abi/method.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,6 @@ func NewMethod(name string, rawName string, funType FunctionType, mutability str
sig = fmt.Sprintf("%v(%v)", rawName, strings.Join(types, ","))
id = crypto.Keccak256([]byte(sig))[:4]
}
// Extract meaningful state mutability of solidity method.
// If it's default value, never print it.
state := mutability
if state == "nonpayable" {
state = ""
}
if state != "" {
state = state + " "
}
identity := fmt.Sprintf("function %v", rawName)
switch funType {
case Fallback:
Expand All @@ -135,7 +126,14 @@ func NewMethod(name string, rawName string, funType FunctionType, mutability str
case Constructor:
identity = "constructor"
}
str := fmt.Sprintf("%v(%v) %sreturns(%v)", identity, strings.Join(inputNames, ", "), state, strings.Join(outputNames, ", "))
var str string
// Extract meaningful state mutability of solidity method.
// If it's empty string or default value "nonpayable", never print it.
if mutability == "" || mutability == "nonpayable" {
str = fmt.Sprintf("%v(%v) returns(%v)", identity, strings.Join(inputNames, ", "), strings.Join(outputNames, ", "))
} else {
str = fmt.Sprintf("%v(%v) %s returns(%v)", identity, strings.Join(inputNames, ", "), mutability, strings.Join(outputNames, ", "))
}

return Method{
Name: name,
Expand Down
4 changes: 2 additions & 2 deletions accounts/abi/pack.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func packElement(t Type, reflectValue reflect.Value) ([]byte, error) {
reflectValue = mustArrayToByteSlice(reflectValue)
}
if reflectValue.Type() != reflect.TypeOf([]byte{}) {
return []byte{}, errors.New("Bytes type is neither slice nor array")
return []byte{}, errors.New("bytes type is neither slice nor array")
}
return packBytesSlice(reflectValue.Bytes(), reflectValue.Len()), nil
case FixedBytesTy, FunctionTy:
Expand All @@ -66,7 +66,7 @@ func packElement(t Type, reflectValue reflect.Value) ([]byte, error) {
}
return common.RightPadBytes(reflectValue.Bytes(), 32), nil
default:
return []byte{}, fmt.Errorf("Could not pack element, unknown type: %v", t.T)
return []byte{}, fmt.Errorf("could not pack element, unknown type: %v", t.T)
}
}

Expand Down
6 changes: 3 additions & 3 deletions accounts/abi/reflect.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func setSlice(dst, src reflect.Value) error {
dst.Set(slice)
return nil
}
return errors.New("Cannot set slice, destination not settable")
return errors.New("cannot set slice, destination not settable")
}

func setArray(dst, src reflect.Value) error {
Expand All @@ -155,15 +155,15 @@ func setArray(dst, src reflect.Value) error {
dst.Set(array)
return nil
}
return errors.New("Cannot set array, destination not settable")
return errors.New("cannot set array, destination not settable")
}

func setStruct(dst, src reflect.Value) error {
for i := 0; i < src.NumField(); i++ {
srcField := src.Field(i)
dstField := dst.Field(i)
if !dstField.IsValid() || !srcField.IsValid() {
return fmt.Errorf("Could not find src field: %v value: %v in destination", srcField.Type().Name(), srcField)
return fmt.Errorf("could not find src field: %v value: %v in destination", srcField.Type().Name(), srcField)
}
if err := set(dstField, srcField); err != nil {
return err
Expand Down
Loading