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