@etherisc/gif-next 0.0.2-836e6e4-400 → 0.0.2-83d1db6-607

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