github.com/aigarnetwork/aigar@v0.0.0-20191115204914-d59a6eb70f8e/accounts/abi/bind/bind_test.go (about)

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