@etherisc/gif-next 0.0.2-f74fcad-685 → 0.0.2-f7b8c9f-436

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 (392) hide show
  1. package/README.md +160 -6
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +152 -150
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +557 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +115 -116
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +177 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +308 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +207 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +471 -83
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +345 -77
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  36. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1430 -660
  40. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +1759 -801
  44. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  46. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  48. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  50. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  51. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  52. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/IService.sol/IService.json +421 -0
  54. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +544 -0
  56. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  58. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  60. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  62. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
  64. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
  65. package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
  66. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
  67. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
  68. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
  69. package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
  70. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  72. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  74. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  76. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPoolModule.json → module/component/ComponentModule.sol/ComponentModule.json} +49 -61
  78. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +51 -61
  82. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  84. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  86. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  88. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +136 -119
  92. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +137 -120
  94. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  96. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +164 -0
  98. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +66 -57
  100. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
  102. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  104. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  106. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  108. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +638 -0
  110. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  112. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +638 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +794 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  124. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  126. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +753 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1068 -0
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +194 -2
  132. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  134. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +408 -32
  136. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -0
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +637 -52
  142. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +997 -0
  144. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +468 -0
  146. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  148. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  150. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  152. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  153. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  154. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  156. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  158. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  160. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  162. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  166. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  168. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  170. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestPool.sol/TestPool.json +716 -0
  172. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +744 -0
  174. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  176. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  178. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestService.sol/TestService.json +584 -0
  180. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
  182. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  184. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  186. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  187. package/artifacts/contracts/{mock → test}/Usdc.sol/USDC.json +3 -3
  188. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  189. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  190. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  194. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  196. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  198. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  199. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  202. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  204. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  206. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  212. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  218. package/contracts/components/BaseComponent.sol +79 -0
  219. package/contracts/components/Distribution.sol +155 -0
  220. package/contracts/components/IBaseComponent.sol +19 -0
  221. package/contracts/components/IDistributionComponent.sol +46 -0
  222. package/contracts/components/IPoolComponent.sol +64 -0
  223. package/contracts/components/IProductComponent.sol +37 -0
  224. package/contracts/components/Pool.sol +218 -24
  225. package/contracts/components/Product.sol +248 -38
  226. package/contracts/instance/IInstance.sol +40 -11
  227. package/contracts/instance/IInstanceLinked.sol +8 -0
  228. package/contracts/instance/Instance.sol +60 -45
  229. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  230. package/contracts/instance/base/IInstanceBase.sol +23 -0
  231. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  232. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  233. package/contracts/instance/base/IService.sol +15 -0
  234. package/contracts/instance/base/InstanceBase.sol +89 -0
  235. package/contracts/instance/base/KeyValueStore.sol +161 -0
  236. package/contracts/instance/base/Lifecycle.sol +100 -0
  237. package/contracts/instance/base/ModuleBase.sol +57 -0
  238. package/contracts/instance/base/ServiceBase.sol +44 -0
  239. package/contracts/instance/module/access/Access.sol +149 -0
  240. package/contracts/instance/module/access/IAccess.sol +53 -0
  241. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  242. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  243. package/contracts/instance/module/component/ComponentModule.sol +71 -0
  244. package/contracts/instance/module/component/IComponent.sol +28 -0
  245. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  246. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  247. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  248. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  249. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  250. package/contracts/instance/module/pool/PoolModule.sol +95 -0
  251. package/contracts/instance/module/risk/IRisk.sol +26 -0
  252. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  253. package/contracts/instance/module/treasury/ITreasury.sol +84 -0
  254. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  255. package/contracts/instance/module/treasury/TreasuryModule.sol +131 -0
  256. package/contracts/instance/service/ComponentOwnerService.sol +275 -0
  257. package/contracts/instance/service/DistributionService.sol +54 -0
  258. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  259. package/contracts/instance/service/IDistributionService.sol +12 -0
  260. package/contracts/instance/service/IPoolService.sol +37 -0
  261. package/contracts/instance/service/IProductService.sol +107 -0
  262. package/contracts/instance/service/PoolService.sol +149 -0
  263. package/contracts/instance/service/ProductService.sol +510 -0
  264. package/contracts/registry/ChainNft.sol +94 -42
  265. package/contracts/registry/IChainNft.sol +3 -2
  266. package/contracts/registry/IRegistry.sol +50 -44
  267. package/contracts/registry/IRegistryService.sol +29 -0
  268. package/contracts/registry/ITransferInterceptor.sol +6 -0
  269. package/contracts/registry/Registry.sol +435 -126
  270. package/contracts/registry/RegistryService.sol +368 -0
  271. package/contracts/registry/RegistryServiceManager.sol +43 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +21 -0
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +17 -0
  276. package/contracts/shared/IVersionable.sol +96 -0
  277. package/contracts/shared/NftOwnable.sol +136 -0
  278. package/contracts/shared/ProxyManager.sol +94 -0
  279. package/contracts/shared/Registerable.sol +89 -0
  280. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  281. package/contracts/shared/Versionable.sol +147 -0
  282. package/contracts/test/TestDistribution.sol +22 -0
  283. package/contracts/test/TestFee.sol +25 -0
  284. package/contracts/test/TestPool.sol +27 -0
  285. package/contracts/test/TestProduct.sol +74 -0
  286. package/contracts/test/TestRegisterable.sol +18 -0
  287. package/contracts/test/TestRoleId.sol +14 -0
  288. package/contracts/test/TestService.sol +26 -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/Fee.sol +44 -20
  295. package/contracts/types/Key32.sol +45 -0
  296. package/contracts/types/NftId.sol +22 -1
  297. package/contracts/types/NftIdSet.sol +60 -0
  298. package/contracts/types/ObjectType.sol +37 -13
  299. package/contracts/types/ReferralId.sol +48 -0
  300. package/contracts/types/RiskId.sol +43 -0
  301. package/contracts/types/RoleId.sol +38 -0
  302. package/contracts/types/StateId.sol +13 -3
  303. package/contracts/types/Timestamp.sol +22 -1
  304. package/contracts/types/UFixed.sol +12 -13
  305. package/contracts/types/Version.sol +104 -0
  306. package/package.json +8 -3
  307. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  308. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  309. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  310. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  311. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  313. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  322. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  330. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  331. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  332. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  333. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  336. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  337. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  349. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  352. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  354. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  356. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  357. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  358. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  359. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  360. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  361. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  362. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  363. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  364. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  365. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  367. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  369. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  370. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  371. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  372. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  373. package/contracts/components/Component.sol +0 -77
  374. package/contracts/components/IPool.sol +0 -15
  375. package/contracts/components/IProduct.sol +0 -16
  376. package/contracts/experiment/statemachine/README.md +0 -112
  377. package/contracts/instance/access/Access.sol +0 -165
  378. package/contracts/instance/access/IAccess.sol +0 -63
  379. package/contracts/instance/component/ComponentModule.sol +0 -274
  380. package/contracts/instance/component/IComponent.sol +0 -74
  381. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  382. package/contracts/instance/policy/IPolicy.sol +0 -50
  383. package/contracts/instance/policy/PolicyModule.sol +0 -114
  384. package/contracts/instance/pool/IPoolModule.sol +0 -23
  385. package/contracts/instance/pool/PoolModule.sol +0 -81
  386. package/contracts/instance/product/IProductService.sol +0 -36
  387. package/contracts/instance/product/ProductService.sol +0 -136
  388. package/contracts/instance/treasury/ITreasury.sol +0 -91
  389. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  390. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  391. package/contracts/mock/TestPool.sol +0 -16
  392. package/contracts/mock/TestProduct.sol +0 -39
@@ -0,0 +1,510 @@
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 "../../instance/IInstance.sol";
10
+ import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
11
+ import {IPool} from "../module/pool/IPoolModule.sol";
12
+ import {IRisk} from "../module/risk/IRisk.sol";
13
+ import {IBundle} from "../module/bundle/IBundle.sol";
14
+ import {IProductService} from "./IProductService.sol";
15
+ import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
16
+
17
+ import {IVersionable} from "../../shared/IVersionable.sol";
18
+ import {Versionable} from "../../shared/Versionable.sol";
19
+
20
+ import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
21
+ import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
22
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
23
+ import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
24
+ import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
25
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
26
+ import {Fee, FeeLib} from "../../types/Fee.sol";
27
+ import {ReferralId} from "../../types/ReferralId.sol";
28
+ import {RiskId} from "../../types/RiskId.sol";
29
+ import {StateId} from "../../types/StateId.sol";
30
+ import {Version, VersionLib} from "../../types/Version.sol";
31
+
32
+ import {IService} from "../base/IService.sol";
33
+ import {ServiceBase} from "../base/ServiceBase.sol";
34
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
35
+ import {IProductService} from "./IProductService.sol";
36
+
37
+ // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
38
+ contract ProductService is ComponentServiceBase, IProductService {
39
+ using NftIdLib for NftId;
40
+
41
+ string public constant NAME = "ProductService";
42
+
43
+ event LogProductServiceSender(address sender);
44
+
45
+ constructor(
46
+ address registry,
47
+ NftId registryNftId,
48
+ address initialOwner
49
+ ) ComponentServiceBase(registry, registryNftId, initialOwner)
50
+ {
51
+ _registerInterface(type(IProductService).interfaceId);
52
+ }
53
+
54
+
55
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
56
+ return NAME;
57
+ }
58
+
59
+ function setFees(
60
+ Fee memory productFee,
61
+ Fee memory processingFee
62
+ )
63
+ external
64
+ override
65
+ {
66
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
67
+ NftId productNftId = productInfo.nftId;
68
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
69
+ treasuryInfo.productFee = productFee;
70
+ treasuryInfo.processingFee = processingFee;
71
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
72
+ }
73
+
74
+ function createRisk(
75
+ RiskId riskId,
76
+ bytes memory data
77
+ ) external override {
78
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
79
+ NftId productNftId = productInfo.nftId;
80
+ instance.createRisk(
81
+ riskId,
82
+ productNftId,
83
+ data
84
+ );
85
+ }
86
+
87
+ function setRiskInfo(
88
+ RiskId riskId,
89
+ IRisk.RiskInfo memory info
90
+ ) external {
91
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
92
+ instance.setRiskInfo(
93
+ riskId,
94
+ info
95
+ );
96
+ }
97
+
98
+ function updateRiskState(
99
+ RiskId riskId,
100
+ StateId state
101
+ ) external {
102
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
103
+ instance.updateRiskState(
104
+ riskId,
105
+ state
106
+ );
107
+ }
108
+
109
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
110
+ IRegistry.ObjectInfo memory productInfo;
111
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
112
+ product = Product(productInfo.objectAddress);
113
+ }
114
+
115
+ function calculatePremium(
116
+ RiskId riskId,
117
+ uint256 sumInsuredAmount,
118
+ uint256 lifetime,
119
+ bytes memory applicationData,
120
+ NftId bundleNftId,
121
+ ReferralId referralId
122
+ )
123
+ public
124
+ view
125
+ override
126
+ returns (
127
+ uint256 premiumAmount,
128
+ uint256 productFeeAmount,
129
+ uint256 poolFeeAmount,
130
+ uint256 bundleFeeAmount,
131
+ uint256 distributionFeeAmount
132
+ )
133
+ {
134
+ Product product = _getAndVerifyInstanceAndProduct();
135
+ uint256 netPremiumAmount = product.calculateNetPremium(
136
+ sumInsuredAmount,
137
+ riskId,
138
+ lifetime,
139
+ applicationData
140
+ );
141
+
142
+ (
143
+ productFeeAmount,
144
+ poolFeeAmount,
145
+ bundleFeeAmount,
146
+ distributionFeeAmount
147
+ ) = _calculateFeeAmounts(
148
+ netPremiumAmount,
149
+ product,
150
+ bundleNftId,
151
+ referralId
152
+ );
153
+
154
+ premiumAmount = netPremiumAmount + productFeeAmount;
155
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
156
+ premiumAmount += distributionFeeAmount;
157
+ }
158
+
159
+ function _calculateFeeAmounts(
160
+ uint256 netPremiumAmount,
161
+ Product product,
162
+ NftId bundleNftId,
163
+ ReferralId referralId
164
+ )
165
+ internal
166
+ view
167
+ returns (
168
+ uint256 productFeeAmount,
169
+ uint256 poolFeeAmount,
170
+ uint256 bundleFeeAmount,
171
+ uint256 distributionFeeAmount
172
+ )
173
+ {
174
+ IInstance instance = product.getInstance();
175
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(product.getNftId());
176
+ IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
177
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
178
+
179
+ (productFeeAmount,) = FeeLib.calculateFee(treasuryInfo.productFee, netPremiumAmount);
180
+ (poolFeeAmount,) = FeeLib.calculateFee(treasuryInfo.poolFee, netPremiumAmount);
181
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
182
+
183
+ IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(treasuryInfo.distributionNftId);
184
+ IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
185
+ distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
186
+ }
187
+
188
+
189
+ function createApplication(
190
+ address applicationOwner,
191
+ RiskId riskId,
192
+ uint256 sumInsuredAmount,
193
+ uint256 lifetime,
194
+ bytes memory applicationData,
195
+ NftId bundleNftId,
196
+ ReferralId referralId
197
+ ) external override returns (NftId policyNftId) {
198
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
199
+ // TODO add validations (see create bundle in pool service)
200
+
201
+ policyNftId = getRegistryService().registerPolicy(
202
+ IRegistry.ObjectInfo(
203
+ zeroNftId(),
204
+ productInfo.nftId,
205
+ POLICY(),
206
+ false, // intercepting property for policies is defined on product
207
+ address(0),
208
+ applicationOwner,
209
+ ""
210
+ )
211
+ );
212
+
213
+ (uint256 premiumAmount,,,,) = calculatePremium(
214
+ riskId,
215
+ sumInsuredAmount,
216
+ lifetime,
217
+ applicationData,
218
+ bundleNftId,
219
+ referralId
220
+ );
221
+
222
+ instance.createPolicyInfo(
223
+ policyNftId,
224
+ productInfo.nftId,
225
+ referralId,
226
+ riskId,
227
+ sumInsuredAmount,
228
+ premiumAmount,
229
+ lifetime,
230
+ bundleNftId
231
+ );
232
+
233
+ // TODO add logging
234
+ }
235
+
236
+ function _getAndVerifyUnderwritingSetup(
237
+ IInstance instance,
238
+ IPolicy.PolicyInfo memory policyInfo
239
+ )
240
+ internal
241
+ view
242
+ returns (
243
+ ITreasury.TreasuryInfo memory treasuryInfo,
244
+ NftId bundleNftId,
245
+ IBundle.BundleInfo memory bundleInfo,
246
+ uint256 collateralAmount
247
+ )
248
+ {
249
+ // check match between policy and bundle (via pool)
250
+ treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
251
+ bundleNftId = policyInfo.bundleNftId;
252
+ bundleInfo = instance.getBundleInfo(bundleNftId);
253
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
254
+
255
+ // calculate required collateral
256
+ NftId poolNftId = treasuryInfo.poolNftId;
257
+ IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
258
+
259
+ // obtain remaining return values
260
+ collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
261
+ }
262
+
263
+ function _lockCollateralInBundle(
264
+ IInstance instance,
265
+ NftId bundleNftId,
266
+ IBundle.BundleInfo memory bundleInfo,
267
+ NftId policyNftId,
268
+ uint256 collateralAmount
269
+ )
270
+ internal
271
+ returns (IBundle.BundleInfo memory)
272
+ {
273
+ bundleInfo.lockedAmount += collateralAmount;
274
+ instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
275
+ return bundleInfo;
276
+ }
277
+
278
+ function _underwriteByPool(
279
+ ITreasury.TreasuryInfo memory treasuryInfo,
280
+ NftId policyNftId,
281
+ IPolicy.PolicyInfo memory policyInfo,
282
+ bytes memory bundleFilter,
283
+ uint256 collateralAmount
284
+ )
285
+ internal
286
+ {
287
+ address poolAddress = getRegistry().getObjectInfo(treasuryInfo.poolNftId).objectAddress;
288
+ IPoolComponent pool = IPoolComponent(poolAddress);
289
+ pool.underwrite(
290
+ policyNftId,
291
+ policyInfo.applicationData,
292
+ bundleFilter,
293
+ collateralAmount);
294
+ }
295
+
296
+
297
+ function revoke(
298
+ NftId policyNftId
299
+ )
300
+ external
301
+ override
302
+ {
303
+ require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
304
+ }
305
+
306
+
307
+ function underwrite(
308
+ NftId policyNftId,
309
+ bool requirePremiumPayment,
310
+ Timestamp activateAt
311
+ )
312
+ external
313
+ override
314
+ {
315
+ // check caller is registered product
316
+ (
317
+ IRegistry.ObjectInfo memory productInfo,
318
+ IInstance instance
319
+ ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
320
+
321
+ // check match between policy and calling product
322
+ NftId productNftId = productInfo.nftId;
323
+ IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
324
+ require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
325
+ require(instance.getState(policyNftId.toKey32(POLICY())) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
326
+
327
+ ITreasury.TreasuryInfo memory treasuryInfo;
328
+ NftId bundleNftId;
329
+ IBundle.BundleInfo memory bundleInfo;
330
+ uint256 collateralAmount;
331
+
332
+ (
333
+ treasuryInfo,
334
+ bundleNftId,
335
+ bundleInfo,
336
+ collateralAmount
337
+ ) = _getAndVerifyUnderwritingSetup(
338
+ instance,
339
+ policyInfo
340
+ );
341
+
342
+ // lock bundle collateral
343
+ bundleInfo = _lockCollateralInBundle(
344
+ instance,
345
+ bundleNftId,
346
+ bundleInfo,
347
+ policyNftId,
348
+ collateralAmount);
349
+
350
+ // set policy state to underwritten
351
+ instance.updatePolicyState(policyNftId, UNDERWRITTEN());
352
+
353
+ // optional activation of policy
354
+ if(activateAt > zeroTimestamp()) {
355
+ policyInfo.activatedAt = activateAt;
356
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
357
+
358
+ instance.updatePolicyState(policyNftId, ACTIVE());
359
+ }
360
+
361
+ // optional collection of premium
362
+ if(requirePremiumPayment) {
363
+ uint256 netPremiumAmount = _processPremiumByTreasury(
364
+ instance,
365
+ productInfo.nftId,
366
+ treasuryInfo,
367
+ policyNftId,
368
+ policyInfo.premiumAmount);
369
+
370
+ policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
371
+ bundleInfo.balanceAmount += netPremiumAmount;
372
+ }
373
+
374
+ instance.setPolicyInfo(policyNftId, policyInfo);
375
+ instance.setBundleInfo(bundleNftId, bundleInfo);
376
+
377
+ // involve pool if necessary
378
+ {
379
+ NftId poolNftId = treasuryInfo.poolNftId;
380
+ IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
381
+
382
+ if(poolInfo.isVerifying) {
383
+ _underwriteByPool(
384
+ treasuryInfo,
385
+ policyNftId,
386
+ policyInfo,
387
+ bundleInfo.filter,
388
+ collateralAmount
389
+ );
390
+ }
391
+ }
392
+
393
+ // TODO add logging
394
+ }
395
+
396
+ function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
397
+ UFixed sumInsuredUFixed = UFixedMathLib.toUFixed(sumInsuredAmount);
398
+ UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
399
+ return collateralUFixed.toInt();
400
+ }
401
+
402
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
403
+ // check caller is registered product
404
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
405
+
406
+ // perform actual token transfers
407
+ IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
408
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
409
+
410
+ uint256 premiumAmount = policyInfo.premiumAmount;
411
+ _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
412
+
413
+ // policy level book keeping for premium paid
414
+ policyInfo.premiumPaidAmount += premiumAmount;
415
+
416
+ // optional activation of policy
417
+ if(activateAt > zeroTimestamp()) {
418
+ require(
419
+ policyInfo.activatedAt.eqz(),
420
+ "ERROR:PRS-030:ALREADY_ACTIVATED");
421
+
422
+ policyInfo.activatedAt = activateAt;
423
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
424
+
425
+ instance.updatePolicyState(policyNftId, ACTIVE());
426
+ }
427
+
428
+ instance.setPolicyInfo(policyNftId, policyInfo);
429
+
430
+ // TODO add logging
431
+ }
432
+
433
+ function activate(NftId policyNftId, Timestamp activateAt) external override {
434
+ // check caller is registered product
435
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
436
+
437
+ IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
438
+
439
+ require(
440
+ policyInfo.activatedAt.eqz(),
441
+ "ERROR:PRS-020:ALREADY_ACTIVATED");
442
+
443
+ policyInfo.activatedAt = activateAt;
444
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
445
+
446
+ instance.setPolicyInfo(policyNftId, policyInfo);
447
+ instance.updatePolicyState(policyNftId, ACTIVE());
448
+
449
+ // TODO add logging
450
+ }
451
+
452
+ function close(
453
+ NftId policyNftId
454
+ ) external override // solhint-disable-next-line no-empty-blocks
455
+ {
456
+
457
+ }
458
+
459
+ function _getPoolNftId(
460
+ IInstance instance,
461
+ NftId productNftId
462
+ )
463
+ internal
464
+ view
465
+ returns (NftId poolNftid)
466
+ {
467
+ return instance.getTreasuryInfo(productNftId).poolNftId;
468
+ }
469
+
470
+
471
+ function _processPremiumByTreasury(
472
+ IInstance instance,
473
+ NftId productNftId,
474
+ ITreasury.TreasuryInfo memory treasuryInfo,
475
+ NftId policyNftId,
476
+ uint256 premiumAmount
477
+ )
478
+ internal
479
+ returns (uint256 netPremiumAmount)
480
+ {
481
+ // process token transfer(s)
482
+ if(premiumAmount > 0) {
483
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
484
+ address policyOwner = getRegistry().ownerOf(policyNftId);
485
+ address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
486
+ netPremiumAmount = premiumAmount;
487
+ Fee memory productFee = treasuryInfo.productFee;
488
+
489
+ if (FeeLib.feeIsZero(productFee)) {
490
+ tokenHandler.transfer(
491
+ policyOwner,
492
+ poolWallet,
493
+ premiumAmount
494
+ );
495
+ } else {
496
+ (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
497
+ premiumAmount,
498
+ productFee
499
+ );
500
+
501
+ address productWallet = instance.getComponentWallet(productNftId);
502
+ tokenHandler.transfer(policyOwner, productWallet, feeAmount);
503
+ tokenHandler.transfer(policyOwner, poolWallet, netAmount);
504
+ netPremiumAmount = netAmount;
505
+ }
506
+ }
507
+
508
+ // TODO add logging
509
+ }
510
+ }