github.com/intfoundation/intchain@v0.0.0-20220727031208-4316ad31ca73/accounts/abi/bind/bind_test.go (about)

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