@etherisc/gif-next 0.0.2-743affe-003 → 0.0.2-770fd3b-604

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 (428) hide show
  1. package/README.md +243 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +897 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1140 -152
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +291 -228
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +616 -9
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +533 -113
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +485 -45
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1035 -271
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +919 -131
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  46. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1389 -1174
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +336 -42
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +2037 -1293
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1386 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1260 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +610 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +754 -0
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  71. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  73. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  74. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  75. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  77. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  79. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  81. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  83. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  84. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  85. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  87. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1117 -0
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1318 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +586 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +694 -44
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +602 -0
  97. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/{base/ComponentServiceBase.sol/ComponentServiceBase.json → service/IApplicationService.sol/IApplicationService.json} +293 -48
  99. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +798 -0
  101. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +309 -22
  103. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +784 -0
  105. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +114 -86
  107. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +108 -233
  109. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1378 -0
  111. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  112. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +642 -0
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  114. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +414 -106
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +574 -0
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +398 -355
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  120. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +574 -0
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  122. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +231 -65
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  126. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +384 -53
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  128. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/Registry.sol/Registry.json +210 -206
  130. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  133. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +615 -125
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +601 -0
  136. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  137. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  138. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  139. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +531 -0
  140. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  141. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  142. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  143. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  144. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +164 -0
  146. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  147. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +69 -57
  148. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +98 -8
  150. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  151. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +69 -0
  152. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  153. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +103 -58
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +303 -0
  158. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  159. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +269 -0
  160. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  161. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +245 -56
  162. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +266 -11
  164. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  165. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +105 -0
  166. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  167. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +249 -78
  168. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  169. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  170. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  171. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  172. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -2
  174. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  176. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +266 -11
  178. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  179. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  180. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  181. package/artifacts/contracts/test/TestService.sol/TestService.json +320 -33
  182. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  183. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  184. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  185. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  186. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  187. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +24 -8
  188. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  189. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  190. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  195. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  197. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  199. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  201. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  202. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  203. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  205. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  207. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  209. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  211. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  218. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  220. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  221. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  222. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  224. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  225. package/contracts/components/Component.sol +236 -0
  226. package/contracts/components/Distribution.sol +204 -61
  227. package/contracts/components/IComponent.sol +50 -0
  228. package/contracts/components/IDistributionComponent.sol +59 -6
  229. package/contracts/components/IPoolComponent.sol +54 -32
  230. package/contracts/components/IProductComponent.sol +8 -8
  231. package/contracts/components/Pool.sol +155 -147
  232. package/contracts/components/Product.sol +117 -138
  233. package/contracts/experiment/cloning/Cloner.sol +47 -0
  234. package/contracts/instance/BundleManager.sol +125 -0
  235. package/contracts/instance/Cloneable.sol +46 -0
  236. package/contracts/instance/IInstance.sol +78 -46
  237. package/contracts/instance/IInstanceService.sol +59 -0
  238. package/contracts/instance/Instance.sol +263 -67
  239. package/contracts/instance/InstanceAccessManager.sol +297 -0
  240. package/contracts/instance/InstanceReader.sol +293 -0
  241. package/contracts/instance/InstanceService.sol +433 -0
  242. package/contracts/instance/InstanceServiceManager.sol +54 -0
  243. package/contracts/instance/ObjectManager.sol +84 -0
  244. package/contracts/instance/base/ComponentService.sol +134 -0
  245. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  246. package/contracts/instance/base/ILifecycle.sol +3 -3
  247. package/contracts/instance/base/KeyValueStore.sol +49 -38
  248. package/contracts/instance/base/Lifecycle.sol +1 -1
  249. package/contracts/instance/module/IAccess.sol +47 -0
  250. package/contracts/instance/module/IBundle.sol +20 -0
  251. package/contracts/instance/module/IDistribution.sol +39 -0
  252. package/contracts/instance/module/IPolicy.sol +45 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +47 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ApplicationService.sol +268 -0
  257. package/contracts/instance/service/BundleService.sol +298 -0
  258. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  259. package/contracts/instance/service/DistributionService.sol +241 -21
  260. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  261. package/contracts/instance/service/IApplicationService.sol +82 -0
  262. package/contracts/instance/service/IBundleService.sol +54 -0
  263. package/contracts/instance/service/IDistributionService.sol +54 -1
  264. package/contracts/instance/service/IPolicyService.sol +88 -0
  265. package/contracts/instance/service/IPoolService.sol +7 -24
  266. package/contracts/instance/service/IProductService.sol +9 -76
  267. package/contracts/instance/service/PolicyService.sol +524 -0
  268. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  269. package/contracts/instance/service/PoolService.sol +77 -117
  270. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  271. package/contracts/instance/service/ProductService.sol +157 -433
  272. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  273. package/contracts/registry/ChainNft.sol +41 -26
  274. package/contracts/registry/IRegistry.sol +55 -31
  275. package/contracts/registry/IRegistryService.sol +52 -16
  276. package/contracts/registry/Registry.sol +274 -317
  277. package/contracts/registry/RegistryAccessManager.sol +216 -0
  278. package/contracts/registry/RegistryService.sol +138 -260
  279. package/contracts/registry/RegistryServiceManager.sol +62 -0
  280. package/contracts/registry/ReleaseManager.sol +332 -0
  281. package/contracts/registry/TokenRegistry.sol +113 -0
  282. package/contracts/shared/ContractDeployerLib.sol +72 -0
  283. package/contracts/shared/ERC165.sol +14 -9
  284. package/contracts/shared/INftOwnable.sol +28 -0
  285. package/contracts/shared/IPolicyHolder.sol +26 -0
  286. package/contracts/shared/IRegisterable.sol +5 -12
  287. package/contracts/shared/IRegistryLinked.sol +15 -0
  288. package/contracts/shared/IService.sol +16 -0
  289. package/contracts/shared/IVersionable.sol +2 -2
  290. package/contracts/shared/NftOwnable.sol +190 -0
  291. package/contracts/shared/PolicyHolder.sol +81 -0
  292. package/contracts/shared/ProxyManager.sol +21 -41
  293. package/contracts/shared/Registerable.sol +24 -60
  294. package/contracts/shared/RegistryLinked.sol +64 -0
  295. package/contracts/shared/Service.sol +60 -0
  296. package/contracts/shared/TokenHandler.sol +27 -0
  297. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  298. package/contracts/shared/Versionable.sol +6 -5
  299. package/contracts/test/TestFee.sol +2 -2
  300. package/contracts/test/TestRegisterable.sol +1 -1
  301. package/contracts/test/TestRoleId.sol +1 -1
  302. package/contracts/test/TestService.sol +6 -7
  303. package/contracts/types/DistributorType.sol +55 -0
  304. package/contracts/types/Fee.sol +3 -3
  305. package/contracts/types/Key32.sol +8 -3
  306. package/contracts/types/NftIdSet.sol +26 -24
  307. package/contracts/types/NumberId.sol +52 -0
  308. package/contracts/types/ObjectType.sol +40 -15
  309. package/contracts/types/Referral.sol +85 -0
  310. package/contracts/types/RoleId.sol +61 -9
  311. package/contracts/types/StateId.sol +5 -1
  312. package/contracts/types/Timestamp.sol +7 -3
  313. package/contracts/types/UFixed.sol +128 -12
  314. package/contracts/types/Version.sol +4 -1
  315. package/package.json +6 -5
  316. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  317. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -213
  318. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  319. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -177
  320. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  321. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  322. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  323. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  324. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  325. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -344
  327. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  328. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  329. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  332. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  334. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  336. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  338. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  341. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  343. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  344. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  345. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  348. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  349. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  351. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  354. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  356. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  358. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  359. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  360. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  362. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  363. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  365. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  367. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  368. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  370. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  371. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  372. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  373. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  374. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  375. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -690
  376. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  377. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  378. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  379. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  380. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +0 -4
  381. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +0 -344
  382. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  383. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  384. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  385. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
  386. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  387. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
  388. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  389. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
  390. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  391. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  392. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  393. package/contracts/components/BaseComponent.sol +0 -79
  394. package/contracts/components/IBaseComponent.sol +0 -19
  395. package/contracts/instance/IInstanceLinked.sol +0 -8
  396. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  397. package/contracts/instance/base/IInstanceBase.sol +0 -23
  398. package/contracts/instance/base/IService.sol +0 -15
  399. package/contracts/instance/base/InstanceBase.sol +0 -89
  400. package/contracts/instance/base/ModuleBase.sol +0 -57
  401. package/contracts/instance/base/ServiceBase.sol +0 -43
  402. package/contracts/instance/module/access/Access.sol +0 -149
  403. package/contracts/instance/module/access/IAccess.sol +0 -53
  404. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  405. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  406. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  407. package/contracts/instance/module/component/IComponent.sol +0 -28
  408. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  409. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  410. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  411. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  412. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  413. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  414. package/contracts/instance/module/risk/IRisk.sol +0 -26
  415. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  416. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  417. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  418. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  419. package/contracts/instance/service/ComponentOwnerService.sol +0 -272
  420. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  421. package/contracts/registry/IChainNft.sol +0 -22
  422. package/contracts/registry/IRegistryLinked.sol +0 -8
  423. package/contracts/registry/RegistryInstaller.sol +0 -100
  424. package/contracts/shared/IOwnable.sol +0 -6
  425. package/contracts/test/TestDistribution.sol +0 -22
  426. package/contracts/test/TestPool.sol +0 -27
  427. package/contracts/test/TestProduct.sol +0 -74
  428. package/contracts/types/ReferralId.sol +0 -48
@@ -0,0 +1,268 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "./IApplicationService.sol";
6
+
7
+ import {IRegistry} from "../../registry/IRegistry.sol";
8
+ import {IProductComponent} from "../../components/IProductComponent.sol";
9
+ import {Product} from "../../components/Product.sol";
10
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
12
+ import {IInstance} from "../IInstance.sol";
13
+ import {IPolicy} from "../module/IPolicy.sol";
14
+ import {IRisk} from "../module/IRisk.sol";
15
+ import {IBundle} from "../module/IBundle.sol";
16
+ import {IProductService} from "./IProductService.sol";
17
+ import {ITreasury} from "../module/ITreasury.sol";
18
+ import {ISetup} from "../module/ISetup.sol";
19
+
20
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
21
+
22
+ import {IVersionable} from "../../shared/IVersionable.sol";
23
+ import {Versionable} from "../../shared/Versionable.sol";
24
+
25
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
27
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
28
+ import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
29
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
30
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
31
+ import {Fee, FeeLib} from "../../types/Fee.sol";
32
+ import {ReferralId} from "../../types/Referral.sol";
33
+ import {RiskId} from "../../types/RiskId.sol";
34
+ import {StateId} from "../../types/StateId.sol";
35
+ import {Version, VersionLib} from "../../types/Version.sol";
36
+
37
+ import {ComponentService} from "../base/ComponentService.sol";
38
+ import {InstanceReader} from "../InstanceReader.sol";
39
+ import {IApplicationService} from "./IApplicationService.sol";
40
+ import {IBundleService} from "./IBundleService.sol";
41
+ import {IPoolService} from "./IPoolService.sol";
42
+ import {IService} from "../../shared/IService.sol";
43
+ import {Service} from "../../shared/Service.sol";
44
+
45
+
46
+ contract ApplicationService is
47
+ ComponentService,
48
+ IApplicationService
49
+ {
50
+
51
+
52
+ function initialize(
53
+ address owner,
54
+ bytes memory data
55
+ )
56
+ public
57
+ virtual
58
+ initializer()
59
+ {
60
+ // TODO check this, might no longer be the way, refactor if necessary
61
+ address registryAddress;
62
+ address initialOwner;
63
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
64
+
65
+ initializeService(registryAddress, owner);
66
+ registerInterface(type(IApplicationService).interfaceId);
67
+ }
68
+
69
+
70
+ function create(
71
+ address applicationOwner,
72
+ RiskId riskId,
73
+ NftId bundleNftId,
74
+ ReferralId referralId,
75
+ uint256 sumInsuredAmount,
76
+ uint256 lifetime,
77
+ bytes memory applicationData
78
+ )
79
+ external
80
+ virtual override
81
+ returns (NftId applicationNftId)
82
+ {
83
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
84
+ // TODO: add validations (see create bundle in pool service)
85
+
86
+ applicationNftId = getRegistryService().registerPolicy(
87
+ IRegistry.ObjectInfo(
88
+ zeroNftId(),
89
+ productInfo.nftId,
90
+ POLICY(),
91
+ false, // intercepting property for policies is defined on product
92
+ address(0),
93
+ applicationOwner,
94
+ ""
95
+ )
96
+ );
97
+
98
+ (uint256 premiumAmount,,,,) = calculatePremium(
99
+ riskId,
100
+ sumInsuredAmount,
101
+ lifetime,
102
+ applicationData,
103
+ bundleNftId,
104
+ referralId
105
+ );
106
+
107
+ IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
108
+ productInfo.nftId,
109
+ bundleNftId,
110
+ referralId,
111
+ riskId,
112
+ sumInsuredAmount,
113
+ premiumAmount,
114
+ 0,
115
+ lifetime,
116
+ applicationData,
117
+ "",
118
+ 0,
119
+ 0,
120
+ 0,
121
+ zeroTimestamp(),
122
+ zeroTimestamp(),
123
+ zeroTimestamp()
124
+ );
125
+
126
+ instance.createPolicy(applicationNftId, policyInfo);
127
+ instance.updatePolicyState(applicationNftId, APPLIED());
128
+
129
+ // TODO: add logging
130
+ }
131
+
132
+
133
+ function renew(
134
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
135
+ NftId bundleNftId // will likely need a newer bundle for underwriting
136
+ )
137
+ external
138
+ virtual override
139
+ returns (NftId applicationNftId)
140
+ {
141
+
142
+ }
143
+
144
+
145
+ function ajust(
146
+ NftId applicationNftId,
147
+ RiskId riskId,
148
+ NftId bundleNftId,
149
+ ReferralId referralId,
150
+ uint256 sumInsuredAmount,
151
+ uint256 lifetime,
152
+ bytes memory applicationData
153
+ )
154
+ external
155
+ virtual override
156
+ {
157
+
158
+ }
159
+
160
+ function revoke(NftId policyNftId)
161
+ external
162
+ virtual override
163
+ {
164
+
165
+ }
166
+
167
+
168
+ function calculatePremium(
169
+ RiskId riskId,
170
+ uint256 sumInsuredAmount,
171
+ uint256 lifetime,
172
+ bytes memory applicationData,
173
+ NftId bundleNftId,
174
+ ReferralId referralId
175
+ )
176
+ public
177
+ view
178
+ virtual override
179
+ returns (
180
+ uint256 premiumAmount,
181
+ uint256 distributionFeeAmount,
182
+ uint256 productFeeAmount,
183
+ uint256 poolFeeAmount,
184
+ uint256 bundleFeeAmount
185
+ )
186
+ {
187
+ Product product = _getAndVerifyInstanceAndProduct();
188
+ uint256 netPremiumAmount = product.calculateNetPremium(
189
+ sumInsuredAmount,
190
+ riskId,
191
+ lifetime,
192
+ applicationData
193
+ );
194
+
195
+ (
196
+ productFeeAmount,
197
+ poolFeeAmount,
198
+ bundleFeeAmount,
199
+ distributionFeeAmount
200
+ ) = _calculateFeeAmounts(
201
+ netPremiumAmount,
202
+ product,
203
+ bundleNftId,
204
+ referralId
205
+ );
206
+
207
+ premiumAmount = netPremiumAmount + productFeeAmount;
208
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
209
+ premiumAmount += distributionFeeAmount;
210
+ }
211
+
212
+
213
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
214
+ return APPLICATION();
215
+ }
216
+
217
+
218
+ // internal functions
219
+
220
+ function _calculateFeeAmounts(
221
+ uint256 netPremiumAmount,
222
+ Product product,
223
+ NftId bundleNftId,
224
+ ReferralId referralId
225
+ )
226
+ internal
227
+ view
228
+ returns (
229
+ uint256 productFeeAmount,
230
+ uint256 poolFeeAmount,
231
+ uint256 bundleFeeAmount,
232
+ uint256 distributionFeeAmount
233
+ )
234
+ {
235
+ InstanceReader instanceReader;
236
+ {
237
+ IInstance instance = product.getInstance();
238
+ instanceReader = instance.getInstanceReader();
239
+ }
240
+
241
+ NftId poolNftId = product.getPoolNftId();
242
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
243
+ require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
244
+
245
+ {
246
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
247
+ (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
248
+ }
249
+ {
250
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
251
+ (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
252
+ }
253
+ {
254
+ NftId distributionNftId = product.getDistributionNftId();
255
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
256
+ (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
257
+ }
258
+
259
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
260
+ }
261
+
262
+
263
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
264
+ IRegistry.ObjectInfo memory productInfo;
265
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
266
+ product = Product(productInfo.objectAddress);
267
+ }
268
+ }
@@ -0,0 +1,298 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Pool} from "../../components/Pool.sol";
5
+ import {IRegistry} from "../../registry/IRegistry.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {IBundle} from "../../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
+ import {ISetup} from "../module/ISetup.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../../shared/IVersionable.sol";
13
+ import {Versionable} from "../../shared/Versionable.sol";
14
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
15
+
16
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
+ import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
18
+ import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
19
+ import {Fee, FeeLib} from "../../types/Fee.sol";
20
+ import {Version, VersionLib} from "../../types/Version.sol";
21
+ import {KEEP_STATE, StateId} from "../../types/StateId.sol";
22
+ import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
+
24
+ import {IService} from "../../shared/IService.sol";
25
+ import {Service} from "../../shared/Service.sol";
26
+ import {BundleManager} from "../BundleManager.sol";
27
+ import {ComponentService} from "../base/ComponentService.sol";
28
+ import {IBundleService} from "./IBundleService.sol";
29
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
30
+ import {InstanceService} from "../InstanceService.sol";
31
+ import {InstanceReader} from "../InstanceReader.sol";
32
+
33
+ string constant BUNDLE_SERVICE_NAME = "BundleService";
34
+
35
+ contract BundleService is
36
+ ComponentService,
37
+ IBundleService
38
+ {
39
+ using NftIdLib for NftId;
40
+
41
+ string public constant NAME = "BundleService";
42
+
43
+ address internal _registryAddress;
44
+
45
+ function _initialize(
46
+ address owner,
47
+ bytes memory data
48
+ )
49
+ internal
50
+ initializer
51
+ virtual override
52
+ {
53
+ address registryAddress;
54
+ address initialOwner;
55
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
+ // TODO while PoolService is not deployed in PoolServiceManager constructor
57
+ // owner is PoolServiceManager deployer
58
+ initializeService(registryAddress, owner);
59
+ registerInterface(type(IBundleService).interfaceId);
60
+ }
61
+
62
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
63
+ return BUNDLE();
64
+ }
65
+
66
+ function createBundle(
67
+ address owner,
68
+ Fee memory fee,
69
+ uint256 stakingAmount,
70
+ uint256 lifetime,
71
+ bytes calldata filter
72
+ )
73
+ external
74
+ override
75
+ returns(NftId bundleNftId)
76
+ {
77
+ (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
78
+ InstanceReader instanceReader = instance.getInstanceReader();
79
+ NftId poolNftId = info.nftId;
80
+
81
+ IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
82
+ poolNftId,
83
+ fee,
84
+ filter,
85
+ stakingAmount,
86
+ 0,
87
+ stakingAmount,
88
+ lifetime,
89
+ zeroTimestamp(),
90
+ zeroTimestamp()
91
+ );
92
+
93
+ // register bundle with registry
94
+ bundleNftId = getRegistryService().registerBundle(
95
+ IRegistry.ObjectInfo(
96
+ zeroNftId(),
97
+ poolNftId,
98
+ BUNDLE(),
99
+ false, // intercepting property for bundles is defined on pool
100
+ address(0),
101
+ owner,
102
+ abi.encode(bundleInfo)
103
+ )
104
+ );
105
+
106
+ // create bundle info in instance
107
+ instance.createBundle(bundleNftId, bundleInfo);
108
+
109
+ BundleManager bundleManager = instance.getBundleManager();
110
+ bundleManager.add(bundleNftId);
111
+
112
+ _processStakingByTreasury(
113
+ instanceReader,
114
+ poolNftId,
115
+ bundleNftId,
116
+ stakingAmount);
117
+
118
+ // TODO add logging
119
+ }
120
+
121
+ function setBundleFee(
122
+ NftId bundleNftId,
123
+ Fee memory fee
124
+ )
125
+ external
126
+ override
127
+ {
128
+ (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
129
+ InstanceReader instanceReader = instance.getInstanceReader();
130
+ NftId poolNftId = info.nftId;
131
+
132
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
133
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
134
+ require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
135
+
136
+ bundleInfo.fee = fee;
137
+
138
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
139
+ }
140
+
141
+ function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
142
+ external
143
+ onlyService
144
+ {
145
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
146
+ IInstance instance = IInstance(instanceInfo.objectAddress);
147
+ instance.updateBundle(bundleNftId, bundleInfo, state);
148
+ }
149
+
150
+ function lockBundle(NftId bundleNftId)
151
+ external
152
+ {
153
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
154
+ BundleManager bundleManager = instance.getBundleManager();
155
+ bundleManager.lock(bundleNftId);
156
+ }
157
+
158
+ function unlockBundle(NftId bundleNftId)
159
+ external
160
+ {
161
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
162
+ BundleManager bundleManager = instance.getBundleManager();
163
+ bundleManager.unlock(bundleNftId);
164
+ }
165
+
166
+ function lockCollateral(
167
+ IInstance instance,
168
+ NftId policyNftId,
169
+ NftId bundleNftId,
170
+ uint256 collateralAmount,
171
+ uint256 netPremiumAmount
172
+ )
173
+ external
174
+ onlyService
175
+ returns (
176
+ IBundle.BundleInfo memory bundleInfo
177
+ )
178
+ {
179
+ InstanceReader instanceReader = instance.getInstanceReader();
180
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
181
+
182
+ // TODO add validation
183
+
184
+ // lock collateral
185
+ bundleInfo.lockedAmount += collateralAmount;
186
+ bundleInfo.balanceAmount += netPremiumAmount;
187
+
188
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
189
+
190
+ linkPolicy(instance, policyNftId);
191
+ }
192
+
193
+ function increaseBalance(IInstance instance,
194
+ NftId bundleNftId,
195
+ uint256 amount
196
+ )
197
+ external
198
+ onlyService
199
+ {
200
+ InstanceReader instanceReader = instance.getInstanceReader();
201
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
202
+
203
+ bundleInfo.balanceAmount += amount;
204
+
205
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
206
+ }
207
+
208
+ function closePolicy(IInstance instance,
209
+ NftId policyNftId,
210
+ NftId bundleNftId,
211
+ uint256 collateralAmount
212
+ )
213
+ external
214
+ onlyService
215
+ {
216
+ InstanceReader instanceReader = instance.getInstanceReader();
217
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
218
+
219
+ // lock collateral
220
+ bundleInfo.lockedAmount -= collateralAmount;
221
+
222
+ instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
223
+
224
+ unlinkPolicy(instance, policyNftId);
225
+ }
226
+
227
+ /// @dev links policy to bundle
228
+ function linkPolicy(IInstance instance, NftId policyNftId)
229
+ internal
230
+ onlyService
231
+ {
232
+ InstanceReader instanceReader = instance.getInstanceReader();
233
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
234
+
235
+ // ensure policy has not yet been activated
236
+ if (policyInfo.activatedAt.gtz()) {
237
+ revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
238
+ }
239
+
240
+ BundleManager bundleManager = instance.getBundleManager();
241
+ bundleManager.linkPolicy(policyNftId);
242
+ }
243
+
244
+ /// @dev unlinks policy from bundle
245
+ function unlinkPolicy(IInstance instance, NftId policyNftId)
246
+ internal
247
+ onlyService
248
+ {
249
+ InstanceReader instanceReader = instance.getInstanceReader();
250
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
251
+
252
+ // ensure policy has no open claims
253
+ if (policyInfo.openClaimsCount > 0) {
254
+ revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
255
+ policyNftId,
256
+ policyInfo.openClaimsCount);
257
+ }
258
+
259
+ // ensure policy is closeable
260
+ if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
261
+ && policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
262
+ {
263
+ revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
264
+ }
265
+
266
+ BundleManager bundleManager = instance.getBundleManager();
267
+ bundleManager.unlinkPolicy(policyNftId);
268
+ }
269
+
270
+ function _processStakingByTreasury(
271
+ InstanceReader instanceReader,
272
+ NftId poolNftId,
273
+ NftId bundleNftId,
274
+ uint256 stakingAmount
275
+ )
276
+ internal
277
+ {
278
+ // process token transfer(s)
279
+ if(stakingAmount > 0) {
280
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
281
+ TokenHandler tokenHandler = poolInfo.tokenHandler;
282
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
283
+ Fee memory stakingFee = poolInfo.stakingFee;
284
+
285
+ tokenHandler.transfer(
286
+ bundleOwner,
287
+ poolInfo.wallet,
288
+ stakingAmount
289
+ );
290
+
291
+
292
+ if (! FeeLib.feeIsZero(stakingFee)) {
293
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
294
+ // TODO: track staking fees in pool's state (issue #177)
295
+ }
296
+ }
297
+ }
298
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {BundleService} from "./BundleService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {ObjectType, REGISTRY} from "../../types/ObjectType.sol";
10
+
11
+ contract BundleServiceManager is ProxyManager {
12
+
13
+ BundleService private _bundleService;
14
+
15
+ /// @dev initializes proxy manager with pool service implementation
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager()
20
+ {
21
+ BundleService bundleSrv = new BundleService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(bundleSrv),
25
+ data);
26
+
27
+ _bundleService = BundleService(address(versionable));
28
+
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _bundleService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
+ //registryService.registerService(_poolService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_poolService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getBundleService()
44
+ external
45
+ view
46
+ returns (BundleService)
47
+ {
48
+ return _bundleService;
49
+ }
50
+
51
+ }