@@ -29,7 +29,7 @@ import (
29
29
30
30
// ReadCanonicalHash retrieves the hash assigned to a canonical block number.
31
31
func ReadCanonicalHash (db DatabaseReader , number uint64 ) common.Hash {
32
- data , _ := db .Get (append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ), headerHashSuffix ... ))
32
+ data , _ := db .Get (headerHashKey ( number ))
33
33
if len (data ) == 0 {
34
34
return common.Hash {}
35
35
}
@@ -38,22 +38,21 @@ func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash {
38
38
39
39
// WriteCanonicalHash stores the hash assigned to a canonical block number.
40
40
func WriteCanonicalHash (db DatabaseWriter , hash common.Hash , number uint64 ) {
41
- key := append (append (headerPrefix , encodeBlockNumber (number )... ), headerHashSuffix ... )
42
- if err := db .Put (key , hash .Bytes ()); err != nil {
41
+ if err := db .Put (headerHashKey (number ), hash .Bytes ()); err != nil {
43
42
log .Crit ("Failed to store number to hash mapping" , "err" , err )
44
43
}
45
44
}
46
45
47
46
// DeleteCanonicalHash removes the number to hash canonical mapping.
48
47
func DeleteCanonicalHash (db DatabaseDeleter , number uint64 ) {
49
- if err := db .Delete (append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ), headerHashSuffix ... )); err != nil {
48
+ if err := db .Delete (headerHashKey ( number )); err != nil {
50
49
log .Crit ("Failed to delete number to hash mapping" , "err" , err )
51
50
}
52
51
}
53
52
54
53
// ReadHeaderNumber returns the header number assigned to a hash.
55
54
func ReadHeaderNumber (db DatabaseReader , hash common.Hash ) * uint64 {
56
- data , _ := db .Get (append ( headerNumberPrefix , hash . Bytes () ... ))
55
+ data , _ := db .Get (headerNumberKey ( hash ))
57
56
if len (data ) != 8 {
58
57
return nil
59
58
}
@@ -129,14 +128,13 @@ func WriteFastTrieProgress(db DatabaseWriter, count uint64) {
129
128
130
129
// ReadHeaderRLP retrieves a block header in its raw RLP database encoding.
131
130
func ReadHeaderRLP (db DatabaseReader , hash common.Hash , number uint64 ) rlp.RawValue {
132
- data , _ := db .Get (append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ) , hash . Bytes () ... ))
131
+ data , _ := db .Get (headerKey ( number , hash ))
133
132
return data
134
133
}
135
134
136
135
// HasHeader verifies the existence of a block header corresponding to the hash.
137
136
func HasHeader (db DatabaseReader , hash common.Hash , number uint64 ) bool {
138
- key := append (append (append (headerPrefix , encodeBlockNumber (number )... ), hash .Bytes ()... ))
139
- if has , err := db .Has (key ); ! has || err != nil {
137
+ if has , err := db .Has (headerKey (number , hash )); ! has || err != nil {
140
138
return false
141
139
}
142
140
return true
@@ -161,11 +159,11 @@ func ReadHeader(db DatabaseReader, hash common.Hash, number uint64) *types.Heade
161
159
func WriteHeader (db DatabaseWriter , header * types.Header ) {
162
160
// Write the hash -> number mapping
163
161
var (
164
- hash = header .Hash (). Bytes ()
162
+ hash = header .Hash ()
165
163
number = header .Number .Uint64 ()
166
164
encoded = encodeBlockNumber (number )
167
165
)
168
- key := append ( headerNumberPrefix , hash ... )
166
+ key := headerNumberKey ( hash )
169
167
if err := db .Put (key , encoded ); err != nil {
170
168
log .Crit ("Failed to store hash to number mapping" , "err" , err )
171
169
}
@@ -174,40 +172,38 @@ func WriteHeader(db DatabaseWriter, header *types.Header) {
174
172
if err != nil {
175
173
log .Crit ("Failed to RLP encode header" , "err" , err )
176
174
}
177
- key = append ( append ( headerPrefix , encoded ... ), hash ... )
175
+ key = headerKey ( number , hash )
178
176
if err := db .Put (key , data ); err != nil {
179
177
log .Crit ("Failed to store header" , "err" , err )
180
178
}
181
179
}
182
180
183
181
// DeleteHeader removes all block header data associated with a hash.
184
182
func DeleteHeader (db DatabaseDeleter , hash common.Hash , number uint64 ) {
185
- if err := db .Delete (append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ) , hash . Bytes () ... )); err != nil {
183
+ if err := db .Delete (headerKey ( number , hash )); err != nil {
186
184
log .Crit ("Failed to delete header" , "err" , err )
187
185
}
188
- if err := db .Delete (append ( headerNumberPrefix , hash . Bytes () ... )); err != nil {
186
+ if err := db .Delete (headerNumberKey ( hash )); err != nil {
189
187
log .Crit ("Failed to delete hash to number mapping" , "err" , err )
190
188
}
191
189
}
192
190
193
191
// ReadBodyRLP retrieves the block body (transactions and uncles) in RLP encoding.
194
192
func ReadBodyRLP (db DatabaseReader , hash common.Hash , number uint64 ) rlp.RawValue {
195
- data , _ := db .Get (append ( append ( blockBodyPrefix , encodeBlockNumber ( number ) ... ) , hash . Bytes () ... ))
193
+ data , _ := db .Get (blockBodyKey ( number , hash ))
196
194
return data
197
195
}
198
196
199
197
// WriteBodyRLP stores an RLP encoded block body into the database.
200
198
func WriteBodyRLP (db DatabaseWriter , hash common.Hash , number uint64 , rlp rlp.RawValue ) {
201
- key := append (append (blockBodyPrefix , encodeBlockNumber (number )... ), hash .Bytes ()... )
202
- if err := db .Put (key , rlp ); err != nil {
199
+ if err := db .Put (blockBodyKey (number , hash ), rlp ); err != nil {
203
200
log .Crit ("Failed to store block body" , "err" , err )
204
201
}
205
202
}
206
203
207
204
// HasBody verifies the existence of a block body corresponding to the hash.
208
205
func HasBody (db DatabaseReader , hash common.Hash , number uint64 ) bool {
209
- key := append (append (blockBodyPrefix , encodeBlockNumber (number )... ), hash .Bytes ()... )
210
- if has , err := db .Has (key ); ! has || err != nil {
206
+ if has , err := db .Has (blockBodyKey (number , hash )); ! has || err != nil {
211
207
return false
212
208
}
213
209
return true
@@ -238,14 +234,14 @@ func WriteBody(db DatabaseWriter, hash common.Hash, number uint64, body *types.B
238
234
239
235
// DeleteBody removes all block body data associated with a hash.
240
236
func DeleteBody (db DatabaseDeleter , hash common.Hash , number uint64 ) {
241
- if err := db .Delete (append ( append ( blockBodyPrefix , encodeBlockNumber ( number ) ... ) , hash . Bytes () ... )); err != nil {
237
+ if err := db .Delete (blockBodyKey ( number , hash )); err != nil {
242
238
log .Crit ("Failed to delete block body" , "err" , err )
243
239
}
244
240
}
245
241
246
242
// ReadTd retrieves a block's total difficulty corresponding to the hash.
247
243
func ReadTd (db DatabaseReader , hash common.Hash , number uint64 ) * big.Int {
248
- data , _ := db .Get (append ( append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ) , hash [:] ... ), headerTDSuffix ... ))
244
+ data , _ := db .Get (headerTDKey ( number , hash ))
249
245
if len (data ) == 0 {
250
246
return nil
251
247
}
@@ -263,23 +259,22 @@ func WriteTd(db DatabaseWriter, hash common.Hash, number uint64, td *big.Int) {
263
259
if err != nil {
264
260
log .Crit ("Failed to RLP encode block total difficulty" , "err" , err )
265
261
}
266
- key := append (append (append (headerPrefix , encodeBlockNumber (number )... ), hash .Bytes ()... ), headerTDSuffix ... )
267
- if err := db .Put (key , data ); err != nil {
262
+ if err := db .Put (headerTDKey (number , hash ), data ); err != nil {
268
263
log .Crit ("Failed to store block total difficulty" , "err" , err )
269
264
}
270
265
}
271
266
272
267
// DeleteTd removes all block total difficulty data associated with a hash.
273
268
func DeleteTd (db DatabaseDeleter , hash common.Hash , number uint64 ) {
274
- if err := db .Delete (append ( append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ) , hash . Bytes () ... ), headerTDSuffix ... )); err != nil {
269
+ if err := db .Delete (headerTDKey ( number , hash )); err != nil {
275
270
log .Crit ("Failed to delete block total difficulty" , "err" , err )
276
271
}
277
272
}
278
273
279
274
// ReadReceipts retrieves all the transaction receipts belonging to a block.
280
275
func ReadReceipts (db DatabaseReader , hash common.Hash , number uint64 ) types.Receipts {
281
276
// Retrieve the flattened receipt slice
282
- data , _ := db .Get (append ( append ( blockReceiptsPrefix , encodeBlockNumber ( number ) ... ) , hash [:] ... ))
277
+ data , _ := db .Get (blockReceiptsKey ( number , hash ))
283
278
if len (data ) == 0 {
284
279
return nil
285
280
}
@@ -308,15 +303,14 @@ func WriteReceipts(db DatabaseWriter, hash common.Hash, number uint64, receipts
308
303
log .Crit ("Failed to encode block receipts" , "err" , err )
309
304
}
310
305
// Store the flattened receipt slice
311
- key := append (append (blockReceiptsPrefix , encodeBlockNumber (number )... ), hash .Bytes ()... )
312
- if err := db .Put (key , bytes ); err != nil {
306
+ if err := db .Put (blockReceiptsKey (number , hash ), bytes ); err != nil {
313
307
log .Crit ("Failed to store block receipts" , "err" , err )
314
308
}
315
309
}
316
310
317
311
// DeleteReceipts removes all receipt data associated with a block hash.
318
312
func DeleteReceipts (db DatabaseDeleter , hash common.Hash , number uint64 ) {
319
- if err := db .Delete (append ( append ( blockReceiptsPrefix , encodeBlockNumber ( number ) ... ) , hash . Bytes () ... )); err != nil {
313
+ if err := db .Delete (blockReceiptsKey ( number , hash )); err != nil {
320
314
log .Crit ("Failed to delete block receipts" , "err" , err )
321
315
}
322
316
}
0 commit comments