-
Notifications
You must be signed in to change notification settings - Fork 462
/
testing.go
151 lines (131 loc) · 4.64 KB
/
testing.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package state
import (
"context"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/network"
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/pkg/errors"
"github.com/filecoin-project/venus/pkg/util/ffiwrapper"
"github.com/filecoin-project/venus/venus-shared/actors/builtin"
"github.com/filecoin-project/venus/venus-shared/actors/builtin/miner"
)
// FakeStateView is a fake state view.
type FakeStateView struct {
NetworkName string
Power *NetworkPower
Miners map[address.Address]*FakeMinerState
}
// NewFakeStateView creates a new fake state view.
func NewFakeStateView(rawBytePower, qaPower abi.StoragePower, minerCount, minPowerMinerCount int64) *FakeStateView {
return &FakeStateView{
Power: &NetworkPower{
RawBytePower: rawBytePower,
QualityAdjustedPower: qaPower,
MinerCount: minerCount,
MinPowerMinerCount: minPowerMinerCount,
},
Miners: make(map[address.Address]*FakeMinerState),
}
}
// FakeMinerState is fake state for a single miner.
type FakeMinerState struct {
Owner address.Address
Worker address.Address
PeerID peer.ID
ProvingPeriodStart abi.ChainEpoch
ProvingPeriodEnd abi.ChainEpoch
PoStFailures int
Sectors []miner.SectorOnChainInfo
Deadlines []*bitfield.BitField
ClaimedRawPower abi.StoragePower
ClaimedQAPower abi.StoragePower
PledgeRequirement abi.TokenAmount
PledgeBalance abi.TokenAmount
}
// FakeSectorInfo fakes a subset of sector onchain info
type FakeSectorInfo struct {
ID abi.SectorNumber
SealedCID cid.Cid
}
func (v *FakeStateView) InitNetworkName(_ context.Context) (string, error) {
return v.NetworkName, nil
}
// MinerSectorCount reports the number of sectors a miner has pledged
func (v *FakeStateView) MinerSectorCount(ctx context.Context, maddr address.Address) (uint64, error) {
m, ok := v.Miners[maddr]
if !ok {
return 0, errors.Errorf("no miner %s", maddr)
}
return uint64(len(m.Sectors)), nil
}
func (v *FakeStateView) MinerSectorInfo(_ context.Context, maddr address.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, error) {
m, ok := v.Miners[maddr]
if !ok {
return nil, errors.Errorf("no miner %s", maddr)
}
for _, s := range m.Sectors {
if s.SectorNumber == sectorNum {
return &s, nil
}
}
return nil, nil
}
func (v *FakeStateView) MinerExists(_ context.Context, _ address.Address) (bool, error) {
return true, nil
}
func (v *FakeStateView) MinerProvingPeriod(ctx context.Context, maddr address.Address) (start abi.ChainEpoch, end abi.ChainEpoch, failureCount int, err error) {
m, ok := v.Miners[maddr]
if !ok {
return 0, 0, 0, errors.Errorf("no miner %s", maddr)
}
return m.ProvingPeriodStart, m.ProvingPeriodEnd, m.PoStFailures, nil
}
func (v *FakeStateView) PowerNetworkTotal(_ context.Context) (*NetworkPower, error) {
return v.Power, nil
}
func (v *FakeStateView) MinerClaimedPower(ctx context.Context, miner address.Address) (abi.StoragePower, abi.StoragePower, error) {
m, ok := v.Miners[miner]
if !ok {
return big.Zero(), big.Zero(), errors.Errorf("no miner %s", miner)
}
return m.ClaimedRawPower, m.ClaimedQAPower, nil
}
func (v *FakeStateView) GetSectorsForWinningPoSt(ctx context.Context, nv network.Version, pv ffiwrapper.Verifier, maddr address.Address, rand abi.PoStRandomness) ([]builtin.ExtendedSectorInfo, error) {
_, ok := v.Miners[maddr]
if !ok {
return nil, errors.Errorf("no miner %s", maddr)
}
return []builtin.ExtendedSectorInfo{}, nil
}
func (v *FakeStateView) MinerPledgeCollateral(_ context.Context, maddr address.Address) (locked abi.TokenAmount, total abi.TokenAmount, err error) {
m, ok := v.Miners[maddr]
if !ok {
return big.Zero(), big.Zero(), errors.Errorf("no miner %s", maddr)
}
return m.PledgeRequirement, m.PledgeBalance, nil
}
func (v *FakeStateView) MinerInfo(ctx context.Context, maddr address.Address, nv network.Version) (*miner.MinerInfo, error) {
m, ok := v.Miners[maddr]
if !ok {
return nil, errors.Errorf("no miner %s", maddr)
}
return &miner.MinerInfo{
Owner: m.Owner,
Worker: m.Worker,
PeerId: []byte(m.PeerID),
}, nil
}
func (v *FakeStateView) GetMinerWorkerRaw(ctx context.Context, maddr address.Address) (address.Address, error) {
m, ok := v.Miners[maddr]
if !ok {
return address.Undef, errors.Errorf("no miner %s", maddr)
}
return m.Worker, nil
}
func (v *FakeStateView) ResolveToDeterministicAddress(ctx context.Context, addr address.Address) (address.Address, error) {
return addr, nil
}