aboutsummaryrefslogtreecommitdiffstats
path: root/simulation
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-08-10 13:40:57 +0800
committerGitHub <noreply@github.com>2018-08-10 13:40:57 +0800
commitb88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538 (patch)
tree9595ccf912234c24674138705d2cc2b463212905 /simulation
parent99d9591e5f0af54bf06f41cfd2658cfcc9ee6436 (diff)
downloaddexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.tar
dexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.tar.gz
dexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.tar.bz2
dexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.tar.lz
dexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.tar.xz
dexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.tar.zst
dexon-consensus-b88d8ddb0eaf48fac1fdf10dcd7db4dc896e6538.zip
core: Deliver only Hash to Application. (#43)
Diffstat (limited to 'simulation')
-rw-r--r--simulation/app.go24
-rw-r--r--simulation/validator.go2
2 files changed, 17 insertions, 9 deletions
diff --git a/simulation/app.go b/simulation/app.go
index 797ab91..2d09f2a 100644
--- a/simulation/app.go
+++ b/simulation/app.go
@@ -37,7 +37,7 @@ type SimApp struct {
blockSeen map[common.Hash]time.Time
// uncofirmBlocks stores the blocks whose timestamps are not ready.
unconfirmedBlocks map[types.ValidatorID]common.Hashes
- blockHash map[common.Hash]*types.Block
+ blockByHash map[common.Hash]*types.Block
}
// NewSimApp returns point to a new instance of SimApp.
@@ -48,15 +48,19 @@ func NewSimApp(id types.ValidatorID, Network PeerServerNetwork) *SimApp {
DeliverID: 0,
blockSeen: make(map[common.Hash]time.Time),
unconfirmedBlocks: make(map[types.ValidatorID]common.Hashes),
- blockHash: make(map[common.Hash]*types.Block),
+ blockByHash: make(map[common.Hash]*types.Block),
}
}
+func (a *SimApp) addBlock(block *types.Block) {
+ a.blockByHash[block.Hash] = block
+}
+
// getAckedBlocks will return all unconfirmed blocks' hash with lower Height
// than the block with ackHash.
func (a *SimApp) getAckedBlocks(ackHash common.Hash) (output common.Hashes) {
// TODO(jimmy-dexon): Why there are some acks never seen?
- ackBlock, exist := a.blockHash[ackHash]
+ ackBlock, exist := a.blockByHash[ackHash]
if !exist {
return
}
@@ -65,7 +69,7 @@ func (a *SimApp) getAckedBlocks(ackHash common.Hash) (output common.Hashes) {
return
}
for i, blockHash := range hashes {
- if a.blockHash[blockHash].Height > ackBlock.Height {
+ if a.blockByHash[blockHash].Height > ackBlock.Height {
output, a.unconfirmedBlocks[ackBlock.ProposerID] = hashes[:i], hashes[i:]
break
}
@@ -84,24 +88,26 @@ func (a *SimApp) StronglyAcked(blockHash common.Hash) {
// TotalOrderingDeliver is called when blocks are delivered by the total
// ordering algorithm.
-func (a *SimApp) TotalOrderingDeliver(blocks []*types.Block, early bool) {
+func (a *SimApp) TotalOrderingDeliver(blockHashes common.Hashes, early bool) {
now := time.Now()
+ blocks := make([]*types.Block, len(blockHashes))
+ for idx := range blockHashes {
+ blocks[idx] = a.blockByHash[blockHashes[idx]]
+ }
a.Outputs = blocks
a.Early = early
fmt.Println("OUTPUT", a.ValidatorID, a.Early, a.Outputs)
- blockHash := common.Hashes{}
confirmLatency := []time.Duration{}
payload := []TimestampMessage{}
for _, block := range blocks {
- blockHash = append(blockHash, block.Hash)
if block.ProposerID == a.ValidatorID {
confirmLatency = append(confirmLatency,
now.Sub(block.Timestamps[a.ValidatorID]))
}
// TODO(jimmy-dexon) : Remove block in this hash if it's no longer needed.
- a.blockHash[block.Hash] = block
+ a.blockByHash[block.Hash] = block
for hash := range block.Acks {
for _, blockHash := range a.getAckedBlocks(hash) {
payload = append(payload, TimestampMessage{
@@ -128,7 +134,7 @@ func (a *SimApp) TotalOrderingDeliver(blocks []*types.Block, early bool) {
blockList := BlockList{
ID: a.DeliverID,
- BlockHash: blockHash,
+ BlockHash: blockHashes,
ConfirmLatency: confirmLatency,
}
a.Network.DeliverBlocks(blockList)
diff --git a/simulation/validator.go b/simulation/validator.go
index b4e6127..8b59247 100644
--- a/simulation/validator.go
+++ b/simulation/validator.go
@@ -128,6 +128,7 @@ func (v *Validator) MsgServer(isStopped chan struct{}) {
switch val := msg.(type) {
case *types.Block:
+ v.app.addBlock(val)
if v.consensus != nil {
if err := v.consensus.ProcessBlock(val); err != nil {
fmt.Println(err)
@@ -196,6 +197,7 @@ ProposingBlockLoop:
if err := v.consensus.PrepareBlock(block); err != nil {
panic(err)
}
+ v.app.addBlock(block)
if err := v.consensus.ProcessBlock(block); err != nil {
fmt.Println(err)
//panic(err)