mirror of https://github.com/ethereum/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