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