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