@etherisc/gif-next 0.0.2-da06f3b-803 → 0.0.2-da09ec0-359

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