aboutsummaryrefslogtreecommitdiffstats
path: root/core/types
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-08-28 11:21:48 +0800
committerGitHub <noreply@github.com>2018-08-28 11:21:48 +0800
commit9c8f9a447bfd768a7b29db904bd604410ec66a09 (patch)
tree76495e11738e24e4ff3f27d647509f29012eea6f /core/types
parente122cb236312e0ca3ef6e0207a20890ec1e7bfaf (diff)
downloadtangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.tar
tangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.tar.gz
tangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.tar.bz2
tangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.tar.lz
tangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.tar.xz
tangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.tar.zst
tangerine-consensus-9c8f9a447bfd768a7b29db904bd604410ec66a09.zip
core: Add vote type and add field to block. (#76)
Diffstat (limited to 'core/types')
-rw-r--r--core/types/block.go4
-rw-r--r--core/types/vote.go62
2 files changed, 65 insertions, 1 deletions
diff --git a/core/types/block.go b/core/types/block.go
index 557974f..92b0f8a 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -33,6 +33,8 @@ type Block struct {
ProposerID ValidatorID `json:"proposer_id"`
ParentHash common.Hash `json:"parent_hash"`
Hash common.Hash `json:"hash"`
+ ShardID uint64 `json:"shard_id"`
+ ChainID uint64 `json:"chain_id"`
Height uint64 `json:"height"`
Timestamps map[ValidatorID]time.Time `json:"timestamps"`
Acks map[common.Hash]struct{} `json:"acks"`
@@ -77,7 +79,7 @@ func (b *Block) Clone() *Block {
Height: b.Height,
Timestamps: make(map[ValidatorID]time.Time),
Acks: make(map[common.Hash]struct{}),
- Signature: b.Signature,
+ Signature: b.Signature.Clone(),
Notary: Notary{
Timestamp: b.Notary.Timestamp,
Height: b.Notary.Height,
diff --git a/core/types/vote.go b/core/types/vote.go
new file mode 100644
index 0000000..1247f84
--- /dev/null
+++ b/core/types/vote.go
@@ -0,0 +1,62 @@
+// Copyright 2018 The dexon-consensus-core Authors
+// This file is part of the dexon-consensus-core library.
+//
+// The dexon-consensus-core library is free software: you can redistribute it
+// and/or modify it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the License,
+// or (at your option) any later version.
+//
+// The dexon-consensus-core library is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+// General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the dexon-consensus-core library. If not, see
+// <http://www.gnu.org/licenses/>.
+
+package types
+
+import (
+ "fmt"
+
+ "github.com/dexon-foundation/dexon-consensus-core/common"
+ "github.com/dexon-foundation/dexon-consensus-core/crypto"
+)
+
+// VoteType is the type of vote.
+type VoteType byte
+
+// VoteType enum.
+const (
+ VoteAck VoteType = iota
+ VoteConfirm
+ VotePass
+ // Do not add any type below MaxVoteType.
+ MaxVoteType
+)
+
+// Vote is the vote structure defined in Crypto Shuffle Algorithm.
+type Vote struct {
+ ProposerID ValidatorID
+ Type VoteType
+ BlockHash common.Hash
+ Period uint64
+ Signature crypto.Signature
+}
+
+func (v *Vote) String() string {
+ return fmt.Sprintf("Vote(%d:%d):%s",
+ v.Period, v.Type, v.BlockHash.String()[:6])
+}
+
+// Clone returns a deep copy of a vote.
+func (v *Vote) Clone() *Vote {
+ return &Vote{
+ ProposerID: v.ProposerID,
+ Type: v.Type,
+ BlockHash: v.BlockHash,
+ Period: v.Period,
+ Signature: v.Signature.Clone(),
+ }
+}