@@ -51,18 +51,21 @@ func (n *Node) idleChallenge(
51
51
if idleProofRecord .Start != challStart {
52
52
os .Remove (n .GetIdleProve ())
53
53
n .Del ("info" , n .GetIdleProve ())
54
+ n .Delete ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , idleProofRecord .Start )))
55
+ n .Delete ([]byte (fmt .Sprintf ("idle_chall_result:%d" , idleProofRecord .Start )))
54
56
} else {
55
-
56
57
_ , err = n .Cache .Get ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )))
57
58
if err != nil {
58
- err = n .submitIdleProof (idleProofRecord .IdleProof , slip )
59
+ blockhash , err : = n .submitIdleProof (idleProofRecord .IdleProof , slip )
59
60
if err != nil {
60
61
n .Ichal ("err" , err .Error ())
61
62
}
62
- n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )), []byte ("true" ))
63
+ if blockhash != "" {
64
+ n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )), []byte ("true" ))
65
+ idleProofRecord .CanSubmintResult = false
66
+ n .SaveIdleProve (idleProofRecord )
67
+ }
63
68
}
64
- idleProofRecord .CanSubmintResult = false
65
- n .SaveIdleProve (idleProofRecord )
66
69
67
70
_ , err = n .Cache .Get ([]byte (fmt .Sprintf ("idle_chall_result:%d" , challStart )))
68
71
if err != nil {
@@ -79,7 +82,7 @@ func (n *Node) idleChallenge(
79
82
minerAccumulator [i ] = types .U8 (idleProofRecord .Acc [i ])
80
83
}
81
84
82
- _ = n .submitIdleResult (
85
+ blockhash , _ : = n .submitIdleResult (
83
86
idleProve ,
84
87
types .U64 (idleProofRecord .ChainFront ),
85
88
types .U64 (idleProofRecord .ChainRear ),
@@ -89,10 +92,11 @@ func (n *Node) idleChallenge(
89
92
idleProofRecord .AllocatedTeeWorkpuk ,
90
93
verifySlip ,
91
94
)
92
- n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_result:%d" , challStart )), []byte ("true" ))
93
-
94
- idleProofRecord .CanSubmintResult = false
95
- n .SaveIdleProve (idleProofRecord )
95
+ if blockhash != "" {
96
+ n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_result:%d" , challStart )), []byte ("true" ))
97
+ idleProofRecord .CanSubmintResult = false
98
+ n .SaveIdleProve (idleProofRecord )
99
+ }
96
100
}
97
101
return
98
102
}
@@ -147,15 +151,18 @@ func (n *Node) idleChallenge(
147
151
teeID := make ([]byte , 32 )
148
152
challengeHandle := n .Prover .NewChallengeHandle (teeID , challRandom )
149
153
var previousHash []byte
154
+ blockhash := ""
150
155
if minerChallFront == minerChallRear {
151
156
idleProofRecord .IdleProof = []types.U8 {}
152
- err = n .submitIdleProof ([]types.U8 {}, slip )
157
+ blockhash , err = n .submitIdleProof ([]types.U8 {}, slip )
153
158
if err != nil {
154
159
n .Ichal ("err" , fmt .Sprintf ("[SubmitIdleProof] %v" , err ))
155
160
}
156
- idleProofRecord .CanSubmintProof = false
157
- idleProofRecord .CanSubmintResult = false
158
- n .SaveIdleProve (idleProofRecord )
161
+ if blockhash != "" {
162
+ idleProofRecord .CanSubmintProof = false
163
+ idleProofRecord .CanSubmintResult = false
164
+ n .SaveIdleProve (idleProofRecord )
165
+ }
159
166
return
160
167
}
161
168
n .Ichal ("info" , fmt .Sprintf ("[start] %v" , time .Now ()))
@@ -271,21 +278,21 @@ func (n *Node) idleChallenge(
271
278
n .SaveIdleProve (idleProofRecord )
272
279
_ , err = n .Cache .Get ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )))
273
280
if err != nil {
274
- err = n .submitIdleProof (idleProofChain , slip )
275
- n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )), []byte ("true" ))
276
- if err != nil {
277
- n .Ichal ("err" , err .Error ())
281
+ blockhash , err = n .submitIdleProof (idleProofChain , slip )
282
+ if blockhash != "" {
283
+ n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )), []byte ("true" ))
278
284
idleProofRecord .CanSubmintProof = false
279
285
n .SaveIdleProve (idleProofRecord )
280
- return
286
+ }
287
+ if err != nil {
288
+ n .Ichal ("err" , err .Error ())
281
289
}
282
290
}
283
291
284
- idleProofRecord .CanSubmintProof = false
285
- n .SaveIdleProve (idleProofRecord )
286
- _ , err = n .Cache .Get ([]byte (fmt .Sprintf ("idle_chall_result:%d" , challStart )))
287
- if err != nil {
288
- err = n .submitIdleResult (
292
+ blockhash = ""
293
+ _ , err = n .Cache .Get ([]byte (fmt .Sprintf ("idle_chall_proof:%d" , challStart )))
294
+ if err == nil {
295
+ blockhash , err = n .submitIdleResult (
289
296
idleProofChain ,
290
297
types .U64 (idleProofRecord .ChainFront ),
291
298
types .U64 (idleProofRecord .ChainRear ),
@@ -295,17 +302,18 @@ func (n *Node) idleChallenge(
295
302
pkchain ,
296
303
verifySlip ,
297
304
)
298
- n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_result:%d" , challStart )), []byte ("true" ))
299
305
if err != nil {
300
306
n .Ichal ("err" , err .Error ())
301
307
}
308
+ if blockhash != "" {
309
+ n .Cache .Put ([]byte (fmt .Sprintf ("idle_chall_result:%d" , challStart )), []byte ("true" ))
310
+ idleProofRecord .CanSubmintResult = false
311
+ n .SaveIdleProve (idleProofRecord )
312
+ }
302
313
}
303
-
304
- idleProofRecord .CanSubmintResult = false
305
- n .SaveIdleProve (idleProofRecord )
306
314
}
307
315
308
- func (n * Node ) submitIdleProof (idleProof []types.U8 , slip uint32 ) error {
316
+ func (n * Node ) submitIdleProof (idleProof []types.U8 , slip uint32 ) ( string , error ) {
309
317
var (
310
318
err error
311
319
blockHash string
@@ -314,40 +322,45 @@ func (n *Node) submitIdleProof(idleProof []types.U8, slip uint32) error {
314
322
latestBlock , err := n .GetSubstrateAPI ().RPC .Chain .GetBlockLatest ()
315
323
if err == nil {
316
324
if slip < uint32 (latestBlock .Block .Header .Number ) {
317
- return fmt .Errorf ("challenge expired" )
325
+ return "" , fmt .Errorf ("challenge expired" )
318
326
}
319
327
}
320
328
for i := 0 ; i < 3 ; i ++ {
321
329
n .Ichal ("info" , fmt .Sprintf ("[start sub] %v" , time .Now ()))
322
330
blockHash , err = n .SubmitIdleProof (idleProof )
323
331
n .Ichal ("info" , fmt .Sprintf ("[end sub] hash: %s err: %v" , blockHash , err ))
324
332
333
+ if blockHash != "" {
334
+ return blockHash , err
335
+ }
336
+
325
337
time .Sleep (chain .BlockInterval )
326
338
327
339
_ , challInfo , err = n .QueryChallengeSnapShot (n .GetSignatureAccPulickey (), - 1 )
328
340
if err != nil {
329
341
if err .Error () != chain .ERR_Empty {
330
342
n .Ichal ("err" , fmt .Sprintf ("[QueryChallengeInfo] %v" , err ))
331
343
}
332
- return err
344
+ return "" , err
333
345
}
334
346
335
347
if challInfo .ProveInfo .IdleProve .HasValue () {
336
- return nil
348
+ return blockHash , nil
337
349
}
338
350
}
339
- return fmt .Errorf ("submitIdleProof failed: %v" , err )
351
+ return blockHash , fmt .Errorf ("submitIdleProof failed: %v" , err )
340
352
}
341
353
342
- func (n * Node ) submitIdleResult (totalProofHash []types.U8 , front types.U64 , rear types.U64 , accumulator chain.Accumulator , result types.Bool , sig types.Bytes , teePuk chain.WorkerPublicKey , verifySlip uint32 ) error {
354
+ func (n * Node ) submitIdleResult (totalProofHash []types.U8 , front types.U64 , rear types.U64 , accumulator chain.Accumulator , result types.Bool , sig types.Bytes , teePuk chain.WorkerPublicKey , verifySlip uint32 ) (string , error ) {
355
+ blockhsh := ""
343
356
latestBlock , err := n .GetSubstrateAPI ().RPC .Chain .GetBlockLatest ()
344
357
if err == nil {
345
358
if verifySlip < uint32 (latestBlock .Block .Header .Number ) {
346
- return nil
359
+ return "" , nil
347
360
}
348
361
}
349
362
for i := 0 ; i < 3 ; i ++ {
350
- txHash , err : = n .SubmitVerifyIdleResult (
363
+ blockhsh , err = n .SubmitVerifyIdleResult (
351
364
totalProofHash ,
352
365
types .U64 (front ),
353
366
types .U64 (rear ),
@@ -357,13 +370,14 @@ func (n *Node) submitIdleResult(totalProofHash []types.U8, front types.U64, rear
357
370
teePuk ,
358
371
)
359
372
if err != nil {
360
- n .Ichal ("err" , fmt .Sprintf ("[SubmitIdleProofResult] hash: %s, err: %v" , txHash , err ))
361
- time .Sleep (time .Minute )
362
- continue
373
+ n .Ichal ("err" , fmt .Sprintf ("[SubmitIdleProofResult] hash: %s, err: %v" , blockhsh , err ))
374
+ }
375
+ if blockhsh != "" {
376
+ return blockhsh , err
363
377
}
364
- n . Ichal ( "info" , fmt . Sprintf ( "submit idle proof result suc: %s" , txHash ) )
378
+ time . Sleep ( time . Second * 6 )
365
379
}
366
- return fmt .Errorf ("submitIdleProof failed: %v" , err )
380
+ return "" , fmt .Errorf ("submitIdleProof failed: %v" , err )
367
381
}
368
382
369
383
func (n * Node ) verifyIdleProof (
0 commit comments