func (coin Coin) IsEqual(other Coin) bool {
	return coin.Amount.Equal(other.Amount)
}
IsEqual - returns true if the two sets of Coins have the same value
package types
import (
	"fmt"
	"math"
	"math/big"
	sdk "github.com/cosmos/cosmos-sdk/types"
)
type LNO = string
var (
	LowerBoundRat = NewDecFromRat(1, Decimals)
	UpperBoundRat = sdk.NewDec(math.MaxInt64 / Decimals)
)
type Coin struct {
	Amount sdk.Int `json:"amount"`
}
func NewCoin(amount sdk.Int) Coin {
	return Coin{Amount: amount}
}
func NewCoinFromInt64(amount int64) Coin {
	return Coin{sdk.NewInt(amount)}
}
func NewCoinFromBigInt(amount *big.Int) Coin {
	sdkInt := sdk.NewIntFromBigInt(amount)
	return Coin{sdkInt}
}
func NewCoinFromString(amount string) (Coin, bool) {
	res, ok := sdk.NewIntFromString(amount)
	return Coin{res}, ok
}
func LinoToCoin(lino LNO) (Coin, sdk.Error) {
	rat, err := sdk.NewDecFromStr(lino)
	if err != nil {
		return NewCoinFromInt64(0), ErrInvalidCoins("Illegal LNO")
	}
	if rat.GT(UpperBoundRat) {
		return NewCoinFromInt64(0), ErrInvalidCoins("LNO overflow")
	}
	if rat.LT(LowerBoundRat) {
		return NewCoinFromInt64(0), ErrInvalidCoins("LNO can't be less than lower bound")
	}
	return DecToCoin(rat.Mul(sdk.NewDec(Decimals))), nil
}
func MustLinoToCoin(lino LNO) Coin {
	c, err := LinoToCoin(lino)
	if err != nil {
		panic(err)
	}
	return c
}
func DecToCoin(rat sdk.Dec) Coin {
	return NewCoinFromBigInt(rat.RoundInt().BigInt())
}
func (coin Coin) ToDec() sdk.Dec {
	return sdk.NewDecFromBigInt(coin.Amount.BigInt())
}
func (coin Coin) ToInt64() (int64, sdk.Error) {
	if !coin.Amount.BigInt().IsInt64() {
		return 0, ErrAmountOverflow()
	}
	return coin.Amount.BigInt().Int64(), nil
}
func (coin Coin) String() string {
	return fmt.Sprintf("coin:%v", coin.Amount)
}
func (coin Coin) IsZero() bool {
	return coin.Amount.Sign() == 0
}
func (coin Coin) IsGT(other Coin) bool {
	return coin.Amount.GT(other.Amount)
}
func (coin Coin) IsGTE(other Coin) bool {
	return coin.Amount.GT(other.Amount) || coin.Amount.Equal(other.Amount)
}