add command to inspect and redeem block rewards

This commit is contained in:
whyrusleeping
2020-03-05 21:32:52 -08:00
parent 56cb88819c
commit 1183e082af
7 changed files with 171 additions and 1 deletions
+39
View File
@@ -23,6 +23,8 @@ import (
"github.com/filecoin-project/specs-actors/actors/builtin/market"
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
samsig "github.com/filecoin-project/specs-actors/actors/builtin/multisig"
"github.com/filecoin-project/specs-actors/actors/builtin/reward"
"github.com/filecoin-project/specs-actors/actors/util/adt"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/chain/gen"
@@ -575,3 +577,40 @@ func (a *StateAPI) MsigGetAvailableBalance(ctx context.Context, addr address.Add
minBalance = types.BigMul(minBalance, types.NewInt(uint64(offset)))
return types.BigSub(act.Balance, minBalance), nil
}
func (a *StateAPI) StateListRewards(ctx context.Context, miner address.Address, tsk types.TipSetKey) ([]reward.Reward, error) {
ts, err := a.Chain.GetTipSetFromKey(tsk)
if err != nil {
return nil, err
}
var st reward.State
if _, err := a.StateManager.LoadActorState(ctx, builtin.RewardActorAddr, &st, ts); err != nil {
return nil, xerrors.Errorf("failed to load reward actor state: %w", err)
}
as := store.ActorStore(ctx, a.Chain.Blockstore())
rmap := adt.AsMultimap(as, st.RewardMap)
rewards, found, err := rmap.Get(adt.AddrKey(miner))
if err != nil {
return nil, xerrors.Errorf("failed to get rewards set for miner: %w", err)
}
if !found {
return nil, xerrors.Errorf("no rewards found for miner")
}
var out []reward.Reward
var r reward.Reward
err = rewards.ForEach(&r, func(i int64) error {
or := r
out = append(out, or)
return nil
})
if err != nil {
return nil, xerrors.Errorf("rewards.ForEach failed: %w", err)
}
return out, nil
}