@etherisc/gif-next 0.0.2-fe88ad7-208 → 0.0.2-ff282a4-523

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