From 08a7d96c65001faaec4a89bf34f84713d45977a9 Mon Sep 17 00:00:00 2001 From: Juan Franco <91078895+m1lestones@users.noreply.github.com> Date: Thu, 25 Jun 2026 23:59:44 -0400 Subject: [PATCH] accounts/abi/abigen: add GetABI() method to abigen v2 generated bindings Adds a GetABI() accessor to the generated contract struct so callers in other packages can retrieve the parsed abi.ABI without having to call ParseABI() themselves. Previously the abi field was unexported and inaccessible outside the generated package, forcing users to re-parse the ABI manually. Fixes #34705 --- accounts/abi/abigen/source2.go.tpl | 5 +++++ accounts/abi/abigen/testdata/v2/callbackparam.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/crowdsale.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/dao.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/deeplynestedarray.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/empty.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/eventchecker.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/getter.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/identifiercollision.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/inputchecker.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/interactor.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/nameconflict.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/numericmethodname.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/outputchecker.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/overload.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/rangekeyword.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/slicer.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/structs.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/token.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/tuple.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/tupler.go.txt | 5 +++++ accounts/abi/abigen/testdata/v2/underscorer.go.txt | 5 +++++ 22 files changed, 110 insertions(+) diff --git a/accounts/abi/abigen/source2.go.tpl b/accounts/abi/abigen/source2.go.tpl index c517caf6f4..9285497511 100644 --- a/accounts/abi/abigen/source2.go.tpl +++ b/accounts/abi/abigen/source2.go.tpl @@ -59,6 +59,11 @@ var ( abi abi.ABI } + // GetABI returns the ABI associated with this contract binding. + func (c *{{.Type}}) GetABI() abi.ABI { + return c.abi + } + // New{{.Type}} creates a new instance of {{.Type}}. func New{{.Type}}() *{{.Type}} { parsed, err := {{.Type}}MetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/callbackparam.go.txt b/accounts/abi/abigen/testdata/v2/callbackparam.go.txt index d22b978486..a01b125acf 100644 --- a/accounts/abi/abigen/testdata/v2/callbackparam.go.txt +++ b/accounts/abi/abigen/testdata/v2/callbackparam.go.txt @@ -36,6 +36,11 @@ type CallbackParam struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *CallbackParam) GetABI() abi.ABI { + return c.abi +} + // NewCallbackParam creates a new instance of CallbackParam. func NewCallbackParam() *CallbackParam { parsed, err := CallbackParamMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/crowdsale.go.txt b/accounts/abi/abigen/testdata/v2/crowdsale.go.txt index f0bba246ab..66582aa5c6 100644 --- a/accounts/abi/abigen/testdata/v2/crowdsale.go.txt +++ b/accounts/abi/abigen/testdata/v2/crowdsale.go.txt @@ -36,6 +36,11 @@ type Crowdsale struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Crowdsale) GetABI() abi.ABI { + return c.abi +} + // NewCrowdsale creates a new instance of Crowdsale. func NewCrowdsale() *Crowdsale { parsed, err := CrowdsaleMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/dao.go.txt b/accounts/abi/abigen/testdata/v2/dao.go.txt index 0e9adba31e..a810c65bd9 100644 --- a/accounts/abi/abigen/testdata/v2/dao.go.txt +++ b/accounts/abi/abigen/testdata/v2/dao.go.txt @@ -36,6 +36,11 @@ type DAO struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *DAO) GetABI() abi.ABI { + return c.abi +} + // NewDAO creates a new instance of DAO. func NewDAO() *DAO { parsed, err := DAOMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/deeplynestedarray.go.txt b/accounts/abi/abigen/testdata/v2/deeplynestedarray.go.txt index 302f1d736f..559ea83422 100644 --- a/accounts/abi/abigen/testdata/v2/deeplynestedarray.go.txt +++ b/accounts/abi/abigen/testdata/v2/deeplynestedarray.go.txt @@ -36,6 +36,11 @@ type DeeplyNestedArray struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *DeeplyNestedArray) GetABI() abi.ABI { + return c.abi +} + // NewDeeplyNestedArray creates a new instance of DeeplyNestedArray. func NewDeeplyNestedArray() *DeeplyNestedArray { parsed, err := DeeplyNestedArrayMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/empty.go.txt b/accounts/abi/abigen/testdata/v2/empty.go.txt index 7082e20799..7deea15570 100644 --- a/accounts/abi/abigen/testdata/v2/empty.go.txt +++ b/accounts/abi/abigen/testdata/v2/empty.go.txt @@ -36,6 +36,11 @@ type Empty struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Empty) GetABI() abi.ABI { + return c.abi +} + // NewEmpty creates a new instance of Empty. func NewEmpty() *Empty { parsed, err := EmptyMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/eventchecker.go.txt b/accounts/abi/abigen/testdata/v2/eventchecker.go.txt index d0600d7c3e..213ab609f5 100644 --- a/accounts/abi/abigen/testdata/v2/eventchecker.go.txt +++ b/accounts/abi/abigen/testdata/v2/eventchecker.go.txt @@ -35,6 +35,11 @@ type EventChecker struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *EventChecker) GetABI() abi.ABI { + return c.abi +} + // NewEventChecker creates a new instance of EventChecker. func NewEventChecker() *EventChecker { parsed, err := EventCheckerMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/getter.go.txt b/accounts/abi/abigen/testdata/v2/getter.go.txt index 69a4fb54c8..69267767c2 100644 --- a/accounts/abi/abigen/testdata/v2/getter.go.txt +++ b/accounts/abi/abigen/testdata/v2/getter.go.txt @@ -36,6 +36,11 @@ type Getter struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Getter) GetABI() abi.ABI { + return c.abi +} + // NewGetter creates a new instance of Getter. func NewGetter() *Getter { parsed, err := GetterMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/identifiercollision.go.txt b/accounts/abi/abigen/testdata/v2/identifiercollision.go.txt index e7301521f4..1d14a7109d 100644 --- a/accounts/abi/abigen/testdata/v2/identifiercollision.go.txt +++ b/accounts/abi/abigen/testdata/v2/identifiercollision.go.txt @@ -36,6 +36,11 @@ type IdentifierCollision struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *IdentifierCollision) GetABI() abi.ABI { + return c.abi +} + // NewIdentifierCollision creates a new instance of IdentifierCollision. func NewIdentifierCollision() *IdentifierCollision { parsed, err := IdentifierCollisionMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/inputchecker.go.txt b/accounts/abi/abigen/testdata/v2/inputchecker.go.txt index 1743f336db..4522aea52a 100644 --- a/accounts/abi/abigen/testdata/v2/inputchecker.go.txt +++ b/accounts/abi/abigen/testdata/v2/inputchecker.go.txt @@ -35,6 +35,11 @@ type InputChecker struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *InputChecker) GetABI() abi.ABI { + return c.abi +} + // NewInputChecker creates a new instance of InputChecker. func NewInputChecker() *InputChecker { parsed, err := InputCheckerMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/interactor.go.txt b/accounts/abi/abigen/testdata/v2/interactor.go.txt index f33c95b639..3e88b4a521 100644 --- a/accounts/abi/abigen/testdata/v2/interactor.go.txt +++ b/accounts/abi/abigen/testdata/v2/interactor.go.txt @@ -36,6 +36,11 @@ type Interactor struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Interactor) GetABI() abi.ABI { + return c.abi +} + // NewInteractor creates a new instance of Interactor. func NewInteractor() *Interactor { parsed, err := InteractorMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/nameconflict.go.txt b/accounts/abi/abigen/testdata/v2/nameconflict.go.txt index 5e4a9ecaf0..13f96527ee 100644 --- a/accounts/abi/abigen/testdata/v2/nameconflict.go.txt +++ b/accounts/abi/abigen/testdata/v2/nameconflict.go.txt @@ -42,6 +42,11 @@ type NameConflict struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *NameConflict) GetABI() abi.ABI { + return c.abi +} + // NewNameConflict creates a new instance of NameConflict. func NewNameConflict() *NameConflict { parsed, err := NameConflictMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/numericmethodname.go.txt b/accounts/abi/abigen/testdata/v2/numericmethodname.go.txt index 0af31a1cfb..4f5392f19d 100644 --- a/accounts/abi/abigen/testdata/v2/numericmethodname.go.txt +++ b/accounts/abi/abigen/testdata/v2/numericmethodname.go.txt @@ -36,6 +36,11 @@ type NumericMethodName struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *NumericMethodName) GetABI() abi.ABI { + return c.abi +} + // NewNumericMethodName creates a new instance of NumericMethodName. func NewNumericMethodName() *NumericMethodName { parsed, err := NumericMethodNameMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/outputchecker.go.txt b/accounts/abi/abigen/testdata/v2/outputchecker.go.txt index f1c98f536e..8d3e475e98 100644 --- a/accounts/abi/abigen/testdata/v2/outputchecker.go.txt +++ b/accounts/abi/abigen/testdata/v2/outputchecker.go.txt @@ -35,6 +35,11 @@ type OutputChecker struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *OutputChecker) GetABI() abi.ABI { + return c.abi +} + // NewOutputChecker creates a new instance of OutputChecker. func NewOutputChecker() *OutputChecker { parsed, err := OutputCheckerMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/overload.go.txt b/accounts/abi/abigen/testdata/v2/overload.go.txt index 563edf7842..006a2c7c3c 100644 --- a/accounts/abi/abigen/testdata/v2/overload.go.txt +++ b/accounts/abi/abigen/testdata/v2/overload.go.txt @@ -36,6 +36,11 @@ type Overload struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Overload) GetABI() abi.ABI { + return c.abi +} + // NewOverload creates a new instance of Overload. func NewOverload() *Overload { parsed, err := OverloadMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/rangekeyword.go.txt b/accounts/abi/abigen/testdata/v2/rangekeyword.go.txt index 296de1fccc..76c5d72d29 100644 --- a/accounts/abi/abigen/testdata/v2/rangekeyword.go.txt +++ b/accounts/abi/abigen/testdata/v2/rangekeyword.go.txt @@ -36,6 +36,11 @@ type RangeKeyword struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *RangeKeyword) GetABI() abi.ABI { + return c.abi +} + // NewRangeKeyword creates a new instance of RangeKeyword. func NewRangeKeyword() *RangeKeyword { parsed, err := RangeKeywordMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/slicer.go.txt b/accounts/abi/abigen/testdata/v2/slicer.go.txt index 379f136453..416a629cb7 100644 --- a/accounts/abi/abigen/testdata/v2/slicer.go.txt +++ b/accounts/abi/abigen/testdata/v2/slicer.go.txt @@ -36,6 +36,11 @@ type Slicer struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Slicer) GetABI() abi.ABI { + return c.abi +} + // NewSlicer creates a new instance of Slicer. func NewSlicer() *Slicer { parsed, err := SlicerMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/structs.go.txt b/accounts/abi/abigen/testdata/v2/structs.go.txt index 4d8864cf6e..ee55ec5620 100644 --- a/accounts/abi/abigen/testdata/v2/structs.go.txt +++ b/accounts/abi/abigen/testdata/v2/structs.go.txt @@ -41,6 +41,11 @@ type Structs struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Structs) GetABI() abi.ABI { + return c.abi +} + // NewStructs creates a new instance of Structs. func NewStructs() *Structs { parsed, err := StructsMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/token.go.txt b/accounts/abi/abigen/testdata/v2/token.go.txt index 3bd60a6cdd..1bd364a918 100644 --- a/accounts/abi/abigen/testdata/v2/token.go.txt +++ b/accounts/abi/abigen/testdata/v2/token.go.txt @@ -36,6 +36,11 @@ type Token struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Token) GetABI() abi.ABI { + return c.abi +} + // NewToken creates a new instance of Token. func NewToken() *Token { parsed, err := TokenMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/tuple.go.txt b/accounts/abi/abigen/testdata/v2/tuple.go.txt index 10b634f3db..6aabdeb0fe 100644 --- a/accounts/abi/abigen/testdata/v2/tuple.go.txt +++ b/accounts/abi/abigen/testdata/v2/tuple.go.txt @@ -61,6 +61,11 @@ type Tuple struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Tuple) GetABI() abi.ABI { + return c.abi +} + // NewTuple creates a new instance of Tuple. func NewTuple() *Tuple { parsed, err := TupleMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/tupler.go.txt b/accounts/abi/abigen/testdata/v2/tupler.go.txt index 8643487042..5e6eafb07e 100644 --- a/accounts/abi/abigen/testdata/v2/tupler.go.txt +++ b/accounts/abi/abigen/testdata/v2/tupler.go.txt @@ -36,6 +36,11 @@ type Tupler struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Tupler) GetABI() abi.ABI { + return c.abi +} + // NewTupler creates a new instance of Tupler. func NewTupler() *Tupler { parsed, err := TuplerMetaData.ParseABI() diff --git a/accounts/abi/abigen/testdata/v2/underscorer.go.txt b/accounts/abi/abigen/testdata/v2/underscorer.go.txt index 13ec968508..abe3bdbacb 100644 --- a/accounts/abi/abigen/testdata/v2/underscorer.go.txt +++ b/accounts/abi/abigen/testdata/v2/underscorer.go.txt @@ -36,6 +36,11 @@ type Underscorer struct { abi abi.ABI } +// GetABI returns the ABI associated with this contract binding. +func (c *Underscorer) GetABI() abi.ABI { + return c.abi +} + // NewUnderscorer creates a new instance of Underscorer. func NewUnderscorer() *Underscorer { parsed, err := UnderscorerMetaData.ParseABI()