From c6769522789b62908fbe6b918da9aff53fb2f6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Kunze=20K=C3=BCllmer?= <31522760+fedekunze@users.noreply.github.com> Date: Sun, 17 Apr 2022 20:05:43 +0200 Subject: [PATCH] feat: add vesting util functions (#11652) * feat: add vesting util functions * changelog * revert string deletion * fix build * Update x/auth/vesting/types/period.go Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Marko --- CHANGELOG.md | 1 + x/auth/vesting/types/period.go | 42 ++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 606778bf535e..dc1dffdacd0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -175,6 +175,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements +* (x/auth/vesting) [\#11652](https://github.com/cosmos/cosmos-sdk/pull/11652) Add util functions for `Period(s)` * [\#11630](https://github.com/cosmos/cosmos-sdk/pull/11630) Add SafeSub method to sdk.Coin. * [\#11511](https://github.com/cosmos/cosmos-sdk/pull/11511) Add api server flags to start command. * [\#11484](https://github.com/cosmos/cosmos-sdk/pull/11484) Implement getter for keyring backend option. diff --git a/x/auth/vesting/types/period.go b/x/auth/vesting/types/period.go index e78eab31f2af..2d64fd6199db 100644 --- a/x/auth/vesting/types/period.go +++ b/x/auth/vesting/types/period.go @@ -3,23 +3,55 @@ package types import ( "fmt" "strings" + "time" "sigs.k8s.io/yaml" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // Periods stores all vesting periods passed as part of a PeriodicVestingAccount type Periods []Period -// String Period implements stringer interface +// Duration is converts the period Length from seconds to a time.Duration +func (p Period) Duration() time.Duration { + return time.Duration(p.Length) * time.Second +} + +// String implements the fmt.Stringer interface func (p Period) String() string { out, _ := yaml.Marshal(p) return string(out) } -// String Periods implements stringer interface -func (vp Periods) String() string { - periodsListString := make([]string, len(vp)) - for _, period := range vp { +// TotalLength return the total length in seconds for a period +func (p Periods) TotalLength() int64 { + var total int64 + for _, period := range p { + total += period.Length + } + return total +} + +// TotalDuration returns the total duration of the period +func (p Periods) TotalDuration() time.Duration { + len := p.TotalLength() + return time.Duration(len) * time.Second +} + +// TotalDuration returns the sum of coins for the period +func (p Periods) TotalAmount() sdk.Coins { + total := sdk.Coins{} + for _, period := range p { + total = total.Add(period.Amount...) + } + return total +} + +// String implements the fmt.Stringer interface +func (p Periods) String() string { + periodsListString := make([]string, len(p)) + for _, period := range p { periodsListString = append(periodsListString, period.String()) }