accounts/abi/bind: now using pending state of code for pending calls

This commit is contained in:
Max Wolter 2016-08-13 13:31:10 +02:00
parent 79de990d2e
commit 2f5413bbce

View file

@ -119,8 +119,14 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string,
opts = new(CallOpts) opts = new(CallOpts)
} }
// Make sure we have a contract to operate on, and bail out otherwise // 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) { var code []byte
if code, err := c.backend.CodeAt(opts.Context, c.address, nil); err != nil { 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 return err
} else if len(code) == 0 { } else if len(code) == 0 {
return ErrNoCode return ErrNoCode
@ -130,7 +136,6 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string,
} else { } else {
atomic.StoreUint32(&c.latestHasCode, 1) atomic.StoreUint32(&c.latestHasCode, 1)
} }
}
// Pack the input, call and unpack the results // Pack the input, call and unpack the results
input, err := c.abi.Pack(method, params...) input, err := c.abi.Pack(method, params...)
if err != nil { if err != nil {