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