update to use VRF digest appropriately and simplify drawing rand past genesis
This commit is contained in:
parent
1b6646b55a
commit
cf0a3af1f8
@ -890,12 +890,12 @@ func (cs *ChainStore) TryFillTipSet(ts *types.TipSet) (*FullTipSet, error) {
|
||||
}
|
||||
|
||||
func drawRandomness(t *types.Ticket, pers crypto.DomainSeparationTag, round int64, entropy []byte) ([]byte, error) {
|
||||
// TODO: Make this spec compliant
|
||||
h := blake2b.New256()
|
||||
if err := binary.Write(h, binary.BigEndian, int64(pers)); err != nil {
|
||||
return nil, xerrors.Errorf("deriving randomness: %w", err)
|
||||
}
|
||||
h.Write(t.VRFProof)
|
||||
VRFDigest := blake2b.Sum256(t.VRFProof)
|
||||
h.Write(VRFDigest[:])
|
||||
if err := binary.Write(h, binary.BigEndian, round); err != nil {
|
||||
return nil, xerrors.Errorf("deriving randomness: %w", err)
|
||||
}
|
||||
@ -921,25 +921,12 @@ func (cs *ChainStore) GetRandomness(ctx context.Context, blks []cid.Cid, pers cr
|
||||
|
||||
mtb := nts.MinTicketBlock()
|
||||
|
||||
if int64(nts.Height()) <= round {
|
||||
// if at (or just past -- for null epochs) appropriate epoch
|
||||
// or at genesis (works for negative epochs)
|
||||
if int64(nts.Height()) <= round || mtb.Height == 0 {
|
||||
return drawRandomness(nts.MinTicketBlock().Ticket, pers, round, entropy)
|
||||
}
|
||||
|
||||
// special case for lookback behind genesis block
|
||||
// TODO(spec): this is not in the spec, need to sync that
|
||||
if mtb.Height == 0 {
|
||||
|
||||
// round is negative
|
||||
thash, err := drawRandomness(mtb.Ticket, pers, round*-1, entropy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// for negative lookbacks, just use the hash of the positive tickethash value
|
||||
h := blake2b.Sum256(thash)
|
||||
return h[:], nil
|
||||
}
|
||||
|
||||
blks = mtb.Parents
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
|
||||
block "github.com/ipfs/go-block-format"
|
||||
"github.com/ipfs/go-cid"
|
||||
"github.com/minio/blake2b-simd"
|
||||
"github.com/minio/sha256-simd"
|
||||
"github.com/multiformats/go-multihash"
|
||||
xerrors "golang.org/x/xerrors"
|
||||
@ -214,5 +215,7 @@ func ElectionPostChallengeCount(sectors uint64, faults uint64) uint64 {
|
||||
}
|
||||
|
||||
func (t *Ticket) Equals(ot *Ticket) bool {
|
||||
return bytes.Equal(t.VRFProof, ot.VRFProof)
|
||||
tDigest := blake2b.Sum256(t.VRFProof)
|
||||
otDigest := blake2b.Sum256(ot.VRFProof)
|
||||
return bytes.Equal(tDigest[:], otDigest[:])
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import (
|
||||
"github.com/filecoin-project/specs-actors/actors/abi"
|
||||
"github.com/ipfs/go-cid"
|
||||
logging "github.com/ipfs/go-log/v2"
|
||||
"github.com/minio/blake2b-simd"
|
||||
cbg "github.com/whyrusleeping/cbor-gen"
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
@ -170,7 +171,9 @@ func (ts *TipSet) Equals(ots *TipSet) bool {
|
||||
}
|
||||
|
||||
func (t *Ticket) Less(o *Ticket) bool {
|
||||
return bytes.Compare(t.VRFProof, o.VRFProof) < 0
|
||||
tDigest := blake2b.Sum256(t.VRFProof)
|
||||
oDigest := blake2b.Sum256(o.VRFProof)
|
||||
return bytes.Compare(tDigest[:], oDigest[:]) < 0
|
||||
}
|
||||
|
||||
func (ts *TipSet) MinTicket() *Ticket {
|
||||
|
Loading…
Reference in New Issue
Block a user