|
|
@@ -569,6 +569,45 @@ var bindTests = []struct {
|
|
|
nil,
|
|
|
nil,
|
|
|
},
|
|
|
+ {
|
|
|
+ `NonExistentStruct`,
|
|
|
+ `
|
|
|
+ contract NonExistentStruct {
|
|
|
+ function Struct() public view returns(uint256 a, uint256 b) {
|
|
|
+ return (10, 10);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ []string{`6080604052348015600f57600080fd5b5060888061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063d5f6622514602d575b600080fd5b6033604c565b6040805192835260208301919091528051918290030190f35b600a809156fea264697066735822beefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeef64736f6c6343decafe0033`},
|
|
|
+ []string{`[{"inputs":[],"name":"Struct","outputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"stateMutability":"pure","type":"function"}]`},
|
|
|
+ `
|
|
|
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
|
|
|
+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
|
|
|
+ "github.com/ethereum/go-ethereum/common"
|
|
|
+ "github.com/ethereum/go-ethereum/core"
|
|
|
+ `,
|
|
|
+ `
|
|
|
+ // Create a simulator and wrap a non-deployed contract
|
|
|
+
|
|
|
+ sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000))
|
|
|
+ defer sim.Close()
|
|
|
+
|
|
|
+ nonexistent, err := NewNonExistentStruct(common.Address{}, sim)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Failed to access non-existent contract: %v", err)
|
|
|
+ }
|
|
|
+ // Ensure that contract calls fail with the appropriate error
|
|
|
+ if res, err := nonexistent.Struct(nil); err == nil {
|
|
|
+ t.Fatalf("Call succeeded on non-existent contract: %v", res)
|
|
|
+ } else if (err != bind.ErrNoCode) {
|
|
|
+ t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode)
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ nil,
|
|
|
+ nil,
|
|
|
+ nil,
|
|
|
+ nil,
|
|
|
+ },
|
|
|
// Tests that gas estimation works for contracts with weird gas mechanics too.
|
|
|
{
|
|
|
`FunkyGasPattern`,
|