github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/pkg/rpc/get_meta.go (about) 1 // Copyright 2021 The TrueBlocks Authors. All rights reserved. 2 // Use of this source code is governed by a license that can 3 // be found in the LICENSE file. 4 5 package rpc 6 7 import ( 8 "context" 9 10 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" 11 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" 12 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/walk" 13 ) 14 15 // TODO: use types.MetaData throughout 16 17 func (conn *Connection) GetMetaData(testmode bool) (*types.MetaData, error) { 18 chainId, networkId, err := conn.GetClientIDs() 19 if err != nil { 20 return nil, err 21 } 22 23 if testmode { 24 return &types.MetaData{ 25 Unripe: 0xdeadbeef, 26 Ripe: 0xdeadbeef, 27 Staging: 0xdeadbeef, 28 Finalized: 0xdeadbeef, 29 Latest: 0xdeadbeef, 30 Chain: conn.Chain, 31 ChainId: chainId, 32 NetworkId: networkId, 33 }, nil 34 } 35 36 var meta types.MetaData 37 meta.Chain = conn.Chain 38 meta.ChainId = chainId 39 meta.NetworkId = networkId 40 meta.Latest = conn.GetLatestBlockNumber() 41 42 filenameChan := make(chan walk.CacheFileInfo) 43 44 var nRoutines = 4 45 go walk.WalkCacheFolder(context.Background(), conn.Chain, walk.Index_Bloom, nil, filenameChan) 46 go walk.WalkCacheFolder(context.Background(), conn.Chain, walk.Index_Staging, nil, filenameChan) 47 go walk.WalkCacheFolder(context.Background(), conn.Chain, walk.Index_Ripe, nil, filenameChan) 48 go walk.WalkCacheFolder(context.Background(), conn.Chain, walk.Index_Unripe, nil, filenameChan) 49 50 for result := range filenameChan { 51 switch result.Type { 52 case walk.Index_Bloom: 53 fallthrough 54 case walk.Index_Final: 55 meta.Finalized = base.Max(meta.Finalized, result.FileRange.Last) 56 case walk.Index_Staging: 57 meta.Staging = base.Max(meta.Staging, result.FileRange.Last) 58 case walk.Index_Ripe: 59 meta.Ripe = base.Max(meta.Ripe, result.FileRange.Last) 60 case walk.Index_Unripe: 61 meta.Unripe = base.Max(meta.Unripe, result.FileRange.Last) 62 case walk.Cache_NotACache: 63 nRoutines-- 64 if nRoutines == 0 { 65 close(filenameChan) 66 } 67 } 68 } 69 70 if meta.Staging == 0 { 71 meta.Staging = meta.Finalized 72 } 73 meta.Ripe = base.Max(meta.Staging, meta.Ripe) 74 meta.Unripe = base.Max(meta.Ripe, meta.Unripe) 75 76 return &meta, nil 77 }