@@ -51,6 +51,31 @@ func (bt *InternalNode) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([
5151 bit := stem [bt .depth / 8 ] >> (7 - (bt .depth % 8 )) & 1
5252 if bit == 0 {
5353 if hn , ok := bt .left .(HashedNode ); ok {
54+ if common .Hash (hn ) == (common.Hash {}) {
55+ bt .left = Empty {}
56+ } else {
57+ path , err := keyToPath (bt .depth , stem )
58+ if err != nil {
59+ return nil , fmt .Errorf ("GetValuesAtStem resolve error: %w" , err )
60+ }
61+ data , err := resolver (path , common .Hash (hn ))
62+ if err != nil {
63+ return nil , fmt .Errorf ("GetValuesAtStem resolve error: %w" , err )
64+ }
65+ node , err := DeserializeNode (data , bt .depth + 1 )
66+ if err != nil {
67+ return nil , fmt .Errorf ("GetValuesAtStem node deserialization error: %w" , err )
68+ }
69+ bt .left = node
70+ }
71+ }
72+ return bt .left .GetValuesAtStem (stem , resolver )
73+ }
74+
75+ if hn , ok := bt .right .(HashedNode ); ok {
76+ if common .Hash (hn ) == (common.Hash {}) {
77+ bt .right = Empty {}
78+ } else {
5479 path , err := keyToPath (bt .depth , stem )
5580 if err != nil {
5681 return nil , fmt .Errorf ("GetValuesAtStem resolve error: %w" , err )
@@ -63,25 +88,8 @@ func (bt *InternalNode) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([
6388 if err != nil {
6489 return nil , fmt .Errorf ("GetValuesAtStem node deserialization error: %w" , err )
6590 }
66- bt .left = node
91+ bt .right = node
6792 }
68- return bt .left .GetValuesAtStem (stem , resolver )
69- }
70-
71- if hn , ok := bt .right .(HashedNode ); ok {
72- path , err := keyToPath (bt .depth , stem )
73- if err != nil {
74- return nil , fmt .Errorf ("GetValuesAtStem resolve error: %w" , err )
75- }
76- data , err := resolver (path , common .Hash (hn ))
77- if err != nil {
78- return nil , fmt .Errorf ("GetValuesAtStem resolve error: %w" , err )
79- }
80- node , err := DeserializeNode (data , bt .depth + 1 )
81- if err != nil {
82- return nil , fmt .Errorf ("GetValuesAtStem node deserialization error: %w" , err )
83- }
84- bt .right = node
8593 }
8694 return bt .right .GetValuesAtStem (stem , resolver )
8795}
@@ -141,19 +149,23 @@ func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolve
141149 }
142150
143151 if hn , ok := bt .left .(HashedNode ); ok {
144- path , err := keyToPath (bt .depth , stem )
145- if err != nil {
146- return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
147- }
148- data , err := resolver (path , common .Hash (hn ))
149- if err != nil {
150- return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
151- }
152- node , err := DeserializeNode (data , bt .depth + 1 )
153- if err != nil {
154- return nil , fmt .Errorf ("InsertValuesAtStem node deserialization error: %w" , err )
152+ if common .Hash (hn ) == (common.Hash {}) {
153+ bt .left = Empty {}
154+ } else {
155+ path , err := keyToPath (bt .depth , stem )
156+ if err != nil {
157+ return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
158+ }
159+ data , err := resolver (path , common .Hash (hn ))
160+ if err != nil {
161+ return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
162+ }
163+ node , err := DeserializeNode (data , bt .depth + 1 )
164+ if err != nil {
165+ return nil , fmt .Errorf ("InsertValuesAtStem node deserialization error: %w" , err )
166+ }
167+ bt .left = node
155168 }
156- bt .left = node
157169 }
158170
159171 bt .left , err = bt .left .InsertValuesAtStem (stem , values , resolver , depth + 1 )
@@ -165,19 +177,23 @@ func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolve
165177 }
166178
167179 if hn , ok := bt .right .(HashedNode ); ok {
168- path , err := keyToPath (bt .depth , stem )
169- if err != nil {
170- return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
171- }
172- data , err := resolver (path , common .Hash (hn ))
173- if err != nil {
174- return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
175- }
176- node , err := DeserializeNode (data , bt .depth + 1 )
177- if err != nil {
178- return nil , fmt .Errorf ("InsertValuesAtStem node deserialization error: %w" , err )
180+ if common .Hash (hn ) == (common.Hash {}) {
181+ bt .right = Empty {}
182+ } else {
183+ path , err := keyToPath (bt .depth , stem )
184+ if err != nil {
185+ return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
186+ }
187+ data , err := resolver (path , common .Hash (hn ))
188+ if err != nil {
189+ return nil , fmt .Errorf ("InsertValuesAtStem resolve error: %w" , err )
190+ }
191+ node , err := DeserializeNode (data , bt .depth + 1 )
192+ if err != nil {
193+ return nil , fmt .Errorf ("InsertValuesAtStem node deserialization error: %w" , err )
194+ }
195+ bt .right = node
179196 }
180- bt .right = node
181197 }
182198
183199 bt .right , err = bt .right .InsertValuesAtStem (stem , values , resolver , depth + 1 )
0 commit comments