github.com/MetalBlockchain/subnet-evm@v0.4.9/accounts/abi/bind/bind_test.go (about) 1 // (c) 2019-2020, Ava Labs, Inc. 2 // 3 // This file is a derived work, based on the go-ethereum library whose original 4 // notices appear below. 5 // 6 // It is distributed under a license compatible with the licensing terms of the 7 // original code from which it is derived. 8 // 9 // Much love to the original authors for their work. 10 // ********** 11 // Copyright 2016 The go-ethereum Authors 12 // This file is part of the go-ethereum library. 13 // 14 // The go-ethereum library is free software: you can redistribute it and/or modify 15 // it under the terms of the GNU Lesser General Public License as published by 16 // the Free Software Foundation, either version 3 of the License, or 17 // (at your option) any later version. 18 // 19 // The go-ethereum library is distributed in the hope that it will be useful, 20 // but WITHOUT ANY WARRANTY; without even the implied warranty of 21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 // GNU Lesser General Public License for more details. 23 // 24 // You should have received a copy of the GNU Lesser General Public License 25 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 26 27 package bind 28 29 import ( 30 "fmt" 31 "os" 32 "os/exec" 33 "path/filepath" 34 "runtime" 35 "strings" 36 "testing" 37 38 "github.com/ethereum/go-ethereum/common" 39 ) 40 41 var bindTests = []struct { 42 name string 43 contract string 44 bytecode []string 45 abi []string 46 imports string 47 tester string 48 fsigs []map[string]string 49 libs map[string]string 50 aliases map[string]string 51 types []string 52 }{ 53 // Test that the binding is available in combined and separate forms too 54 { 55 `Empty`, 56 `contract NilContract {}`, 57 []string{`606060405260068060106000396000f3606060405200`}, 58 []string{`[]`}, 59 `"github.com/ethereum/go-ethereum/common"`, 60 ` 61 if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil { 62 t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil) 63 } 64 if b, err := NewEmptyCaller(common.Address{}, nil); b == nil || err != nil { 65 t.Fatalf("caller binding (%v) nil or error (%v) not nil", b, nil) 66 } 67 if b, err := NewEmptyTransactor(common.Address{}, nil); b == nil || err != nil { 68 t.Fatalf("transactor binding (%v) nil or error (%v) not nil", b, nil) 69 } 70 `, 71 nil, 72 nil, 73 nil, 74 nil, 75 }, 76 // Test that all the official sample contracts bind correctly 77 { 78 `Token`, 79 `https://ethereum.org/token`, 80 []string{`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`}, 81 []string{`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`}, 82 `"github.com/ethereum/go-ethereum/common"`, 83 ` 84 if b, err := NewToken(common.Address{}, nil); b == nil || err != nil { 85 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 86 } 87 `, 88 nil, 89 nil, 90 nil, 91 nil, 92 }, 93 { 94 `Crowdsale`, 95 `https://ethereum.org/crowdsale`, 96 []string{`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`}, 97 []string{`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`}, 98 `"github.com/ethereum/go-ethereum/common"`, 99 ` 100 if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil { 101 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 102 } 103 `, 104 nil, 105 nil, 106 nil, 107 nil, 108 }, 109 110 // Test that named and anonymous inputs are handled correctly 111 { 112 `InputChecker`, ``, []string{``}, 113 []string{` 114 [ 115 {"type":"function","name":"noInput","constant":true,"inputs":[],"outputs":[]}, 116 {"type":"function","name":"namedInput","constant":true,"inputs":[{"name":"str","type":"string"}],"outputs":[]}, 117 {"type":"function","name":"anonInput","constant":true,"inputs":[{"name":"","type":"string"}],"outputs":[]}, 118 {"type":"function","name":"namedInputs","constant":true,"inputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}],"outputs":[]}, 119 {"type":"function","name":"anonInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"outputs":[]}, 120 {"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]} 121 ] 122 `}, 123 ` 124 "fmt" 125 126 "github.com/ethereum/go-ethereum/common" 127 `, 128 `if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil { 129 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 130 } else if false { // Don't run, just compile and test types 131 var err error 132 133 err = b.NoInput(nil) 134 err = b.NamedInput(nil, "") 135 err = b.AnonInput(nil, "") 136 err = b.NamedInputs(nil, "", "") 137 err = b.AnonInputs(nil, "", "") 138 err = b.MixedInputs(nil, "", "") 139 140 fmt.Println(err) 141 }`, 142 nil, 143 nil, 144 nil, 145 nil, 146 }, 147 // Test that named and anonymous outputs are handled correctly 148 { 149 `OutputChecker`, ``, []string{``}, 150 []string{` 151 [ 152 {"type":"function","name":"noOutput","constant":true,"inputs":[],"outputs":[]}, 153 {"type":"function","name":"namedOutput","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"}]}, 154 {"type":"function","name":"anonOutput","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"}]}, 155 {"type":"function","name":"namedOutputs","constant":true,"inputs":[],"outputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}]}, 156 {"type":"function","name":"collidingOutputs","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"},{"name":"Str","type":"string"}]}, 157 {"type":"function","name":"anonOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"","type":"string"}]}, 158 {"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]} 159 ] 160 `}, 161 ` 162 "fmt" 163 164 "github.com/ethereum/go-ethereum/common" 165 `, 166 `if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil { 167 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 168 } else if false { // Don't run, just compile and test types 169 var str1, str2 string 170 var err error 171 172 err = b.NoOutput(nil) 173 str1, err = b.NamedOutput(nil) 174 str1, err = b.AnonOutput(nil) 175 res, _ := b.NamedOutputs(nil) 176 str1, str2, err = b.CollidingOutputs(nil) 177 str1, str2, err = b.AnonOutputs(nil) 178 str1, str2, err = b.MixedOutputs(nil) 179 180 fmt.Println(str1, str2, res.Str1, res.Str2, err) 181 }`, 182 nil, 183 nil, 184 nil, 185 nil, 186 }, 187 // Tests that named, anonymous and indexed events are handled correctly 188 { 189 `EventChecker`, ``, []string{``}, 190 []string{` 191 [ 192 {"type":"event","name":"empty","inputs":[]}, 193 {"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]}, 194 {"type":"event","name":"mixed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256"}]}, 195 {"type":"event","name":"anonymous","anonymous":true,"inputs":[]}, 196 {"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]}, 197 {"type":"event","name":"unnamed","inputs":[{"name":"","type":"uint256","indexed": true},{"name":"","type":"uint256","indexed":true}]} 198 ] 199 `}, 200 ` 201 "fmt" 202 "math/big" 203 "reflect" 204 205 "github.com/ethereum/go-ethereum/common" 206 `, 207 `if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil { 208 t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil) 209 } else if false { // Don't run, just compile and test types 210 var ( 211 err error 212 res bool 213 str string 214 dat []byte 215 hash common.Hash 216 ) 217 _, err = e.FilterEmpty(nil) 218 _, err = e.FilterIndexed(nil, []common.Address{}, []*big.Int{}) 219 220 mit, err := e.FilterMixed(nil, []common.Address{}) 221 222 res = mit.Next() // Make sure the iterator has a Next method 223 err = mit.Error() // Make sure the iterator has an Error method 224 err = mit.Close() // Make sure the iterator has a Close method 225 226 fmt.Println(mit.Event.Raw.BlockHash) // Make sure the raw log is contained within the results 227 fmt.Println(mit.Event.Num) // Make sure the unpacked non-indexed fields are present 228 fmt.Println(mit.Event.Addr) // Make sure the reconstructed indexed fields are present 229 230 dit, err := e.FilterDynamic(nil, []string{}, [][]byte{}) 231 232 str = dit.Event.Str // Make sure non-indexed strings retain their type 233 dat = dit.Event.Dat // Make sure non-indexed bytes retain their type 234 hash = dit.Event.IdxStr // Make sure indexed strings turn into hashes 235 hash = dit.Event.IdxDat // Make sure indexed bytes turn into hashes 236 237 sink := make(chan *EventCheckerMixed) 238 sub, err := e.WatchMixed(nil, sink, []common.Address{}) 239 defer sub.Unsubscribe() 240 241 event := <-sink 242 fmt.Println(event.Raw.BlockHash) // Make sure the raw log is contained within the results 243 fmt.Println(event.Num) // Make sure the unpacked non-indexed fields are present 244 fmt.Println(event.Addr) // Make sure the reconstructed indexed fields are present 245 246 fmt.Println(res, str, dat, hash, err) 247 248 oit, err := e.FilterUnnamed(nil, []*big.Int{}, []*big.Int{}) 249 250 arg0 := oit.Event.Arg0 // Make sure unnamed arguments are handled correctly 251 arg1 := oit.Event.Arg1 // Make sure unnamed arguments are handled correctly 252 fmt.Println(arg0, arg1) 253 } 254 // Run a tiny reflection test to ensure disallowed methods don't appear 255 if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok { 256 t.Errorf("binding has disallowed method (FilterAnonymous)") 257 }`, 258 nil, 259 nil, 260 nil, 261 nil, 262 }, 263 // Test that contract interactions (deploy, transact and call) generate working code 264 { 265 `Interactor`, 266 ` 267 contract Interactor { 268 string public deployString; 269 string public transactString; 270 271 function Interactor(string str) { 272 deployString = str; 273 } 274 275 function transact(string str) { 276 transactString = str; 277 } 278 } 279 `, 280 []string{`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`}, 281 []string{`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`}, 282 ` 283 "math/big" 284 285 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 286 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 287 "github.com/MetalBlockchain/subnet-evm/core" 288 "github.com/ethereum/go-ethereum/crypto" 289 `, 290 ` 291 // Generate a new random account and a funded simulator 292 key, _ := crypto.GenerateKey() 293 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 294 295 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 296 defer sim.Close() 297 298 // Deploy an interaction tester contract and call a transaction on it 299 _, _, interactor, err := DeployInteractor(auth, sim, "Deploy string") 300 if err != nil { 301 t.Fatalf("Failed to deploy interactor contract: %v", err) 302 } 303 if _, err := interactor.Transact(auth, "Transact string"); err != nil { 304 t.Fatalf("Failed to transact with interactor contract: %v", err) 305 } 306 // Commit all pending transactions in the simulator and check the contract state 307 sim.Commit(false) 308 309 if str, err := interactor.DeployString(nil); err != nil { 310 t.Fatalf("Failed to retrieve deploy string: %v", err) 311 } else if str != "Deploy string" { 312 t.Fatalf("Deploy string mismatch: have '%s', want 'Deploy string'", str) 313 } 314 if str, err := interactor.TransactString(nil); err != nil { 315 t.Fatalf("Failed to retrieve transact string: %v", err) 316 } else if str != "Transact string" { 317 t.Fatalf("Transact string mismatch: have '%s', want 'Transact string'", str) 318 } 319 `, 320 nil, 321 nil, 322 nil, 323 nil, 324 }, 325 // Tests that plain values can be properly returned and deserialized 326 { 327 `Getter`, 328 ` 329 contract Getter { 330 function getter() constant returns (string, int, bytes32) { 331 return ("Hi", 1, sha3("")); 332 } 333 } 334 `, 335 []string{`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`}, 336 []string{`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`}, 337 ` 338 "math/big" 339 340 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 341 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 342 "github.com/MetalBlockchain/subnet-evm/core" 343 "github.com/ethereum/go-ethereum/crypto" 344 `, 345 ` 346 // Generate a new random account and a funded simulator 347 key, _ := crypto.GenerateKey() 348 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 349 350 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 351 defer sim.Close() 352 353 // Deploy a tuple tester contract and execute a structured call on it 354 _, _, getter, err := DeployGetter(auth, sim) 355 if err != nil { 356 t.Fatalf("Failed to deploy getter contract: %v", err) 357 } 358 sim.Commit(false) 359 360 if str, num, _, err := getter.Getter(nil); err != nil { 361 t.Fatalf("Failed to call anonymous field retriever: %v", err) 362 } else if str != "Hi" || num.Cmp(big.NewInt(1)) != 0 { 363 t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", str, num, "Hi", 1) 364 } 365 `, 366 nil, 367 nil, 368 nil, 369 nil, 370 }, 371 // Tests that tuples can be properly returned and deserialized 372 { 373 `Tupler`, 374 ` 375 contract Tupler { 376 function tuple() constant returns (string a, int b, bytes32 c) { 377 return ("Hi", 1, sha3("")); 378 } 379 } 380 `, 381 []string{`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`}, 382 []string{`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`}, 383 ` 384 "math/big" 385 386 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 387 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 388 "github.com/MetalBlockchain/subnet-evm/core" 389 "github.com/ethereum/go-ethereum/crypto" 390 `, 391 ` 392 // Generate a new random account and a funded simulator 393 key, _ := crypto.GenerateKey() 394 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 395 396 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 397 defer sim.Close() 398 399 // Deploy a tuple tester contract and execute a structured call on it 400 _, _, tupler, err := DeployTupler(auth, sim) 401 if err != nil { 402 t.Fatalf("Failed to deploy tupler contract: %v", err) 403 } 404 sim.Commit(false) 405 406 if res, err := tupler.Tuple(nil); err != nil { 407 t.Fatalf("Failed to call structure retriever: %v", err) 408 } else if res.A != "Hi" || res.B.Cmp(big.NewInt(1)) != 0 { 409 t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", res.A, res.B, "Hi", 1) 410 } 411 `, 412 nil, 413 nil, 414 nil, 415 nil, 416 }, 417 // Tests that arrays/slices can be properly returned and deserialized. 418 // Only addresses are tested, remainder just compiled to keep the test small. 419 { 420 `Slicer`, 421 ` 422 contract Slicer { 423 function echoAddresses(address[] input) constant returns (address[] output) { 424 return input; 425 } 426 function echoInts(int[] input) constant returns (int[] output) { 427 return input; 428 } 429 function echoFancyInts(uint24[23] input) constant returns (uint24[23] output) { 430 return input; 431 } 432 function echoBools(bool[] input) constant returns (bool[] output) { 433 return input; 434 } 435 } 436 `, 437 []string{`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`}, 438 []string{`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`}, 439 ` 440 "math/big" 441 "reflect" 442 443 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 444 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 445 "github.com/ethereum/go-ethereum/common" 446 "github.com/MetalBlockchain/subnet-evm/core" 447 "github.com/ethereum/go-ethereum/crypto" 448 `, 449 ` 450 // Generate a new random account and a funded simulator 451 key, _ := crypto.GenerateKey() 452 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 453 454 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 455 defer sim.Close() 456 457 // Deploy a slice tester contract and execute a n array call on it 458 _, _, slicer, err := DeploySlicer(auth, sim) 459 if err != nil { 460 t.Fatalf("Failed to deploy slicer contract: %v", err) 461 } 462 sim.Commit(false) 463 464 if out, err := slicer.EchoAddresses(nil, []common.Address{auth.From, common.Address{}}); err != nil { 465 t.Fatalf("Failed to call slice echoer: %v", err) 466 } else if !reflect.DeepEqual(out, []common.Address{auth.From, common.Address{}}) { 467 t.Fatalf("Slice return mismatch: have %v, want %v", out, []common.Address{auth.From, common.Address{}}) 468 } 469 `, 470 nil, 471 nil, 472 nil, 473 nil, 474 }, 475 // Tests that anonymous default methods can be correctly invoked 476 { 477 `Defaulter`, 478 ` 479 contract Defaulter { 480 address public caller; 481 482 function() { 483 caller = msg.sender; 484 } 485 } 486 `, 487 []string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`}, 488 []string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`}, 489 ` 490 "math/big" 491 492 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 493 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 494 "github.com/MetalBlockchain/subnet-evm/core" 495 "github.com/ethereum/go-ethereum/crypto" 496 `, 497 ` 498 // Generate a new random account and a funded simulator 499 key, _ := crypto.GenerateKey() 500 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 501 502 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 503 defer sim.Close() 504 505 // Deploy a default method invoker contract and execute its default method 506 _, _, defaulter, err := DeployDefaulter(auth, sim) 507 if err != nil { 508 t.Fatalf("Failed to deploy defaulter contract: %v", err) 509 } 510 if _, err := (&DefaulterRaw{defaulter}).Transfer(auth); err != nil { 511 t.Fatalf("Failed to invoke default method: %v", err) 512 } 513 sim.Commit(false) 514 515 if caller, err := defaulter.Caller(nil); err != nil { 516 t.Fatalf("Failed to call address retriever: %v", err) 517 } else if (caller != auth.From) { 518 t.Fatalf("Address mismatch: have %v, want %v", caller, auth.From) 519 } 520 `, 521 nil, 522 nil, 523 nil, 524 nil, 525 }, 526 // Tests that structs are correctly unpacked 527 { 528 529 `Structs`, 530 ` 531 pragma solidity ^0.6.5; 532 pragma experimental ABIEncoderV2; 533 contract Structs { 534 struct A { 535 bytes32 B; 536 } 537 538 function F() public view returns (A[] memory a, uint256[] memory c, bool[] memory d) { 539 A[] memory a = new A[](2); 540 a[0].B = bytes32(uint256(1234) << 96); 541 uint256[] memory c; 542 bool[] memory d; 543 return (a, c, d); 544 } 545 546 function G() public view returns (A[] memory a) { 547 A[] memory a = new A[](2); 548 a[0].B = bytes32(uint256(1234) << 96); 549 return a; 550 } 551 } 552 `, 553 []string{`608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806328811f591461003b5780636fecb6231461005b575b600080fd5b610043610070565b604051610052939291906101a0565b60405180910390f35b6100636100d6565b6040516100529190610186565b604080516002808252606082810190935282918291829190816020015b610095610131565b81526020019060019003908161008d575050805190915061026960611b9082906000906100be57fe5b60209081029190910101515293606093508392509050565b6040805160028082526060828101909352829190816020015b6100f7610131565b8152602001906001900390816100ef575050805190915061026960611b90829060009061012057fe5b602090810291909101015152905090565b60408051602081019091526000815290565b815260200190565b6000815180845260208085019450808401835b8381101561017b578151518752958201959082019060010161015e565b509495945050505050565b600060208252610199602083018461014b565b9392505050565b6000606082526101b3606083018661014b565b6020838203818501528186516101c98185610239565b91508288019350845b818110156101f3576101e5838651610143565b9484019492506001016101d2565b505084810360408601528551808252908201925081860190845b8181101561022b57825115158552938301939183019160010161020d565b509298975050505050505050565b9081526020019056fea2646970667358221220eb85327e285def14230424c52893aebecec1e387a50bb6b75fc4fdbed647f45f64736f6c63430006050033`}, 554 []string{`[{"inputs":[],"name":"F","outputs":[{"components":[{"internalType":"bytes32","name":"B","type":"bytes32"}],"internalType":"structStructs.A[]","name":"a","type":"tuple[]"},{"internalType":"uint256[]","name":"c","type":"uint256[]"},{"internalType":"bool[]","name":"d","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"G","outputs":[{"components":[{"internalType":"bytes32","name":"B","type":"bytes32"}],"internalType":"structStructs.A[]","name":"a","type":"tuple[]"}],"stateMutability":"view","type":"function"}]`}, 555 ` 556 "math/big" 557 558 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 559 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 560 "github.com/MetalBlockchain/subnet-evm/core" 561 "github.com/ethereum/go-ethereum/crypto" 562 `, 563 ` 564 // Generate a new random account and a funded simulator 565 key, _ := crypto.GenerateKey() 566 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 567 568 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 569 defer sim.Close() 570 571 // Deploy a structs method invoker contract and execute its default method 572 _, _, structs, err := DeployStructs(auth, sim) 573 if err != nil { 574 t.Fatalf("Failed to deploy defaulter contract: %v", err) 575 } 576 sim.Commit(false) 577 opts := bind.CallOpts{} 578 if _, err := structs.F(&opts); err != nil { 579 t.Fatalf("Failed to invoke F method: %v", err) 580 } 581 if _, err := structs.G(&opts); err != nil { 582 t.Fatalf("Failed to invoke G method: %v", err) 583 } 584 `, 585 nil, 586 nil, 587 nil, 588 nil, 589 }, 590 // Tests that non-existent contracts are reported as such (though only simulator test) 591 { 592 `NonExistent`, 593 ` 594 contract NonExistent { 595 function String() constant returns(string) { 596 return "I don't exist"; 597 } 598 } 599 `, 600 []string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`}, 601 []string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, 602 ` 603 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 604 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 605 "github.com/ethereum/go-ethereum/common" 606 "github.com/MetalBlockchain/subnet-evm/core" 607 `, 608 ` 609 // Create a simulator and wrap a non-deployed contract 610 611 sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000)) 612 defer sim.Close() 613 614 nonexistent, err := NewNonExistent(common.Address{}, sim) 615 if err != nil { 616 t.Fatalf("Failed to access non-existent contract: %v", err) 617 } 618 // Ensure that contract calls fail with the appropriate error 619 if res, err := nonexistent.String(nil); err == nil { 620 t.Fatalf("Call succeeded on non-existent contract: %v", res) 621 } else if (err != bind.ErrNoCode) { 622 t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode) 623 } 624 `, 625 nil, 626 nil, 627 nil, 628 nil, 629 }, 630 { 631 `NonExistentStruct`, 632 ` 633 contract NonExistentStruct { 634 function Struct() public view returns(uint256 a, uint256 b) { 635 return (10, 10); 636 } 637 } 638 `, 639 []string{`6080604052348015600f57600080fd5b5060888061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063d5f6622514602d575b600080fd5b6033604c565b6040805192835260208301919091528051918290030190f35b600a809156fea264697066735822beefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefbeef64736f6c6343decafe0033`}, 640 []string{`[{"inputs":[],"name":"Struct","outputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"stateMutability":"pure","type":"function"}]`}, 641 ` 642 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 643 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 644 "github.com/ethereum/go-ethereum/common" 645 "github.com/MetalBlockchain/subnet-evm/core" 646 `, 647 ` 648 // Create a simulator and wrap a non-deployed contract 649 650 sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000)) 651 defer sim.Close() 652 653 nonexistent, err := NewNonExistentStruct(common.Address{}, sim) 654 if err != nil { 655 t.Fatalf("Failed to access non-existent contract: %v", err) 656 } 657 // Ensure that contract calls fail with the appropriate error 658 if res, err := nonexistent.Struct(nil); err == nil { 659 t.Fatalf("Call succeeded on non-existent contract: %v", res) 660 } else if (err != bind.ErrNoCode) { 661 t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode) 662 } 663 `, 664 nil, 665 nil, 666 nil, 667 nil, 668 }, 669 // Tests that gas estimation works for contracts with weird gas mechanics too. 670 { 671 `FunkyGasPattern`, 672 ` 673 contract FunkyGasPattern { 674 string public field; 675 676 function SetField(string value) { 677 // This check will screw gas estimation! Good, good! 678 if (msg.gas < 100000) { 679 throw; 680 } 681 field = value; 682 } 683 } 684 `, 685 []string{`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`}, 686 []string{`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, 687 ` 688 "math/big" 689 690 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 691 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 692 "github.com/MetalBlockchain/subnet-evm/core" 693 "github.com/ethereum/go-ethereum/crypto" 694 `, 695 ` 696 // Generate a new random account and a funded simulator 697 key, _ := crypto.GenerateKey() 698 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 699 700 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 701 defer sim.Close() 702 703 // Deploy a funky gas pattern contract 704 _, _, limiter, err := DeployFunkyGasPattern(auth, sim) 705 if err != nil { 706 t.Fatalf("Failed to deploy funky contract: %v", err) 707 } 708 sim.Commit(false) 709 710 // Set the field with automatic estimation and check that it succeeds 711 if _, err := limiter.SetField(auth, "automatic"); err != nil { 712 t.Fatalf("Failed to call automatically gased transaction: %v", err) 713 } 714 sim.Commit(false) 715 716 if field, _ := limiter.Field(nil); field != "automatic" { 717 t.Fatalf("Field mismatch: have %v, want %v", field, "automatic") 718 } 719 `, 720 nil, 721 nil, 722 nil, 723 nil, 724 }, 725 // Test that constant functions can be called from an (optional) specified address 726 { 727 `CallFrom`, 728 ` 729 contract CallFrom { 730 function callFrom() constant returns(address) { 731 return msg.sender; 732 } 733 } 734 `, []string{`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`}, 735 []string{`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`}, 736 ` 737 "math/big" 738 739 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 740 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 741 "github.com/ethereum/go-ethereum/common" 742 "github.com/MetalBlockchain/subnet-evm/core" 743 "github.com/ethereum/go-ethereum/crypto" 744 `, 745 ` 746 // Generate a new random account and a funded simulator 747 key, _ := crypto.GenerateKey() 748 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 749 750 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 751 defer sim.Close() 752 753 // Deploy a sender tester contract and execute a structured call on it 754 _, _, callfrom, err := DeployCallFrom(auth, sim) 755 if err != nil { 756 t.Fatalf("Failed to deploy sender contract: %v", err) 757 } 758 sim.Commit(false) 759 760 if res, err := callfrom.CallFrom(nil); err != nil { 761 t.Errorf("Failed to call constant function: %v", err) 762 } else if res != (common.Address{}) { 763 t.Errorf("Invalid address returned, want: %x, got: %x", (common.Address{}), res) 764 } 765 766 for _, addr := range []common.Address{common.Address{}, common.Address{1}, common.Address{2}} { 767 if res, err := callfrom.CallFrom(&bind.CallOpts{From: addr}); err != nil { 768 t.Fatalf("Failed to call constant function: %v", err) 769 } else if res != addr { 770 t.Fatalf("Invalid address returned, want: %x, got: %x", addr, res) 771 } 772 } 773 `, 774 nil, 775 nil, 776 nil, 777 nil, 778 }, 779 // Tests that methods and returns with underscores inside work correctly. 780 { 781 `Underscorer`, 782 ` 783 contract Underscorer { 784 function UnderscoredOutput() constant returns (int _int, string _string) { 785 return (314, "pi"); 786 } 787 function LowerLowerCollision() constant returns (int _res, int res) { 788 return (1, 2); 789 } 790 function LowerUpperCollision() constant returns (int _res, int Res) { 791 return (1, 2); 792 } 793 function UpperLowerCollision() constant returns (int _Res, int res) { 794 return (1, 2); 795 } 796 function UpperUpperCollision() constant returns (int _Res, int Res) { 797 return (1, 2); 798 } 799 function PurelyUnderscoredOutput() constant returns (int _, int res) { 800 return (1, 2); 801 } 802 function AllPurelyUnderscoredOutput() constant returns (int _, int __) { 803 return (1, 2); 804 } 805 function _under_scored_func() constant returns (int _int) { 806 return 0; 807 } 808 } 809 `, []string{`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`}, 810 []string{`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`}, 811 ` 812 "fmt" 813 "math/big" 814 815 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 816 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 817 "github.com/MetalBlockchain/subnet-evm/core" 818 "github.com/ethereum/go-ethereum/crypto" 819 `, 820 ` 821 // Generate a new random account and a funded simulator 822 key, _ := crypto.GenerateKey() 823 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 824 825 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 826 defer sim.Close() 827 828 // Deploy a underscorer tester contract and execute a structured call on it 829 _, _, underscorer, err := DeployUnderscorer(auth, sim) 830 if err != nil { 831 t.Fatalf("Failed to deploy underscorer contract: %v", err) 832 } 833 sim.Commit(false) 834 835 // Verify that underscored return values correctly parse into structs 836 if res, err := underscorer.UnderscoredOutput(nil); err != nil { 837 t.Errorf("Failed to call constant function: %v", err) 838 } else if res.Int.Cmp(big.NewInt(314)) != 0 || res.String != "pi" { 839 t.Errorf("Invalid result, want: {314, \"pi\"}, got: %+v", res) 840 } 841 // Verify that underscored and non-underscored name collisions force tuple outputs 842 var a, b *big.Int 843 844 a, b, _ = underscorer.LowerLowerCollision(nil) 845 a, b, _ = underscorer.LowerUpperCollision(nil) 846 a, b, _ = underscorer.UpperLowerCollision(nil) 847 a, b, _ = underscorer.UpperUpperCollision(nil) 848 a, b, _ = underscorer.PurelyUnderscoredOutput(nil) 849 a, b, _ = underscorer.AllPurelyUnderscoredOutput(nil) 850 a, _ = underscorer.UnderScoredFunc(nil) 851 852 fmt.Println(a, b, err) 853 `, 854 nil, 855 nil, 856 nil, 857 nil, 858 }, 859 // Tests that logs can be successfully filtered and decoded. 860 { 861 `Eventer`, 862 ` 863 contract Eventer { 864 event SimpleEvent ( 865 address indexed Addr, 866 bytes32 indexed Id, 867 bool indexed Flag, 868 uint Value 869 ); 870 function raiseSimpleEvent(address addr, bytes32 id, bool flag, uint value) { 871 SimpleEvent(addr, id, flag, value); 872 } 873 874 event NodataEvent ( 875 uint indexed Number, 876 int16 indexed Short, 877 uint32 indexed Long 878 ); 879 function raiseNodataEvent(uint number, int16 short, uint32 long) { 880 NodataEvent(number, short, long); 881 } 882 883 event DynamicEvent ( 884 string indexed IndexedString, 885 bytes indexed IndexedBytes, 886 string NonIndexedString, 887 bytes NonIndexedBytes 888 ); 889 function raiseDynamicEvent(string str, bytes blob) { 890 DynamicEvent(str, blob, str, blob); 891 } 892 893 event FixedBytesEvent ( 894 bytes24 indexed IndexedBytes, 895 bytes24 NonIndexedBytes 896 ); 897 function raiseFixedBytesEvent(bytes24 blob) { 898 FixedBytesEvent(blob, blob); 899 } 900 } 901 `, 902 []string{`608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`}, 903 []string{`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`}, 904 ` 905 "math/big" 906 "time" 907 908 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 909 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 910 "github.com/ethereum/go-ethereum/common" 911 "github.com/MetalBlockchain/subnet-evm/core" 912 "github.com/ethereum/go-ethereum/crypto" 913 `, 914 ` 915 // Generate a new random account and a funded simulator 916 key, _ := crypto.GenerateKey() 917 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 918 919 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 920 defer sim.Close() 921 922 // Deploy an eventer contract 923 _, _, eventer, err := DeployEventer(auth, sim) 924 if err != nil { 925 t.Fatalf("Failed to deploy eventer contract: %v", err) 926 } 927 sim.Commit(false) 928 929 // Inject a few events into the contract, gradually more in each block 930 for i := 1; i <= 3; i++ { 931 for j := 1; j <= i; j++ { 932 if _, err := eventer.RaiseSimpleEvent(auth, common.Address{byte(j)}, [32]byte{byte(j)}, true, big.NewInt(int64(10*i+j))); err != nil { 933 t.Fatalf("block %d, event %d: raise failed: %v", i, j, err) 934 } 935 } 936 sim.Commit(false) 937 } 938 // Test filtering for certain events and ensure they can be found 939 sit, err := eventer.FilterSimpleEvent(nil, []common.Address{common.Address{1}, common.Address{3}}, [][32]byte{{byte(1)}, {byte(2)}, {byte(3)}}, []bool{true}) 940 if err != nil { 941 t.Fatalf("failed to filter for simple events: %v", err) 942 } 943 defer sit.Close() 944 945 sit.Next() 946 if sit.Event.Value.Uint64() != 11 || !sit.Event.Flag { 947 t.Errorf("simple log content mismatch: have %v, want {11, true}", sit.Event) 948 } 949 sit.Next() 950 if sit.Event.Value.Uint64() != 21 || !sit.Event.Flag { 951 t.Errorf("simple log content mismatch: have %v, want {21, true}", sit.Event) 952 } 953 sit.Next() 954 if sit.Event.Value.Uint64() != 31 || !sit.Event.Flag { 955 t.Errorf("simple log content mismatch: have %v, want {31, true}", sit.Event) 956 } 957 sit.Next() 958 if sit.Event.Value.Uint64() != 33 || !sit.Event.Flag { 959 t.Errorf("simple log content mismatch: have %v, want {33, true}", sit.Event) 960 } 961 962 if sit.Next() { 963 t.Errorf("unexpected simple event found: %+v", sit.Event) 964 } 965 if err = sit.Error(); err != nil { 966 t.Fatalf("simple event iteration failed: %v", err) 967 } 968 // Test raising and filtering for an event with no data component 969 if _, err := eventer.RaiseNodataEvent(auth, big.NewInt(314), 141, 271); err != nil { 970 t.Fatalf("failed to raise nodata event: %v", err) 971 } 972 sim.Commit(false) 973 974 nit, err := eventer.FilterNodataEvent(nil, []*big.Int{big.NewInt(314)}, []int16{140, 141, 142}, []uint32{271}) 975 if err != nil { 976 t.Fatalf("failed to filter for nodata events: %v", err) 977 } 978 defer nit.Close() 979 980 if !nit.Next() { 981 t.Fatalf("nodata log not found: %v", nit.Error()) 982 } 983 if nit.Event.Number.Uint64() != 314 { 984 t.Errorf("nodata log content mismatch: have %v, want 314", nit.Event.Number) 985 } 986 if nit.Next() { 987 t.Errorf("unexpected nodata event found: %+v", nit.Event) 988 } 989 if err = nit.Error(); err != nil { 990 t.Fatalf("nodata event iteration failed: %v", err) 991 } 992 // Test raising and filtering for events with dynamic indexed components 993 if _, err := eventer.RaiseDynamicEvent(auth, "Hello", []byte("World")); err != nil { 994 t.Fatalf("failed to raise dynamic event: %v", err) 995 } 996 sim.Commit(false) 997 998 dit, err := eventer.FilterDynamicEvent(nil, []string{"Hi", "Hello", "Bye"}, [][]byte{[]byte("World")}) 999 if err != nil { 1000 t.Fatalf("failed to filter for dynamic events: %v", err) 1001 } 1002 defer dit.Close() 1003 1004 if !dit.Next() { 1005 t.Fatalf("dynamic log not found: %v", dit.Error()) 1006 } 1007 if dit.Event.NonIndexedString != "Hello" || string(dit.Event.NonIndexedBytes) != "World" || dit.Event.IndexedString != common.HexToHash("0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2") || dit.Event.IndexedBytes != common.HexToHash("0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18") { 1008 t.Errorf("dynamic log content mismatch: have %v, want {'0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2, '0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18', 'Hello', 'World'}", dit.Event) 1009 } 1010 if dit.Next() { 1011 t.Errorf("unexpected dynamic event found: %+v", dit.Event) 1012 } 1013 if err = dit.Error(); err != nil { 1014 t.Fatalf("dynamic event iteration failed: %v", err) 1015 } 1016 // Test raising and filtering for events with fixed bytes components 1017 var fblob [24]byte 1018 copy(fblob[:], []byte("Fixed Bytes")) 1019 1020 if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil { 1021 t.Fatalf("failed to raise fixed bytes event: %v", err) 1022 } 1023 sim.Commit(false) 1024 1025 fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob}) 1026 if err != nil { 1027 t.Fatalf("failed to filter for fixed bytes events: %v", err) 1028 } 1029 defer fit.Close() 1030 1031 if !fit.Next() { 1032 t.Fatalf("fixed bytes log not found: %v", fit.Error()) 1033 } 1034 if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob { 1035 t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob) 1036 } 1037 if fit.Next() { 1038 t.Errorf("unexpected fixed bytes event found: %+v", fit.Event) 1039 } 1040 if err = fit.Error(); err != nil { 1041 t.Fatalf("fixed bytes event iteration failed: %v", err) 1042 } 1043 // Test subscribing to an event and raising it afterwards 1044 ch := make(chan *EventerSimpleEvent, 16) 1045 sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil) 1046 if err != nil { 1047 t.Fatalf("failed to subscribe to simple events: %v", err) 1048 } 1049 if _, err := eventer.RaiseSimpleEvent(auth, common.Address{255}, [32]byte{255}, true, big.NewInt(255)); err != nil { 1050 t.Fatalf("failed to raise subscribed simple event: %v", err) 1051 } 1052 sim.Commit(false) 1053 1054 select { 1055 case event := <-ch: 1056 if event.Value.Uint64() != 255 { 1057 t.Errorf("simple log content mismatch: have %v, want 255", event) 1058 } 1059 case <-time.After(250 * time.Millisecond): 1060 t.Fatalf("subscribed simple event didn't arrive") 1061 } 1062 // Unsubscribe from the event and make sure we're not delivered more 1063 sub.Unsubscribe() 1064 1065 if _, err := eventer.RaiseSimpleEvent(auth, common.Address{254}, [32]byte{254}, true, big.NewInt(254)); err != nil { 1066 t.Fatalf("failed to raise subscribed simple event: %v", err) 1067 } 1068 sim.Commit(false) 1069 1070 select { 1071 case event := <-ch: 1072 t.Fatalf("unsubscribed simple event arrived: %v", event) 1073 case <-time.After(250 * time.Millisecond): 1074 } 1075 `, 1076 nil, 1077 nil, 1078 nil, 1079 nil, 1080 }, 1081 { 1082 `DeeplyNestedArray`, 1083 ` 1084 contract DeeplyNestedArray { 1085 uint64[3][4][5] public deepUint64Array; 1086 function storeDeepUintArray(uint64[3][4][5] arr) public { 1087 deepUint64Array = arr; 1088 } 1089 function retrieveDeepArray() public view returns (uint64[3][4][5]) { 1090 return deepUint64Array; 1091 } 1092 } 1093 `, 1094 []string{`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`}, 1095 []string{`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`}, 1096 ` 1097 "math/big" 1098 1099 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1100 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1101 "github.com/MetalBlockchain/subnet-evm/core" 1102 "github.com/ethereum/go-ethereum/crypto" 1103 `, 1104 ` 1105 // Generate a new random account and a funded simulator 1106 key, _ := crypto.GenerateKey() 1107 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1108 1109 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1110 defer sim.Close() 1111 1112 //deploy the test contract 1113 _, _, testContract, err := DeployDeeplyNestedArray(auth, sim) 1114 if err != nil { 1115 t.Fatalf("Failed to deploy test contract: %v", err) 1116 } 1117 1118 // Finish deploy. 1119 sim.Commit(false) 1120 1121 //Create coordinate-filled array, for testing purposes. 1122 testArr := [5][4][3]uint64{} 1123 for i := 0; i < 5; i++ { 1124 testArr[i] = [4][3]uint64{} 1125 for j := 0; j < 4; j++ { 1126 testArr[i][j] = [3]uint64{} 1127 for k := 0; k < 3; k++ { 1128 //pack the coordinates, each array value will be unique, and can be validated easily. 1129 testArr[i][j][k] = uint64(i) << 16 | uint64(j) << 8 | uint64(k) 1130 } 1131 } 1132 } 1133 1134 if _, err := testContract.StoreDeepUintArray(&bind.TransactOpts{ 1135 From: auth.From, 1136 Signer: auth.Signer, 1137 }, testArr); err != nil { 1138 t.Fatalf("Failed to store nested array in test contract: %v", err) 1139 } 1140 1141 sim.Commit(false) 1142 1143 retrievedArr, err := testContract.RetrieveDeepArray(&bind.CallOpts{ 1144 From: auth.From, 1145 Accepted: false, 1146 }) 1147 if err != nil { 1148 t.Fatalf("Failed to retrieve nested array from test contract: %v", err) 1149 } 1150 1151 //quick check to see if contents were copied 1152 // (See accounts/abi/unpack_test.go for more extensive testing) 1153 if retrievedArr[4][3][2] != testArr[4][3][2] { 1154 t.Fatalf("Retrieved value does not match expected value! got: %d, expected: %d. %v", retrievedArr[4][3][2], testArr[4][3][2], err) 1155 } 1156 `, 1157 nil, 1158 nil, 1159 nil, 1160 nil, 1161 }, 1162 { 1163 `CallbackParam`, 1164 ` 1165 contract FunctionPointerTest { 1166 function test(function(uint256) external callback) external { 1167 callback(1); 1168 } 1169 } 1170 `, 1171 []string{`608060405234801561001057600080fd5b5061015e806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063d7a5aba214610040575b600080fd5b34801561004c57600080fd5b506100be6004803603602081101561006357600080fd5b810190808035806c0100000000000000000000000090049068010000000000000000900463ffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff169091602001919093929190939291905050506100c0565b005b818160016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561011657600080fd5b505af115801561012a573d6000803e3d6000fd5b50505050505056fea165627a7a7230582062f87455ff84be90896dbb0c4e4ddb505c600d23089f8e80a512548440d7e2580029`}, 1172 []string{`[ 1173 { 1174 "constant": false, 1175 "inputs": [ 1176 { 1177 "name": "callback", 1178 "type": "function" 1179 } 1180 ], 1181 "name": "test", 1182 "outputs": [], 1183 "payable": false, 1184 "stateMutability": "nonpayable", 1185 "type": "function" 1186 } 1187 ]`}, ` 1188 "strings" 1189 `, 1190 ` 1191 if strings.Compare("test(function)", CallbackParamFuncSigs["d7a5aba2"]) != 0 { 1192 t.Fatalf("") 1193 } 1194 `, 1195 []map[string]string{ 1196 { 1197 "test(function)": "d7a5aba2", 1198 }, 1199 }, 1200 nil, 1201 nil, 1202 nil, 1203 }, { 1204 `Tuple`, 1205 ` 1206 pragma solidity >=0.4.19 <0.6.0; 1207 pragma experimental ABIEncoderV2; 1208 1209 contract Tuple { 1210 struct S { uint a; uint[] b; T[] c; } 1211 struct T { uint x; uint y; } 1212 struct P { uint8 x; uint8 y; } 1213 struct Q { uint16 x; uint16 y; } 1214 event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e); 1215 event TupleEvent2(P[]); 1216 1217 function func1(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public pure returns (S memory, T[2][] memory, T[][2] memory, S[] memory, uint[] memory) { 1218 return (a, b, c, d, e); 1219 } 1220 function func2(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public { 1221 emit TupleEvent(a, b, c, d, e); 1222 } 1223 function func3(Q[] memory) public pure {} // call function, nothing to return 1224 } 1225 `, 1226 []string{`60806040523480156100115760006000fd5b50610017565b6110b2806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c8063443c79b41461004c578063d0062cdd14610080578063e4d9a43b1461009c57610046565b60006000fd5b610066600480360361006191908101906107b8565b6100b8565b604051610077959493929190610ccb565b60405180910390f35b61009a600480360361009591908101906107b8565b6100ef565b005b6100b660048036036100b19190810190610775565b610136565b005b6100c061013a565b60606100ca61015e565b606060608989898989945094509450945094506100e2565b9550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd008585858585604051610126959493929190610ccb565b60405180910390a15b5050505050565b5b50565b60405180606001604052806000815260200160608152602001606081526020015090565b60405180604001604052806002905b606081526020019060019003908161016d57905050905661106e565b600082601f830112151561019d5760006000fd5b81356101b06101ab82610d6f565b610d41565b915081818352602084019350602081019050838560808402820111156101d65760006000fd5b60005b8381101561020757816101ec888261037a565b8452602084019350608083019250505b6001810190506101d9565b5050505092915050565b600082601f83011215156102255760006000fd5b600261023861023382610d98565b610d41565b9150818360005b83811015610270578135860161025588826103f3565b8452602084019350602083019250505b60018101905061023f565b5050505092915050565b600082601f830112151561028e5760006000fd5b81356102a161029c82610dbb565b610d41565b915081818352602084019350602081019050838560408402820111156102c75760006000fd5b60005b838110156102f857816102dd888261058b565b8452602084019350604083019250505b6001810190506102ca565b5050505092915050565b600082601f83011215156103165760006000fd5b813561032961032482610de4565b610d41565b9150818183526020840193506020810190508360005b83811015610370578135860161035588826105d8565b8452602084019350602083019250505b60018101905061033f565b5050505092915050565b600082601f830112151561038e5760006000fd5b60026103a161039c82610e0d565b610d41565b915081838560408402820111156103b85760006000fd5b60005b838110156103e957816103ce88826106fe565b8452602084019350604083019250505b6001810190506103bb565b5050505092915050565b600082601f83011215156104075760006000fd5b813561041a61041582610e30565b610d41565b915081818352602084019350602081019050838560408402820111156104405760006000fd5b60005b83811015610471578161045688826106fe565b8452602084019350604083019250505b600181019050610443565b5050505092915050565b600082601f830112151561048f5760006000fd5b81356104a261049d82610e59565b610d41565b915081818352602084019350602081019050838560208402820111156104c85760006000fd5b60005b838110156104f957816104de8882610760565b8452602084019350602083019250505b6001810190506104cb565b5050505092915050565b600082601f83011215156105175760006000fd5b813561052a61052582610e82565b610d41565b915081818352602084019350602081019050838560208402820111156105505760006000fd5b60005b8381101561058157816105668882610760565b8452602084019350602083019250505b600181019050610553565b5050505092915050565b60006040828403121561059e5760006000fd5b6105a86040610d41565b905060006105b88482850161074b565b60008301525060206105cc8482850161074b565b60208301525092915050565b6000606082840312156105eb5760006000fd5b6105f56060610d41565b9050600061060584828501610760565b600083015250602082013567ffffffffffffffff8111156106265760006000fd5b6106328482850161047b565b602083015250604082013567ffffffffffffffff8111156106535760006000fd5b61065f848285016103f3565b60408301525092915050565b60006060828403121561067e5760006000fd5b6106886060610d41565b9050600061069884828501610760565b600083015250602082013567ffffffffffffffff8111156106b95760006000fd5b6106c58482850161047b565b602083015250604082013567ffffffffffffffff8111156106e65760006000fd5b6106f2848285016103f3565b60408301525092915050565b6000604082840312156107115760006000fd5b61071b6040610d41565b9050600061072b84828501610760565b600083015250602061073f84828501610760565b60208301525092915050565b60008135905061075a8161103a565b92915050565b60008135905061076f81611054565b92915050565b6000602082840312156107885760006000fd5b600082013567ffffffffffffffff8111156107a35760006000fd5b6107af8482850161027a565b91505092915050565b6000600060006000600060a086880312156107d35760006000fd5b600086013567ffffffffffffffff8111156107ee5760006000fd5b6107fa8882890161066b565b955050602086013567ffffffffffffffff8111156108185760006000fd5b61082488828901610189565b945050604086013567ffffffffffffffff8111156108425760006000fd5b61084e88828901610211565b935050606086013567ffffffffffffffff81111561086c5760006000fd5b61087888828901610302565b925050608086013567ffffffffffffffff8111156108965760006000fd5b6108a288828901610503565b9150509295509295909350565b60006108bb8383610a6a565b60808301905092915050565b60006108d38383610ac2565b905092915050565b60006108e78383610c36565b905092915050565b60006108fb8383610c8d565b60408301905092915050565b60006109138383610cbc565b60208301905092915050565b600061092a82610f0f565b6109348185610fb7565b935061093f83610eab565b8060005b8381101561097157815161095788826108af565b975061096283610f5c565b9250505b600181019050610943565b5085935050505092915050565b600061098982610f1a565b6109938185610fc8565b9350836020820285016109a585610ebb565b8060005b858110156109e257848403895281516109c285826108c7565b94506109cd83610f69565b925060208a019950505b6001810190506109a9565b50829750879550505050505092915050565b60006109ff82610f25565b610a098185610fd3565b935083602082028501610a1b85610ec5565b8060005b85811015610a585784840389528151610a3885826108db565b9450610a4383610f76565b925060208a019950505b600181019050610a1f565b50829750879550505050505092915050565b610a7381610f30565b610a7d8184610fe4565b9250610a8882610ed5565b8060005b83811015610aba578151610aa087826108ef565b9650610aab83610f83565b9250505b600181019050610a8c565b505050505050565b6000610acd82610f3b565b610ad78185610fef565b9350610ae283610edf565b8060005b83811015610b14578151610afa88826108ef565b9750610b0583610f90565b9250505b600181019050610ae6565b5085935050505092915050565b6000610b2c82610f51565b610b368185611011565b9350610b4183610eff565b8060005b83811015610b73578151610b598882610907565b9750610b6483610faa565b9250505b600181019050610b45565b5085935050505092915050565b6000610b8b82610f46565b610b958185611000565b9350610ba083610eef565b8060005b83811015610bd2578151610bb88882610907565b9750610bc383610f9d565b9250505b600181019050610ba4565b5085935050505092915050565b6000606083016000830151610bf76000860182610cbc565b5060208301518482036020860152610c0f8282610b80565b91505060408301518482036040860152610c298282610ac2565b9150508091505092915050565b6000606083016000830151610c4e6000860182610cbc565b5060208301518482036020860152610c668282610b80565b91505060408301518482036040860152610c808282610ac2565b9150508091505092915050565b604082016000820151610ca36000850182610cbc565b506020820151610cb66020850182610cbc565b50505050565b610cc581611030565b82525050565b600060a0820190508181036000830152610ce58188610bdf565b90508181036020830152610cf9818761091f565b90508181036040830152610d0d818661097e565b90508181036060830152610d2181856109f4565b90508181036080830152610d358184610b21565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610d655760006000fd5b8060405250919050565b600067ffffffffffffffff821115610d875760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610db05760006000fd5b602082029050919050565b600067ffffffffffffffff821115610dd35760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610dfc5760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e255760006000fd5b602082029050919050565b600067ffffffffffffffff821115610e485760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e715760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e9a5760006000fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061ffff82169050919050565b6000819050919050565b61104381611022565b811415156110515760006000fd5b50565b61105d81611030565b8114151561106b5760006000fd5b50565bfea365627a7a72315820d78c6ba7ee332581e6c4d9daa5fc07941841230f7ce49edf6e05b1b63853e8746c6578706572696d656e74616cf564736f6c634300050c0040`}, 1227 []string{` 1228 [{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"indexed":false,"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"TupleEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"}],"indexed":false,"internalType":"struct Tuple.P[]","name":"","type":"tuple[]"}],"name":"TupleEvent2","type":"event"},{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func1","outputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"","type":"tuple[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"components":[{"internalType":"uint16","name":"x","type":"uint16"},{"internalType":"uint16","name":"y","type":"uint16"}],"internalType":"struct Tuple.Q[]","name":"","type":"tuple[]"}],"name":"func3","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}] 1229 `}, 1230 ` 1231 "math/big" 1232 "reflect" 1233 1234 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1235 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1236 "github.com/MetalBlockchain/subnet-evm/core" 1237 "github.com/ethereum/go-ethereum/crypto" 1238 `, 1239 1240 ` 1241 key, _ := crypto.GenerateKey() 1242 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1243 1244 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1245 defer sim.Close() 1246 1247 _, _, contract, err := DeployTuple(auth, sim) 1248 if err != nil { 1249 t.Fatalf("deploy contract failed %v", err) 1250 } 1251 sim.Commit(false) 1252 1253 check := func(a, b interface{}, errMsg string) { 1254 if !reflect.DeepEqual(a, b) { 1255 t.Fatal(errMsg) 1256 } 1257 } 1258 1259 a := TupleS{ 1260 A: big.NewInt(1), 1261 B: []*big.Int{big.NewInt(2), big.NewInt(3)}, 1262 C: []TupleT{ 1263 { 1264 X: big.NewInt(4), 1265 Y: big.NewInt(5), 1266 }, 1267 { 1268 X: big.NewInt(6), 1269 Y: big.NewInt(7), 1270 }, 1271 }, 1272 } 1273 1274 b := [][2]TupleT{ 1275 { 1276 { 1277 X: big.NewInt(8), 1278 Y: big.NewInt(9), 1279 }, 1280 { 1281 X: big.NewInt(10), 1282 Y: big.NewInt(11), 1283 }, 1284 }, 1285 } 1286 1287 c := [2][]TupleT{ 1288 { 1289 { 1290 X: big.NewInt(12), 1291 Y: big.NewInt(13), 1292 }, 1293 { 1294 X: big.NewInt(14), 1295 Y: big.NewInt(15), 1296 }, 1297 }, 1298 { 1299 { 1300 X: big.NewInt(16), 1301 Y: big.NewInt(17), 1302 }, 1303 }, 1304 } 1305 1306 d := []TupleS{a} 1307 1308 e := []*big.Int{big.NewInt(18), big.NewInt(19)} 1309 ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e) 1310 if err != nil { 1311 t.Fatalf("invoke contract failed, err %v", err) 1312 } 1313 check(ret1, a, "ret1 mismatch") 1314 check(ret2, b, "ret2 mismatch") 1315 check(ret3, c, "ret3 mismatch") 1316 check(ret4, d, "ret4 mismatch") 1317 check(ret5, e, "ret5 mismatch") 1318 1319 _, err = contract.Func2(auth, a, b, c, d, e) 1320 if err != nil { 1321 t.Fatalf("invoke contract failed, err %v", err) 1322 } 1323 sim.Commit(false) 1324 1325 iter, err := contract.FilterTupleEvent(nil) 1326 if err != nil { 1327 t.Fatalf("failed to create event filter, err %v", err) 1328 } 1329 defer iter.Close() 1330 1331 iter.Next() 1332 check(iter.Event.A, a, "field1 mismatch") 1333 check(iter.Event.B, b, "field2 mismatch") 1334 check(iter.Event.C, c, "field3 mismatch") 1335 check(iter.Event.D, d, "field4 mismatch") 1336 check(iter.Event.E, e, "field5 mismatch") 1337 1338 err = contract.Func3(nil, nil) 1339 if err != nil { 1340 t.Fatalf("failed to call function which has no return, err %v", err) 1341 } 1342 `, 1343 nil, 1344 nil, 1345 nil, 1346 nil, 1347 }, 1348 { 1349 `UseLibrary`, 1350 ` 1351 library Math { 1352 function add(uint a, uint b) public view returns(uint) { 1353 return a + b; 1354 } 1355 } 1356 1357 contract UseLibrary { 1358 function add (uint c, uint d) public view returns(uint) { 1359 return Math.add(c,d); 1360 } 1361 } 1362 `, 1363 []string{ 1364 // Bytecode for the UseLibrary contract 1365 `608060405234801561001057600080fd5b5061011d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063771602f714602d575b600080fd5b604d60048036036040811015604157600080fd5b5080359060200135605f565b60408051918252519081900360200190f35b600073__$b98c933f0a6ececcd167bd4f9d3299b1a0$__63771602f784846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801560b757600080fd5b505af415801560ca573d6000803e3d6000fd5b505050506040513d602081101560df57600080fd5b5051939250505056fea265627a7a72305820eb5c38f42445604cfa43d85e3aa5ecc48b0a646456c902dd48420ae7241d06f664736f6c63430005090032`, 1366 // Bytecode for the Math contract 1367 `60a3610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063771602f7146038575b600080fd5b605860048036036040811015604c57600080fd5b5080359060200135606a565b60408051918252519081900360200190f35b019056fea265627a7a723058206fc6c05f3078327f9c763edffdb5ab5f8bd212e293a1306c7d0ad05af3ad35f464736f6c63430005090032`, 1368 }, 1369 []string{ 1370 `[{"constant":true,"inputs":[{"name":"c","type":"uint256"},{"name":"d","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`, 1371 `[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`, 1372 }, 1373 ` 1374 "math/big" 1375 1376 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1377 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1378 "github.com/MetalBlockchain/subnet-evm/core" 1379 "github.com/ethereum/go-ethereum/crypto" 1380 `, 1381 ` 1382 // Generate a new random account and a funded simulator 1383 key, _ := crypto.GenerateKey() 1384 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1385 1386 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1387 defer sim.Close() 1388 1389 //deploy the test contract 1390 _, _, testContract, err := DeployUseLibrary(auth, sim) 1391 if err != nil { 1392 t.Fatalf("Failed to deploy test contract: %v", err) 1393 } 1394 1395 // Finish deploy. 1396 sim.Commit(false) 1397 1398 // Check that the library contract has been deployed 1399 // by calling the contract's add function. 1400 res, err := testContract.Add(&bind.CallOpts{ 1401 From: auth.From, 1402 Accepted: false, 1403 }, big.NewInt(1), big.NewInt(2)) 1404 if err != nil { 1405 t.Fatalf("Failed to call linked contract: %v", err) 1406 } 1407 if res.Cmp(big.NewInt(3)) != 0 { 1408 t.Fatalf("Add did not return the correct result: %d != %d", res, 3) 1409 } 1410 `, 1411 nil, 1412 map[string]string{ 1413 "b98c933f0a6ececcd167bd4f9d3299b1a0": "Math", 1414 }, 1415 nil, 1416 []string{"UseLibrary", "Math"}, 1417 }, { 1418 "Overload", 1419 ` 1420 pragma solidity ^0.5.10; 1421 1422 contract overload { 1423 mapping(address => uint256) balances; 1424 1425 event bar(uint256 i); 1426 event bar(uint256 i, uint256 j); 1427 1428 function foo(uint256 i) public { 1429 emit bar(i); 1430 } 1431 function foo(uint256 i, uint256 j) public { 1432 emit bar(i, j); 1433 } 1434 } 1435 `, 1436 []string{`608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806304bc52f81461003b5780632fbebd3814610073575b600080fd5b6100716004803603604081101561005157600080fd5b8101908080359060200190929190803590602001909291905050506100a1565b005b61009f6004803603602081101561008957600080fd5b81019080803590602001909291905050506100e4565b005b7fae42e9514233792a47a1e4554624e83fe852228e1503f63cd383e8a431f4f46d8282604051808381526020018281526020019250505060405180910390a15050565b7f0423a1321222a0a8716c22b92fac42d85a45a612b696a461784d9fa537c81e5c816040518082815260200191505060405180910390a15056fea265627a7a72305820e22b049858b33291cbe67eeaece0c5f64333e439d27032ea8337d08b1de18fe864736f6c634300050a0032`}, 1437 []string{`[{"constant":false,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]`}, 1438 ` 1439 "math/big" 1440 "time" 1441 1442 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1443 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1444 "github.com/MetalBlockchain/subnet-evm/core" 1445 "github.com/ethereum/go-ethereum/crypto" 1446 "github.com/MetalBlockchain/subnet-evm/params" 1447 `, 1448 ` 1449 // Initialize test accounts 1450 key, _ := crypto.GenerateKey() 1451 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1452 auth.GasFeeCap = params.TestMaxBaseFee 1453 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: new(big.Int).Mul(big.NewInt(10000000000000000), big.NewInt(1000))}}, 10000000) 1454 defer sim.Close() 1455 1456 // deploy the test contract 1457 _, _, contract, err := DeployOverload(auth, sim) 1458 if err != nil { 1459 t.Fatalf("Failed to deploy contract: %v", err) 1460 } 1461 1462 resCh, stopCh := make(chan uint64), make(chan struct{}) 1463 1464 go func() { 1465 barSink := make(chan *OverloadBar) 1466 sub, _ := contract.WatchBar(nil, barSink) 1467 defer sub.Unsubscribe() 1468 1469 bar0Sink := make(chan *OverloadBar0) 1470 sub0, _ := contract.WatchBar0(nil, bar0Sink) 1471 defer sub0.Unsubscribe() 1472 1473 for { 1474 select { 1475 case ev := <-barSink: 1476 resCh <- ev.I.Uint64() 1477 case ev := <-bar0Sink: 1478 resCh <- ev.I.Uint64() + ev.J.Uint64() 1479 case <-stopCh: 1480 return 1481 } 1482 } 1483 }() 1484 1485 time.Sleep(5 * time.Second) 1486 1487 // Finish deploy. 1488 sim.Commit(false) 1489 1490 contract.Foo(auth, big.NewInt(1), big.NewInt(2)) 1491 sim.Commit(false) 1492 1493 time.Sleep(5 * time.Second) 1494 1495 bar0Timer := time.NewTimer(60 * time.Second) 1496 time.Sleep(1 * time.Second) 1497 1498 select { 1499 case n := <-resCh: 1500 if n != 3 { 1501 t.Fatalf("Invalid bar0 event") 1502 } 1503 case <-bar0Timer.C: 1504 t.Fatalf("Wait bar0 event timeout") 1505 } 1506 1507 bar0Timer.Stop() 1508 1509 contract.Foo0(auth, big.NewInt(1)) 1510 sim.Commit(false) 1511 1512 time.Sleep(5 * time.Second) 1513 1514 barTimer := time.NewTimer(60 * time.Second) 1515 time.Sleep(1 * time.Second) 1516 1517 select { 1518 case n := <-resCh: 1519 if n != 1 { 1520 t.Fatalf("Invalid bar event") 1521 } 1522 case <-barTimer.C: 1523 t.Fatalf("Wait bar event timeout") 1524 } 1525 1526 barTimer.Stop() 1527 1528 close(stopCh) 1529 `, 1530 nil, 1531 nil, 1532 nil, 1533 nil, 1534 }, 1535 { 1536 "IdentifierCollision", 1537 ` 1538 pragma solidity >=0.4.19 <0.6.0; 1539 1540 contract IdentifierCollision { 1541 uint public _myVar; 1542 1543 function MyVar() public view returns (uint) { 1544 return _myVar; 1545 } 1546 } 1547 `, 1548 []string{"60806040523480156100115760006000fd5b50610017565b60c3806100256000396000f3fe608060405234801560105760006000fd5b506004361060365760003560e01c806301ad4d8714603c5780634ef1f0ad146058576036565b60006000fd5b60426074565b6040518082815260200191505060405180910390f35b605e607d565b6040518082815260200191505060405180910390f35b60006000505481565b60006000600050549050608b565b9056fea265627a7a7231582067c8d84688b01c4754ba40a2a871cede94ea1f28b5981593ab2a45b46ac43af664736f6c634300050c0032"}, 1549 []string{`[{"constant":true,"inputs":[],"name":"MyVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_myVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`}, 1550 ` 1551 "math/big" 1552 1553 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1554 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1555 "github.com/ethereum/go-ethereum/crypto" 1556 "github.com/MetalBlockchain/subnet-evm/core" 1557 `, 1558 ` 1559 // Initialize test accounts 1560 key, _ := crypto.GenerateKey() 1561 addr := crypto.PubkeyToAddress(key.PublicKey) 1562 1563 // Deploy registrar contract 1564 sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: new(big.Int).Mul(big.NewInt(10000000000000000), big.NewInt(1000))}}, 10000000) 1565 defer sim.Close() 1566 1567 transactOpts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1568 _, _, _, err := DeployIdentifierCollision(transactOpts, sim) 1569 if err != nil { 1570 t.Fatalf("failed to deploy contract: %v", err) 1571 } 1572 `, 1573 nil, 1574 nil, 1575 map[string]string{"_myVar": "pubVar"}, // alias MyVar to PubVar 1576 nil, 1577 }, 1578 { 1579 "MultiContracts", 1580 ` 1581 pragma solidity ^0.5.11; 1582 pragma experimental ABIEncoderV2; 1583 1584 library ExternalLib { 1585 struct SharedStruct{ 1586 uint256 f1; 1587 bytes32 f2; 1588 } 1589 } 1590 1591 contract ContractOne { 1592 function foo(ExternalLib.SharedStruct memory s) pure public { 1593 // Do stuff 1594 } 1595 } 1596 1597 contract ContractTwo { 1598 function bar(ExternalLib.SharedStruct memory s) pure public { 1599 // Do stuff 1600 } 1601 } 1602 `, 1603 []string{ 1604 `60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c80639d8a8ba81461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a72315820749274eb7f6c01010d5322af4e1668b0a154409eb7968bd6cae5524c7ed669bb6c6578706572696d656e74616cf564736f6c634300050c0040`, 1605 `60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c8063db8ba08c1461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a723158209bc28ee7ea97c131a13330d77ec73b4493b5c59c648352da81dd288b021192596c6578706572696d656e74616cf564736f6c634300050c0040`, 1606 `606c6026600b82828239805160001a6073141515601857fe5b30600052607381538281f350fe73000000000000000000000000000000000000000030146080604052600436106023575b60006000fdfea365627a7a72315820518f0110144f5b3de95697d05e456a064656890d08e6f9cff47f3be710cc46a36c6578706572696d656e74616cf564736f6c634300050c0040`, 1607 }, 1608 []string{ 1609 `[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`, 1610 `[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"bar","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`, 1611 `[]`, 1612 }, 1613 ` 1614 "math/big" 1615 1616 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1617 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1618 "github.com/ethereum/go-ethereum/crypto" 1619 "github.com/MetalBlockchain/subnet-evm/core" 1620 `, 1621 ` 1622 key, _ := crypto.GenerateKey() 1623 addr := crypto.PubkeyToAddress(key.PublicKey) 1624 1625 // Deploy registrar contract 1626 sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1627 defer sim.Close() 1628 1629 transactOpts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1630 _, _, c1, err := DeployContractOne(transactOpts, sim) 1631 if err != nil { 1632 t.Fatal("Failed to deploy contract") 1633 } 1634 sim.Commit(false) 1635 err = c1.Foo(nil, ExternalLibSharedStruct{ 1636 F1: big.NewInt(100), 1637 F2: [32]byte{0x01, 0x02, 0x03}, 1638 }) 1639 if err != nil { 1640 t.Fatal("Failed to invoke function") 1641 } 1642 _, _, c2, err := DeployContractTwo(transactOpts, sim) 1643 if err != nil { 1644 t.Fatal("Failed to deploy contract") 1645 } 1646 sim.Commit(false) 1647 err = c2.Bar(nil, ExternalLibSharedStruct{ 1648 F1: big.NewInt(100), 1649 F2: [32]byte{0x01, 0x02, 0x03}, 1650 }) 1651 if err != nil { 1652 t.Fatal("Failed to invoke function") 1653 } 1654 `, 1655 nil, 1656 nil, 1657 nil, 1658 []string{"ContractOne", "ContractTwo", "ExternalLib"}, 1659 }, 1660 // Test the existence of the free retrieval calls 1661 { 1662 `PureAndView`, 1663 `pragma solidity >=0.6.0; 1664 contract PureAndView { 1665 function PureFunc() public pure returns (uint) { 1666 return 42; 1667 } 1668 function ViewFunc() public view returns (uint) { 1669 return block.number; 1670 } 1671 } 1672 `, 1673 []string{`608060405234801561001057600080fd5b5060b68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806376b5686a146037578063bb38c66c146053575b600080fd5b603d606f565b6040518082815260200191505060405180910390f35b60596077565b6040518082815260200191505060405180910390f35b600043905090565b6000602a90509056fea2646970667358221220d158c2ab7fdfce366a7998ec79ab84edd43b9815630bbaede2c760ea77f29f7f64736f6c63430006000033`}, 1674 []string{`[{"inputs": [],"name": "PureFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "ViewFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"}]`}, 1675 ` 1676 "math/big" 1677 1678 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1679 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1680 "github.com/MetalBlockchain/subnet-evm/core" 1681 "github.com/ethereum/go-ethereum/crypto" 1682 `, 1683 ` 1684 // Generate a new random account and a funded simulator 1685 key, _ := crypto.GenerateKey() 1686 auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1687 1688 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1689 defer sim.Close() 1690 1691 // Deploy a tester contract and execute a structured call on it 1692 _, _, pav, err := DeployPureAndView(auth, sim) 1693 if err != nil { 1694 t.Fatalf("Failed to deploy PureAndView contract: %v", err) 1695 } 1696 sim.Commit(false) 1697 1698 // This test the existence of the free retreiver call for view and pure functions 1699 if num, err := pav.PureFunc(nil); err != nil { 1700 t.Fatalf("Failed to call anonymous field retriever: %v", err) 1701 } else if num.Cmp(big.NewInt(42)) != 0 { 1702 t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 42) 1703 } 1704 if num, err := pav.ViewFunc(nil); err != nil { 1705 t.Fatalf("Failed to call anonymous field retriever: %v", err) 1706 } else if num.Cmp(big.NewInt(1)) != 0 { 1707 t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 1) 1708 } 1709 `, 1710 nil, 1711 nil, 1712 nil, 1713 nil, 1714 }, 1715 // Test fallback separation introduced in v0.6.0 1716 { 1717 `NewFallbacks`, 1718 ` 1719 pragma solidity >=0.6.0 <0.7.0; 1720 1721 contract NewFallbacks { 1722 event Fallback(bytes data); 1723 fallback() external { 1724 emit Fallback(msg.data); 1725 } 1726 1727 event Received(address addr, uint value); 1728 receive() external payable { 1729 emit Received(msg.sender, msg.value); 1730 } 1731 } 1732 `, 1733 []string{"6080604052348015600f57600080fd5b506101078061001f6000396000f3fe608060405236605f577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1005b348015606a57600080fd5b507f9043988963722edecc2099c75b0af0ff76af14ffca42ed6bce059a20a2a9f98660003660405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a100fea26469706673582212201f994dcfbc53bf610b19176f9a361eafa77b447fd9c796fa2c615dfd0aaf3b8b64736f6c634300060c0033"}, 1734 []string{`[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Fallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]`}, 1735 ` 1736 "bytes" 1737 "math/big" 1738 1739 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1740 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1741 "github.com/MetalBlockchain/subnet-evm/core" 1742 "github.com/ethereum/go-ethereum/crypto" 1743 `, 1744 ` 1745 key, _ := crypto.GenerateKey() 1746 addr := crypto.PubkeyToAddress(key.PublicKey) 1747 1748 sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000000000000)}}, 1000000) 1749 defer sim.Close() 1750 1751 opts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1752 _, _, c, err := DeployNewFallbacks(opts, sim) 1753 if err != nil { 1754 t.Fatalf("Failed to deploy contract: %v", err) 1755 } 1756 sim.Commit(false) 1757 1758 // Test receive function 1759 opts.Value = big.NewInt(100) 1760 c.Receive(opts) 1761 sim.Commit(false) 1762 1763 var gotEvent bool 1764 iter, _ := c.FilterReceived(nil) 1765 defer iter.Close() 1766 for iter.Next() { 1767 if iter.Event.Addr != addr { 1768 t.Fatal("Msg.sender mismatch") 1769 } 1770 if iter.Event.Value.Uint64() != 100 { 1771 t.Fatal("Msg.value mismatch") 1772 } 1773 gotEvent = true 1774 break 1775 } 1776 if !gotEvent { 1777 t.Fatal("Expect to receive event emitted by receive") 1778 } 1779 1780 // Test fallback function 1781 gotEvent = false 1782 opts.Value = nil 1783 calldata := []byte{0x01, 0x02, 0x03} 1784 c.Fallback(opts, calldata) 1785 sim.Commit(false) 1786 1787 iter2, _ := c.FilterFallback(nil) 1788 defer iter2.Close() 1789 for iter2.Next() { 1790 if !bytes.Equal(iter2.Event.Data, calldata) { 1791 t.Fatal("calldata mismatch") 1792 } 1793 gotEvent = true 1794 break 1795 } 1796 if !gotEvent { 1797 t.Fatal("Expect to receive event emitted by fallback") 1798 } 1799 `, 1800 nil, 1801 nil, 1802 nil, 1803 nil, 1804 }, 1805 // Test resolving single struct argument 1806 { 1807 `NewSingleStructArgument`, 1808 ` 1809 pragma solidity ^0.8.0; 1810 1811 contract NewSingleStructArgument { 1812 struct MyStruct{ 1813 uint256 a; 1814 uint256 b; 1815 } 1816 event StructEvent(MyStruct s); 1817 function TestEvent() public { 1818 emit StructEvent(MyStruct({a: 1, b: 2})); 1819 } 1820 } 1821 `, 1822 []string{"608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806324ec1d3f14602d575b600080fd5b60336035565b005b7fb4b2ff75e30cb4317eaae16dd8a187dd89978df17565104caa6c2797caae27d460405180604001604052806001815260200160028152506040516078919060ba565b60405180910390a1565b6040820160008201516096600085018260ad565b50602082015160a7602085018260ad565b50505050565b60b48160d3565b82525050565b600060408201905060cd60008301846082565b92915050565b600081905091905056fea26469706673582212208823628796125bf9941ce4eda18da1be3cf2931b231708ab848e1bd7151c0c9a64736f6c63430008070033"}, 1823 []string{`[{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"indexed":false,"internalType":"struct Test.MyStruct","name":"s","type":"tuple"}],"name":"StructEvent","type":"event"},{"inputs":[],"name":"TestEvent","outputs":[],"stateMutability":"nonpayable","type":"function"}]`}, 1824 ` 1825 "math/big" 1826 1827 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1828 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1829 "github.com/MetalBlockchain/subnet-evm/core" 1830 "github.com/ethereum/go-ethereum/crypto" 1831 `, 1832 ` 1833 var ( 1834 key, _ = crypto.GenerateKey() 1835 user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1836 sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1837 ) 1838 defer sim.Close() 1839 1840 _, _, d, err := DeployNewSingleStructArgument(user, sim) 1841 if err != nil { 1842 t.Fatalf("Failed to deploy contract %v", err) 1843 } 1844 sim.Commit(false) 1845 1846 _, err = d.TestEvent(user) 1847 if err != nil { 1848 t.Fatalf("Failed to call contract %v", err) 1849 } 1850 sim.Commit(false) 1851 1852 it, err := d.FilterStructEvent(nil) 1853 if err != nil { 1854 t.Fatalf("Failed to filter contract event %v", err) 1855 } 1856 var count int 1857 for it.Next() { 1858 if it.Event.S.A.Cmp(big.NewInt(1)) != 0 { 1859 t.Fatal("Unexpected contract event") 1860 } 1861 if it.Event.S.B.Cmp(big.NewInt(2)) != 0 { 1862 t.Fatal("Unexpected contract event") 1863 } 1864 count += 1 1865 } 1866 if count != 1 { 1867 t.Fatal("Unexpected contract event number") 1868 } 1869 `, 1870 nil, 1871 nil, 1872 nil, 1873 nil, 1874 }, 1875 // Test errors introduced in v0.8.4 1876 { 1877 `NewErrors`, 1878 ` 1879 pragma solidity >0.8.4; 1880 1881 contract NewErrors { 1882 error MyError(uint256); 1883 error MyError1(uint256); 1884 error MyError2(uint256, uint256); 1885 error MyError3(uint256 a, uint256 b, uint256 c); 1886 function Error() public pure { 1887 revert MyError3(1,2,3); 1888 } 1889 } 1890 `, 1891 []string{"0x6080604052348015600f57600080fd5b5060998061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063726c638214602d575b600080fd5b60336035565b005b60405163024876cd60e61b815260016004820152600260248201526003604482015260640160405180910390fdfea264697066735822122093f786a1bc60216540cd999fbb4a6109e0fef20abcff6e9107fb2817ca968f3c64736f6c63430008070033"}, 1892 []string{`[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MyError","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MyError1","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"MyError2","type":"error"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"},{"internalType":"uint256","name":"c","type":"uint256"}],"name":"MyError3","type":"error"},{"inputs":[],"name":"Error","outputs":[],"stateMutability":"pure","type":"function"}]`}, 1893 ` 1894 "math/big" 1895 1896 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1897 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1898 "github.com/MetalBlockchain/subnet-evm/core" 1899 "github.com/ethereum/go-ethereum/crypto" 1900 `, 1901 ` 1902 var ( 1903 key, _ = crypto.GenerateKey() 1904 user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1905 sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1906 ) 1907 defer sim.Close() 1908 1909 _, tx, contract, err := DeployNewErrors(user, sim) 1910 if err != nil { 1911 t.Fatal(err) 1912 } 1913 sim.Commit(true) 1914 _, err = bind.WaitDeployed(nil, sim, tx) 1915 if err != nil { 1916 t.Error(err) 1917 } 1918 if err := contract.Error(new(bind.CallOpts)); err == nil { 1919 t.Fatalf("expected contract to throw error") 1920 } 1921 // TODO (MariusVanDerWijden unpack error using abigen 1922 // once that is implemented 1923 `, 1924 nil, 1925 nil, 1926 nil, 1927 nil, 1928 }, 1929 { 1930 name: `ConstructorWithStructParam`, 1931 contract: ` 1932 pragma solidity >=0.8.0 <0.9.0; 1933 1934 contract ConstructorWithStructParam { 1935 struct StructType { 1936 uint256 field; 1937 } 1938 1939 constructor(StructType memory st) {} 1940 } 1941 `, 1942 bytecode: []string{`0x608060405234801561001057600080fd5b506040516101c43803806101c48339818101604052810190610032919061014a565b50610177565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100958261004c565b810181811067ffffffffffffffff821117156100b4576100b361005d565b5b80604052505050565b60006100c7610038565b90506100d3828261008c565b919050565b6000819050919050565b6100eb816100d8565b81146100f657600080fd5b50565b600081519050610108816100e2565b92915050565b60006020828403121561012457610123610047565b5b61012e60206100bd565b9050600061013e848285016100f9565b60008301525092915050565b6000602082840312156101605761015f610042565b5b600061016e8482850161010e565b91505092915050565b603f806101856000396000f3fe6080604052600080fdfea2646970667358221220cdffa667affecefac5561f65f4a4ba914204a8d4eb859d8cd426fb306e5c12a364736f6c634300080a0033`}, 1943 abi: []string{`[{"inputs":[{"components":[{"internalType":"uint256","name":"field","type":"uint256"}],"internalType":"struct ConstructorWithStructParam.StructType","name":"st","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"}]`}, 1944 imports: ` 1945 "math/big" 1946 1947 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1948 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1949 "github.com/MetalBlockchain/subnet-evm/core" 1950 "github.com/ethereum/go-ethereum/crypto" 1951 `, 1952 tester: ` 1953 var ( 1954 key, _ = crypto.GenerateKey() 1955 user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1956 sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, 10000000) 1957 ) 1958 defer sim.Close() 1959 1960 _, tx, _, err := DeployConstructorWithStructParam(user, sim, ConstructorWithStructParamStructType{Field: big.NewInt(42)}) 1961 if err != nil { 1962 t.Fatalf("DeployConstructorWithStructParam() got err %v; want nil err", err) 1963 } 1964 sim.Commit(true) 1965 1966 if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { 1967 t.Logf("Deployment tx: %+v", tx) 1968 t.Errorf("bind.WaitDeployed(nil, %T, <deployment tx>) got err %v; want nil err", sim, err) 1969 } 1970 `, 1971 }, 1972 { 1973 name: `NameConflict`, 1974 contract: ` 1975 // SPDX-License-Identifier: GPL-3.0 1976 pragma solidity >=0.4.22 <0.9.0; 1977 contract oracle { 1978 struct request { 1979 bytes data; 1980 bytes _data; 1981 } 1982 event log (int msg, int _msg); 1983 function addRequest(request memory req) public pure {} 1984 function getRequest() pure public returns (request memory) { 1985 return request("", ""); 1986 } 1987 } 1988 `, 1989 bytecode: []string{"0x608060405234801561001057600080fd5b5061042b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063c2bb515f1461003b578063cce7b04814610059575b600080fd5b610043610075565b60405161005091906101af565b60405180910390f35b610073600480360381019061006e91906103ac565b6100b5565b005b61007d6100b8565b604051806040016040528060405180602001604052806000815250815260200160405180602001604052806000815250815250905090565b50565b604051806040016040528060608152602001606081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561010c5780820151818401526020810190506100f1565b8381111561011b576000848401525b50505050565b6000601f19601f8301169050919050565b600061013d826100d2565b61014781856100dd565b93506101578185602086016100ee565b61016081610121565b840191505092915050565b600060408301600083015184820360008601526101888282610132565b915050602083015184820360208601526101a28282610132565b9150508091505092915050565b600060208201905081810360008301526101c9818461016b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61022282610121565b810181811067ffffffffffffffff82111715610241576102406101ea565b5b80604052505050565b60006102546101d1565b90506102608282610219565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff82111561028f5761028e6101ea565b5b61029882610121565b9050602081019050919050565b82818337600083830152505050565b60006102c76102c284610274565b61024a565b9050828152602081018484840111156102e3576102e261026f565b5b6102ee8482856102a5565b509392505050565b600082601f83011261030b5761030a61026a565b5b813561031b8482602086016102b4565b91505092915050565b60006040828403121561033a576103396101e5565b5b610344604061024a565b9050600082013567ffffffffffffffff81111561036457610363610265565b5b610370848285016102f6565b600083015250602082013567ffffffffffffffff81111561039457610393610265565b5b6103a0848285016102f6565b60208301525092915050565b6000602082840312156103c2576103c16101db565b5b600082013567ffffffffffffffff8111156103e0576103df6101e0565b5b6103ec84828501610324565b9150509291505056fea264697066735822122033bca1606af9b6aeba1673f98c52003cec19338539fb44b86690ce82c51483b564736f6c634300080e0033"}, 1990 abi: []string{`[ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int256", "name": "msg", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "_msg", "type": "int256" } ], "name": "log", "type": "event" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "internalType": "struct oracle.request", "name": "req", "type": "tuple" } ], "name": "addRequest", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getRequest", "outputs": [ { "components": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "internalType": "struct oracle.request", "name": "", "type": "tuple" } ], "stateMutability": "pure", "type": "function" } ]`}, 1991 imports: ` 1992 "math/big" 1993 1994 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 1995 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 1996 "github.com/MetalBlockchain/subnet-evm/core" 1997 "github.com/ethereum/go-ethereum/crypto" 1998 `, 1999 tester: ` 2000 var ( 2001 gasCeil = uint64(30000000) // Note: from geth's ethconfig.Defaults.Miner.GasCeil 2002 key, _ = crypto.GenerateKey() 2003 user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 2004 sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, gasCeil) 2005 ) 2006 defer sim.Close() 2007 2008 _, tx, _, err := DeployNameConflict(user, sim) 2009 if err != nil { 2010 t.Fatalf("DeployNameConflict() got err %v; want nil err", err) 2011 } 2012 sim.Commit(true) 2013 2014 if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { 2015 t.Logf("Deployment tx: %+v", tx) 2016 t.Errorf("bind.WaitDeployed(nil, %T, <deployment tx>) got err %v; want nil err", sim, err) 2017 } 2018 `, 2019 }, 2020 { 2021 name: "RangeKeyword", 2022 contract: ` 2023 // SPDX-License-Identifier: GPL-3.0 2024 pragma solidity >=0.4.22 <0.9.0; 2025 contract keywordcontract { 2026 function functionWithKeywordParameter(range uint256) public pure {} 2027 } 2028 `, 2029 bytecode: []string{"0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063527a119f14602d575b600080fd5b60436004803603810190603f9190605b565b6045565b005b50565b6000813590506055816092565b92915050565b600060208284031215606e57606d608d565b5b6000607a848285016048565b91505092915050565b6000819050919050565b600080fd5b6099816083565b811460a357600080fd5b5056fea2646970667358221220d4f4525e2615516394055d369fb17df41c359e5e962734f27fd683ea81fd9db164736f6c63430008070033"}, 2030 abi: []string{`[{"inputs":[{"internalType":"uint256","name":"range","type":"uint256"}],"name":"functionWithKeywordParameter","outputs":[],"stateMutability":"pure","type":"function"}]`}, 2031 imports: ` 2032 "math/big" 2033 2034 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind" 2035 "github.com/MetalBlockchain/subnet-evm/accounts/abi/bind/backends" 2036 "github.com/MetalBlockchain/subnet-evm/core" 2037 "github.com/ethereum/go-ethereum/crypto" 2038 `, 2039 tester: ` 2040 var ( 2041 gasCeil = uint64(30000000) // Note: from geth's ethconfig.Defaults.Miner.GasCeil 2042 key, _ = crypto.GenerateKey() 2043 user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 2044 sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, gasCeil) 2045 ) 2046 _, tx, _, err := DeployRangeKeyword(user, sim) 2047 if err != nil { 2048 t.Fatalf("error deploying contract: %v", err) 2049 } 2050 sim.Commit(true) 2051 2052 if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { 2053 t.Errorf("error deploying the contract: %v", err) 2054 } 2055 `, 2056 }, 2057 } 2058 2059 // The binding tests have been modified to run in two separate test 2060 // functions to allow these tests to pass on GitHub Actions. 2061 func TestGolangBindingsOverload(t *testing.T) { 2062 golangBindings(t, true) 2063 } 2064 2065 func TestGolangBindings(t *testing.T) { 2066 golangBindings(t, false) 2067 } 2068 2069 // Tests that packages generated by the binder can be successfully compiled and 2070 // the requested tester run against it. 2071 func golangBindings(t *testing.T, overload bool) { 2072 // Skip the test if no Go command can be found 2073 gocmd := runtime.GOROOT() + "/bin/go" 2074 if !common.FileExist(gocmd) { 2075 t.Skip("go sdk not found for testing") 2076 } 2077 // Create a temporary workspace for the test suite 2078 ws := t.TempDir() 2079 2080 pkg := filepath.Join(ws, "bindtest") 2081 if err := os.MkdirAll(pkg, 0700); err != nil { 2082 t.Fatalf("failed to create package: %v", err) 2083 } 2084 // Generate the test suite for all the contracts 2085 for i, tt := range bindTests { 2086 t.Run(tt.name, func(t *testing.T) { 2087 // Skip the "Overload" test if [!overload] 2088 if !overload && tt.name == "Overload" { 2089 return 2090 } 2091 // Skip all tests except for "Overload" if [overload] 2092 if overload && tt.name != "Overload" { 2093 return 2094 } 2095 var types []string 2096 if tt.types != nil { 2097 types = tt.types 2098 } else { 2099 types = []string{tt.name} 2100 } 2101 // Generate the binding and create a Go source file in the workspace 2102 bind, err := Bind(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs, tt.aliases, false) 2103 if err != nil { 2104 t.Fatalf("test %d: failed to generate binding: %v", i, err) 2105 } 2106 if err = os.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil { 2107 t.Fatalf("test %d: failed to write binding: %v", i, err) 2108 } 2109 // Generate the test file with the injected test code 2110 code := fmt.Sprintf(` 2111 package bindtest 2112 2113 import ( 2114 "testing" 2115 %s 2116 ) 2117 2118 func Test%s(t *testing.T) { 2119 %s 2120 } 2121 `, tt.imports, tt.name, tt.tester) 2122 if err := os.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil { 2123 t.Fatalf("test %d: failed to write tests: %v", i, err) 2124 } 2125 }) 2126 } 2127 // Convert the package to go modules and use the current source for go-ethereum 2128 moder := exec.Command(gocmd, "mod", "init", "bindtest") 2129 moder.Dir = pkg 2130 if out, err := moder.CombinedOutput(); err != nil { 2131 t.Fatalf("failed to convert binding test to modules: %v\n%s", err, out) 2132 } 2133 pwd, _ := os.Getwd() 2134 replacer := exec.Command(gocmd, "mod", "edit", "-x", "-require", "github.com/MetalBlockchain/subnet-evm@v0.0.0", "-replace", "github.com/MetalBlockchain/subnet-evm="+filepath.Join(pwd, "..", "..", "..")) // Repo root 2135 replacer.Dir = pkg 2136 if out, err := replacer.CombinedOutput(); err != nil { 2137 t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out) 2138 } 2139 tidier := exec.Command(gocmd, "mod", "tidy", "-compat=1.18") 2140 tidier.Dir = pkg 2141 if out, err := tidier.CombinedOutput(); err != nil { 2142 t.Fatalf("failed to tidy Go module file: %v\n%s", err, out) 2143 } 2144 // Test the entire package and report any failures 2145 cmd := exec.Command(gocmd, "test", "-v", "-count", "1") 2146 cmd.Dir = pkg 2147 if out, err := cmd.CombinedOutput(); err != nil { 2148 t.Fatalf("failed to run binding test: %v\n%s", err, out) 2149 } 2150 } 2151 2152 // Tests that java binding generated by the binder is exactly matched. 2153 func TestJavaBindings(t *testing.T) { 2154 var cases = []struct { 2155 name string 2156 contract string 2157 abi string 2158 bytecode string 2159 expected string 2160 }{ 2161 { 2162 "test", 2163 ` 2164 pragma experimental ABIEncoderV2; 2165 pragma solidity ^0.5.2; 2166 2167 contract test { 2168 function setAddress(address a) public returns(address){} 2169 function setAddressList(address[] memory a_l) public returns(address[] memory){} 2170 function setAddressArray(address[2] memory a_a) public returns(address[2] memory){} 2171 2172 function setUint8(uint8 u8) public returns(uint8){} 2173 function setUint16(uint16 u16) public returns(uint16){} 2174 function setUint32(uint32 u32) public returns(uint32){} 2175 function setUint64(uint64 u64) public returns(uint64){} 2176 function setUint256(uint256 u256) public returns(uint256){} 2177 function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){} 2178 function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){} 2179 2180 function setInt8(int8 i8) public returns(int8){} 2181 function setInt16(int16 i16) public returns(int16){} 2182 function setInt32(int32 i32) public returns(int32){} 2183 function setInt64(int64 i64) public returns(int64){} 2184 function setInt256(int256 i256) public returns(int256){} 2185 function setInt256List(int256[] memory i256_l) public returns(int256[] memory){} 2186 function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){} 2187 2188 function setBytes1(bytes1 b1) public returns(bytes1) {} 2189 function setBytes32(bytes32 b32) public returns(bytes32) {} 2190 function setBytes(bytes memory bs) public returns(bytes memory) {} 2191 function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {} 2192 function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {} 2193 2194 function setString(string memory s) public returns(string memory) {} 2195 function setStringList(string[] memory s_l) public returns(string[] memory) {} 2196 function setStringArray(string[2] memory s_a) public returns(string[2] memory) {} 2197 2198 function setBool(bool b) public returns(bool) {} 2199 function setBoolList(bool[] memory b_l) public returns(bool[] memory) {} 2200 function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {} 2201 }`, 2202 `[{"constant":false,"inputs":[{"name":"u16","type":"uint16"}],"name":"setUint16","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_a","type":"bool[2]"}],"name":"setBoolArray","outputs":[{"name":"","type":"bool[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_a","type":"address[2]"}],"name":"setAddressArray","outputs":[{"name":"","type":"address[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_l","type":"bytes[]"}],"name":"setBytesList","outputs":[{"name":"","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u8","type":"uint8"}],"name":"setUint8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u32","type":"uint32"}],"name":"setUint32","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b","type":"bool"}],"name":"setBool","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_l","type":"int256[]"}],"name":"setInt256List","outputs":[{"name":"","type":"int256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_a","type":"uint256[2]"}],"name":"setUint256Array","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_l","type":"bool[]"}],"name":"setBoolList","outputs":[{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_a","type":"bytes[2]"}],"name":"setBytesArray","outputs":[{"name":"","type":"bytes[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_l","type":"address[]"}],"name":"setAddressList","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_a","type":"int256[2]"}],"name":"setInt256Array","outputs":[{"name":"","type":"int256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_a","type":"string[2]"}],"name":"setStringArray","outputs":[{"name":"","type":"string[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s","type":"string"}],"name":"setString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u64","type":"uint64"}],"name":"setUint64","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i16","type":"int16"}],"name":"setInt16","outputs":[{"name":"","type":"int16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i8","type":"int8"}],"name":"setInt8","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_l","type":"uint256[]"}],"name":"setUint256List","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256","type":"int256"}],"name":"setInt256","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i32","type":"int32"}],"name":"setInt32","outputs":[{"name":"","type":"int32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b32","type":"bytes32"}],"name":"setBytes32","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_l","type":"string[]"}],"name":"setStringList","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256","type":"uint256"}],"name":"setUint256","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs","type":"bytes"}],"name":"setBytes","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"}],"name":"setAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i64","type":"int64"}],"name":"setInt64","outputs":[{"name":"","type":"int64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b1","type":"bytes1"}],"name":"setBytes1","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]`, 2203 `608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`, 2204 ` 2205 // This file is an automatically generated Java binding. Do not modify as any 2206 // change will likely be lost upon the next re-generation! 2207 2208 package bindtest; 2209 2210 import org.ethereum.geth.*; 2211 import java.util.*; 2212 2213 public class Test { 2214 // ABI is the input ABI used to generate the binding from. 2215 public final static String ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"u16\",\"type\":\"uint16\"}],\"name\":\"setUint16\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_a\",\"type\":\"bool[2]\"}],\"name\":\"setBoolArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_a\",\"type\":\"address[2]\"}],\"name\":\"setAddressArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_l\",\"type\":\"bytes[]\"}],\"name\":\"setBytesList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u8\",\"type\":\"uint8\"}],\"name\":\"setUint8\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u32\",\"type\":\"uint32\"}],\"name\":\"setUint32\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b\",\"type\":\"bool\"}],\"name\":\"setBool\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_l\",\"type\":\"int256[]\"}],\"name\":\"setInt256List\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_a\",\"type\":\"uint256[2]\"}],\"name\":\"setUint256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_l\",\"type\":\"bool[]\"}],\"name\":\"setBoolList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_a\",\"type\":\"bytes[2]\"}],\"name\":\"setBytesArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_l\",\"type\":\"address[]\"}],\"name\":\"setAddressList\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_a\",\"type\":\"int256[2]\"}],\"name\":\"setInt256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_a\",\"type\":\"string[2]\"}],\"name\":\"setStringArray\",\"outputs\":[{\"name\":\"\",\"type\":\"string[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s\",\"type\":\"string\"}],\"name\":\"setString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u64\",\"type\":\"uint64\"}],\"name\":\"setUint64\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i16\",\"type\":\"int16\"}],\"name\":\"setInt16\",\"outputs\":[{\"name\":\"\",\"type\":\"int16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i8\",\"type\":\"int8\"}],\"name\":\"setInt8\",\"outputs\":[{\"name\":\"\",\"type\":\"int8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_l\",\"type\":\"uint256[]\"}],\"name\":\"setUint256List\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256\",\"type\":\"int256\"}],\"name\":\"setInt256\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i32\",\"type\":\"int32\"}],\"name\":\"setInt32\",\"outputs\":[{\"name\":\"\",\"type\":\"int32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b32\",\"type\":\"bytes32\"}],\"name\":\"setBytes32\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_l\",\"type\":\"string[]\"}],\"name\":\"setStringList\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256\",\"type\":\"uint256\"}],\"name\":\"setUint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs\",\"type\":\"bytes\"}],\"name\":\"setBytes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i64\",\"type\":\"int64\"}],\"name\":\"setInt64\",\"outputs\":[{\"name\":\"\",\"type\":\"int64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b1\",\"type\":\"bytes1\"}],\"name\":\"setBytes1\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes1\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"; 2216 2217 // BYTECODE is the compiled bytecode used for deploying new contracts. 2218 public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037"; 2219 2220 // deploy deploys a new Ethereum contract, binding an instance of Test to it. 2221 public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception { 2222 Interfaces args = Geth.newInterfaces(0); 2223 String bytecode = BYTECODE; 2224 return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args)); 2225 } 2226 2227 // Internal constructor used by contract deployment. 2228 private Test(BoundContract deployment) { 2229 this.Address = deployment.getAddress(); 2230 this.Deployer = deployment.getDeployer(); 2231 this.Contract = deployment; 2232 } 2233 2234 // Ethereum address where this contract is located at. 2235 public final Address Address; 2236 2237 // Ethereum transaction in which this contract was deployed (if known!). 2238 public final Transaction Deployer; 2239 2240 // Contract instance bound to a blockchain address. 2241 private final BoundContract Contract; 2242 2243 // Creates a new instance of Test, bound to a specific deployed contract. 2244 public Test(Address address, EthereumClient client) throws Exception { 2245 this(Geth.bindContract(address, ABI, client)); 2246 } 2247 2248 // setAddress is a paid mutator transaction binding the contract method 0xe30081a0. 2249 // 2250 // Solidity: function setAddress(address a) returns(address) 2251 public Transaction setAddress(TransactOpts opts, Address a) throws Exception { 2252 Interfaces args = Geth.newInterfaces(1); 2253 Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0); 2254 2255 return this.Contract.transact(opts, "setAddress" , args); 2256 } 2257 2258 // setAddressArray is a paid mutator transaction binding the contract method 0x151f5471. 2259 // 2260 // Solidity: function setAddressArray(address[2] a_a) returns(address[2]) 2261 public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception { 2262 Interfaces args = Geth.newInterfaces(1); 2263 Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0); 2264 2265 return this.Contract.transact(opts, "setAddressArray" , args); 2266 } 2267 2268 // setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e. 2269 // 2270 // Solidity: function setAddressList(address[] a_l) returns(address[]) 2271 public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception { 2272 Interfaces args = Geth.newInterfaces(1); 2273 Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0); 2274 2275 return this.Contract.transact(opts, "setAddressList" , args); 2276 } 2277 2278 // setBool is a paid mutator transaction binding the contract method 0x1e26fd33. 2279 // 2280 // Solidity: function setBool(bool b) returns(bool) 2281 public Transaction setBool(TransactOpts opts, boolean b) throws Exception { 2282 Interfaces args = Geth.newInterfaces(1); 2283 Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0); 2284 2285 return this.Contract.transact(opts, "setBool" , args); 2286 } 2287 2288 // setBoolArray is a paid mutator transaction binding the contract method 0x118a9718. 2289 // 2290 // Solidity: function setBoolArray(bool[2] b_a) returns(bool[2]) 2291 public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception { 2292 Interfaces args = Geth.newInterfaces(1); 2293 Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0); 2294 2295 return this.Contract.transact(opts, "setBoolArray" , args); 2296 } 2297 2298 // setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da. 2299 // 2300 // Solidity: function setBoolList(bool[] b_l) returns(bool[]) 2301 public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception { 2302 Interfaces args = Geth.newInterfaces(1); 2303 Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0); 2304 2305 return this.Contract.transact(opts, "setBoolList" , args); 2306 } 2307 2308 // setBytes is a paid mutator transaction binding the contract method 0xda359dc8. 2309 // 2310 // Solidity: function setBytes(bytes bs) returns(bytes) 2311 public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception { 2312 Interfaces args = Geth.newInterfaces(1); 2313 Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0); 2314 2315 return this.Contract.transact(opts, "setBytes" , args); 2316 } 2317 2318 // setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3. 2319 // 2320 // Solidity: function setBytes1(bytes1 b1) returns(bytes1) 2321 public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception { 2322 Interfaces args = Geth.newInterfaces(1); 2323 Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0); 2324 2325 return this.Contract.transact(opts, "setBytes1" , args); 2326 } 2327 2328 // setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73. 2329 // 2330 // Solidity: function setBytes32(bytes32 b32) returns(bytes32) 2331 public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception { 2332 Interfaces args = Geth.newInterfaces(1); 2333 Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0); 2334 2335 return this.Contract.transact(opts, "setBytes32" , args); 2336 } 2337 2338 // setBytesArray is a paid mutator transaction binding the contract method 0x5119655d. 2339 // 2340 // Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2]) 2341 public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception { 2342 Interfaces args = Geth.newInterfaces(1); 2343 Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0); 2344 2345 return this.Contract.transact(opts, "setBytesArray" , args); 2346 } 2347 2348 // setBytesList is a paid mutator transaction binding the contract method 0x16c105e2. 2349 // 2350 // Solidity: function setBytesList(bytes[] bs_l) returns(bytes[]) 2351 public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception { 2352 Interfaces args = Geth.newInterfaces(1); 2353 Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0); 2354 2355 return this.Contract.transact(opts, "setBytesList" , args); 2356 } 2357 2358 // setInt16 is a paid mutator transaction binding the contract method 0x86114cea. 2359 // 2360 // Solidity: function setInt16(int16 i16) returns(int16) 2361 public Transaction setInt16(TransactOpts opts, short i16) throws Exception { 2362 Interfaces args = Geth.newInterfaces(1); 2363 Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0); 2364 2365 return this.Contract.transact(opts, "setInt16" , args); 2366 } 2367 2368 // setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e. 2369 // 2370 // Solidity: function setInt256(int256 i256) returns(int256) 2371 public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception { 2372 Interfaces args = Geth.newInterfaces(1); 2373 Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0); 2374 2375 return this.Contract.transact(opts, "setInt256" , args); 2376 } 2377 2378 // setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc. 2379 // 2380 // Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2]) 2381 public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception { 2382 Interfaces args = Geth.newInterfaces(1); 2383 Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0); 2384 2385 return this.Contract.transact(opts, "setInt256Array" , args); 2386 } 2387 2388 // setInt256List is a paid mutator transaction binding the contract method 0x22722302. 2389 // 2390 // Solidity: function setInt256List(int256[] i256_l) returns(int256[]) 2391 public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception { 2392 Interfaces args = Geth.newInterfaces(1); 2393 Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0); 2394 2395 return this.Contract.transact(opts, "setInt256List" , args); 2396 } 2397 2398 // setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31. 2399 // 2400 // Solidity: function setInt32(int32 i32) returns(int32) 2401 public Transaction setInt32(TransactOpts opts, int i32) throws Exception { 2402 Interfaces args = Geth.newInterfaces(1); 2403 Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0); 2404 2405 return this.Contract.transact(opts, "setInt32" , args); 2406 } 2407 2408 // setInt64 is a paid mutator transaction binding the contract method 0xe673eb32. 2409 // 2410 // Solidity: function setInt64(int64 i64) returns(int64) 2411 public Transaction setInt64(TransactOpts opts, long i64) throws Exception { 2412 Interfaces args = Geth.newInterfaces(1); 2413 Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0); 2414 2415 return this.Contract.transact(opts, "setInt64" , args); 2416 } 2417 2418 // setInt8 is a paid mutator transaction binding the contract method 0x9a19a953. 2419 // 2420 // Solidity: function setInt8(int8 i8) returns(int8) 2421 public Transaction setInt8(TransactOpts opts, byte i8) throws Exception { 2422 Interfaces args = Geth.newInterfaces(1); 2423 Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0); 2424 2425 return this.Contract.transact(opts, "setInt8" , args); 2426 } 2427 2428 // setString is a paid mutator transaction binding the contract method 0x7fcaf666. 2429 // 2430 // Solidity: function setString(string s) returns(string) 2431 public Transaction setString(TransactOpts opts, String s) throws Exception { 2432 Interfaces args = Geth.newInterfaces(1); 2433 Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0); 2434 2435 return this.Contract.transact(opts, "setString" , args); 2436 } 2437 2438 // setStringArray is a paid mutator transaction binding the contract method 0x7173b695. 2439 // 2440 // Solidity: function setStringArray(string[2] s_a) returns(string[2]) 2441 public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception { 2442 Interfaces args = Geth.newInterfaces(1); 2443 Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0); 2444 2445 return this.Contract.transact(opts, "setStringArray" , args); 2446 } 2447 2448 // setStringList is a paid mutator transaction binding the contract method 0xc5777961. 2449 // 2450 // Solidity: function setStringList(string[] s_l) returns(string[]) 2451 public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception { 2452 Interfaces args = Geth.newInterfaces(1); 2453 Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0); 2454 2455 return this.Contract.transact(opts, "setStringList" , args); 2456 } 2457 2458 // setUint16 is a paid mutator transaction binding the contract method 0x0477988a. 2459 // 2460 // Solidity: function setUint16(uint16 u16) returns(uint16) 2461 public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception { 2462 Interfaces args = Geth.newInterfaces(1); 2463 Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0); 2464 2465 return this.Contract.transact(opts, "setUint16" , args); 2466 } 2467 2468 // setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5. 2469 // 2470 // Solidity: function setUint256(uint256 u256) returns(uint256) 2471 public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception { 2472 Interfaces args = Geth.newInterfaces(1); 2473 Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0); 2474 2475 return this.Contract.transact(opts, "setUint256" , args); 2476 } 2477 2478 // setUint256Array is a paid mutator transaction binding the contract method 0x2766a755. 2479 // 2480 // Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2]) 2481 public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception { 2482 Interfaces args = Geth.newInterfaces(1); 2483 Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0); 2484 2485 return this.Contract.transact(opts, "setUint256Array" , args); 2486 } 2487 2488 // setUint256List is a paid mutator transaction binding the contract method 0xa0709e19. 2489 // 2490 // Solidity: function setUint256List(uint256[] u256_l) returns(uint256[]) 2491 public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception { 2492 Interfaces args = Geth.newInterfaces(1); 2493 Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0); 2494 2495 return this.Contract.transact(opts, "setUint256List" , args); 2496 } 2497 2498 // setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2. 2499 // 2500 // Solidity: function setUint32(uint32 u32) returns(uint32) 2501 public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception { 2502 Interfaces args = Geth.newInterfaces(1); 2503 Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0); 2504 2505 return this.Contract.transact(opts, "setUint32" , args); 2506 } 2507 2508 // setUint64 is a paid mutator transaction binding the contract method 0x822cba69. 2509 // 2510 // Solidity: function setUint64(uint64 u64) returns(uint64) 2511 public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception { 2512 Interfaces args = Geth.newInterfaces(1); 2513 Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0); 2514 2515 return this.Contract.transact(opts, "setUint64" , args); 2516 } 2517 2518 // setUint8 is a paid mutator transaction binding the contract method 0x1774e646. 2519 // 2520 // Solidity: function setUint8(uint8 u8) returns(uint8) 2521 public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception { 2522 Interfaces args = Geth.newInterfaces(1); 2523 Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0); 2524 2525 return this.Contract.transact(opts, "setUint8" , args); 2526 } 2527 } 2528 `, 2529 }, 2530 } 2531 for i, c := range cases { 2532 binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil, nil, false) 2533 if err != nil { 2534 t.Fatalf("test %d: failed to generate binding: %v", i, err) 2535 } 2536 // Remove empty lines 2537 removeEmptys := func(input string) string { 2538 lines := strings.Split(input, "\n") 2539 var index int 2540 for _, line := range lines { 2541 if strings.TrimSpace(line) != "" { 2542 lines[index] = line 2543 index += 1 2544 } 2545 } 2546 lines = lines[:index] 2547 return strings.Join(lines, "\n") 2548 } 2549 binding = removeEmptys(binding) 2550 expect := removeEmptys(c.expected) 2551 if binding != expect { 2552 t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected) 2553 } 2554 } 2555 }