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