@@ -29,7 +29,7 @@ import (
2929
3030// ReadCanonicalHash retrieves the hash assigned to a canonical block number.
3131func ReadCanonicalHash (db DatabaseReader , number uint64 ) common.Hash {
32- data , _ := db .Get (append ( append ( headerPrefix , encodeBlockNumber ( number ) ... ), headerHashSuffix ... ))
32+ data , _ := db .Get (headerHashKey ( number ))
3333 if len (data ) == 0 {
3434 return common.Hash {}
3535 }
@@ -38,22 +38,21 @@ func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash {
3838
3939// WriteCanonicalHash stores the hash assigned to a canonical block number.
4040func 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 {
4342 log .Crit ("Failed to store number to hash mapping" , "err" , err )
4443 }
4544}
4645
4746// DeleteCanonicalHash removes the number to hash canonical mapping.
4847func 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 {
5049 log .Crit ("Failed to delete number to hash mapping" , "err" , err )
5150 }
5251}
5352
5453// ReadHeaderNumber returns the header number assigned to a hash.
5554func ReadHeaderNumber (db DatabaseReader , hash common.Hash ) * uint64 {
56- data , _ := db .Get (append ( headerNumberPrefix , hash . Bytes () ... ))
55+ data , _ := db .Get (headerNumberKey ( hash ))
5756 if len (data ) != 8 {
5857 return nil
5958 }
@@ -129,14 +128,13 @@ func WriteFastTrieProgress(db DatabaseWriter, count uint64) {
129128
130129// ReadHeaderRLP retrieves a block header in its raw RLP database encoding.
131130func 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 ))
133132 return data
134133}
135134
136135// HasHeader verifies the existence of a block header corresponding to the hash.
137136func 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 {
140138 return false
141139 }
142140 return true
@@ -161,11 +159,11 @@ func ReadHeader(db DatabaseReader, hash common.Hash, number uint64) *types.Heade
161159func WriteHeader (db DatabaseWriter , header * types.Header ) {
162160 // Write the hash -> number mapping
163161 var (
164- hash = header .Hash (). Bytes ()
162+ hash = header .Hash ()
165163 number = header .Number .Uint64 ()
166164 encoded = encodeBlockNumber (number )
167165 )
168- key := append ( headerNumberPrefix , hash ... )
166+ key := headerNumberKey ( hash )
169167 if err := db .Put (key , encoded ); err != nil {
170168 log .Crit ("Failed to store hash to number mapping" , "err" , err )
171169 }
@@ -174,40 +172,38 @@ func WriteHeader(db DatabaseWriter, header *types.Header) {
174172 if err != nil {
175173 log .Crit ("Failed to RLP encode header" , "err" , err )
176174 }
177- key = append ( append ( headerPrefix , encoded ... ), hash ... )
175+ key = headerKey ( number , hash )
178176 if err := db .Put (key , data ); err != nil {
179177 log .Crit ("Failed to store header" , "err" , err )
180178 }
181179}
182180
183181// DeleteHeader removes all block header data associated with a hash.
184182func 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 {
186184 log .Crit ("Failed to delete header" , "err" , err )
187185 }
188- if err := db .Delete (append ( headerNumberPrefix , hash . Bytes () ... )); err != nil {
186+ if err := db .Delete (headerNumberKey ( hash )); err != nil {
189187 log .Crit ("Failed to delete hash to number mapping" , "err" , err )
190188 }
191189}
192190
193191// ReadBodyRLP retrieves the block body (transactions and uncles) in RLP encoding.
194192func 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 ))
196194 return data
197195}
198196
199197// WriteBodyRLP stores an RLP encoded block body into the database.
200198func 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 {
203200 log .Crit ("Failed to store block body" , "err" , err )
204201 }
205202}
206203
207204// HasBody verifies the existence of a block body corresponding to the hash.
208205func 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 {
211207 return false
212208 }
213209 return true
@@ -238,14 +234,14 @@ func WriteBody(db DatabaseWriter, hash common.Hash, number uint64, body *types.B
238234
239235// DeleteBody removes all block body data associated with a hash.
240236func 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 {
242238 log .Crit ("Failed to delete block body" , "err" , err )
243239 }
244240}
245241
246242// ReadTd retrieves a block's total difficulty corresponding to the hash.
247243func 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 ))
249245 if len (data ) == 0 {
250246 return nil
251247 }
@@ -263,23 +259,22 @@ func WriteTd(db DatabaseWriter, hash common.Hash, number uint64, td *big.Int) {
263259 if err != nil {
264260 log .Crit ("Failed to RLP encode block total difficulty" , "err" , err )
265261 }
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 {
268263 log .Crit ("Failed to store block total difficulty" , "err" , err )
269264 }
270265}
271266
272267// DeleteTd removes all block total difficulty data associated with a hash.
273268func 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 {
275270 log .Crit ("Failed to delete block total difficulty" , "err" , err )
276271 }
277272}
278273
279274// ReadReceipts retrieves all the transaction receipts belonging to a block.
280275func ReadReceipts (db DatabaseReader , hash common.Hash , number uint64 ) types.Receipts {
281276 // Retrieve the flattened receipt slice
282- data , _ := db .Get (append ( append ( blockReceiptsPrefix , encodeBlockNumber ( number ) ... ) , hash [:] ... ))
277+ data , _ := db .Get (blockReceiptsKey ( number , hash ))
283278 if len (data ) == 0 {
284279 return nil
285280 }
@@ -308,15 +303,14 @@ func WriteReceipts(db DatabaseWriter, hash common.Hash, number uint64, receipts
308303 log .Crit ("Failed to encode block receipts" , "err" , err )
309304 }
310305 // 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 {
313307 log .Crit ("Failed to store block receipts" , "err" , err )
314308 }
315309}
316310
317311// DeleteReceipts removes all receipt data associated with a block hash.
318312func 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 {
320314 log .Crit ("Failed to delete block receipts" , "err" , err )
321315 }
322316}
0 commit comments