From ab811e2e19e76d92cf011c10202e2cfd25cf5143 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Magiera?= <magik6k@gmail.com>
Date: Fri, 30 Apr 2021 09:35:38 +0200
Subject: [PATCH] drand: fix beacon cache

---
 chain/beacon/drand/drand.go | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/chain/beacon/drand/drand.go b/chain/beacon/drand/drand.go
index 8470918583f..e7f673d7f66 100644
--- a/chain/beacon/drand/drand.go
+++ b/chain/beacon/drand/drand.go
@@ -168,8 +168,8 @@ func (db *DrandBeacon) getCachedValue(round uint64) *types.BeaconEntry {
 	if !ok {
 		return nil
 	}
-	e, _ := v.(*types.BeaconEntry)
-	return e
+	e, _ := v.(types.BeaconEntry)
+	return &e
 }
 
 func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntry) error {
@@ -178,6 +178,9 @@ func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntr
 		return nil
 	}
 	if be := db.getCachedValue(curr.Round); be != nil {
+		if !bytes.Equal(curr.Data, be.Data) {
+			return xerrors.New("invalid beacon value, does not match cached good value")
+		}
 		// return no error if the value is in the cache already
 		return nil
 	}