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