@etherisc/gif-next 0.0.2-f7be756-963 → 0.0.2-f7eda15-119

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 (408) hide show
  1. package/README.md +331 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +491 -40
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +849 -0
  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} +244 -241
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +648 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +769 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +748 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +760 -118
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +738 -135
  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 +1310 -809
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +586 -0
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +2242 -908
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1034 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1381 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1024 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +473 -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 +603 -0
  66. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  68. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  70. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  72. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  74. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  78. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  80. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  82. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  84. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  86. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  88. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1102 -0
  90. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +772 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
  96. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +715 -0
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +441 -0
  100. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
  102. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +494 -0
  104. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +531 -0
  106. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
  108. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +806 -0
  112. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
  114. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +856 -0
  116. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
  118. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +567 -31
  122. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +981 -0
  124. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  126. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/Registry.sol/Registry.json +644 -74
  128. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  129. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  130. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1200 -0
  132. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +464 -0
  134. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  135. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  136. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  137. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -0
  138. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  139. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  140. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  141. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  142. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  144. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +196 -0
  146. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  147. package/artifacts/contracts/shared/IService.sol/IService.json +416 -0
  148. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +171 -0
  152. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  153. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +362 -0
  154. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +282 -0
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/shared/Service.sol/Service.json +476 -0
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  159. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +313 -0
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  170. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestService.sol/TestService.json +608 -0
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  179. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  181. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  182. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  210. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  212. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  216. package/contracts/components/Component.sol +186 -47
  217. package/contracts/components/Distribution.sol +150 -0
  218. package/contracts/components/IComponent.sol +43 -0
  219. package/contracts/components/IDistributionComponent.sol +47 -0
  220. package/contracts/components/IPoolComponent.sol +60 -0
  221. package/contracts/components/IProductComponent.sol +39 -0
  222. package/contracts/components/Pool.sol +200 -25
  223. package/contracts/components/Product.sol +222 -46
  224. package/contracts/experiment/cloning/Cloner.sol +47 -0
  225. package/contracts/instance/BundleManager.sol +125 -0
  226. package/contracts/instance/Cloneable.sol +46 -0
  227. package/contracts/instance/IInstance.sol +71 -24
  228. package/contracts/instance/IInstanceService.sol +41 -0
  229. package/contracts/instance/Instance.sol +248 -51
  230. package/contracts/instance/InstanceAccessManager.sol +298 -0
  231. package/contracts/instance/InstanceReader.sol +293 -0
  232. package/contracts/instance/InstanceService.sol +435 -0
  233. package/contracts/instance/InstanceServiceManager.sol +54 -0
  234. package/contracts/instance/ObjectManager.sol +84 -0
  235. package/contracts/instance/base/ComponentService.sol +134 -0
  236. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  237. package/contracts/instance/base/ILifecycle.sol +30 -0
  238. package/contracts/instance/base/KeyValueStore.sol +172 -0
  239. package/contracts/instance/base/Lifecycle.sol +100 -0
  240. package/contracts/instance/module/IAccess.sol +48 -0
  241. package/contracts/instance/module/IBundle.sol +20 -0
  242. package/contracts/instance/module/IDistribution.sol +39 -0
  243. package/contracts/instance/module/IPolicy.sol +45 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/BundleService.sol +293 -0
  248. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  249. package/contracts/instance/service/DistributionService.sol +106 -0
  250. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  251. package/contracts/instance/service/IBundleService.sol +44 -0
  252. package/contracts/instance/service/IDistributionService.sol +12 -0
  253. package/contracts/instance/service/IPolicyService.sol +94 -0
  254. package/contracts/instance/service/IPoolService.sol +20 -0
  255. package/contracts/instance/service/IProductService.sol +40 -0
  256. package/contracts/instance/service/PolicyService.sol +538 -0
  257. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  258. package/contracts/instance/service/PoolService.sol +110 -0
  259. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  260. package/contracts/instance/service/ProductService.sol +234 -0
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +129 -62
  263. package/contracts/registry/IRegistry.sol +72 -41
  264. package/contracts/registry/IRegistryService.sol +65 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +401 -131
  267. package/contracts/registry/RegistryAccessManager.sol +216 -0
  268. package/contracts/registry/RegistryService.sol +262 -0
  269. package/contracts/registry/RegistryServiceManager.sol +62 -0
  270. package/contracts/registry/ReleaseManager.sol +332 -0
  271. package/contracts/registry/TokenRegistry.sol +112 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +25 -0
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +15 -0
  276. package/contracts/shared/IService.sol +16 -0
  277. package/contracts/shared/IVersionable.sol +96 -0
  278. package/contracts/shared/NftOwnable.sol +139 -0
  279. package/contracts/shared/ProxyManager.sol +94 -0
  280. package/contracts/shared/Registerable.sol +86 -0
  281. package/contracts/shared/Service.sol +60 -0
  282. package/contracts/shared/TokenHandler.sol +27 -0
  283. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  284. package/contracts/shared/Versionable.sol +147 -0
  285. package/contracts/test/TestFee.sol +25 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +25 -0
  289. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  290. package/contracts/test/TestVersion.sol +44 -0
  291. package/contracts/test/TestVersionable.sol +17 -0
  292. package/contracts/{mock → test}/Usdc.sol +1 -1
  293. package/contracts/types/AddressSet.sol +58 -0
  294. package/contracts/types/DistributorType.sol +55 -0
  295. package/contracts/types/Fee.sol +44 -20
  296. package/contracts/types/Key32.sol +50 -0
  297. package/contracts/types/NftId.sol +22 -1
  298. package/contracts/types/NftIdSet.sol +62 -0
  299. package/contracts/types/NumberId.sol +52 -0
  300. package/contracts/types/ObjectType.sol +60 -15
  301. package/contracts/types/Referral.sol +85 -0
  302. package/contracts/types/RiskId.sol +43 -0
  303. package/contracts/types/RoleId.sol +90 -0
  304. package/contracts/types/StateId.sol +18 -4
  305. package/contracts/types/Timestamp.sol +29 -4
  306. package/contracts/types/UFixed.sol +138 -23
  307. package/contracts/types/Version.sol +107 -0
  308. package/package.json +11 -5
  309. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  310. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  311. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  313. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  314. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  315. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  320. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  321. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  322. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  324. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  326. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  330. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  331. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  333. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  334. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  335. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  336. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  337. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  338. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  339. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  340. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  342. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  343. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  345. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  347. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  348. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  349. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  350. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  352. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  354. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  356. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  358. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  359. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  360. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  361. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  362. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  363. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  364. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  365. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  367. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  368. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  369. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  370. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  371. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  372. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  373. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  374. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  375. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  376. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  377. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  378. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  379. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  380. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  381. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  382. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  383. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  384. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  385. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  386. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  387. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  388. package/contracts/components/IPool.sol +0 -15
  389. package/contracts/components/IProduct.sol +0 -16
  390. package/contracts/experiment/statemachine/README.md +0 -112
  391. package/contracts/instance/access/Access.sol +0 -165
  392. package/contracts/instance/access/IAccess.sol +0 -63
  393. package/contracts/instance/component/ComponentModule.sol +0 -274
  394. package/contracts/instance/component/IComponent.sol +0 -74
  395. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  396. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  397. package/contracts/instance/policy/IPolicy.sol +0 -50
  398. package/contracts/instance/policy/PolicyModule.sol +0 -114
  399. package/contracts/instance/pool/IPoolModule.sol +0 -23
  400. package/contracts/instance/pool/PoolModule.sol +0 -81
  401. package/contracts/instance/product/IProductService.sol +0 -36
  402. package/contracts/instance/product/ProductService.sol +0 -136
  403. package/contracts/instance/treasury/ITreasury.sol +0 -91
  404. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  405. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  406. package/contracts/mock/TestPool.sol +0 -16
  407. package/contracts/mock/TestProduct.sol +0 -39
  408. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,94 @@
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 "../../shared/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+ import {UFixed} from "../../types/UFixed.sol";
13
+ import {Fee} from "../../types/Fee.sol";
14
+
15
+ interface IPolicyService is IService {
16
+
17
+ error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
18
+ error ErrorIPolicyServicePremiumAlreadyPaid(NftId policyNftId, uint256 premiumPaidAmount);
19
+ error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
20
+ error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
21
+ error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
22
+ error ErrorIPolicyServicePremiumNotFullyPaid(NftId policyNftId, uint256 premiumAmount, uint256 premiumPaidAmount);
23
+ error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
24
+ error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
25
+
26
+ function calculatePremium(
27
+ RiskId riskId,
28
+ uint256 sumInsuredAmount,
29
+ uint256 lifetime,
30
+ bytes memory applicationData,
31
+ NftId bundleNftId,
32
+ ReferralId referralId
33
+ )
34
+ external
35
+ view
36
+ returns (
37
+ uint256 premiumAmount,
38
+ uint256 productFeeAmount,
39
+ uint256 poolFeeAmount,
40
+ uint256 bundleFeeAmount,
41
+ uint256 distributionFeeAmount
42
+ );
43
+
44
+
45
+ function createApplication(
46
+ address applicationOwner,
47
+ RiskId riskId,
48
+ uint256 sumInsuredAmount,
49
+ uint256 lifetime,
50
+ bytes memory applicationData,
51
+ NftId bundleNftId,
52
+ ReferralId referralId
53
+ ) external returns (NftId nftId);
54
+
55
+ /**
56
+ * @dev revokes the application represented by {policyNftId}.
57
+ * an application can only be revoked in applied state.
58
+ * only the application holder may revoke an application.
59
+ */
60
+ function revoke(NftId policyNftId) external;
61
+
62
+ /**
63
+ * @dev underwrites the policy represented by {policyNftId}.
64
+ * optionally collects premiums and activates the policy.
65
+ * - premium payment is only attempted if requirePremiumPayment is set to true
66
+ * - activation is only done if activateAt is a non-zero timestamp
67
+ */
68
+ function underwrite(
69
+ NftId policyNftId,
70
+ bool requirePremiumPayment,
71
+ Timestamp activateAt
72
+ ) external;
73
+
74
+ // function decline(uint256 nftId) external;
75
+ // function expire(uint256 nftId) external;
76
+
77
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
78
+
79
+ function activate(NftId policyNftId, Timestamp activateAt) external;
80
+
81
+
82
+ function close(NftId nftId) external;
83
+
84
+ // function createClaim(uint256 nftId, uint256 claimAmount) external;
85
+ // function confirmClaim(uint256 nftId, uint256 claimId, uint256 claimAmount) external;
86
+ // function declineClaim(uint256 nftId, uint256 claimId) external;
87
+ // function closeClaim(uint256 nftId, uint256 claimId) external; // TODO payoutClaim() -> implicit close when payed out in full
88
+
89
+ function calculateRequiredCollateral(
90
+ UFixed collateralizationLevel,
91
+ uint256 sumInsuredAmount
92
+ ) external pure returns(uint256 collateralAmount);
93
+
94
+ }
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {StateId} from "../../types/StateId.sol";
7
+ import {IService} from "../../shared/IService.sol";
8
+ import {IBundle} from "../module/IBundle.sol";
9
+ import {IInstance} from "../../instance/IInstance.sol";
10
+
11
+ interface IPoolService is IService {
12
+
13
+ function register(address poolAddress) external returns(NftId);
14
+
15
+ function setFees(
16
+ Fee memory poolFee,
17
+ Fee memory stakingFee,
18
+ Fee memory performanceFee
19
+ ) external;
20
+ }
@@ -0,0 +1,40 @@
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 "../../shared/IService.sol";
6
+
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
11
+ import {Timestamp} from "../../types/Timestamp.sol";
12
+ import {UFixed} from "../../types/UFixed.sol";
13
+ import {Fee} from "../../types/Fee.sol";
14
+
15
+ interface IProductService is IService {
16
+
17
+ function register(address productAddress) external returns(NftId);
18
+
19
+ function setFees(
20
+ Fee memory productFee,
21
+ Fee memory processingFee
22
+ ) external;
23
+
24
+ function createRisk(
25
+ RiskId riskId,
26
+ bytes memory data
27
+ ) external;
28
+
29
+
30
+ function updateRisk(
31
+ RiskId riskId,
32
+ bytes memory data
33
+ ) external;
34
+
35
+
36
+ function updateRiskState(
37
+ RiskId riskId,
38
+ StateId newState
39
+ ) external;
40
+ }
@@ -0,0 +1,538 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
7
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
8
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
9
+ import {IInstance} from "../IInstance.sol";
10
+ import {IPolicy} from "../module/IPolicy.sol";
11
+ import {IRisk} from "../module/IRisk.sol";
12
+ import {IBundle} from "../module/IBundle.sol";
13
+ import {IProductService} from "./IProductService.sol";
14
+ import {ITreasury} from "../module/ITreasury.sol";
15
+ import {ISetup} from "../module/ISetup.sol";
16
+
17
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
18
+
19
+ import {IVersionable} from "../../shared/IVersionable.sol";
20
+ import {Versionable} from "../../shared/Versionable.sol";
21
+
22
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
24
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
25
+ import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
26
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
27
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
28
+ import {Fee, FeeLib} from "../../types/Fee.sol";
29
+ import {ReferralId} from "../../types/Referral.sol";
30
+ import {RiskId} from "../../types/RiskId.sol";
31
+ import {StateId} from "../../types/StateId.sol";
32
+ import {Version, VersionLib} from "../../types/Version.sol";
33
+ //import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
34
+
35
+ import {IService} from "../../shared/IService.sol";
36
+ import {Service} from "../../shared/Service.sol";
37
+ import {ComponentService} from "../base/ComponentService.sol";
38
+ import {IPolicyService} from "./IPolicyService.sol";
39
+ import {InstanceReader} from "../InstanceReader.sol";
40
+ import {IPoolService} from "./IPoolService.sol";
41
+ import {IBundleService} from "./IBundleService.sol";
42
+
43
+
44
+ contract PolicyService is ComponentService, IPolicyService {
45
+ using NftIdLib for NftId;
46
+ using TimestampLib for Timestamp;
47
+
48
+ IPoolService internal _poolService;
49
+ IBundleService internal _bundleService;
50
+
51
+ event LogProductServiceSender(address sender);
52
+
53
+ function _initialize(
54
+ address owner,
55
+ bytes memory data
56
+ )
57
+ internal
58
+ initializer
59
+ virtual override
60
+ {
61
+ address registryAddress;
62
+ address initialOwner;
63
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
64
+
65
+ _initializeService(registryAddress, owner);
66
+
67
+ _poolService = IPoolService(_registry.getServiceAddress(POOL(), getMajorVersion()));
68
+ _bundleService = IBundleService(_registry.getServiceAddress(BUNDLE(), getMajorVersion()));
69
+
70
+ _registerInterface(type(IPolicyService).interfaceId);
71
+ }
72
+
73
+
74
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
75
+ return POLICY();
76
+ }
77
+
78
+
79
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
80
+ IRegistry.ObjectInfo memory productInfo;
81
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
82
+ product = Product(productInfo.objectAddress);
83
+ }
84
+ // TODO: no access restrictions
85
+ function calculatePremium(
86
+ RiskId riskId,
87
+ uint256 sumInsuredAmount,
88
+ uint256 lifetime,
89
+ bytes memory applicationData,
90
+ NftId bundleNftId,
91
+ ReferralId referralId
92
+ )
93
+ public
94
+ view
95
+ override
96
+ returns (
97
+ uint256 premiumAmount,
98
+ uint256 productFeeAmount,
99
+ uint256 poolFeeAmount,
100
+ uint256 bundleFeeAmount,
101
+ uint256 distributionFeeAmount
102
+ )
103
+ {
104
+ Product product = _getAndVerifyInstanceAndProduct();
105
+ uint256 netPremiumAmount = product.calculateNetPremium(
106
+ sumInsuredAmount,
107
+ riskId,
108
+ lifetime,
109
+ applicationData
110
+ );
111
+
112
+ (
113
+ productFeeAmount,
114
+ poolFeeAmount,
115
+ bundleFeeAmount,
116
+ distributionFeeAmount
117
+ ) = _calculateFeeAmounts(
118
+ netPremiumAmount,
119
+ product,
120
+ bundleNftId,
121
+ referralId
122
+ );
123
+
124
+ premiumAmount = netPremiumAmount + productFeeAmount;
125
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
126
+ premiumAmount += distributionFeeAmount;
127
+ }
128
+
129
+ function _calculateFeeAmounts(
130
+ uint256 netPremiumAmount,
131
+ Product product,
132
+ NftId bundleNftId,
133
+ ReferralId referralId
134
+ )
135
+ internal
136
+ view
137
+ returns (
138
+ uint256 productFeeAmount,
139
+ uint256 poolFeeAmount,
140
+ uint256 bundleFeeAmount,
141
+ uint256 distributionFeeAmount
142
+ )
143
+ {
144
+ InstanceReader instanceReader;
145
+ {
146
+ IInstance instance = product.getInstance();
147
+ instanceReader = instance.getInstanceReader();
148
+ }
149
+
150
+ NftId poolNftId = product.getPoolNftId();
151
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
152
+ require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
153
+
154
+ {
155
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
156
+ (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
157
+ }
158
+ {
159
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
160
+ (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
161
+ }
162
+ {
163
+ NftId distributionNftId = product.getDistributionNftId();
164
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
165
+ (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
166
+ }
167
+
168
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
169
+ }
170
+
171
+
172
+ function createApplication(
173
+ address applicationOwner,
174
+ RiskId riskId,
175
+ uint256 sumInsuredAmount,
176
+ uint256 lifetime,
177
+ bytes memory applicationData,
178
+ NftId bundleNftId,
179
+ ReferralId referralId
180
+ ) external override returns (NftId policyNftId) {
181
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
182
+ // TODO: add validations (see create bundle in pool service)
183
+
184
+ policyNftId = getRegistryService().registerPolicy(
185
+ IRegistry.ObjectInfo(
186
+ zeroNftId(),
187
+ productInfo.nftId,
188
+ POLICY(),
189
+ false, // intercepting property for policies is defined on product
190
+ address(0),
191
+ applicationOwner,
192
+ ""
193
+ )
194
+ );
195
+
196
+ (uint256 premiumAmount,,,,) = calculatePremium(
197
+ riskId,
198
+ sumInsuredAmount,
199
+ lifetime,
200
+ applicationData,
201
+ bundleNftId,
202
+ referralId
203
+ );
204
+
205
+ IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
206
+ productInfo.nftId,
207
+ bundleNftId,
208
+ referralId,
209
+ riskId,
210
+ sumInsuredAmount,
211
+ premiumAmount,
212
+ 0,
213
+ lifetime,
214
+ applicationData,
215
+ "",
216
+ 0,
217
+ 0,
218
+ 0,
219
+ zeroTimestamp(),
220
+ zeroTimestamp(),
221
+ zeroTimestamp()
222
+ );
223
+
224
+ instance.createPolicy(policyNftId, policyInfo);
225
+ instance.updatePolicyState(policyNftId, APPLIED());
226
+
227
+ // TODO: add logging
228
+ }
229
+
230
+ function _getAndVerifyUnderwritingSetup(
231
+ IInstance instance,
232
+ InstanceReader instanceReader,
233
+ IPolicy.PolicyInfo memory policyInfo,
234
+ ISetup.ProductSetupInfo memory productSetupInfo
235
+ )
236
+ internal
237
+ view
238
+ returns (
239
+ NftId bundleNftId,
240
+ IBundle.BundleInfo memory bundleInfo,
241
+ uint256 collateralAmount
242
+ )
243
+ {
244
+ // check match between policy and bundle (via pool)
245
+ bundleNftId = policyInfo.bundleNftId;
246
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
247
+ require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
248
+
249
+ // calculate required collateral
250
+ NftId poolNftId = productSetupInfo.poolNftId;
251
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
252
+
253
+ // obtain remaining return values
254
+ collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
255
+ }
256
+
257
+ function _lockCollateralInBundle(
258
+ IInstance instance,
259
+ NftId bundleNftId,
260
+ IBundle.BundleInfo memory bundleInfo,
261
+ NftId policyNftId,
262
+ uint256 collateralAmount
263
+ )
264
+ internal
265
+ returns (IBundle.BundleInfo memory)
266
+ {
267
+ bundleInfo.lockedAmount += collateralAmount;
268
+ // TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
269
+ return bundleInfo;
270
+ }
271
+
272
+ function _underwriteByPool(
273
+ NftId poolNftId,
274
+ NftId policyNftId,
275
+ IPolicy.PolicyInfo memory policyInfo,
276
+ bytes memory bundleFilter,
277
+ uint256 collateralAmount
278
+ )
279
+ internal
280
+ {
281
+ address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
282
+ IPoolComponent pool = IPoolComponent(poolAddress);
283
+ pool.underwrite(
284
+ policyNftId,
285
+ policyInfo.applicationData,
286
+ bundleFilter,
287
+ collateralAmount);
288
+ }
289
+
290
+
291
+ function revoke(
292
+ NftId policyNftId
293
+ )
294
+ external
295
+ override
296
+ {
297
+ require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
298
+ }
299
+
300
+
301
+ function underwrite(
302
+ NftId policyNftId,
303
+ bool requirePremiumPayment,
304
+ Timestamp activateAt
305
+ )
306
+ external
307
+ override
308
+ {
309
+ // check caller is registered product
310
+ (
311
+ IRegistry.ObjectInfo memory productInfo,
312
+ IInstance instance
313
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
314
+ InstanceReader instanceReader = instance.getInstanceReader();
315
+
316
+ // check match between policy and calling product
317
+ NftId productNftId = productInfo.nftId;
318
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
319
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
320
+ require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
321
+
322
+ NftId bundleNftId;
323
+ IBundle.BundleInfo memory bundleInfo;
324
+ uint256 collateralAmount;
325
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
326
+ {
327
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
328
+ IBundle.BundleInfo memory bundleInfo;
329
+
330
+ (
331
+ bundleNftId,
332
+ bundleInfo,
333
+ collateralAmount
334
+ ) = _getAndVerifyUnderwritingSetup(
335
+ instance,
336
+ instanceReader,
337
+ policyInfo,
338
+ productSetupInfo
339
+ );
340
+ }
341
+
342
+ // lock bundle collateral
343
+ bundleInfo = _lockCollateralInBundle(
344
+ instance,
345
+ bundleNftId,
346
+ bundleInfo,
347
+ policyNftId,
348
+ collateralAmount);
349
+ StateId newPolicyState = UNDERWRITTEN();
350
+
351
+ // optional activation of policy
352
+ if(activateAt > zeroTimestamp()) {
353
+ newPolicyState = ACTIVE();
354
+ policyInfo.activatedAt = activateAt;
355
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
356
+ }
357
+
358
+ // optional collection of premium
359
+ if(requirePremiumPayment) {
360
+ netPremiumAmount = _processPremiumByTreasury(
361
+ instance,
362
+ productInfo.nftId,
363
+ policyNftId,
364
+ policyInfo.premiumAmount);
365
+
366
+ policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
367
+ }
368
+
369
+ _bundleService.underwritePolicy(instance, policyNftId, bundleNftId, collateralAmount, netPremiumAmount);
370
+ instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
371
+
372
+ // involve pool if necessary
373
+ {
374
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
375
+
376
+ if(poolInfo.isConfirmingApplication) {
377
+ _underwriteByPool(
378
+ bundleInfo.poolNftId,
379
+ policyNftId,
380
+ policyInfo,
381
+ bundleInfo.filter,
382
+ collateralAmount
383
+ );
384
+ }
385
+ }
386
+
387
+ // TODO: add logging
388
+ }
389
+
390
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
391
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
392
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
393
+ return collateralUFixed.toInt();
394
+ }
395
+
396
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
397
+ // check caller is registered product
398
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
399
+ InstanceReader instanceReader = instance.getInstanceReader();
400
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
401
+
402
+ if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
403
+ revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
404
+ }
405
+
406
+ uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
407
+
408
+ uint256 netPremiumAmount = _processPremiumByTreasury(
409
+ instance,
410
+ productInfo.nftId,
411
+ policyNftId,
412
+ unpaidPremiumAmount);
413
+
414
+ policyInfo.premiumPaidAmount += unpaidPremiumAmount;
415
+
416
+ _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
417
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
418
+
419
+ if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
420
+ activate(policyNftId, activateAt);
421
+ }
422
+
423
+ // TODO: add logging
424
+ }
425
+
426
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
427
+ // check caller is registered product
428
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
429
+ InstanceReader instanceReader = instance.getInstanceReader();
430
+
431
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
432
+
433
+ require(
434
+ policyInfo.activatedAt.eqz(),
435
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
436
+
437
+ policyInfo.activatedAt = activateAt;
438
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
439
+
440
+ instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
441
+
442
+ // TODO: add logging
443
+ }
444
+
445
+ function close(
446
+ NftId policyNftId
447
+ ) external override // solhint-disable-next-line no-empty-blocks
448
+ {
449
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
450
+ InstanceReader instanceReader = instance.getInstanceReader();
451
+
452
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
453
+
454
+ if (policyInfo.activatedAt.eqz()) {
455
+ revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
456
+ }
457
+
458
+ StateId state = instanceReader.getPolicyState(policyNftId);
459
+ if (state != ACTIVE()) {
460
+ revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
461
+ }
462
+
463
+ if (policyInfo.closedAt.gtz()) {
464
+ revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
465
+ }
466
+
467
+ if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
468
+ revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
469
+ }
470
+
471
+ if (policyInfo.openClaimsCount > 0) {
472
+ revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
473
+ }
474
+
475
+ if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
476
+ revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
477
+ }
478
+
479
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
480
+
481
+ _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
482
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
483
+ }
484
+
485
+ function _getPoolNftId(
486
+ IInstance instance,
487
+ NftId productNftId
488
+ )
489
+ internal
490
+ view
491
+ returns (NftId poolNftid)
492
+ {
493
+ InstanceReader instanceReader = instance.getInstanceReader();
494
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
495
+ return productSetupInfo.poolNftId;
496
+ }
497
+
498
+
499
+ function _processPremiumByTreasury(
500
+ IInstance instance,
501
+ NftId productNftId,
502
+ NftId policyNftId,
503
+ uint256 premiumAmount
504
+ )
505
+ internal
506
+ returns (uint256 netPremiumAmount)
507
+ {
508
+ // process token transfer(s)
509
+ if(premiumAmount > 0) {
510
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
511
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
512
+ address policyOwner = getRegistry().ownerOf(policyNftId);
513
+ ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
514
+ address poolWallet = poolSetupInfo.wallet;
515
+ netPremiumAmount = premiumAmount;
516
+ Fee memory productFee = productSetupInfo.productFee;
517
+
518
+ if (FeeLib.feeIsZero(productFee)) {
519
+ tokenHandler.transfer(
520
+ policyOwner,
521
+ poolWallet,
522
+ premiumAmount
523
+ );
524
+ } else {
525
+ (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
526
+ address productWallet = productSetupInfo.wallet;
527
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
528
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
529
+ }
530
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
531
+ tokenHandler.transfer(policyOwner, poolWallet, netAmount);
532
+ netPremiumAmount = netAmount;
533
+ }
534
+ }
535
+
536
+ // TODO: add logging
537
+ }
538
+ }