@etherisc/gif-next 0.0.2-f78c672-338 → 0.0.2-f78f882-351

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +63 -312
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +106 -38
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +111 -45
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +58 -6
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +655 -299
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +2008 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +8 -39
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +331 -56
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +501 -231
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +131 -16
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -59
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +322 -67
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -33
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +379 -150
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +160 -78
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -32
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +233 -20
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +109 -110
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +321 -66
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +145 -134
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +321 -66
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +82 -84
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +321 -66
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +39 -73
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +130 -148
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +321 -66
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +333 -190
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +321 -66
  63. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
  64. package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  67. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
  68. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +450 -28
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +355 -12
  73. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  74. package/artifacts/contracts/instance/Instance.sol/Instance.json +488 -85
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +942 -471
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +289 -78
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +595 -532
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +387 -64
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -52
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1316 -2015
  87. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
  88. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
  89. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  90. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
  91. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  92. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  93. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  94. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  96. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  97. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  98. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  99. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  100. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
  101. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +20 -20
  102. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  105. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  106. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  107. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +33 -45
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +340 -60
  112. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +19 -31
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
  117. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -31
  119. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  120. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +87 -42
  121. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -50
  123. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +59 -79
  125. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +321 -66
  127. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +300 -123
  129. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +144 -58
  131. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +186 -33
  133. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  134. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +29 -41
  135. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +238 -19
  137. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  138. package/artifacts/contracts/pool/Pool.sol/Pool.json +29 -41
  139. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
  140. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +100 -34
  141. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  142. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +346 -87
  143. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +141 -63
  145. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  146. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +218 -61
  147. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +113 -43
  149. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  150. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +46 -58
  151. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  152. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +321 -66
  153. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
  155. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +128 -70
  157. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +166 -1
  159. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
  161. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +29 -0
  165. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  166. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +40 -52
  167. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  168. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +203 -18
  169. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
  171. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
  172. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +511 -21
  173. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +138 -72
  175. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  176. package/artifacts/contracts/product/PricingService.sol/PricingService.json +91 -118
  177. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +113 -67
  179. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  180. package/artifacts/contracts/product/Product.sol/Product.json +40 -52
  181. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  182. package/artifacts/contracts/product/RiskService.sol/RiskService.json +231 -46
  183. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  184. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +101 -43
  185. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  186. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +33 -22
  188. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  189. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
  190. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  191. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  192. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  193. package/artifacts/contracts/registry/Registry.sol/Registry.json +71 -60
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +799 -472
  196. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  197. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1137 -0
  198. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  199. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +47 -18
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  201. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  203. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +841 -419
  204. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  205. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  206. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  207. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +197 -129
  208. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  209. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -26
  210. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  211. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
  212. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Component.sol/Component.json +19 -31
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +212 -232
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +133 -71
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +130 -39
  220. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  221. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  222. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  223. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
  224. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -31
  226. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +119 -147
  228. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  229. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -31
  230. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  231. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  232. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
  233. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -0
  236. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  239. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  240. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
  241. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  242. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -31
  243. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  244. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  245. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  246. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  247. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +21 -2
  248. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  249. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  250. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  251. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
  252. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  253. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  254. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  255. package/artifacts/contracts/shared/Service.sol/Service.json +29 -0
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  257. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  258. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  259. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
  260. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  261. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
  262. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  263. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1453 -153
  264. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  265. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +161 -110
  266. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  267. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  268. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  269. package/artifacts/contracts/staking/Staking.sol/Staking.json +1565 -239
  270. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  271. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  272. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +146 -67
  274. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +294 -177
  276. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +200 -157
  278. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +98 -44
  280. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1633 -819
  282. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  283. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  284. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  285. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +159 -87
  286. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  287. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Amount.sol/AmountLib.json +10 -10
  289. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -19
  291. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  292. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  293. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  295. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  297. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Fee.sol/FeeLib.json +93 -37
  299. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  300. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  301. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  302. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
  303. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  305. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  306. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  307. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  309. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  311. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  313. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  314. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  315. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  317. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +39 -218
  319. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
  321. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  326. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
  328. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +60 -36
  330. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  332. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +56 -2
  334. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  335. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
  336. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  337. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -27
  338. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  339. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  340. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  341. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
  342. package/contracts/accounting/AccountingService.sol +15 -3
  343. package/contracts/accounting/IAccountingService.sol +4 -2
  344. package/contracts/authorization/AccessAdmin.sol +361 -371
  345. package/contracts/authorization/AccessAdminLib.sol +678 -0
  346. package/contracts/authorization/AccessManagerCloneable.sol +23 -32
  347. package/contracts/authorization/Authorization.sol +82 -229
  348. package/contracts/authorization/IAccess.sol +29 -12
  349. package/contracts/authorization/IAccessAdmin.sol +83 -84
  350. package/contracts/authorization/IAuthorization.sol +3 -51
  351. package/contracts/authorization/IServiceAuthorization.sol +55 -17
  352. package/contracts/authorization/ServiceAuthorization.sol +228 -34
  353. package/contracts/distribution/BasicDistribution.sol +5 -7
  354. package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
  355. package/contracts/distribution/Distribution.sol +12 -17
  356. package/contracts/distribution/DistributionService.sol +129 -66
  357. package/contracts/distribution/IDistributionComponent.sol +3 -1
  358. package/contracts/distribution/IDistributionService.sol +21 -9
  359. package/contracts/examples/fire/FirePool.sol +0 -4
  360. package/contracts/examples/fire/FireProduct.sol +6 -10
  361. package/contracts/examples/unpermissioned/SimpleDistribution.sol +4 -8
  362. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
  363. package/contracts/examples/unpermissioned/SimplePool.sol +0 -4
  364. package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -23
  365. package/contracts/instance/BaseStore.sol +93 -0
  366. package/contracts/instance/IBaseStore.sol +37 -0
  367. package/contracts/instance/IInstance.sol +98 -12
  368. package/contracts/instance/IInstanceService.sol +54 -7
  369. package/contracts/instance/Instance.sol +165 -61
  370. package/contracts/instance/InstanceAdmin.sol +183 -313
  371. package/contracts/instance/InstanceAuthorizationV3.sol +123 -61
  372. package/contracts/instance/InstanceReader.sol +350 -394
  373. package/contracts/instance/InstanceService.sol +283 -173
  374. package/contracts/instance/InstanceStore.sol +153 -128
  375. package/contracts/instance/ProductStore.sol +290 -0
  376. package/contracts/instance/RiskSet.sol +10 -2
  377. package/contracts/instance/TargetNames.sol +10 -0
  378. package/contracts/instance/base/BalanceStore.sol +4 -6
  379. package/contracts/instance/base/ObjectLifecycle.sol +2 -6
  380. package/contracts/instance/module/IBundle.sol +6 -5
  381. package/contracts/instance/module/IComponents.sol +15 -6
  382. package/contracts/instance/module/IDistribution.sol +17 -7
  383. package/contracts/instance/module/IPolicy.sol +28 -8
  384. package/contracts/instance/module/IRisk.sol +2 -0
  385. package/contracts/oracle/BasicOracle.sol +3 -6
  386. package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
  387. package/contracts/oracle/IOracle.sol +9 -4
  388. package/contracts/oracle/Oracle.sol +4 -8
  389. package/contracts/oracle/OracleService.sol +8 -8
  390. package/contracts/pool/BasicPool.sol +4 -18
  391. package/contracts/pool/BasicPoolAuthorization.sol +10 -5
  392. package/contracts/pool/BundleService.sol +34 -43
  393. package/contracts/pool/IBundleService.sol +14 -13
  394. package/contracts/pool/IPoolService.sol +7 -2
  395. package/contracts/pool/Pool.sol +6 -20
  396. package/contracts/pool/PoolLib.sol +127 -2
  397. package/contracts/pool/PoolService.sol +41 -184
  398. package/contracts/product/ApplicationService.sol +65 -12
  399. package/contracts/product/BasicProduct.sol +2 -5
  400. package/contracts/product/BasicProductAuthorization.sol +11 -4
  401. package/contracts/product/ClaimService.sol +99 -105
  402. package/contracts/product/IApplicationService.sol +21 -2
  403. package/contracts/product/IClaimService.sol +5 -4
  404. package/contracts/product/IPolicyService.sol +9 -2
  405. package/contracts/product/IRiskService.sol +18 -3
  406. package/contracts/product/PolicyService.sol +40 -77
  407. package/contracts/product/PolicyServiceLib.sol +79 -5
  408. package/contracts/product/PricingService.sol +29 -32
  409. package/contracts/product/Product.sol +40 -18
  410. package/contracts/product/RiskService.sol +50 -15
  411. package/contracts/registry/IRegistry.sol +15 -9
  412. package/contracts/registry/IRelease.sol +6 -3
  413. package/contracts/registry/Registry.sol +15 -9
  414. package/contracts/registry/RegistryAdmin.sol +85 -266
  415. package/contracts/registry/RegistryAuthorization.sol +337 -0
  416. package/contracts/registry/RegistryService.sol +1 -1
  417. package/contracts/registry/ReleaseAdmin.sol +70 -116
  418. package/contracts/registry/ReleaseRegistry.sol +57 -43
  419. package/contracts/registry/ServiceAuthorizationV3.sol +128 -33
  420. package/contracts/registry/TokenRegistry.sol +56 -52
  421. package/contracts/shared/Component.sol +20 -37
  422. package/contracts/shared/ComponentService.sol +249 -250
  423. package/contracts/shared/ContractLib.sol +134 -75
  424. package/contracts/shared/IComponent.sol +1 -4
  425. package/contracts/shared/IComponentService.sol +21 -22
  426. package/contracts/shared/INftOwnable.sol +2 -0
  427. package/contracts/shared/IRegisterable.sol +0 -1
  428. package/contracts/shared/InitializableERC165.sol +9 -1
  429. package/contracts/shared/InstanceLinkedComponent.sol +6 -11
  430. package/contracts/shared/NftOwnable.sol +4 -2
  431. package/contracts/shared/PolicyHolder.sol +3 -2
  432. package/contracts/shared/Registerable.sol +1 -4
  433. package/contracts/shared/Service.sol +6 -4
  434. package/contracts/shared/TokenHandler.sol +5 -4
  435. package/contracts/staking/IStaking.sol +265 -64
  436. package/contracts/staking/IStakingService.sol +44 -82
  437. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  438. package/contracts/staking/Staking.sol +475 -204
  439. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +55 -84
  440. package/contracts/staking/StakingManager.sol +4 -3
  441. package/contracts/staking/StakingReader.sol +58 -77
  442. package/contracts/staking/StakingService.sol +49 -158
  443. package/contracts/staking/StakingServiceManager.sol +1 -0
  444. package/contracts/staking/StakingStore.sol +1093 -330
  445. package/contracts/staking/TargetHandler.sol +132 -0
  446. package/contracts/staking/TargetManagerLib.sol +69 -46
  447. package/contracts/type/Amount.sol +4 -0
  448. package/contracts/type/Blocknumber.sol +17 -22
  449. package/contracts/type/ChainId.sol +101 -0
  450. package/contracts/type/Fee.sol +8 -8
  451. package/contracts/type/NftId.sol +3 -3
  452. package/contracts/type/ObjectType.sol +21 -17
  453. package/contracts/type/RoleId.sol +57 -59
  454. package/contracts/type/Seconds.sol +19 -0
  455. package/contracts/type/String.sol +12 -0
  456. package/contracts/type/Timestamp.sol +4 -2
  457. package/contracts/type/UFixed.sol +28 -10
  458. package/contracts/type/Version.sol +39 -0
  459. package/contracts/upgradeability/IVersionable.sol +3 -0
  460. package/contracts/upgradeability/ProxyManager.sol +26 -12
  461. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
  462. package/contracts/upgradeability/Versionable.sol +6 -3
  463. package/package.json +1 -1
  464. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
  465. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
  466. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  467. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
  468. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  469. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  470. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
  471. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  472. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  473. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  474. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
  475. package/contracts/shared/ComponentVerifyingService.sol +0 -128
  476. package/contracts/shared/IKeyValueStore.sol +0 -54
  477. package/contracts/shared/KeyValueStore.sol +0 -131
  478. package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -3,21 +3,25 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
5
  import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
6
- import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
7
6
 
8
- import {AccessManagerCloneable} from "./AccessManagerCloneable.sol";
9
- import {ContractLib} from "../shared/ContractLib.sol";
7
+ import {IAccess} from "./IAccess.sol";
10
8
  import {IAccessAdmin} from "./IAccessAdmin.sol";
9
+ import {IAuthorization} from "./IAuthorization.sol";
11
10
  import {IRegistry} from "../registry/IRegistry.sol";
11
+ import {IServiceAuthorization} from "./IServiceAuthorization.sol";
12
+
13
+ import {AccessAdminLib} from "./AccessAdminLib.sol";
14
+ import {AccessManagerCloneable} from "./AccessManagerCloneable.sol";
15
+ import {Blocknumber, BlocknumberLib} from "../type/Blocknumber.sol";
16
+ import {ContractLib} from "../shared/ContractLib.sol";
17
+ import {NftId, NftIdLib} from "../type/NftId.sol";
18
+ import {ObjectType} from "../type/ObjectType.sol";
12
19
  import {RoleId, RoleIdLib, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
13
- import {Selector, SelectorLib, SelectorSetLib} from "../type/Selector.sol";
20
+ import {Selector, SelectorSetLib} from "../type/Selector.sol";
14
21
  import {Str, StrLib} from "../type/String.sol";
15
22
  import {TimestampLib} from "../type/Timestamp.sol";
16
23
  import {VersionPart} from "../type/Version.sol";
17
24
 
18
- interface IAccessManagedChecker {
19
- function authority() external view returns (address);
20
- }
21
25
 
22
26
  /**
23
27
  * @dev A generic access amin contract that implements role based access control based on OpenZeppelin's AccessManager contract.
@@ -26,20 +30,26 @@ interface IAccessManagedChecker {
26
30
  */
27
31
  contract AccessAdmin is
28
32
  AccessManagedUpgradeable,
29
- ReentrancyGuardUpgradeable,
30
33
  IAccessAdmin
31
34
  {
32
35
  using EnumerableSet for EnumerableSet.AddressSet;
33
36
 
34
- string public constant ADMIN_ROLE_NAME = "AdminRole";
35
- string public constant PUBLIC_ROLE_NAME = "PublicRole";
37
+ /// @dev admin name used for logging only
38
+ string internal _adminName;
36
39
 
37
- /// @dev the OpenZeppelin access manager driving the access admin contract
40
+ /// @dev the access manager driving the access admin contract
41
+ /// hold link to registry and release version
38
42
  AccessManagerCloneable internal _authority;
39
43
 
40
- /// @dev stores the deployer address and allows to create initializers
41
- /// that are restricted to the deployer address.
42
- address internal _deployer;
44
+ /// @dev the authorization contract used for initial access control
45
+ IAuthorization internal _authorization;
46
+
47
+ // /// @dev stores the deployer address and allows to create initializers
48
+ // /// that are restricted to the deployer address.
49
+ // address internal _deployer;
50
+
51
+ /// @dev the linked NFT ID
52
+ NftId internal _linkedNftId;
43
53
 
44
54
  /// @dev store role info per role id
45
55
  mapping(RoleId roleId => RoleInfo info) internal _roleInfo;
@@ -50,6 +60,9 @@ contract AccessAdmin is
50
60
  /// @dev store array with all created roles
51
61
  RoleId [] internal _roleIds;
52
62
 
63
+ // @dev target type specific role id counters
64
+ mapping(TargetType => uint64) internal _nextRoleId;
65
+
53
66
  /// @dev store set of current role members for given role
54
67
  mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
55
68
 
@@ -71,135 +84,93 @@ contract AccessAdmin is
71
84
  /// @dev temporary dynamic functions array
72
85
  bytes4[] private _functions;
73
86
 
74
- modifier onlyDeployer() {
75
- // special case for cloned AccessAdmin contracts
76
- // IMPORTANT cloning and initialize authority needs to be done in a single transaction
77
- if (_deployer == address(0)) {
78
- _deployer = msg.sender;
79
- }
80
-
81
- if (msg.sender != _deployer) {
82
- revert ErrorNotDeployer();
83
- }
84
- _;
85
- }
86
-
87
- modifier onlyRoleAdmin(RoleId roleId) {
88
- _checkRoleExists(roleId, false);
89
-
90
- if (!hasAdminRole(msg.sender, roleId)) {
91
- revert ErrorNotAdminOfRole(_roleInfo[roleId].adminRoleId);
92
- }
93
- _;
94
- }
95
-
96
- modifier onlyRoleMember(RoleId roleId) {
97
- if (!hasRole(msg.sender, roleId)) {
98
- revert ErrorNotRoleOwner(roleId);
99
- }
100
- _;
101
- }
102
-
103
- modifier onlyExistingRole(
104
- RoleId roleId,
105
- bool onlyActiveRole,
106
- bool allowLockedRoles
107
- )
108
- {
109
- if (!allowLockedRoles) {
110
- _checkRoleExists(roleId, onlyActiveRole);
111
- }
112
- _;
113
- }
114
-
115
- modifier onlyExistingTarget(address target) {
116
- _checkTarget(target);
117
- _;
118
- }
119
87
 
120
88
  //-------------- initialization functions ------------------------------//
121
89
 
122
- // event LogAccessAdminDebug(string message);
123
-
124
90
  /// @dev Initializes this admin with the provided accessManager (and authorization specification).
125
91
  /// Internally initializes access manager with this admin and creates basic role setup.
126
92
  function initialize(
127
- AccessManagerCloneable authority
93
+ address authority,
94
+ string memory adminName
128
95
  )
129
96
  public
130
97
  initializer()
131
98
  {
132
- __AccessAdmin_init(authority);
99
+ __AccessAdmin_init(authority, adminName);
133
100
  }
134
101
 
135
102
 
103
+ /// @dev Initializes this admin with the provided accessManager and name.
104
+ /// IMPORTANT
105
+ /// - cloning of an access admin and initialization MUST be done in the same tx.
106
+ /// - this function as well as any completeSetup functions MUST be called in the same tx.
136
107
  function __AccessAdmin_init(
137
- AccessManagerCloneable authority
108
+ address authority,
109
+ string memory adminName
138
110
  )
139
111
  internal
140
112
  onlyInitializing()
141
- onlyDeployer() // initializes deployer if not initialized yet
142
113
  {
143
- authority.initialize(address(this));
114
+ AccessAdminLib.checkInitParameters(authority, adminName);
115
+ _authority = AccessManagerCloneable(authority);
116
+ _authority.initialize(address(this));
117
+
118
+ // delayed additional check for authority after its initialization
119
+ if (!ContractLib.isAuthority(authority)) {
120
+ revert ErrorAccessAdminAccessManagerNotAccessManager(authority);
121
+ }
144
122
 
123
+ // effects
145
124
  // set and initialize this access manager contract as
146
125
  // the admin (ADMIN_ROLE) of the provided authority
147
- __AccessManaged_init(address(authority));
148
- _authority = authority;
126
+ __AccessManaged_init(authority);
149
127
 
150
- // create admin and public roles
151
- _initializeAdminAndPublicRoles();
128
+ // set name for logging
129
+ _adminName = adminName;
152
130
 
153
- // additional use case specific initialization
154
- _initializeCustom();
155
- }
131
+ // set initial linked NFT ID to zero
132
+ _linkedNftId = NftIdLib.zero();
156
133
 
134
+ // setup admin role
135
+ _createRoleUnchecked(
136
+ ADMIN_ROLE(), AccessAdminLib.adminRoleInfo());
157
137
 
158
- function getRegistry() public view returns (IRegistry registry) {
159
- return _authority.getRegistry();
138
+ // add this contract as admin role member, as contract roles cannot be revoked
139
+ // and max member count is 1 for admin role this access admin contract will
140
+ // always be the only admin of the access manager.
141
+ _roleMembers[
142
+ RoleIdLib.toRoleId(_authority.ADMIN_ROLE())].add(address(this));
143
+
144
+ // setup public role
145
+ _createRoleUnchecked(
146
+ PUBLIC_ROLE(), AccessAdminLib.publicRoleInfo());
160
147
  }
161
148
 
149
+ //--- view functions for access admin ---------------------------------------//
162
150
 
163
- function getRelease() public view returns (VersionPart release) {
151
+ function getRelease() public view virtual returns (VersionPart release) {
164
152
  return _authority.getRelease();
165
153
  }
166
154
 
167
155
 
168
- function _initializeAdminAndPublicRoles()
169
- internal
170
- virtual
171
- onlyInitializing()
172
- {
173
- RoleId adminRoleId = RoleIdLib.toRoleId(_authority.ADMIN_ROLE());
156
+ function getRegistry() public view returns (IRegistry registry) {
157
+ return _authority.getRegistry();
158
+ }
174
159
 
175
- // setup admin role
176
- _createRoleUnchecked(
177
- ADMIN_ROLE(),
178
- toRole({
179
- adminRoleId: ADMIN_ROLE(),
180
- roleType: RoleType.Contract,
181
- maxMemberCount: 1,
182
- name: ADMIN_ROLE_NAME}));
183
160
 
184
- // add this contract as admin role member
185
- _roleMembers[adminRoleId].add(address(this));
161
+ function getLinkedNftId() external view returns (NftId linkedNftId) {
162
+ return _linkedNftId;
163
+ }
186
164
 
187
- // setup public role
188
- _createRoleUnchecked(
189
- PUBLIC_ROLE(),
190
- toRole({
191
- adminRoleId: ADMIN_ROLE(),
192
- roleType: RoleType.Gif,
193
- maxMemberCount: type(uint32).max,
194
- name: PUBLIC_ROLE_NAME}));
165
+
166
+ function getAuthorization() public view returns (IAuthorization authorization) {
167
+ return _authorization;
195
168
  }
196
169
 
197
170
 
198
- function _initializeCustom()
199
- internal
200
- virtual
201
- onlyInitializing()
202
- { }
171
+ function isLocked() public view returns (bool locked) {
172
+ return _authority.isLocked();
173
+ }
203
174
 
204
175
  //--- view functions for roles ------------------------------------------//
205
176
 
@@ -220,15 +191,28 @@ contract AccessAdmin is
220
191
  }
221
192
 
222
193
  function roleExists(RoleId roleId) public view returns (bool exists) {
223
- return _roleInfo[roleId].createdAt.gtz();
194
+ return _roleInfo[roleId].targetType != TargetType.Undefined;
224
195
  }
225
196
 
226
- function getRoleInfo(RoleId roleId) external view returns (RoleInfo memory) {
197
+ function getRoleForName(string memory name) public view returns (RoleId roleId, bool exists) {
198
+ roleId = _roleForName[StrLib.toStr(name)].roleId;
199
+ exists = false;
200
+
201
+ if (roleId.gtz() || AccessAdminLib.isAdminRoleName(name)) {
202
+ exists = true;
203
+ }
204
+ }
205
+
206
+ function getRoleInfo(RoleId roleId) public view returns (RoleInfo memory) {
227
207
  return _roleInfo[roleId];
228
208
  }
229
209
 
230
- function getRoleForName(Str name) external view returns (RoleNameInfo memory) {
231
- return _roleForName[name];
210
+ function isRoleActive(RoleId roleId) external view returns (bool isActive) {
211
+ return _roleInfo[roleId].pausedAt > TimestampLib.current();
212
+ }
213
+
214
+ function isRoleCustom(RoleId roleId) external view returns (bool isActive) {
215
+ return _roleInfo[roleId].targetType == TargetType.Custom;
232
216
  }
233
217
 
234
218
  function roleMembers(RoleId roleId) external view returns (uint256 numberOfMembers) {
@@ -239,21 +223,15 @@ contract AccessAdmin is
239
223
  return _roleMembers[roleId].at(idx);
240
224
  }
241
225
 
242
- // TODO false because not role member or because role not exists?
243
- function hasRole(address account, RoleId roleId) public view returns (bool) {
226
+ function isRoleMember(RoleId roleId, address account) public view returns (bool) {
244
227
  (bool isMember, ) = _authority.hasRole(
245
228
  RoleId.unwrap(roleId),
246
229
  account);
247
230
  return isMember;
248
231
  }
249
232
 
250
- function hasAdminRole(address account, RoleId roleId)
251
- public
252
- virtual
253
- view
254
- returns (bool)
255
- {
256
- return hasRole(account, _roleInfo[roleId].adminRoleId);
233
+ function isRoleAdmin(RoleId roleId, address account) public virtual view returns (bool) {
234
+ return isRoleMember(_roleInfo[roleId].adminRoleId, account);
257
235
  }
258
236
 
259
237
  //--- view functions for targets ----------------------------------------//
@@ -270,7 +248,7 @@ contract AccessAdmin is
270
248
  return _targets[idx];
271
249
  }
272
250
 
273
- function getTargetInfo(address target) external view returns (TargetInfo memory targetInfo) {
251
+ function getTargetInfo(address target) public view returns (TargetInfo memory targetInfo) {
274
252
  return _targetInfo[target];
275
253
  }
276
254
 
@@ -279,9 +257,11 @@ contract AccessAdmin is
279
257
  }
280
258
 
281
259
  function isTargetLocked(address target) public view returns (bool locked) {
282
- return _authority.isTargetClosed(target);
260
+ return _authority.isLocked() || _authority.isTargetClosed(target);
283
261
  }
284
262
 
263
+ //--- view functions for target functions -------------------------------//
264
+
285
265
  function authorizedFunctions(address target) external view returns (uint256 numberOfFunctions) {
286
266
  return SelectorSetLib.size(_targetFunctions[target]);
287
267
  }
@@ -305,385 +285,395 @@ contract AccessAdmin is
305
285
  selector.toBytes4()));
306
286
  }
307
287
 
308
- function canCall(address caller, address target, Selector selector) external virtual view returns (bool can) {
309
- (can, ) = _authority.canCall(caller, target, selector.toBytes4());
310
- }
311
-
312
- function toRole(RoleId adminRoleId, RoleType roleType, uint32 maxMemberCount, string memory name) public view returns (RoleInfo memory) {
313
- return RoleInfo({
314
- name: StrLib.toStr(name),
315
- adminRoleId: adminRoleId,
316
- roleType: roleType,
317
- maxMemberCount: maxMemberCount,
318
- createdAt: TimestampLib.blockTimestamp(),
319
- pausedAt: TimestampLib.max()
320
- });
321
- }
322
-
323
- function toFunction(bytes4 selector, string memory name) public view returns (FunctionInfo memory) {
324
- return FunctionInfo({
325
- name: StrLib.toStr(name),
326
- selector: SelectorLib.toSelector(selector),
327
- createdAt: TimestampLib.blockTimestamp()});
328
- }
329
288
 
330
- function deployer() public view returns (address) {
331
- return _deployer;
289
+ function getFunctionInfo(address target, Selector selector)
290
+ external
291
+ view
292
+ returns (FunctionInfo memory functionInfo)
293
+ {
294
+ return _functionInfo[target][selector];
332
295
  }
333
296
 
334
297
  //--- internal/private functions -------------------------------------------------//
335
298
 
336
- function _authorizeTargetFunctions(
337
- address target,
338
- RoleId roleId,
339
- FunctionInfo[] memory functions
340
- )
341
- internal
342
- {
343
- if (roleId == getAdminRole()) {
344
- revert ErrorAuthorizeForAdminRoleInvalid(target);
299
+ function _linkToNftOwnable(address registerable) internal {
300
+ if (!getRegistry().isRegistered(registerable)) {
301
+ revert ErrorAccessAdminNotRegistered(registerable);
345
302
  }
346
303
 
347
- (
348
- bytes4[] memory functionSelectors,
349
- string[] memory functionNames
350
- ) = _processFunctionSelectors(target, functions, true);
351
-
352
- // apply authz via access manager
353
- _grantRoleAccessToFunctions(
354
- target,
355
- roleId,
356
- functionSelectors,
357
- functionNames,
358
- false); // allow locked roles
304
+ _linkedNftId = getRegistry().getNftIdForAddress(registerable);
359
305
  }
360
306
 
361
- function _unauthorizeTargetFunctions(
362
- address target,
363
- FunctionInfo[] memory functions
307
+
308
+ function _createRoles(
309
+ IServiceAuthorization authorization
364
310
  )
365
311
  internal
366
312
  {
367
- (
368
- bytes4[] memory functionSelectors,
369
- string[] memory functionNames
370
- ) = _processFunctionSelectors(target, functions, false);
371
-
372
- _grantRoleAccessToFunctions(
373
- target,
374
- getAdminRole(),
375
- functionSelectors,
376
- functionNames,
377
- true); // allowLockedRoles
313
+ RoleId[] memory roles = authorization.getRoles();
314
+
315
+ for(uint256 i = 0; i < roles.length; i++) {
316
+ RoleId authzRoleId = roles[i];
317
+ IAccess.RoleInfo memory roleInfo = authorization.getRoleInfo(authzRoleId);
318
+ (RoleId roleId, bool exists) = getRoleForName(roleInfo.name.toString());
319
+
320
+ if (!exists) {
321
+ if (!AccessAdminLib.isDynamicRoleId(authzRoleId)) {
322
+ roleId = authzRoleId;
323
+ }
324
+
325
+ _createRole(
326
+ roleId,
327
+ roleInfo,
328
+ true);
329
+ }
330
+ }
378
331
  }
379
332
 
380
- function _processFunctionSelectors(
381
- address target,
382
- FunctionInfo[] memory functions,
383
- bool addFunctions
333
+
334
+ /// @dev Creates a role based on the provided parameters.
335
+ /// Checks that the provided role and role id and role name not already used.
336
+ function _createRole(
337
+ RoleId roleId,
338
+ RoleInfo memory info,
339
+ bool revertOnExistingRole
384
340
  )
385
341
  internal
386
- onlyExistingTarget(target)
387
- returns (
388
- bytes4[] memory functionSelectors,
389
- string[] memory functionNames
390
- )
391
342
  {
392
- uint256 n = functions.length;
393
- functionSelectors = new bytes4[](n);
394
- functionNames = new string[](n);
395
- FunctionInfo memory func;
396
- Selector selector;
397
-
398
- for (uint256 i = 0; i < n; i++) {
399
- func = functions[i];
400
- selector = func.selector;
401
-
402
- // add function selector to target selector set if not in set
403
- if (addFunctions) { SelectorSetLib.add(_targetFunctions[target], selector); }
404
- else { SelectorSetLib.remove(_targetFunctions[target], selector); }
405
-
406
- // set function name
407
- _functionInfo[target][selector] = func;
408
-
409
- // add bytes4 selector to function selector array
410
- functionSelectors[i] = selector.toBytes4();
411
- functionNames[i] = func.name.toString();
343
+ bool isAdminOrPublicRole = AccessAdminLib.checkRoleCreation(this, roleId, info, revertOnExistingRole);
344
+ if (!isAdminOrPublicRole) {
345
+ _createRoleUnchecked(roleId, info);
412
346
  }
413
347
  }
414
348
 
415
- /// @dev grant the specified role access to all functions in the provided selector list
416
- function _grantRoleAccessToFunctions(
417
- address target,
349
+
350
+ function _createRoleUnchecked(
418
351
  RoleId roleId,
419
- bytes4[] memory functionSelectors,
420
- string[] memory functionNames,
421
- bool allowLockedRoles // admin and public roles are locked
352
+ RoleInfo memory info
422
353
  )
423
- internal
424
- onlyExistingTarget(target)
425
- onlyExistingRole(roleId, true, allowLockedRoles)
354
+ private
426
355
  {
356
+ // create role info
357
+ info.createdAt = TimestampLib.current();
358
+ info.pausedAt = TimestampLib.max();
359
+ _roleInfo[roleId] = info;
427
360
 
428
- _authority.setTargetFunctionRole(
429
- target,
430
- functionSelectors,
431
- RoleId.unwrap(roleId));
361
+ // create role name info
362
+ _roleForName[info.name] = RoleNameInfo({
363
+ roleId: roleId,
364
+ exists: true});
432
365
 
433
- for (uint256 i = 0; i < functionSelectors.length; i++) {
434
- emit LogAccessAdminFunctionGranted(
435
- target,
436
- // _getAccountName(target),
437
- // string(abi.encodePacked("", functionSelectors[i])),
438
- functionNames[i],
439
- _getRoleName(roleId));
366
+ // add role to list of roles
367
+ _roleIds.push(roleId);
368
+
369
+ emit LogAccessAdminRoleCreated(_adminName, roleId, info.targetType, info.adminRoleId, info.name.toString());
370
+ }
371
+
372
+
373
+ /// @dev Activates or deactivates role.
374
+ /// The role activ property is indirectly controlled over the pausedAt timestamp.
375
+ function _setRoleActive(RoleId roleId, bool active)
376
+ internal
377
+ {
378
+ AccessAdminLib.checkRoleExists(this, roleId, false, false);
379
+
380
+ if (active) {
381
+ _roleInfo[roleId].pausedAt = TimestampLib.max();
382
+ } else {
383
+ _roleInfo[roleId].pausedAt = TimestampLib.current();
440
384
  }
385
+
386
+ Blocknumber lastUpdateIn = _roleInfo[roleId].lastUpdateIn;
387
+ _roleInfo[roleId].lastUpdateIn = BlocknumberLib.current();
388
+
389
+ emit LogAccessAdminRoleActivatedSet(_adminName, roleId, active, lastUpdateIn);
441
390
  }
442
391
 
443
392
 
444
393
  /// @dev grant the specified role to the provided account
445
394
  function _grantRoleToAccount(RoleId roleId, address account)
446
395
  internal
447
- onlyExistingRole(roleId, true, false)
448
396
  {
397
+ AccessAdminLib.checkRoleExists(this, roleId, true, false);
398
+
449
399
  // check max role members will not be exceeded
450
400
  if (_roleMembers[roleId].length() >= _roleInfo[roleId].maxMemberCount) {
451
- revert ErrorRoleMembersLimitReached(roleId, _roleInfo[roleId].maxMemberCount);
401
+ revert ErrorAccessAdminRoleMembersLimitReached(roleId, _roleInfo[roleId].maxMemberCount);
452
402
  }
453
403
 
454
404
  // check account is contract for contract role
455
405
  if (
456
- _roleInfo[roleId].roleType == RoleType.Contract &&
406
+ _roleInfo[roleId].targetType != TargetType.Custom &&
457
407
  !ContractLib.isContract(account) // will fail in account's constructor
458
408
  ) {
459
- revert ErrorRoleMemberNotContract(roleId, account);
409
+ revert ErrorAccessAdminRoleMemberNotContract(roleId, account);
460
410
  }
461
411
 
462
- // TODO check account already have roleId
412
+ // effects
463
413
  _roleMembers[roleId].add(account);
464
414
  _authority.grantRole(
465
415
  RoleId.unwrap(roleId),
466
416
  account,
467
417
  0);
468
418
 
469
- emit LogAccessAdminRoleGranted(account, _getRoleName(roleId));
419
+ emit LogAccessAdminRoleGranted(
420
+ _adminName,
421
+ account,
422
+ AccessAdminLib.getRoleName(this, roleId));
470
423
  }
471
424
 
425
+
472
426
  /// @dev revoke the specified role from the provided account
473
427
  function _revokeRoleFromAccount(RoleId roleId, address account)
474
428
  internal
475
- onlyExistingRole(roleId, false, false)
476
429
  {
430
+ AccessAdminLib.checkRoleExists(this, roleId, false, false);
477
431
 
478
- // check role removal is permitted
479
- if (_roleInfo[roleId].roleType == RoleType.Contract) {
480
- revert ErrorRoleMemberRemovalDisabled(roleId, account);
432
+ // check for attempt to revoke contract role
433
+ if (_roleInfo[roleId].targetType != TargetType.Custom) {
434
+ revert ErrorAccessAdminRoleMemberRemovalDisabled(roleId, account);
481
435
  }
482
436
 
483
- // TODO check account have roleId?
437
+ // effects
484
438
  _roleMembers[roleId].remove(account);
485
439
  _authority.revokeRole(
486
440
  RoleId.unwrap(roleId),
487
441
  account);
488
442
 
489
- emit LogAccessAdminRoleRevoked(account, _roleInfo[roleId].name.toString());
443
+ emit LogAccessAdminRoleRevoked(_adminName, account, _roleInfo[roleId].name.toString());
490
444
  }
491
445
 
492
446
 
493
- /// @dev Creates a role based on the provided parameters.
494
- /// Checks that the provided role and role id and role name not already used.
495
- function _createRole(
496
- RoleId roleId,
497
- RoleInfo memory info
447
+ function _getOrCreateTargetRoleIdAndName(
448
+ address target,
449
+ string memory targetName,
450
+ TargetType targetType
498
451
  )
499
452
  internal
453
+ returns (
454
+ RoleId roleId,
455
+ string memory roleName,
456
+ bool exists
457
+ )
500
458
  {
501
- // check role does not yet exist
502
- if(roleExists(roleId)) {
503
- revert ErrorRoleAlreadyCreated(
504
- roleId,
505
- _roleInfo[roleId].name.toString());
506
- }
507
-
508
- // check admin role exists
509
- if(!roleExists(info.adminRoleId)) {
510
- revert ErrorRoleAdminNotExisting(info.adminRoleId);
511
- }
512
-
513
- // check role name is not empty
514
- if(info.name.length() == 0) {
515
- revert ErrorRoleNameEmpty(roleId);
459
+ roleName = AccessAdminLib.toRoleName(targetName);
460
+ (roleId, exists) = getRoleForName(roleName);
461
+
462
+ if (exists) {
463
+ return (roleId, roleName, true);
464
+ }
465
+
466
+ // get roleId
467
+ if (targetType == TargetType.Service || targetType == TargetType.GenericService) {
468
+ roleId = AccessAdminLib.getServiceRoleId(target, targetType);
469
+ } else {
470
+ uint64 nextRoleId = _nextRoleId[targetType];
471
+ roleId = AccessAdminLib.getTargetRoleId(target, targetType, nextRoleId);
472
+
473
+ // increment target type specific role id counter
474
+ _nextRoleId[targetType]++;
516
475
  }
517
-
518
- // check role name is not used for another role
519
- if(_roleForName[info.name].exists) {
520
- revert ErrorRoleNameAlreadyExists(
521
- roleId,
522
- info.name.toString(),
523
- _roleForName[info.name].roleId);
524
- }
525
-
526
- _createRoleUnchecked(roleId, info);
527
476
  }
528
477
 
529
478
 
530
- function _createRoleUnchecked(
531
- RoleId roleId,
532
- RoleInfo memory info
479
+ function _createTarget(
480
+ address target,
481
+ string memory targetName,
482
+ TargetType targetType,
483
+ bool checkAuthority
533
484
  )
534
- private
485
+ internal
486
+ returns (RoleId contractRoleId)
535
487
  {
536
- // create role info
537
- info.createdAt = TimestampLib.blockTimestamp();
538
- _roleInfo[roleId] = info;
488
+ // checks
489
+ AccessAdminLib.checkTargetCreation(this, target, targetName, checkAuthority);
539
490
 
540
- // create role name info
541
- _roleForName[info.name] = RoleNameInfo({
542
- roleId: roleId,
543
- exists: true});
544
-
545
- // add role to list of roles
546
- _roleIds.push(roleId);
491
+ // effects
492
+ contractRoleId = _createTargetUnchecked(
493
+ target,
494
+ targetName,
495
+ targetType,
496
+ checkAuthority);
547
497
 
548
- emit LogAccessAdminRoleCreated(roleId, info.roleType, info.adminRoleId, info.name.toString());
498
+ // deal with token handler, if applicable
499
+ (
500
+ address tokenHandler,
501
+ string memory tokenHandlerName
502
+ ) = AccessAdminLib.getTokenHandler(target, targetName, targetType);
503
+
504
+ if (tokenHandler != address(0)) {
505
+ _createTargetUnchecked(
506
+ tokenHandler,
507
+ tokenHandlerName,
508
+ targetType,
509
+ checkAuthority);
510
+ }
549
511
  }
550
512
 
551
513
 
552
- function _createTarget(
514
+ /// @dev Creates a new target and a corresponding contract role.
515
+ /// The function assigns the role to the target and logs the creation.
516
+ function _createTargetUnchecked(
553
517
  address target,
554
518
  string memory targetName,
555
- bool checkAuthority,
556
- bool custom
519
+ TargetType targetType,
520
+ bool managed
557
521
  )
558
522
  internal
523
+ returns (RoleId targetRoleId)
559
524
  {
560
- // check target does not yet exist
561
- if(targetExists(target)) {
562
- revert ErrorTargetAlreadyCreated(
563
- target,
564
- _targetInfo[target].name.toString());
565
- }
566
-
567
- // check target name is not empty
568
- Str name = StrLib.toStr(targetName);
569
- if(name.length() == 0) {
570
- revert ErrorTargetNameEmpty(target);
571
- }
572
-
573
- // check target name is not used for another target
574
- if( _targetForName[name] != address(0)) {
575
- revert ErrorTargetNameAlreadyExists(
576
- target,
577
- targetName,
578
- _targetForName[name]);
579
- }
580
-
581
- // check target is an access managed contract
582
- if (!_isAccessManaged(target)) {
583
- revert ErrorTargetNotAccessManaged(target);
584
- }
585
-
586
- // check target shares authority with this contract
587
- if (checkAuthority) {
588
- address targetAuthority = AccessManagedUpgradeable(target).authority();
589
- if (targetAuthority != authority()) {
590
- revert ErrorTargetAuthorityMismatch(authority(), targetAuthority);
591
- }
525
+ // create target role (if not existing)
526
+ string memory roleName;
527
+ bool roleExists;
528
+ (targetRoleId, roleName, roleExists) = _getOrCreateTargetRoleIdAndName(target, targetName, targetType);
529
+
530
+ if (!roleExists) {
531
+ _createRole(
532
+ targetRoleId,
533
+ AccessAdminLib.roleInfo(
534
+ ADMIN_ROLE(),
535
+ targetType,
536
+ 1,
537
+ roleName),
538
+ true); // revert on existing role
592
539
  }
593
540
 
594
541
  // create target info
542
+ Str name = StrLib.toStr(targetName);
595
543
  _targetInfo[target] = TargetInfo({
596
544
  name: name,
597
- isCustom: custom,
598
- createdAt: TimestampLib.blockTimestamp()
599
- });
545
+ targetType: targetType,
546
+ roleId: targetRoleId,
547
+ createdAt: TimestampLib.current(),
548
+ lastUpdateIn: BlocknumberLib.current()});
600
549
 
601
550
  // create name to target mapping
602
551
  _targetForName[name] = target;
603
552
 
604
- // add role to list of roles
553
+ // add target to list of targets
605
554
  _targets.push(target);
606
555
 
607
- emit LogAccessAdminTargetCreated(target, targetName);
556
+ // grant contract role to target
557
+ _grantRoleToAccount(targetRoleId, target);
558
+
559
+ emit LogAccessAdminTargetCreated(_adminName, targetName, managed, target, targetRoleId);
608
560
  }
609
561
 
610
562
 
611
- function _isAccessManaged(address target)
563
+ function _setTargetLocked(address target, bool locked)
612
564
  internal
613
- view
614
- returns (bool)
615
565
  {
616
- if (!ContractLib.isContract(target)) {
617
- return false;
618
- }
566
+ AccessAdminLib.checkTargetExists(this, target);
567
+ _authority.setTargetClosed(target, locked);
619
568
 
620
- (bool success, ) = target.staticcall(
621
- abi.encodeWithSelector(
622
- IAccessManagedChecker.authority.selector));
569
+ // logging
570
+ Blocknumber lastUpdateIn = _targetInfo[target].lastUpdateIn;
571
+ _targetInfo[target].lastUpdateIn = BlocknumberLib.current();
623
572
 
624
- return success;
573
+ emit LogAccessAdminTargetLockedSet(_adminName, target, locked, lastUpdateIn);
625
574
  }
626
575
 
627
576
 
628
- function _setTargetClosed(address target, bool locked)
577
+ /// @dev Authorize the functions of the target for the specified role.
578
+ function _authorizeFunctions(IAuthorization authorization, Str target, RoleId roleId)
629
579
  internal
630
580
  {
631
- _checkTarget(target);
581
+ _authorizeTargetFunctions(
582
+ getTargetForName(target),
583
+ AccessAdminLib.getAuthorizedRole(
584
+ this,
585
+ authorization,
586
+ roleId),
587
+ authorization.getAuthorizedFunctions(
588
+ target,
589
+ roleId),
590
+ false,
591
+ true);
592
+ }
632
593
 
633
- // target locked/unlocked already
634
- if(_authority.isTargetClosed(target) == locked) {
635
- revert ErrorTargetAlreadyLocked(target, locked);
636
- }
637
594
 
638
- _authority.setTargetClosed(target, locked);
639
- }
595
+ /// @dev Authorize the functions of the target for the specified role.
596
+ /// Flag addFunctions determines if functions are added or removed.
597
+ function _authorizeTargetFunctions(
598
+ address target,
599
+ RoleId roleId,
600
+ FunctionInfo[] memory functions,
601
+ bool onlyComponentOrContractTargets,
602
+ bool addFunctions
603
+ )
604
+ internal
605
+ {
606
+ // checks
607
+ AccessAdminLib.checkTargetAndRoleForFunctions(
608
+ this,
609
+ target,
610
+ roleId,
611
+ onlyComponentOrContractTargets);
640
612
 
641
- function _getAccountName(address account) internal view returns (string memory) {
642
- if (targetExists(account)) {
643
- return _targetInfo[account].name.toString();
613
+ if (addFunctions && roleId == getAdminRole()) {
614
+ revert ErrorAccessAdminAuthorizeForAdminRoleInvalid(target);
644
615
  }
645
- return "<unknown-account>";
646
- }
647
616
 
617
+ _authority.setTargetFunctionRole(
618
+ target,
619
+ AccessAdminLib.getSelectors(functions),
620
+ RoleId.unwrap(roleId));
648
621
 
649
- function _getRoleName(RoleId roleId) internal view returns (string memory) {
650
- if (roleExists(roleId)) {
651
- return _roleInfo[roleId].name.toString();
622
+ // update function set and log function grantings
623
+ for (uint256 i = 0; i < functions.length; i++) {
624
+ _updateFunctionAccess(
625
+ target,
626
+ roleId,
627
+ functions[i],
628
+ addFunctions);
652
629
  }
653
- return "<unknown-role>";
654
630
  }
655
631
 
656
632
 
657
- function _checkRoleExists(
658
- RoleId roleId,
659
- bool onlyActiveRole
633
+ function _updateFunctionAccess(
634
+ address target,
635
+ RoleId roleId,
636
+ FunctionInfo memory func,
637
+ bool addFunction
660
638
  )
661
639
  internal
662
- view
663
640
  {
664
- if (!roleExists(roleId)) {
665
- revert ErrorRoleUnknown(roleId);
666
- }
641
+ // update functions info
642
+ Selector selector = func.selector;
643
+ Blocknumber lastUpdateIn = _functionInfo[target][selector].lastUpdateIn;
667
644
 
668
- uint64 roleIdInt = RoleId.unwrap(roleId);
669
- if (roleIdInt == _authority.ADMIN_ROLE()) {
670
- revert ErrorRoleIsLocked(roleId);
671
- }
645
+ // update function sets
646
+ if (addFunction) { SelectorSetLib.add(_targetFunctions[target], selector); }
647
+ else { SelectorSetLib.remove(_targetFunctions[target], selector); }
672
648
 
673
- // check if role is disabled
674
- if (onlyActiveRole && _roleInfo[roleId].pausedAt <= TimestampLib.blockTimestamp()) {
675
- revert ErrorRoleIsPaused(roleId);
676
- }
649
+ _functionInfo[target][selector] = func;
650
+ _functionInfo[target][selector].lastUpdateIn = BlocknumberLib.current();
651
+
652
+ // logging
653
+ emit LogAccessAdminFunctionGranted(
654
+ _adminName,
655
+ target,
656
+ AccessAdminLib.toFunctionGrantingString(this, func.name, roleId),
657
+ lastUpdateIn);
677
658
  }
678
659
 
679
660
 
680
- /// @dev check if target exists and reverts if it doesn't
681
- function _checkTarget(address target)
661
+ function _checkAuthorization(
662
+ address authorization,
663
+ ObjectType expectedDomain,
664
+ VersionPart expectedRelease,
665
+ bool expectServiceAuthorization,
666
+ bool checkAlreadyInitialized
667
+ )
682
668
  internal
683
669
  view
684
670
  {
685
- if (!targetExists(target)) {
686
- revert ErrorTargetUnknown(target);
687
- }
671
+ AccessAdminLib.checkAuthorization(
672
+ address(_authorization),
673
+ authorization,
674
+ expectedDomain,
675
+ expectedRelease,
676
+ expectServiceAuthorization,
677
+ checkAlreadyInitialized);
688
678
  }
689
679
  }