github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/keeper/cache.go (about) 1 package keeper 2 3 import ( 4 "sync" 5 6 "github.com/fibonacci-chain/fbc/x/wasm/types" 7 ) 8 9 var wasmParamsCache = NewCache() 10 11 type Cache struct { 12 paramsCache types.Params 13 needParamsUpdate bool 14 paramsMutex sync.RWMutex 15 16 blockedContractMethodsCache map[string]*types.ContractMethods 17 needBlockedUpdate bool 18 blockedMutex sync.RWMutex 19 } 20 21 func NewCache() *Cache { 22 return &Cache{ 23 paramsCache: types.DefaultParams(), 24 blockedContractMethodsCache: make(map[string]*types.ContractMethods, 0), 25 needParamsUpdate: true, 26 needBlockedUpdate: true, 27 } 28 } 29 30 func (c *Cache) UpdateParams(params types.Params) { 31 c.paramsMutex.Lock() 32 defer c.paramsMutex.Unlock() 33 c.paramsCache = params 34 c.needParamsUpdate = false 35 } 36 37 func (c *Cache) SetNeedParamsUpdate() { 38 c.paramsMutex.Lock() 39 defer c.paramsMutex.Unlock() 40 c.needParamsUpdate = true 41 } 42 43 func (c *Cache) IsNeedParamsUpdate() bool { 44 c.paramsMutex.RLock() 45 defer c.paramsMutex.RUnlock() 46 return c.needParamsUpdate 47 } 48 49 func (c *Cache) GetParams() types.Params { 50 c.paramsMutex.RLock() 51 defer c.paramsMutex.RUnlock() 52 return types.Params{ 53 CodeUploadAccess: c.paramsCache.CodeUploadAccess, 54 InstantiateDefaultPermission: c.paramsCache.InstantiateDefaultPermission, 55 UseContractBlockedList: c.paramsCache.UseContractBlockedList, 56 VmbridgeEnable: c.paramsCache.VmbridgeEnable, 57 } 58 } 59 60 func (c *Cache) SetNeedBlockedUpdate() { 61 c.blockedMutex.Lock() 62 defer c.blockedMutex.Unlock() 63 c.needBlockedUpdate = true 64 } 65 66 func (c *Cache) IsNeedBlockedUpdate() bool { 67 c.blockedMutex.RLock() 68 defer c.blockedMutex.RUnlock() 69 return c.needBlockedUpdate 70 } 71 72 func (c *Cache) GetBlockedContractMethod(addr string) (contract *types.ContractMethods) { 73 c.blockedMutex.RLock() 74 bc := c.blockedContractMethodsCache[addr] 75 c.blockedMutex.RUnlock() 76 return bc 77 } 78 79 func (c *Cache) UpdateBlockedContractMethod(cms []*types.ContractMethods) { 80 c.blockedMutex.Lock() 81 c.blockedContractMethodsCache = make(map[string]*types.ContractMethods, len(cms)) 82 for i, _ := range cms { 83 c.blockedContractMethodsCache[cms[i].ContractAddr] = cms[i] 84 } 85 c.needBlockedUpdate = false 86 c.blockedMutex.Unlock() 87 } 88 89 func GetWasmParamsCache() *Cache { 90 return wasmParamsCache 91 } 92 93 func SetNeedParamsUpdate() { 94 GetWasmParamsCache().SetNeedParamsUpdate() 95 }