slightly cleaner IsRoundWinner
This commit is contained in:
parent
d79f1c180d
commit
9bb054a767
@ -261,11 +261,11 @@ func (cg *ChainGen) nextBlockProof(ctx context.Context, pts *types.TipSet, m add
|
|||||||
VRFProof: vrfout,
|
VRFProof: vrfout,
|
||||||
}
|
}
|
||||||
|
|
||||||
win, eproofin, err := IsRoundWinner(ctx, pts, round, m, cg.eppProvs[m], &mca{w: cg.w, sm: cg.sm})
|
eproofin, err := IsRoundWinner(ctx, pts, round, m, cg.eppProvs[m], &mca{w: cg.w, sm: cg.sm})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, xerrors.Errorf("checking round winner failed: %w", err)
|
return nil, nil, xerrors.Errorf("checking round winner failed: %w", err)
|
||||||
}
|
}
|
||||||
if !win {
|
if eproofin == nil {
|
||||||
return nil, tick, nil
|
return nil, tick, nil
|
||||||
}
|
}
|
||||||
eproof, err := ComputeProof(ctx, cg.eppProvs[m], eproofin)
|
eproof, err := ComputeProof(ctx, cg.eppProvs[m], eproofin)
|
||||||
@ -477,28 +477,28 @@ type ProofInput struct {
|
|||||||
vrfout []byte
|
vrfout []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsRoundWinner(ctx context.Context, ts *types.TipSet, round int64, miner address.Address, epp ElectionPoStProver, a MiningCheckAPI) (bool, *ProofInput, error) {
|
func IsRoundWinner(ctx context.Context, ts *types.TipSet, round int64, miner address.Address, epp ElectionPoStProver, a MiningCheckAPI) (*ProofInput, error) {
|
||||||
r, err := a.ChainGetRandomness(ctx, ts.Key(), round-build.EcRandomnessLookback)
|
r, err := a.ChainGetRandomness(ctx, ts.Key(), round-build.EcRandomnessLookback)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("chain get randomness: %w", err)
|
return nil, xerrors.Errorf("chain get randomness: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mworker, err := a.StateMinerWorker(ctx, miner, ts)
|
mworker, err := a.StateMinerWorker(ctx, miner, ts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("failed to get miner worker: %w", err)
|
return nil, xerrors.Errorf("failed to get miner worker: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
vrfout, err := ComputeVRF(ctx, a.WalletSign, mworker, miner, DSepElectionPost, r)
|
vrfout, err := ComputeVRF(ctx, a.WalletSign, mworker, miner, DSepElectionPost, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("failed to compute VRF: %w", err)
|
return nil, xerrors.Errorf("failed to compute VRF: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
pset, err := a.StateMinerProvingSet(ctx, miner, ts)
|
pset, err := a.StateMinerProvingSet(ctx, miner, ts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("failed to load proving set for miner: %w", err)
|
return nil, xerrors.Errorf("failed to load proving set for miner: %w", err)
|
||||||
}
|
}
|
||||||
if len(pset) == 0 {
|
if len(pset) == 0 {
|
||||||
return false, nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var sinfos []ffi.PublicSectorInfo
|
var sinfos []ffi.PublicSectorInfo
|
||||||
@ -515,17 +515,17 @@ func IsRoundWinner(ctx context.Context, ts *types.TipSet, round int64, miner add
|
|||||||
hvrf := sha256.Sum256(vrfout)
|
hvrf := sha256.Sum256(vrfout)
|
||||||
candidates, err := epp.GenerateCandidates(ctx, sectors, hvrf[:])
|
candidates, err := epp.GenerateCandidates(ctx, sectors, hvrf[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("failed to generate electionPoSt candidates: %w", err)
|
return nil, xerrors.Errorf("failed to generate electionPoSt candidates: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
pow, err := a.StateMinerPower(ctx, miner, ts)
|
pow, err := a.StateMinerPower(ctx, miner, ts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("failed to check power: %w", err)
|
return nil, xerrors.Errorf("failed to check power: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize, err := a.StateMinerSectorSize(ctx, miner, ts)
|
ssize, err := a.StateMinerSectorSize(ctx, miner, ts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, nil, xerrors.Errorf("failed to look up miners sector size: %w", err)
|
return nil, xerrors.Errorf("failed to look up miners sector size: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var winners []sectorbuilder.EPostCandidate
|
var winners []sectorbuilder.EPostCandidate
|
||||||
@ -537,10 +537,10 @@ func IsRoundWinner(ctx context.Context, ts *types.TipSet, round int64, miner add
|
|||||||
|
|
||||||
// no winners, sad
|
// no winners, sad
|
||||||
if len(winners) == 0 {
|
if len(winners) == 0 {
|
||||||
return false, nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return true, &ProofInput{
|
return &ProofInput{
|
||||||
sectors: sectors,
|
sectors: sectors,
|
||||||
hvrf: hvrf[:],
|
hvrf: hvrf[:],
|
||||||
winners: winners,
|
winners: winners,
|
||||||
|
@ -264,12 +264,12 @@ func (m *Miner) mineOne(ctx context.Context, addr address.Address, base *MiningB
|
|||||||
return nil, xerrors.Errorf("scratching ticket failed: %w", err)
|
return nil, xerrors.Errorf("scratching ticket failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
win, proofin, err := gen.IsRoundWinner(ctx, base.ts, int64(base.ts.Height()+base.nullRounds+1), addr, m.epp, m.api)
|
proofin, err := gen.IsRoundWinner(ctx, base.ts, int64(base.ts.Height()+base.nullRounds+1), addr, m.epp, m.api)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, xerrors.Errorf("failed to check if we win next round: %w", err)
|
return nil, xerrors.Errorf("failed to check if we win next round: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !win {
|
if proofin == nil {
|
||||||
base.nullRounds++
|
base.nullRounds++
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user