diff --git a/build/params_shared.go b/build/params_shared.go index e1ac74110..5fcc73181 100644 --- a/build/params_shared.go +++ b/build/params_shared.go @@ -64,7 +64,7 @@ const MaxSealLookback = SealRandomnessLookbackLimit + 2000 // Mining // Epochs -const EcRandomnessLookback = 300 +const EcRandomnessLookback = 1 // ///// // Devnet settings diff --git a/chain/gen/gen.go b/chain/gen/gen.go index 544f8aa68..9fc9a79c6 100644 --- a/chain/gen/gen.go +++ b/chain/gen/gen.go @@ -276,8 +276,12 @@ func CarWalkFunc(nd format.Node) (out []*format.Link, err error) { func (cg *ChainGen) nextBlockProof(ctx context.Context, pts *types.TipSet, m address.Address, round int64) (*types.EPostProof, *types.Ticket, error) { mc := &mca{w: cg.w, sm: cg.sm} - // TODO: REVIEW: Am I doing this correctly? - ticketRand, err := mc.ChainGetRandomness(ctx, pts.Key(), crypto.DomainSeparationTag_TicketProduction, pts.Height(), m.Bytes()) + buf := new(bytes.Buffer) + if err := m.MarshalCBOR(buf); err != nil { + return nil, nil, xerrors.Errorf("failed to cbor marshal address: %w", err) + } + + ticketRand, err := mc.ChainGetRandomness(ctx, pts.Key(), crypto.DomainSeparationTag_TicketProduction, abi.ChainEpoch(round-build.EcRandomnessLookback), buf.Bytes()) if err != nil { return nil, nil, err } @@ -549,7 +553,11 @@ type ProofInput struct { } func IsRoundWinner(ctx context.Context, ts *types.TipSet, round int64, miner address.Address, epp ElectionPoStProver, a MiningCheckAPI) (*ProofInput, error) { - epostRand, err := a.ChainGetRandomness(ctx, ts.Key(), crypto.DomainSeparationTag_ElectionPoStChallengeSeed, abi.ChainEpoch(round-build.EcRandomnessLookback), miner.Bytes()) + buf := new(bytes.Buffer) + if err := miner.MarshalCBOR(buf); err != nil { + return nil, xerrors.Errorf("failed to cbor marshal address: %w") + } + epostRand, err := a.ChainGetRandomness(ctx, ts.Key(), crypto.DomainSeparationTag_ElectionPoStChallengeSeed, abi.ChainEpoch(round-build.EcRandomnessLookback), buf.Bytes()) if err != nil { return nil, xerrors.Errorf("chain get randomness: %w", err) } diff --git a/chain/sync.go b/chain/sync.go index 218fc9529..eeb78b745 100644 --- a/chain/sync.go +++ b/chain/sync.go @@ -1,6 +1,7 @@ package chain import ( + "bytes" "context" "errors" "fmt" @@ -617,7 +618,11 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) err }) tktsCheck := async.Err(func() error { - vrfBase, err := syncer.sm.ChainStore().GetRandomness(ctx, baseTs.Cids(), crypto.DomainSeparationTag_TicketProduction, int64(baseTs.Height()), h.Miner.Bytes()) + buf := new(bytes.Buffer) + if err := h.Miner.MarshalCBOR(buf); err != nil { + return xerrors.Errorf("failed to marshal miner address to cbor: %w", err) + } + vrfBase, err := syncer.sm.ChainStore().GetRandomness(ctx, baseTs.Cids(), crypto.DomainSeparationTag_TicketProduction, int64(baseTs.Height()), buf.Bytes()) if err != nil { return xerrors.Errorf("failed to get randomness for verifying election proof: %w", err) } @@ -656,7 +661,11 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) err } func (syncer *Syncer) VerifyElectionPoStProof(ctx context.Context, h *types.BlockHeader, baseTs *types.TipSet, waddr address.Address) error { - rand, err := syncer.sm.ChainStore().GetRandomness(ctx, baseTs.Cids(), crypto.DomainSeparationTag_ElectionPoStChallengeSeed, int64(h.Height-build.EcRandomnessLookback), h.Miner.Bytes()) + buf := new(bytes.Buffer) + if err := h.Miner.MarshalCBOR(buf); err != nil { + return xerrors.Errorf("failed to marshal miner to cbor: %w", err) + } + rand, err := syncer.sm.ChainStore().GetRandomness(ctx, baseTs.Cids(), crypto.DomainSeparationTag_ElectionPoStChallengeSeed, int64(h.Height-build.EcRandomnessLookback), buf.Bytes()) if err != nil { return xerrors.Errorf("failed to get randomness for verifying election proof: %w", err) } diff --git a/miner/miner.go b/miner/miner.go index 6f2f00d75..d4f02241e 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -1,12 +1,13 @@ package miner import ( + "bytes" "context" "fmt" "sync" "time" - "github.com/filecoin-project/go-address" + address "github.com/filecoin-project/go-address" "github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/specs-actors/actors/crypto" lru "github.com/hashicorp/golang-lru" @@ -348,7 +349,12 @@ func (m *Miner) computeTicket(ctx context.Context, addr address.Address, base *M return nil, err } - input, err := m.api.ChainGetRandomness(ctx, base.ts.Key(), crypto.DomainSeparationTag_TicketProduction, base.ts.Height(), addr.Bytes()) + buf := new(bytes.Buffer) + if err := addr.MarshalCBOR(buf); err != nil { + return nil, xerrors.Errorf("failed to marshal address to cbor: %w", err) + } + + input, err := m.api.ChainGetRandomness(ctx, base.ts.Key(), crypto.DomainSeparationTag_TicketProduction, base.ts.Height(), buf.Bytes()) if err != nil { return nil, err }