// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package channel

import (
	"math/big"
	"strings"

	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)

// Reference imports to suppress errors if they are not otherwise used.
var (
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)

// LedgerChannelABI is the input ABI used to generate the binding from.
const LedgerChannelABI = "[]"

// LedgerChannelBin is the compiled bytecode used for deploying new contracts.
var LedgerChannelBin = "0x6110b4610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610132576000357c010000000000000000000000000000000000000000000000000000000090048063b80ddf7e116100c9578063c46dd9dd11610098578063c46dd9dd146104a1578063c814d28e146104ee578063c8ed149e1461050b578063d6b89e3a146105bb578063d7db65ce146105d857610132565b8063b80ddf7e146103ff578063bcdf4ebb1461041c578063c2c3f21f14610439578063c2f8816b1461045657610132565b806377ffc6231161010557806377ffc6231461020d5780638970f8a51461022a57806396a3c57f14610247578063b3253127146102cb57610132565b806312bb8c81146101375780631fd4a9c214610178578063418ec101146101b1578063565aebdb146101e0575b600080fd5b6101546004803603602081101561014d57600080fd5b50356105f5565b6040518082600281111561016457fe5b60ff16815260200191505060405180910390f35b6101956004803603602081101561018e57600080fd5b50356105ff565b60408051600160a060020a039092168252519081900360200190f35b6101ce600480360360208110156101c757600080fd5b5035610614565b60408051918252519081900360200190f35b6101fd600480360360208110156101f657600080fd5b5035610618565b6040518082600481111561016457fe5b6101ce6004803603602081101561022357600080fd5b5035610622565b6101956004803603602081101561024057600080fd5b5035610629565b6102646004803603602081101561025d57600080fd5b503561063e565b6040518083600260200280838360005b8381101561028c578181015183820152602001610274565b5050505090500182600260200280838360005b838110156102b757818101518382015260200161029f565b505050509050019250505060405180910390f35b6102e8600480360360208110156102e157600080fd5b503561076d565b6040518087600260200280838360005b838110156103105781810151838201526020016102f8565b5050505090500186600260200280838360005b8381101561033b578181015183820152602001610323565b5050505090500185600260200280838360005b8381101561036657818101518382015260200161034e565b5050505090500184600260200280838360005b83811015610391578181015183820152602001610379565b5050505090500183600260200280838360005b838110156103bc5781810151838201526020016103a4565b5050505090500182600260200280838360005b838110156103e75781810151838201526020016103cf565b50505050905001965050505050505060405180910390f35b6101ce6004803603602081101561041557600080fd5b5035610932565b6102646004803603602081101561043257600080fd5b5035610939565b6102646004803603602081101561044f57600080fd5b5035610a6e565b6104736004803603602081101561046c57600080fd5b5035610b9d565b604080519485526020850193909352600160a060020a03909116838301526060830152519081900360800190f35b6104be600480360360208110156104b757600080fd5b5035610be8565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b6102646004803603602081101561050457600080fd5b5035610c42565b6105286004803603602081101561052157600080fd5b5035610d6d565b6040518084600260200280838360005b83811015610550578181015183820152602001610538565b5050505090500183600260200280838360005b8381101561057b578181015183820152602001610563565b5050505090500182600260200280838360005b838110156105a657818101518382015260200161058e565b50505050905001935050505060405180910390f35b6101ce600480360360208110156105d157600080fd5b5035610e09565b610264600480360360208110156105ee57600080fd5b5035610e4d565b6002015460ff1690565b600201546101009004600160a060020a031690565b5490565b6003015460ff1690565b6014015490565b600301546101009004600160a060020a031690565b610646610fa3565b61064e610fa3565b610656610fc1565b604080518082019091526004850160026000835b828210156106fa5760408051608080820183526008850287018054600160a060020a03168352600180820154602080860191909152600283015485870152855160a08101875260038401548152600484015481830152600584015496810196909652600683015460608781019190915260079093015493860193909352908301939093529083529201910161066a565b50505050905060405180604001604052808260006002811061071857fe5b6020908102919091015151600160a060020a0390811683528482018051519091169282019290925260408051808201909152935160609081015181015185529151820151909101519083015294909350915050565b610775610fa3565b61077d610fa3565b610785610fa3565b61078d610fa3565b610795610fa3565b61079d610fa3565b6107a5610fc1565b604080518082019091526004890160026000835b828210156108495760408051608080820183526008850287018054600160a060020a03168352600180820154602080860191909152600283015485870152855160a0810187526003840154815260048401548183015260058401549681019690965260068301546060878101919091526007909301549386019390935290830193909352908352920191016107b9565b50505050905060405180604001604052808260006002811061086757fe5b6020908102919091015151600160a060020a03908116835284820180515190911692820192909252604080518082018252855183015181528351830151818401528151808301835286518301518152845183015181850152825180840184528751606090810151518252865181015151828701528451808601865289518201518701518152875182015187015181880152855180870190965298518101516080908101518652965101519095015193830193909352939c939b50909950909750919550909350915050565b6001015490565b610941610fa3565b610949610fa3565b610951610fc1565b604080518082019091526004850160026000835b828210156109f55760408051608080820183526008850287018054600160a060020a03168352600180820154602080860191909152600283015485870152855160a081018752600384015481526004840154818301526005840154968101969096526006830154606087810191909152600790930154938601939093529083019390935290835292019101610965565b505050509050604051806040016040528082600060028110610a1357fe5b6020908102919091015151600160a060020a0390811683528482015151169181019190915260408051808201909152835160600151608001518152908101836001602002015160600151608001518152509250925050915091565b610a76610fa3565b610a7e610fa3565b610a86610fc1565b604080518082019091526004850160026000835b82821015610b2a5760408051608080820183526008850287018054600160a060020a03168352600180820154602080860191909152600283015485870152855160a081018752600384015481526004840154818301526005840154968101969096526006830154606087810191909152600790930154938601939093529083019390935290835292019101610a9a565b505050509050604051806040016040528082600060028110610b4857fe5b6020908102919091015151600160a060020a0390811683528482018051519091169282019290925260408051808201909152935160609081015182015185529151909101518101519083015294909350915050565b60018101546002808301546000928392839283929160ff90911690811115610bc157fe5b6002870154601490970154919790966101009004600160a060020a03169550909350915050565b600080600080610bf6610fef565b5050604080516080810182526015860154600160a060020a0316808252601687015460208301819052601788015493830184905260189097015460609092018290529691945092509050565b610c4a610fa3565b610c52610fa3565b610c5a610fc1565b604080518082019091526004850160026000835b82821015610cfe5760408051608080820183526008850287018054600160a060020a03168352600180820154602080860191909152600283015485870152855160a081018752600384015481526004840154818301526005840154968101969096526006830154606087810191909152600790930154938601939093529083019390935290835292019101610c6e565b505050509050604051806040016040528082600060028110610d1c57fe5b6020908102919091015151600160a060020a03908116835284820180515190911692820192909252604080518082019091529351606090810151518552915190910151519083015294909350915050565b610d75610fa3565b610d7d610fa3565b610d85610fa3565b610d8d610fa3565b50604080518082019091526004850154600160a060020a039081168252600c860154166020820152610dbd610fa3565b506040805180820190915260058601548152600d8601546020820152610de1610fa3565b506040805180820190915260068701548152600e909601546020870152909590949350915050565b600e8101546006820154600d83015460058401546000938493610e46939192610e3a9283919063ffffffff610f7c16565b9063ffffffff610f8e16565b9392505050565b610e55610fa3565b610e5d610fa3565b610e65610fc1565b604080518082019091526004850160026000835b82821015610f095760408051608080820183526008850287018054600160a060020a03168352600180820154602080860191909152600283015485870152855160a081018752600384015481526004840154818301526005840154968101969096526006830154606087810191909152600790930154938601939093529083019390935290835292019101610e79565b505050509050604051806040016040528082600060028110610f2757fe5b6020908102919091015151600160a060020a0390811683528482018051519091169282019290925260408051808201825294516060908101518201518652925190920151909101519083015294909350915050565b600082820183811015610e4657600080fd5b600082821115610f9d57600080fd5b50900390565b60405180604001604052806002906020820280388339509192915050565b6040518061020001604052806002905b610fd9611016565b815260200190600190039081610fd15790505090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040518061010001604052806000600160a060020a03168152602001600081526020016000815260200161104861104d565b905290565b6040518060a001604052806000815260200160008152602001600080191681526020016000815260200160008152509056fea265627a7a723058205368bd507d406fbf5818770d7086ab582bcdb4dd8509122bfca812d42906725f64736f6c634300050a0032"

// DeployLedgerChannel deploys a new Ethereum contract, binding an instance of LedgerChannel to it.
func DeployLedgerChannel(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LedgerChannel, error) {
	parsed, err := abi.JSON(strings.NewReader(LedgerChannelABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}

	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(LedgerChannelBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &LedgerChannel{LedgerChannelCaller: LedgerChannelCaller{contract: contract}, LedgerChannelTransactor: LedgerChannelTransactor{contract: contract}, LedgerChannelFilterer: LedgerChannelFilterer{contract: contract}}, nil
}

// LedgerChannel is an auto generated Go binding around an Ethereum contract.
type LedgerChannel struct {
	LedgerChannelCaller     // Read-only binding to the contract
	LedgerChannelTransactor // Write-only binding to the contract
	LedgerChannelFilterer   // Log filterer for contract events
}

// LedgerChannelCaller is an auto generated read-only Go binding around an Ethereum contract.
type LedgerChannelCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LedgerChannelTransactor is an auto generated write-only Go binding around an Ethereum contract.
type LedgerChannelTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LedgerChannelFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type LedgerChannelFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LedgerChannelSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type LedgerChannelSession struct {
	Contract     *LedgerChannel    // Generic contract binding to set the session for
	CallOpts     bind.CallOpts     // Call options to use throughout this session
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// LedgerChannelCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type LedgerChannelCallerSession struct {
	Contract *LedgerChannelCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts        // Call options to use throughout this session
}

// LedgerChannelTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type LedgerChannelTransactorSession struct {
	Contract     *LedgerChannelTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
}

// LedgerChannelRaw is an auto generated low-level Go binding around an Ethereum contract.
type LedgerChannelRaw struct {
	Contract *LedgerChannel // Generic contract binding to access the raw methods on
}

// LedgerChannelCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type LedgerChannelCallerRaw struct {
	Contract *LedgerChannelCaller // Generic read-only contract binding to access the raw methods on
}

// LedgerChannelTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type LedgerChannelTransactorRaw struct {
	Contract *LedgerChannelTransactor // Generic write-only contract binding to access the raw methods on
}

// NewLedgerChannel creates a new instance of LedgerChannel, bound to a specific deployed contract.
func NewLedgerChannel(address common.Address, backend bind.ContractBackend) (*LedgerChannel, error) {
	contract, err := bindLedgerChannel(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &LedgerChannel{LedgerChannelCaller: LedgerChannelCaller{contract: contract}, LedgerChannelTransactor: LedgerChannelTransactor{contract: contract}, LedgerChannelFilterer: LedgerChannelFilterer{contract: contract}}, nil
}

// NewLedgerChannelCaller creates a new read-only instance of LedgerChannel, bound to a specific deployed contract.
func NewLedgerChannelCaller(address common.Address, caller bind.ContractCaller) (*LedgerChannelCaller, error) {
	contract, err := bindLedgerChannel(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &LedgerChannelCaller{contract: contract}, nil
}

// NewLedgerChannelTransactor creates a new write-only instance of LedgerChannel, bound to a specific deployed contract.
func NewLedgerChannelTransactor(address common.Address, transactor bind.ContractTransactor) (*LedgerChannelTransactor, error) {
	contract, err := bindLedgerChannel(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &LedgerChannelTransactor{contract: contract}, nil
}

// NewLedgerChannelFilterer creates a new log filterer instance of LedgerChannel, bound to a specific deployed contract.
func NewLedgerChannelFilterer(address common.Address, filterer bind.ContractFilterer) (*LedgerChannelFilterer, error) {
	contract, err := bindLedgerChannel(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &LedgerChannelFilterer{contract: contract}, nil
}

// bindLedgerChannel binds a generic wrapper to an already deployed contract.
func bindLedgerChannel(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(LedgerChannelABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_LedgerChannel *LedgerChannelRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _LedgerChannel.Contract.LedgerChannelCaller.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_LedgerChannel *LedgerChannelRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LedgerChannel.Contract.LedgerChannelTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LedgerChannel *LedgerChannelRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LedgerChannel.Contract.LedgerChannelTransactor.contract.Transact(opts, method, params...)
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_LedgerChannel *LedgerChannelCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _LedgerChannel.Contract.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_LedgerChannel *LedgerChannelTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LedgerChannel.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LedgerChannel *LedgerChannelTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LedgerChannel.Contract.contract.Transact(opts, method, params...)
}
