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