@etherisc/gif-next 0.0.2-bdd64e2-180 → 0.0.2-be8b3db-650

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 (374) hide show
  1. package/README.md +136 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +814 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +871 -240
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +177 -176
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +684 -37
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +745 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +564 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +774 -309
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +601 -237
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +783 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1769 -242
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +194 -165
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +892 -1240
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +133 -237
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +428 -273
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +302 -101
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/base/ComponentService.sol/ComponentService.json} +236 -126
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  48. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  50. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  51. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  56. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  58. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  60. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  62. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  64. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  66. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  68. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1251 -184
  70. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +440 -75
  72. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  74. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  76. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
  78. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  80. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  82. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -217
  84. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
  86. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  88. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  90. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +294 -274
  92. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +300 -95
  94. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  96. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  98. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  99. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  100. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  101. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +208 -224
  102. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +243 -206
  104. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  105. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/Registry.sol/Registry.json +222 -330
  107. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  108. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  109. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +235 -295
  111. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +295 -150
  113. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  114. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  115. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  117. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  118. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  119. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  120. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  122. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  123. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  126. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  127. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  128. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  130. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  134. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  135. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  140. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  141. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  156. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  170. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  174. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  176. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  178. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  180. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  183. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  185. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  187. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  189. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  191. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  193. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  195. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  197. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  199. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  201. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  203. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  205. package/contracts/components/Component.sol +241 -0
  206. package/contracts/components/Distribution.sol +197 -83
  207. package/contracts/components/IComponent.sol +74 -0
  208. package/contracts/components/IDistributionComponent.sol +43 -18
  209. package/contracts/components/IPoolComponent.sol +88 -37
  210. package/contracts/components/IProductComponent.sol +10 -5
  211. package/contracts/components/Pool.sol +214 -162
  212. package/contracts/components/Product.sol +130 -134
  213. package/contracts/instance/BundleManager.sol +127 -0
  214. package/contracts/instance/Cloneable.sol +46 -0
  215. package/contracts/instance/IInstance.sol +64 -10
  216. package/contracts/instance/IInstanceService.sol +34 -4
  217. package/contracts/instance/Instance.sol +119 -267
  218. package/contracts/instance/InstanceAccessManager.sol +87 -78
  219. package/contracts/instance/InstanceReader.sol +16 -28
  220. package/contracts/instance/InstanceService.sol +404 -97
  221. package/contracts/instance/InstanceServiceManager.sol +11 -13
  222. package/contracts/instance/ObjectManager.sol +84 -0
  223. package/contracts/instance/base/ComponentService.sol +134 -0
  224. package/contracts/instance/base/KeyValueStore.sol +5 -2
  225. package/contracts/instance/base/Lifecycle.sol +11 -2
  226. package/contracts/instance/module/IAccess.sol +27 -18
  227. package/contracts/instance/module/IBundle.sol +2 -1
  228. package/contracts/instance/module/IComponents.sol +35 -0
  229. package/contracts/instance/module/IDistribution.sol +2 -0
  230. package/contracts/instance/module/IPolicy.sol +30 -3
  231. package/contracts/instance/module/ISetup.sol +9 -20
  232. package/contracts/instance/service/ApplicationService.sol +350 -0
  233. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  234. package/contracts/instance/service/BundleService.sol +336 -0
  235. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  236. package/contracts/instance/service/ClaimService.sol +151 -0
  237. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  238. package/contracts/instance/service/DistributionService.sol +391 -46
  239. package/contracts/instance/service/DistributionServiceManager.sol +11 -13
  240. package/contracts/instance/service/IApplicationService.sol +82 -0
  241. package/contracts/instance/service/IBundleService.sol +62 -0
  242. package/contracts/instance/service/IClaimService.sol +61 -0
  243. package/contracts/instance/service/IDistributionService.sol +86 -0
  244. package/contracts/instance/service/IPolicyService.sol +72 -0
  245. package/contracts/instance/service/IPoolService.sol +21 -23
  246. package/contracts/instance/service/IProductService.sol +6 -73
  247. package/contracts/instance/service/PolicyService.sol +403 -0
  248. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  249. package/contracts/instance/service/PoolService.sol +96 -144
  250. package/contracts/instance/service/PoolServiceManager.sol +11 -13
  251. package/contracts/instance/service/ProductService.sol +233 -0
  252. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  253. package/contracts/registry/ChainNft.sol +5 -1
  254. package/contracts/registry/IRegistry.sol +38 -33
  255. package/contracts/registry/IRegistryService.sol +47 -13
  256. package/contracts/registry/Registry.sol +222 -249
  257. package/contracts/registry/RegistryAccessManager.sol +216 -0
  258. package/contracts/registry/RegistryService.sol +113 -229
  259. package/contracts/registry/RegistryServiceManager.sol +21 -39
  260. package/contracts/registry/ReleaseManager.sol +322 -0
  261. package/contracts/registry/TokenRegistry.sol +22 -17
  262. package/contracts/shared/ERC165.sol +14 -12
  263. package/contracts/shared/INftOwnable.sol +11 -10
  264. package/contracts/shared/IPolicyHolder.sol +26 -0
  265. package/contracts/shared/IRegisterable.sol +4 -6
  266. package/contracts/shared/IRegistryLinked.sol +12 -0
  267. package/contracts/shared/IService.sol +4 -1
  268. package/contracts/shared/IVersionable.sol +4 -47
  269. package/contracts/shared/NftOwnable.sol +67 -83
  270. package/contracts/shared/PolicyHolder.sol +81 -0
  271. package/contracts/shared/ProxyManager.sol +100 -25
  272. package/contracts/shared/Registerable.sol +16 -32
  273. package/contracts/shared/RegistryLinked.sol +48 -0
  274. package/contracts/shared/Service.sol +26 -22
  275. package/contracts/shared/TokenHandler.sol +11 -5
  276. package/contracts/shared/Versionable.sol +4 -92
  277. package/contracts/test/TestRegisterable.sol +1 -1
  278. package/contracts/test/TestService.sol +4 -3
  279. package/contracts/types/Blocknumber.sol +1 -0
  280. package/contracts/types/ClaimId.sol +52 -0
  281. package/contracts/types/DistributorType.sol +2 -2
  282. package/contracts/types/Fee.sol +1 -0
  283. package/contracts/types/NftId.sol +8 -0
  284. package/contracts/types/NftIdSet.sol +26 -24
  285. package/contracts/types/ObjectType.sol +10 -5
  286. package/contracts/types/PayoutId.sol +54 -0
  287. package/contracts/types/Referral.sol +4 -0
  288. package/contracts/types/RoleId.sol +19 -13
  289. package/contracts/types/Seconds.sol +54 -0
  290. package/contracts/types/StateId.sol +1 -0
  291. package/contracts/types/Timestamp.sol +13 -13
  292. package/contracts/types/UFixed.sol +1 -0
  293. package/contracts/types/Version.sol +1 -0
  294. package/package.json +3 -3
  295. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  296. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  297. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  298. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  299. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  301. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  303. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  305. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  307. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  309. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  311. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  313. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  315. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  317. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  319. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  321. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  324. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  326. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  328. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  330. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  332. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  334. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  336. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  338. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  339. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  340. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  341. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  342. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  343. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  344. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  345. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  346. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  348. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  349. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  350. package/contracts/components/BaseComponent.sol +0 -91
  351. package/contracts/components/IBaseComponent.sol +0 -25
  352. package/contracts/experiment/cloning/Cloner.sol +0 -47
  353. package/contracts/experiment/errors/Require.sol +0 -38
  354. package/contracts/experiment/errors/Revert.sol +0 -44
  355. package/contracts/experiment/inheritance/A.sol +0 -53
  356. package/contracts/experiment/inheritance/B.sol +0 -28
  357. package/contracts/experiment/inheritance/C.sol +0 -34
  358. package/contracts/experiment/inheritance/IA.sol +0 -13
  359. package/contracts/experiment/inheritance/IB.sol +0 -10
  360. package/contracts/experiment/inheritance/IC.sol +0 -12
  361. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  362. package/contracts/experiment/statemachine/ISM.sol +0 -25
  363. package/contracts/experiment/statemachine/SM.sol +0 -57
  364. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  365. package/contracts/experiment/types/TypeA.sol +0 -47
  366. package/contracts/experiment/types/TypeB.sol +0 -29
  367. package/contracts/instance/AccessManagedSimple.sol +0 -115
  368. package/contracts/instance/AccessManagerSimple.sol +0 -692
  369. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  370. package/contracts/instance/base/ComponentServiceBase.sol +0 -41
  371. package/contracts/instance/base/IInstanceBase.sol +0 -23
  372. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  373. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  374. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,84 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Cloneable} from "./Cloneable.sol";
5
+
6
+ import {IInstance} from "./IInstance.sol";
7
+ import {INSTANCE} from "../types/ObjectType.sol";
8
+ import {InstanceReader} from "./InstanceReader.sol";
9
+ import {IRegistry} from "../registry/IRegistry.sol";
10
+ import {LibNftIdSet} from "../types/NftIdSet.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+
13
+ contract ObjectManager is
14
+ Cloneable
15
+ {
16
+
17
+ event LogObjectManagerInitialized(address instance);
18
+
19
+ error ErrorObjectManagerNftIdInvalid(NftId instanceNftId);
20
+ error ErrorObjectManagerAlreadyAdded(NftId componentNftId, NftId objectNftId);
21
+
22
+ mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
23
+ mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
24
+ IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
25
+
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
+ )
32
+ external
33
+ {
34
+ initialize(authority, registry);
35
+
36
+ _instance = IInstance(instance);
37
+
38
+ emit LogObjectManagerInitialized(instance);
39
+ }
40
+
41
+ function getInstance() external view returns (IInstance) {
42
+ return _instance;
43
+ }
44
+
45
+ function _add(NftId componentNftId, NftId objectNftId) internal {
46
+ LibNftIdSet.Set storage allSet = _allObjects[componentNftId];
47
+ LibNftIdSet.Set storage activeSet = _activeObjects[componentNftId];
48
+
49
+ LibNftIdSet.add(allSet, objectNftId);
50
+ LibNftIdSet.add(activeSet, objectNftId);
51
+ }
52
+
53
+ function _activate(NftId componentNftId, NftId objectNftId) internal {
54
+ LibNftIdSet.add(_activeObjects[componentNftId], objectNftId);
55
+ }
56
+
57
+ function _deactivate(NftId componentNftId, NftId objectNftId) internal {
58
+ LibNftIdSet.remove(_activeObjects[componentNftId], objectNftId);
59
+ }
60
+
61
+ function _objects(NftId componentNftId) internal view returns (uint256) {
62
+ return LibNftIdSet.size(_allObjects[componentNftId]);
63
+ }
64
+
65
+ function _contains(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
66
+ return LibNftIdSet.contains(_allObjects[componentNftId], objectNftId);
67
+ }
68
+
69
+ function _getObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
70
+ return LibNftIdSet.getElementAt(_allObjects[componentNftId], idx);
71
+ }
72
+
73
+ function _activeObjs(NftId componentNftId) internal view returns (uint256) {
74
+ return LibNftIdSet.size(_activeObjects[componentNftId]);
75
+ }
76
+
77
+ function _isActive(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
78
+ return LibNftIdSet.contains(_activeObjects[componentNftId], objectNftId);
79
+ }
80
+
81
+ function _getActiveObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
82
+ return LibNftIdSet.getElementAt(_activeObjects[componentNftId], idx);
83
+ }
84
+ }
@@ -0,0 +1,134 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IComponent} from "../../components/IComponent.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
7
+ import {IInstance} from "../../instance/IInstance.sol";
8
+ import {IAccess} from "../module/IAccess.sol";
9
+ import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
10
+ import {NftId} from "../../types/NftId.sol";
11
+ import {RoleId} from "../../types/RoleId.sol";
12
+
13
+ import {Service} from "../../shared/Service.sol";
14
+ import {InstanceService} from "../InstanceService.sol";
15
+ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
16
+
17
+ abstract contract ComponentService is Service {
18
+
19
+ error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
20
+ error ErrorComponentServiceNotComponent(address component);
21
+ error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
22
+ error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
23
+ error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
24
+ error ErrorComponentServiceComponentLocked(address component);
25
+
26
+ /// @dev modifier to check if caller is a registered service
27
+ modifier onlyService() {
28
+ address caller = msg.sender;
29
+ require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
30
+ _;
31
+ }
32
+
33
+ // view functions
34
+
35
+ function getRegistryService() public view virtual returns (IRegistryService) {
36
+ address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
37
+ return IRegistryService(service);
38
+ }
39
+
40
+ function getInstanceService() public view returns (InstanceService) {
41
+ address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
42
+ return InstanceService(service);
43
+ }
44
+
45
+ // internal functions
46
+ function _checkComponentForRegistration(
47
+ address componentAddress,
48
+ ObjectType requiredType,
49
+ RoleId requiredRole
50
+ )
51
+ internal
52
+ view
53
+ returns (
54
+ IComponent component,
55
+ address owner,
56
+ IInstance instance,
57
+ NftId instanceNftId
58
+ )
59
+ {
60
+ // component may only be registerd by initial owner of component
61
+ owner = msg.sender;
62
+
63
+ // check component has not already been registerd
64
+ NftId compoentNftId = getRegistry().getNftId(componentAddress);
65
+ if(compoentNftId.gtz()) {
66
+ revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
+ }
68
+
69
+ // check this is a component
70
+ component = IComponent(componentAddress);
71
+ if(!component.supportsInterface(type(IComponent).interfaceId)) {
72
+ revert ErrorComponentServiceNotComponent(componentAddress);
73
+ }
74
+
75
+ // check component is of required type
76
+ IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
77
+ if(componentInfo.objectType != requiredType) {
78
+ revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
79
+ }
80
+
81
+ // check msg.sender is component owner
82
+ address initialOwner = componentInfo.initialOwner;
83
+ if(owner != initialOwner) {
84
+ revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
85
+ }
86
+
87
+ // check instance has assigned required role to owner
88
+ instanceNftId = componentInfo.parentNftId;
89
+ instance = _getInstance(instanceNftId);
90
+ bool hasRole = getInstanceService().hasRole(
91
+ owner,
92
+ requiredRole,
93
+ address(instance));
94
+
95
+ if(!hasRole) {
96
+ revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
97
+ }
98
+ }
99
+
100
+ // internal view functions
101
+
102
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
103
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
104
+ return IInstance(instanceInfo.objectAddress);
105
+ }
106
+
107
+ function _getAndVerifyComponentInfoAndInstance(
108
+ //address component,
109
+ ObjectType expectedType
110
+ )
111
+ internal
112
+ view
113
+ returns(
114
+ IRegistry.ObjectInfo memory info,
115
+ IInstance instance
116
+ )
117
+ {
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);
132
+ }
133
+ }
134
+ }
@@ -88,7 +88,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
88
88
 
89
89
  // create log entries
90
90
  // solhint-disable avoid-tx-origin
91
- emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
91
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
92
92
  emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
93
93
  // solhing-enable
94
94
  }
@@ -134,6 +134,9 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
134
134
  StateId stateOld = metadata.state;
135
135
  require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
136
136
 
137
+ // ensure state transistion is valid
138
+ checkTransition(metadata.objectType, stateOld, state);
139
+
137
140
  // update metadata (and state)
138
141
  address updatedBy = msg.sender;
139
142
  Blocknumber lastUpdatedIn = metadata.updatedIn;
@@ -143,7 +146,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
143
146
 
144
147
  // create log entry
145
148
  // solhint-disable-next-line avoid-tx-origin
146
- emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
149
+ emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
147
150
  }
148
151
 
149
152
  function exists(Key32 key32) public view returns (bool) {
@@ -1,19 +1,27 @@
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
7
  import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
6
8
  import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} 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();
@@ -78,6 +86,7 @@ contract Lifecycle is ILifecycle {
78
86
  function _setupBundleLifecycle() internal {
79
87
  _initialState[BUNDLE()] = ACTIVE();
80
88
  _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
89
+ _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
81
90
  _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
82
91
  _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
83
92
  }
@@ -1,38 +1,47 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
5
4
  import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
5
 
7
6
  import {RoleId} from "../../types/RoleId.sol";
7
+ import {Timestamp} from "../../types/Timestamp.sol";
8
8
 
9
9
  interface IAccess {
10
+
10
11
  struct RoleInfo {
11
12
  ShortString name;
12
13
  bool isCustom;
14
+ bool isLocked;
15
+ Timestamp createdAt;
16
+ Timestamp updatedAt;
13
17
  }
14
18
 
15
19
  struct TargetInfo {
16
20
  ShortString name;
17
21
  bool isCustom;
22
+ bool isLocked;
23
+ Timestamp createdAt;
24
+ Timestamp updatedAt;
18
25
  }
19
26
 
20
- error ErrorTargetAddressZero();
21
- error ErrorTargetAlreadyExists(address target, ShortString name);
22
- error ErrorTargetDoesNotExist(address target);
23
- error ErrorTargetNameEmpty(address target);
24
- error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
25
-
26
- error ErrorRoleIdInvalid(RoleId roleId);
27
- error ErrorRoleIdTooBig(RoleId roleId);
28
- error ErrorRoleIdTooSmall(RoleId roleId);
29
- error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
30
- error ErrorRoleIdNotActive(RoleId roleId);
31
- error ErrorRoleNameEmpty(RoleId roleId);
32
- error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
33
- error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
34
- error ErrorGrantNonexstentRole(RoleId roleId);
35
- error ErrorRevokeNonexstentRole(RoleId roleId);
36
- error ErrorRenounceNonexstentRole(RoleId roleId);
27
+ error ErrorIAccessRoleIdInvalid(RoleId roleId);
28
+ error ErrorIAccessRoleIdTooBig(RoleId roleId);
29
+ error ErrorIAccessRoleIdTooSmall(RoleId roleId);
30
+ error ErrorIAccessRoleIdAlreadyExists(RoleId roleId, ShortString name);
31
+ error ErrorIAccessRoleIdNotActive(RoleId roleId);
32
+ error ErrorIAccessRoleNameEmpty(RoleId roleId);
33
+ error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
34
+ error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
35
+ error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
36
+ error ErrorIAccessGrantNonexstentRole(RoleId roleId);
37
+ error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
38
+ error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
37
39
 
40
+ error ErrorIAccessTargetAddressZero();
41
+ error ErrorIAccessTargetDoesNotExist(ShortString name);
42
+ error ErrorIAccessTargetAddressDoesNotExist(address target);
43
+ error ErrorIAccessTargetExists(address target, ShortString name);
44
+ error ErrorIAccessTargetNameEmpty(address target);
45
+ error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
46
+ error ErrorIAccessTargetLocked(address target);
38
47
  }
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
+ import {Seconds} from "../../types/Seconds.sol";
6
7
  import {Timestamp} from "../../types/Timestamp.sol";
7
8
 
8
9
  interface IBundle {
@@ -13,7 +14,7 @@ interface IBundle {
13
14
  uint256 capitalAmount; // net investment capital + net premiums - payouts
14
15
  uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
15
16
  uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
- uint256 lifetime;
17
+ Seconds lifetime;
17
18
  Timestamp expiredAt; // no new policies
18
19
  Timestamp closedAt; // no open policies, locked amount = 0
19
20
  }
@@ -0,0 +1,35 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {RoleId} from "../../types/RoleId.sol";
9
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
11
+
12
+ interface IComponents {
13
+
14
+ struct ComponentInfo {
15
+ string name; // component name (needs to be unique per instance)
16
+ IERC20Metadata token;
17
+ TokenHandler tokenHandler;
18
+ address wallet;
19
+ bytes data; // will hold component type specific additional info (eg encoded pool info)
20
+ }
21
+
22
+ struct PoolInfo {
23
+ NftId productNftId; // the nft of the product this pool is linked to
24
+ RoleId bundleOwnerRole; // the required role for bundle owners
25
+ uint256 maxCapitalAmount; // max capital amount allowed for pool
26
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
27
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
28
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
29
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
30
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
31
+ Fee poolFee; // pool fee on net premium
32
+ Fee stakingFee; // pool fee on staked capital from investor
33
+ Fee performanceFee; // pool fee on profits from capital investors
34
+ }
35
+ }
@@ -24,6 +24,8 @@ interface IDistribution {
24
24
  DistributorType distributorType;
25
25
  bool active;
26
26
  bytes data;
27
+ uint256 sumCommisions;
28
+ uint256 numPoliciesSold;
27
29
  }
28
30
 
29
31
  struct ReferralInfo {
@@ -2,12 +2,39 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
- import {NumberId} from "../../types/NumberId.sol";
5
+ import {ClaimId} from "../../types/ClaimId.sol";
6
6
  import {ReferralId} from "../../types/Referral.sol";
7
7
  import {RiskId} from "../../types/RiskId.sol";
8
+ import {Seconds} from "../../types/Seconds.sol";
8
9
  import {Timestamp} from "../../types/Timestamp.sol";
9
10
 
10
11
  interface IPolicy {
12
+
13
+ struct Premium {
14
+ // this is the net premium calculated by the product
15
+ uint256 netPremiumAmount;
16
+ // fullPremium = netPremium + all fixed amounts + all variable amounts (excl commission and minDistribtuionOwnerFee variable part)
17
+ uint256 fullPremiumAmount;
18
+ // premium = fullPremium - discount
19
+ uint256 premiumAmount;
20
+ uint256 productFeeFixAmount;
21
+ uint256 poolFeeFixAmount;
22
+ uint256 bundleFeeFixAmount;
23
+ uint256 distributionFeeFixAmount;
24
+ uint256 productFeeVarAmount;
25
+ uint256 poolFeeVarAmount;
26
+ uint256 bundleFeeVarAmount;
27
+ uint256 distributionFeeVarAmount;
28
+ uint256 distributionOwnerFeeFixAmount;
29
+ // this is the remaining amount when the commission and discount are subtracted from the distribution fee variable part (must be at least the minDistributionOwnerFee)
30
+ uint256 distributionOwnerFeeVarAmount;
31
+ // this value is based on distributor type referenced in the referral
32
+ uint256 commissionAmount;
33
+ // this is based on referral used
34
+ uint256 discountAmount;
35
+ }
36
+
37
+ /// @dev policy data for the full policy lifecycle
11
38
  struct PolicyInfo {
12
39
  NftId productNftId;
13
40
  NftId bundleNftId;
@@ -16,7 +43,7 @@ interface IPolicy {
16
43
  uint256 sumInsuredAmount;
17
44
  uint256 premiumAmount;
18
45
  uint256 premiumPaidAmount;
19
- uint256 lifetime;
46
+ Seconds lifetime;
20
47
  bytes applicationData;
21
48
  bytes policyData;
22
49
  uint16 claimsCount;
@@ -37,7 +64,7 @@ interface IPolicy {
37
64
 
38
65
  // claimId neeeds to be encoded policyNftId:claimId combination
39
66
  struct PayoutInfo {
40
- NumberId claimId;
67
+ ClaimId claimId;
41
68
  uint256 amount;
42
69
  bytes data;
43
70
  Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
@@ -5,40 +5,29 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
5
5
 
6
6
  import {Fee} from "../../types/Fee.sol";
7
7
  import {NftId} from "../../types/NftId.sol";
8
- import {LibNftIdSet} from "../../types/NftIdSet.sol";
9
- import {UFixed} from "../../types/UFixed.sol";
8
+ import {RoleId} from "../../types/RoleId.sol";
10
9
  import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
11
11
 
12
12
  interface ISetup {
13
+
13
14
  struct ProductSetupInfo {
14
15
  IERC20Metadata token;
15
16
  TokenHandler tokenHandler;
16
17
  NftId distributionNftId;
17
18
  NftId poolNftId;
18
- Fee distributionFee; // default distribution fee (no referral id)
19
19
  Fee productFee; // product fee on net premium
20
- Fee processingFee; // product fee on payout amounts
21
- Fee poolFee; // pool fee on net premium
22
- Fee stakingFee; // pool fee on staked capital from investor
23
- Fee performanceFee; // pool fee on profits from capital investors
24
- }
25
-
26
- struct DistributionSetupInfo {
27
- NftId productNftId;
28
- TokenHandler tokenHandler;
29
- Fee distributionFee; // default distribution fee (no referral id)
30
- bool isIntercepting; // intercepts nft transfers (for distributors)
20
+ Fee processingFee; // product fee on payout amounts
21
+ bool isIntercepting; // intercepts nft transfers (for products)
31
22
  address wallet;
32
23
  }
33
24
 
34
- struct PoolSetupInfo {
25
+ struct DistributionSetupInfo {
35
26
  NftId productNftId;
36
27
  TokenHandler tokenHandler;
37
- UFixed collateralizationLevel;
38
- Fee poolFee; // pool fee on net premium
39
- Fee stakingFee; // pool fee on staked capital from investor
40
- Fee performanceFee; // pool fee on profits from capital investors
41
- bool isIntercepting; // intercepts nft transfers (for bundles)
28
+ Fee minDistributionOwnerFee;
29
+ Fee distributionFee; // recalculated whenever any fee on the product/pool/dist/disttype is changed
42
30
  address wallet;
31
+ uint256 sumDistributionOwnerFees;
43
32
  }
44
33
  }