rpc: implement getunclaimed

closes #712
This commit is contained in:
Anna Shaleva 2020-03-06 20:38:17 +03:00
parent aab7dd515f
commit c23a522d25
5 changed files with 139 additions and 33 deletions

View file

@ -0,0 +1,49 @@
package result
import (
"github.com/nspcc-dev/neo-go/pkg/core"
"github.com/nspcc-dev/neo-go/pkg/core/state"
"github.com/nspcc-dev/neo-go/pkg/util"
)
// Unclaimed wrapper is used to represent getunclaimed return result.
type Unclaimed struct {
Available util.Fixed8 `json:"available"`
Unavailable util.Fixed8 `json:"unavailable"`
Unclaimed util.Fixed8 `json:"unclaimed"`
}
// NewUnclaimed creates a new Unclaimed wrapper using given Blockchainer.
func NewUnclaimed(a *state.Account, chain core.Blockchainer) (*Unclaimed, error) {
var (
available util.Fixed8
unavailable util.Fixed8
)
for _, ucb := range a.Unclaimed {
gen, sys, err := chain.CalculateClaimable(ucb.Value, ucb.Start, ucb.End)
if err != nil {
return nil, err
}
available += gen + sys
}
blockHeight := chain.BlockHeight()
for _, usb := range a.Balances[core.GoverningTokenID()] {
_, txHeight, err := chain.GetTransaction(usb.Tx)
if err != nil {
return nil, err
}
gen, sys, err := chain.CalculateClaimable(usb.Value, txHeight, blockHeight)
if err != nil {
return nil, err
}
unavailable += gen + sys
}
return &Unclaimed{
Available: available,
Unavailable: unavailable,
Unclaimed: available + unavailable,
}, nil
}