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