github.com/p202io/bor@v0.1.4/accounts/abi/bind/bind_test.go (about)

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