diff options
author | Dragan Milic <dragan@netice9.com> | 2019-01-03 19:54:24 +0800 |
---|---|---|
committer | Guillaume Ballet <gballet@gmail.com> | 2019-01-03 19:54:24 +0800 |
commit | 27913dd226e391b5260ab3b66ce7b75610a07ab7 (patch) | |
tree | 104eb5ed575105ad53237eab7401d1a392175fc6 /accounts/abi/bind/base_test.go | |
parent | ddaf48bf84b3ac54681b09d9dfbf439f6053cbc8 (diff) | |
download | dexon-27913dd226e391b5260ab3b66ce7b75610a07ab7.tar.gz dexon-27913dd226e391b5260ab3b66ce7b75610a07ab7.tar.zst dexon-27913dd226e391b5260ab3b66ce7b75610a07ab7.zip |
accounts/abi/bind: add optional block number for calls (#17942)
Diffstat (limited to 'accounts/abi/bind/base_test.go')
-rw-r--r-- | accounts/abi/bind/base_test.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/accounts/abi/bind/base_test.go b/accounts/abi/bind/base_test.go new file mode 100644 index 000000000..8adff8b59 --- /dev/null +++ b/accounts/abi/bind/base_test.go @@ -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") + } +} |