@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e964d24-516

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