@@ -25,6 +25,13 @@ import (
2525 "github.com/ethereum/go-ethereum/event"
2626)
2727
28+ // ContractInstance provides means to interact with
29+ // a deployed contract.
30+ type ContractInstance interface {
31+ Address () common.Address
32+ Backend () ContractBackend
33+ }
34+
2835func DeployContract2 (opts * TransactOpts , bytecode []byte , input []byte , backend ContractBackend ) (common.Address , * types.Transaction , error ) {
2936 c := NewBoundContract (common.Address {}, abi.ABI {}, backend , backend , backend )
3037 tx , err := c .transact (opts , nil , append (bytecode , input ... ))
@@ -35,41 +42,49 @@ func DeployContract2(opts *TransactOpts, bytecode []byte, input []byte, backend
3542 return address , tx , nil
3643}
3744
38- func Call2 [T any ](opts * CallOpts , addr common. Address , input []byte , backend ContractBackend , unpack func ([]byte ) (T , error )) (arg T , err error ) {
45+ func Call2 [T any ](instance ContractInstance , opts * CallOpts , input []byte , unpack func ([]byte ) (T , error )) (arg T , err error ) {
3946 var data []byte
40- data , err = CallRaw (opts , addr , input , backend )
47+ data , err = CallRaw (instance , opts , input )
4148 if err != nil {
4249 return
4350 }
4451 return unpack (data )
4552}
4653
47- func CallRaw (opts * CallOpts , addr common.Address , input []byte , backend ContractBackend ) ([]byte , error ) {
48- c := NewBoundContract (addr , abi.ABI {}, backend , backend , backend )
54+ func CallRaw (instance ContractInstance , opts * CallOpts , input []byte ) ([]byte , error ) {
55+ backend := instance .Backend ()
56+ c := NewBoundContract (instance .Address (), abi.ABI {}, backend , backend , backend )
4957 return c .call (opts , input )
5058}
5159
52- func Transact2 (opts * TransactOpts , addr common.Address , input []byte , backend ContractBackend ) (* types.Transaction , error ) {
60+ func Transact2 (instance ContractInstance , opts * TransactOpts , input []byte ) (* types.Transaction , error ) {
61+ var (
62+ addr = instance .Address ()
63+ backend = instance .Backend ()
64+ )
5365 c := NewBoundContract (addr , abi.ABI {}, backend , backend , backend )
5466 return c .transact (opts , & addr , input )
5567}
5668
57- func Transfer2 (opts * TransactOpts , addr common.Address , backend ContractBackend ) (* types.Transaction , error ) {
58- c := NewBoundContract (addr , abi.ABI {}, backend , backend , backend )
69+ func Transfer2 (instance ContractInstance , opts * TransactOpts ) (* types.Transaction , error ) {
70+ backend := instance .Backend ()
71+ c := NewBoundContract (instance .Address (), abi.ABI {}, backend , backend , backend )
5972 return c .Transfer (opts )
6073}
6174
62- func FilterLogs [T any ](opts * FilterOpts , addr common.Address , backend ContractBackend , eventID common.Hash , unpack func (types.Log ) (* T , error ), topics ... []any ) (* EventIterator [T ], error ) {
63- c := NewBoundContract (addr , abi.ABI {}, backend , backend , backend )
75+ func FilterLogs [T any ](instance ContractInstance , opts * FilterOpts , eventID common.Hash , unpack func (types.Log ) (* T , error ), topics ... []any ) (* EventIterator [T ], error ) {
76+ backend := instance .Backend ()
77+ c := NewBoundContract (instance .Address (), abi.ABI {}, backend , backend , backend )
6478 logs , sub , err := c .filterLogs (opts , eventID , topics ... )
6579 if err != nil {
6680 return nil , err
6781 }
6882 return & EventIterator [T ]{unpack : unpack , logs : logs , sub : sub }, nil
6983}
7084
71- func WatchLogs [T any ](opts * WatchOpts , addr common.Address , backend ContractBackend , eventID common.Hash , unpack func (types.Log ) (* T , error ), sink chan <- * T , topics ... []any ) (event.Subscription , error ) {
72- c := NewBoundContract (addr , abi.ABI {}, backend , backend , backend )
85+ func WatchLogs [T any ](instance ContractInstance , opts * WatchOpts , eventID common.Hash , unpack func (types.Log ) (* T , error ), sink chan <- * T , topics ... []any ) (event.Subscription , error ) {
86+ backend := instance .Backend ()
87+ c := NewBoundContract (instance .Address (), abi.ABI {}, backend , backend , backend )
7388 logs , sub , err := c .watchLogs (opts , eventID , topics ... )
7489 if err != nil {
7590 return nil , err
0 commit comments