aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-10-04 17:19:28 +0800
committerGitHub <noreply@github.com>2018-10-04 17:19:28 +0800
commit604dd7e52c8cbffd7646205c464f7333d215ceb6 (patch)
tree9f4b8ade150981f5491b27ffee07bdf6e4e74918 /core
parentb4764a67bc19b2b9ea6f07d45a1275f530060c68 (diff)
downloaddexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.tar
dexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.tar.gz
dexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.tar.bz2
dexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.tar.lz
dexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.tar.xz
dexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.tar.zst
dexon-consensus-604dd7e52c8cbffd7646205c464f7333d215ceb6.zip
core: Check sorted ack in sanity check (#173)
Diffstat (limited to 'core')
-rw-r--r--core/lattice-data.go1
-rw-r--r--core/lattice.go9
-rw-r--r--core/lattice_test.go11
3 files changed, 21 insertions, 0 deletions
diff --git a/core/lattice-data.go b/core/lattice-data.go
index e5d173d..7eec7f2 100644
--- a/core/lattice-data.go
+++ b/core/lattice-data.go
@@ -40,6 +40,7 @@ var (
ErrForkBlock = fmt.Errorf("fork block")
ErrNotAckParent = fmt.Errorf("not ack parent")
ErrDoubleAck = fmt.Errorf("double ack")
+ ErrAcksNotSorted = fmt.Errorf("acks not sorted")
ErrInvalidBlockHeight = fmt.Errorf("invalid block height")
ErrAlreadyInLattice = fmt.Errorf("block already in lattice")
ErrIncorrectBlockTime = fmt.Errorf("block timestampe is incorrect")
diff --git a/core/lattice.go b/core/lattice.go
index 530fbab..27d38d8 100644
--- a/core/lattice.go
+++ b/core/lattice.go
@@ -102,6 +102,15 @@ func (s *Lattice) SanityCheck(b *types.Block) (err error) {
err = ErrIncorrectHash
return
}
+ for i := range b.Acks {
+ if i == 0 {
+ continue
+ }
+ if !b.Acks[i-1].Less(b.Acks[i]) {
+ err = ErrAcksNotSorted
+ return
+ }
+ }
// Check the signer.
pubKey, err := crypto.SigToPub(b.Hash, b.Signature)
if err != nil {
diff --git a/core/lattice_test.go b/core/lattice_test.go
index 2115d1a..bf65684 100644
--- a/core/lattice_test.go
+++ b/core/lattice_test.go
@@ -220,6 +220,17 @@ func (s *LatticeTestSuite) TestSanityCheck() {
b.Signature, err = auth.prvKey.Sign(common.NewRandomHash())
req.NoError(err)
req.Equal(lattice.SanityCheck(b), ErrIncorrectSignature)
+ // A block with un-sorted acks should not pass sanity check.
+ b.Acks = common.NewSortedHashes(common.Hashes{
+ common.NewRandomHash(),
+ common.NewRandomHash(),
+ common.NewRandomHash(),
+ common.NewRandomHash(),
+ common.NewRandomHash(),
+ })
+ b.Acks[0], b.Acks[1] = b.Acks[1], b.Acks[0]
+ req.NoError(auth.SignBlock(b))
+ req.Equal(lattice.SanityCheck(b), ErrAcksNotSorted)
// A block with incorrect hash should not pass sanity check.
b.Hash = common.NewRandomHash()
req.Equal(lattice.SanityCheck(b), ErrIncorrectHash)