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