aboutsummaryrefslogtreecommitdiffstats
path: root/core/compaction-chain.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/compaction-chain.go')
-rw-r--r--core/compaction-chain.go36
1 files changed, 28 insertions, 8 deletions
diff --git a/core/compaction-chain.go b/core/compaction-chain.go
index c72cd7b..f5c5548 100644
--- a/core/compaction-chain.go
+++ b/core/compaction-chain.go
@@ -107,14 +107,34 @@ func (cc *compactionChain) processBlock(block *types.Block) error {
return nil
}
-func (cc *compactionChain) prepareWitnessAck(prvKey crypto.PrivateKey) (
- witnessAck *types.WitnessAck, err error) {
- lastBlock := cc.lastBlock()
- if lastBlock == nil {
- err = ErrNoWitnessToAck
- return
+func (cc *compactionChain) processWitnessResult(
+ block *types.Block, result types.WitnessResult) error {
+ block.Witness.Data = result.Data
+
+ // block is a genesis block, no need to update witness parent hash.
+ if block.IsGenesis() {
+ return nil
}
- hash, err := hashWitness(lastBlock)
+
+ prevBlock, err := cc.db.Get(block.ParentHash)
+ if err != nil {
+ return err
+ }
+
+ hash, err := hashWitness(&prevBlock)
+ if err != nil {
+ return err
+ }
+
+ block.Witness.ParentHash = hash
+ return nil
+}
+
+func (cc *compactionChain) prepareWitnessAck(
+ block *types.Block, prvKey crypto.PrivateKey) (
+ witnessAck *types.WitnessAck, err error) {
+
+ hash, err := hashWitness(block)
if err != nil {
return
}
@@ -124,7 +144,7 @@ func (cc *compactionChain) prepareWitnessAck(prvKey crypto.PrivateKey) (
}
witnessAck = &types.WitnessAck{
ProposerID: types.NewNodeID(prvKey.PublicKey()),
- WitnessBlockHash: lastBlock.Hash,
+ WitnessBlockHash: block.Hash,
Signature: sig,
Hash: hash,
}