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