aboutsummaryrefslogtreecommitdiffstats
path: root/core/db/level-db.go
diff options
context:
space:
mode:
authorbojie <bojie@dexon.org>2019-03-20 23:03:36 +0800
committerGitHub <noreply@github.com>2019-03-20 23:03:36 +0800
commit672d245243b6b85040f96e6638628b86975e9a1b (patch)
treeaf60de97b08afdc4770a360509084581b05e7a34 /core/db/level-db.go
parentc852eda00f781abafaab2b41d2c1a85fe9d3177f (diff)
downloaddexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.tar
dexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.tar.gz
dexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.tar.bz2
dexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.tar.lz
dexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.tar.xz
dexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.tar.zst
dexon-consensus-672d245243b6b85040f96e6638628b86975e9a1b.zip
core: fix DKGProtocolInfo RLP decode/encode bug (#505)
Diffstat (limited to 'core/db/level-db.go')
-rw-r--r--core/db/level-db.go105
1 files changed, 97 insertions, 8 deletions
diff --git a/core/db/level-db.go b/core/db/level-db.go
index c92a623..88f5801 100644
--- a/core/db/level-db.go
+++ b/core/db/level-db.go
@@ -59,6 +59,91 @@ type DKGProtocolInfo struct {
Reset uint64
}
+// Equal compare with target DKGProtocolInfo.
+func (info *DKGProtocolInfo) Equal(target *DKGProtocolInfo) bool {
+ if !info.ID.Equal(target.ID) ||
+ info.Round != target.Round ||
+ info.Threshold != target.Threshold ||
+ info.IsMasterPrivateShareEmpty != target.IsMasterPrivateShareEmpty ||
+ info.IsPrvSharesEmpty != target.IsPrvSharesEmpty ||
+ info.Step != target.Step ||
+ info.Reset != target.Reset ||
+ !info.MasterPrivateShare.Equal(&target.MasterPrivateShare) ||
+ !info.PrvShares.Equal(&target.PrvShares) {
+ return false
+ }
+
+ if len(info.IDMap) != len(target.IDMap) {
+ return false
+ }
+ for k, v := range info.IDMap {
+ tV, exist := target.IDMap[k]
+ if !exist {
+ return false
+ }
+
+ if !v.IsEqual(&tV) {
+ return false
+ }
+ }
+
+ if len(info.MpkMap) != len(target.MpkMap) {
+ return false
+ }
+ for k, v := range info.MpkMap {
+ tV, exist := target.MpkMap[k]
+ if !exist {
+ return false
+ }
+
+ if !v.Equal(tV) {
+ return false
+ }
+ }
+
+ if len(info.PrvSharesReceived) != len(target.PrvSharesReceived) {
+ return false
+ }
+ for k := range info.PrvSharesReceived {
+ _, exist := target.PrvSharesReceived[k]
+ if !exist {
+ return false
+ }
+ }
+
+ if len(info.NodeComplained) != len(target.NodeComplained) {
+ return false
+ }
+ for k := range info.NodeComplained {
+ _, exist := target.NodeComplained[k]
+ if !exist {
+ return false
+ }
+ }
+
+ if len(info.AntiComplaintReceived) != len(target.AntiComplaintReceived) {
+ return false
+ }
+ for k, v := range info.AntiComplaintReceived {
+ tV, exist := target.AntiComplaintReceived[k]
+ if !exist {
+ return false
+ }
+
+ if len(v) != len(tV) {
+ return false
+ }
+ for kk := range v {
+ _, exist := tV[kk]
+ if !exist {
+ return false
+ }
+ }
+ }
+
+ return true
+}
+
// NodeIDToNodeIDs the map with NodeID to NodeIDs.
type NodeIDToNodeIDs map[types.NodeID]map[types.NodeID]struct{}
@@ -87,7 +172,8 @@ func (m NodeIDToNodeIDs) EncodeRLP(w io.Writer) error {
}
// DecodeRLP implements rlp.Encoder
-func (m NodeIDToNodeIDs) DecodeRLP(s *rlp.Stream) error {
+func (m *NodeIDToNodeIDs) DecodeRLP(s *rlp.Stream) error {
+ *m = make(NodeIDToNodeIDs)
var dec [][][]byte
if err := s.Decode(&dec); err != nil {
return err
@@ -111,7 +197,7 @@ func (m NodeIDToNodeIDs) DecodeRLP(s *rlp.Stream) error {
valueMap[value] = struct{}{}
}
- m[key] = valueMap
+ (*m)[key] = valueMap
}
return nil
@@ -135,7 +221,8 @@ func (m NodeID) EncodeRLP(w io.Writer) error {
}
// DecodeRLP implements rlp.Encoder
-func (m NodeID) DecodeRLP(s *rlp.Stream) error {
+func (m *NodeID) DecodeRLP(s *rlp.Stream) error {
+ *m = make(NodeID)
var dec [][]byte
if err := s.Decode(&dec); err != nil {
return err
@@ -148,7 +235,7 @@ func (m NodeID) DecodeRLP(s *rlp.Stream) error {
return err
}
- m[key] = struct{}{}
+ (*m)[key] = struct{}{}
}
return nil
@@ -178,7 +265,8 @@ func (m NodeIDToPubShares) EncodeRLP(w io.Writer) error {
}
// DecodeRLP implements rlp.Encoder
-func (m NodeIDToPubShares) DecodeRLP(s *rlp.Stream) error {
+func (m *NodeIDToPubShares) DecodeRLP(s *rlp.Stream) error {
+ *m = make(NodeIDToPubShares)
var dec [][]byte
if err := s.Decode(&dec); err != nil {
return err
@@ -197,7 +285,7 @@ func (m NodeIDToPubShares) DecodeRLP(s *rlp.Stream) error {
return err
}
- m[key] = &value
+ (*m)[key] = &value
}
return nil
@@ -222,7 +310,8 @@ func (m NodeIDToDKGID) EncodeRLP(w io.Writer) error {
}
// DecodeRLP implements rlp.Encoder
-func (m NodeIDToDKGID) DecodeRLP(s *rlp.Stream) error {
+func (m *NodeIDToDKGID) DecodeRLP(s *rlp.Stream) error {
+ *m = make(NodeIDToDKGID)
var dec [][]byte
if err := s.Decode(&dec); err != nil {
return err
@@ -241,7 +330,7 @@ func (m NodeIDToDKGID) DecodeRLP(s *rlp.Stream) error {
return err
}
- m[key] = value
+ (*m)[key] = value
}
return nil