|
@@ -36,10 +36,10 @@ type SignerFn func(types.Signer, common.Address, *types.Transaction) (*types.Tra
|
|
|
|
|
|
|
|
// CallOpts is the collection of options to fine tune a contract call request.
|
|
// CallOpts is the collection of options to fine tune a contract call request.
|
|
|
type CallOpts struct {
|
|
type CallOpts struct {
|
|
|
- Pending bool // Whether to operate on the pending state or the last known one
|
|
|
|
|
- From common.Address // Optional the sender address, otherwise the first account is used
|
|
|
|
|
-
|
|
|
|
|
- Context context.Context // Network context to support cancellation and timeouts (nil = no timeout)
|
|
|
|
|
|
|
+ Pending bool // Whether to operate on the pending state or the last known one
|
|
|
|
|
+ From common.Address // Optional the sender address, otherwise the first account is used
|
|
|
|
|
+ BlockNumber *big.Int // Optional the block number on which the call should be performed
|
|
|
|
|
+ Context context.Context // Network context to support cancellation and timeouts (nil = no timeout)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// TransactOpts is the collection of authorization data required to create a
|
|
// TransactOpts is the collection of authorization data required to create a
|
|
@@ -148,10 +148,10 @@ func (c *BoundContract) Call(opts *CallOpts, result interface{}, method string,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- output, err = c.caller.CallContract(ctx, msg, nil)
|
|
|
|
|
|
|
+ output, err = c.caller.CallContract(ctx, msg, opts.BlockNumber)
|
|
|
if err == nil && len(output) == 0 {
|
|
if err == nil && len(output) == 0 {
|
|
|
// 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 code, err = c.caller.CodeAt(ctx, c.address, nil); err != nil {
|
|
|
|
|
|
|
+ if code, err = c.caller.CodeAt(ctx, c.address, opts.BlockNumber); err != nil {
|
|
|
return err
|
|
return err
|
|
|
} else if len(code) == 0 {
|
|
} else if len(code) == 0 {
|
|
|
return ErrNoCode
|
|
return ErrNoCode
|