59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package types
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
yaml "gopkg.in/yaml.v2"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/x/bank/exported"
|
|
)
|
|
|
|
// Implements Delegation interface
|
|
var _ exported.SupplyI = (*Supply)(nil)
|
|
|
|
// NewSupply creates a new Supply instance
|
|
func NewSupply(total sdk.Coins) *Supply {
|
|
return &Supply{total}
|
|
}
|
|
|
|
// DefaultSupply creates an empty Supply
|
|
func DefaultSupply() *Supply {
|
|
return NewSupply(sdk.NewCoins())
|
|
}
|
|
|
|
// SetTotal sets the total supply.
|
|
func (supply *Supply) SetTotal(total sdk.Coins) {
|
|
supply.Total = total
|
|
}
|
|
|
|
// GetTotal returns the supply total.
|
|
func (supply Supply) GetTotal() sdk.Coins {
|
|
return supply.Total
|
|
}
|
|
|
|
// Inflate adds coins to the total supply
|
|
func (supply *Supply) Inflate(amount sdk.Coins) {
|
|
supply.Total = supply.Total.Add(amount...)
|
|
}
|
|
|
|
// Deflate subtracts coins from the total supply.
|
|
func (supply *Supply) Deflate(amount sdk.Coins) {
|
|
supply.Total = supply.Total.Sub(amount)
|
|
}
|
|
|
|
// String returns a human readable string representation of a supplier.
|
|
func (supply Supply) String() string {
|
|
bz, _ := yaml.Marshal(supply)
|
|
return string(bz)
|
|
}
|
|
|
|
// ValidateBasic validates the Supply coins and returns error if invalid
|
|
func (supply Supply) ValidateBasic() error {
|
|
if !supply.Total.IsValid() {
|
|
return fmt.Errorf("invalid total supply: %s", supply.Total.String())
|
|
}
|
|
|
|
return nil
|
|
}
|