func (_Hcurve *HcurveSession) RemoveLiquidityOneCoin(handler common.Address, pool common.Address, tokenI common.Address, tokenAmount *big.Int, i *big.Int, minAmount *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.RemoveLiquidityOneCoin(&_Hcurve.TransactOpts, handler, pool, tokenI, tokenAmount, i, minAmount)
}
RemoveLiquidityOneCoin is a paid mutator transaction binding the contract method 0x301ee996.

Solidity: function removeLiquidityOneCoin(address handler, address pool, address tokenI, uint256 tokenAmount, int128 i, uint256 minAmount) payable returns()
package hcurve
import (
	"math/big"
	"strings"
	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)
var (
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)
const HcurveABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"ONE_SPLIT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minMintAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenI\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenJ\",\"type\":\"address\"},{\"internalType\":\"int128\",\"name\":\"i\",\"type\":\"int128\"},{\"internalType\":\"int128\",\"name\":\"j\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"}],\"name\":\"exchange\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenI\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenJ\",\"type\":\"address\"},{\"internalType\":\"int128\",\"name\":\"i\",\"type\":\"int128\"},{\"internalType\":\"int128\",\"name\":\"j\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"}],\"name\":\"exchangeUnderlying\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"postProcess\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenI\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"int128\",\"name\":\"i\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityOneCoin\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenI\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"int128\",\"name\":\"i\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityOneCoinDust\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minReturn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"distribution\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"featureFlags\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}]"
type Hcurve struct {
	HcurveCaller      
	HcurveTransactor  
	HcurveFilterer    
}
type HcurveCaller struct {
	contract *bind.BoundContract  
}
type HcurveTransactor struct {
	contract *bind.BoundContract  
}
type HcurveFilterer struct {
	contract *bind.BoundContract  
}
type HcurveSession struct {
	Contract     *Hcurve            
	CallOpts     bind.CallOpts      
	TransactOpts bind.TransactOpts  
}
type HcurveCallerSession struct {
	Contract *HcurveCaller  
	CallOpts bind.CallOpts  
}
type HcurveTransactorSession struct {
	Contract     *HcurveTransactor  
	TransactOpts bind.TransactOpts  
}
type HcurveRaw struct {
	Contract *Hcurve  
}
type HcurveCallerRaw struct {
	Contract *HcurveCaller  
}
type HcurveTransactorRaw struct {
	Contract *HcurveTransactor  
}
func NewHcurve(address common.Address, backend bind.ContractBackend) (*Hcurve, error) {
	contract, err := bindHcurve(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Hcurve{HcurveCaller: HcurveCaller{contract: contract}, HcurveTransactor: HcurveTransactor{contract: contract}, HcurveFilterer: HcurveFilterer{contract: contract}}, nil
}
func NewHcurveCaller(address common.Address, caller bind.ContractCaller) (*HcurveCaller, error) {
	contract, err := bindHcurve(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &HcurveCaller{contract: contract}, nil
}
func NewHcurveTransactor(address common.Address, transactor bind.ContractTransactor) (*HcurveTransactor, error) {
	contract, err := bindHcurve(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &HcurveTransactor{contract: contract}, nil
}
func NewHcurveFilterer(address common.Address, filterer bind.ContractFilterer) (*HcurveFilterer, error) {
	contract, err := bindHcurve(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &HcurveFilterer{contract: contract}, nil
}
func bindHcurve(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(HcurveABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
func (_Hcurve *HcurveRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Hcurve.Contract.HcurveCaller.contract.Call(opts, result, method, params...)
}
func (_Hcurve *HcurveRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Hcurve.Contract.HcurveTransactor.contract.Transfer(opts)
}
func (_Hcurve *HcurveRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Hcurve.Contract.HcurveTransactor.contract.Transact(opts, method, params...)
}
func (_Hcurve *HcurveCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Hcurve.Contract.contract.Call(opts, result, method, params...)
}
func (_Hcurve *HcurveTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Hcurve.Contract.contract.Transfer(opts)
}
func (_Hcurve *HcurveTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Hcurve.Contract.contract.Transact(opts, method, params...)
}
func (_Hcurve *HcurveCaller) ONESPLIT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Hcurve.contract.Call(opts, &out, "ONE_SPLIT")
	if err != nil {
		return *new(common.Address), err
	}
	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
	return out0, err
}
func (_Hcurve *HcurveSession) ONESPLIT() (common.Address, error) {
	return _Hcurve.Contract.ONESPLIT(&_Hcurve.CallOpts)
}
func (_Hcurve *HcurveCallerSession) ONESPLIT() (common.Address, error) {
	return _Hcurve.Contract.ONESPLIT(&_Hcurve.CallOpts)
}
func (_Hcurve *HcurveTransactor) AddLiquidity(opts *bind.TransactOpts, handler common.Address, pool common.Address, tokens []common.Address, amounts []*big.Int, minMintAmount *big.Int) (*types.Transaction, error) {
	return _Hcurve.contract.Transact(opts, "addLiquidity", handler, pool, tokens, amounts, minMintAmount)
}
func (_Hcurve *HcurveSession) AddLiquidity(handler common.Address, pool common.Address, tokens []common.Address, amounts []*big.Int, minMintAmount *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.AddLiquidity(&_Hcurve.TransactOpts, handler, pool, tokens, amounts, minMintAmount)
}
func (_Hcurve *HcurveTransactorSession) AddLiquidity(handler common.Address, pool common.Address, tokens []common.Address, amounts []*big.Int, minMintAmount *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.AddLiquidity(&_Hcurve.TransactOpts, handler, pool, tokens, amounts, minMintAmount)
}
func (_Hcurve *HcurveTransactor) Exchange(opts *bind.TransactOpts, handler common.Address, tokenI common.Address, tokenJ common.Address, i *big.Int, j *big.Int, dx *big.Int, minDy *big.Int) (*types.Transaction, error) {
	return _Hcurve.contract.Transact(opts, "exchange", handler, tokenI, tokenJ, i, j, dx, minDy)
}
func (_Hcurve *HcurveSession) Exchange(handler common.Address, tokenI common.Address, tokenJ common.Address, i *big.Int, j *big.Int, dx *big.Int, minDy *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.Exchange(&_Hcurve.TransactOpts, handler, tokenI, tokenJ, i, j, dx, minDy)
}
func (_Hcurve *HcurveTransactorSession) Exchange(handler common.Address, tokenI common.Address, tokenJ common.Address, i *big.Int, j *big.Int, dx *big.Int, minDy *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.Exchange(&_Hcurve.TransactOpts, handler, tokenI, tokenJ, i, j, dx, minDy)
}
func (_Hcurve *HcurveTransactor) ExchangeUnderlying(opts *bind.TransactOpts, handler common.Address, tokenI common.Address, tokenJ common.Address, i *big.Int, j *big.Int, dx *big.Int, minDy *big.Int) (*types.Transaction, error) {
	return _Hcurve.contract.Transact(opts, "exchangeUnderlying", handler, tokenI, tokenJ, i, j, dx, minDy)
}
func (_Hcurve *HcurveSession) ExchangeUnderlying(handler common.Address, tokenI common.Address, tokenJ common.Address, i *big.Int, j *big.Int, dx *big.Int, minDy *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.ExchangeUnderlying(&_Hcurve.TransactOpts, handler, tokenI, tokenJ, i, j, dx, minDy)
}
func (_Hcurve *HcurveTransactorSession) ExchangeUnderlying(handler common.Address, tokenI common.Address, tokenJ common.Address, i *big.Int, j *big.Int, dx *big.Int, minDy *big.Int) (*types.Transaction, error) {
	return _Hcurve.Contract.ExchangeUnderlying(&_Hcurve.TransactOpts, handler, tokenI, tokenJ, i, j, dx, minDy)
}
func (_Hcurve *HcurveTransactor) PostProcess(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Hcurve.contract.Transact(opts, "postProcess")
}
func (_Hcurve *HcurveSession) PostProcess() (*types.Transaction, error) {
	return _Hcurve.Contract.PostProcess(&_Hcurve.TransactOpts)
}
func (_Hcurve *HcurveTransactorSession) PostProcess() (*types.Transaction, error) {
	return _Hcurve.Contract.PostProcess(&_Hcurve.TransactOpts)
}
func (_Hcurve *HcurveTransactor) RemoveLiquidityOneCoin(opts *bind.TransactOpts, handler common.Address, pool common.Address, tokenI common.Address, tokenAmount *big.Int, i *big.Int, minAmount *big.Int) (*types.Transaction, error) {
	return _Hcurve.contract.Transact(opts, "removeLiquidityOneCoin", handler, pool, tokenI, tokenAmount, i, minAmount)
}