@@ -15,6 +15,7 @@ import (
1515 "go.uber.org/zap"
1616 "golang.org/x/crypto/sha3"
1717 "source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/vdf"
18+ "source.quilibrium.com/quilibrium/monorepo/node/config"
1819 "source.quilibrium.com/quilibrium/monorepo/node/keys"
1920 "source.quilibrium.com/quilibrium/monorepo/node/protobufs"
2021 "source.quilibrium.com/quilibrium/monorepo/node/tries"
@@ -549,7 +550,9 @@ func (w *WesolowskiFrameProver) VerifyWeakRecursiveProof(
549550 }
550551
551552 filter := proof [:len (frame .Filter )]
552- check := binary .BigEndian .Uint64 (proof [len (frame .Filter ) : len (frame .Filter )+ 8 ])
553+ check := binary .BigEndian .Uint64 (
554+ proof [len (frame .Filter ) : len (frame .Filter )+ 8 ],
555+ )
553556 timestamp := binary .BigEndian .Uint64 (
554557 proof [len (frame .Filter )+ 8 : len (frame .Filter )+ 16 ],
555558 )
@@ -600,26 +603,25 @@ func (w *WesolowskiFrameProver) CalculateChallengeProof(
600603 challenge []byte ,
601604 parallelism uint32 ,
602605 skew int64 ,
603- ) (int64 , [][]byte , error ) {
604- now := time .Now ().UnixMilli ()
605- input := binary .BigEndian .AppendUint64 ([]byte {}, uint64 (now ))
606+ ) (int64 , [][]byte , int64 , error ) {
607+ now := time .Now ()
608+ nowMs := now .UnixMilli ()
609+ input := binary .BigEndian .AppendUint64 ([]byte {}, uint64 (nowMs ))
606610 input = append (input , challenge ... )
607611 outputs := make ([][]byte , parallelism )
608612
609613 wg := sync.WaitGroup {}
610614 wg .Add (int (parallelism ))
611615
616+ // 4.5 minutes = 270 seconds, one increment should be ten seconds
617+ proofDuration := 270 * 1000
618+ calibratedDifficulty := (int64 (proofDuration ) * 10000 ) / skew
612619 for i := uint32 (0 ); i < parallelism ; i ++ {
613620 i := i
614621 go func () {
615622 instanceInput := binary .BigEndian .AppendUint32 ([]byte {}, i )
616623 instanceInput = append (instanceInput , input ... )
617- b := sha3 .Sum256 (input )
618-
619- // 4.5 minutes = 270 seconds, one increment should be ten seconds
620- proofDuration := 270 * 1000
621- calibratedDifficulty := (int64 (proofDuration ) / skew ) * 10000
622-
624+ b := sha3 .Sum256 (instanceInput )
623625 v := vdf .New (uint32 (calibratedDifficulty ), b )
624626
625627 v .Execute ()
@@ -632,7 +634,10 @@ func (w *WesolowskiFrameProver) CalculateChallengeProof(
632634 }
633635
634636 wg .Wait ()
635- return now , outputs , nil
637+ after := time .Since (now )
638+ nextSkew := (skew * after .Milliseconds ()) / int64 (proofDuration )
639+
640+ return nowMs , outputs , nextSkew , nil
636641}
637642
638643func (w * WesolowskiFrameProver ) VerifyChallengeProof (
@@ -644,24 +649,39 @@ func (w *WesolowskiFrameProver) VerifyChallengeProof(
644649 input := binary .BigEndian .AppendUint64 ([]byte {}, uint64 (timestamp ))
645650 input = append (input , challenge ... )
646651
652+ if assertedDifficulty < 1 {
653+ return false
654+ }
655+
647656 for i := uint32 (0 ); i < uint32 (len (proof )); i ++ {
648657 if len (proof [i ]) != 516 {
649658 return false
650659 }
651660
652661 instanceInput := binary .BigEndian .AppendUint32 ([]byte {}, i )
653662 instanceInput = append (instanceInput , input ... )
654- b := sha3 .Sum256 (input )
663+ b := sha3 .Sum256 (instanceInput )
655664
656665 // 4.5 minutes = 270 seconds, one increment should be ten seconds
657666 proofDuration := 270 * 1000
658667 skew := (assertedDifficulty * 12 ) / 10
659- calibratedDifficulty := (int64 (proofDuration ) / skew ) * 10000
668+ calibratedDifficulty := (int64 (proofDuration ) * 10000 ) / skew
660669
661670 v := vdf .New (uint32 (calibratedDifficulty ), b )
662671 check := v .Verify ([516 ]byte (proof [i ]))
663672 if ! check {
664- return false
673+ // TODO: Remove after 2024-05-28
674+ if time .Now ().Before (config .GetMinimumVersionCutoff ()) {
675+ calibratedDifficulty = (int64 (proofDuration ) / skew ) * 10000
676+
677+ v = vdf .New (uint32 (calibratedDifficulty ), sha3 .Sum256 (input ))
678+ check = v .Verify ([516 ]byte (proof [i ]))
679+ if ! check {
680+ return false
681+ }
682+ } else {
683+ return false
684+ }
665685 }
666686 }
667687
0 commit comments