@etherisc/gif-next 0.0.2-a6faeb6-912 → 0.0.2-a733491-751

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