forked from forks/go-ethereum
This PR implements a new version of the abigen utility (v2) which exists
along with the pre-existing v1 version.
Abigen is a utility command provided by go-ethereum that, given a
solidity contract ABI definition, will generate Go code to transact/call
the contract methods, converting the method parameters/results and
structures defined in the contract into corresponding Go types. This is
useful for preventing the need to write custom boilerplate code for
contract interactions.
Methods in the generated bindings perform encoding between Go types and
Solidity ABI-encoded packed bytecode, as well as some action (e.g.
`eth_call` or creating and submitting a transaction). This limits the
flexibility of how the generated bindings can be used, and prevents
easily adding new functionality, as it will make the generated bindings
larger for each feature added.
Abigen v2 was conceived of by the observation that the only
functionality that generated Go bindings ought to perform is conversion
between Go types and ABI-encoded packed data. Go-ethereum already
provides various APIs which in conjunction with conversion methods
generated in v2 bindings can cover all functionality currently provided
by v1, and facilitate all other previously-desired use-cases.
## Generating Bindings
To generate contract bindings using abigen v2, invoke the `abigen`
command with the `--v2` flag. The functionality of all other flags is
preserved between the v2 and v1 versions.
## What is Generated in the Bindings
The execution of `abigen --v2` generates Go code containing methods
which convert between Go types and corresponding ABI-encoded data
expected by the contract. For each input-accepting contract method and
the constructor, a "packing" method is generated in the binding which
converts from Go types to the corresponding packed solidity expected by
the contract. If a method returns output, an "unpacking" method is
generated to convert this output from ABI-encoded data to the
corresponding Go types.
For contracts which emit events, an unpacking method is defined for each
event to unpack the corresponding raw log to the Go type that it
represents.
Likewise, where custom errors are defined by contracts, an unpack method
is generated to unpack raw error data into a Go type.
## Using the Generated Bindings
For a smooth user-experience, abigen v2 comes with a number of utility
functions to be used in conjunction with the generated bindings for
performing common contract interaction use-cases. These include:
* filtering for historical logs of a given topic
* watching the chain for emission of logs with a given topic
* contract deployment methods
* Call/Transact methods
https://geth.ethereum.org will be updated to include a new tutorial page
for abigen v2 with full code examples. The page currently exists in a
PR: https://github.com/ethereum/go-ethereum/pull/31390 .
There are also extensive examples of interactions with contract bindings
in [test
cases](cc855c7ede/accounts/abi/bind/v2/lib_test.go)
provided with this PR.
---------
Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
149 lines
6.8 KiB
Modula-2
149 lines
6.8 KiB
Modula-2
module github.com/ethereum/go-ethereum
|
|
|
|
go 1.23.0
|
|
|
|
require (
|
|
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0
|
|
github.com/Microsoft/go-winio v0.6.2
|
|
github.com/VictoriaMetrics/fastcache v1.12.2
|
|
github.com/aws/aws-sdk-go-v2 v1.21.2
|
|
github.com/aws/aws-sdk-go-v2/config v1.18.45
|
|
github.com/aws/aws-sdk-go-v2/credentials v1.13.43
|
|
github.com/aws/aws-sdk-go-v2/service/route53 v1.30.2
|
|
github.com/cespare/cp v0.1.0
|
|
github.com/cloudflare/cloudflare-go v0.114.0
|
|
github.com/cockroachdb/pebble v1.1.2
|
|
github.com/consensys/gnark-crypto v0.14.0
|
|
github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a
|
|
github.com/crate-crypto/go-kzg-4844 v1.1.0
|
|
github.com/davecgh/go-spew v1.1.1
|
|
github.com/deckarep/golang-set/v2 v2.6.0
|
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1
|
|
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0
|
|
github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3
|
|
github.com/ethereum/c-kzg-4844 v1.0.0
|
|
github.com/ethereum/go-verkle v0.2.2
|
|
github.com/fatih/color v1.16.0
|
|
github.com/ferranbt/fastssz v0.1.2
|
|
github.com/fjl/gencodec v0.1.0
|
|
github.com/fsnotify/fsnotify v1.6.0
|
|
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff
|
|
github.com/gofrs/flock v0.8.1
|
|
github.com/golang-jwt/jwt/v4 v4.5.1
|
|
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb
|
|
github.com/google/gofuzz v1.2.0
|
|
github.com/google/uuid v1.3.0
|
|
github.com/gorilla/websocket v1.4.2
|
|
github.com/graph-gophers/graphql-go v1.3.0
|
|
github.com/hashicorp/go-bexpr v0.1.10
|
|
github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4
|
|
github.com/holiman/bloomfilter/v2 v2.0.3
|
|
github.com/holiman/uint256 v1.3.2
|
|
github.com/huin/goupnp v1.3.0
|
|
github.com/influxdata/influxdb-client-go/v2 v2.4.0
|
|
github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c
|
|
github.com/jackpal/go-nat-pmp v1.0.2
|
|
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267
|
|
github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52
|
|
github.com/kylelemons/godebug v1.1.0
|
|
github.com/mattn/go-colorable v0.1.13
|
|
github.com/mattn/go-isatty v0.0.20
|
|
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
|
|
github.com/olekukonko/tablewriter v0.0.5
|
|
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7
|
|
github.com/pion/stun/v2 v2.0.0
|
|
github.com/protolambda/bls12-381-util v0.1.0
|
|
github.com/protolambda/zrnt v0.34.1
|
|
github.com/protolambda/ztyp v0.2.2
|
|
github.com/rs/cors v1.7.0
|
|
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible
|
|
github.com/status-im/keycard-go v0.2.0
|
|
github.com/stretchr/testify v1.10.0
|
|
github.com/supranational/blst v0.3.14
|
|
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
|
|
github.com/urfave/cli/v2 v2.27.5
|
|
go.uber.org/automaxprocs v1.5.2
|
|
go.uber.org/goleak v1.3.0
|
|
golang.org/x/crypto v0.35.0
|
|
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df
|
|
golang.org/x/sync v0.11.0
|
|
golang.org/x/sys v0.30.0
|
|
golang.org/x/text v0.22.0
|
|
golang.org/x/time v0.9.0
|
|
golang.org/x/tools v0.29.0
|
|
google.golang.org/protobuf v1.34.2
|
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
|
gopkg.in/yaml.v3 v3.0.1
|
|
)
|
|
|
|
require (
|
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect
|
|
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
|
|
github.com/DataDog/zstd v1.4.5 // indirect
|
|
github.com/StackExchange/wmi v1.2.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 // indirect
|
|
github.com/aws/smithy-go v1.15.0 // indirect
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
|
github.com/bits-and-blooms/bitset v1.17.0 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/cockroachdb/errors v1.11.3 // indirect
|
|
github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
|
|
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
|
|
github.com/cockroachdb/redact v1.1.5 // indirect
|
|
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
|
|
github.com/consensys/bavard v0.1.22 // indirect
|
|
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
|
|
github.com/deepmap/oapi-codegen v1.6.0 // indirect
|
|
github.com/dlclark/regexp2 v1.7.0 // indirect
|
|
github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 // indirect
|
|
github.com/getsentry/sentry-go v0.27.0 // indirect
|
|
github.com/go-ole/go-ole v1.3.0 // indirect
|
|
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
|
|
github.com/goccy/go-json v0.10.4 // indirect
|
|
github.com/gogo/protobuf v1.3.2 // indirect
|
|
github.com/golang/protobuf v1.5.4 // indirect
|
|
github.com/google/go-querystring v1.1.0 // indirect
|
|
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect
|
|
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect
|
|
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
|
github.com/kilic/bls12-381 v0.1.0 // indirect
|
|
github.com/klauspost/compress v1.16.0 // indirect
|
|
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
|
github.com/kr/pretty v0.3.1 // indirect
|
|
github.com/kr/text v0.2.0 // indirect
|
|
github.com/mattn/go-runewidth v0.0.13 // indirect
|
|
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
|
|
github.com/minio/sha256-simd v1.0.0 // indirect
|
|
github.com/mitchellh/mapstructure v1.4.1 // indirect
|
|
github.com/mitchellh/pointerstructure v1.2.0 // indirect
|
|
github.com/mmcloughlin/addchain v0.4.0 // indirect
|
|
github.com/naoina/go-stringutil v0.1.0 // indirect
|
|
github.com/opentracing/opentracing-go v1.1.0 // indirect
|
|
github.com/pion/dtls/v2 v2.2.7 // indirect
|
|
github.com/pion/logging v0.2.2 // indirect
|
|
github.com/pion/transport/v2 v2.2.1 // indirect
|
|
github.com/pion/transport/v3 v3.0.1 // indirect
|
|
github.com/pkg/errors v0.9.1 // indirect
|
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
|
github.com/prometheus/client_golang v1.12.0 // indirect
|
|
github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a // indirect
|
|
github.com/prometheus/common v0.32.1 // indirect
|
|
github.com/prometheus/procfs v0.7.3 // indirect
|
|
github.com/rivo/uniseg v0.2.0 // indirect
|
|
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
|
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
|
github.com/tklauser/numcpus v0.6.1 // indirect
|
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
|
golang.org/x/mod v0.22.0 // indirect
|
|
golang.org/x/net v0.36.0 // indirect
|
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
rsc.io/tmplfunc v0.0.3 // indirect
|
|
)
|