github.com/sbrajchuk/go-ethereum@v1.9.7/accounts/abi/bind/bind_test.go (about) 1 // Copyright 2016 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package bind 18 19 import ( 20 "fmt" 21 "io/ioutil" 22 "os" 23 "os/exec" 24 "path/filepath" 25 "runtime" 26 "strings" 27 "testing" 28 29 "github.com/ethereum/go-ethereum/common" 30 ) 31 32 var bindTests = []struct { 33 name string 34 contract string 35 bytecode []string 36 abi []string 37 imports string 38 tester string 39 fsigs []map[string]string 40 libs map[string]string 41 types []string 42 }{ 43 // Test that the binding is available in combined and separate forms too 44 { 45 `Empty`, 46 `contract NilContract {}`, 47 []string{`606060405260068060106000396000f3606060405200`}, 48 []string{`[]`}, 49 `"github.com/ethereum/go-ethereum/common"`, 50 ` 51 if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil { 52 t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil) 53 } 54 if b, err := NewEmptyCaller(common.Address{}, nil); b == nil || err != nil { 55 t.Fatalf("caller binding (%v) nil or error (%v) not nil", b, nil) 56 } 57 if b, err := NewEmptyTransactor(common.Address{}, nil); b == nil || err != nil { 58 t.Fatalf("transactor binding (%v) nil or error (%v) not nil", b, nil) 59 } 60 `, 61 nil, 62 nil, 63 nil, 64 }, 65 // Test that all the official sample contracts bind correctly 66 { 67 `Token`, 68 `https://ethereum.org/token`, 69 []string{`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`}, 70 []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"}]`}, 71 `"github.com/ethereum/go-ethereum/common"`, 72 ` 73 if b, err := NewToken(common.Address{}, nil); b == nil || err != nil { 74 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 75 } 76 `, 77 nil, 78 nil, 79 nil, 80 }, 81 { 82 `Crowdsale`, 83 `https://ethereum.org/crowdsale`, 84 []string{`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`}, 85 []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"}]`}, 86 `"github.com/ethereum/go-ethereum/common"`, 87 ` 88 if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil { 89 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 90 } 91 `, 92 nil, 93 nil, 94 nil, 95 }, 96 { 97 `DAO`, 98 `https://ethereum.org/dao`, 99 []string{`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`}, 100 []string{`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`}, 101 `"github.com/ethereum/go-ethereum/common"`, 102 ` 103 if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil { 104 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 105 } 106 `, 107 nil, 108 nil, 109 nil, 110 }, 111 // Test that named and anonymous inputs are handled correctly 112 { 113 `InputChecker`, ``, []string{``}, 114 []string{` 115 [ 116 {"type":"function","name":"noInput","constant":true,"inputs":[],"outputs":[]}, 117 {"type":"function","name":"namedInput","constant":true,"inputs":[{"name":"str","type":"string"}],"outputs":[]}, 118 {"type":"function","name":"anonInput","constant":true,"inputs":[{"name":"","type":"string"}],"outputs":[]}, 119 {"type":"function","name":"namedInputs","constant":true,"inputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}],"outputs":[]}, 120 {"type":"function","name":"anonInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"outputs":[]}, 121 {"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]} 122 ] 123 `}, 124 ` 125 "fmt" 126 127 "github.com/ethereum/go-ethereum/common" 128 `, 129 `if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil { 130 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) 131 } else if false { // Don't run, just compile and test types 132 var err error 133 134 err = b.NoInput(nil) 135 err = b.NamedInput(nil, "") 136 err = b.AnonInput(nil, "") 137 err = b.NamedInputs(nil, "", "") 138 err = b.AnonInputs(nil, "", "") 139 err = b.MixedInputs(nil, "", "") 140 141 fmt.Println(err) 142 }`, 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 }, 186 // Tests that named, anonymous and indexed events are handled correctly 187 { 188 `EventChecker`, ``, []string{``}, 189 []string{` 190 [ 191 {"type":"event","name":"empty","inputs":[]}, 192 {"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]}, 193 {"type":"event","name":"mixed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256"}]}, 194 {"type":"event","name":"anonymous","anonymous":true,"inputs":[]}, 195 {"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"}]} 196 ] 197 `}, 198 ` 199 "fmt" 200 "math/big" 201 "reflect" 202 203 "github.com/ethereum/go-ethereum/common" 204 `, 205 `if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil { 206 t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil) 207 } else if false { // Don't run, just compile and test types 208 var ( 209 err error 210 res bool 211 str string 212 dat []byte 213 hash common.Hash 214 ) 215 _, err = e.FilterEmpty(nil) 216 _, err = e.FilterIndexed(nil, []common.Address{}, []*big.Int{}) 217 218 mit, err := e.FilterMixed(nil, []common.Address{}) 219 220 res = mit.Next() // Make sure the iterator has a Next method 221 err = mit.Error() // Make sure the iterator has an Error method 222 err = mit.Close() // Make sure the iterator has a Close method 223 224 fmt.Println(mit.Event.Raw.BlockHash) // Make sure the raw log is contained within the results 225 fmt.Println(mit.Event.Num) // Make sure the unpacked non-indexed fields are present 226 fmt.Println(mit.Event.Addr) // Make sure the reconstructed indexed fields are present 227 228 dit, err := e.FilterDynamic(nil, []string{}, [][]byte{}) 229 230 str = dit.Event.Str // Make sure non-indexed strings retain their type 231 dat = dit.Event.Dat // Make sure non-indexed bytes retain their type 232 hash = dit.Event.IdxStr // Make sure indexed strings turn into hashes 233 hash = dit.Event.IdxDat // Make sure indexed bytes turn into hashes 234 235 sink := make(chan *EventCheckerMixed) 236 sub, err := e.WatchMixed(nil, sink, []common.Address{}) 237 defer sub.Unsubscribe() 238 239 event := <-sink 240 fmt.Println(event.Raw.BlockHash) // Make sure the raw log is contained within the results 241 fmt.Println(event.Num) // Make sure the unpacked non-indexed fields are present 242 fmt.Println(event.Addr) // Make sure the reconstructed indexed fields are present 243 244 fmt.Println(res, str, dat, hash, err) 245 } 246 // Run a tiny reflection test to ensure disallowed methods don't appear 247 if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok { 248 t.Errorf("binding has disallowed method (FilterAnonymous)") 249 }`, 250 nil, 251 nil, 252 nil, 253 }, 254 // Test that contract interactions (deploy, transact and call) generate working code 255 { 256 `Interactor`, 257 ` 258 contract Interactor { 259 string public deployString; 260 string public transactString; 261 262 function Interactor(string str) { 263 deployString = str; 264 } 265 266 function transact(string str) { 267 transactString = str; 268 } 269 } 270 `, 271 []string{`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`}, 272 []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"}]`}, 273 ` 274 "math/big" 275 276 "github.com/ethereum/go-ethereum/accounts/abi/bind" 277 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 278 "github.com/ethereum/go-ethereum/core" 279 "github.com/ethereum/go-ethereum/crypto" 280 `, 281 ` 282 // Generate a new random account and a funded simulator 283 key, _ := crypto.GenerateKey() 284 auth := bind.NewKeyedTransactor(key) 285 286 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 287 defer sim.Close() 288 289 // Deploy an interaction tester contract and call a transaction on it 290 _, _, interactor, err := DeployInteractor(auth, sim, "Deploy string") 291 if err != nil { 292 t.Fatalf("Failed to deploy interactor contract: %v", err) 293 } 294 if _, err := interactor.Transact(auth, "Transact string"); err != nil { 295 t.Fatalf("Failed to transact with interactor contract: %v", err) 296 } 297 // Commit all pending transactions in the simulator and check the contract state 298 sim.Commit() 299 300 if str, err := interactor.DeployString(nil); err != nil { 301 t.Fatalf("Failed to retrieve deploy string: %v", err) 302 } else if str != "Deploy string" { 303 t.Fatalf("Deploy string mismatch: have '%s', want 'Deploy string'", str) 304 } 305 if str, err := interactor.TransactString(nil); err != nil { 306 t.Fatalf("Failed to retrieve transact string: %v", err) 307 } else if str != "Transact string" { 308 t.Fatalf("Transact string mismatch: have '%s', want 'Transact string'", str) 309 } 310 `, 311 nil, 312 nil, 313 nil, 314 }, 315 // Tests that plain values can be properly returned and deserialized 316 { 317 `Getter`, 318 ` 319 contract Getter { 320 function getter() constant returns (string, int, bytes32) { 321 return ("Hi", 1, sha3("")); 322 } 323 } 324 `, 325 []string{`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`}, 326 []string{`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`}, 327 ` 328 "math/big" 329 330 "github.com/ethereum/go-ethereum/accounts/abi/bind" 331 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 332 "github.com/ethereum/go-ethereum/core" 333 "github.com/ethereum/go-ethereum/crypto" 334 `, 335 ` 336 // Generate a new random account and a funded simulator 337 key, _ := crypto.GenerateKey() 338 auth := bind.NewKeyedTransactor(key) 339 340 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 341 defer sim.Close() 342 343 // Deploy a tuple tester contract and execute a structured call on it 344 _, _, getter, err := DeployGetter(auth, sim) 345 if err != nil { 346 t.Fatalf("Failed to deploy getter contract: %v", err) 347 } 348 sim.Commit() 349 350 if str, num, _, err := getter.Getter(nil); err != nil { 351 t.Fatalf("Failed to call anonymous field retriever: %v", err) 352 } else if str != "Hi" || num.Cmp(big.NewInt(1)) != 0 { 353 t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", str, num, "Hi", 1) 354 } 355 `, 356 nil, 357 nil, 358 nil, 359 }, 360 // Tests that tuples can be properly returned and deserialized 361 { 362 `Tupler`, 363 ` 364 contract Tupler { 365 function tuple() constant returns (string a, int b, bytes32 c) { 366 return ("Hi", 1, sha3("")); 367 } 368 } 369 `, 370 []string{`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`}, 371 []string{`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`}, 372 ` 373 "math/big" 374 375 "github.com/ethereum/go-ethereum/accounts/abi/bind" 376 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 377 "github.com/ethereum/go-ethereum/core" 378 "github.com/ethereum/go-ethereum/crypto" 379 `, 380 ` 381 // Generate a new random account and a funded simulator 382 key, _ := crypto.GenerateKey() 383 auth := bind.NewKeyedTransactor(key) 384 385 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 386 defer sim.Close() 387 388 // Deploy a tuple tester contract and execute a structured call on it 389 _, _, tupler, err := DeployTupler(auth, sim) 390 if err != nil { 391 t.Fatalf("Failed to deploy tupler contract: %v", err) 392 } 393 sim.Commit() 394 395 if res, err := tupler.Tuple(nil); err != nil { 396 t.Fatalf("Failed to call structure retriever: %v", err) 397 } else if res.A != "Hi" || res.B.Cmp(big.NewInt(1)) != 0 { 398 t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", res.A, res.B, "Hi", 1) 399 } 400 `, 401 nil, 402 nil, 403 nil, 404 }, 405 // Tests that arrays/slices can be properly returned and deserialized. 406 // Only addresses are tested, remainder just compiled to keep the test small. 407 { 408 `Slicer`, 409 ` 410 contract Slicer { 411 function echoAddresses(address[] input) constant returns (address[] output) { 412 return input; 413 } 414 function echoInts(int[] input) constant returns (int[] output) { 415 return input; 416 } 417 function echoFancyInts(uint24[23] input) constant returns (uint24[23] output) { 418 return input; 419 } 420 function echoBools(bool[] input) constant returns (bool[] output) { 421 return input; 422 } 423 } 424 `, 425 []string{`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`}, 426 []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"}]`}, 427 ` 428 "math/big" 429 "reflect" 430 431 "github.com/ethereum/go-ethereum/accounts/abi/bind" 432 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 433 "github.com/ethereum/go-ethereum/common" 434 "github.com/ethereum/go-ethereum/core" 435 "github.com/ethereum/go-ethereum/crypto" 436 `, 437 ` 438 // Generate a new random account and a funded simulator 439 key, _ := crypto.GenerateKey() 440 auth := bind.NewKeyedTransactor(key) 441 442 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 443 defer sim.Close() 444 445 // Deploy a slice tester contract and execute a n array call on it 446 _, _, slicer, err := DeploySlicer(auth, sim) 447 if err != nil { 448 t.Fatalf("Failed to deploy slicer contract: %v", err) 449 } 450 sim.Commit() 451 452 if out, err := slicer.EchoAddresses(nil, []common.Address{auth.From, common.Address{}}); err != nil { 453 t.Fatalf("Failed to call slice echoer: %v", err) 454 } else if !reflect.DeepEqual(out, []common.Address{auth.From, common.Address{}}) { 455 t.Fatalf("Slice return mismatch: have %v, want %v", out, []common.Address{auth.From, common.Address{}}) 456 } 457 `, 458 nil, 459 nil, 460 nil, 461 }, 462 // Tests that anonymous default methods can be correctly invoked 463 { 464 `Defaulter`, 465 ` 466 contract Defaulter { 467 address public caller; 468 469 function() { 470 caller = msg.sender; 471 } 472 } 473 `, 474 []string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`}, 475 []string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`}, 476 ` 477 "math/big" 478 479 "github.com/ethereum/go-ethereum/accounts/abi/bind" 480 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 481 "github.com/ethereum/go-ethereum/core" 482 "github.com/ethereum/go-ethereum/crypto" 483 `, 484 ` 485 // Generate a new random account and a funded simulator 486 key, _ := crypto.GenerateKey() 487 auth := bind.NewKeyedTransactor(key) 488 489 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 490 defer sim.Close() 491 492 // Deploy a default method invoker contract and execute its default method 493 _, _, defaulter, err := DeployDefaulter(auth, sim) 494 if err != nil { 495 t.Fatalf("Failed to deploy defaulter contract: %v", err) 496 } 497 if _, err := (&DefaulterRaw{defaulter}).Transfer(auth); err != nil { 498 t.Fatalf("Failed to invoke default method: %v", err) 499 } 500 sim.Commit() 501 502 if caller, err := defaulter.Caller(nil); err != nil { 503 t.Fatalf("Failed to call address retriever: %v", err) 504 } else if (caller != auth.From) { 505 t.Fatalf("Address mismatch: have %v, want %v", caller, auth.From) 506 } 507 `, 508 nil, 509 nil, 510 nil, 511 }, 512 // Tests that non-existent contracts are reported as such (though only simulator test) 513 { 514 `NonExistent`, 515 ` 516 contract NonExistent { 517 function String() constant returns(string) { 518 return "I don't exist"; 519 } 520 } 521 `, 522 []string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`}, 523 []string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, 524 ` 525 "github.com/ethereum/go-ethereum/accounts/abi/bind" 526 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 527 "github.com/ethereum/go-ethereum/common" 528 "github.com/ethereum/go-ethereum/core" 529 `, 530 ` 531 // Create a simulator and wrap a non-deployed contract 532 533 sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000)) 534 defer sim.Close() 535 536 nonexistent, err := NewNonExistent(common.Address{}, sim) 537 if err != nil { 538 t.Fatalf("Failed to access non-existent contract: %v", err) 539 } 540 // Ensure that contract calls fail with the appropriate error 541 if res, err := nonexistent.String(nil); err == nil { 542 t.Fatalf("Call succeeded on non-existent contract: %v", res) 543 } else if (err != bind.ErrNoCode) { 544 t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode) 545 } 546 `, 547 nil, 548 nil, 549 nil, 550 }, 551 // Tests that gas estimation works for contracts with weird gas mechanics too. 552 { 553 `FunkyGasPattern`, 554 ` 555 contract FunkyGasPattern { 556 string public field; 557 558 function SetField(string value) { 559 // This check will screw gas estimation! Good, good! 560 if (msg.gas < 100000) { 561 throw; 562 } 563 field = value; 564 } 565 } 566 `, 567 []string{`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`}, 568 []string{`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, 569 ` 570 "math/big" 571 572 "github.com/ethereum/go-ethereum/accounts/abi/bind" 573 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 574 "github.com/ethereum/go-ethereum/core" 575 "github.com/ethereum/go-ethereum/crypto" 576 `, 577 ` 578 // Generate a new random account and a funded simulator 579 key, _ := crypto.GenerateKey() 580 auth := bind.NewKeyedTransactor(key) 581 582 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 583 defer sim.Close() 584 585 // Deploy a funky gas pattern contract 586 _, _, limiter, err := DeployFunkyGasPattern(auth, sim) 587 if err != nil { 588 t.Fatalf("Failed to deploy funky contract: %v", err) 589 } 590 sim.Commit() 591 592 // Set the field with automatic estimation and check that it succeeds 593 if _, err := limiter.SetField(auth, "automatic"); err != nil { 594 t.Fatalf("Failed to call automatically gased transaction: %v", err) 595 } 596 sim.Commit() 597 598 if field, _ := limiter.Field(nil); field != "automatic" { 599 t.Fatalf("Field mismatch: have %v, want %v", field, "automatic") 600 } 601 `, 602 nil, 603 nil, 604 nil, 605 }, 606 // Test that constant functions can be called from an (optional) specified address 607 { 608 `CallFrom`, 609 ` 610 contract CallFrom { 611 function callFrom() constant returns(address) { 612 return msg.sender; 613 } 614 } 615 `, []string{`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`}, 616 []string{`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`}, 617 ` 618 "math/big" 619 620 "github.com/ethereum/go-ethereum/accounts/abi/bind" 621 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 622 "github.com/ethereum/go-ethereum/common" 623 "github.com/ethereum/go-ethereum/core" 624 "github.com/ethereum/go-ethereum/crypto" 625 `, 626 ` 627 // Generate a new random account and a funded simulator 628 key, _ := crypto.GenerateKey() 629 auth := bind.NewKeyedTransactor(key) 630 631 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 632 defer sim.Close() 633 634 // Deploy a sender tester contract and execute a structured call on it 635 _, _, callfrom, err := DeployCallFrom(auth, sim) 636 if err != nil { 637 t.Fatalf("Failed to deploy sender contract: %v", err) 638 } 639 sim.Commit() 640 641 if res, err := callfrom.CallFrom(nil); err != nil { 642 t.Errorf("Failed to call constant function: %v", err) 643 } else if res != (common.Address{}) { 644 t.Errorf("Invalid address returned, want: %x, got: %x", (common.Address{}), res) 645 } 646 647 for _, addr := range []common.Address{common.Address{}, common.Address{1}, common.Address{2}} { 648 if res, err := callfrom.CallFrom(&bind.CallOpts{From: addr}); err != nil { 649 t.Fatalf("Failed to call constant function: %v", err) 650 } else if res != addr { 651 t.Fatalf("Invalid address returned, want: %x, got: %x", addr, res) 652 } 653 } 654 `, 655 nil, 656 nil, 657 nil, 658 }, 659 // Tests that methods and returns with underscores inside work correctly. 660 { 661 `Underscorer`, 662 ` 663 contract Underscorer { 664 function UnderscoredOutput() constant returns (int _int, string _string) { 665 return (314, "pi"); 666 } 667 function LowerLowerCollision() constant returns (int _res, int res) { 668 return (1, 2); 669 } 670 function LowerUpperCollision() constant returns (int _res, int Res) { 671 return (1, 2); 672 } 673 function UpperLowerCollision() constant returns (int _Res, int res) { 674 return (1, 2); 675 } 676 function UpperUpperCollision() constant returns (int _Res, int Res) { 677 return (1, 2); 678 } 679 function PurelyUnderscoredOutput() constant returns (int _, int res) { 680 return (1, 2); 681 } 682 function AllPurelyUnderscoredOutput() constant returns (int _, int __) { 683 return (1, 2); 684 } 685 function _under_scored_func() constant returns (int _int) { 686 return 0; 687 } 688 } 689 `, []string{`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`}, 690 []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"}]`}, 691 ` 692 "fmt" 693 "math/big" 694 695 "github.com/ethereum/go-ethereum/accounts/abi/bind" 696 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 697 "github.com/ethereum/go-ethereum/core" 698 "github.com/ethereum/go-ethereum/crypto" 699 `, 700 ` 701 // Generate a new random account and a funded simulator 702 key, _ := crypto.GenerateKey() 703 auth := bind.NewKeyedTransactor(key) 704 705 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 706 defer sim.Close() 707 708 // Deploy a underscorer tester contract and execute a structured call on it 709 _, _, underscorer, err := DeployUnderscorer(auth, sim) 710 if err != nil { 711 t.Fatalf("Failed to deploy underscorer contract: %v", err) 712 } 713 sim.Commit() 714 715 // Verify that underscored return values correctly parse into structs 716 if res, err := underscorer.UnderscoredOutput(nil); err != nil { 717 t.Errorf("Failed to call constant function: %v", err) 718 } else if res.Int.Cmp(big.NewInt(314)) != 0 || res.String != "pi" { 719 t.Errorf("Invalid result, want: {314, \"pi\"}, got: %+v", res) 720 } 721 // Verify that underscored and non-underscored name collisions force tuple outputs 722 var a, b *big.Int 723 724 a, b, _ = underscorer.LowerLowerCollision(nil) 725 a, b, _ = underscorer.LowerUpperCollision(nil) 726 a, b, _ = underscorer.UpperLowerCollision(nil) 727 a, b, _ = underscorer.UpperUpperCollision(nil) 728 a, b, _ = underscorer.PurelyUnderscoredOutput(nil) 729 a, b, _ = underscorer.AllPurelyUnderscoredOutput(nil) 730 a, _ = underscorer.UnderScoredFunc(nil) 731 732 fmt.Println(a, b, err) 733 `, 734 nil, 735 nil, 736 nil, 737 }, 738 // Tests that logs can be successfully filtered and decoded. 739 { 740 `Eventer`, 741 ` 742 contract Eventer { 743 event SimpleEvent ( 744 address indexed Addr, 745 bytes32 indexed Id, 746 bool indexed Flag, 747 uint Value 748 ); 749 function raiseSimpleEvent(address addr, bytes32 id, bool flag, uint value) { 750 SimpleEvent(addr, id, flag, value); 751 } 752 753 event NodataEvent ( 754 uint indexed Number, 755 int16 indexed Short, 756 uint32 indexed Long 757 ); 758 function raiseNodataEvent(uint number, int16 short, uint32 long) { 759 NodataEvent(number, short, long); 760 } 761 762 event DynamicEvent ( 763 string indexed IndexedString, 764 bytes indexed IndexedBytes, 765 string NonIndexedString, 766 bytes NonIndexedBytes 767 ); 768 function raiseDynamicEvent(string str, bytes blob) { 769 DynamicEvent(str, blob, str, blob); 770 } 771 772 event FixedBytesEvent ( 773 bytes24 indexed IndexedBytes, 774 bytes24 NonIndexedBytes 775 ); 776 function raiseFixedBytesEvent(bytes24 blob) { 777 FixedBytesEvent(blob, blob); 778 } 779 } 780 `, 781 []string{`608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`}, 782 []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"}]`}, 783 ` 784 "math/big" 785 "time" 786 787 "github.com/ethereum/go-ethereum/accounts/abi/bind" 788 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 789 "github.com/ethereum/go-ethereum/common" 790 "github.com/ethereum/go-ethereum/core" 791 "github.com/ethereum/go-ethereum/crypto" 792 `, 793 ` 794 // Generate a new random account and a funded simulator 795 key, _ := crypto.GenerateKey() 796 auth := bind.NewKeyedTransactor(key) 797 798 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 799 defer sim.Close() 800 801 // Deploy an eventer contract 802 _, _, eventer, err := DeployEventer(auth, sim) 803 if err != nil { 804 t.Fatalf("Failed to deploy eventer contract: %v", err) 805 } 806 sim.Commit() 807 808 // Inject a few events into the contract, gradually more in each block 809 for i := 1; i <= 3; i++ { 810 for j := 1; j <= i; j++ { 811 if _, err := eventer.RaiseSimpleEvent(auth, common.Address{byte(j)}, [32]byte{byte(j)}, true, big.NewInt(int64(10*i+j))); err != nil { 812 t.Fatalf("block %d, event %d: raise failed: %v", i, j, err) 813 } 814 } 815 sim.Commit() 816 } 817 // Test filtering for certain events and ensure they can be found 818 sit, err := eventer.FilterSimpleEvent(nil, []common.Address{common.Address{1}, common.Address{3}}, [][32]byte{{byte(1)}, {byte(2)}, {byte(3)}}, []bool{true}) 819 if err != nil { 820 t.Fatalf("failed to filter for simple events: %v", err) 821 } 822 defer sit.Close() 823 824 sit.Next() 825 if sit.Event.Value.Uint64() != 11 || !sit.Event.Flag { 826 t.Errorf("simple log content mismatch: have %v, want {11, true}", sit.Event) 827 } 828 sit.Next() 829 if sit.Event.Value.Uint64() != 21 || !sit.Event.Flag { 830 t.Errorf("simple log content mismatch: have %v, want {21, true}", sit.Event) 831 } 832 sit.Next() 833 if sit.Event.Value.Uint64() != 31 || !sit.Event.Flag { 834 t.Errorf("simple log content mismatch: have %v, want {31, true}", sit.Event) 835 } 836 sit.Next() 837 if sit.Event.Value.Uint64() != 33 || !sit.Event.Flag { 838 t.Errorf("simple log content mismatch: have %v, want {33, true}", sit.Event) 839 } 840 841 if sit.Next() { 842 t.Errorf("unexpected simple event found: %+v", sit.Event) 843 } 844 if err = sit.Error(); err != nil { 845 t.Fatalf("simple event iteration failed: %v", err) 846 } 847 // Test raising and filtering for an event with no data component 848 if _, err := eventer.RaiseNodataEvent(auth, big.NewInt(314), 141, 271); err != nil { 849 t.Fatalf("failed to raise nodata event: %v", err) 850 } 851 sim.Commit() 852 853 nit, err := eventer.FilterNodataEvent(nil, []*big.Int{big.NewInt(314)}, []int16{140, 141, 142}, []uint32{271}) 854 if err != nil { 855 t.Fatalf("failed to filter for nodata events: %v", err) 856 } 857 defer nit.Close() 858 859 if !nit.Next() { 860 t.Fatalf("nodata log not found: %v", nit.Error()) 861 } 862 if nit.Event.Number.Uint64() != 314 { 863 t.Errorf("nodata log content mismatch: have %v, want 314", nit.Event.Number) 864 } 865 if nit.Next() { 866 t.Errorf("unexpected nodata event found: %+v", nit.Event) 867 } 868 if err = nit.Error(); err != nil { 869 t.Fatalf("nodata event iteration failed: %v", err) 870 } 871 // Test raising and filtering for events with dynamic indexed components 872 if _, err := eventer.RaiseDynamicEvent(auth, "Hello", []byte("World")); err != nil { 873 t.Fatalf("failed to raise dynamic event: %v", err) 874 } 875 sim.Commit() 876 877 dit, err := eventer.FilterDynamicEvent(nil, []string{"Hi", "Hello", "Bye"}, [][]byte{[]byte("World")}) 878 if err != nil { 879 t.Fatalf("failed to filter for dynamic events: %v", err) 880 } 881 defer dit.Close() 882 883 if !dit.Next() { 884 t.Fatalf("dynamic log not found: %v", dit.Error()) 885 } 886 if dit.Event.NonIndexedString != "Hello" || string(dit.Event.NonIndexedBytes) != "World" || dit.Event.IndexedString != common.HexToHash("0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2") || dit.Event.IndexedBytes != common.HexToHash("0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18") { 887 t.Errorf("dynamic log content mismatch: have %v, want {'0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2, '0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18', 'Hello', 'World'}", dit.Event) 888 } 889 if dit.Next() { 890 t.Errorf("unexpected dynamic event found: %+v", dit.Event) 891 } 892 if err = dit.Error(); err != nil { 893 t.Fatalf("dynamic event iteration failed: %v", err) 894 } 895 // Test raising and filtering for events with fixed bytes components 896 var fblob [24]byte 897 copy(fblob[:], []byte("Fixed Bytes")) 898 899 if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil { 900 t.Fatalf("failed to raise fixed bytes event: %v", err) 901 } 902 sim.Commit() 903 904 fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob}) 905 if err != nil { 906 t.Fatalf("failed to filter for fixed bytes events: %v", err) 907 } 908 defer fit.Close() 909 910 if !fit.Next() { 911 t.Fatalf("fixed bytes log not found: %v", fit.Error()) 912 } 913 if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob { 914 t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob) 915 } 916 if fit.Next() { 917 t.Errorf("unexpected fixed bytes event found: %+v", fit.Event) 918 } 919 if err = fit.Error(); err != nil { 920 t.Fatalf("fixed bytes event iteration failed: %v", err) 921 } 922 // Test subscribing to an event and raising it afterwards 923 ch := make(chan *EventerSimpleEvent, 16) 924 sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil) 925 if err != nil { 926 t.Fatalf("failed to subscribe to simple events: %v", err) 927 } 928 if _, err := eventer.RaiseSimpleEvent(auth, common.Address{255}, [32]byte{255}, true, big.NewInt(255)); err != nil { 929 t.Fatalf("failed to raise subscribed simple event: %v", err) 930 } 931 sim.Commit() 932 933 select { 934 case event := <-ch: 935 if event.Value.Uint64() != 255 { 936 t.Errorf("simple log content mismatch: have %v, want 255", event) 937 } 938 case <-time.After(250 * time.Millisecond): 939 t.Fatalf("subscribed simple event didn't arrive") 940 } 941 // Unsubscribe from the event and make sure we're not delivered more 942 sub.Unsubscribe() 943 944 if _, err := eventer.RaiseSimpleEvent(auth, common.Address{254}, [32]byte{254}, true, big.NewInt(254)); err != nil { 945 t.Fatalf("failed to raise subscribed simple event: %v", err) 946 } 947 sim.Commit() 948 949 select { 950 case event := <-ch: 951 t.Fatalf("unsubscribed simple event arrived: %v", event) 952 case <-time.After(250 * time.Millisecond): 953 } 954 `, 955 nil, 956 nil, 957 nil, 958 }, 959 { 960 `DeeplyNestedArray`, 961 ` 962 contract DeeplyNestedArray { 963 uint64[3][4][5] public deepUint64Array; 964 function storeDeepUintArray(uint64[3][4][5] arr) public { 965 deepUint64Array = arr; 966 } 967 function retrieveDeepArray() public view returns (uint64[3][4][5]) { 968 return deepUint64Array; 969 } 970 } 971 `, 972 []string{`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`}, 973 []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"}]`}, 974 ` 975 "math/big" 976 977 "github.com/ethereum/go-ethereum/accounts/abi/bind" 978 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 979 "github.com/ethereum/go-ethereum/core" 980 "github.com/ethereum/go-ethereum/crypto" 981 `, 982 ` 983 // Generate a new random account and a funded simulator 984 key, _ := crypto.GenerateKey() 985 auth := bind.NewKeyedTransactor(key) 986 987 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 988 defer sim.Close() 989 990 //deploy the test contract 991 _, _, testContract, err := DeployDeeplyNestedArray(auth, sim) 992 if err != nil { 993 t.Fatalf("Failed to deploy test contract: %v", err) 994 } 995 996 // Finish deploy. 997 sim.Commit() 998 999 //Create coordinate-filled array, for testing purposes. 1000 testArr := [5][4][3]uint64{} 1001 for i := 0; i < 5; i++ { 1002 testArr[i] = [4][3]uint64{} 1003 for j := 0; j < 4; j++ { 1004 testArr[i][j] = [3]uint64{} 1005 for k := 0; k < 3; k++ { 1006 //pack the coordinates, each array value will be unique, and can be validated easily. 1007 testArr[i][j][k] = uint64(i) << 16 | uint64(j) << 8 | uint64(k) 1008 } 1009 } 1010 } 1011 1012 if _, err := testContract.StoreDeepUintArray(&bind.TransactOpts{ 1013 From: auth.From, 1014 Signer: auth.Signer, 1015 }, testArr); err != nil { 1016 t.Fatalf("Failed to store nested array in test contract: %v", err) 1017 } 1018 1019 sim.Commit() 1020 1021 retrievedArr, err := testContract.RetrieveDeepArray(&bind.CallOpts{ 1022 From: auth.From, 1023 Pending: false, 1024 }) 1025 if err != nil { 1026 t.Fatalf("Failed to retrieve nested array from test contract: %v", err) 1027 } 1028 1029 //quick check to see if contents were copied 1030 // (See accounts/abi/unpack_test.go for more extensive testing) 1031 if retrievedArr[4][3][2] != testArr[4][3][2] { 1032 t.Fatalf("Retrieved value does not match expected value! got: %d, expected: %d. %v", retrievedArr[4][3][2], testArr[4][3][2], err) 1033 } 1034 `, 1035 nil, 1036 nil, 1037 nil, 1038 }, 1039 { 1040 `CallbackParam`, 1041 ` 1042 contract FunctionPointerTest { 1043 function test(function(uint256) external callback) external { 1044 callback(1); 1045 } 1046 } 1047 `, 1048 []string{`608060405234801561001057600080fd5b5061015e806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063d7a5aba214610040575b600080fd5b34801561004c57600080fd5b506100be6004803603602081101561006357600080fd5b810190808035806c0100000000000000000000000090049068010000000000000000900463ffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff169091602001919093929190939291905050506100c0565b005b818160016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561011657600080fd5b505af115801561012a573d6000803e3d6000fd5b50505050505056fea165627a7a7230582062f87455ff84be90896dbb0c4e4ddb505c600d23089f8e80a512548440d7e2580029`}, 1049 []string{`[ 1050 { 1051 "constant": false, 1052 "inputs": [ 1053 { 1054 "name": "callback", 1055 "type": "function" 1056 } 1057 ], 1058 "name": "test", 1059 "outputs": [], 1060 "payable": false, 1061 "stateMutability": "nonpayable", 1062 "type": "function" 1063 } 1064 ]`}, ` 1065 "strings" 1066 `, 1067 ` 1068 if strings.Compare("test(function)", CallbackParamFuncSigs["d7a5aba2"]) != 0 { 1069 t.Fatalf("") 1070 } 1071 `, 1072 []map[string]string{ 1073 { 1074 "test(function)": "d7a5aba2", 1075 }, 1076 }, 1077 nil, 1078 nil, 1079 }, { 1080 `Tuple`, 1081 ` 1082 pragma solidity >=0.4.19 <0.6.0; 1083 pragma experimental ABIEncoderV2; 1084 1085 contract Tuple { 1086 struct S { uint a; uint[] b; T[] c; } 1087 struct T { uint x; uint y; } 1088 struct P { uint8 x; uint8 y; } 1089 struct Q { uint16 x; uint16 y; } 1090 event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e); 1091 event TupleEvent2(P[]); 1092 1093 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) { 1094 return (a, b, c, d, e); 1095 } 1096 function func2(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public { 1097 emit TupleEvent(a, b, c, d, e); 1098 } 1099 function func3(Q[] memory) public pure {} // call function, nothing to return 1100 } 1101 `, 1102 []string{`60806040523480156100115760006000fd5b50610017565b6110b2806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c8063443c79b41461004c578063d0062cdd14610080578063e4d9a43b1461009c57610046565b60006000fd5b610066600480360361006191908101906107b8565b6100b8565b604051610077959493929190610ccb565b60405180910390f35b61009a600480360361009591908101906107b8565b6100ef565b005b6100b660048036036100b19190810190610775565b610136565b005b6100c061013a565b60606100ca61015e565b606060608989898989945094509450945094506100e2565b9550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd008585858585604051610126959493929190610ccb565b60405180910390a15b5050505050565b5b50565b60405180606001604052806000815260200160608152602001606081526020015090565b60405180604001604052806002905b606081526020019060019003908161016d57905050905661106e565b600082601f830112151561019d5760006000fd5b81356101b06101ab82610d6f565b610d41565b915081818352602084019350602081019050838560808402820111156101d65760006000fd5b60005b8381101561020757816101ec888261037a565b8452602084019350608083019250505b6001810190506101d9565b5050505092915050565b600082601f83011215156102255760006000fd5b600261023861023382610d98565b610d41565b9150818360005b83811015610270578135860161025588826103f3565b8452602084019350602083019250505b60018101905061023f565b5050505092915050565b600082601f830112151561028e5760006000fd5b81356102a161029c82610dbb565b610d41565b915081818352602084019350602081019050838560408402820111156102c75760006000fd5b60005b838110156102f857816102dd888261058b565b8452602084019350604083019250505b6001810190506102ca565b5050505092915050565b600082601f83011215156103165760006000fd5b813561032961032482610de4565b610d41565b9150818183526020840193506020810190508360005b83811015610370578135860161035588826105d8565b8452602084019350602083019250505b60018101905061033f565b5050505092915050565b600082601f830112151561038e5760006000fd5b60026103a161039c82610e0d565b610d41565b915081838560408402820111156103b85760006000fd5b60005b838110156103e957816103ce88826106fe565b8452602084019350604083019250505b6001810190506103bb565b5050505092915050565b600082601f83011215156104075760006000fd5b813561041a61041582610e30565b610d41565b915081818352602084019350602081019050838560408402820111156104405760006000fd5b60005b83811015610471578161045688826106fe565b8452602084019350604083019250505b600181019050610443565b5050505092915050565b600082601f830112151561048f5760006000fd5b81356104a261049d82610e59565b610d41565b915081818352602084019350602081019050838560208402820111156104c85760006000fd5b60005b838110156104f957816104de8882610760565b8452602084019350602083019250505b6001810190506104cb565b5050505092915050565b600082601f83011215156105175760006000fd5b813561052a61052582610e82565b610d41565b915081818352602084019350602081019050838560208402820111156105505760006000fd5b60005b8381101561058157816105668882610760565b8452602084019350602083019250505b600181019050610553565b5050505092915050565b60006040828403121561059e5760006000fd5b6105a86040610d41565b905060006105b88482850161074b565b60008301525060206105cc8482850161074b565b60208301525092915050565b6000606082840312156105eb5760006000fd5b6105f56060610d41565b9050600061060584828501610760565b600083015250602082013567ffffffffffffffff8111156106265760006000fd5b6106328482850161047b565b602083015250604082013567ffffffffffffffff8111156106535760006000fd5b61065f848285016103f3565b60408301525092915050565b60006060828403121561067e5760006000fd5b6106886060610d41565b9050600061069884828501610760565b600083015250602082013567ffffffffffffffff8111156106b95760006000fd5b6106c58482850161047b565b602083015250604082013567ffffffffffffffff8111156106e65760006000fd5b6106f2848285016103f3565b60408301525092915050565b6000604082840312156107115760006000fd5b61071b6040610d41565b9050600061072b84828501610760565b600083015250602061073f84828501610760565b60208301525092915050565b60008135905061075a8161103a565b92915050565b60008135905061076f81611054565b92915050565b6000602082840312156107885760006000fd5b600082013567ffffffffffffffff8111156107a35760006000fd5b6107af8482850161027a565b91505092915050565b6000600060006000600060a086880312156107d35760006000fd5b600086013567ffffffffffffffff8111156107ee5760006000fd5b6107fa8882890161066b565b955050602086013567ffffffffffffffff8111156108185760006000fd5b61082488828901610189565b945050604086013567ffffffffffffffff8111156108425760006000fd5b61084e88828901610211565b935050606086013567ffffffffffffffff81111561086c5760006000fd5b61087888828901610302565b925050608086013567ffffffffffffffff8111156108965760006000fd5b6108a288828901610503565b9150509295509295909350565b60006108bb8383610a6a565b60808301905092915050565b60006108d38383610ac2565b905092915050565b60006108e78383610c36565b905092915050565b60006108fb8383610c8d565b60408301905092915050565b60006109138383610cbc565b60208301905092915050565b600061092a82610f0f565b6109348185610fb7565b935061093f83610eab565b8060005b8381101561097157815161095788826108af565b975061096283610f5c565b9250505b600181019050610943565b5085935050505092915050565b600061098982610f1a565b6109938185610fc8565b9350836020820285016109a585610ebb565b8060005b858110156109e257848403895281516109c285826108c7565b94506109cd83610f69565b925060208a019950505b6001810190506109a9565b50829750879550505050505092915050565b60006109ff82610f25565b610a098185610fd3565b935083602082028501610a1b85610ec5565b8060005b85811015610a585784840389528151610a3885826108db565b9450610a4383610f76565b925060208a019950505b600181019050610a1f565b50829750879550505050505092915050565b610a7381610f30565b610a7d8184610fe4565b9250610a8882610ed5565b8060005b83811015610aba578151610aa087826108ef565b9650610aab83610f83565b9250505b600181019050610a8c565b505050505050565b6000610acd82610f3b565b610ad78185610fef565b9350610ae283610edf565b8060005b83811015610b14578151610afa88826108ef565b9750610b0583610f90565b9250505b600181019050610ae6565b5085935050505092915050565b6000610b2c82610f51565b610b368185611011565b9350610b4183610eff565b8060005b83811015610b73578151610b598882610907565b9750610b6483610faa565b9250505b600181019050610b45565b5085935050505092915050565b6000610b8b82610f46565b610b958185611000565b9350610ba083610eef565b8060005b83811015610bd2578151610bb88882610907565b9750610bc383610f9d565b9250505b600181019050610ba4565b5085935050505092915050565b6000606083016000830151610bf76000860182610cbc565b5060208301518482036020860152610c0f8282610b80565b91505060408301518482036040860152610c298282610ac2565b9150508091505092915050565b6000606083016000830151610c4e6000860182610cbc565b5060208301518482036020860152610c668282610b80565b91505060408301518482036040860152610c808282610ac2565b9150508091505092915050565b604082016000820151610ca36000850182610cbc565b506020820151610cb66020850182610cbc565b50505050565b610cc581611030565b82525050565b600060a0820190508181036000830152610ce58188610bdf565b90508181036020830152610cf9818761091f565b90508181036040830152610d0d818661097e565b90508181036060830152610d2181856109f4565b90508181036080830152610d358184610b21565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610d655760006000fd5b8060405250919050565b600067ffffffffffffffff821115610d875760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610db05760006000fd5b602082029050919050565b600067ffffffffffffffff821115610dd35760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610dfc5760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e255760006000fd5b602082029050919050565b600067ffffffffffffffff821115610e485760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e715760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e9a5760006000fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061ffff82169050919050565b6000819050919050565b61104381611022565b811415156110515760006000fd5b50565b61105d81611030565b8114151561106b5760006000fd5b50565bfea365627a7a72315820d78c6ba7ee332581e6c4d9daa5fc07941841230f7ce49edf6e05b1b63853e8746c6578706572696d656e74616cf564736f6c634300050c0040`}, 1103 []string{` 1104 [{"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"}] 1105 `}, 1106 ` 1107 "math/big" 1108 "reflect" 1109 1110 "github.com/ethereum/go-ethereum/accounts/abi/bind" 1111 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 1112 "github.com/ethereum/go-ethereum/core" 1113 "github.com/ethereum/go-ethereum/crypto" 1114 `, 1115 1116 ` 1117 key, _ := crypto.GenerateKey() 1118 auth := bind.NewKeyedTransactor(key) 1119 1120 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 1121 defer sim.Close() 1122 1123 _, _, contract, err := DeployTuple(auth, sim) 1124 if err != nil { 1125 t.Fatalf("deploy contract failed %v", err) 1126 } 1127 sim.Commit() 1128 1129 check := func(a, b interface{}, errMsg string) { 1130 if !reflect.DeepEqual(a, b) { 1131 t.Fatal(errMsg) 1132 } 1133 } 1134 1135 a := TupleS{ 1136 A: big.NewInt(1), 1137 B: []*big.Int{big.NewInt(2), big.NewInt(3)}, 1138 C: []TupleT{ 1139 { 1140 X: big.NewInt(4), 1141 Y: big.NewInt(5), 1142 }, 1143 { 1144 X: big.NewInt(6), 1145 Y: big.NewInt(7), 1146 }, 1147 }, 1148 } 1149 1150 b := [][2]TupleT{ 1151 { 1152 { 1153 X: big.NewInt(8), 1154 Y: big.NewInt(9), 1155 }, 1156 { 1157 X: big.NewInt(10), 1158 Y: big.NewInt(11), 1159 }, 1160 }, 1161 } 1162 1163 c := [2][]TupleT{ 1164 { 1165 { 1166 X: big.NewInt(12), 1167 Y: big.NewInt(13), 1168 }, 1169 { 1170 X: big.NewInt(14), 1171 Y: big.NewInt(15), 1172 }, 1173 }, 1174 { 1175 { 1176 X: big.NewInt(16), 1177 Y: big.NewInt(17), 1178 }, 1179 }, 1180 } 1181 1182 d := []TupleS{a} 1183 1184 e := []*big.Int{big.NewInt(18), big.NewInt(19)} 1185 ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e) 1186 if err != nil { 1187 t.Fatalf("invoke contract failed, err %v", err) 1188 } 1189 check(ret1, a, "ret1 mismatch") 1190 check(ret2, b, "ret2 mismatch") 1191 check(ret3, c, "ret3 mismatch") 1192 check(ret4, d, "ret4 mismatch") 1193 check(ret5, e, "ret5 mismatch") 1194 1195 _, err = contract.Func2(auth, a, b, c, d, e) 1196 if err != nil { 1197 t.Fatalf("invoke contract failed, err %v", err) 1198 } 1199 sim.Commit() 1200 1201 iter, err := contract.FilterTupleEvent(nil) 1202 if err != nil { 1203 t.Fatalf("failed to create event filter, err %v", err) 1204 } 1205 defer iter.Close() 1206 1207 iter.Next() 1208 check(iter.Event.A, a, "field1 mismatch") 1209 check(iter.Event.B, b, "field2 mismatch") 1210 check(iter.Event.C, c, "field3 mismatch") 1211 check(iter.Event.D, d, "field4 mismatch") 1212 check(iter.Event.E, e, "field5 mismatch") 1213 1214 err = contract.Func3(nil, nil) 1215 if err != nil { 1216 t.Fatalf("failed to call function which has no return, err %v", err) 1217 } 1218 `, 1219 nil, 1220 nil, 1221 nil, 1222 }, 1223 { 1224 `UseLibrary`, 1225 ` 1226 library Math { 1227 function add(uint a, uint b) public view returns(uint) { 1228 return a + b; 1229 } 1230 } 1231 1232 contract UseLibrary { 1233 function add (uint c, uint d) public view returns(uint) { 1234 return Math.add(c,d); 1235 } 1236 } 1237 `, 1238 []string{ 1239 // Bytecode for the UseLibrary contract 1240 `608060405234801561001057600080fd5b5061011d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063771602f714602d575b600080fd5b604d60048036036040811015604157600080fd5b5080359060200135605f565b60408051918252519081900360200190f35b600073__$b98c933f0a6ececcd167bd4f9d3299b1a0$__63771602f784846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801560b757600080fd5b505af415801560ca573d6000803e3d6000fd5b505050506040513d602081101560df57600080fd5b5051939250505056fea265627a7a72305820eb5c38f42445604cfa43d85e3aa5ecc48b0a646456c902dd48420ae7241d06f664736f6c63430005090032`, 1241 // Bytecode for the Math contract 1242 `60a3610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063771602f7146038575b600080fd5b605860048036036040811015604c57600080fd5b5080359060200135606a565b60408051918252519081900360200190f35b019056fea265627a7a723058206fc6c05f3078327f9c763edffdb5ab5f8bd212e293a1306c7d0ad05af3ad35f464736f6c63430005090032`, 1243 }, 1244 []string{ 1245 `[{"constant":true,"inputs":[{"name":"c","type":"uint256"},{"name":"d","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`, 1246 `[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`, 1247 }, 1248 ` 1249 "math/big" 1250 1251 "github.com/ethereum/go-ethereum/accounts/abi/bind" 1252 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 1253 "github.com/ethereum/go-ethereum/core" 1254 "github.com/ethereum/go-ethereum/crypto" 1255 `, 1256 ` 1257 // Generate a new random account and a funded simulator 1258 key, _ := crypto.GenerateKey() 1259 auth := bind.NewKeyedTransactor(key) 1260 1261 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 1262 defer sim.Close() 1263 1264 //deploy the test contract 1265 _, _, testContract, err := DeployUseLibrary(auth, sim) 1266 if err != nil { 1267 t.Fatalf("Failed to deploy test contract: %v", err) 1268 } 1269 1270 // Finish deploy. 1271 sim.Commit() 1272 1273 // Check that the library contract has been deployed 1274 // by calling the contract's add function. 1275 res, err := testContract.Add(&bind.CallOpts{ 1276 From: auth.From, 1277 Pending: false, 1278 }, big.NewInt(1), big.NewInt(2)) 1279 if err != nil { 1280 t.Fatalf("Failed to call linked contract: %v", err) 1281 } 1282 if res.Cmp(big.NewInt(3)) != 0 { 1283 t.Fatalf("Add did not return the correct result: %d != %d", res, 3) 1284 } 1285 `, 1286 nil, 1287 map[string]string{ 1288 "b98c933f0a6ececcd167bd4f9d3299b1a0": "Math", 1289 }, 1290 []string{"UseLibrary", "Math"}, 1291 }, { 1292 "Overload", 1293 ` 1294 pragma solidity ^0.5.10; 1295 1296 contract overload { 1297 mapping(address => uint256) balances; 1298 1299 event bar(uint256 i); 1300 event bar(uint256 i, uint256 j); 1301 1302 function foo(uint256 i) public { 1303 emit bar(i); 1304 } 1305 function foo(uint256 i, uint256 j) public { 1306 emit bar(i, j); 1307 } 1308 } 1309 `, 1310 []string{`608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806304bc52f81461003b5780632fbebd3814610073575b600080fd5b6100716004803603604081101561005157600080fd5b8101908080359060200190929190803590602001909291905050506100a1565b005b61009f6004803603602081101561008957600080fd5b81019080803590602001909291905050506100e4565b005b7fae42e9514233792a47a1e4554624e83fe852228e1503f63cd383e8a431f4f46d8282604051808381526020018281526020019250505060405180910390a15050565b7f0423a1321222a0a8716c22b92fac42d85a45a612b696a461784d9fa537c81e5c816040518082815260200191505060405180910390a15056fea265627a7a72305820e22b049858b33291cbe67eeaece0c5f64333e439d27032ea8337d08b1de18fe864736f6c634300050a0032`}, 1311 []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"}]`}, 1312 ` 1313 "math/big" 1314 "time" 1315 1316 "github.com/ethereum/go-ethereum/accounts/abi/bind" 1317 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 1318 "github.com/ethereum/go-ethereum/core" 1319 "github.com/ethereum/go-ethereum/crypto" 1320 `, 1321 ` 1322 // Initialize test accounts 1323 key, _ := crypto.GenerateKey() 1324 auth := bind.NewKeyedTransactor(key) 1325 sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) 1326 defer sim.Close() 1327 1328 // deploy the test contract 1329 _, _, contract, err := DeployOverload(auth, sim) 1330 if err != nil { 1331 t.Fatalf("Failed to deploy contract: %v", err) 1332 } 1333 // Finish deploy. 1334 sim.Commit() 1335 1336 resCh, stopCh := make(chan uint64), make(chan struct{}) 1337 1338 go func() { 1339 barSink := make(chan *OverloadBar) 1340 sub, _ := contract.WatchBar(nil, barSink) 1341 defer sub.Unsubscribe() 1342 1343 bar0Sink := make(chan *OverloadBar0) 1344 sub0, _ := contract.WatchBar0(nil, bar0Sink) 1345 defer sub0.Unsubscribe() 1346 1347 for { 1348 select { 1349 case ev := <-barSink: 1350 resCh <- ev.I.Uint64() 1351 case ev := <-bar0Sink: 1352 resCh <- ev.I.Uint64() + ev.J.Uint64() 1353 case <-stopCh: 1354 return 1355 } 1356 } 1357 }() 1358 contract.Foo(auth, big.NewInt(1), big.NewInt(2)) 1359 sim.Commit() 1360 select { 1361 case n := <-resCh: 1362 if n != 3 { 1363 t.Fatalf("Invalid bar0 event") 1364 } 1365 case <-time.NewTimer(100 * time.Millisecond).C: 1366 t.Fatalf("Wait bar0 event timeout") 1367 } 1368 1369 contract.Foo0(auth, big.NewInt(1)) 1370 sim.Commit() 1371 select { 1372 case n := <-resCh: 1373 if n != 1 { 1374 t.Fatalf("Invalid bar event") 1375 } 1376 case <-time.NewTimer(100 * time.Millisecond).C: 1377 t.Fatalf("Wait bar event timeout") 1378 } 1379 close(stopCh) 1380 `, 1381 nil, 1382 nil, 1383 nil, 1384 }, 1385 } 1386 1387 // Tests that packages generated by the binder can be successfully compiled and 1388 // the requested tester run against it. 1389 func TestGolangBindings(t *testing.T) { 1390 // Skip the test if no Go command can be found 1391 gocmd := runtime.GOROOT() + "/bin/go" 1392 if !common.FileExist(gocmd) { 1393 t.Skip("go sdk not found for testing") 1394 } 1395 // Create a temporary workspace for the test suite 1396 ws, err := ioutil.TempDir("", "") 1397 if err != nil { 1398 t.Fatalf("failed to create temporary workspace: %v", err) 1399 } 1400 defer os.RemoveAll(ws) 1401 1402 pkg := filepath.Join(ws, "bindtest") 1403 if err = os.MkdirAll(pkg, 0700); err != nil { 1404 t.Fatalf("failed to create package: %v", err) 1405 } 1406 // Generate the test suite for all the contracts 1407 for i, tt := range bindTests { 1408 var types []string 1409 if tt.types != nil { 1410 types = tt.types 1411 } else { 1412 types = []string{tt.name} 1413 } 1414 // Generate the binding and create a Go source file in the workspace 1415 bind, err := Bind(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs) 1416 if err != nil { 1417 t.Fatalf("test %d: failed to generate binding: %v", i, err) 1418 } 1419 if err = ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil { 1420 t.Fatalf("test %d: failed to write binding: %v", i, err) 1421 } 1422 // Generate the test file with the injected test code 1423 code := fmt.Sprintf(` 1424 package bindtest 1425 1426 import ( 1427 "testing" 1428 %s 1429 ) 1430 1431 func Test%s(t *testing.T) { 1432 %s 1433 } 1434 `, tt.imports, tt.name, tt.tester) 1435 if err := ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil { 1436 t.Fatalf("test %d: failed to write tests: %v", i, err) 1437 } 1438 } 1439 // Test the entire package and report any failures 1440 cmd := exec.Command(gocmd, "test", "-v", "-count", "1") 1441 cmd.Dir = pkg 1442 if out, err := cmd.CombinedOutput(); err != nil { 1443 t.Fatalf("failed to run binding test: %v\n%s", err, out) 1444 } 1445 } 1446 1447 // Tests that java binding generated by the binder is exactly matched. 1448 func TestJavaBindings(t *testing.T) { 1449 var cases = []struct { 1450 name string 1451 contract string 1452 abi string 1453 bytecode string 1454 expected string 1455 }{ 1456 { 1457 "test", 1458 ` 1459 pragma experimental ABIEncoderV2; 1460 pragma solidity ^0.5.2; 1461 1462 contract test { 1463 function setAddress(address a) public returns(address){} 1464 function setAddressList(address[] memory a_l) public returns(address[] memory){} 1465 function setAddressArray(address[2] memory a_a) public returns(address[2] memory){} 1466 1467 function setUint8(uint8 u8) public returns(uint8){} 1468 function setUint16(uint16 u16) public returns(uint16){} 1469 function setUint32(uint32 u32) public returns(uint32){} 1470 function setUint64(uint64 u64) public returns(uint64){} 1471 function setUint256(uint256 u256) public returns(uint256){} 1472 function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){} 1473 function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){} 1474 1475 function setInt8(int8 i8) public returns(int8){} 1476 function setInt16(int16 i16) public returns(int16){} 1477 function setInt32(int32 i32) public returns(int32){} 1478 function setInt64(int64 i64) public returns(int64){} 1479 function setInt256(int256 i256) public returns(int256){} 1480 function setInt256List(int256[] memory i256_l) public returns(int256[] memory){} 1481 function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){} 1482 1483 function setBytes1(bytes1 b1) public returns(bytes1) {} 1484 function setBytes32(bytes32 b32) public returns(bytes32) {} 1485 function setBytes(bytes memory bs) public returns(bytes memory) {} 1486 function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {} 1487 function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {} 1488 1489 function setString(string memory s) public returns(string memory) {} 1490 function setStringList(string[] memory s_l) public returns(string[] memory) {} 1491 function setStringArray(string[2] memory s_a) public returns(string[2] memory) {} 1492 1493 function setBool(bool b) public returns(bool) {} 1494 function setBoolList(bool[] memory b_l) public returns(bool[] memory) {} 1495 function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {} 1496 }`, 1497 `[{"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"}]`, 1498 `608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`, 1499 ` 1500 // This file is an automatically generated Java binding. Do not modify as any 1501 // change will likely be lost upon the next re-generation! 1502 1503 package bindtest; 1504 1505 import org.ethereum.geth.*; 1506 import java.util.*; 1507 1508 1509 1510 public class Test { 1511 // ABI is the input ABI used to generate the binding from. 1512 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\"}]"; 1513 1514 1515 // BYTECODE is the compiled bytecode used for deploying new contracts. 1516 public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037"; 1517 1518 // deploy deploys a new Ethereum contract, binding an instance of Test to it. 1519 public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception { 1520 Interfaces args = Geth.newInterfaces(0); 1521 String bytecode = BYTECODE; 1522 1523 1524 return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args)); 1525 } 1526 1527 // Internal constructor used by contract deployment. 1528 private Test(BoundContract deployment) { 1529 this.Address = deployment.getAddress(); 1530 this.Deployer = deployment.getDeployer(); 1531 this.Contract = deployment; 1532 } 1533 1534 1535 // Ethereum address where this contract is located at. 1536 public final Address Address; 1537 1538 // Ethereum transaction in which this contract was deployed (if known!). 1539 public final Transaction Deployer; 1540 1541 // Contract instance bound to a blockchain address. 1542 private final BoundContract Contract; 1543 1544 // Creates a new instance of Test, bound to a specific deployed contract. 1545 public Test(Address address, EthereumClient client) throws Exception { 1546 this(Geth.bindContract(address, ABI, client)); 1547 } 1548 1549 1550 1551 1552 // setAddress is a paid mutator transaction binding the contract method 0xe30081a0. 1553 // 1554 // Solidity: function setAddress(address a) returns(address) 1555 public Transaction setAddress(TransactOpts opts, Address a) throws Exception { 1556 Interfaces args = Geth.newInterfaces(1); 1557 Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0); 1558 1559 return this.Contract.transact(opts, "setAddress" , args); 1560 } 1561 1562 // setAddressArray is a paid mutator transaction binding the contract method 0x151f5471. 1563 // 1564 // Solidity: function setAddressArray(address[2] a_a) returns(address[2]) 1565 public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception { 1566 Interfaces args = Geth.newInterfaces(1); 1567 Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0); 1568 1569 return this.Contract.transact(opts, "setAddressArray" , args); 1570 } 1571 1572 // setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e. 1573 // 1574 // Solidity: function setAddressList(address[] a_l) returns(address[]) 1575 public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception { 1576 Interfaces args = Geth.newInterfaces(1); 1577 Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0); 1578 1579 return this.Contract.transact(opts, "setAddressList" , args); 1580 } 1581 1582 // setBool is a paid mutator transaction binding the contract method 0x1e26fd33. 1583 // 1584 // Solidity: function setBool(bool b) returns(bool) 1585 public Transaction setBool(TransactOpts opts, boolean b) throws Exception { 1586 Interfaces args = Geth.newInterfaces(1); 1587 Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0); 1588 1589 return this.Contract.transact(opts, "setBool" , args); 1590 } 1591 1592 // setBoolArray is a paid mutator transaction binding the contract method 0x118a9718. 1593 // 1594 // Solidity: function setBoolArray(bool[2] b_a) returns(bool[2]) 1595 public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception { 1596 Interfaces args = Geth.newInterfaces(1); 1597 Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0); 1598 1599 return this.Contract.transact(opts, "setBoolArray" , args); 1600 } 1601 1602 // setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da. 1603 // 1604 // Solidity: function setBoolList(bool[] b_l) returns(bool[]) 1605 public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception { 1606 Interfaces args = Geth.newInterfaces(1); 1607 Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0); 1608 1609 return this.Contract.transact(opts, "setBoolList" , args); 1610 } 1611 1612 // setBytes is a paid mutator transaction binding the contract method 0xda359dc8. 1613 // 1614 // Solidity: function setBytes(bytes bs) returns(bytes) 1615 public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception { 1616 Interfaces args = Geth.newInterfaces(1); 1617 Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0); 1618 1619 return this.Contract.transact(opts, "setBytes" , args); 1620 } 1621 1622 // setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3. 1623 // 1624 // Solidity: function setBytes1(bytes1 b1) returns(bytes1) 1625 public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception { 1626 Interfaces args = Geth.newInterfaces(1); 1627 Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0); 1628 1629 return this.Contract.transact(opts, "setBytes1" , args); 1630 } 1631 1632 // setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73. 1633 // 1634 // Solidity: function setBytes32(bytes32 b32) returns(bytes32) 1635 public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception { 1636 Interfaces args = Geth.newInterfaces(1); 1637 Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0); 1638 1639 return this.Contract.transact(opts, "setBytes32" , args); 1640 } 1641 1642 // setBytesArray is a paid mutator transaction binding the contract method 0x5119655d. 1643 // 1644 // Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2]) 1645 public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception { 1646 Interfaces args = Geth.newInterfaces(1); 1647 Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0); 1648 1649 return this.Contract.transact(opts, "setBytesArray" , args); 1650 } 1651 1652 // setBytesList is a paid mutator transaction binding the contract method 0x16c105e2. 1653 // 1654 // Solidity: function setBytesList(bytes[] bs_l) returns(bytes[]) 1655 public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception { 1656 Interfaces args = Geth.newInterfaces(1); 1657 Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0); 1658 1659 return this.Contract.transact(opts, "setBytesList" , args); 1660 } 1661 1662 // setInt16 is a paid mutator transaction binding the contract method 0x86114cea. 1663 // 1664 // Solidity: function setInt16(int16 i16) returns(int16) 1665 public Transaction setInt16(TransactOpts opts, short i16) throws Exception { 1666 Interfaces args = Geth.newInterfaces(1); 1667 Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0); 1668 1669 return this.Contract.transact(opts, "setInt16" , args); 1670 } 1671 1672 // setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e. 1673 // 1674 // Solidity: function setInt256(int256 i256) returns(int256) 1675 public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception { 1676 Interfaces args = Geth.newInterfaces(1); 1677 Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0); 1678 1679 return this.Contract.transact(opts, "setInt256" , args); 1680 } 1681 1682 // setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc. 1683 // 1684 // Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2]) 1685 public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception { 1686 Interfaces args = Geth.newInterfaces(1); 1687 Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0); 1688 1689 return this.Contract.transact(opts, "setInt256Array" , args); 1690 } 1691 1692 // setInt256List is a paid mutator transaction binding the contract method 0x22722302. 1693 // 1694 // Solidity: function setInt256List(int256[] i256_l) returns(int256[]) 1695 public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception { 1696 Interfaces args = Geth.newInterfaces(1); 1697 Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0); 1698 1699 return this.Contract.transact(opts, "setInt256List" , args); 1700 } 1701 1702 // setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31. 1703 // 1704 // Solidity: function setInt32(int32 i32) returns(int32) 1705 public Transaction setInt32(TransactOpts opts, int i32) throws Exception { 1706 Interfaces args = Geth.newInterfaces(1); 1707 Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0); 1708 1709 return this.Contract.transact(opts, "setInt32" , args); 1710 } 1711 1712 // setInt64 is a paid mutator transaction binding the contract method 0xe673eb32. 1713 // 1714 // Solidity: function setInt64(int64 i64) returns(int64) 1715 public Transaction setInt64(TransactOpts opts, long i64) throws Exception { 1716 Interfaces args = Geth.newInterfaces(1); 1717 Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0); 1718 1719 return this.Contract.transact(opts, "setInt64" , args); 1720 } 1721 1722 // setInt8 is a paid mutator transaction binding the contract method 0x9a19a953. 1723 // 1724 // Solidity: function setInt8(int8 i8) returns(int8) 1725 public Transaction setInt8(TransactOpts opts, byte i8) throws Exception { 1726 Interfaces args = Geth.newInterfaces(1); 1727 Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0); 1728 1729 return this.Contract.transact(opts, "setInt8" , args); 1730 } 1731 1732 // setString is a paid mutator transaction binding the contract method 0x7fcaf666. 1733 // 1734 // Solidity: function setString(string s) returns(string) 1735 public Transaction setString(TransactOpts opts, String s) throws Exception { 1736 Interfaces args = Geth.newInterfaces(1); 1737 Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0); 1738 1739 return this.Contract.transact(opts, "setString" , args); 1740 } 1741 1742 // setStringArray is a paid mutator transaction binding the contract method 0x7173b695. 1743 // 1744 // Solidity: function setStringArray(string[2] s_a) returns(string[2]) 1745 public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception { 1746 Interfaces args = Geth.newInterfaces(1); 1747 Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0); 1748 1749 return this.Contract.transact(opts, "setStringArray" , args); 1750 } 1751 1752 // setStringList is a paid mutator transaction binding the contract method 0xc5777961. 1753 // 1754 // Solidity: function setStringList(string[] s_l) returns(string[]) 1755 public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception { 1756 Interfaces args = Geth.newInterfaces(1); 1757 Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0); 1758 1759 return this.Contract.transact(opts, "setStringList" , args); 1760 } 1761 1762 // setUint16 is a paid mutator transaction binding the contract method 0x0477988a. 1763 // 1764 // Solidity: function setUint16(uint16 u16) returns(uint16) 1765 public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception { 1766 Interfaces args = Geth.newInterfaces(1); 1767 Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0); 1768 1769 return this.Contract.transact(opts, "setUint16" , args); 1770 } 1771 1772 // setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5. 1773 // 1774 // Solidity: function setUint256(uint256 u256) returns(uint256) 1775 public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception { 1776 Interfaces args = Geth.newInterfaces(1); 1777 Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0); 1778 1779 return this.Contract.transact(opts, "setUint256" , args); 1780 } 1781 1782 // setUint256Array is a paid mutator transaction binding the contract method 0x2766a755. 1783 // 1784 // Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2]) 1785 public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception { 1786 Interfaces args = Geth.newInterfaces(1); 1787 Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0); 1788 1789 return this.Contract.transact(opts, "setUint256Array" , args); 1790 } 1791 1792 // setUint256List is a paid mutator transaction binding the contract method 0xa0709e19. 1793 // 1794 // Solidity: function setUint256List(uint256[] u256_l) returns(uint256[]) 1795 public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception { 1796 Interfaces args = Geth.newInterfaces(1); 1797 Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0); 1798 1799 return this.Contract.transact(opts, "setUint256List" , args); 1800 } 1801 1802 // setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2. 1803 // 1804 // Solidity: function setUint32(uint32 u32) returns(uint32) 1805 public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception { 1806 Interfaces args = Geth.newInterfaces(1); 1807 Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0); 1808 1809 return this.Contract.transact(opts, "setUint32" , args); 1810 } 1811 1812 // setUint64 is a paid mutator transaction binding the contract method 0x822cba69. 1813 // 1814 // Solidity: function setUint64(uint64 u64) returns(uint64) 1815 public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception { 1816 Interfaces args = Geth.newInterfaces(1); 1817 Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0); 1818 1819 return this.Contract.transact(opts, "setUint64" , args); 1820 } 1821 1822 // setUint8 is a paid mutator transaction binding the contract method 0x1774e646. 1823 // 1824 // Solidity: function setUint8(uint8 u8) returns(uint8) 1825 public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception { 1826 Interfaces args = Geth.newInterfaces(1); 1827 Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0); 1828 1829 return this.Contract.transact(opts, "setUint8" , args); 1830 } 1831 1832 } 1833 1834 `, 1835 }, 1836 } 1837 for i, c := range cases { 1838 binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil) 1839 if err != nil { 1840 t.Fatalf("test %d: failed to generate binding: %v", i, err) 1841 } 1842 if binding != c.expected { 1843 t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected) 1844 } 1845 } 1846 }