github.com/benorgera/go-ethereum@v1.10.18-0.20220401011646-b3f57b1a73ba/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 name: `ConstructorWithStructParam`, 1916 contract: ` 1917 pragma solidity >=0.8.0 <0.9.0; 1918 1919 contract ConstructorWithStructParam { 1920 struct StructType { 1921 uint256 field; 1922 } 1923 1924 constructor(StructType memory st) {} 1925 } 1926 `, 1927 bytecode: []string{`0x608060405234801561001057600080fd5b506040516101c43803806101c48339818101604052810190610032919061014a565b50610177565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100958261004c565b810181811067ffffffffffffffff821117156100b4576100b361005d565b5b80604052505050565b60006100c7610038565b90506100d3828261008c565b919050565b6000819050919050565b6100eb816100d8565b81146100f657600080fd5b50565b600081519050610108816100e2565b92915050565b60006020828403121561012457610123610047565b5b61012e60206100bd565b9050600061013e848285016100f9565b60008301525092915050565b6000602082840312156101605761015f610042565b5b600061016e8482850161010e565b91505092915050565b603f806101856000396000f3fe6080604052600080fdfea2646970667358221220cdffa667affecefac5561f65f4a4ba914204a8d4eb859d8cd426fb306e5c12a364736f6c634300080a0033`}, 1928 abi: []string{`[{"inputs":[{"components":[{"internalType":"uint256","name":"field","type":"uint256"}],"internalType":"struct ConstructorWithStructParam.StructType","name":"st","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"}]`}, 1929 imports: ` 1930 "math/big" 1931 1932 "github.com/ethereum/go-ethereum/accounts/abi/bind" 1933 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 1934 "github.com/ethereum/go-ethereum/core" 1935 "github.com/ethereum/go-ethereum/crypto" 1936 "github.com/ethereum/go-ethereum/eth/ethconfig" 1937 `, 1938 tester: ` 1939 var ( 1940 key, _ = crypto.GenerateKey() 1941 user, _ = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337)) 1942 sim = backends.NewSimulatedBackend(core.GenesisAlloc{user.From: {Balance: big.NewInt(1000000000000000000)}}, ethconfig.Defaults.Miner.GasCeil) 1943 ) 1944 defer sim.Close() 1945 1946 _, tx, _, err := DeployConstructorWithStructParam(user, sim, ConstructorWithStructParamStructType{Field: big.NewInt(42)}) 1947 if err != nil { 1948 t.Fatalf("DeployConstructorWithStructParam() got err %v; want nil err", err) 1949 } 1950 sim.Commit() 1951 1952 if _, err = bind.WaitDeployed(nil, sim, tx); err != nil { 1953 t.Logf("Deployment tx: %+v", tx) 1954 t.Errorf("bind.WaitDeployed(nil, %T, <deployment tx>) got err %v; want nil err", sim, err) 1955 } 1956 `, 1957 }, 1958 } 1959 1960 // Tests that packages generated by the binder can be successfully compiled and 1961 // the requested tester run against it. 1962 func TestGolangBindings(t *testing.T) { 1963 // Skip the test if no Go command can be found 1964 gocmd := runtime.GOROOT() + "/bin/go" 1965 if !common.FileExist(gocmd) { 1966 t.Skip("go sdk not found for testing") 1967 } 1968 // Create a temporary workspace for the test suite 1969 ws, err := ioutil.TempDir("", "binding-test") 1970 if err != nil { 1971 t.Fatalf("failed to create temporary workspace: %v", err) 1972 } 1973 //defer os.RemoveAll(ws) 1974 1975 pkg := filepath.Join(ws, "bindtest") 1976 if err = os.MkdirAll(pkg, 0700); err != nil { 1977 t.Fatalf("failed to create package: %v", err) 1978 } 1979 // Generate the test suite for all the contracts 1980 for i, tt := range bindTests { 1981 t.Run(tt.name, func(t *testing.T) { 1982 var types []string 1983 if tt.types != nil { 1984 types = tt.types 1985 } else { 1986 types = []string{tt.name} 1987 } 1988 // Generate the binding and create a Go source file in the workspace 1989 bind, err := Bind(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs, tt.aliases) 1990 if err != nil { 1991 t.Fatalf("test %d: failed to generate binding: %v", i, err) 1992 } 1993 if err = ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil { 1994 t.Fatalf("test %d: failed to write binding: %v", i, err) 1995 } 1996 // Generate the test file with the injected test code 1997 code := fmt.Sprintf(` 1998 package bindtest 1999 2000 import ( 2001 "testing" 2002 %s 2003 ) 2004 2005 func Test%s(t *testing.T) { 2006 %s 2007 } 2008 `, tt.imports, tt.name, tt.tester) 2009 if err := ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil { 2010 t.Fatalf("test %d: failed to write tests: %v", i, err) 2011 } 2012 }) 2013 } 2014 // Convert the package to go modules and use the current source for go-ethereum 2015 moder := exec.Command(gocmd, "mod", "init", "bindtest") 2016 moder.Dir = pkg 2017 if out, err := moder.CombinedOutput(); err != nil { 2018 t.Fatalf("failed to convert binding test to modules: %v\n%s", err, out) 2019 } 2020 pwd, _ := os.Getwd() 2021 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 2022 replacer.Dir = pkg 2023 if out, err := replacer.CombinedOutput(); err != nil { 2024 t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out) 2025 } 2026 tidier := exec.Command(gocmd, "mod", "tidy") 2027 tidier.Dir = pkg 2028 if out, err := tidier.CombinedOutput(); err != nil { 2029 t.Fatalf("failed to tidy Go module file: %v\n%s", err, out) 2030 } 2031 // Test the entire package and report any failures 2032 cmd := exec.Command(gocmd, "test", "-v", "-count", "1") 2033 cmd.Dir = pkg 2034 if out, err := cmd.CombinedOutput(); err != nil { 2035 t.Fatalf("failed to run binding test: %v\n%s", err, out) 2036 } 2037 } 2038 2039 // Tests that java binding generated by the binder is exactly matched. 2040 func TestJavaBindings(t *testing.T) { 2041 var cases = []struct { 2042 name string 2043 contract string 2044 abi string 2045 bytecode string 2046 expected string 2047 }{ 2048 { 2049 "test", 2050 ` 2051 pragma experimental ABIEncoderV2; 2052 pragma solidity ^0.5.2; 2053 2054 contract test { 2055 function setAddress(address a) public returns(address){} 2056 function setAddressList(address[] memory a_l) public returns(address[] memory){} 2057 function setAddressArray(address[2] memory a_a) public returns(address[2] memory){} 2058 2059 function setUint8(uint8 u8) public returns(uint8){} 2060 function setUint16(uint16 u16) public returns(uint16){} 2061 function setUint32(uint32 u32) public returns(uint32){} 2062 function setUint64(uint64 u64) public returns(uint64){} 2063 function setUint256(uint256 u256) public returns(uint256){} 2064 function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){} 2065 function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){} 2066 2067 function setInt8(int8 i8) public returns(int8){} 2068 function setInt16(int16 i16) public returns(int16){} 2069 function setInt32(int32 i32) public returns(int32){} 2070 function setInt64(int64 i64) public returns(int64){} 2071 function setInt256(int256 i256) public returns(int256){} 2072 function setInt256List(int256[] memory i256_l) public returns(int256[] memory){} 2073 function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){} 2074 2075 function setBytes1(bytes1 b1) public returns(bytes1) {} 2076 function setBytes32(bytes32 b32) public returns(bytes32) {} 2077 function setBytes(bytes memory bs) public returns(bytes memory) {} 2078 function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {} 2079 function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {} 2080 2081 function setString(string memory s) public returns(string memory) {} 2082 function setStringList(string[] memory s_l) public returns(string[] memory) {} 2083 function setStringArray(string[2] memory s_a) public returns(string[2] memory) {} 2084 2085 function setBool(bool b) public returns(bool) {} 2086 function setBoolList(bool[] memory b_l) public returns(bool[] memory) {} 2087 function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {} 2088 }`, 2089 `[{"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"}]`, 2090 `608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`, 2091 ` 2092 // This file is an automatically generated Java binding. Do not modify as any 2093 // change will likely be lost upon the next re-generation! 2094 2095 package bindtest; 2096 2097 import org.ethereum.geth.*; 2098 import java.util.*; 2099 2100 public class Test { 2101 // ABI is the input ABI used to generate the binding from. 2102 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\"}]"; 2103 2104 // BYTECODE is the compiled bytecode used for deploying new contracts. 2105 public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037"; 2106 2107 // deploy deploys a new Ethereum contract, binding an instance of Test to it. 2108 public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception { 2109 Interfaces args = Geth.newInterfaces(0); 2110 String bytecode = BYTECODE; 2111 return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args)); 2112 } 2113 2114 // Internal constructor used by contract deployment. 2115 private Test(BoundContract deployment) { 2116 this.Address = deployment.getAddress(); 2117 this.Deployer = deployment.getDeployer(); 2118 this.Contract = deployment; 2119 } 2120 2121 // Ethereum address where this contract is located at. 2122 public final Address Address; 2123 2124 // Ethereum transaction in which this contract was deployed (if known!). 2125 public final Transaction Deployer; 2126 2127 // Contract instance bound to a blockchain address. 2128 private final BoundContract Contract; 2129 2130 // Creates a new instance of Test, bound to a specific deployed contract. 2131 public Test(Address address, EthereumClient client) throws Exception { 2132 this(Geth.bindContract(address, ABI, client)); 2133 } 2134 2135 // setAddress is a paid mutator transaction binding the contract method 0xe30081a0. 2136 // 2137 // Solidity: function setAddress(address a) returns(address) 2138 public Transaction setAddress(TransactOpts opts, Address a) throws Exception { 2139 Interfaces args = Geth.newInterfaces(1); 2140 Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0); 2141 2142 return this.Contract.transact(opts, "setAddress" , args); 2143 } 2144 2145 // setAddressArray is a paid mutator transaction binding the contract method 0x151f5471. 2146 // 2147 // Solidity: function setAddressArray(address[2] a_a) returns(address[2]) 2148 public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception { 2149 Interfaces args = Geth.newInterfaces(1); 2150 Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0); 2151 2152 return this.Contract.transact(opts, "setAddressArray" , args); 2153 } 2154 2155 // setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e. 2156 // 2157 // Solidity: function setAddressList(address[] a_l) returns(address[]) 2158 public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception { 2159 Interfaces args = Geth.newInterfaces(1); 2160 Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0); 2161 2162 return this.Contract.transact(opts, "setAddressList" , args); 2163 } 2164 2165 // setBool is a paid mutator transaction binding the contract method 0x1e26fd33. 2166 // 2167 // Solidity: function setBool(bool b) returns(bool) 2168 public Transaction setBool(TransactOpts opts, boolean b) throws Exception { 2169 Interfaces args = Geth.newInterfaces(1); 2170 Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0); 2171 2172 return this.Contract.transact(opts, "setBool" , args); 2173 } 2174 2175 // setBoolArray is a paid mutator transaction binding the contract method 0x118a9718. 2176 // 2177 // Solidity: function setBoolArray(bool[2] b_a) returns(bool[2]) 2178 public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception { 2179 Interfaces args = Geth.newInterfaces(1); 2180 Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0); 2181 2182 return this.Contract.transact(opts, "setBoolArray" , args); 2183 } 2184 2185 // setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da. 2186 // 2187 // Solidity: function setBoolList(bool[] b_l) returns(bool[]) 2188 public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception { 2189 Interfaces args = Geth.newInterfaces(1); 2190 Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0); 2191 2192 return this.Contract.transact(opts, "setBoolList" , args); 2193 } 2194 2195 // setBytes is a paid mutator transaction binding the contract method 0xda359dc8. 2196 // 2197 // Solidity: function setBytes(bytes bs) returns(bytes) 2198 public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception { 2199 Interfaces args = Geth.newInterfaces(1); 2200 Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0); 2201 2202 return this.Contract.transact(opts, "setBytes" , args); 2203 } 2204 2205 // setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3. 2206 // 2207 // Solidity: function setBytes1(bytes1 b1) returns(bytes1) 2208 public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception { 2209 Interfaces args = Geth.newInterfaces(1); 2210 Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0); 2211 2212 return this.Contract.transact(opts, "setBytes1" , args); 2213 } 2214 2215 // setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73. 2216 // 2217 // Solidity: function setBytes32(bytes32 b32) returns(bytes32) 2218 public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception { 2219 Interfaces args = Geth.newInterfaces(1); 2220 Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0); 2221 2222 return this.Contract.transact(opts, "setBytes32" , args); 2223 } 2224 2225 // setBytesArray is a paid mutator transaction binding the contract method 0x5119655d. 2226 // 2227 // Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2]) 2228 public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception { 2229 Interfaces args = Geth.newInterfaces(1); 2230 Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0); 2231 2232 return this.Contract.transact(opts, "setBytesArray" , args); 2233 } 2234 2235 // setBytesList is a paid mutator transaction binding the contract method 0x16c105e2. 2236 // 2237 // Solidity: function setBytesList(bytes[] bs_l) returns(bytes[]) 2238 public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception { 2239 Interfaces args = Geth.newInterfaces(1); 2240 Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0); 2241 2242 return this.Contract.transact(opts, "setBytesList" , args); 2243 } 2244 2245 // setInt16 is a paid mutator transaction binding the contract method 0x86114cea. 2246 // 2247 // Solidity: function setInt16(int16 i16) returns(int16) 2248 public Transaction setInt16(TransactOpts opts, short i16) throws Exception { 2249 Interfaces args = Geth.newInterfaces(1); 2250 Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0); 2251 2252 return this.Contract.transact(opts, "setInt16" , args); 2253 } 2254 2255 // setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e. 2256 // 2257 // Solidity: function setInt256(int256 i256) returns(int256) 2258 public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception { 2259 Interfaces args = Geth.newInterfaces(1); 2260 Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0); 2261 2262 return this.Contract.transact(opts, "setInt256" , args); 2263 } 2264 2265 // setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc. 2266 // 2267 // Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2]) 2268 public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception { 2269 Interfaces args = Geth.newInterfaces(1); 2270 Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0); 2271 2272 return this.Contract.transact(opts, "setInt256Array" , args); 2273 } 2274 2275 // setInt256List is a paid mutator transaction binding the contract method 0x22722302. 2276 // 2277 // Solidity: function setInt256List(int256[] i256_l) returns(int256[]) 2278 public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception { 2279 Interfaces args = Geth.newInterfaces(1); 2280 Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0); 2281 2282 return this.Contract.transact(opts, "setInt256List" , args); 2283 } 2284 2285 // setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31. 2286 // 2287 // Solidity: function setInt32(int32 i32) returns(int32) 2288 public Transaction setInt32(TransactOpts opts, int i32) throws Exception { 2289 Interfaces args = Geth.newInterfaces(1); 2290 Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0); 2291 2292 return this.Contract.transact(opts, "setInt32" , args); 2293 } 2294 2295 // setInt64 is a paid mutator transaction binding the contract method 0xe673eb32. 2296 // 2297 // Solidity: function setInt64(int64 i64) returns(int64) 2298 public Transaction setInt64(TransactOpts opts, long i64) throws Exception { 2299 Interfaces args = Geth.newInterfaces(1); 2300 Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0); 2301 2302 return this.Contract.transact(opts, "setInt64" , args); 2303 } 2304 2305 // setInt8 is a paid mutator transaction binding the contract method 0x9a19a953. 2306 // 2307 // Solidity: function setInt8(int8 i8) returns(int8) 2308 public Transaction setInt8(TransactOpts opts, byte i8) throws Exception { 2309 Interfaces args = Geth.newInterfaces(1); 2310 Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0); 2311 2312 return this.Contract.transact(opts, "setInt8" , args); 2313 } 2314 2315 // setString is a paid mutator transaction binding the contract method 0x7fcaf666. 2316 // 2317 // Solidity: function setString(string s) returns(string) 2318 public Transaction setString(TransactOpts opts, String s) throws Exception { 2319 Interfaces args = Geth.newInterfaces(1); 2320 Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0); 2321 2322 return this.Contract.transact(opts, "setString" , args); 2323 } 2324 2325 // setStringArray is a paid mutator transaction binding the contract method 0x7173b695. 2326 // 2327 // Solidity: function setStringArray(string[2] s_a) returns(string[2]) 2328 public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception { 2329 Interfaces args = Geth.newInterfaces(1); 2330 Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0); 2331 2332 return this.Contract.transact(opts, "setStringArray" , args); 2333 } 2334 2335 // setStringList is a paid mutator transaction binding the contract method 0xc5777961. 2336 // 2337 // Solidity: function setStringList(string[] s_l) returns(string[]) 2338 public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception { 2339 Interfaces args = Geth.newInterfaces(1); 2340 Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0); 2341 2342 return this.Contract.transact(opts, "setStringList" , args); 2343 } 2344 2345 // setUint16 is a paid mutator transaction binding the contract method 0x0477988a. 2346 // 2347 // Solidity: function setUint16(uint16 u16) returns(uint16) 2348 public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception { 2349 Interfaces args = Geth.newInterfaces(1); 2350 Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0); 2351 2352 return this.Contract.transact(opts, "setUint16" , args); 2353 } 2354 2355 // setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5. 2356 // 2357 // Solidity: function setUint256(uint256 u256) returns(uint256) 2358 public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception { 2359 Interfaces args = Geth.newInterfaces(1); 2360 Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0); 2361 2362 return this.Contract.transact(opts, "setUint256" , args); 2363 } 2364 2365 // setUint256Array is a paid mutator transaction binding the contract method 0x2766a755. 2366 // 2367 // Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2]) 2368 public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception { 2369 Interfaces args = Geth.newInterfaces(1); 2370 Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0); 2371 2372 return this.Contract.transact(opts, "setUint256Array" , args); 2373 } 2374 2375 // setUint256List is a paid mutator transaction binding the contract method 0xa0709e19. 2376 // 2377 // Solidity: function setUint256List(uint256[] u256_l) returns(uint256[]) 2378 public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception { 2379 Interfaces args = Geth.newInterfaces(1); 2380 Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0); 2381 2382 return this.Contract.transact(opts, "setUint256List" , args); 2383 } 2384 2385 // setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2. 2386 // 2387 // Solidity: function setUint32(uint32 u32) returns(uint32) 2388 public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception { 2389 Interfaces args = Geth.newInterfaces(1); 2390 Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0); 2391 2392 return this.Contract.transact(opts, "setUint32" , args); 2393 } 2394 2395 // setUint64 is a paid mutator transaction binding the contract method 0x822cba69. 2396 // 2397 // Solidity: function setUint64(uint64 u64) returns(uint64) 2398 public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception { 2399 Interfaces args = Geth.newInterfaces(1); 2400 Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0); 2401 2402 return this.Contract.transact(opts, "setUint64" , args); 2403 } 2404 2405 // setUint8 is a paid mutator transaction binding the contract method 0x1774e646. 2406 // 2407 // Solidity: function setUint8(uint8 u8) returns(uint8) 2408 public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception { 2409 Interfaces args = Geth.newInterfaces(1); 2410 Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0); 2411 2412 return this.Contract.transact(opts, "setUint8" , args); 2413 } 2414 } 2415 `, 2416 }, 2417 } 2418 for i, c := range cases { 2419 binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil, nil) 2420 if err != nil { 2421 t.Fatalf("test %d: failed to generate binding: %v", i, err) 2422 } 2423 // Remove empty lines 2424 removeEmptys := func(input string) string { 2425 lines := strings.Split(input, "\n") 2426 var index int 2427 for _, line := range lines { 2428 if strings.TrimSpace(line) != "" { 2429 lines[index] = line 2430 index += 1 2431 } 2432 } 2433 lines = lines[:index] 2434 return strings.Join(lines, "\n") 2435 } 2436 binding = removeEmptys(binding) 2437 expect := removeEmptys(c.expected) 2438 if binding != expect { 2439 t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected) 2440 } 2441 } 2442 }