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