github.com/klaytn/klaytn@v1.10.2/accounts/abi/bind/bind_test.go (about)

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