Fix lookback for worker key when computing ticket

We need to compute the ticket based on our worker key from the lookback epoch,
not the current epoch.
This commit is contained in:
Steven Allen 2020-10-21 15:47:52 -07:00
parent 6fc8550c19
commit defeba5576

View File

@ -386,7 +386,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg,
rbase = bvals[len(bvals)-1] rbase = bvals[len(bvals)-1]
} }
ticket, err := m.computeTicket(ctx, &rbase, base) ticket, err := m.computeTicket(ctx, &rbase, base, mbi)
if err != nil { if err != nil {
return nil, xerrors.Errorf("scratching ticket failed: %w", err) return nil, xerrors.Errorf("scratching ticket failed: %w", err)
} }
@ -456,16 +456,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg,
return b, nil return b, nil
} }
func (m *Miner) computeTicket(ctx context.Context, brand *types.BeaconEntry, base *MiningBase) (*types.Ticket, error) { func (m *Miner) computeTicket(ctx context.Context, brand *types.BeaconEntry, base *MiningBase, mbi *api.MiningBaseInfo) (*types.Ticket, error) {
mi, err := m.api.StateMinerInfo(ctx, m.address, types.EmptyTSK)
if err != nil {
return nil, err
}
worker, err := m.api.StateAccountKey(ctx, mi.Worker, types.EmptyTSK)
if err != nil {
return nil, err
}
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
if err := m.address.MarshalCBOR(buf); err != nil { if err := m.address.MarshalCBOR(buf); err != nil {
return nil, xerrors.Errorf("failed to marshal address to cbor: %w", err) return nil, xerrors.Errorf("failed to marshal address to cbor: %w", err)
@ -476,6 +467,11 @@ func (m *Miner) computeTicket(ctx context.Context, brand *types.BeaconEntry, bas
buf.Write(base.TipSet.MinTicket().VRFProof) buf.Write(base.TipSet.MinTicket().VRFProof)
} }
worker, err := m.api.StateAccountKey(ctx, mbi.WorkerKey, types.EmptyTSK)
if err != nil {
return nil, err
}
input, err := store.DrawRandomness(brand.Data, crypto.DomainSeparationTag_TicketProduction, round-build.TicketRandomnessLookback, buf.Bytes()) input, err := store.DrawRandomness(brand.Data, crypto.DomainSeparationTag_TicketProduction, round-build.TicketRandomnessLookback, buf.Bytes())
if err != nil { if err != nil {
return nil, err return nil, err