@etherisc/gif-next 0.0.2-e9148e0-933 → 0.0.2-e9a637d-547

Sign up to get free protection for your applications and to get access to all the features.
Files changed (385) hide show
  1. package/README.md +65 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +941 -230
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +295 -132
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +864 -49
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +825 -231
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +638 -190
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +346 -704
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +342 -168
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +405 -3100
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +609 -178
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +148 -247
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +536 -259
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +335 -98
  38. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2677 -0
  40. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  41. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +247 -180
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1341 -259
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +440 -79
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +217 -208
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +606 -0
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +437 -154
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +90 -391
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +649 -251
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +305 -92
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +284 -502
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +304 -99
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +261 -131
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  110. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/Registry.sol/Registry.json +275 -226
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +200 -335
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -141
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  122. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  123. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  124. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  125. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  127. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  128. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  129. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  131. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  132. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  133. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
  135. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  137. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  139. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  140. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  141. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  145. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  146. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  147. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
  149. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  151. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  153. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  155. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  157. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  159. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  161. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
  163. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  166. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  168. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  169. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  170. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  171. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  172. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  174. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  177. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  179. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  181. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  183. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  185. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  186. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  187. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  190. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  192. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  194. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  196. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  198. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  200. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  202. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  204. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  206. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  210. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  212. package/contracts/components/Component.sol +253 -0
  213. package/contracts/components/Distribution.sol +200 -79
  214. package/contracts/components/IComponent.sol +76 -0
  215. package/contracts/components/IDistributionComponent.sol +44 -17
  216. package/contracts/components/IPoolComponent.sol +88 -37
  217. package/contracts/components/IProductComponent.sol +10 -5
  218. package/contracts/components/Pool.sol +221 -160
  219. package/contracts/components/Product.sol +128 -119
  220. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  221. package/contracts/instance/BundleManager.sol +127 -0
  222. package/contracts/instance/Cloneable.sol +51 -0
  223. package/contracts/instance/IInstance.sol +43 -24
  224. package/contracts/instance/IInstanceService.sol +59 -5
  225. package/contracts/instance/Instance.sol +125 -369
  226. package/contracts/instance/InstanceAccessManager.sol +428 -176
  227. package/contracts/instance/InstanceReader.sol +21 -34
  228. package/contracts/instance/InstanceService.sol +466 -128
  229. package/contracts/instance/InstanceServiceManager.sol +6 -9
  230. package/contracts/instance/InstanceStore.sol +219 -0
  231. package/contracts/instance/ObjectManager.sol +82 -0
  232. package/contracts/instance/base/ComponentService.sol +121 -0
  233. package/contracts/instance/base/KeyValueStore.sol +13 -5
  234. package/contracts/instance/base/Lifecycle.sol +11 -2
  235. package/contracts/instance/module/IAccess.sol +36 -20
  236. package/contracts/instance/module/IBundle.sol +8 -5
  237. package/contracts/instance/module/IComponents.sol +41 -0
  238. package/contracts/instance/module/IDistribution.sol +2 -0
  239. package/contracts/instance/module/IPolicy.sol +30 -3
  240. package/contracts/instance/module/ISetup.sol +9 -20
  241. package/contracts/instance/service/ApplicationService.sol +351 -0
  242. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  243. package/contracts/instance/service/BundleService.sol +431 -0
  244. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  245. package/contracts/instance/service/ClaimService.sol +151 -0
  246. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  247. package/contracts/instance/service/DistributionService.sol +382 -33
  248. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  249. package/contracts/instance/service/IApplicationService.sol +82 -0
  250. package/contracts/instance/service/IBundleService.sol +93 -0
  251. package/contracts/instance/service/IClaimService.sol +61 -0
  252. package/contracts/instance/service/IDistributionService.sol +87 -0
  253. package/contracts/instance/service/IPolicyService.sol +72 -0
  254. package/contracts/instance/service/IPoolService.sol +79 -17
  255. package/contracts/instance/service/IProductService.sol +6 -73
  256. package/contracts/instance/service/PolicyService.sol +362 -0
  257. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  258. package/contracts/instance/service/PoolService.sol +217 -108
  259. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  260. package/contracts/instance/service/ProductService.sol +114 -453
  261. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  262. package/contracts/registry/ChainNft.sol +9 -1
  263. package/contracts/registry/IRegistry.sol +41 -19
  264. package/contracts/registry/IRegistryService.sol +31 -13
  265. package/contracts/registry/ITransferInterceptor.sol +1 -0
  266. package/contracts/registry/Registry.sol +245 -222
  267. package/contracts/registry/RegistryAccessManager.sol +216 -0
  268. package/contracts/registry/RegistryService.sol +97 -173
  269. package/contracts/registry/RegistryServiceManager.sol +21 -39
  270. package/contracts/registry/ReleaseManager.sol +324 -0
  271. package/contracts/registry/TokenRegistry.sol +22 -17
  272. package/contracts/shared/ERC165.sol +14 -12
  273. package/contracts/shared/INftOwnable.sol +11 -10
  274. package/contracts/shared/IPolicyHolder.sol +26 -0
  275. package/contracts/shared/IRegisterable.sol +4 -6
  276. package/contracts/shared/IRegistryLinked.sol +12 -0
  277. package/contracts/shared/IService.sol +5 -4
  278. package/contracts/shared/IVersionable.sol +4 -47
  279. package/contracts/shared/NftOwnable.sol +66 -80
  280. package/contracts/shared/PolicyHolder.sol +81 -0
  281. package/contracts/shared/ProxyManager.sol +100 -25
  282. package/contracts/shared/Registerable.sol +16 -32
  283. package/contracts/shared/RegistryLinked.sol +48 -0
  284. package/contracts/shared/Service.sol +41 -24
  285. package/contracts/shared/TokenHandler.sol +11 -5
  286. package/contracts/shared/Versionable.sol +4 -92
  287. package/contracts/test/TestRegisterable.sol +1 -1
  288. package/contracts/test/TestService.sol +4 -3
  289. package/contracts/types/Amount.sol +60 -0
  290. package/contracts/types/Blocknumber.sol +1 -0
  291. package/contracts/types/ClaimId.sol +52 -0
  292. package/contracts/types/DistributorType.sol +2 -2
  293. package/contracts/types/Fee.sol +13 -5
  294. package/contracts/types/NftId.sol +8 -0
  295. package/contracts/types/NftIdSet.sol +26 -24
  296. package/contracts/types/ObjectType.sol +10 -5
  297. package/contracts/types/PayoutId.sol +54 -0
  298. package/contracts/types/Referral.sol +4 -0
  299. package/contracts/types/RoleId.sol +26 -19
  300. package/contracts/types/Seconds.sol +54 -0
  301. package/contracts/types/StateId.sol +1 -0
  302. package/contracts/types/Timestamp.sol +13 -13
  303. package/contracts/types/UFixed.sol +1 -0
  304. package/contracts/types/Version.sol +1 -0
  305. package/package.json +3 -3
  306. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  307. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  308. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  309. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  312. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  314. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  316. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  318. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  320. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  322. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  324. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  326. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  328. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  330. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  332. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  335. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  337. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  339. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  341. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  343. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  345. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  347. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  349. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  350. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  351. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  352. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  353. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  354. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  355. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  356. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  357. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  358. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  359. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  360. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  361. package/contracts/components/BaseComponent.sol +0 -91
  362. package/contracts/components/IBaseComponent.sol +0 -25
  363. package/contracts/experiment/cloning/Cloner.sol +0 -47
  364. package/contracts/experiment/errors/Require.sol +0 -38
  365. package/contracts/experiment/errors/Revert.sol +0 -44
  366. package/contracts/experiment/inheritance/A.sol +0 -53
  367. package/contracts/experiment/inheritance/B.sol +0 -28
  368. package/contracts/experiment/inheritance/C.sol +0 -34
  369. package/contracts/experiment/inheritance/IA.sol +0 -13
  370. package/contracts/experiment/inheritance/IB.sol +0 -10
  371. package/contracts/experiment/inheritance/IC.sol +0 -12
  372. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  373. package/contracts/experiment/statemachine/ISM.sol +0 -25
  374. package/contracts/experiment/statemachine/SM.sol +0 -57
  375. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  376. package/contracts/experiment/types/TypeA.sol +0 -47
  377. package/contracts/experiment/types/TypeB.sol +0 -29
  378. package/contracts/instance/AccessManagedSimple.sol +0 -115
  379. package/contracts/instance/AccessManagerSimple.sol +0 -692
  380. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  381. package/contracts/instance/base/ComponentServiceBase.sol +0 -124
  382. package/contracts/instance/base/IInstanceBase.sol +0 -23
  383. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  384. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  385. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,288 +1,540 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
4
5
  import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
6
  import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
7
 
7
- import {AccessManagedSimple} from "./AccessManagedSimple.sol";
8
- import {AccessManagerSimple} from "./AccessManagerSimple.sol";
9
- import {IBundle} from "./module/IBundle.sol";
10
- import {IPolicy} from "./module/IPolicy.sol";
11
- import {IRisk} from "./module/IRisk.sol";
12
- import {ISetup} from "./module/ISetup.sol";
13
- import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
14
- import {KeyValueStore} from "./base/KeyValueStore.sol";
8
+ import {RoleId, RoleIdLib, ADMIN_ROLE, PUBLIC_ROLE, INSTANCE_SERVICE_ROLE, INSTANCE_OWNER_ROLE, INSTANCE_ROLE} from "../types/RoleId.sol";
9
+ import {TimestampLib} from "../types/Timestamp.sol";
15
10
  import {NftId} from "../types/NftId.sol";
16
- import {NumberId} from "../types/NumberId.sol";
17
- import {ObjectType, BUNDLE, DISTRIBUTION, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
18
- import {RiskId, RiskIdLib} from "../types/RiskId.sol";
19
- import {RoleId, RoleIdLib} from "../types/RoleId.sol";
20
- import {StateId, ACTIVE} from "../types/StateId.sol";
21
- import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
11
+
12
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
13
+
14
+ import {IRegistry} from "../registry/IRegistry.sol";
15
+
16
+ import {IInstance} from "./IInstance.sol";
17
+ import {IAccess} from "./module/IAccess.sol";
22
18
 
23
19
  contract InstanceAccessManager is
24
- AccessManagedSimple
20
+ AccessManagedUpgradeable
25
21
  {
22
+ event LogRoleCreation(RoleId roleId, ShortString name, IAccess.Type rtype);
23
+ event LogTargetCreation(address target, ShortString name, IAccess.Type ttype, bool isLocked);
24
+
25
+ using RoleIdLib for RoleId;
26
+
26
27
  string public constant ADMIN_ROLE_NAME = "AdminRole";
27
28
  string public constant PUBLIC_ROLE_NAME = "PublicRole";
29
+ string public constant INSTANCE_ROLE_NAME = "InstanceRole";
30
+ string public constant INSTANCE_OWNER_ROLE_NAME = "InstanceOwnerRole";
28
31
 
29
- uint64 public constant CUSTOM_ROLE_ID_MIN = 10000;
32
+ uint64 public constant CUSTOM_ROLE_ID_MIN = 10000; // MUST be even
30
33
  uint32 public constant EXECUTION_DELAY = 0;
31
34
 
32
- struct RoleInfo {
33
- ShortString name;
34
- bool isCustom;
35
- bool isLocked;
36
- Timestamp createdAt;
37
- Timestamp updatedAt;
38
- }
39
-
40
- struct TargetInfo {
41
- ShortString name;
42
- bool isCustom;
43
- bool isLocked;
44
- Timestamp createdAt;
45
- Timestamp updatedAt;
46
- }
47
-
48
- error ErrorRoleIdInvalid(RoleId roleId);
49
- error ErrorRoleIdTooBig(RoleId roleId);
50
- error ErrorRoleIdTooSmall(RoleId roleId);
51
- error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
52
- error ErrorRoleIdNotActive(RoleId roleId);
53
- error ErrorRoleNameEmpty(RoleId roleId);
54
- error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
55
- error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
56
- error ErrorRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
57
- error ErrorSetLockedForNonexstentRole(RoleId roleId);
58
- error ErrorGrantNonexstentRole(RoleId roleId);
59
- error ErrorRevokeNonexstentRole(RoleId roleId);
60
- error ErrorRenounceNonexstentRole(RoleId roleId);
61
-
62
- error ErrorTargetAddressZero();
63
- error ErrorTargetAlreadyExists(address target, ShortString name);
64
- error ErrorTargetNameEmpty(address target);
65
- error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
66
- error ErrorSetLockedForNonexstentTarget(address target);
67
-
68
35
  // role specific state
69
- mapping(RoleId roleId => RoleInfo info) internal _role;
36
+ mapping(RoleId roleId => IAccess.RoleInfo info) internal _roleInfo;
70
37
  mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
71
- mapping(ShortString name => RoleId roleId) internal _roleForName;
72
- RoleId [] internal _roles;
38
+ mapping(ShortString name => RoleId roleId) internal _roleIdForName;
39
+ RoleId [] internal _roleIds;
40
+ uint64 _idNext;
73
41
 
74
42
  // target specific state
75
- mapping(address target => TargetInfo info) internal _target;
76
- mapping(ShortString name => address target) internal _targetForName;
43
+ mapping(address target => IAccess.TargetInfo info) internal _targetInfo;
44
+ mapping(ShortString name => address target) internal _targetAddressForName;
77
45
  address [] internal _targets;
78
46
 
79
- AccessManagerSimple internal _accessManager;
47
+ AccessManagerUpgradeableInitializeable internal _accessManager;
48
+ IRegistry internal _registry;
49
+
50
+ modifier restrictedToRoleAdmin(RoleId roleId) {
51
+ RoleId admin = getRoleAdmin(roleId);
52
+ (bool inRole, uint32 executionDelay) = _accessManager.hasRole(admin.toInt(), _msgSender());
53
+ assert(executionDelay == 0); // to be sure no delayed execution functionality is used
54
+ if (!inRole) {
55
+ revert IAccess.ErrorIAccessCallerIsNotRoleAdmin(_msgSender(), roleId);
56
+ }
57
+ _;
58
+ }
80
59
 
81
- constructor(address accessManager)
60
+ // instance owner is granted upon instance nft minting in callback function
61
+ function initialize(address instanceAddress) external initializer
82
62
  {
83
- _accessManager = AccessManagerSimple(accessManager);
84
- initializeAccessManagedSimple(accessManager);
63
+ IInstance instance = IInstance(instanceAddress);
64
+ IRegistry registry = instance.getRegistry();
65
+ address authority = instance.authority();
85
66
 
86
- _createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
87
- _createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
88
- }
67
+ __AccessManaged_init(authority);
89
68
 
90
- //--- Role ------------------------------------------------------//
69
+ _accessManager = AccessManagerUpgradeableInitializeable(authority);
70
+ _registry = registry;
71
+ _idNext = CUSTOM_ROLE_ID_MIN;
72
+
73
+ _createRole(ADMIN_ROLE(), ADMIN_ROLE_NAME, IAccess.Type.Core);
74
+ _createRole(PUBLIC_ROLE(), PUBLIC_ROLE_NAME, IAccess.Type.Core);
75
+ _createRole(INSTANCE_ROLE(), INSTANCE_ROLE_NAME, IAccess.Type.Core);
76
+ _createRole(INSTANCE_OWNER_ROLE(), INSTANCE_OWNER_ROLE_NAME, IAccess.Type.Gif);// TODO should be of core type
77
+
78
+ // assume `this` is already a member of ADMIN_ROLE
79
+ EnumerableSet.add(_roleMembers[ADMIN_ROLE()], address(this));
91
80
 
92
- function createDefaultRole(RoleId roleId, string memory name) external restricted() {
93
- _createRole(roleId, name, false, true);
81
+ grantRole(INSTANCE_ROLE(), instanceAddress);
82
+ setRoleAdmin(INSTANCE_OWNER_ROLE(), INSTANCE_ROLE());
94
83
  }
95
84
 
96
- function createRole(RoleId roleId, string memory name) external restricted() {
97
- _createRole(roleId, name, true, true);
85
+ //--- Role ------------------------------------------------------//
86
+ // ADMIN_ROLE
87
+ // assume all core roles are know at deployment time
88
+ // assume core roles are set and granted only during instance cloning
89
+ // assume core roles are never revoked -> core roles admin is never active after intialization
90
+ function createCoreRole(RoleId roleId, string memory name)
91
+ external
92
+ restricted()
93
+ {
94
+ _createRole(roleId, name, IAccess.Type.Core);
95
+ }
96
+ // ADMIN_ROLE
97
+ // assume gif roles can be revoked
98
+ // assume admin is INSTANCE_OWNER_ROLE or INSTANCE_ROLE
99
+ function createGifRole(RoleId roleId, string memory name, RoleId admin)
100
+ external
101
+ restricted()
102
+ {
103
+ _createRole(roleId, name, IAccess.Type.Gif);
104
+ setRoleAdmin(roleId, admin);
98
105
  }
99
106
 
100
- function setRoleLocked(RoleId roleId, bool locked) external restricted() {
101
- if (!roleExists(roleId)) {
102
- revert ErrorSetLockedForNonexstentRole(roleId);
103
- }
107
+ // INSTANCE_OWNER_ROLE
108
+ function createRole(string memory roleName, string memory adminName)
109
+ external
110
+ restricted()
111
+ returns(RoleId roleId, RoleId admin)
112
+ {
113
+ (roleId, admin) = _getNextCustomRoleId();
104
114
 
105
- _role[roleId].isLocked = locked;
106
- _role[roleId].updatedAt = TimestampLib.blockTimestamp();
107
- }
115
+ _createRole(roleId, roleName, IAccess.Type.Custom);
116
+ _createRole(admin, adminName, IAccess.Type.Custom);
108
117
 
109
- function roleExists(RoleId roleId) public view returns (bool exists) {
110
- return _role[roleId].createdAt.gtz();
118
+ // TODO works without this -> why?
119
+ setRoleAdmin(roleId, admin);
120
+ setRoleAdmin(admin, INSTANCE_OWNER_ROLE());
111
121
  }
112
122
 
113
- function grantRole(RoleId roleId, address member) external restricted() returns (bool granted) {
123
+ // ADMIN_ROLE
124
+ // assume used by instance service only during instance cloning
125
+ // assume used only by this.createRole(), this.createGifRole() afterwards
126
+ function setRoleAdmin(RoleId roleId, RoleId admin)
127
+ public
128
+ restricted()
129
+ {
114
130
  if (!roleExists(roleId)) {
115
- revert ErrorGrantNonexstentRole(roleId);
131
+ revert IAccess.ErrorIAccessRoleIdDoesNotExist(roleId);
116
132
  }
117
133
 
118
- if (_role[roleId].isLocked) {
119
- revert ErrorRoleIdNotActive(roleId);
134
+ if(_roleInfo[roleId].rtype == IAccess.Type.Core) {
135
+ revert IAccess.ErrorIAccessRoleTypeInvalid(roleId, IAccess.Type.Core);
120
136
  }
121
137
 
122
- if (!EnumerableSet.contains(_roleMembers[roleId], member)) {
123
- _accessManager.grantRole(roleId.toInt(), member, EXECUTION_DELAY);
124
- EnumerableSet.add(_roleMembers[roleId], member);
125
- return true;
126
- }
138
+ if (!roleExists(admin)) {
139
+ revert IAccess.ErrorIAccessRoleIdDoesNotExist(admin);
140
+ }
127
141
 
128
- return false;
142
+ _roleInfo[roleId].admin = admin;
129
143
  }
130
144
 
131
- function revokeRole(RoleId roleId, address member) external restricted() returns (bool revoked) {
145
+ // TODO core role can be granted only to 1 member
146
+ function grantRole(RoleId roleId, address member)
147
+ public
148
+ restrictedToRoleAdmin(roleId)
149
+ returns (bool granted)
150
+ {
132
151
  if (!roleExists(roleId)) {
133
- revert ErrorRevokeNonexstentRole(roleId);
152
+ revert IAccess.ErrorIAccessRoleIdDoesNotExist(roleId);
134
153
  }
135
154
 
136
- if (EnumerableSet.contains(_roleMembers[roleId], member)) {
137
- _accessManager.revokeRole(roleId.toInt(), member);
138
- EnumerableSet.remove(_roleMembers[roleId], member);
139
- return true;
140
- }
141
-
142
- return false;
155
+ granted = EnumerableSet.add(_roleMembers[roleId], member);
156
+ if(granted) {
157
+ _accessManager.grantRole(roleId.toInt(), member, EXECUTION_DELAY);
158
+ }
143
159
  }
144
160
 
145
- /// @dev not restricted function by intention
146
- /// the restriction to role members is already enforced by the call to the access manger
147
- function renounceRole(RoleId roleId) external returns (bool revoked) {
148
- address member = msg.sender;
161
+ function revokeRole(RoleId roleId, address member)
162
+ external
163
+ restrictedToRoleAdmin(roleId)
164
+ returns (bool)
165
+ {
166
+ return _revokeRole(roleId, member);
167
+ }
149
168
 
169
+ // INSTANCE_OWNER_ROLE
170
+ // IMPORTANT: unbounded function, revoke all or revert
171
+ // Instance owner role decides what to do in case of custom role admin bening revoked, e.g.:
172
+ // 1) revoke custom role from ALL members
173
+ // 2) revoke custom role admin from ALL members
174
+ // 3) 1) + 2)
175
+ // 4) revoke only 1 member of custom role admin
176
+ function revokeRoleAllMembers(RoleId roleId)
177
+ external
178
+ restrictedToRoleAdmin(roleId)
179
+ returns (bool revoked)
180
+ {
150
181
  if (!roleExists(roleId)) {
151
- revert ErrorRenounceNonexstentRole(roleId);
182
+ revert IAccess.ErrorIAccessRoleIdDoesNotExist(roleId);
152
183
  }
153
184
 
154
- if (EnumerableSet.contains(_roleMembers[roleId], member)) {
155
- // cannot use accessManger.renounce as it directly checks against msg.sender
156
- _accessManager.revokeRole(roleId.toInt(), member);
185
+ uint memberCount = EnumerableSet.length(_roleMembers[roleId]);
186
+ for(uint memberIdx = 0; memberIdx < memberCount; memberIdx++)
187
+ {
188
+ address member = EnumerableSet.at(_roleMembers[roleId], memberIdx);
157
189
  EnumerableSet.remove(_roleMembers[roleId], member);
158
- return true;
190
+ _accessManager.revokeRole(roleId.toInt(), member);
191
+ }
192
+ }
193
+
194
+ /// @dev not restricted function by intention
195
+ /// the restriction to role members is already enforced by the call to the access manager
196
+ function renounceRole(RoleId roleId)
197
+ external
198
+ returns (bool)
199
+ {
200
+ IAccess.Type rtype = _roleInfo[roleId].rtype;
201
+ if(rtype == IAccess.Type.Core || rtype == IAccess.Type.Gif) {
202
+ revert IAccess.ErrorIAccessRoleTypeInvalid(roleId, rtype);
159
203
  }
160
204
 
161
- return false;
205
+ address member = msg.sender;
206
+ // cannot use accessManger.renounce as it directly checks against msg.sender
207
+ return _revokeRole(roleId, member);
162
208
  }
163
209
 
164
- function roles() external view returns (uint256 numberOfRoles) {
165
- return _roles.length;
210
+ function roleExists(RoleId roleId) public view returns (bool exists) {
211
+ return _roleInfo[roleId].createdAt.gtz();
212
+ }
213
+ // TODO returns ADMIN_ROLE id for non existent roleId
214
+ function getRoleAdmin(RoleId roleId) public view returns(RoleId admin) {
215
+ return _roleInfo[roleId].admin;
216
+ }
217
+
218
+ function getRoleInfo(RoleId roleId) external view returns (IAccess.RoleInfo memory info) {
219
+ return _roleInfo[roleId];
220
+ }
221
+
222
+ function roleMembers(RoleId roleId) public view returns (uint256 numberOfMembers) {
223
+ return EnumerableSet.length(_roleMembers[roleId]);
166
224
  }
167
225
 
168
226
  function getRoleId(uint256 idx) external view returns (RoleId roleId) {
169
- return _roles[idx];
227
+ return _roleIds[idx];
170
228
  }
171
229
 
230
+ // TODO returns ADMIN_ROLE id for non existent name
172
231
  function getRoleIdForName(string memory name) external view returns (RoleId roleId) {
173
- return _roleForName[ShortStrings.toShortString(name)];
232
+ return _roleIdForName[ShortStrings.toShortString(name)];
174
233
  }
175
234
 
176
- function getRole(RoleId roleId) external view returns (RoleInfo memory role) {
177
- return _role[roleId];
235
+ function roleMember(RoleId roleId, uint256 idx) external view returns (address member) {
236
+ return EnumerableSet.at(_roleMembers[roleId], idx);
178
237
  }
179
238
 
180
239
  function hasRole(RoleId roleId, address account) external view returns (bool accountHasRole) {
181
240
  (accountHasRole, ) = _accessManager.hasRole(roleId.toInt(), account);
182
241
  }
183
242
 
184
- function roleMembers(RoleId roleId) external view returns (uint256 numberOfMembers) {
185
- return EnumerableSet.length(_roleMembers[roleId]);
243
+ function roles() external view returns (uint256 numberOfRoles) {
244
+ return _roleIds.length;
186
245
  }
187
246
 
188
- function getRoleMember(RoleId roleId, uint256 idx) external view returns (address roleMember) {
189
- return EnumerableSet.at(_roleMembers[roleId], idx);
247
+ //--- Target ------------------------------------------------------//
248
+ // ADMIN_ROLE
249
+ // assume some core targets are registred (instance) while others are not (instance accesss manager, instance reader, bundle manager)
250
+ function createCoreTarget(address target, string memory name) external restricted() {
251
+ _createTarget(target, name, IAccess.Type.Core);
190
252
  }
253
+ // INSTANCE_SERVICE_ROLE
254
+ // TODO check for instance mismatch?
255
+ function createGifTarget(address target, string memory name) external restricted()
256
+ {
257
+ if(!_registry.isRegistered(target)) {
258
+ revert IAccess.ErrorIAccessTargetNotRegistered(target);
259
+ }
191
260
 
192
- //--- Target ------------------------------------------------------//
193
- function createTarget(address target, string memory name) external restricted() {
194
- _createTarget(target, name, true, true);
261
+ _createTarget(target, name, IAccess.Type.Gif);
262
+ }
263
+ // INSTANCE_OWNER_ROLE
264
+ // assume custom target.authority() is constant -> target MUST not be used with different instance access manager
265
+ // assume custom target can not be registered as component -> each service which is doing component registration MUST register a gif target
266
+ // assume custom target can not be registered as instance or service -> why?
267
+ // TODO check target associated with instance owner or instance or instance components or components helpers
268
+ function createTarget(address target, string memory name) external restricted()
269
+ {
270
+ _createTarget(target, name, IAccess.Type.Custom);
271
+ }
272
+
273
+ // TODO instance owner locks component instead of revoking it access to the instance...
274
+ function setTargetLockedByService(address target, bool locked)
275
+ external
276
+ restricted // INSTANCE_SERVICE_ROLE
277
+ {
278
+ _setTargetLocked(target, locked);
279
+ }
280
+
281
+ function setTargetLockedByInstance(address target, bool locked)
282
+ external
283
+ restricted // INSTANCE_ROLE
284
+ {
285
+ _setTargetLocked(target, locked);
286
+ }
287
+
288
+
289
+ // allowed combinations of roles and targets:
290
+ //1) set core role for core target
291
+ //2) set gif role for gif target
292
+ //3) set custom role for gif target
293
+ //4) set custom role for custom target
294
+
295
+ // ADMIN_ROLE if used only during initialization, works with:
296
+ // any roles for any targets
297
+ // INSTANCE_SERVICE_ROLE if used not only during initilization, works with:
298
+ // core roles for core targets
299
+ // gif roles for gif targets
300
+ function setCoreTargetFunctionRole(
301
+ string memory targetName,
302
+ bytes4[] calldata selectors,
303
+ RoleId roleId
304
+ )
305
+ public
306
+ virtual
307
+ restricted()
308
+ {
309
+ ShortString nameShort = ShortStrings.toShortString(targetName);
310
+ address target = _targetAddressForName[nameShort];
311
+
312
+ // not custom target
313
+ if(_targetInfo[target].ttype == IAccess.Type.Custom) {
314
+ revert IAccess.ErrorIAccessTargetTypeInvalid(target, IAccess.Type.Custom);
315
+ }
316
+
317
+ // not custom role
318
+ if(_roleInfo[roleId].rtype == IAccess.Type.Custom) {
319
+ revert IAccess.ErrorIAccessRoleTypeInvalid(roleId, IAccess.Type.Custom);
320
+ }
321
+
322
+ _setTargetFunctionRole(target, nameShort, selectors, roleId);
195
323
  }
196
324
 
197
- function setTargetLocked(address target, bool locked) external restricted() {
198
- if (!targetExists(target)) {
199
- revert ErrorSetLockedForNonexstentTarget(target);
325
+ // INSTANCE_OWNER_ROLE
326
+ // gif role for gif target
327
+ // gif role for custom target
328
+ // custom role for gif target
329
+ // custom role for custom target
330
+ // TODO instance owner can mess with gif target (component) -> e.g. set custom role for function intendent to work with gif role
331
+ function setTargetFunctionRole(
332
+ string memory targetName,
333
+ bytes4[] calldata selectors,
334
+ RoleId roleId
335
+ )
336
+ public
337
+ virtual
338
+ restricted()
339
+ {
340
+ ShortString nameShort = ShortStrings.toShortString(targetName);
341
+ address target = _targetAddressForName[nameShort];
342
+
343
+ // not core target
344
+ if(_targetInfo[target].ttype == IAccess.Type.Core) {
345
+ revert IAccess.ErrorIAccessTargetTypeInvalid(target, IAccess.Type.Core);
200
346
  }
201
347
 
202
- _target[target].isLocked = locked;
203
- _accessManager.setTargetClosed(target, locked);
348
+ // not core role
349
+ if(_roleInfo[roleId].rtype == IAccess.Type.Core) {
350
+ revert IAccess.ErrorIAccessRoleTypeInvalid(roleId, IAccess.Type.Core);
351
+ }
352
+
353
+ _setTargetFunctionRole(target, nameShort, selectors, roleId);
354
+ }
355
+
356
+ function getTargetAddress(string memory targetName) public view returns(address targetAddress) {
357
+ ShortString nameShort = ShortStrings.toShortString(targetName);
358
+ return _targetAddressForName[nameShort];
359
+ }
360
+
361
+ function isTargetLocked(address target) public view returns (bool locked) {
362
+ return _targetInfo[target].isLocked;
204
363
  }
205
364
 
206
365
  function targetExists(address target) public view returns (bool exists) {
207
- return _target[target].createdAt.gtz();
366
+ return _targetInfo[target].createdAt.gtz();
208
367
  }
209
368
 
210
- //--- internal view/pure functions --------------------------------------//
369
+ function getTargetInfo(address target) public view returns (IAccess.TargetInfo memory) {
370
+ return _targetInfo[target];
371
+ }
211
372
 
212
- function _createRole(RoleId roleId, string memory name, bool isCustom, bool validateParameters) internal {
213
- if (validateParameters) {
214
- _validateRoleParameters(roleId, name, isCustom);
373
+ //--- Role internal view/pure functions --------------------------------------//
374
+ function _createRole(RoleId roleId, string memory roleName, IAccess.Type rtype)
375
+ internal
376
+ {
377
+ ShortString name = ShortStrings.toShortString(roleName);
378
+ _validateRole(roleId, name, rtype);
379
+
380
+ if(roleExists(roleId)) {
381
+ revert IAccess.ErrorIAccessRoleIdExists(roleId);
215
382
  }
216
383
 
217
- RoleInfo memory role = RoleInfo(
218
- ShortStrings.toShortString(name),
219
- isCustom,
220
- false, // role un-locked,
384
+ if (_roleIdForName[name].gtz()) {
385
+ revert IAccess.ErrorIAccessRoleNameExists(roleId, _roleIdForName[name], name);
386
+ }
387
+
388
+ _roleInfo[roleId] = IAccess.RoleInfo(
389
+ name,
390
+ rtype,
391
+ ADMIN_ROLE(),
221
392
  TimestampLib.blockTimestamp(),
222
- TimestampLib.blockTimestamp());
393
+ TimestampLib.blockTimestamp()
394
+ );
395
+ _roleIdForName[name] = roleId;
396
+ _roleIds.push(roleId);
223
397
 
224
- _role[roleId] = role;
225
- _roleForName[role.name] = roleId;
226
- _roles.push(roleId);
398
+ emit LogRoleCreation(roleId, name, rtype);
227
399
  }
228
400
 
229
- function _validateRoleParameters(
230
- RoleId roleId,
231
- string memory name,
232
- bool isCustom
233
- )
401
+ function _validateRole(RoleId roleId, ShortString name, IAccess.Type rtype)
234
402
  internal
235
- view
236
- returns (RoleInfo memory existingRole)
403
+ view
237
404
  {
238
- // check role id
239
- uint64 roleIdInt = RoleId.unwrap(roleId);
240
- if(roleIdInt == _accessManager.ADMIN_ROLE() || roleIdInt == _accessManager.PUBLIC_ROLE()) {
241
- revert ErrorRoleIdInvalid(roleId);
405
+ uint roleIdInt = roleId.toInt();
406
+ if(rtype == IAccess.Type.Custom && roleIdInt < CUSTOM_ROLE_ID_MIN) {
407
+ revert IAccess.ErrorIAccessRoleIdTooSmall(roleId);
242
408
  }
243
409
 
244
- // prevent changing isCustom for existing roles
245
- existingRole = _role[roleId];
246
-
247
- if (existingRole.createdAt.gtz() && isCustom != existingRole.isCustom) {
248
- revert ErrorRoleIsCustomIsImmutable(roleId, isCustom, existingRole.isCustom);
410
+ if(
411
+ rtype != IAccess.Type.Custom &&
412
+ roleIdInt >= CUSTOM_ROLE_ID_MIN &&
413
+ roleIdInt != PUBLIC_ROLE().toInt())
414
+ {
415
+ revert IAccess.ErrorIAccessRoleIdTooBig(roleId);
249
416
  }
250
417
 
251
- if (isCustom && roleIdInt < CUSTOM_ROLE_ID_MIN) {
252
- revert ErrorRoleIdTooSmall(roleId);
253
- } else if (!isCustom && roleIdInt >= CUSTOM_ROLE_ID_MIN) {
254
- revert ErrorRoleIdTooBig(roleId);
418
+ // role name checks
419
+ if (ShortStrings.byteLength(name) == 0) {
420
+ revert IAccess.ErrorIAccessRoleNameEmpty(roleId);
255
421
  }
422
+ }
256
423
 
257
- // role name checks
258
- ShortString nameShort = ShortStrings.toShortString(name);
259
- if (ShortStrings.byteLength(nameShort) == 0) {
260
- revert ErrorRoleNameEmpty(roleId);
424
+ function _revokeRole(RoleId roleId, address member)
425
+ internal
426
+ returns(bool revoked)
427
+ {
428
+ if (!roleExists(roleId)) {
429
+ revert IAccess.ErrorIAccessRoleIdDoesNotExist(roleId);
261
430
  }
262
431
 
263
- if (_roleForName[nameShort] != RoleIdLib.zero() && _roleForName[nameShort] != roleId) {
264
- revert ErrorRoleNameNotUnique(_roleForName[nameShort], nameShort);
432
+ revoked = EnumerableSet.remove(_roleMembers[roleId], member);
433
+ if(revoked) {
434
+ _accessManager.revokeRole(roleId.toInt(), member);
265
435
  }
266
436
  }
267
437
 
268
- function _createTarget(address target, string memory name, bool isCustom, bool validateParameters) internal {
269
- if (validateParameters) {
270
- _validateTargetParameters(target, name, isCustom);
438
+ function _getNextCustomRoleId()
439
+ internal
440
+ returns(RoleId roleId, RoleId admin)
441
+ {
442
+ uint64 roleIdInt = _idNext;
443
+ uint64 adminInt = roleIdInt + 1;
444
+
445
+ _idNext = roleIdInt + 2;
446
+
447
+ roleId = RoleIdLib.toRoleId(roleIdInt);
448
+ admin = RoleIdLib.toRoleId(adminInt);
449
+ }
450
+
451
+ //--- Target internal view/pure functions --------------------------------------//
452
+ function _createTarget(address target, string memory targetName, IAccess.Type ttype)
453
+ internal
454
+ {
455
+ ShortString name = ShortStrings.toShortString(targetName);
456
+ _validateTarget(target, name, ttype);
457
+
458
+ if (_targetInfo[target].createdAt.gtz()) {
459
+ revert IAccess.ErrorIAccessTargetExists(target, _targetInfo[target].name);
271
460
  }
272
461
 
273
- TargetInfo memory info = TargetInfo(
274
- ShortStrings.toShortString(name),
275
- isCustom,
276
- _accessManager.isTargetClosed(target), // sync with state in access manager
277
- TimestampLib.blockTimestamp(),
278
- TimestampLib.blockTimestamp());
462
+ if (_targetAddressForName[name] != address(0)) {
463
+ revert IAccess.ErrorIAccessTargetNameExists(
464
+ target,
465
+ _targetAddressForName[name],
466
+ name);
467
+ }
279
468
 
280
- _target[target] = info;
281
- _targetForName[info.name] = target;
469
+ bool isLocked = _accessManager.isTargetClosed(target);// sync with state in access manager
470
+ _targetInfo[target] = IAccess.TargetInfo(
471
+ name,
472
+ ttype,
473
+ isLocked,
474
+ TimestampLib.blockTimestamp(),
475
+ TimestampLib.blockTimestamp()
476
+ );
477
+ _targetAddressForName[name] = target;
282
478
  _targets.push(target);
479
+
480
+ emit LogTargetCreation(target, name, ttype, isLocked);
481
+ }
482
+
483
+ function _validateTarget(address target, ShortString name, IAccess.Type ttype)
484
+ internal
485
+ view
486
+ {
487
+ address targetAuthority = AccessManagedUpgradeable(target).authority();
488
+ if(targetAuthority != authority()) {
489
+ revert IAccess.ErrorIAccessTargetAuthorityInvalid(target, targetAuthority);
490
+ }
491
+
492
+ if (ShortStrings.byteLength(name) == 0) {
493
+ revert IAccess.ErrorIAccessTargetNameEmpty(target);
494
+ }
283
495
  }
284
496
 
285
- function _validateTargetParameters(address target, string memory name, bool isCustom) internal view {
497
+ // IMPORTANT: instance access manager MUST be of Core type -> otherwise can be locked forever
498
+ function _setTargetLocked(address target, bool locked) internal
499
+ {
500
+ IAccess.Type targetType = _targetInfo[target].ttype;
501
+ if(target == address(0) || targetType == IAccess.Type.NotInitialized) {
502
+ revert IAccess.ErrorIAccessTargetDoesNotExist(target);
503
+ }
504
+
505
+ if(targetType == IAccess.Type.Core) {
506
+ revert IAccess.ErrorIAccessTargetTypeInvalid(target, targetType);
507
+ }
508
+
509
+ _targetInfo[target].isLocked = locked;
510
+ _accessManager.setTargetClosed(target, locked);
511
+ }
512
+
513
+ function _setTargetFunctionRole(
514
+ address target,
515
+ ShortString name,
516
+ bytes4[] calldata selectors,
517
+ RoleId roleId
518
+ )
519
+ internal
520
+ {
521
+ if (target == address(0)) {
522
+ revert IAccess.ErrorIAccessTargetDoesNotExist(target);
523
+ }
524
+
525
+ if (!roleExists(roleId)) {
526
+ revert IAccess.ErrorIAccessRoleIdDoesNotExist(roleId);
527
+ }
528
+
529
+ uint64 roleIdInt = RoleId.unwrap(roleId);
530
+ _accessManager.setTargetFunctionRole(target, selectors, roleIdInt);
531
+ }
286
532
 
533
+ function canCall(
534
+ address caller,
535
+ address target,
536
+ bytes4 selector
537
+ ) public view virtual returns (bool immediate, uint32 delay) {
538
+ return _accessManager.canCall(caller, target, selector);
287
539
  }
288
540
  }