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

Sign up to get free protection for your applications and to get access to all the features.
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
+ }