mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 06:06:44 +00:00
accounts/abi/bind: now using pending state of code for pending calls
This commit is contained in:
parent
79de990d2e
commit
2f5413bbce
1 changed files with 16 additions and 11 deletions
|
|
@ -119,8 +119,14 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string,
|
|||
opts = new(CallOpts)
|
||||
}
|
||||
// Make sure we have a contract to operate on, and bail out otherwise
|
||||
if (opts.Pending && atomic.LoadUint32(&c.pendingHasCode) == 0) || (!opts.Pending && atomic.LoadUint32(&c.latestHasCode) == 0) {
|
||||
if code, err := c.backend.CodeAt(opts.Context, c.address, nil); err != nil {
|
||||
var code []byte
|
||||
var err error
|
||||
if opts.Pending && atomic.LoadUint32(&c.pendingHasCode) == 0 {
|
||||
code, err = c.backend.PendingCodeAt(opts.Context, c.address)
|
||||
} else if !opts.Pending && atomic.LoadUint32(&c.latestHasCode) == 0 {
|
||||
code, err = c.backend.CodeAt(opts.Context, c.address, nil)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
} else if len(code) == 0 {
|
||||
return ErrNoCode
|
||||
|
|
@ -130,7 +136,6 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string,
|
|||
} else {
|
||||
atomic.StoreUint32(&c.latestHasCode, 1)
|
||||
}
|
||||
}
|
||||
// Pack the input, call and unpack the results
|
||||
input, err := c.abi.Pack(method, params...)
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Reference in a new issue