mirror of
https://github.com/grassrootseconomics/eth-tracker.git
synced 2025-02-24 08:18:42 +01:00
62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
|
package cache
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"log/slog"
|
||
|
|
||
|
"github.com/grassrootseconomics/celo-tracker/internal/chain"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
Cache interface {
|
||
|
Purge() error
|
||
|
Exists(string) bool
|
||
|
Add(string, bool)
|
||
|
Remove(string)
|
||
|
IsWatchableIndex(string) bool
|
||
|
Size() int
|
||
|
}
|
||
|
CacheOpts struct {
|
||
|
Chain chain.Chain
|
||
|
Logg *slog.Logger
|
||
|
CacheType string
|
||
|
Blacklist []string
|
||
|
Registries []string
|
||
|
Watchlist []string
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func New(o CacheOpts) (Cache, error) {
|
||
|
var cache Cache
|
||
|
|
||
|
switch o.CacheType {
|
||
|
case "map":
|
||
|
cache = NewMapCache()
|
||
|
default:
|
||
|
cache = NewMapCache()
|
||
|
o.Logg.Warn("invalid cache type, using default type (map)")
|
||
|
}
|
||
|
|
||
|
geSmartContracts, err := o.Chain.Provider().GetGESmartContracts(
|
||
|
context.Background(),
|
||
|
o.Registries,
|
||
|
)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("cache could not bootstrap GE smart contracts: err %v", err)
|
||
|
}
|
||
|
|
||
|
for k, v := range geSmartContracts {
|
||
|
cache.Add(k, v)
|
||
|
}
|
||
|
for _, address := range o.Watchlist {
|
||
|
cache.Add(address, false)
|
||
|
}
|
||
|
for _, address := range o.Blacklist {
|
||
|
cache.Remove(address)
|
||
|
}
|
||
|
o.Logg.Info("cache bootstrap complete", "cached_addresses", cache.Size())
|
||
|
|
||
|
return cache, nil
|
||
|
}
|