mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-12 15:03:45 +00:00
accounts/abi/bind/v2: pass contract instance as value
This commit is contained in:
parent
46e7e44e77
commit
1bdc820c98
2 changed files with 14 additions and 14 deletions
|
|
@ -34,12 +34,12 @@ type ContractInstance struct {
|
||||||
abi abi.ABI
|
abi abi.ABI
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewContractInstance(addr common.Address, backend ContractBackend, abi abi.ABI) *ContractInstance {
|
func NewContractInstance(addr common.Address, backend ContractBackend, abi abi.ABI) ContractInstance {
|
||||||
return &ContractInstance{addr, backend, abi}
|
return ContractInstance{addr, backend, abi}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FilterEvents returns an EventIterator instance for filtering historical events based on the event id and a block range.
|
// FilterEvents returns an EventIterator instance for filtering historical events based on the event id and a block range.
|
||||||
func FilterEvents[T any](instance *ContractInstance, opts *FilterOpts, eventName string, unpack func(*types.Log) (*T, error), topics ...[]any) (*EventIterator[T], error) {
|
func FilterEvents[T any](instance ContractInstance, opts *FilterOpts, eventName string, unpack func(*types.Log) (*T, error), topics ...[]any) (*EventIterator[T], error) {
|
||||||
backend := instance.Backend
|
backend := instance.Backend
|
||||||
c := bind1.NewBoundContract(instance.Address, instance.abi, backend, backend, backend)
|
c := bind1.NewBoundContract(instance.Address, instance.abi, backend, backend, backend)
|
||||||
logs, sub, err := c.FilterLogs(opts, eventName, topics...)
|
logs, sub, err := c.FilterLogs(opts, eventName, topics...)
|
||||||
|
|
@ -53,7 +53,7 @@ func FilterEvents[T any](instance *ContractInstance, opts *FilterOpts, eventName
|
||||||
// contract to be intercepted, unpacked, and forwarded to sink. If
|
// contract to be intercepted, unpacked, and forwarded to sink. If
|
||||||
// unpack returns an error, the returned subscription is closed with the
|
// unpack returns an error, the returned subscription is closed with the
|
||||||
// error.
|
// error.
|
||||||
func WatchEvents[T any](instance *ContractInstance, opts *WatchOpts, eventName string, unpack func(*types.Log) (*T, error), sink chan<- *T, topics ...[]any) (event.Subscription, error) {
|
func WatchEvents[T any](instance ContractInstance, opts *WatchOpts, eventName string, unpack func(*types.Log) (*T, error), sink chan<- *T, topics ...[]any) (event.Subscription, error) {
|
||||||
backend := instance.Backend
|
backend := instance.Backend
|
||||||
c := bind1.NewBoundContract(instance.Address, instance.abi, backend, backend, backend)
|
c := bind1.NewBoundContract(instance.Address, instance.abi, backend, backend, backend)
|
||||||
logs, sub, err := c.WatchLogs(opts, eventName, topics...)
|
logs, sub, err := c.WatchLogs(opts, eventName, topics...)
|
||||||
|
|
@ -160,7 +160,7 @@ func (it *EventIterator[T]) Close() error {
|
||||||
|
|
||||||
// Transact creates and submits a transaction to the bound contract instance
|
// Transact creates and submits a transaction to the bound contract instance
|
||||||
// using the provided abi-encoded input (or nil).
|
// using the provided abi-encoded input (or nil).
|
||||||
func Transact(instance *ContractInstance, opts *TransactOpts, input []byte) (*types.Transaction, error) {
|
func Transact(instance ContractInstance, opts *TransactOpts, input []byte) (*types.Transaction, error) {
|
||||||
var (
|
var (
|
||||||
addr = instance.Address
|
addr = instance.Address
|
||||||
backend = instance.Backend
|
backend = instance.Backend
|
||||||
|
|
@ -171,7 +171,7 @@ func Transact(instance *ContractInstance, opts *TransactOpts, input []byte) (*ty
|
||||||
|
|
||||||
// Call performs an eth_call on the given bound contract instance, using the
|
// Call performs an eth_call on the given bound contract instance, using the
|
||||||
// provided abi-encoded input (or nil).
|
// provided abi-encoded input (or nil).
|
||||||
func Call[T any](instance *ContractInstance, opts *CallOpts, packedInput []byte, unpack func([]byte) (T, error)) (T, error) {
|
func Call[T any](instance ContractInstance, opts *CallOpts, packedInput []byte, unpack func([]byte) (T, error)) (T, error) {
|
||||||
var defaultResult T
|
var defaultResult T
|
||||||
backend := instance.Backend
|
backend := instance.Backend
|
||||||
c := bind1.NewBoundContract(instance.Address, instance.abi, backend, backend, backend)
|
c := bind1.NewBoundContract(instance.Address, instance.abi, backend, backend, backend)
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ func TestDeploymentLibraries(t *testing.T) {
|
||||||
Context: context.Background(),
|
Context: context.Background(),
|
||||||
}
|
}
|
||||||
|
|
||||||
ctrctInstance := &ContractInstance{
|
ctrctInstance := ContractInstance{
|
||||||
Address: contractAddr,
|
Address: contractAddr,
|
||||||
Backend: bindBackend,
|
Backend: bindBackend,
|
||||||
}
|
}
|
||||||
|
|
@ -273,7 +273,7 @@ func TestEvents(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ctrctABI, _ := events.CMetaData.GetAbi()
|
ctrctABI, _ := events.CMetaData.GetAbi()
|
||||||
ctrctInstance := ContractInstance{
|
instance := ContractInstance{
|
||||||
res.Addrs[events.CMetaData.Pattern],
|
res.Addrs[events.CMetaData.Pattern],
|
||||||
backend,
|
backend,
|
||||||
*ctrctABI,
|
*ctrctABI,
|
||||||
|
|
@ -285,11 +285,11 @@ func TestEvents(t *testing.T) {
|
||||||
Start: nil,
|
Start: nil,
|
||||||
Context: context.Background(),
|
Context: context.Background(),
|
||||||
}
|
}
|
||||||
sub1, err := WatchEvents(&ctrctInstance, watchOpts, events.CBasic1EventName, ctrct.UnpackBasic1Event, newCBasic1Ch)
|
sub1, err := WatchEvents(instance, watchOpts, events.CBasic1EventName, ctrct.UnpackBasic1Event, newCBasic1Ch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("WatchEvents returned error: %v", err)
|
t.Fatalf("WatchEvents returned error: %v", err)
|
||||||
}
|
}
|
||||||
sub2, err := WatchEvents(&ctrctInstance, watchOpts, events.CBasic2EventName, ctrct.UnpackBasic2Event, newCBasic2Ch)
|
sub2, err := WatchEvents(instance, watchOpts, events.CBasic2EventName, ctrct.UnpackBasic2Event, newCBasic2Ch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("WatchEvents returned error: %v", err)
|
t.Fatalf("WatchEvents returned error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -297,7 +297,7 @@ func TestEvents(t *testing.T) {
|
||||||
defer sub2.Unsubscribe()
|
defer sub2.Unsubscribe()
|
||||||
|
|
||||||
packedInput, _ := ctrct.PackEmitMulti()
|
packedInput, _ := ctrct.PackEmitMulti()
|
||||||
tx, err := Transact(&ctrctInstance, txAuth, packedInput)
|
tx, err := Transact(instance, txAuth, packedInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to send transaction: %v", err)
|
t.Fatalf("failed to send transaction: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -336,11 +336,11 @@ done:
|
||||||
Start: 0,
|
Start: 0,
|
||||||
Context: context.Background(),
|
Context: context.Background(),
|
||||||
}
|
}
|
||||||
it, err := FilterEvents(&ctrctInstance, filterOpts, events.CBasic1EventName, ctrct.UnpackBasic1Event)
|
it, err := FilterEvents(instance, filterOpts, events.CBasic1EventName, ctrct.UnpackBasic1Event)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error filtering logs %v\n", err)
|
t.Fatalf("error filtering logs %v\n", err)
|
||||||
}
|
}
|
||||||
it2, err := FilterEvents(&ctrctInstance, filterOpts, events.CBasic2EventName, ctrct.UnpackBasic2Event)
|
it2, err := FilterEvents(instance, filterOpts, events.CBasic2EventName, ctrct.UnpackBasic2Event)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error filtering logs %v\n", err)
|
t.Fatalf("error filtering logs %v\n", err)
|
||||||
}
|
}
|
||||||
|
|
@ -388,7 +388,7 @@ func TestErrors(t *testing.T) {
|
||||||
|
|
||||||
ctrctABI, _ := solc_errors.CMetaData.GetAbi()
|
ctrctABI, _ := solc_errors.CMetaData.GetAbi()
|
||||||
instance := ContractInstance{res.Addrs[solc_errors.CMetaData.Pattern], backend, *ctrctABI}
|
instance := ContractInstance{res.Addrs[solc_errors.CMetaData.Pattern], backend, *ctrctABI}
|
||||||
_, err = Call(&instance, opts, packedInput, func(packed []byte) (struct{}, error) { return struct{}{}, nil })
|
_, err = Call(instance, opts, packedInput, func(packed []byte) (struct{}, error) { return struct{}{}, nil })
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("expected call to fail")
|
t.Fatalf("expected call to fail")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue