@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
@@ -0,0 +1,212 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+
6
+ import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {ClaimId} from "../types/ClaimId.sol";
9
+ import {NumberId} from "../types/NumberId.sol";
10
+ import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET, COMPONENT, DISTRIBUTOR, DISTRIBUTOR_TYPE} from "../types/ObjectType.sol";
11
+ import {RiskId, RiskIdLib} from "../types/RiskId.sol";
12
+ import {RoleId, RoleIdLib, INSTANCE_ROLE, INSTANCE_OWNER_ROLE} from "../types/RoleId.sol";
13
+ import {StateId, ACTIVE} from "../types/StateId.sol";
14
+ import {TimestampLib} from "../types/Timestamp.sol";
15
+ import {VersionPart, VersionPartLib} from "../types/Version.sol";
16
+ import {ReferralId} from "../types/Referral.sol";
17
+ import {DistributorType} from "../types/DistributorType.sol";
18
+ import {PayoutId} from "../types/PayoutId.sol";
19
+
20
+ import {IInstance} from "./IInstance.sol";
21
+ import {KeyValueStore} from "./base/KeyValueStore.sol";
22
+ import {IKeyValueStore} from "./base/KeyValueStore.sol";
23
+
24
+ import {IBundle} from "./module/IBundle.sol";
25
+ import {IComponents} from "./module/IComponents.sol";
26
+ import {IDistribution} from "./module/IDistribution.sol";
27
+ import {IPolicy} from "./module/IPolicy.sol";
28
+ import {IRisk} from "./module/IRisk.sol";
29
+ import {ISetup} from "./module/ISetup.sol";
30
+
31
+
32
+ // TODO combine with instance reader?
33
+ contract InstanceStore is AccessManagedUpgradeable, KeyValueStore
34
+ {
35
+ function initialize(address instance)
36
+ public
37
+ initializer()
38
+ {
39
+ address authority = IInstance(instance).authority();
40
+ __AccessManaged_init(authority);
41
+ initializeLifecycle();
42
+ }
43
+
44
+ //--- ProductSetup ------------------------------------------------------//
45
+ function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external restricted() {
46
+ create(_toNftKey32(productNftId, PRODUCT()), abi.encode(setup));
47
+ }
48
+
49
+ function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external restricted() {
50
+ update(_toNftKey32(productNftId, PRODUCT()), abi.encode(setup), newState);
51
+ }
52
+
53
+ function updateProductSetupState(NftId productNftId, StateId newState) external restricted() {
54
+ updateState(_toNftKey32(productNftId, PRODUCT()), newState);
55
+ }
56
+
57
+ //--- DistributionSetup ------------------------------------------------------//
58
+ function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external restricted() {
59
+ create(_toNftKey32(distributionNftId, DISTRIBUTION()), abi.encode(setup));
60
+ }
61
+
62
+ function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external restricted() {
63
+ update(_toNftKey32(distributionNftId, DISTRIBUTION()), abi.encode(setup), newState);
64
+ }
65
+
66
+ function updateDistributionSetupState(NftId distributionNftId, StateId newState) external restricted() {
67
+ updateState(_toNftKey32(distributionNftId, DISTRIBUTION()), newState);
68
+ }
69
+
70
+ //--- PoolSetup ------------------------------------------------------//
71
+ function createPoolSetup(NftId poolNftId, IComponents.ComponentInfo memory info) external restricted() {
72
+ create(_toNftKey32(poolNftId, POOL()), abi.encode(info));
73
+ }
74
+
75
+ function updatePoolSetup(NftId poolNftId, IComponents.ComponentInfo memory info, StateId newState) external restricted() {
76
+ update(_toNftKey32(poolNftId, POOL()), abi.encode(info), newState);
77
+ }
78
+
79
+ function updatePoolSetupState(NftId poolNftId, StateId newState) external restricted() {
80
+ updateState(_toNftKey32(poolNftId, POOL()), newState);
81
+ }
82
+
83
+ //--- DistributorType -------------------------------------------------------//
84
+ function createDistributorType(DistributorType distributorType, IDistribution.DistributorTypeInfo memory info) external restricted() {
85
+ create(distributorType.toKey32(), abi.encode(info));
86
+ }
87
+
88
+ function updateDistributorType(DistributorType distributorType, IDistribution.DistributorTypeInfo memory info, StateId newState) external restricted() {
89
+ update(distributorType.toKey32(), abi.encode(info), newState);
90
+ }
91
+
92
+ function updateDistributorTypeState(DistributorType distributorType, StateId newState) external restricted() {
93
+ updateState(distributorType.toKey32(), newState);
94
+ }
95
+
96
+ //--- Distributor -------------------------------------------------------//
97
+ function createDistributor(NftId distributorNftId, IDistribution.DistributorInfo memory info) external restricted() {
98
+ create(_toNftKey32(distributorNftId, DISTRIBUTOR()), abi.encode(info));
99
+ }
100
+
101
+ function updateDistributor(NftId distributorNftId, IDistribution.DistributorInfo memory info, StateId newState) external restricted() {
102
+ update(_toNftKey32(distributorNftId, DISTRIBUTOR()), abi.encode(info), newState);
103
+ }
104
+
105
+ function updateDistributorState(NftId distributorNftId, StateId newState) external restricted() {
106
+ updateState(_toNftKey32(distributorNftId, DISTRIBUTOR()), newState);
107
+ }
108
+
109
+ //--- Referral ----------------------------------------------------------//
110
+ function createReferral(ReferralId referralId, IDistribution.ReferralInfo memory referralInfo) external restricted() {
111
+ create(referralId.toKey32(), abi.encode(referralInfo));
112
+ }
113
+
114
+ function updateReferral(ReferralId referralId, IDistribution.ReferralInfo memory referralInfo, StateId newState) external restricted() {
115
+ update(referralId.toKey32(), abi.encode(referralInfo), newState);
116
+ }
117
+
118
+ function updateReferralState(ReferralId referralId, StateId newState) external restricted() {
119
+ updateState(referralId.toKey32(), newState);
120
+ }
121
+
122
+ //--- Bundle ------------------------------------------------------------//
123
+ function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external restricted() {
124
+ create(_toNftKey32(bundleNftId, BUNDLE()), abi.encode(bundle));
125
+ }
126
+
127
+ function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external restricted() {
128
+ update(_toNftKey32(bundleNftId, BUNDLE()), abi.encode(bundle), newState);
129
+ }
130
+
131
+ function updateBundleState(NftId bundleNftId, StateId newState) external restricted() {
132
+ updateState(_toNftKey32(bundleNftId, BUNDLE()), newState);
133
+ }
134
+
135
+ //--- Risk --------------------------------------------------------------//
136
+ function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external restricted() {
137
+ create(riskId.toKey32(), abi.encode(risk));
138
+ }
139
+
140
+ function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external restricted() {
141
+ update(riskId.toKey32(), abi.encode(risk), newState);
142
+ }
143
+
144
+ function updateRiskState(RiskId riskId, StateId newState) external restricted() {
145
+ updateState(riskId.toKey32(), newState);
146
+ }
147
+
148
+ //--- Application (Policy) ----------------------------------------------//
149
+ function createApplication(NftId applicationNftId, IPolicy.PolicyInfo memory policy) external restricted() {
150
+ create(_toNftKey32(applicationNftId, POLICY()), abi.encode(policy));
151
+ }
152
+
153
+ function updateApplication(NftId applicationNftId, IPolicy.PolicyInfo memory policy, StateId newState) external restricted() {
154
+ update(_toNftKey32(applicationNftId, POLICY()), abi.encode(policy), newState);
155
+ }
156
+
157
+ function updateApplicationState(NftId applicationNftId, StateId newState) external restricted() {
158
+ updateState(_toNftKey32(applicationNftId, POLICY()), newState);
159
+ }
160
+
161
+ //--- Policy ------------------------------------------------------------//
162
+ function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external restricted() {
163
+ update(_toNftKey32(policyNftId, POLICY()), abi.encode(policy), newState);
164
+ }
165
+
166
+ function updatePolicyClaims(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external restricted() {
167
+ update(_toNftKey32(policyNftId, POLICY()), abi.encode(policy), newState);
168
+ }
169
+
170
+ function updatePolicyState(NftId policyNftId, StateId newState) external restricted() {
171
+ updateState(_toNftKey32(policyNftId, POLICY()), newState);
172
+ }
173
+
174
+ //--- Claim -------------------------------------------------------------//
175
+ function createClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim) external restricted() {
176
+ create(_toClaimKey32(policyNftId, claimId), abi.encode(claim));
177
+ }
178
+
179
+ function updateClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim, StateId newState) external restricted() {
180
+ update(_toClaimKey32(policyNftId, claimId), abi.encode(claim), newState);
181
+ }
182
+
183
+ function updateClaimState(NftId policyNftId, ClaimId claimId, StateId newState) external restricted() {
184
+ updateState(_toClaimKey32(policyNftId, claimId), newState);
185
+ }
186
+
187
+ //--- Payout ------------------------------------------------------------//
188
+ function createPayout(NftId policyNftId, PayoutId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
189
+ create(_toPayoutKey32(policyNftId, payoutId), abi.encode(payout));
190
+ }
191
+
192
+ function updatePayout(NftId policyNftId, PayoutId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
193
+ update(_toPayoutKey32(policyNftId, payoutId), abi.encode(payout), newState);
194
+ }
195
+
196
+ function updatePayoutState(NftId policyNftId, PayoutId payoutId, StateId newState) external restricted() {
197
+ updateState(_toPayoutKey32(policyNftId, payoutId), newState);
198
+ }
199
+
200
+ //--- internal view/pure functions --------------------------------------//
201
+ function _toNftKey32(NftId nftId, ObjectType objectType) private pure returns (Key32) {
202
+ return nftId.toKey32(objectType);
203
+ }
204
+
205
+ function _toClaimKey32(NftId policyNftId, ClaimId claimId) private pure returns (Key32) {
206
+ return claimId.toKey32(policyNftId);
207
+ }
208
+
209
+ function _toPayoutKey32(NftId policyNftId, PayoutId payoutId) private pure returns (Key32) {
210
+ return payoutId.toKey32(policyNftId);
211
+ }
212
+ }
@@ -24,18 +24,16 @@ contract ObjectManager is
24
24
  IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
25
25
 
26
26
  /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
27
- function initialize(
28
- address authority,
29
- address registry,
30
- address instance
31
- )
27
+ function initialize(address instanceAddress)
28
+ initializer
32
29
  external
33
30
  {
34
- initialize(authority, registry);
31
+ IInstance instance = IInstance(instanceAddress);
32
+ initialize(instance.authority(), address(instance.getRegistry()));
35
33
 
36
- _instance = IInstance(instance);
34
+ _instance = instance;
37
35
 
38
- emit LogObjectManagerInitialized(instance);
36
+ emit LogObjectManagerInitialized(instanceAddress);
39
37
  }
40
38
 
41
39
  function getInstance() external view returns (IInstance) {
@@ -16,30 +16,31 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
16
16
 
17
17
  abstract contract ComponentService is Service {
18
18
 
19
- error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
20
19
  error ErrorComponentServiceNotComponent(address component);
21
20
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
22
21
  error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
23
22
  error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
24
23
  error ErrorComponentServiceComponentLocked(address component);
24
+ error ErrorComponentServiceSenderNotService(address sender);
25
+ error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
25
26
 
26
27
  /// @dev modifier to check if caller is a registered service
27
28
  modifier onlyService() {
28
29
  address caller = msg.sender;
29
- require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
30
+ if(!getRegistry().isRegisteredService(caller)) {
31
+ revert ErrorComponentServiceSenderNotService(caller);
32
+ }
30
33
  _;
31
34
  }
32
35
 
33
36
  // view functions
34
37
 
35
38
  function getRegistryService() public view virtual returns (IRegistryService) {
36
- address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
37
- return IRegistryService(service);
39
+ return IRegistryService(_getServiceAddress(REGISTRY()));
38
40
  }
39
41
 
40
42
  function getInstanceService() public view returns (InstanceService) {
41
- address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
42
- return InstanceService(service);
43
+ return InstanceService(_getServiceAddress(INSTANCE()));
43
44
  }
44
45
 
45
46
  // internal functions
@@ -60,12 +61,6 @@ abstract contract ComponentService is Service {
60
61
  // component may only be registerd by initial owner of component
61
62
  owner = msg.sender;
62
63
 
63
- // check component has not already been registerd
64
- NftId compoentNftId = _registry.getNftId(componentAddress);
65
- if(compoentNftId.gtz()) {
66
- revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
- }
68
-
69
64
  // check this is a component
70
65
  component = IComponent(componentAddress);
71
66
  if(!component.supportsInterface(type(IComponent).interfaceId)) {
@@ -87,48 +82,67 @@ abstract contract ComponentService is Service {
87
82
  // check instance has assigned required role to owner
88
83
  instanceNftId = componentInfo.parentNftId;
89
84
  instance = _getInstance(instanceNftId);
90
- bool hasRole = getInstanceService().hasRole(
91
- owner,
92
- requiredRole,
93
- address(instance));
94
-
95
- if(!hasRole) {
85
+ if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
96
86
  revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
97
87
  }
98
88
  }
99
89
 
100
90
  // internal view functions
91
+ function _getAndVerifyCallingComponentAndInstance(
92
+ ObjectType expectedType // assume always of `component` type
93
+ )
94
+ internal
95
+ view
96
+ returns(
97
+ NftId componentNftId,
98
+ IRegistry.ObjectInfo memory componentInfo,
99
+ IInstance instance
100
+ )
101
+ {
102
+ componentNftId = getRegistry().getNftId(msg.sender);
103
+ (componentInfo, instance) = _getAndVerifyComponentInfoAndInstance(componentNftId, expectedType);
101
104
 
102
- function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
103
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
104
- return IInstance(instanceInfo.objectAddress);
105
+ // locked component can not call services
106
+ if (instance.getInstanceAccessManager().isTargetLocked(componentInfo.objectAddress)) {
107
+ revert IAccess.ErrorIAccessTargetLocked(componentInfo.objectAddress);
108
+ }
105
109
  }
106
110
 
107
111
  function _getAndVerifyComponentInfoAndInstance(
108
- //address component,
109
- ObjectType expectedType
112
+ NftId componentNftId,
113
+ ObjectType expectedType // assume always of `component` type
110
114
  )
111
115
  internal
112
116
  view
113
117
  returns(
114
- IRegistry.ObjectInfo memory info,
118
+ IRegistry.ObjectInfo memory componentInfo,
115
119
  IInstance instance
116
120
  )
117
121
  {
118
- IRegistry registry = getRegistry();
119
- //TODO redundant check -> just check type
120
- //NftId componentNftId = registry.getNftId(component);
121
- //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
-
123
- info = registry.getObjectInfo(msg.sender);
124
- require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
125
-
126
- address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
- instance = IInstance(instanceAddress);
128
-
129
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
130
- if (accessManager.isTargetLocked(info.objectAddress)) {
131
- revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
122
+ componentInfo = getRegistry().getObjectInfo(componentNftId);
123
+ if(componentInfo.objectType != expectedType) {
124
+ revert ErrorComponentServiceComponentTypeInvalid(
125
+ componentInfo.objectAddress,
126
+ expectedType,
127
+ componentInfo.objectType);
132
128
  }
129
+
130
+ instance = _getInstance(componentInfo.parentNftId);
131
+ }
132
+ // assume componentNftId is always of `instance` type
133
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
134
+ return IInstance(
135
+ getRegistry().getObjectInfo(
136
+ instanceNftId).objectAddress);
137
+ }
138
+ // assume componentNftId is always of `component` type
139
+ /*function _getInstanceForComponent(NftId componentNftId) internal view returns (IInstance) {
140
+ NftId instanceNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
141
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
142
+ return IInstance(instanceAddress);
143
+ }*/
144
+
145
+ function _getServiceAddress(ObjectType domain) internal view returns (address) {
146
+ return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
133
147
  }
134
- }
148
+ }
@@ -5,7 +5,7 @@ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blockn
5
5
  import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
6
6
  import {NftId} from "../../types/NftId.sol";
7
7
  import {ObjectType} from "../../types/ObjectType.sol";
8
- import {StateId, ACTIVE} from "../../types/StateId.sol";
8
+ import {StateId, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
9
9
  import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
10
10
 
11
11
  import {Lifecycle} from "./Lifecycle.sol";
@@ -20,15 +20,6 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
20
20
  bytes memory data
21
21
  )
22
22
  internal
23
- {
24
- _create(key32, data);
25
- }
26
-
27
- function _create(
28
- Key32 key32,
29
- bytes memory data
30
- )
31
- internal
32
23
  {
33
24
  ObjectType objectType = key32.toObjectType();
34
25
  require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
@@ -60,16 +51,6 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
60
51
  StateId state
61
52
  )
62
53
  internal
63
- {
64
- _update(key32, data, state);
65
- }
66
-
67
- function _update(
68
- Key32 key32,
69
- bytes memory data,
70
- StateId state
71
- )
72
- internal
73
54
  {
74
55
  require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
75
56
  Metadata storage metadata = _value[key32].metadata;
@@ -79,28 +60,27 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
79
60
  // update data
80
61
  _value[key32].data = data;
81
62
 
82
- // update metadata (and state)
63
+ // update state
64
+ if(state != KEEP_STATE()) {
65
+ metadata.state = state;
66
+ }
67
+
68
+ // update reest of metadata
83
69
  address updatedBy = msg.sender;
84
70
  Blocknumber lastUpdatedIn = metadata.updatedIn;
85
- metadata.state = state;
71
+
86
72
  metadata.updatedBy = updatedBy;
87
73
  metadata.updatedIn = blockBlocknumber();
88
74
 
89
75
  // create log entries
90
76
  // solhint-disable avoid-tx-origin
91
- emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
77
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
92
78
  emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
93
79
  // solhing-enable
94
80
  }
95
81
 
96
82
  function updateData(Key32 key32, bytes memory data)
97
83
  internal
98
- {
99
- _updateData(key32, data);
100
- }
101
-
102
- function _updateData(Key32 key32, bytes memory data)
103
- internal
104
84
  {
105
85
  Metadata storage metadata = _value[key32].metadata;
106
86
  StateId state = metadata.state;
@@ -122,18 +102,15 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
122
102
 
123
103
  function updateState(Key32 key32, StateId state)
124
104
  internal
125
- {
126
- _updateState(key32, state);
127
- }
128
-
129
- function _updateState(Key32 key32, StateId state)
130
- internal
131
105
  {
132
106
  require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
133
107
  Metadata storage metadata = _value[key32].metadata;
134
108
  StateId stateOld = metadata.state;
135
109
  require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
136
110
 
111
+ // ensure state transistion is valid
112
+ checkTransition(metadata.objectType, stateOld, state);
113
+
137
114
  // update metadata (and state)
138
115
  address updatedBy = msg.sender;
139
116
  Blocknumber lastUpdatedIn = metadata.updatedIn;
@@ -143,7 +120,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
143
120
 
144
121
  // create log entry
145
122
  // solhint-disable-next-line avoid-tx-origin
146
- emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
123
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
147
124
  }
148
125
 
149
126
  function exists(Key32 key32) public view returns (bool) {
@@ -1,22 +1,31 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
+
4
6
  import {NftId} from "../../types/NftId.sol";
5
- import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
6
- import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../types/StateId.sol";
7
+ import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK, CLAIM, PAYOUT} from "../../types/ObjectType.sol";
8
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED, EXPECTED, PAID} from "../../types/StateId.sol";
7
9
  import {ILifecycle} from "./ILifecycle.sol";
8
10
 
9
- contract Lifecycle is ILifecycle {
11
+ contract Lifecycle is
12
+ Initializable,
13
+ ILifecycle
14
+ {
10
15
  mapping(ObjectType objectType => StateId initialState)
11
16
  private _initialState;
12
17
 
13
18
  mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
14
19
  private _isValidTransition;
15
20
 
16
- constructor() {
21
+ function initializeLifecycle()
22
+ public
23
+ onlyInitializing
24
+ {
17
25
  _setupBundleLifecycle();
18
26
  _setupComponentLifecycle();
19
27
  _setupPolicyLifecycle();
28
+ _setupClaimAndPayoutLifecycle();
20
29
  _setupRiskLifecycle();
21
30
  }
22
31
 
@@ -78,6 +87,7 @@ contract Lifecycle is ILifecycle {
78
87
  function _setupBundleLifecycle() internal {
79
88
  _initialState[BUNDLE()] = ACTIVE();
80
89
  _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
90
+ _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
81
91
  _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
82
92
  _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
83
93
  }
@@ -86,11 +96,21 @@ contract Lifecycle is ILifecycle {
86
96
  _initialState[POLICY()] = APPLIED();
87
97
  _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
88
98
  _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
89
- _isValidTransition[POLICY()][APPLIED()][UNDERWRITTEN()] = true;
90
- _isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
99
+ _isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
100
+ _isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
91
101
  _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
92
102
  }
93
103
 
104
+ function _setupClaimAndPayoutLifecycle() internal {
105
+ _initialState[CLAIM()] = SUBMITTED();
106
+ _isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
107
+ _isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
108
+ _isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
109
+
110
+ _initialState[PAYOUT()] = EXPECTED();
111
+ _isValidTransition[PAYOUT()][EXPECTED()][PAID()] = true;
112
+ }
113
+
94
114
  function _setupRiskLifecycle() internal {
95
115
  _initialState[RISK()] = ACTIVE();
96
116
  _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
@@ -8,9 +8,16 @@ import {Timestamp} from "../../types/Timestamp.sol";
8
8
 
9
9
  interface IAccess {
10
10
 
11
+ enum Type {
12
+ NotInitialized,
13
+ Core,
14
+ Gif,
15
+ Custom
16
+ }
17
+
11
18
  struct RoleInfo {
12
19
  ShortString name;
13
- bool isCustom;
20
+ Type rtype;
14
21
  //bool isLocked;
15
22
  RoleId admin;
16
23
  Timestamp createdAt;
@@ -19,7 +26,7 @@ interface IAccess {
19
26
 
20
27
  struct TargetInfo {
21
28
  ShortString name;
22
- bool isCustom;
29
+ Type ttype;
23
30
  bool isLocked;
24
31
  Timestamp createdAt;
25
32
  Timestamp updatedAt;
@@ -27,22 +34,21 @@ interface IAccess {
27
34
 
28
35
  error ErrorIAccessCallerIsNotRoleAdmin(address caller, RoleId roleId);
29
36
 
30
- error ErrorIAccessRoleIdInvalid(RoleId roleId);
37
+ error ErrorIAccessRoleIdDoesNotExist(RoleId roleId);
31
38
  error ErrorIAccessRoleIdTooBig(RoleId roleId);
32
39
  error ErrorIAccessRoleIdTooSmall(RoleId roleId);
33
- error ErrorIAccessRoleIdAlreadyExists(RoleId roleId);
40
+ error ErrorIAccessRoleIdExists(RoleId roleId);
34
41
  error ErrorIAccessRoleNameEmpty(RoleId roleId);
35
- error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
36
- error ErrorIAccessSetNoncustomRole(RoleId roleId);
37
- error ErrorIAccessSetLockedForNoncustomRole(RoleId roleId);
42
+ error ErrorIAccessRoleNameExists(RoleId roleId, RoleId existingRoleId, ShortString name);
43
+ error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
38
44
 
39
45
  error ErrorIAccessTargetAddressZero();
40
- error ErrorIAccessTargetDoesNotExist(ShortString name);
41
- error ErrorIAccessTargetAlreadyExists(address target, ShortString name);
46
+ error ErrorIAccessTargetDoesNotExist(address target);
47
+ error ErrorIAccessTargetExists(address target, ShortString name);
48
+ error ErrorIAccessTargetTypeInvalid(address target, Type ttype);
42
49
  error ErrorIAccessTargetNameEmpty(address target);
43
50
  error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
44
51
  error ErrorIAccessTargetLocked(address target);
45
- error ErrorIAccessTargetIsRegistered(address target);
46
- error ErrorIAccessSetLockedForNoncustomTarget(address target);
47
- error ErrorIAccessSetForNoncustomTarget(address target);
52
+ error ErrorIAccessTargetNotRegistered(address target);
53
+ error ErrorIAccessTargetAuthorityInvalid(address target, address targetAuthority);
48
54
  }
@@ -1,20 +1,23 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Amount} from "../../types/Amount.sol";
4
5
  import {NftId} from "../../types/NftId.sol";
5
6
  import {Fee} from "../../types/Fee.sol";
7
+ import {Seconds} from "../../types/Seconds.sol";
6
8
  import {Timestamp} from "../../types/Timestamp.sol";
7
9
 
8
10
  interface IBundle {
11
+
9
12
  struct BundleInfo {
10
13
  NftId poolNftId;
11
14
  Fee fee; // bundle fee on net premium amounts
12
15
  bytes filter; // required conditions for applications to be considered for collateralization by this bundle
13
- uint256 capitalAmount; // net investment capital + net premiums - payouts
14
- uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
- uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
- uint256 lifetime;
17
- Timestamp expiredAt; // no new policies
16
+ Amount capitalAmount; // net stakings + net premiums - payouts
17
+ Amount lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= capital amount)
18
+ Amount feeAmount; // accumulated fee amount
19
+ Seconds lifetime;
20
+ Timestamp expiredAt; // no new policies starting with this timestamp
18
21
  Timestamp closedAt; // no open policies, locked amount = 0
19
22
  }
20
23
  }