Skip to content

Commit 24631f8

Browse files
authored
Fix panic and incorrect state generation for PoIS replacement proof (#296)
* fix:PoIS replacement proof panic and generate wrong state * chore:add logs for PoIS debug * fix:panic and incorrect state generation for PoIS replacement proof #294
1 parent 716302b commit 24631f8

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

node/attestation_idle.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package node
99

1010
import (
11+
"encoding/hex"
1112
"fmt"
1213
"strings"
1314
"time"
@@ -396,7 +397,8 @@ func attestation_idle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois,
396397
if err != nil {
397398
return errors.Wrapf(err, "[UpdateStatus]")
398399
}
399-
l.Space("info", "update pois status")
400+
l.Space("info", fmt.Sprintf("update status success, new acc value: %s", hex.EncodeToString(p.Prover.GetAccValue())))
401+
400402
m.Front = verifyCommitOrDeletionProof.PoisStatus.Front
401403
m.Rear = verifyCommitOrDeletionProof.PoisStatus.Rear
402404
m.Acc = verifyCommitOrDeletionProof.PoisStatus.Acc

node/replace_idle.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package node
99

1010
import (
11+
"encoding/hex"
1112
"fmt"
1213
"math/big"
1314
"strings"
@@ -68,29 +69,35 @@ func ReplaceIdle(cli *chain.ChainClient, l logger.Logger, p *Pois, m *pb.MinerPo
6869
delProof, err := p.Prover.ProveDeletion(int64(num))
6970
if err != nil {
7071
l.Replace("err", err.Error())
72+
p.Prover.AccRollback(true)
7173
return
7274
}
7375

7476
if delProof == nil {
7577
l.Replace("err", "delProof is nil")
78+
p.Prover.AccRollback(true)
7679
return
7780
}
7881

7982
if delProof.Roots == nil || delProof.AccPath == nil || delProof.WitChain == nil {
8083
l.Replace("err", "delProof have nil field")
84+
p.Prover.AccRollback(true)
8185
return
8286
}
8387

8488
minerInfo, err := cli.QueryMinerItems(cli.GetSignatureAccPulickey(), -1)
8589
if err != nil {
8690
l.Replace("err", fmt.Sprintf("[QueryStorageMiner] %v", err))
91+
p.Prover.AccRollback(true)
8792
return
8893
}
8994
if minerInfo.SpaceProofInfo.HasValue() {
9095
_, spaceProofInfo := minerInfo.SpaceProofInfo.Unwrap()
9196
if spaceProofInfo.Front > types.U64(p.Prover.GetFront()) {
9297
err = p.Prover.SyncChainPoisStatus(int64(spaceProofInfo.Front), int64(spaceProofInfo.Rear))
9398
if err != nil {
99+
l.Replace("err", err.Error())
100+
p.Prover.AccRollback(true)
94101
return
95102
}
96103
}
@@ -121,13 +128,13 @@ func ReplaceIdle(cli *chain.ChainClient, l logger.Logger, p *Pois, m *pb.MinerPo
121128
}
122129
buf, err := proto.Marshal(requestVerifyDeletionProof)
123130
if err != nil {
124-
p.Prover.CommitRollback()
131+
p.Prover.AccRollback(true)
125132
l.Replace("err", fmt.Sprintf("[Marshal-2] %v", err))
126133
return
127134
}
128135
signData, err := cli.Sign(buf)
129136
if err != nil {
130-
p.Prover.CommitRollback()
137+
p.Prover.AccRollback(true)
131138
l.Replace("err", fmt.Sprintf("[Sign-2] %v", err))
132139
return
133140
}
@@ -242,6 +249,8 @@ func ReplaceIdle(cli *chain.ChainClient, l logger.Logger, p *Pois, m *pb.MinerPo
242249
if err != nil {
243250
l.Replace("err", err.Error())
244251
}
252+
l.Replace("info", fmt.Sprintf("front: %v rear: %v", p.Prover.GetFront(), p.Prover.GetRear()))
253+
l.Replace("info", fmt.Sprintf("new acc value: %s", hex.EncodeToString(p.Prover.GetAccValue())))
245254

246255
ok, challenge, err := cli.QueryChallengeSnapShot(cli.GetSignatureAccPulickey(), -1)
247256
if err != nil {
@@ -254,6 +263,7 @@ func ReplaceIdle(cli *chain.ChainClient, l logger.Logger, p *Pois, m *pb.MinerPo
254263
if ok {
255264
err = p.Prover.SetChallengeState(*p.RsaKey, []byte(string(challenge.MinerSnapshot.SpaceProofInfo.Accumulator[:])), int64(challenge.MinerSnapshot.SpaceProofInfo.Front), int64(challenge.MinerSnapshot.SpaceProofInfo.Rear))
256265
if err != nil {
266+
l.Replace("err", err.Error())
257267
return
258268
}
259269
}
@@ -263,4 +273,5 @@ func ReplaceIdle(cli *chain.ChainClient, l logger.Logger, p *Pois, m *pb.MinerPo
263273
l.Replace("err", err.Error())
264274
}
265275
l.Replace("info", fmt.Sprintf("Successfully replaced %d idle files", num))
276+
266277
}

0 commit comments

Comments
 (0)