github.com/CommerciumBlockchain/go-commercium@v0.0.0-20220709212705-b46438a77516/accounts/abi/bind/bind_test.go (about)

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