github.com/lino-network/lino@v0.6.11/types/minidollar.go (about)

     1  package types
     2  
     3  import (
     4  	"math/big"
     5  
     6  	sdk "github.com/cosmos/cosmos-sdk/types"
     7  )
     8  
     9  // 1 LINO  = 0.012 USD
    10  // 10^5 Coin = 12 * 10^7 MiniDollar
    11  // 1 coin = 1200 minidollar
    12  var TestnetPrice = NewMiniDollar(1200)
    13  
    14  // 1 MiniDollar = 10^(-10) USD.
    15  type MiniDollar struct {
    16  	// embeding sdk.Int, inheriting marshal/unmarshal function from
    17  	// sdk.Int, so DO NOT add any other field in this struct.
    18  	sdk.Int
    19  }
    20  
    21  func NewMiniDollar(v int64) MiniDollar {
    22  	return MiniDollar{sdk.NewInt(v)}
    23  }
    24  
    25  func NewMiniDollarFromInt(i sdk.Int) MiniDollar {
    26  	return MiniDollar{i}
    27  }
    28  
    29  func NewMiniDollarFromBig(v *big.Int) MiniDollar {
    30  	return MiniDollar{sdk.NewIntFromBigInt(v)}
    31  }
    32  
    33  // TODO(yumin): MUST DELETE on upgrade3
    34  func NewMiniDollarFromTestnetCoin(c Coin) MiniDollar {
    35  	return NewMiniDollarFromInt(c.Amount.Mul(TestnetPrice.Int))
    36  }
    37  
    38  func (m MiniDollar) Plus(other MiniDollar) MiniDollar {
    39  	return MiniDollar{m.Add(other.Int)}
    40  }
    41  
    42  func (m MiniDollar) Minus(other MiniDollar) MiniDollar {
    43  	return MiniDollar{m.Sub(other.Int)}
    44  }
    45  
    46  func (m MiniDollar) Multiply(other MiniDollar) MiniDollar {
    47  	return MiniDollar{m.Mul(other.Int)}
    48  }
    49  
    50  func (m MiniDollar) Equal(other MiniDollar) bool {
    51  	return m.Int.Equal(other.Int)
    52  }
    53  
    54  func (m MiniDollar) LT(other MiniDollar) bool {
    55  	return m.Int.LT(other.Int)
    56  }