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