@@ -28,41 +28,58 @@ package verkle
2828type ExpiredLeafNode struct {
2929 stem Stem
3030 commitment * Point
31+ depth byte // used for proof only, not commitment calculation
3132}
3233
3334func NewExpiredLeafNode (stem Stem , commitment * Point ) * ExpiredLeafNode {
3435 return & ExpiredLeafNode {stem : stem , commitment : commitment }
3536}
3637
37- func (ExpiredLeafNode ) Insert ([]byte , []byte , AccessTimestamp , NodeResolverFn ) error {
38- return errEpochExpired
38+ func (n * ExpiredLeafNode ) Insert ([]byte , []byte , AccessTimestamp , NodeResolverFn ) error {
39+ return errExpired
3940}
4041
41- func (ExpiredLeafNode ) Delete ([]byte , AccessTimestamp , NodeResolverFn ) (bool , error ) {
42- return false , errEpochExpired
42+ func (n * ExpiredLeafNode ) Delete ([]byte , AccessTimestamp , NodeResolverFn ) (bool , error ) {
43+ return false , errExpired
4344}
4445
45- func (ExpiredLeafNode ) Get ([]byte , AccessTimestamp , NodeResolverFn ) ([]byte , error ) {
46- return nil , errEpochExpired
46+ func (n * ExpiredLeafNode ) Get ([]byte , AccessTimestamp , NodeResolverFn ) ([]byte , error ) {
47+ return nil , errExpired
4748}
4849
49- func (n ExpiredLeafNode ) Commit () * Point {
50+ func (n * ExpiredLeafNode ) Commit () * Point {
5051 if n .commitment == nil {
5152 panic ("nil commitment" )
5253 }
5354 return n .commitment
5455}
5556
56- func (n ExpiredLeafNode ) Commitment () * Point {
57+ func (n * ExpiredLeafNode ) Commitment () * Point {
5758 return n .commitment
5859}
5960
60- // TODO(weiihann): prove that something was expired, for the block to be able to execute statelessly.
61- func (n ExpiredLeafNode ) GetProofItems (keylist , NodeResolverFn ) (* ProofElements , []byte , []Stem , error ) {
62- return nil , nil , nil , errEpochExpired
61+ func (n * ExpiredLeafNode ) GetProofItems (keys keylist , curTs AccessTimestamp , resolver NodeResolverFn ) (* ProofElements , []byte , []Stem , error ) {
62+ var (
63+ pe = & ProofElements {
64+ Vals : make ([][]byte , len (keys )),
65+ ByPath : map [string ]* Point {},
66+ }
67+ esses []byte = nil
68+ poass []Stem
69+ )
70+
71+ for i := range keys {
72+ pe .ByPath [string (keys [i ][:n .depth ])] = n .commitment
73+ pe .Vals [i ] = nil
74+
75+ esses = append (esses , extStatusExpired | (n .depth << 3 ))
76+ poass = append (poass , n .stem )
77+ }
78+
79+ return pe , esses , poass , nil
6380}
6481
65- func (n ExpiredLeafNode ) Serialize () ([]byte , error ) {
82+ func (n * ExpiredLeafNode ) Serialize () ([]byte , error ) {
6683 cBytes := n .commitment .BytesUncompressedTrusted ()
6784
6885 var buf [expiredLeafSize ]byte
@@ -74,10 +91,11 @@ func (n ExpiredLeafNode) Serialize() ([]byte, error) {
7491 return result , nil
7592}
7693
77- func (n ExpiredLeafNode ) Copy () VerkleNode {
94+ func (n * ExpiredLeafNode ) Copy () VerkleNode {
7895 l := & ExpiredLeafNode {}
7996 l .stem = make (Stem , len (n .stem ))
80-
97+ l .depth = n .depth
98+ copy (l .stem , n .stem )
8199 if n .commitment != nil {
82100 l .commitment = new (Point )
83101 l .commitment .Set (n .commitment )
@@ -86,15 +104,15 @@ func (n ExpiredLeafNode) Copy() VerkleNode {
86104 return l
87105}
88106
89- func (n ExpiredLeafNode ) toDot (string , string ) string {
107+ func (n * ExpiredLeafNode ) toDot (string , string ) string {
90108 return ""
91109}
92110
93- func (n ExpiredLeafNode ) setDepth (_ byte ) {
94- panic ( "should not be try to set the depth of an ExpiredLeafNode node" )
111+ func (n * ExpiredLeafNode ) setDepth (d byte ) {
112+ n . depth = d
95113}
96114
97- func (n ExpiredLeafNode ) Hash () * Fr {
115+ func (n * ExpiredLeafNode ) Hash () * Fr {
98116 var hash Fr
99117 n .commitment .MapToScalarField (& hash )
100118 return & hash
0 commit comments