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