forked from mirror/go-ethereum
accounts/abi/bind: add optional block number for calls (#17942)
parent
ddaf48bf84
commit
27913dd226
@ -0,0 +1,64 @@ |
|||||||
|
package bind_test |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
"math/big" |
||||||
|
"testing" |
||||||
|
|
||||||
|
ethereum "github.com/ethereum/go-ethereum" |
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi" |
||||||
|
"github.com/ethereum/go-ethereum/accounts/abi/bind" |
||||||
|
"github.com/ethereum/go-ethereum/common" |
||||||
|
) |
||||||
|
|
||||||
|
type mockCaller struct { |
||||||
|
codeAtBlockNumber *big.Int |
||||||
|
callContractBlockNumber *big.Int |
||||||
|
} |
||||||
|
|
||||||
|
func (mc *mockCaller) CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error) { |
||||||
|
mc.codeAtBlockNumber = blockNumber |
||||||
|
return []byte{1, 2, 3}, nil |
||||||
|
} |
||||||
|
|
||||||
|
func (mc *mockCaller) CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) { |
||||||
|
mc.callContractBlockNumber = blockNumber |
||||||
|
return nil, nil |
||||||
|
} |
||||||
|
|
||||||
|
func TestPassingBlockNumber(t *testing.T) { |
||||||
|
|
||||||
|
mc := &mockCaller{} |
||||||
|
|
||||||
|
bc := bind.NewBoundContract(common.HexToAddress("0x0"), abi.ABI{ |
||||||
|
Methods: map[string]abi.Method{ |
||||||
|
"something": { |
||||||
|
Name: "something", |
||||||
|
Outputs: abi.Arguments{}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, mc, nil, nil) |
||||||
|
var ret string |
||||||
|
|
||||||
|
blockNumber := big.NewInt(42) |
||||||
|
|
||||||
|
bc.Call(&bind.CallOpts{BlockNumber: blockNumber}, &ret, "something") |
||||||
|
|
||||||
|
if mc.callContractBlockNumber != blockNumber { |
||||||
|
t.Fatalf("CallContract() was not passed the block number") |
||||||
|
} |
||||||
|
|
||||||
|
if mc.codeAtBlockNumber != blockNumber { |
||||||
|
t.Fatalf("CodeAt() was not passed the block number") |
||||||
|
} |
||||||
|
|
||||||
|
bc.Call(&bind.CallOpts{}, &ret, "something") |
||||||
|
|
||||||
|
if mc.callContractBlockNumber != nil { |
||||||
|
t.Fatalf("CallContract() was passed a block number when it should not have been") |
||||||
|
} |
||||||
|
|
||||||
|
if mc.codeAtBlockNumber != nil { |
||||||
|
t.Fatalf("CodeAt() was passed a block number when it should not have been") |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue