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