github.com/diadata-org/diadata@v1.4.593/pkg/dia/scraper/exchange-scrapers/curvefi/curvepool/curvepool.go (about)

     1  // Code generated - DO NOT EDIT.
     2  // This file is a generated binding and any manual changes will be lost.
     3  
     4  package curvepool
     5  
     6  import (
     7  	"math/big"
     8  	"strings"
     9  
    10  	ethereum "github.com/ethereum/go-ethereum"
    11  	"github.com/ethereum/go-ethereum/accounts/abi"
    12  	"github.com/ethereum/go-ethereum/accounts/abi/bind"
    13  	"github.com/ethereum/go-ethereum/common"
    14  	"github.com/ethereum/go-ethereum/core/types"
    15  	"github.com/ethereum/go-ethereum/event"
    16  )
    17  
    18  // Reference imports to suppress errors if they are not otherwise used.
    19  var (
    20  	_ = big.NewInt
    21  	_ = strings.NewReader
    22  	_ = ethereum.NotFound
    23  	_ = bind.Bind
    24  	_ = common.Big1
    25  	_ = types.BloomLookup
    26  	_ = event.NewSubscription
    27  )
    28  
    29  // CurvepoolABI is the input ABI used to generate the binding from.
    30  const CurvepoolABI = "[{\"name\":\"TokenExchange\",\"inputs\":[{\"type\":\"address\",\"name\":\"buyer\",\"indexed\":true},{\"type\":\"int128\",\"name\":\"sold_id\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"tokens_sold\",\"indexed\":false},{\"type\":\"int128\",\"name\":\"bought_id\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"tokens_bought\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"TokenExchangeUnderlying\",\"inputs\":[{\"type\":\"address\",\"name\":\"buyer\",\"indexed\":true},{\"type\":\"int128\",\"name\":\"sold_id\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"tokens_sold\",\"indexed\":false},{\"type\":\"int128\",\"name\":\"bought_id\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"tokens_bought\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"AddLiquidity\",\"inputs\":[{\"type\":\"address\",\"name\":\"provider\",\"indexed\":true},{\"type\":\"uint256[2]\",\"name\":\"token_amounts\",\"indexed\":false},{\"type\":\"uint256[2]\",\"name\":\"fees\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"invariant\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"token_supply\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"RemoveLiquidity\",\"inputs\":[{\"type\":\"address\",\"name\":\"provider\",\"indexed\":true},{\"type\":\"uint256[2]\",\"name\":\"token_amounts\",\"indexed\":false},{\"type\":\"uint256[2]\",\"name\":\"fees\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"token_supply\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"RemoveLiquidityImbalance\",\"inputs\":[{\"type\":\"address\",\"name\":\"provider\",\"indexed\":true},{\"type\":\"uint256[2]\",\"name\":\"token_amounts\",\"indexed\":false},{\"type\":\"uint256[2]\",\"name\":\"fees\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"invariant\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"token_supply\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"CommitNewAdmin\",\"inputs\":[{\"type\":\"uint256\",\"name\":\"deadline\",\"indexed\":true,\"unit\":\"sec\"},{\"type\":\"address\",\"name\":\"admin\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"NewAdmin\",\"inputs\":[{\"type\":\"address\",\"name\":\"admin\",\"indexed\":true}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"CommitNewParameters\",\"inputs\":[{\"type\":\"uint256\",\"name\":\"deadline\",\"indexed\":true,\"unit\":\"sec\"},{\"type\":\"uint256\",\"name\":\"A\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"fee\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"admin_fee\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"name\":\"NewParameters\",\"inputs\":[{\"type\":\"uint256\",\"name\":\"A\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"fee\",\"indexed\":false},{\"type\":\"uint256\",\"name\":\"admin_fee\",\"indexed\":false}],\"anonymous\":false,\"type\":\"event\"},{\"outputs\":[],\"inputs\":[{\"type\":\"address[2]\",\"name\":\"_coins\"},{\"type\":\"address[2]\",\"name\":\"_underlying_coins\"},{\"type\":\"address\",\"name\":\"_pool_token\"},{\"type\":\"uint256\",\"name\":\"_A\"},{\"type\":\"uint256\",\"name\":\"_fee\"}],\"constant\":false,\"payable\":false,\"type\":\"constructor\"},{\"name\":\"get_virtual_price\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":1084167},{\"name\":\"calc_token_amount\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"uint256[2]\",\"name\":\"amounts\"},{\"type\":\"bool\",\"name\":\"deposit\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":4239939},{\"name\":\"add_liquidity\",\"outputs\":[],\"inputs\":[{\"type\":\"uint256[2]\",\"name\":\"amounts\"},{\"type\":\"uint256\",\"name\":\"min_mint_amount\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":6479997},{\"name\":\"get_dy\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"i\"},{\"type\":\"int128\",\"name\":\"j\"},{\"type\":\"uint256\",\"name\":\"dx\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2543681},{\"name\":\"get_dx\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"i\"},{\"type\":\"int128\",\"name\":\"j\"},{\"type\":\"uint256\",\"name\":\"dy\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2543687},{\"name\":\"get_dy_underlying\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"i\"},{\"type\":\"int128\",\"name\":\"j\"},{\"type\":\"uint256\",\"name\":\"dx\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2543506},{\"name\":\"get_dx_underlying\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"i\"},{\"type\":\"int128\",\"name\":\"j\"},{\"type\":\"uint256\",\"name\":\"dy\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2543512},{\"name\":\"exchange\",\"outputs\":[],\"inputs\":[{\"type\":\"int128\",\"name\":\"i\"},{\"type\":\"int128\",\"name\":\"j\"},{\"type\":\"uint256\",\"name\":\"dx\"},{\"type\":\"uint256\",\"name\":\"min_dy\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":5184573},{\"name\":\"exchange_underlying\",\"outputs\":[],\"inputs\":[{\"type\":\"int128\",\"name\":\"i\"},{\"type\":\"int128\",\"name\":\"j\"},{\"type\":\"uint256\",\"name\":\"dx\"},{\"type\":\"uint256\",\"name\":\"min_dy\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":5200817},{\"name\":\"remove_liquidity\",\"outputs\":[],\"inputs\":[{\"type\":\"uint256\",\"name\":\"_amount\"},{\"type\":\"uint256[2]\",\"name\":\"min_amounts\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":153898},{\"name\":\"remove_liquidity_imbalance\",\"outputs\":[],\"inputs\":[{\"type\":\"uint256[2]\",\"name\":\"amounts\"},{\"type\":\"uint256\",\"name\":\"max_burn_amount\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":6479708},{\"name\":\"commit_new_parameters\",\"outputs\":[],\"inputs\":[{\"type\":\"uint256\",\"name\":\"amplification\"},{\"type\":\"uint256\",\"name\":\"new_fee\"},{\"type\":\"uint256\",\"name\":\"new_admin_fee\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":146105},{\"name\":\"apply_new_parameters\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":133512},{\"name\":\"revert_new_parameters\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":21835},{\"name\":\"commit_transfer_ownership\",\"outputs\":[],\"inputs\":[{\"type\":\"address\",\"name\":\"_owner\"}],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":74512},{\"name\":\"apply_transfer_ownership\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":60568},{\"name\":\"revert_transfer_ownership\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":21925},{\"name\":\"withdraw_admin_fees\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":12831},{\"name\":\"kill_me\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":37878},{\"name\":\"unkill_me\",\"outputs\":[],\"inputs\":[],\"constant\":false,\"payable\":false,\"type\":\"function\",\"gas\":22015},{\"name\":\"coins\",\"outputs\":[{\"type\":\"address\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"arg0\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2190},{\"name\":\"underlying_coins\",\"outputs\":[{\"type\":\"address\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"arg0\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2220},{\"name\":\"balances\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[{\"type\":\"int128\",\"name\":\"arg0\"}],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2250},{\"name\":\"A\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2081},{\"name\":\"fee\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2111},{\"name\":\"admin_fee\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2141},{\"name\":\"owner\",\"outputs\":[{\"type\":\"address\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2171},{\"name\":\"admin_actions_deadline\",\"outputs\":[{\"type\":\"uint256\",\"unit\":\"sec\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2201},{\"name\":\"transfer_ownership_deadline\",\"outputs\":[{\"type\":\"uint256\",\"unit\":\"sec\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2231},{\"name\":\"future_A\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2261},{\"name\":\"future_fee\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2291},{\"name\":\"future_admin_fee\",\"outputs\":[{\"type\":\"uint256\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2321},{\"name\":\"future_owner\",\"outputs\":[{\"type\":\"address\",\"name\":\"out\"}],\"inputs\":[],\"constant\":true,\"payable\":false,\"type\":\"function\",\"gas\":2351}]"
    31  
    32  // Curvepool is an auto generated Go binding around an Ethereum contract.
    33  type Curvepool struct {
    34  	CurvepoolCaller     // Read-only binding to the contract
    35  	CurvepoolTransactor // Write-only binding to the contract
    36  	CurvepoolFilterer   // Log filterer for contract events
    37  }
    38  
    39  // CurvepoolCaller is an auto generated read-only Go binding around an Ethereum contract.
    40  type CurvepoolCaller struct {
    41  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    42  }
    43  
    44  // CurvepoolTransactor is an auto generated write-only Go binding around an Ethereum contract.
    45  type CurvepoolTransactor struct {
    46  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    47  }
    48  
    49  // CurvepoolFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
    50  type CurvepoolFilterer struct {
    51  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    52  }
    53  
    54  // CurvepoolSession is an auto generated Go binding around an Ethereum contract,
    55  // with pre-set call and transact options.
    56  type CurvepoolSession struct {
    57  	Contract     *Curvepool        // Generic contract binding to set the session for
    58  	CallOpts     bind.CallOpts     // Call options to use throughout this session
    59  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    60  }
    61  
    62  // CurvepoolCallerSession is an auto generated read-only Go binding around an Ethereum contract,
    63  // with pre-set call options.
    64  type CurvepoolCallerSession struct {
    65  	Contract *CurvepoolCaller // Generic contract caller binding to set the session for
    66  	CallOpts bind.CallOpts    // Call options to use throughout this session
    67  }
    68  
    69  // CurvepoolTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
    70  // with pre-set transact options.
    71  type CurvepoolTransactorSession struct {
    72  	Contract     *CurvepoolTransactor // Generic contract transactor binding to set the session for
    73  	TransactOpts bind.TransactOpts    // Transaction auth options to use throughout this session
    74  }
    75  
    76  // CurvepoolRaw is an auto generated low-level Go binding around an Ethereum contract.
    77  type CurvepoolRaw struct {
    78  	Contract *Curvepool // Generic contract binding to access the raw methods on
    79  }
    80  
    81  // CurvepoolCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
    82  type CurvepoolCallerRaw struct {
    83  	Contract *CurvepoolCaller // Generic read-only contract binding to access the raw methods on
    84  }
    85  
    86  // CurvepoolTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
    87  type CurvepoolTransactorRaw struct {
    88  	Contract *CurvepoolTransactor // Generic write-only contract binding to access the raw methods on
    89  }
    90  
    91  // NewCurvepool creates a new instance of Curvepool, bound to a specific deployed contract.
    92  func NewCurvepool(address common.Address, backend bind.ContractBackend) (*Curvepool, error) {
    93  	contract, err := bindCurvepool(address, backend, backend, backend)
    94  	if err != nil {
    95  		return nil, err
    96  	}
    97  	return &Curvepool{CurvepoolCaller: CurvepoolCaller{contract: contract}, CurvepoolTransactor: CurvepoolTransactor{contract: contract}, CurvepoolFilterer: CurvepoolFilterer{contract: contract}}, nil
    98  }
    99  
   100  // NewCurvepoolCaller creates a new read-only instance of Curvepool, bound to a specific deployed contract.
   101  func NewCurvepoolCaller(address common.Address, caller bind.ContractCaller) (*CurvepoolCaller, error) {
   102  	contract, err := bindCurvepool(address, caller, nil, nil)
   103  	if err != nil {
   104  		return nil, err
   105  	}
   106  	return &CurvepoolCaller{contract: contract}, nil
   107  }
   108  
   109  // NewCurvepoolTransactor creates a new write-only instance of Curvepool, bound to a specific deployed contract.
   110  func NewCurvepoolTransactor(address common.Address, transactor bind.ContractTransactor) (*CurvepoolTransactor, error) {
   111  	contract, err := bindCurvepool(address, nil, transactor, nil)
   112  	if err != nil {
   113  		return nil, err
   114  	}
   115  	return &CurvepoolTransactor{contract: contract}, nil
   116  }
   117  
   118  // NewCurvepoolFilterer creates a new log filterer instance of Curvepool, bound to a specific deployed contract.
   119  func NewCurvepoolFilterer(address common.Address, filterer bind.ContractFilterer) (*CurvepoolFilterer, error) {
   120  	contract, err := bindCurvepool(address, nil, nil, filterer)
   121  	if err != nil {
   122  		return nil, err
   123  	}
   124  	return &CurvepoolFilterer{contract: contract}, nil
   125  }
   126  
   127  // bindCurvepool binds a generic wrapper to an already deployed contract.
   128  func bindCurvepool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   129  	parsed, err := abi.JSON(strings.NewReader(CurvepoolABI))
   130  	if err != nil {
   131  		return nil, err
   132  	}
   133  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   134  }
   135  
   136  // Call invokes the (constant) contract method with params as input values and
   137  // sets the output to result. The result type might be a single field for simple
   138  // returns, a slice of interfaces for anonymous returns and a struct for named
   139  // returns.
   140  func (_Curvepool *CurvepoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   141  	return _Curvepool.Contract.CurvepoolCaller.contract.Call(opts, result, method, params...)
   142  }
   143  
   144  // Transfer initiates a plain transaction to move funds to the contract, calling
   145  // its default method if one is available.
   146  func (_Curvepool *CurvepoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   147  	return _Curvepool.Contract.CurvepoolTransactor.contract.Transfer(opts)
   148  }
   149  
   150  // Transact invokes the (paid) contract method with params as input values.
   151  func (_Curvepool *CurvepoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   152  	return _Curvepool.Contract.CurvepoolTransactor.contract.Transact(opts, method, params...)
   153  }
   154  
   155  // Call invokes the (constant) contract method with params as input values and
   156  // sets the output to result. The result type might be a single field for simple
   157  // returns, a slice of interfaces for anonymous returns and a struct for named
   158  // returns.
   159  func (_Curvepool *CurvepoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   160  	return _Curvepool.Contract.contract.Call(opts, result, method, params...)
   161  }
   162  
   163  // Transfer initiates a plain transaction to move funds to the contract, calling
   164  // its default method if one is available.
   165  func (_Curvepool *CurvepoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   166  	return _Curvepool.Contract.contract.Transfer(opts)
   167  }
   168  
   169  // Transact invokes the (paid) contract method with params as input values.
   170  func (_Curvepool *CurvepoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   171  	return _Curvepool.Contract.contract.Transact(opts, method, params...)
   172  }
   173  
   174  // A is a free data retrieval call binding the contract method 0xf446c1d0.
   175  //
   176  // Solidity: function A() returns(uint256 out)
   177  func (_Curvepool *CurvepoolCaller) A(opts *bind.CallOpts) (*big.Int, error) {
   178  	var out []interface{}
   179  	err := _Curvepool.contract.Call(opts, &out, "A")
   180  
   181  	if err != nil {
   182  		return *new(*big.Int), err
   183  	}
   184  
   185  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   186  
   187  	return out0, err
   188  
   189  }
   190  
   191  // A is a free data retrieval call binding the contract method 0xf446c1d0.
   192  //
   193  // Solidity: function A() returns(uint256 out)
   194  func (_Curvepool *CurvepoolSession) A() (*big.Int, error) {
   195  	return _Curvepool.Contract.A(&_Curvepool.CallOpts)
   196  }
   197  
   198  // A is a free data retrieval call binding the contract method 0xf446c1d0.
   199  //
   200  // Solidity: function A() returns(uint256 out)
   201  func (_Curvepool *CurvepoolCallerSession) A() (*big.Int, error) {
   202  	return _Curvepool.Contract.A(&_Curvepool.CallOpts)
   203  }
   204  
   205  // AdminActionsDeadline is a free data retrieval call binding the contract method 0x405e28f8.
   206  //
   207  // Solidity: function admin_actions_deadline() returns(uint256 out)
   208  func (_Curvepool *CurvepoolCaller) AdminActionsDeadline(opts *bind.CallOpts) (*big.Int, error) {
   209  	var out []interface{}
   210  	err := _Curvepool.contract.Call(opts, &out, "admin_actions_deadline")
   211  
   212  	if err != nil {
   213  		return *new(*big.Int), err
   214  	}
   215  
   216  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   217  
   218  	return out0, err
   219  
   220  }
   221  
   222  // AdminActionsDeadline is a free data retrieval call binding the contract method 0x405e28f8.
   223  //
   224  // Solidity: function admin_actions_deadline() returns(uint256 out)
   225  func (_Curvepool *CurvepoolSession) AdminActionsDeadline() (*big.Int, error) {
   226  	return _Curvepool.Contract.AdminActionsDeadline(&_Curvepool.CallOpts)
   227  }
   228  
   229  // AdminActionsDeadline is a free data retrieval call binding the contract method 0x405e28f8.
   230  //
   231  // Solidity: function admin_actions_deadline() returns(uint256 out)
   232  func (_Curvepool *CurvepoolCallerSession) AdminActionsDeadline() (*big.Int, error) {
   233  	return _Curvepool.Contract.AdminActionsDeadline(&_Curvepool.CallOpts)
   234  }
   235  
   236  // AdminFee is a free data retrieval call binding the contract method 0xfee3f7f9.
   237  //
   238  // Solidity: function admin_fee() returns(uint256 out)
   239  func (_Curvepool *CurvepoolCaller) AdminFee(opts *bind.CallOpts) (*big.Int, error) {
   240  	var out []interface{}
   241  	err := _Curvepool.contract.Call(opts, &out, "admin_fee")
   242  
   243  	if err != nil {
   244  		return *new(*big.Int), err
   245  	}
   246  
   247  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   248  
   249  	return out0, err
   250  
   251  }
   252  
   253  // AdminFee is a free data retrieval call binding the contract method 0xfee3f7f9.
   254  //
   255  // Solidity: function admin_fee() returns(uint256 out)
   256  func (_Curvepool *CurvepoolSession) AdminFee() (*big.Int, error) {
   257  	return _Curvepool.Contract.AdminFee(&_Curvepool.CallOpts)
   258  }
   259  
   260  // AdminFee is a free data retrieval call binding the contract method 0xfee3f7f9.
   261  //
   262  // Solidity: function admin_fee() returns(uint256 out)
   263  func (_Curvepool *CurvepoolCallerSession) AdminFee() (*big.Int, error) {
   264  	return _Curvepool.Contract.AdminFee(&_Curvepool.CallOpts)
   265  }
   266  
   267  // Balances is a free data retrieval call binding the contract method 0x065a80d8.
   268  //
   269  // Solidity: function balances(int128 arg0) returns(uint256 out)
   270  func (_Curvepool *CurvepoolCaller) Balances(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
   271  	var out []interface{}
   272  	err := _Curvepool.contract.Call(opts, &out, "balances", arg0)
   273  
   274  	if err != nil {
   275  		return *new(*big.Int), err
   276  	}
   277  
   278  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   279  
   280  	return out0, err
   281  
   282  }
   283  
   284  // Balances is a free data retrieval call binding the contract method 0x065a80d8.
   285  //
   286  // Solidity: function balances(int128 arg0) returns(uint256 out)
   287  func (_Curvepool *CurvepoolSession) Balances(arg0 *big.Int) (*big.Int, error) {
   288  	return _Curvepool.Contract.Balances(&_Curvepool.CallOpts, arg0)
   289  }
   290  
   291  // Balances is a free data retrieval call binding the contract method 0x065a80d8.
   292  //
   293  // Solidity: function balances(int128 arg0) returns(uint256 out)
   294  func (_Curvepool *CurvepoolCallerSession) Balances(arg0 *big.Int) (*big.Int, error) {
   295  	return _Curvepool.Contract.Balances(&_Curvepool.CallOpts, arg0)
   296  }
   297  
   298  // CalcTokenAmount is a free data retrieval call binding the contract method 0xed8e84f3.
   299  //
   300  // Solidity: function calc_token_amount(uint256[2] amounts, bool deposit) returns(uint256 out)
   301  func (_Curvepool *CurvepoolCaller) CalcTokenAmount(opts *bind.CallOpts, amounts [2]*big.Int, deposit bool) (*big.Int, error) {
   302  	var out []interface{}
   303  	err := _Curvepool.contract.Call(opts, &out, "calc_token_amount", amounts, deposit)
   304  
   305  	if err != nil {
   306  		return *new(*big.Int), err
   307  	}
   308  
   309  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   310  
   311  	return out0, err
   312  
   313  }
   314  
   315  // CalcTokenAmount is a free data retrieval call binding the contract method 0xed8e84f3.
   316  //
   317  // Solidity: function calc_token_amount(uint256[2] amounts, bool deposit) returns(uint256 out)
   318  func (_Curvepool *CurvepoolSession) CalcTokenAmount(amounts [2]*big.Int, deposit bool) (*big.Int, error) {
   319  	return _Curvepool.Contract.CalcTokenAmount(&_Curvepool.CallOpts, amounts, deposit)
   320  }
   321  
   322  // CalcTokenAmount is a free data retrieval call binding the contract method 0xed8e84f3.
   323  //
   324  // Solidity: function calc_token_amount(uint256[2] amounts, bool deposit) returns(uint256 out)
   325  func (_Curvepool *CurvepoolCallerSession) CalcTokenAmount(amounts [2]*big.Int, deposit bool) (*big.Int, error) {
   326  	return _Curvepool.Contract.CalcTokenAmount(&_Curvepool.CallOpts, amounts, deposit)
   327  }
   328  
   329  // Coins is a free data retrieval call binding the contract method 0x23746eb8.
   330  //
   331  // Solidity: function coins(int128 arg0) returns(address out)
   332  func (_Curvepool *CurvepoolCaller) Coins(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
   333  	var out []interface{}
   334  	err := _Curvepool.contract.Call(opts, &out, "coins", arg0)
   335  
   336  	if err != nil {
   337  		return *new(common.Address), err
   338  	}
   339  
   340  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   341  
   342  	return out0, err
   343  
   344  }
   345  
   346  // Coins is a free data retrieval call binding the contract method 0x23746eb8.
   347  //
   348  // Solidity: function coins(int128 arg0) returns(address out)
   349  func (_Curvepool *CurvepoolSession) Coins(arg0 *big.Int) (common.Address, error) {
   350  	return _Curvepool.Contract.Coins(&_Curvepool.CallOpts, arg0)
   351  }
   352  
   353  // Coins is a free data retrieval call binding the contract method 0x23746eb8.
   354  //
   355  // Solidity: function coins(int128 arg0) returns(address out)
   356  func (_Curvepool *CurvepoolCallerSession) Coins(arg0 *big.Int) (common.Address, error) {
   357  	return _Curvepool.Contract.Coins(&_Curvepool.CallOpts, arg0)
   358  }
   359  
   360  // Fee is a free data retrieval call binding the contract method 0xddca3f43.
   361  //
   362  // Solidity: function fee() returns(uint256 out)
   363  func (_Curvepool *CurvepoolCaller) Fee(opts *bind.CallOpts) (*big.Int, error) {
   364  	var out []interface{}
   365  	err := _Curvepool.contract.Call(opts, &out, "fee")
   366  
   367  	if err != nil {
   368  		return *new(*big.Int), err
   369  	}
   370  
   371  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   372  
   373  	return out0, err
   374  
   375  }
   376  
   377  // Fee is a free data retrieval call binding the contract method 0xddca3f43.
   378  //
   379  // Solidity: function fee() returns(uint256 out)
   380  func (_Curvepool *CurvepoolSession) Fee() (*big.Int, error) {
   381  	return _Curvepool.Contract.Fee(&_Curvepool.CallOpts)
   382  }
   383  
   384  // Fee is a free data retrieval call binding the contract method 0xddca3f43.
   385  //
   386  // Solidity: function fee() returns(uint256 out)
   387  func (_Curvepool *CurvepoolCallerSession) Fee() (*big.Int, error) {
   388  	return _Curvepool.Contract.Fee(&_Curvepool.CallOpts)
   389  }
   390  
   391  // FutureA is a free data retrieval call binding the contract method 0xb4b577ad.
   392  //
   393  // Solidity: function future_A() returns(uint256 out)
   394  func (_Curvepool *CurvepoolCaller) FutureA(opts *bind.CallOpts) (*big.Int, error) {
   395  	var out []interface{}
   396  	err := _Curvepool.contract.Call(opts, &out, "future_A")
   397  
   398  	if err != nil {
   399  		return *new(*big.Int), err
   400  	}
   401  
   402  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   403  
   404  	return out0, err
   405  
   406  }
   407  
   408  // FutureA is a free data retrieval call binding the contract method 0xb4b577ad.
   409  //
   410  // Solidity: function future_A() returns(uint256 out)
   411  func (_Curvepool *CurvepoolSession) FutureA() (*big.Int, error) {
   412  	return _Curvepool.Contract.FutureA(&_Curvepool.CallOpts)
   413  }
   414  
   415  // FutureA is a free data retrieval call binding the contract method 0xb4b577ad.
   416  //
   417  // Solidity: function future_A() returns(uint256 out)
   418  func (_Curvepool *CurvepoolCallerSession) FutureA() (*big.Int, error) {
   419  	return _Curvepool.Contract.FutureA(&_Curvepool.CallOpts)
   420  }
   421  
   422  // FutureAdminFee is a free data retrieval call binding the contract method 0xe3824462.
   423  //
   424  // Solidity: function future_admin_fee() returns(uint256 out)
   425  func (_Curvepool *CurvepoolCaller) FutureAdminFee(opts *bind.CallOpts) (*big.Int, error) {
   426  	var out []interface{}
   427  	err := _Curvepool.contract.Call(opts, &out, "future_admin_fee")
   428  
   429  	if err != nil {
   430  		return *new(*big.Int), err
   431  	}
   432  
   433  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   434  
   435  	return out0, err
   436  
   437  }
   438  
   439  // FutureAdminFee is a free data retrieval call binding the contract method 0xe3824462.
   440  //
   441  // Solidity: function future_admin_fee() returns(uint256 out)
   442  func (_Curvepool *CurvepoolSession) FutureAdminFee() (*big.Int, error) {
   443  	return _Curvepool.Contract.FutureAdminFee(&_Curvepool.CallOpts)
   444  }
   445  
   446  // FutureAdminFee is a free data retrieval call binding the contract method 0xe3824462.
   447  //
   448  // Solidity: function future_admin_fee() returns(uint256 out)
   449  func (_Curvepool *CurvepoolCallerSession) FutureAdminFee() (*big.Int, error) {
   450  	return _Curvepool.Contract.FutureAdminFee(&_Curvepool.CallOpts)
   451  }
   452  
   453  // FutureFee is a free data retrieval call binding the contract method 0x58680d0b.
   454  //
   455  // Solidity: function future_fee() returns(uint256 out)
   456  func (_Curvepool *CurvepoolCaller) FutureFee(opts *bind.CallOpts) (*big.Int, error) {
   457  	var out []interface{}
   458  	err := _Curvepool.contract.Call(opts, &out, "future_fee")
   459  
   460  	if err != nil {
   461  		return *new(*big.Int), err
   462  	}
   463  
   464  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   465  
   466  	return out0, err
   467  
   468  }
   469  
   470  // FutureFee is a free data retrieval call binding the contract method 0x58680d0b.
   471  //
   472  // Solidity: function future_fee() returns(uint256 out)
   473  func (_Curvepool *CurvepoolSession) FutureFee() (*big.Int, error) {
   474  	return _Curvepool.Contract.FutureFee(&_Curvepool.CallOpts)
   475  }
   476  
   477  // FutureFee is a free data retrieval call binding the contract method 0x58680d0b.
   478  //
   479  // Solidity: function future_fee() returns(uint256 out)
   480  func (_Curvepool *CurvepoolCallerSession) FutureFee() (*big.Int, error) {
   481  	return _Curvepool.Contract.FutureFee(&_Curvepool.CallOpts)
   482  }
   483  
   484  // FutureOwner is a free data retrieval call binding the contract method 0x1ec0cdc1.
   485  //
   486  // Solidity: function future_owner() returns(address out)
   487  func (_Curvepool *CurvepoolCaller) FutureOwner(opts *bind.CallOpts) (common.Address, error) {
   488  	var out []interface{}
   489  	err := _Curvepool.contract.Call(opts, &out, "future_owner")
   490  
   491  	if err != nil {
   492  		return *new(common.Address), err
   493  	}
   494  
   495  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   496  
   497  	return out0, err
   498  
   499  }
   500  
   501  // FutureOwner is a free data retrieval call binding the contract method 0x1ec0cdc1.
   502  //
   503  // Solidity: function future_owner() returns(address out)
   504  func (_Curvepool *CurvepoolSession) FutureOwner() (common.Address, error) {
   505  	return _Curvepool.Contract.FutureOwner(&_Curvepool.CallOpts)
   506  }
   507  
   508  // FutureOwner is a free data retrieval call binding the contract method 0x1ec0cdc1.
   509  //
   510  // Solidity: function future_owner() returns(address out)
   511  func (_Curvepool *CurvepoolCallerSession) FutureOwner() (common.Address, error) {
   512  	return _Curvepool.Contract.FutureOwner(&_Curvepool.CallOpts)
   513  }
   514  
   515  // GetDx is a free data retrieval call binding the contract method 0x67df02ca.
   516  //
   517  // Solidity: function get_dx(int128 i, int128 j, uint256 dy) returns(uint256 out)
   518  func (_Curvepool *CurvepoolCaller) GetDx(opts *bind.CallOpts, i *big.Int, j *big.Int, dy *big.Int) (*big.Int, error) {
   519  	var out []interface{}
   520  	err := _Curvepool.contract.Call(opts, &out, "get_dx", i, j, dy)
   521  
   522  	if err != nil {
   523  		return *new(*big.Int), err
   524  	}
   525  
   526  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   527  
   528  	return out0, err
   529  
   530  }
   531  
   532  // GetDx is a free data retrieval call binding the contract method 0x67df02ca.
   533  //
   534  // Solidity: function get_dx(int128 i, int128 j, uint256 dy) returns(uint256 out)
   535  func (_Curvepool *CurvepoolSession) GetDx(i *big.Int, j *big.Int, dy *big.Int) (*big.Int, error) {
   536  	return _Curvepool.Contract.GetDx(&_Curvepool.CallOpts, i, j, dy)
   537  }
   538  
   539  // GetDx is a free data retrieval call binding the contract method 0x67df02ca.
   540  //
   541  // Solidity: function get_dx(int128 i, int128 j, uint256 dy) returns(uint256 out)
   542  func (_Curvepool *CurvepoolCallerSession) GetDx(i *big.Int, j *big.Int, dy *big.Int) (*big.Int, error) {
   543  	return _Curvepool.Contract.GetDx(&_Curvepool.CallOpts, i, j, dy)
   544  }
   545  
   546  // GetDxUnderlying is a free data retrieval call binding the contract method 0x0e71d1b9.
   547  //
   548  // Solidity: function get_dx_underlying(int128 i, int128 j, uint256 dy) returns(uint256 out)
   549  func (_Curvepool *CurvepoolCaller) GetDxUnderlying(opts *bind.CallOpts, i *big.Int, j *big.Int, dy *big.Int) (*big.Int, error) {
   550  	var out []interface{}
   551  	err := _Curvepool.contract.Call(opts, &out, "get_dx_underlying", i, j, dy)
   552  
   553  	if err != nil {
   554  		return *new(*big.Int), err
   555  	}
   556  
   557  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   558  
   559  	return out0, err
   560  
   561  }
   562  
   563  // GetDxUnderlying is a free data retrieval call binding the contract method 0x0e71d1b9.
   564  //
   565  // Solidity: function get_dx_underlying(int128 i, int128 j, uint256 dy) returns(uint256 out)
   566  func (_Curvepool *CurvepoolSession) GetDxUnderlying(i *big.Int, j *big.Int, dy *big.Int) (*big.Int, error) {
   567  	return _Curvepool.Contract.GetDxUnderlying(&_Curvepool.CallOpts, i, j, dy)
   568  }
   569  
   570  // GetDxUnderlying is a free data retrieval call binding the contract method 0x0e71d1b9.
   571  //
   572  // Solidity: function get_dx_underlying(int128 i, int128 j, uint256 dy) returns(uint256 out)
   573  func (_Curvepool *CurvepoolCallerSession) GetDxUnderlying(i *big.Int, j *big.Int, dy *big.Int) (*big.Int, error) {
   574  	return _Curvepool.Contract.GetDxUnderlying(&_Curvepool.CallOpts, i, j, dy)
   575  }
   576  
   577  // GetDy is a free data retrieval call binding the contract method 0x5e0d443f.
   578  //
   579  // Solidity: function get_dy(int128 i, int128 j, uint256 dx) returns(uint256 out)
   580  func (_Curvepool *CurvepoolCaller) GetDy(opts *bind.CallOpts, i *big.Int, j *big.Int, dx *big.Int) (*big.Int, error) {
   581  	var out []interface{}
   582  	err := _Curvepool.contract.Call(opts, &out, "get_dy", i, j, dx)
   583  
   584  	if err != nil {
   585  		return *new(*big.Int), err
   586  	}
   587  
   588  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   589  
   590  	return out0, err
   591  
   592  }
   593  
   594  // GetDy is a free data retrieval call binding the contract method 0x5e0d443f.
   595  //
   596  // Solidity: function get_dy(int128 i, int128 j, uint256 dx) returns(uint256 out)
   597  func (_Curvepool *CurvepoolSession) GetDy(i *big.Int, j *big.Int, dx *big.Int) (*big.Int, error) {
   598  	return _Curvepool.Contract.GetDy(&_Curvepool.CallOpts, i, j, dx)
   599  }
   600  
   601  // GetDy is a free data retrieval call binding the contract method 0x5e0d443f.
   602  //
   603  // Solidity: function get_dy(int128 i, int128 j, uint256 dx) returns(uint256 out)
   604  func (_Curvepool *CurvepoolCallerSession) GetDy(i *big.Int, j *big.Int, dx *big.Int) (*big.Int, error) {
   605  	return _Curvepool.Contract.GetDy(&_Curvepool.CallOpts, i, j, dx)
   606  }
   607  
   608  // GetDyUnderlying is a free data retrieval call binding the contract method 0x07211ef7.
   609  //
   610  // Solidity: function get_dy_underlying(int128 i, int128 j, uint256 dx) returns(uint256 out)
   611  func (_Curvepool *CurvepoolCaller) GetDyUnderlying(opts *bind.CallOpts, i *big.Int, j *big.Int, dx *big.Int) (*big.Int, error) {
   612  	var out []interface{}
   613  	err := _Curvepool.contract.Call(opts, &out, "get_dy_underlying", i, j, dx)
   614  
   615  	if err != nil {
   616  		return *new(*big.Int), err
   617  	}
   618  
   619  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   620  
   621  	return out0, err
   622  
   623  }
   624  
   625  // GetDyUnderlying is a free data retrieval call binding the contract method 0x07211ef7.
   626  //
   627  // Solidity: function get_dy_underlying(int128 i, int128 j, uint256 dx) returns(uint256 out)
   628  func (_Curvepool *CurvepoolSession) GetDyUnderlying(i *big.Int, j *big.Int, dx *big.Int) (*big.Int, error) {
   629  	return _Curvepool.Contract.GetDyUnderlying(&_Curvepool.CallOpts, i, j, dx)
   630  }
   631  
   632  // GetDyUnderlying is a free data retrieval call binding the contract method 0x07211ef7.
   633  //
   634  // Solidity: function get_dy_underlying(int128 i, int128 j, uint256 dx) returns(uint256 out)
   635  func (_Curvepool *CurvepoolCallerSession) GetDyUnderlying(i *big.Int, j *big.Int, dx *big.Int) (*big.Int, error) {
   636  	return _Curvepool.Contract.GetDyUnderlying(&_Curvepool.CallOpts, i, j, dx)
   637  }
   638  
   639  // GetVirtualPrice is a free data retrieval call binding the contract method 0xbb7b8b80.
   640  //
   641  // Solidity: function get_virtual_price() returns(uint256 out)
   642  func (_Curvepool *CurvepoolCaller) GetVirtualPrice(opts *bind.CallOpts) (*big.Int, error) {
   643  	var out []interface{}
   644  	err := _Curvepool.contract.Call(opts, &out, "get_virtual_price")
   645  
   646  	if err != nil {
   647  		return *new(*big.Int), err
   648  	}
   649  
   650  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   651  
   652  	return out0, err
   653  
   654  }
   655  
   656  // GetVirtualPrice is a free data retrieval call binding the contract method 0xbb7b8b80.
   657  //
   658  // Solidity: function get_virtual_price() returns(uint256 out)
   659  func (_Curvepool *CurvepoolSession) GetVirtualPrice() (*big.Int, error) {
   660  	return _Curvepool.Contract.GetVirtualPrice(&_Curvepool.CallOpts)
   661  }
   662  
   663  // GetVirtualPrice is a free data retrieval call binding the contract method 0xbb7b8b80.
   664  //
   665  // Solidity: function get_virtual_price() returns(uint256 out)
   666  func (_Curvepool *CurvepoolCallerSession) GetVirtualPrice() (*big.Int, error) {
   667  	return _Curvepool.Contract.GetVirtualPrice(&_Curvepool.CallOpts)
   668  }
   669  
   670  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
   671  //
   672  // Solidity: function owner() returns(address out)
   673  func (_Curvepool *CurvepoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
   674  	var out []interface{}
   675  	err := _Curvepool.contract.Call(opts, &out, "owner")
   676  
   677  	if err != nil {
   678  		return *new(common.Address), err
   679  	}
   680  
   681  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   682  
   683  	return out0, err
   684  
   685  }
   686  
   687  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
   688  //
   689  // Solidity: function owner() returns(address out)
   690  func (_Curvepool *CurvepoolSession) Owner() (common.Address, error) {
   691  	return _Curvepool.Contract.Owner(&_Curvepool.CallOpts)
   692  }
   693  
   694  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
   695  //
   696  // Solidity: function owner() returns(address out)
   697  func (_Curvepool *CurvepoolCallerSession) Owner() (common.Address, error) {
   698  	return _Curvepool.Contract.Owner(&_Curvepool.CallOpts)
   699  }
   700  
   701  // TransferOwnershipDeadline is a free data retrieval call binding the contract method 0xe0a0b586.
   702  //
   703  // Solidity: function transfer_ownership_deadline() returns(uint256 out)
   704  func (_Curvepool *CurvepoolCaller) TransferOwnershipDeadline(opts *bind.CallOpts) (*big.Int, error) {
   705  	var out []interface{}
   706  	err := _Curvepool.contract.Call(opts, &out, "transfer_ownership_deadline")
   707  
   708  	if err != nil {
   709  		return *new(*big.Int), err
   710  	}
   711  
   712  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   713  
   714  	return out0, err
   715  
   716  }
   717  
   718  // TransferOwnershipDeadline is a free data retrieval call binding the contract method 0xe0a0b586.
   719  //
   720  // Solidity: function transfer_ownership_deadline() returns(uint256 out)
   721  func (_Curvepool *CurvepoolSession) TransferOwnershipDeadline() (*big.Int, error) {
   722  	return _Curvepool.Contract.TransferOwnershipDeadline(&_Curvepool.CallOpts)
   723  }
   724  
   725  // TransferOwnershipDeadline is a free data retrieval call binding the contract method 0xe0a0b586.
   726  //
   727  // Solidity: function transfer_ownership_deadline() returns(uint256 out)
   728  func (_Curvepool *CurvepoolCallerSession) TransferOwnershipDeadline() (*big.Int, error) {
   729  	return _Curvepool.Contract.TransferOwnershipDeadline(&_Curvepool.CallOpts)
   730  }
   731  
   732  // UnderlyingCoins is a free data retrieval call binding the contract method 0xb739953e.
   733  //
   734  // Solidity: function underlying_coins(int128 arg0) returns(address out)
   735  func (_Curvepool *CurvepoolCaller) UnderlyingCoins(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
   736  	var out []interface{}
   737  	err := _Curvepool.contract.Call(opts, &out, "underlying_coins", arg0)
   738  
   739  	if err != nil {
   740  		return *new(common.Address), err
   741  	}
   742  
   743  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   744  
   745  	return out0, err
   746  
   747  }
   748  
   749  // UnderlyingCoins is a free data retrieval call binding the contract method 0xb739953e.
   750  //
   751  // Solidity: function underlying_coins(int128 arg0) returns(address out)
   752  func (_Curvepool *CurvepoolSession) UnderlyingCoins(arg0 *big.Int) (common.Address, error) {
   753  	return _Curvepool.Contract.UnderlyingCoins(&_Curvepool.CallOpts, arg0)
   754  }
   755  
   756  // UnderlyingCoins is a free data retrieval call binding the contract method 0xb739953e.
   757  //
   758  // Solidity: function underlying_coins(int128 arg0) returns(address out)
   759  func (_Curvepool *CurvepoolCallerSession) UnderlyingCoins(arg0 *big.Int) (common.Address, error) {
   760  	return _Curvepool.Contract.UnderlyingCoins(&_Curvepool.CallOpts, arg0)
   761  }
   762  
   763  // AddLiquidity is a paid mutator transaction binding the contract method 0x0b4c7e4d.
   764  //
   765  // Solidity: function add_liquidity(uint256[2] amounts, uint256 min_mint_amount) returns()
   766  func (_Curvepool *CurvepoolTransactor) AddLiquidity(opts *bind.TransactOpts, amounts [2]*big.Int, min_mint_amount *big.Int) (*types.Transaction, error) {
   767  	return _Curvepool.contract.Transact(opts, "add_liquidity", amounts, min_mint_amount)
   768  }
   769  
   770  // AddLiquidity is a paid mutator transaction binding the contract method 0x0b4c7e4d.
   771  //
   772  // Solidity: function add_liquidity(uint256[2] amounts, uint256 min_mint_amount) returns()
   773  func (_Curvepool *CurvepoolSession) AddLiquidity(amounts [2]*big.Int, min_mint_amount *big.Int) (*types.Transaction, error) {
   774  	return _Curvepool.Contract.AddLiquidity(&_Curvepool.TransactOpts, amounts, min_mint_amount)
   775  }
   776  
   777  // AddLiquidity is a paid mutator transaction binding the contract method 0x0b4c7e4d.
   778  //
   779  // Solidity: function add_liquidity(uint256[2] amounts, uint256 min_mint_amount) returns()
   780  func (_Curvepool *CurvepoolTransactorSession) AddLiquidity(amounts [2]*big.Int, min_mint_amount *big.Int) (*types.Transaction, error) {
   781  	return _Curvepool.Contract.AddLiquidity(&_Curvepool.TransactOpts, amounts, min_mint_amount)
   782  }
   783  
   784  // ApplyNewParameters is a paid mutator transaction binding the contract method 0x2a7dd7cd.
   785  //
   786  // Solidity: function apply_new_parameters() returns()
   787  func (_Curvepool *CurvepoolTransactor) ApplyNewParameters(opts *bind.TransactOpts) (*types.Transaction, error) {
   788  	return _Curvepool.contract.Transact(opts, "apply_new_parameters")
   789  }
   790  
   791  // ApplyNewParameters is a paid mutator transaction binding the contract method 0x2a7dd7cd.
   792  //
   793  // Solidity: function apply_new_parameters() returns()
   794  func (_Curvepool *CurvepoolSession) ApplyNewParameters() (*types.Transaction, error) {
   795  	return _Curvepool.Contract.ApplyNewParameters(&_Curvepool.TransactOpts)
   796  }
   797  
   798  // ApplyNewParameters is a paid mutator transaction binding the contract method 0x2a7dd7cd.
   799  //
   800  // Solidity: function apply_new_parameters() returns()
   801  func (_Curvepool *CurvepoolTransactorSession) ApplyNewParameters() (*types.Transaction, error) {
   802  	return _Curvepool.Contract.ApplyNewParameters(&_Curvepool.TransactOpts)
   803  }
   804  
   805  // ApplyTransferOwnership is a paid mutator transaction binding the contract method 0x6a1c05ae.
   806  //
   807  // Solidity: function apply_transfer_ownership() returns()
   808  func (_Curvepool *CurvepoolTransactor) ApplyTransferOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
   809  	return _Curvepool.contract.Transact(opts, "apply_transfer_ownership")
   810  }
   811  
   812  // ApplyTransferOwnership is a paid mutator transaction binding the contract method 0x6a1c05ae.
   813  //
   814  // Solidity: function apply_transfer_ownership() returns()
   815  func (_Curvepool *CurvepoolSession) ApplyTransferOwnership() (*types.Transaction, error) {
   816  	return _Curvepool.Contract.ApplyTransferOwnership(&_Curvepool.TransactOpts)
   817  }
   818  
   819  // ApplyTransferOwnership is a paid mutator transaction binding the contract method 0x6a1c05ae.
   820  //
   821  // Solidity: function apply_transfer_ownership() returns()
   822  func (_Curvepool *CurvepoolTransactorSession) ApplyTransferOwnership() (*types.Transaction, error) {
   823  	return _Curvepool.Contract.ApplyTransferOwnership(&_Curvepool.TransactOpts)
   824  }
   825  
   826  // CommitNewParameters is a paid mutator transaction binding the contract method 0xee11f5b6.
   827  //
   828  // Solidity: function commit_new_parameters(uint256 amplification, uint256 new_fee, uint256 new_admin_fee) returns()
   829  func (_Curvepool *CurvepoolTransactor) CommitNewParameters(opts *bind.TransactOpts, amplification *big.Int, new_fee *big.Int, new_admin_fee *big.Int) (*types.Transaction, error) {
   830  	return _Curvepool.contract.Transact(opts, "commit_new_parameters", amplification, new_fee, new_admin_fee)
   831  }
   832  
   833  // CommitNewParameters is a paid mutator transaction binding the contract method 0xee11f5b6.
   834  //
   835  // Solidity: function commit_new_parameters(uint256 amplification, uint256 new_fee, uint256 new_admin_fee) returns()
   836  func (_Curvepool *CurvepoolSession) CommitNewParameters(amplification *big.Int, new_fee *big.Int, new_admin_fee *big.Int) (*types.Transaction, error) {
   837  	return _Curvepool.Contract.CommitNewParameters(&_Curvepool.TransactOpts, amplification, new_fee, new_admin_fee)
   838  }
   839  
   840  // CommitNewParameters is a paid mutator transaction binding the contract method 0xee11f5b6.
   841  //
   842  // Solidity: function commit_new_parameters(uint256 amplification, uint256 new_fee, uint256 new_admin_fee) returns()
   843  func (_Curvepool *CurvepoolTransactorSession) CommitNewParameters(amplification *big.Int, new_fee *big.Int, new_admin_fee *big.Int) (*types.Transaction, error) {
   844  	return _Curvepool.Contract.CommitNewParameters(&_Curvepool.TransactOpts, amplification, new_fee, new_admin_fee)
   845  }
   846  
   847  // CommitTransferOwnership is a paid mutator transaction binding the contract method 0x6b441a40.
   848  //
   849  // Solidity: function commit_transfer_ownership(address _owner) returns()
   850  func (_Curvepool *CurvepoolTransactor) CommitTransferOwnership(opts *bind.TransactOpts, _owner common.Address) (*types.Transaction, error) {
   851  	return _Curvepool.contract.Transact(opts, "commit_transfer_ownership", _owner)
   852  }
   853  
   854  // CommitTransferOwnership is a paid mutator transaction binding the contract method 0x6b441a40.
   855  //
   856  // Solidity: function commit_transfer_ownership(address _owner) returns()
   857  func (_Curvepool *CurvepoolSession) CommitTransferOwnership(_owner common.Address) (*types.Transaction, error) {
   858  	return _Curvepool.Contract.CommitTransferOwnership(&_Curvepool.TransactOpts, _owner)
   859  }
   860  
   861  // CommitTransferOwnership is a paid mutator transaction binding the contract method 0x6b441a40.
   862  //
   863  // Solidity: function commit_transfer_ownership(address _owner) returns()
   864  func (_Curvepool *CurvepoolTransactorSession) CommitTransferOwnership(_owner common.Address) (*types.Transaction, error) {
   865  	return _Curvepool.Contract.CommitTransferOwnership(&_Curvepool.TransactOpts, _owner)
   866  }
   867  
   868  // Exchange is a paid mutator transaction binding the contract method 0x3df02124.
   869  //
   870  // Solidity: function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) returns()
   871  func (_Curvepool *CurvepoolTransactor) Exchange(opts *bind.TransactOpts, i *big.Int, j *big.Int, dx *big.Int, min_dy *big.Int) (*types.Transaction, error) {
   872  	return _Curvepool.contract.Transact(opts, "exchange", i, j, dx, min_dy)
   873  }
   874  
   875  // Exchange is a paid mutator transaction binding the contract method 0x3df02124.
   876  //
   877  // Solidity: function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) returns()
   878  func (_Curvepool *CurvepoolSession) Exchange(i *big.Int, j *big.Int, dx *big.Int, min_dy *big.Int) (*types.Transaction, error) {
   879  	return _Curvepool.Contract.Exchange(&_Curvepool.TransactOpts, i, j, dx, min_dy)
   880  }
   881  
   882  // Exchange is a paid mutator transaction binding the contract method 0x3df02124.
   883  //
   884  // Solidity: function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) returns()
   885  func (_Curvepool *CurvepoolTransactorSession) Exchange(i *big.Int, j *big.Int, dx *big.Int, min_dy *big.Int) (*types.Transaction, error) {
   886  	return _Curvepool.Contract.Exchange(&_Curvepool.TransactOpts, i, j, dx, min_dy)
   887  }
   888  
   889  // ExchangeUnderlying is a paid mutator transaction binding the contract method 0xa6417ed6.
   890  //
   891  // Solidity: function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy) returns()
   892  func (_Curvepool *CurvepoolTransactor) ExchangeUnderlying(opts *bind.TransactOpts, i *big.Int, j *big.Int, dx *big.Int, min_dy *big.Int) (*types.Transaction, error) {
   893  	return _Curvepool.contract.Transact(opts, "exchange_underlying", i, j, dx, min_dy)
   894  }
   895  
   896  // ExchangeUnderlying is a paid mutator transaction binding the contract method 0xa6417ed6.
   897  //
   898  // Solidity: function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy) returns()
   899  func (_Curvepool *CurvepoolSession) ExchangeUnderlying(i *big.Int, j *big.Int, dx *big.Int, min_dy *big.Int) (*types.Transaction, error) {
   900  	return _Curvepool.Contract.ExchangeUnderlying(&_Curvepool.TransactOpts, i, j, dx, min_dy)
   901  }
   902  
   903  // ExchangeUnderlying is a paid mutator transaction binding the contract method 0xa6417ed6.
   904  //
   905  // Solidity: function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy) returns()
   906  func (_Curvepool *CurvepoolTransactorSession) ExchangeUnderlying(i *big.Int, j *big.Int, dx *big.Int, min_dy *big.Int) (*types.Transaction, error) {
   907  	return _Curvepool.Contract.ExchangeUnderlying(&_Curvepool.TransactOpts, i, j, dx, min_dy)
   908  }
   909  
   910  // KillMe is a paid mutator transaction binding the contract method 0xe3698853.
   911  //
   912  // Solidity: function kill_me() returns()
   913  func (_Curvepool *CurvepoolTransactor) KillMe(opts *bind.TransactOpts) (*types.Transaction, error) {
   914  	return _Curvepool.contract.Transact(opts, "kill_me")
   915  }
   916  
   917  // KillMe is a paid mutator transaction binding the contract method 0xe3698853.
   918  //
   919  // Solidity: function kill_me() returns()
   920  func (_Curvepool *CurvepoolSession) KillMe() (*types.Transaction, error) {
   921  	return _Curvepool.Contract.KillMe(&_Curvepool.TransactOpts)
   922  }
   923  
   924  // KillMe is a paid mutator transaction binding the contract method 0xe3698853.
   925  //
   926  // Solidity: function kill_me() returns()
   927  func (_Curvepool *CurvepoolTransactorSession) KillMe() (*types.Transaction, error) {
   928  	return _Curvepool.Contract.KillMe(&_Curvepool.TransactOpts)
   929  }
   930  
   931  // RemoveLiquidity is a paid mutator transaction binding the contract method 0x5b36389c.
   932  //
   933  // Solidity: function remove_liquidity(uint256 _amount, uint256[2] min_amounts) returns()
   934  func (_Curvepool *CurvepoolTransactor) RemoveLiquidity(opts *bind.TransactOpts, _amount *big.Int, min_amounts [2]*big.Int) (*types.Transaction, error) {
   935  	return _Curvepool.contract.Transact(opts, "remove_liquidity", _amount, min_amounts)
   936  }
   937  
   938  // RemoveLiquidity is a paid mutator transaction binding the contract method 0x5b36389c.
   939  //
   940  // Solidity: function remove_liquidity(uint256 _amount, uint256[2] min_amounts) returns()
   941  func (_Curvepool *CurvepoolSession) RemoveLiquidity(_amount *big.Int, min_amounts [2]*big.Int) (*types.Transaction, error) {
   942  	return _Curvepool.Contract.RemoveLiquidity(&_Curvepool.TransactOpts, _amount, min_amounts)
   943  }
   944  
   945  // RemoveLiquidity is a paid mutator transaction binding the contract method 0x5b36389c.
   946  //
   947  // Solidity: function remove_liquidity(uint256 _amount, uint256[2] min_amounts) returns()
   948  func (_Curvepool *CurvepoolTransactorSession) RemoveLiquidity(_amount *big.Int, min_amounts [2]*big.Int) (*types.Transaction, error) {
   949  	return _Curvepool.Contract.RemoveLiquidity(&_Curvepool.TransactOpts, _amount, min_amounts)
   950  }
   951  
   952  // RemoveLiquidityImbalance is a paid mutator transaction binding the contract method 0xe3103273.
   953  //
   954  // Solidity: function remove_liquidity_imbalance(uint256[2] amounts, uint256 max_burn_amount) returns()
   955  func (_Curvepool *CurvepoolTransactor) RemoveLiquidityImbalance(opts *bind.TransactOpts, amounts [2]*big.Int, max_burn_amount *big.Int) (*types.Transaction, error) {
   956  	return _Curvepool.contract.Transact(opts, "remove_liquidity_imbalance", amounts, max_burn_amount)
   957  }
   958  
   959  // RemoveLiquidityImbalance is a paid mutator transaction binding the contract method 0xe3103273.
   960  //
   961  // Solidity: function remove_liquidity_imbalance(uint256[2] amounts, uint256 max_burn_amount) returns()
   962  func (_Curvepool *CurvepoolSession) RemoveLiquidityImbalance(amounts [2]*big.Int, max_burn_amount *big.Int) (*types.Transaction, error) {
   963  	return _Curvepool.Contract.RemoveLiquidityImbalance(&_Curvepool.TransactOpts, amounts, max_burn_amount)
   964  }
   965  
   966  // RemoveLiquidityImbalance is a paid mutator transaction binding the contract method 0xe3103273.
   967  //
   968  // Solidity: function remove_liquidity_imbalance(uint256[2] amounts, uint256 max_burn_amount) returns()
   969  func (_Curvepool *CurvepoolTransactorSession) RemoveLiquidityImbalance(amounts [2]*big.Int, max_burn_amount *big.Int) (*types.Transaction, error) {
   970  	return _Curvepool.Contract.RemoveLiquidityImbalance(&_Curvepool.TransactOpts, amounts, max_burn_amount)
   971  }
   972  
   973  // RevertNewParameters is a paid mutator transaction binding the contract method 0x226840fb.
   974  //
   975  // Solidity: function revert_new_parameters() returns()
   976  func (_Curvepool *CurvepoolTransactor) RevertNewParameters(opts *bind.TransactOpts) (*types.Transaction, error) {
   977  	return _Curvepool.contract.Transact(opts, "revert_new_parameters")
   978  }
   979  
   980  // RevertNewParameters is a paid mutator transaction binding the contract method 0x226840fb.
   981  //
   982  // Solidity: function revert_new_parameters() returns()
   983  func (_Curvepool *CurvepoolSession) RevertNewParameters() (*types.Transaction, error) {
   984  	return _Curvepool.Contract.RevertNewParameters(&_Curvepool.TransactOpts)
   985  }
   986  
   987  // RevertNewParameters is a paid mutator transaction binding the contract method 0x226840fb.
   988  //
   989  // Solidity: function revert_new_parameters() returns()
   990  func (_Curvepool *CurvepoolTransactorSession) RevertNewParameters() (*types.Transaction, error) {
   991  	return _Curvepool.Contract.RevertNewParameters(&_Curvepool.TransactOpts)
   992  }
   993  
   994  // RevertTransferOwnership is a paid mutator transaction binding the contract method 0x86fbf193.
   995  //
   996  // Solidity: function revert_transfer_ownership() returns()
   997  func (_Curvepool *CurvepoolTransactor) RevertTransferOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
   998  	return _Curvepool.contract.Transact(opts, "revert_transfer_ownership")
   999  }
  1000  
  1001  // RevertTransferOwnership is a paid mutator transaction binding the contract method 0x86fbf193.
  1002  //
  1003  // Solidity: function revert_transfer_ownership() returns()
  1004  func (_Curvepool *CurvepoolSession) RevertTransferOwnership() (*types.Transaction, error) {
  1005  	return _Curvepool.Contract.RevertTransferOwnership(&_Curvepool.TransactOpts)
  1006  }
  1007  
  1008  // RevertTransferOwnership is a paid mutator transaction binding the contract method 0x86fbf193.
  1009  //
  1010  // Solidity: function revert_transfer_ownership() returns()
  1011  func (_Curvepool *CurvepoolTransactorSession) RevertTransferOwnership() (*types.Transaction, error) {
  1012  	return _Curvepool.Contract.RevertTransferOwnership(&_Curvepool.TransactOpts)
  1013  }
  1014  
  1015  // UnkillMe is a paid mutator transaction binding the contract method 0x3046f972.
  1016  //
  1017  // Solidity: function unkill_me() returns()
  1018  func (_Curvepool *CurvepoolTransactor) UnkillMe(opts *bind.TransactOpts) (*types.Transaction, error) {
  1019  	return _Curvepool.contract.Transact(opts, "unkill_me")
  1020  }
  1021  
  1022  // UnkillMe is a paid mutator transaction binding the contract method 0x3046f972.
  1023  //
  1024  // Solidity: function unkill_me() returns()
  1025  func (_Curvepool *CurvepoolSession) UnkillMe() (*types.Transaction, error) {
  1026  	return _Curvepool.Contract.UnkillMe(&_Curvepool.TransactOpts)
  1027  }
  1028  
  1029  // UnkillMe is a paid mutator transaction binding the contract method 0x3046f972.
  1030  //
  1031  // Solidity: function unkill_me() returns()
  1032  func (_Curvepool *CurvepoolTransactorSession) UnkillMe() (*types.Transaction, error) {
  1033  	return _Curvepool.Contract.UnkillMe(&_Curvepool.TransactOpts)
  1034  }
  1035  
  1036  // WithdrawAdminFees is a paid mutator transaction binding the contract method 0x30c54085.
  1037  //
  1038  // Solidity: function withdraw_admin_fees() returns()
  1039  func (_Curvepool *CurvepoolTransactor) WithdrawAdminFees(opts *bind.TransactOpts) (*types.Transaction, error) {
  1040  	return _Curvepool.contract.Transact(opts, "withdraw_admin_fees")
  1041  }
  1042  
  1043  // WithdrawAdminFees is a paid mutator transaction binding the contract method 0x30c54085.
  1044  //
  1045  // Solidity: function withdraw_admin_fees() returns()
  1046  func (_Curvepool *CurvepoolSession) WithdrawAdminFees() (*types.Transaction, error) {
  1047  	return _Curvepool.Contract.WithdrawAdminFees(&_Curvepool.TransactOpts)
  1048  }
  1049  
  1050  // WithdrawAdminFees is a paid mutator transaction binding the contract method 0x30c54085.
  1051  //
  1052  // Solidity: function withdraw_admin_fees() returns()
  1053  func (_Curvepool *CurvepoolTransactorSession) WithdrawAdminFees() (*types.Transaction, error) {
  1054  	return _Curvepool.Contract.WithdrawAdminFees(&_Curvepool.TransactOpts)
  1055  }
  1056  
  1057  // CurvepoolAddLiquidityIterator is returned from FilterAddLiquidity and is used to iterate over the raw logs and unpacked data for AddLiquidity events raised by the Curvepool contract.
  1058  type CurvepoolAddLiquidityIterator struct {
  1059  	Event *CurvepoolAddLiquidity // Event containing the contract specifics and raw log
  1060  
  1061  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1062  	event    string              // Event name to use for unpacking event data
  1063  
  1064  	logs chan types.Log        // Log channel receiving the found contract events
  1065  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1066  	done bool                  // Whether the subscription completed delivering logs
  1067  	fail error                 // Occurred error to stop iteration
  1068  }
  1069  
  1070  // Next advances the iterator to the subsequent event, returning whether there
  1071  // are any more events found. In case of a retrieval or parsing error, false is
  1072  // returned and Error() can be queried for the exact failure.
  1073  func (it *CurvepoolAddLiquidityIterator) Next() bool {
  1074  	// If the iterator failed, stop iterating
  1075  	if it.fail != nil {
  1076  		return false
  1077  	}
  1078  	// If the iterator completed, deliver directly whatever's available
  1079  	if it.done {
  1080  		select {
  1081  		case log := <-it.logs:
  1082  			it.Event = new(CurvepoolAddLiquidity)
  1083  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1084  				it.fail = err
  1085  				return false
  1086  			}
  1087  			it.Event.Raw = log
  1088  			return true
  1089  
  1090  		default:
  1091  			return false
  1092  		}
  1093  	}
  1094  	// Iterator still in progress, wait for either a data or an error event
  1095  	select {
  1096  	case log := <-it.logs:
  1097  		it.Event = new(CurvepoolAddLiquidity)
  1098  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1099  			it.fail = err
  1100  			return false
  1101  		}
  1102  		it.Event.Raw = log
  1103  		return true
  1104  
  1105  	case err := <-it.sub.Err():
  1106  		it.done = true
  1107  		it.fail = err
  1108  		return it.Next()
  1109  	}
  1110  }
  1111  
  1112  // Error returns any retrieval or parsing error occurred during filtering.
  1113  func (it *CurvepoolAddLiquidityIterator) Error() error {
  1114  	return it.fail
  1115  }
  1116  
  1117  // Close terminates the iteration process, releasing any pending underlying
  1118  // resources.
  1119  func (it *CurvepoolAddLiquidityIterator) Close() error {
  1120  	it.sub.Unsubscribe()
  1121  	return nil
  1122  }
  1123  
  1124  // CurvepoolAddLiquidity represents a AddLiquidity event raised by the Curvepool contract.
  1125  type CurvepoolAddLiquidity struct {
  1126  	Provider     common.Address
  1127  	TokenAmounts [2]*big.Int
  1128  	Fees         [2]*big.Int
  1129  	Invariant    *big.Int
  1130  	TokenSupply  *big.Int
  1131  	Raw          types.Log // Blockchain specific contextual infos
  1132  }
  1133  
  1134  // FilterAddLiquidity is a free log retrieval operation binding the contract event 0x26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a768.
  1135  //
  1136  // Solidity: event AddLiquidity(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 invariant, uint256 token_supply)
  1137  func (_Curvepool *CurvepoolFilterer) FilterAddLiquidity(opts *bind.FilterOpts, provider []common.Address) (*CurvepoolAddLiquidityIterator, error) {
  1138  
  1139  	var providerRule []interface{}
  1140  	for _, providerItem := range provider {
  1141  		providerRule = append(providerRule, providerItem)
  1142  	}
  1143  
  1144  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "AddLiquidity", providerRule)
  1145  	if err != nil {
  1146  		return nil, err
  1147  	}
  1148  	return &CurvepoolAddLiquidityIterator{contract: _Curvepool.contract, event: "AddLiquidity", logs: logs, sub: sub}, nil
  1149  }
  1150  
  1151  // WatchAddLiquidity is a free log subscription operation binding the contract event 0x26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a768.
  1152  //
  1153  // Solidity: event AddLiquidity(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 invariant, uint256 token_supply)
  1154  func (_Curvepool *CurvepoolFilterer) WatchAddLiquidity(opts *bind.WatchOpts, sink chan<- *CurvepoolAddLiquidity, provider []common.Address) (event.Subscription, error) {
  1155  
  1156  	var providerRule []interface{}
  1157  	for _, providerItem := range provider {
  1158  		providerRule = append(providerRule, providerItem)
  1159  	}
  1160  
  1161  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "AddLiquidity", providerRule)
  1162  	if err != nil {
  1163  		return nil, err
  1164  	}
  1165  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1166  		defer sub.Unsubscribe()
  1167  		for {
  1168  			select {
  1169  			case log := <-logs:
  1170  				// New log arrived, parse the event and forward to the user
  1171  				event := new(CurvepoolAddLiquidity)
  1172  				if err := _Curvepool.contract.UnpackLog(event, "AddLiquidity", log); err != nil {
  1173  					return err
  1174  				}
  1175  				event.Raw = log
  1176  
  1177  				select {
  1178  				case sink <- event:
  1179  				case err := <-sub.Err():
  1180  					return err
  1181  				case <-quit:
  1182  					return nil
  1183  				}
  1184  			case err := <-sub.Err():
  1185  				return err
  1186  			case <-quit:
  1187  				return nil
  1188  			}
  1189  		}
  1190  	}), nil
  1191  }
  1192  
  1193  // ParseAddLiquidity is a log parse operation binding the contract event 0x26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a768.
  1194  //
  1195  // Solidity: event AddLiquidity(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 invariant, uint256 token_supply)
  1196  func (_Curvepool *CurvepoolFilterer) ParseAddLiquidity(log types.Log) (*CurvepoolAddLiquidity, error) {
  1197  	event := new(CurvepoolAddLiquidity)
  1198  	if err := _Curvepool.contract.UnpackLog(event, "AddLiquidity", log); err != nil {
  1199  		return nil, err
  1200  	}
  1201  	event.Raw = log
  1202  	return event, nil
  1203  }
  1204  
  1205  // CurvepoolCommitNewAdminIterator is returned from FilterCommitNewAdmin and is used to iterate over the raw logs and unpacked data for CommitNewAdmin events raised by the Curvepool contract.
  1206  type CurvepoolCommitNewAdminIterator struct {
  1207  	Event *CurvepoolCommitNewAdmin // Event containing the contract specifics and raw log
  1208  
  1209  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1210  	event    string              // Event name to use for unpacking event data
  1211  
  1212  	logs chan types.Log        // Log channel receiving the found contract events
  1213  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1214  	done bool                  // Whether the subscription completed delivering logs
  1215  	fail error                 // Occurred error to stop iteration
  1216  }
  1217  
  1218  // Next advances the iterator to the subsequent event, returning whether there
  1219  // are any more events found. In case of a retrieval or parsing error, false is
  1220  // returned and Error() can be queried for the exact failure.
  1221  func (it *CurvepoolCommitNewAdminIterator) Next() bool {
  1222  	// If the iterator failed, stop iterating
  1223  	if it.fail != nil {
  1224  		return false
  1225  	}
  1226  	// If the iterator completed, deliver directly whatever's available
  1227  	if it.done {
  1228  		select {
  1229  		case log := <-it.logs:
  1230  			it.Event = new(CurvepoolCommitNewAdmin)
  1231  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1232  				it.fail = err
  1233  				return false
  1234  			}
  1235  			it.Event.Raw = log
  1236  			return true
  1237  
  1238  		default:
  1239  			return false
  1240  		}
  1241  	}
  1242  	// Iterator still in progress, wait for either a data or an error event
  1243  	select {
  1244  	case log := <-it.logs:
  1245  		it.Event = new(CurvepoolCommitNewAdmin)
  1246  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1247  			it.fail = err
  1248  			return false
  1249  		}
  1250  		it.Event.Raw = log
  1251  		return true
  1252  
  1253  	case err := <-it.sub.Err():
  1254  		it.done = true
  1255  		it.fail = err
  1256  		return it.Next()
  1257  	}
  1258  }
  1259  
  1260  // Error returns any retrieval or parsing error occurred during filtering.
  1261  func (it *CurvepoolCommitNewAdminIterator) Error() error {
  1262  	return it.fail
  1263  }
  1264  
  1265  // Close terminates the iteration process, releasing any pending underlying
  1266  // resources.
  1267  func (it *CurvepoolCommitNewAdminIterator) Close() error {
  1268  	it.sub.Unsubscribe()
  1269  	return nil
  1270  }
  1271  
  1272  // CurvepoolCommitNewAdmin represents a CommitNewAdmin event raised by the Curvepool contract.
  1273  type CurvepoolCommitNewAdmin struct {
  1274  	Deadline *big.Int
  1275  	Admin    common.Address
  1276  	Raw      types.Log // Blockchain specific contextual infos
  1277  }
  1278  
  1279  // FilterCommitNewAdmin is a free log retrieval operation binding the contract event 0x181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb935.
  1280  //
  1281  // Solidity: event CommitNewAdmin(uint256 indexed deadline, address indexed admin)
  1282  func (_Curvepool *CurvepoolFilterer) FilterCommitNewAdmin(opts *bind.FilterOpts, deadline []*big.Int, admin []common.Address) (*CurvepoolCommitNewAdminIterator, error) {
  1283  
  1284  	var deadlineRule []interface{}
  1285  	for _, deadlineItem := range deadline {
  1286  		deadlineRule = append(deadlineRule, deadlineItem)
  1287  	}
  1288  	var adminRule []interface{}
  1289  	for _, adminItem := range admin {
  1290  		adminRule = append(adminRule, adminItem)
  1291  	}
  1292  
  1293  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "CommitNewAdmin", deadlineRule, adminRule)
  1294  	if err != nil {
  1295  		return nil, err
  1296  	}
  1297  	return &CurvepoolCommitNewAdminIterator{contract: _Curvepool.contract, event: "CommitNewAdmin", logs: logs, sub: sub}, nil
  1298  }
  1299  
  1300  // WatchCommitNewAdmin is a free log subscription operation binding the contract event 0x181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb935.
  1301  //
  1302  // Solidity: event CommitNewAdmin(uint256 indexed deadline, address indexed admin)
  1303  func (_Curvepool *CurvepoolFilterer) WatchCommitNewAdmin(opts *bind.WatchOpts, sink chan<- *CurvepoolCommitNewAdmin, deadline []*big.Int, admin []common.Address) (event.Subscription, error) {
  1304  
  1305  	var deadlineRule []interface{}
  1306  	for _, deadlineItem := range deadline {
  1307  		deadlineRule = append(deadlineRule, deadlineItem)
  1308  	}
  1309  	var adminRule []interface{}
  1310  	for _, adminItem := range admin {
  1311  		adminRule = append(adminRule, adminItem)
  1312  	}
  1313  
  1314  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "CommitNewAdmin", deadlineRule, adminRule)
  1315  	if err != nil {
  1316  		return nil, err
  1317  	}
  1318  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1319  		defer sub.Unsubscribe()
  1320  		for {
  1321  			select {
  1322  			case log := <-logs:
  1323  				// New log arrived, parse the event and forward to the user
  1324  				event := new(CurvepoolCommitNewAdmin)
  1325  				if err := _Curvepool.contract.UnpackLog(event, "CommitNewAdmin", log); err != nil {
  1326  					return err
  1327  				}
  1328  				event.Raw = log
  1329  
  1330  				select {
  1331  				case sink <- event:
  1332  				case err := <-sub.Err():
  1333  					return err
  1334  				case <-quit:
  1335  					return nil
  1336  				}
  1337  			case err := <-sub.Err():
  1338  				return err
  1339  			case <-quit:
  1340  				return nil
  1341  			}
  1342  		}
  1343  	}), nil
  1344  }
  1345  
  1346  // ParseCommitNewAdmin is a log parse operation binding the contract event 0x181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb935.
  1347  //
  1348  // Solidity: event CommitNewAdmin(uint256 indexed deadline, address indexed admin)
  1349  func (_Curvepool *CurvepoolFilterer) ParseCommitNewAdmin(log types.Log) (*CurvepoolCommitNewAdmin, error) {
  1350  	event := new(CurvepoolCommitNewAdmin)
  1351  	if err := _Curvepool.contract.UnpackLog(event, "CommitNewAdmin", log); err != nil {
  1352  		return nil, err
  1353  	}
  1354  	event.Raw = log
  1355  	return event, nil
  1356  }
  1357  
  1358  // CurvepoolCommitNewParametersIterator is returned from FilterCommitNewParameters and is used to iterate over the raw logs and unpacked data for CommitNewParameters events raised by the Curvepool contract.
  1359  type CurvepoolCommitNewParametersIterator struct {
  1360  	Event *CurvepoolCommitNewParameters // Event containing the contract specifics and raw log
  1361  
  1362  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1363  	event    string              // Event name to use for unpacking event data
  1364  
  1365  	logs chan types.Log        // Log channel receiving the found contract events
  1366  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1367  	done bool                  // Whether the subscription completed delivering logs
  1368  	fail error                 // Occurred error to stop iteration
  1369  }
  1370  
  1371  // Next advances the iterator to the subsequent event, returning whether there
  1372  // are any more events found. In case of a retrieval or parsing error, false is
  1373  // returned and Error() can be queried for the exact failure.
  1374  func (it *CurvepoolCommitNewParametersIterator) Next() bool {
  1375  	// If the iterator failed, stop iterating
  1376  	if it.fail != nil {
  1377  		return false
  1378  	}
  1379  	// If the iterator completed, deliver directly whatever's available
  1380  	if it.done {
  1381  		select {
  1382  		case log := <-it.logs:
  1383  			it.Event = new(CurvepoolCommitNewParameters)
  1384  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1385  				it.fail = err
  1386  				return false
  1387  			}
  1388  			it.Event.Raw = log
  1389  			return true
  1390  
  1391  		default:
  1392  			return false
  1393  		}
  1394  	}
  1395  	// Iterator still in progress, wait for either a data or an error event
  1396  	select {
  1397  	case log := <-it.logs:
  1398  		it.Event = new(CurvepoolCommitNewParameters)
  1399  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1400  			it.fail = err
  1401  			return false
  1402  		}
  1403  		it.Event.Raw = log
  1404  		return true
  1405  
  1406  	case err := <-it.sub.Err():
  1407  		it.done = true
  1408  		it.fail = err
  1409  		return it.Next()
  1410  	}
  1411  }
  1412  
  1413  // Error returns any retrieval or parsing error occurred during filtering.
  1414  func (it *CurvepoolCommitNewParametersIterator) Error() error {
  1415  	return it.fail
  1416  }
  1417  
  1418  // Close terminates the iteration process, releasing any pending underlying
  1419  // resources.
  1420  func (it *CurvepoolCommitNewParametersIterator) Close() error {
  1421  	it.sub.Unsubscribe()
  1422  	return nil
  1423  }
  1424  
  1425  // CurvepoolCommitNewParameters represents a CommitNewParameters event raised by the Curvepool contract.
  1426  type CurvepoolCommitNewParameters struct {
  1427  	Deadline *big.Int
  1428  	A        *big.Int
  1429  	Fee      *big.Int
  1430  	AdminFee *big.Int
  1431  	Raw      types.Log // Blockchain specific contextual infos
  1432  }
  1433  
  1434  // FilterCommitNewParameters is a free log retrieval operation binding the contract event 0x6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f73.
  1435  //
  1436  // Solidity: event CommitNewParameters(uint256 indexed deadline, uint256 A, uint256 fee, uint256 admin_fee)
  1437  func (_Curvepool *CurvepoolFilterer) FilterCommitNewParameters(opts *bind.FilterOpts, deadline []*big.Int) (*CurvepoolCommitNewParametersIterator, error) {
  1438  
  1439  	var deadlineRule []interface{}
  1440  	for _, deadlineItem := range deadline {
  1441  		deadlineRule = append(deadlineRule, deadlineItem)
  1442  	}
  1443  
  1444  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "CommitNewParameters", deadlineRule)
  1445  	if err != nil {
  1446  		return nil, err
  1447  	}
  1448  	return &CurvepoolCommitNewParametersIterator{contract: _Curvepool.contract, event: "CommitNewParameters", logs: logs, sub: sub}, nil
  1449  }
  1450  
  1451  // WatchCommitNewParameters is a free log subscription operation binding the contract event 0x6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f73.
  1452  //
  1453  // Solidity: event CommitNewParameters(uint256 indexed deadline, uint256 A, uint256 fee, uint256 admin_fee)
  1454  func (_Curvepool *CurvepoolFilterer) WatchCommitNewParameters(opts *bind.WatchOpts, sink chan<- *CurvepoolCommitNewParameters, deadline []*big.Int) (event.Subscription, error) {
  1455  
  1456  	var deadlineRule []interface{}
  1457  	for _, deadlineItem := range deadline {
  1458  		deadlineRule = append(deadlineRule, deadlineItem)
  1459  	}
  1460  
  1461  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "CommitNewParameters", deadlineRule)
  1462  	if err != nil {
  1463  		return nil, err
  1464  	}
  1465  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1466  		defer sub.Unsubscribe()
  1467  		for {
  1468  			select {
  1469  			case log := <-logs:
  1470  				// New log arrived, parse the event and forward to the user
  1471  				event := new(CurvepoolCommitNewParameters)
  1472  				if err := _Curvepool.contract.UnpackLog(event, "CommitNewParameters", log); err != nil {
  1473  					return err
  1474  				}
  1475  				event.Raw = log
  1476  
  1477  				select {
  1478  				case sink <- event:
  1479  				case err := <-sub.Err():
  1480  					return err
  1481  				case <-quit:
  1482  					return nil
  1483  				}
  1484  			case err := <-sub.Err():
  1485  				return err
  1486  			case <-quit:
  1487  				return nil
  1488  			}
  1489  		}
  1490  	}), nil
  1491  }
  1492  
  1493  // ParseCommitNewParameters is a log parse operation binding the contract event 0x6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f73.
  1494  //
  1495  // Solidity: event CommitNewParameters(uint256 indexed deadline, uint256 A, uint256 fee, uint256 admin_fee)
  1496  func (_Curvepool *CurvepoolFilterer) ParseCommitNewParameters(log types.Log) (*CurvepoolCommitNewParameters, error) {
  1497  	event := new(CurvepoolCommitNewParameters)
  1498  	if err := _Curvepool.contract.UnpackLog(event, "CommitNewParameters", log); err != nil {
  1499  		return nil, err
  1500  	}
  1501  	event.Raw = log
  1502  	return event, nil
  1503  }
  1504  
  1505  // CurvepoolNewAdminIterator is returned from FilterNewAdmin and is used to iterate over the raw logs and unpacked data for NewAdmin events raised by the Curvepool contract.
  1506  type CurvepoolNewAdminIterator struct {
  1507  	Event *CurvepoolNewAdmin // Event containing the contract specifics and raw log
  1508  
  1509  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1510  	event    string              // Event name to use for unpacking event data
  1511  
  1512  	logs chan types.Log        // Log channel receiving the found contract events
  1513  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1514  	done bool                  // Whether the subscription completed delivering logs
  1515  	fail error                 // Occurred error to stop iteration
  1516  }
  1517  
  1518  // Next advances the iterator to the subsequent event, returning whether there
  1519  // are any more events found. In case of a retrieval or parsing error, false is
  1520  // returned and Error() can be queried for the exact failure.
  1521  func (it *CurvepoolNewAdminIterator) Next() bool {
  1522  	// If the iterator failed, stop iterating
  1523  	if it.fail != nil {
  1524  		return false
  1525  	}
  1526  	// If the iterator completed, deliver directly whatever's available
  1527  	if it.done {
  1528  		select {
  1529  		case log := <-it.logs:
  1530  			it.Event = new(CurvepoolNewAdmin)
  1531  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1532  				it.fail = err
  1533  				return false
  1534  			}
  1535  			it.Event.Raw = log
  1536  			return true
  1537  
  1538  		default:
  1539  			return false
  1540  		}
  1541  	}
  1542  	// Iterator still in progress, wait for either a data or an error event
  1543  	select {
  1544  	case log := <-it.logs:
  1545  		it.Event = new(CurvepoolNewAdmin)
  1546  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1547  			it.fail = err
  1548  			return false
  1549  		}
  1550  		it.Event.Raw = log
  1551  		return true
  1552  
  1553  	case err := <-it.sub.Err():
  1554  		it.done = true
  1555  		it.fail = err
  1556  		return it.Next()
  1557  	}
  1558  }
  1559  
  1560  // Error returns any retrieval or parsing error occurred during filtering.
  1561  func (it *CurvepoolNewAdminIterator) Error() error {
  1562  	return it.fail
  1563  }
  1564  
  1565  // Close terminates the iteration process, releasing any pending underlying
  1566  // resources.
  1567  func (it *CurvepoolNewAdminIterator) Close() error {
  1568  	it.sub.Unsubscribe()
  1569  	return nil
  1570  }
  1571  
  1572  // CurvepoolNewAdmin represents a NewAdmin event raised by the Curvepool contract.
  1573  type CurvepoolNewAdmin struct {
  1574  	Admin common.Address
  1575  	Raw   types.Log // Blockchain specific contextual infos
  1576  }
  1577  
  1578  // FilterNewAdmin is a free log retrieval operation binding the contract event 0x71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c.
  1579  //
  1580  // Solidity: event NewAdmin(address indexed admin)
  1581  func (_Curvepool *CurvepoolFilterer) FilterNewAdmin(opts *bind.FilterOpts, admin []common.Address) (*CurvepoolNewAdminIterator, error) {
  1582  
  1583  	var adminRule []interface{}
  1584  	for _, adminItem := range admin {
  1585  		adminRule = append(adminRule, adminItem)
  1586  	}
  1587  
  1588  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "NewAdmin", adminRule)
  1589  	if err != nil {
  1590  		return nil, err
  1591  	}
  1592  	return &CurvepoolNewAdminIterator{contract: _Curvepool.contract, event: "NewAdmin", logs: logs, sub: sub}, nil
  1593  }
  1594  
  1595  // WatchNewAdmin is a free log subscription operation binding the contract event 0x71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c.
  1596  //
  1597  // Solidity: event NewAdmin(address indexed admin)
  1598  func (_Curvepool *CurvepoolFilterer) WatchNewAdmin(opts *bind.WatchOpts, sink chan<- *CurvepoolNewAdmin, admin []common.Address) (event.Subscription, error) {
  1599  
  1600  	var adminRule []interface{}
  1601  	for _, adminItem := range admin {
  1602  		adminRule = append(adminRule, adminItem)
  1603  	}
  1604  
  1605  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "NewAdmin", adminRule)
  1606  	if err != nil {
  1607  		return nil, err
  1608  	}
  1609  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1610  		defer sub.Unsubscribe()
  1611  		for {
  1612  			select {
  1613  			case log := <-logs:
  1614  				// New log arrived, parse the event and forward to the user
  1615  				event := new(CurvepoolNewAdmin)
  1616  				if err := _Curvepool.contract.UnpackLog(event, "NewAdmin", log); err != nil {
  1617  					return err
  1618  				}
  1619  				event.Raw = log
  1620  
  1621  				select {
  1622  				case sink <- event:
  1623  				case err := <-sub.Err():
  1624  					return err
  1625  				case <-quit:
  1626  					return nil
  1627  				}
  1628  			case err := <-sub.Err():
  1629  				return err
  1630  			case <-quit:
  1631  				return nil
  1632  			}
  1633  		}
  1634  	}), nil
  1635  }
  1636  
  1637  // ParseNewAdmin is a log parse operation binding the contract event 0x71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c.
  1638  //
  1639  // Solidity: event NewAdmin(address indexed admin)
  1640  func (_Curvepool *CurvepoolFilterer) ParseNewAdmin(log types.Log) (*CurvepoolNewAdmin, error) {
  1641  	event := new(CurvepoolNewAdmin)
  1642  	if err := _Curvepool.contract.UnpackLog(event, "NewAdmin", log); err != nil {
  1643  		return nil, err
  1644  	}
  1645  	event.Raw = log
  1646  	return event, nil
  1647  }
  1648  
  1649  // CurvepoolNewParametersIterator is returned from FilterNewParameters and is used to iterate over the raw logs and unpacked data for NewParameters events raised by the Curvepool contract.
  1650  type CurvepoolNewParametersIterator struct {
  1651  	Event *CurvepoolNewParameters // Event containing the contract specifics and raw log
  1652  
  1653  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1654  	event    string              // Event name to use for unpacking event data
  1655  
  1656  	logs chan types.Log        // Log channel receiving the found contract events
  1657  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1658  	done bool                  // Whether the subscription completed delivering logs
  1659  	fail error                 // Occurred error to stop iteration
  1660  }
  1661  
  1662  // Next advances the iterator to the subsequent event, returning whether there
  1663  // are any more events found. In case of a retrieval or parsing error, false is
  1664  // returned and Error() can be queried for the exact failure.
  1665  func (it *CurvepoolNewParametersIterator) Next() bool {
  1666  	// If the iterator failed, stop iterating
  1667  	if it.fail != nil {
  1668  		return false
  1669  	}
  1670  	// If the iterator completed, deliver directly whatever's available
  1671  	if it.done {
  1672  		select {
  1673  		case log := <-it.logs:
  1674  			it.Event = new(CurvepoolNewParameters)
  1675  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1676  				it.fail = err
  1677  				return false
  1678  			}
  1679  			it.Event.Raw = log
  1680  			return true
  1681  
  1682  		default:
  1683  			return false
  1684  		}
  1685  	}
  1686  	// Iterator still in progress, wait for either a data or an error event
  1687  	select {
  1688  	case log := <-it.logs:
  1689  		it.Event = new(CurvepoolNewParameters)
  1690  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1691  			it.fail = err
  1692  			return false
  1693  		}
  1694  		it.Event.Raw = log
  1695  		return true
  1696  
  1697  	case err := <-it.sub.Err():
  1698  		it.done = true
  1699  		it.fail = err
  1700  		return it.Next()
  1701  	}
  1702  }
  1703  
  1704  // Error returns any retrieval or parsing error occurred during filtering.
  1705  func (it *CurvepoolNewParametersIterator) Error() error {
  1706  	return it.fail
  1707  }
  1708  
  1709  // Close terminates the iteration process, releasing any pending underlying
  1710  // resources.
  1711  func (it *CurvepoolNewParametersIterator) Close() error {
  1712  	it.sub.Unsubscribe()
  1713  	return nil
  1714  }
  1715  
  1716  // CurvepoolNewParameters represents a NewParameters event raised by the Curvepool contract.
  1717  type CurvepoolNewParameters struct {
  1718  	A        *big.Int
  1719  	Fee      *big.Int
  1720  	AdminFee *big.Int
  1721  	Raw      types.Log // Blockchain specific contextual infos
  1722  }
  1723  
  1724  // FilterNewParameters is a free log retrieval operation binding the contract event 0x752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e.
  1725  //
  1726  // Solidity: event NewParameters(uint256 A, uint256 fee, uint256 admin_fee)
  1727  func (_Curvepool *CurvepoolFilterer) FilterNewParameters(opts *bind.FilterOpts) (*CurvepoolNewParametersIterator, error) {
  1728  
  1729  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "NewParameters")
  1730  	if err != nil {
  1731  		return nil, err
  1732  	}
  1733  	return &CurvepoolNewParametersIterator{contract: _Curvepool.contract, event: "NewParameters", logs: logs, sub: sub}, nil
  1734  }
  1735  
  1736  // WatchNewParameters is a free log subscription operation binding the contract event 0x752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e.
  1737  //
  1738  // Solidity: event NewParameters(uint256 A, uint256 fee, uint256 admin_fee)
  1739  func (_Curvepool *CurvepoolFilterer) WatchNewParameters(opts *bind.WatchOpts, sink chan<- *CurvepoolNewParameters) (event.Subscription, error) {
  1740  
  1741  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "NewParameters")
  1742  	if err != nil {
  1743  		return nil, err
  1744  	}
  1745  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1746  		defer sub.Unsubscribe()
  1747  		for {
  1748  			select {
  1749  			case log := <-logs:
  1750  				// New log arrived, parse the event and forward to the user
  1751  				event := new(CurvepoolNewParameters)
  1752  				if err := _Curvepool.contract.UnpackLog(event, "NewParameters", log); err != nil {
  1753  					return err
  1754  				}
  1755  				event.Raw = log
  1756  
  1757  				select {
  1758  				case sink <- event:
  1759  				case err := <-sub.Err():
  1760  					return err
  1761  				case <-quit:
  1762  					return nil
  1763  				}
  1764  			case err := <-sub.Err():
  1765  				return err
  1766  			case <-quit:
  1767  				return nil
  1768  			}
  1769  		}
  1770  	}), nil
  1771  }
  1772  
  1773  // ParseNewParameters is a log parse operation binding the contract event 0x752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e.
  1774  //
  1775  // Solidity: event NewParameters(uint256 A, uint256 fee, uint256 admin_fee)
  1776  func (_Curvepool *CurvepoolFilterer) ParseNewParameters(log types.Log) (*CurvepoolNewParameters, error) {
  1777  	event := new(CurvepoolNewParameters)
  1778  	if err := _Curvepool.contract.UnpackLog(event, "NewParameters", log); err != nil {
  1779  		return nil, err
  1780  	}
  1781  	event.Raw = log
  1782  	return event, nil
  1783  }
  1784  
  1785  // CurvepoolRemoveLiquidityIterator is returned from FilterRemoveLiquidity and is used to iterate over the raw logs and unpacked data for RemoveLiquidity events raised by the Curvepool contract.
  1786  type CurvepoolRemoveLiquidityIterator struct {
  1787  	Event *CurvepoolRemoveLiquidity // Event containing the contract specifics and raw log
  1788  
  1789  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1790  	event    string              // Event name to use for unpacking event data
  1791  
  1792  	logs chan types.Log        // Log channel receiving the found contract events
  1793  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1794  	done bool                  // Whether the subscription completed delivering logs
  1795  	fail error                 // Occurred error to stop iteration
  1796  }
  1797  
  1798  // Next advances the iterator to the subsequent event, returning whether there
  1799  // are any more events found. In case of a retrieval or parsing error, false is
  1800  // returned and Error() can be queried for the exact failure.
  1801  func (it *CurvepoolRemoveLiquidityIterator) Next() bool {
  1802  	// If the iterator failed, stop iterating
  1803  	if it.fail != nil {
  1804  		return false
  1805  	}
  1806  	// If the iterator completed, deliver directly whatever's available
  1807  	if it.done {
  1808  		select {
  1809  		case log := <-it.logs:
  1810  			it.Event = new(CurvepoolRemoveLiquidity)
  1811  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1812  				it.fail = err
  1813  				return false
  1814  			}
  1815  			it.Event.Raw = log
  1816  			return true
  1817  
  1818  		default:
  1819  			return false
  1820  		}
  1821  	}
  1822  	// Iterator still in progress, wait for either a data or an error event
  1823  	select {
  1824  	case log := <-it.logs:
  1825  		it.Event = new(CurvepoolRemoveLiquidity)
  1826  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1827  			it.fail = err
  1828  			return false
  1829  		}
  1830  		it.Event.Raw = log
  1831  		return true
  1832  
  1833  	case err := <-it.sub.Err():
  1834  		it.done = true
  1835  		it.fail = err
  1836  		return it.Next()
  1837  	}
  1838  }
  1839  
  1840  // Error returns any retrieval or parsing error occurred during filtering.
  1841  func (it *CurvepoolRemoveLiquidityIterator) Error() error {
  1842  	return it.fail
  1843  }
  1844  
  1845  // Close terminates the iteration process, releasing any pending underlying
  1846  // resources.
  1847  func (it *CurvepoolRemoveLiquidityIterator) Close() error {
  1848  	it.sub.Unsubscribe()
  1849  	return nil
  1850  }
  1851  
  1852  // CurvepoolRemoveLiquidity represents a RemoveLiquidity event raised by the Curvepool contract.
  1853  type CurvepoolRemoveLiquidity struct {
  1854  	Provider     common.Address
  1855  	TokenAmounts [2]*big.Int
  1856  	Fees         [2]*big.Int
  1857  	TokenSupply  *big.Int
  1858  	Raw          types.Log // Blockchain specific contextual infos
  1859  }
  1860  
  1861  // FilterRemoveLiquidity is a free log retrieval operation binding the contract event 0x7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c.
  1862  //
  1863  // Solidity: event RemoveLiquidity(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 token_supply)
  1864  func (_Curvepool *CurvepoolFilterer) FilterRemoveLiquidity(opts *bind.FilterOpts, provider []common.Address) (*CurvepoolRemoveLiquidityIterator, error) {
  1865  
  1866  	var providerRule []interface{}
  1867  	for _, providerItem := range provider {
  1868  		providerRule = append(providerRule, providerItem)
  1869  	}
  1870  
  1871  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "RemoveLiquidity", providerRule)
  1872  	if err != nil {
  1873  		return nil, err
  1874  	}
  1875  	return &CurvepoolRemoveLiquidityIterator{contract: _Curvepool.contract, event: "RemoveLiquidity", logs: logs, sub: sub}, nil
  1876  }
  1877  
  1878  // WatchRemoveLiquidity is a free log subscription operation binding the contract event 0x7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c.
  1879  //
  1880  // Solidity: event RemoveLiquidity(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 token_supply)
  1881  func (_Curvepool *CurvepoolFilterer) WatchRemoveLiquidity(opts *bind.WatchOpts, sink chan<- *CurvepoolRemoveLiquidity, provider []common.Address) (event.Subscription, error) {
  1882  
  1883  	var providerRule []interface{}
  1884  	for _, providerItem := range provider {
  1885  		providerRule = append(providerRule, providerItem)
  1886  	}
  1887  
  1888  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "RemoveLiquidity", providerRule)
  1889  	if err != nil {
  1890  		return nil, err
  1891  	}
  1892  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1893  		defer sub.Unsubscribe()
  1894  		for {
  1895  			select {
  1896  			case log := <-logs:
  1897  				// New log arrived, parse the event and forward to the user
  1898  				event := new(CurvepoolRemoveLiquidity)
  1899  				if err := _Curvepool.contract.UnpackLog(event, "RemoveLiquidity", log); err != nil {
  1900  					return err
  1901  				}
  1902  				event.Raw = log
  1903  
  1904  				select {
  1905  				case sink <- event:
  1906  				case err := <-sub.Err():
  1907  					return err
  1908  				case <-quit:
  1909  					return nil
  1910  				}
  1911  			case err := <-sub.Err():
  1912  				return err
  1913  			case <-quit:
  1914  				return nil
  1915  			}
  1916  		}
  1917  	}), nil
  1918  }
  1919  
  1920  // ParseRemoveLiquidity is a log parse operation binding the contract event 0x7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c.
  1921  //
  1922  // Solidity: event RemoveLiquidity(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 token_supply)
  1923  func (_Curvepool *CurvepoolFilterer) ParseRemoveLiquidity(log types.Log) (*CurvepoolRemoveLiquidity, error) {
  1924  	event := new(CurvepoolRemoveLiquidity)
  1925  	if err := _Curvepool.contract.UnpackLog(event, "RemoveLiquidity", log); err != nil {
  1926  		return nil, err
  1927  	}
  1928  	event.Raw = log
  1929  	return event, nil
  1930  }
  1931  
  1932  // CurvepoolRemoveLiquidityImbalanceIterator is returned from FilterRemoveLiquidityImbalance and is used to iterate over the raw logs and unpacked data for RemoveLiquidityImbalance events raised by the Curvepool contract.
  1933  type CurvepoolRemoveLiquidityImbalanceIterator struct {
  1934  	Event *CurvepoolRemoveLiquidityImbalance // Event containing the contract specifics and raw log
  1935  
  1936  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1937  	event    string              // Event name to use for unpacking event data
  1938  
  1939  	logs chan types.Log        // Log channel receiving the found contract events
  1940  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1941  	done bool                  // Whether the subscription completed delivering logs
  1942  	fail error                 // Occurred error to stop iteration
  1943  }
  1944  
  1945  // Next advances the iterator to the subsequent event, returning whether there
  1946  // are any more events found. In case of a retrieval or parsing error, false is
  1947  // returned and Error() can be queried for the exact failure.
  1948  func (it *CurvepoolRemoveLiquidityImbalanceIterator) Next() bool {
  1949  	// If the iterator failed, stop iterating
  1950  	if it.fail != nil {
  1951  		return false
  1952  	}
  1953  	// If the iterator completed, deliver directly whatever's available
  1954  	if it.done {
  1955  		select {
  1956  		case log := <-it.logs:
  1957  			it.Event = new(CurvepoolRemoveLiquidityImbalance)
  1958  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1959  				it.fail = err
  1960  				return false
  1961  			}
  1962  			it.Event.Raw = log
  1963  			return true
  1964  
  1965  		default:
  1966  			return false
  1967  		}
  1968  	}
  1969  	// Iterator still in progress, wait for either a data or an error event
  1970  	select {
  1971  	case log := <-it.logs:
  1972  		it.Event = new(CurvepoolRemoveLiquidityImbalance)
  1973  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1974  			it.fail = err
  1975  			return false
  1976  		}
  1977  		it.Event.Raw = log
  1978  		return true
  1979  
  1980  	case err := <-it.sub.Err():
  1981  		it.done = true
  1982  		it.fail = err
  1983  		return it.Next()
  1984  	}
  1985  }
  1986  
  1987  // Error returns any retrieval or parsing error occurred during filtering.
  1988  func (it *CurvepoolRemoveLiquidityImbalanceIterator) Error() error {
  1989  	return it.fail
  1990  }
  1991  
  1992  // Close terminates the iteration process, releasing any pending underlying
  1993  // resources.
  1994  func (it *CurvepoolRemoveLiquidityImbalanceIterator) Close() error {
  1995  	it.sub.Unsubscribe()
  1996  	return nil
  1997  }
  1998  
  1999  // CurvepoolRemoveLiquidityImbalance represents a RemoveLiquidityImbalance event raised by the Curvepool contract.
  2000  type CurvepoolRemoveLiquidityImbalance struct {
  2001  	Provider     common.Address
  2002  	TokenAmounts [2]*big.Int
  2003  	Fees         [2]*big.Int
  2004  	Invariant    *big.Int
  2005  	TokenSupply  *big.Int
  2006  	Raw          types.Log // Blockchain specific contextual infos
  2007  }
  2008  
  2009  // FilterRemoveLiquidityImbalance is a free log retrieval operation binding the contract event 0x2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e.
  2010  //
  2011  // Solidity: event RemoveLiquidityImbalance(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 invariant, uint256 token_supply)
  2012  func (_Curvepool *CurvepoolFilterer) FilterRemoveLiquidityImbalance(opts *bind.FilterOpts, provider []common.Address) (*CurvepoolRemoveLiquidityImbalanceIterator, error) {
  2013  
  2014  	var providerRule []interface{}
  2015  	for _, providerItem := range provider {
  2016  		providerRule = append(providerRule, providerItem)
  2017  	}
  2018  
  2019  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "RemoveLiquidityImbalance", providerRule)
  2020  	if err != nil {
  2021  		return nil, err
  2022  	}
  2023  	return &CurvepoolRemoveLiquidityImbalanceIterator{contract: _Curvepool.contract, event: "RemoveLiquidityImbalance", logs: logs, sub: sub}, nil
  2024  }
  2025  
  2026  // WatchRemoveLiquidityImbalance is a free log subscription operation binding the contract event 0x2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e.
  2027  //
  2028  // Solidity: event RemoveLiquidityImbalance(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 invariant, uint256 token_supply)
  2029  func (_Curvepool *CurvepoolFilterer) WatchRemoveLiquidityImbalance(opts *bind.WatchOpts, sink chan<- *CurvepoolRemoveLiquidityImbalance, provider []common.Address) (event.Subscription, error) {
  2030  
  2031  	var providerRule []interface{}
  2032  	for _, providerItem := range provider {
  2033  		providerRule = append(providerRule, providerItem)
  2034  	}
  2035  
  2036  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "RemoveLiquidityImbalance", providerRule)
  2037  	if err != nil {
  2038  		return nil, err
  2039  	}
  2040  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2041  		defer sub.Unsubscribe()
  2042  		for {
  2043  			select {
  2044  			case log := <-logs:
  2045  				// New log arrived, parse the event and forward to the user
  2046  				event := new(CurvepoolRemoveLiquidityImbalance)
  2047  				if err := _Curvepool.contract.UnpackLog(event, "RemoveLiquidityImbalance", log); err != nil {
  2048  					return err
  2049  				}
  2050  				event.Raw = log
  2051  
  2052  				select {
  2053  				case sink <- event:
  2054  				case err := <-sub.Err():
  2055  					return err
  2056  				case <-quit:
  2057  					return nil
  2058  				}
  2059  			case err := <-sub.Err():
  2060  				return err
  2061  			case <-quit:
  2062  				return nil
  2063  			}
  2064  		}
  2065  	}), nil
  2066  }
  2067  
  2068  // ParseRemoveLiquidityImbalance is a log parse operation binding the contract event 0x2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e.
  2069  //
  2070  // Solidity: event RemoveLiquidityImbalance(address indexed provider, uint256[2] token_amounts, uint256[2] fees, uint256 invariant, uint256 token_supply)
  2071  func (_Curvepool *CurvepoolFilterer) ParseRemoveLiquidityImbalance(log types.Log) (*CurvepoolRemoveLiquidityImbalance, error) {
  2072  	event := new(CurvepoolRemoveLiquidityImbalance)
  2073  	if err := _Curvepool.contract.UnpackLog(event, "RemoveLiquidityImbalance", log); err != nil {
  2074  		return nil, err
  2075  	}
  2076  	event.Raw = log
  2077  	return event, nil
  2078  }
  2079  
  2080  // CurvepoolTokenExchangeIterator is returned from FilterTokenExchange and is used to iterate over the raw logs and unpacked data for TokenExchange events raised by the Curvepool contract.
  2081  type CurvepoolTokenExchangeIterator struct {
  2082  	Event *CurvepoolTokenExchange // Event containing the contract specifics and raw log
  2083  
  2084  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2085  	event    string              // Event name to use for unpacking event data
  2086  
  2087  	logs chan types.Log        // Log channel receiving the found contract events
  2088  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2089  	done bool                  // Whether the subscription completed delivering logs
  2090  	fail error                 // Occurred error to stop iteration
  2091  }
  2092  
  2093  // Next advances the iterator to the subsequent event, returning whether there
  2094  // are any more events found. In case of a retrieval or parsing error, false is
  2095  // returned and Error() can be queried for the exact failure.
  2096  func (it *CurvepoolTokenExchangeIterator) Next() bool {
  2097  	// If the iterator failed, stop iterating
  2098  	if it.fail != nil {
  2099  		return false
  2100  	}
  2101  	// If the iterator completed, deliver directly whatever's available
  2102  	if it.done {
  2103  		select {
  2104  		case log := <-it.logs:
  2105  			it.Event = new(CurvepoolTokenExchange)
  2106  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2107  				it.fail = err
  2108  				return false
  2109  			}
  2110  			it.Event.Raw = log
  2111  			return true
  2112  
  2113  		default:
  2114  			return false
  2115  		}
  2116  	}
  2117  	// Iterator still in progress, wait for either a data or an error event
  2118  	select {
  2119  	case log := <-it.logs:
  2120  		it.Event = new(CurvepoolTokenExchange)
  2121  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2122  			it.fail = err
  2123  			return false
  2124  		}
  2125  		it.Event.Raw = log
  2126  		return true
  2127  
  2128  	case err := <-it.sub.Err():
  2129  		it.done = true
  2130  		it.fail = err
  2131  		return it.Next()
  2132  	}
  2133  }
  2134  
  2135  // Error returns any retrieval or parsing error occurred during filtering.
  2136  func (it *CurvepoolTokenExchangeIterator) Error() error {
  2137  	return it.fail
  2138  }
  2139  
  2140  // Close terminates the iteration process, releasing any pending underlying
  2141  // resources.
  2142  func (it *CurvepoolTokenExchangeIterator) Close() error {
  2143  	it.sub.Unsubscribe()
  2144  	return nil
  2145  }
  2146  
  2147  // CurvepoolTokenExchange represents a TokenExchange event raised by the Curvepool contract.
  2148  type CurvepoolTokenExchange struct {
  2149  	Buyer        common.Address
  2150  	SoldId       *big.Int
  2151  	TokensSold   *big.Int
  2152  	BoughtId     *big.Int
  2153  	TokensBought *big.Int
  2154  	Raw          types.Log // Blockchain specific contextual infos
  2155  }
  2156  
  2157  // FilterTokenExchange is a free log retrieval operation binding the contract event 0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140.
  2158  //
  2159  // Solidity: event TokenExchange(address indexed buyer, int128 sold_id, uint256 tokens_sold, int128 bought_id, uint256 tokens_bought)
  2160  func (_Curvepool *CurvepoolFilterer) FilterTokenExchange(opts *bind.FilterOpts, buyer []common.Address) (*CurvepoolTokenExchangeIterator, error) {
  2161  
  2162  	var buyerRule []interface{}
  2163  	for _, buyerItem := range buyer {
  2164  		buyerRule = append(buyerRule, buyerItem)
  2165  	}
  2166  
  2167  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "TokenExchange", buyerRule)
  2168  	if err != nil {
  2169  		return nil, err
  2170  	}
  2171  	return &CurvepoolTokenExchangeIterator{contract: _Curvepool.contract, event: "TokenExchange", logs: logs, sub: sub}, nil
  2172  }
  2173  
  2174  // WatchTokenExchange is a free log subscription operation binding the contract event 0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140.
  2175  //
  2176  // Solidity: event TokenExchange(address indexed buyer, int128 sold_id, uint256 tokens_sold, int128 bought_id, uint256 tokens_bought)
  2177  func (_Curvepool *CurvepoolFilterer) WatchTokenExchange(opts *bind.WatchOpts, sink chan<- *CurvepoolTokenExchange, buyer []common.Address) (event.Subscription, error) {
  2178  
  2179  	var buyerRule []interface{}
  2180  	for _, buyerItem := range buyer {
  2181  		buyerRule = append(buyerRule, buyerItem)
  2182  	}
  2183  
  2184  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "TokenExchange", buyerRule)
  2185  	if err != nil {
  2186  		return nil, err
  2187  	}
  2188  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2189  		defer sub.Unsubscribe()
  2190  		for {
  2191  			select {
  2192  			case log := <-logs:
  2193  				// New log arrived, parse the event and forward to the user
  2194  				event := new(CurvepoolTokenExchange)
  2195  				if err := _Curvepool.contract.UnpackLog(event, "TokenExchange", log); err != nil {
  2196  					return err
  2197  				}
  2198  				event.Raw = log
  2199  
  2200  				select {
  2201  				case sink <- event:
  2202  				case err := <-sub.Err():
  2203  					return err
  2204  				case <-quit:
  2205  					return nil
  2206  				}
  2207  			case err := <-sub.Err():
  2208  				return err
  2209  			case <-quit:
  2210  				return nil
  2211  			}
  2212  		}
  2213  	}), nil
  2214  }
  2215  
  2216  // ParseTokenExchange is a log parse operation binding the contract event 0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140.
  2217  //
  2218  // Solidity: event TokenExchange(address indexed buyer, int128 sold_id, uint256 tokens_sold, int128 bought_id, uint256 tokens_bought)
  2219  func (_Curvepool *CurvepoolFilterer) ParseTokenExchange(log types.Log) (*CurvepoolTokenExchange, error) {
  2220  	event := new(CurvepoolTokenExchange)
  2221  	if err := _Curvepool.contract.UnpackLog(event, "TokenExchange", log); err != nil {
  2222  		return nil, err
  2223  	}
  2224  	event.Raw = log
  2225  	return event, nil
  2226  }
  2227  
  2228  // CurvepoolTokenExchangeUnderlyingIterator is returned from FilterTokenExchangeUnderlying and is used to iterate over the raw logs and unpacked data for TokenExchangeUnderlying events raised by the Curvepool contract.
  2229  type CurvepoolTokenExchangeUnderlyingIterator struct {
  2230  	Event *CurvepoolTokenExchangeUnderlying // Event containing the contract specifics and raw log
  2231  
  2232  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2233  	event    string              // Event name to use for unpacking event data
  2234  
  2235  	logs chan types.Log        // Log channel receiving the found contract events
  2236  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2237  	done bool                  // Whether the subscription completed delivering logs
  2238  	fail error                 // Occurred error to stop iteration
  2239  }
  2240  
  2241  // Next advances the iterator to the subsequent event, returning whether there
  2242  // are any more events found. In case of a retrieval or parsing error, false is
  2243  // returned and Error() can be queried for the exact failure.
  2244  func (it *CurvepoolTokenExchangeUnderlyingIterator) Next() bool {
  2245  	// If the iterator failed, stop iterating
  2246  	if it.fail != nil {
  2247  		return false
  2248  	}
  2249  	// If the iterator completed, deliver directly whatever's available
  2250  	if it.done {
  2251  		select {
  2252  		case log := <-it.logs:
  2253  			it.Event = new(CurvepoolTokenExchangeUnderlying)
  2254  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2255  				it.fail = err
  2256  				return false
  2257  			}
  2258  			it.Event.Raw = log
  2259  			return true
  2260  
  2261  		default:
  2262  			return false
  2263  		}
  2264  	}
  2265  	// Iterator still in progress, wait for either a data or an error event
  2266  	select {
  2267  	case log := <-it.logs:
  2268  		it.Event = new(CurvepoolTokenExchangeUnderlying)
  2269  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2270  			it.fail = err
  2271  			return false
  2272  		}
  2273  		it.Event.Raw = log
  2274  		return true
  2275  
  2276  	case err := <-it.sub.Err():
  2277  		it.done = true
  2278  		it.fail = err
  2279  		return it.Next()
  2280  	}
  2281  }
  2282  
  2283  // Error returns any retrieval or parsing error occurred during filtering.
  2284  func (it *CurvepoolTokenExchangeUnderlyingIterator) Error() error {
  2285  	return it.fail
  2286  }
  2287  
  2288  // Close terminates the iteration process, releasing any pending underlying
  2289  // resources.
  2290  func (it *CurvepoolTokenExchangeUnderlyingIterator) Close() error {
  2291  	it.sub.Unsubscribe()
  2292  	return nil
  2293  }
  2294  
  2295  // CurvepoolTokenExchangeUnderlying represents a TokenExchangeUnderlying event raised by the Curvepool contract.
  2296  type CurvepoolTokenExchangeUnderlying struct {
  2297  	Buyer        common.Address
  2298  	SoldId       *big.Int
  2299  	TokensSold   *big.Int
  2300  	BoughtId     *big.Int
  2301  	TokensBought *big.Int
  2302  	Raw          types.Log // Blockchain specific contextual infos
  2303  }
  2304  
  2305  // FilterTokenExchangeUnderlying is a free log retrieval operation binding the contract event 0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b.
  2306  //
  2307  // Solidity: event TokenExchangeUnderlying(address indexed buyer, int128 sold_id, uint256 tokens_sold, int128 bought_id, uint256 tokens_bought)
  2308  func (_Curvepool *CurvepoolFilterer) FilterTokenExchangeUnderlying(opts *bind.FilterOpts, buyer []common.Address) (*CurvepoolTokenExchangeUnderlyingIterator, error) {
  2309  
  2310  	var buyerRule []interface{}
  2311  	for _, buyerItem := range buyer {
  2312  		buyerRule = append(buyerRule, buyerItem)
  2313  	}
  2314  
  2315  	logs, sub, err := _Curvepool.contract.FilterLogs(opts, "TokenExchangeUnderlying", buyerRule)
  2316  	if err != nil {
  2317  		return nil, err
  2318  	}
  2319  	return &CurvepoolTokenExchangeUnderlyingIterator{contract: _Curvepool.contract, event: "TokenExchangeUnderlying", logs: logs, sub: sub}, nil
  2320  }
  2321  
  2322  // WatchTokenExchangeUnderlying is a free log subscription operation binding the contract event 0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b.
  2323  //
  2324  // Solidity: event TokenExchangeUnderlying(address indexed buyer, int128 sold_id, uint256 tokens_sold, int128 bought_id, uint256 tokens_bought)
  2325  func (_Curvepool *CurvepoolFilterer) WatchTokenExchangeUnderlying(opts *bind.WatchOpts, sink chan<- *CurvepoolTokenExchangeUnderlying, buyer []common.Address) (event.Subscription, error) {
  2326  
  2327  	var buyerRule []interface{}
  2328  	for _, buyerItem := range buyer {
  2329  		buyerRule = append(buyerRule, buyerItem)
  2330  	}
  2331  
  2332  	logs, sub, err := _Curvepool.contract.WatchLogs(opts, "TokenExchangeUnderlying", buyerRule)
  2333  	if err != nil {
  2334  		return nil, err
  2335  	}
  2336  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2337  		defer sub.Unsubscribe()
  2338  		for {
  2339  			select {
  2340  			case log := <-logs:
  2341  				// New log arrived, parse the event and forward to the user
  2342  				event := new(CurvepoolTokenExchangeUnderlying)
  2343  				if err := _Curvepool.contract.UnpackLog(event, "TokenExchangeUnderlying", log); err != nil {
  2344  					return err
  2345  				}
  2346  				event.Raw = log
  2347  
  2348  				select {
  2349  				case sink <- event:
  2350  				case err := <-sub.Err():
  2351  					return err
  2352  				case <-quit:
  2353  					return nil
  2354  				}
  2355  			case err := <-sub.Err():
  2356  				return err
  2357  			case <-quit:
  2358  				return nil
  2359  			}
  2360  		}
  2361  	}), nil
  2362  }
  2363  
  2364  // ParseTokenExchangeUnderlying is a log parse operation binding the contract event 0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b.
  2365  //
  2366  // Solidity: event TokenExchangeUnderlying(address indexed buyer, int128 sold_id, uint256 tokens_sold, int128 bought_id, uint256 tokens_bought)
  2367  func (_Curvepool *CurvepoolFilterer) ParseTokenExchangeUnderlying(log types.Log) (*CurvepoolTokenExchangeUnderlying, error) {
  2368  	event := new(CurvepoolTokenExchangeUnderlying)
  2369  	if err := _Curvepool.contract.UnpackLog(event, "TokenExchangeUnderlying", log); err != nil {
  2370  		return nil, err
  2371  	}
  2372  	event.Raw = log
  2373  	return event, nil
  2374  }