@etherisc/gif-next 0.0.2-af8c650-079 → 0.0.2-b060f43-287

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 (397) hide show
  1. package/README.md +242 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +90 -171
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +615 -63
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +620 -70
  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/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +889 -1208
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2472 -1202
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +572 -122
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +959 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  78. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  80. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  82. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  90. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  94. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  96. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  98. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +401 -65
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  104. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  106. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +204 -58
  108. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +401 -49
  110. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +334 -51
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  113. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +629 -51
  114. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  116. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  117. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +552 -78
  118. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
  124. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  125. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
  126. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  127. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  128. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -123
  130. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
  132. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  135. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  136. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  137. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  138. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  139. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  140. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  144. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  145. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +175 -54
  146. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  148. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  151. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  153. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  154. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +222 -54
  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 +1 -1
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  170. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  179. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  209. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  211. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  215. package/contracts/components/BaseComponent.sol +75 -32
  216. package/contracts/components/Distribution.sol +163 -0
  217. package/contracts/components/IBaseComponent.sol +15 -3
  218. package/contracts/components/IDistributionComponent.sol +44 -0
  219. package/contracts/components/IPoolComponent.sol +19 -10
  220. package/contracts/components/IProductComponent.sol +25 -9
  221. package/contracts/components/Pool.sol +126 -33
  222. package/contracts/components/Product.sol +204 -32
  223. package/contracts/experiment/cloning/Cloner.sol +47 -0
  224. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  225. package/contracts/instance/BundleManager.sol +129 -0
  226. package/contracts/instance/Cloneable.sol +46 -0
  227. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  228. package/contracts/instance/IInstance.sol +49 -46
  229. package/contracts/instance/IInstanceBase.sol +26 -0
  230. package/contracts/instance/IInstanceService.sol +32 -0
  231. package/contracts/instance/Instance.sol +438 -49
  232. package/contracts/instance/InstanceAccessManager.sol +288 -0
  233. package/contracts/instance/InstanceBase.sol +33 -63
  234. package/contracts/instance/InstanceReader.sol +315 -0
  235. package/contracts/instance/InstanceService.sol +234 -0
  236. package/contracts/instance/InstanceServiceManager.sol +57 -0
  237. package/contracts/instance/ObjectManager.sol +101 -0
  238. package/contracts/instance/base/ComponentServiceBase.sol +134 -0
  239. package/contracts/instance/base/IInstanceBase.sol +23 -0
  240. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  241. package/contracts/instance/base/ILifecycle.sol +30 -0
  242. package/contracts/instance/base/KeyValueStore.sol +172 -0
  243. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  244. package/contracts/instance/module/IAccess.sol +38 -0
  245. package/contracts/instance/module/IBundle.sol +20 -0
  246. package/contracts/instance/module/IDistribution.sol +39 -0
  247. package/contracts/instance/module/IPolicy.sol +45 -0
  248. package/contracts/instance/module/IRisk.sol +11 -0
  249. package/contracts/instance/module/ISetup.sol +46 -0
  250. package/contracts/instance/module/ITreasury.sol +23 -0
  251. package/contracts/instance/service/ComponentOwnerService.sol +244 -98
  252. package/contracts/instance/service/DistributionService.sol +88 -0
  253. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  254. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  255. package/contracts/instance/service/IDistributionService.sol +12 -0
  256. package/contracts/instance/service/IPoolService.sol +24 -3
  257. package/contracts/instance/service/IProductService.sol +59 -7
  258. package/contracts/instance/service/PoolService.sol +207 -43
  259. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  260. package/contracts/instance/service/ProductService.sol +350 -135
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +80 -37
  263. package/contracts/registry/IRegistry.sol +49 -25
  264. package/contracts/registry/IRegistryService.sol +50 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +337 -270
  267. package/contracts/registry/RegistryService.sol +358 -0
  268. package/contracts/registry/RegistryServiceManager.sol +80 -0
  269. package/contracts/registry/TokenRegistry.sol +111 -0
  270. package/contracts/shared/ContractDeployerLib.sol +72 -0
  271. package/contracts/shared/ERC165.sol +6 -2
  272. package/contracts/shared/INftOwnable.sol +22 -0
  273. package/contracts/shared/IRegisterable.sol +8 -15
  274. package/contracts/{instance/service → shared}/IService.sol +3 -3
  275. package/contracts/shared/IVersionable.sol +55 -11
  276. package/contracts/shared/NftOwnable.sol +134 -0
  277. package/contracts/shared/ProxyManager.sol +94 -0
  278. package/contracts/shared/Registerable.sol +63 -59
  279. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  280. package/contracts/shared/Service.sol +55 -0
  281. package/contracts/shared/TokenHandler.sol +27 -0
  282. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  283. package/contracts/shared/Versionable.sol +113 -55
  284. package/contracts/test/TestFee.sol +2 -2
  285. package/contracts/test/TestRegisterable.sol +5 -6
  286. package/contracts/test/TestRoleId.sol +2 -2
  287. package/contracts/test/TestService.sol +5 -13
  288. package/contracts/types/DistributorType.sol +55 -0
  289. package/contracts/types/Fee.sol +10 -5
  290. package/contracts/types/Key32.sol +50 -0
  291. package/contracts/types/NftId.sol +16 -1
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/NumberId.sol +52 -0
  294. package/contracts/types/ObjectType.sol +51 -14
  295. package/contracts/types/Referral.sol +85 -0
  296. package/contracts/types/RiskId.sol +43 -0
  297. package/contracts/types/RoleId.sol +65 -11
  298. package/contracts/types/StateId.sol +12 -2
  299. package/contracts/types/Timestamp.sol +7 -3
  300. package/contracts/types/UFixed.sol +128 -12
  301. package/contracts/types/Version.sol +13 -1
  302. package/package.json +4 -3
  303. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  304. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  305. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  306. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  307. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  309. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  311. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  312. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  314. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  317. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  319. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  321. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  323. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  325. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  327. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  329. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  330. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  331. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  332. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  334. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  337. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  339. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  342. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  344. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  347. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  349. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  352. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  354. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  356. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  357. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  358. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  359. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  360. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  361. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  362. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  363. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  364. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  365. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  366. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  367. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  368. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  369. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  370. package/contracts/experiment/statemachine/README.md +0 -112
  371. package/contracts/instance/IInstanceLinked.sol +0 -8
  372. package/contracts/instance/IServiceLinked.sol +0 -12
  373. package/contracts/instance/module/access/Access.sol +0 -149
  374. package/contracts/instance/module/access/IAccess.sol +0 -53
  375. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  376. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  377. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  378. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  379. package/contracts/instance/module/component/ComponentModule.sol +0 -103
  380. package/contracts/instance/module/component/IComponent.sol +0 -53
  381. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  382. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  383. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  384. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  385. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  386. package/contracts/instance/module/risk/IRisk.sol +0 -10
  387. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  388. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  389. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  390. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  391. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  392. package/contracts/instance/service/ServiceBase.sol +0 -39
  393. package/contracts/registry/IChainNft.sol +0 -21
  394. package/contracts/registry/IRegistryLinked.sol +0 -8
  395. package/contracts/shared/IOwnable.sol +0 -6
  396. package/contracts/test/TestPool.sol +0 -22
  397. package/contracts/test/TestProduct.sol +0 -44
@@ -2,28 +2,44 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IProductComponent} from "../../components/IProductComponent.sol";
6
+ import {Product} from "../../components/Product.sol";
5
7
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
6
- import {IInstance} from "../../instance/IInstance.sol";
7
- import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
8
- import {IPool} from "../module/pool/IPoolModule.sol";
9
- import {IBundle} from "../module/bundle/IBundle.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";
10
13
  import {IProductService} from "./IProductService.sol";
11
- import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
14
+ import {ITreasury} from "../module/ITreasury.sol";
15
+ import {ISetup} from "../module/ISetup.sol";
16
+
17
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
12
18
 
13
19
  import {IVersionable} from "../../shared/IVersionable.sol";
14
20
  import {Versionable} from "../../shared/Versionable.sol";
15
21
 
16
22
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
17
- import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
18
- import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
19
- import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
20
- import {NftId, NftIdLib} from "../../types/NftId.sol";
23
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
21
24
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
25
+ import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
26
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
27
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
22
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";
23
32
  import {Version, VersionLib} from "../../types/Version.sol";
24
33
 
25
- import {ComponentServiceBase} from "./ComponentServiceBase.sol";
34
+ import {IService} from "../../shared/IService.sol";
35
+ import {Service} from "../../shared/Service.sol";
36
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
26
37
  import {IProductService} from "./IProductService.sol";
38
+ import {InstanceReader} from "../InstanceReader.sol";
39
+ import {IPoolService} from "./PoolService.sol";
40
+ import {POOL_SERVICE_NAME} from "./PoolService.sol";
41
+
42
+ string constant PRODUCT_SERVICE_NAME = "ProductService";
27
43
 
28
44
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
29
45
  contract ProductService is ComponentServiceBase, IProductService {
@@ -31,101 +47,274 @@ contract ProductService is ComponentServiceBase, IProductService {
31
47
 
32
48
  string public constant NAME = "ProductService";
33
49
 
50
+ address internal _registryAddress;
51
+ IPoolService internal _poolService;
52
+
34
53
  event LogProductServiceSender(address sender);
35
54
 
36
- constructor(
37
- address registry,
38
- NftId registryNftId
39
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
55
+ function _initialize(
56
+ address owner,
57
+ bytes memory data
58
+ )
59
+ internal
60
+ initializer
61
+ virtual override
40
62
  {
63
+ address initialOwner = address(0);
64
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
65
+
66
+ _initializeService(_registryAddress, owner);
67
+
68
+ _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
69
+
70
+ _registerInterface(type(IService).interfaceId);
41
71
  _registerInterface(type(IProductService).interfaceId);
42
72
  }
43
73
 
44
- function getVersion()
45
- public
46
- pure
47
- virtual override (IVersionable, Versionable)
48
- returns(Version)
49
- {
50
- return VersionLib.toVersion(3,0,0);
51
- }
52
74
 
53
- function getName() external pure override returns(string memory name) {
75
+ function getName() public pure override(IService, Service) returns(string memory name) {
54
76
  return NAME;
55
77
  }
56
78
 
79
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
80
+ ISetup.ProductSetupInfo memory initialSetup = abi.decode(
81
+ initialObjData,
82
+ (ISetup.ProductSetupInfo)
83
+ );
84
+ instance.createProductSetup(componentNftId, initialSetup);
85
+ }
86
+
57
87
  function setFees(
58
- Fee memory policyFee,
88
+ Fee memory productFee,
59
89
  Fee memory processingFee
60
90
  )
61
91
  external
62
92
  override
63
93
  {
64
94
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
65
- instance.setProductFees(productInfo.nftId, policyFee, processingFee);
95
+ InstanceReader instanceReader = instance.getInstanceReader();
96
+ NftId productNftId = productInfo.nftId;
97
+
98
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
99
+ productSetupInfo.productFee = productFee;
100
+ productSetupInfo.processingFee = processingFee;
101
+
102
+ instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
103
+ }
104
+
105
+ function createRisk(
106
+ RiskId riskId,
107
+ bytes memory data
108
+ ) external override {
109
+ (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
110
+ NftId productNftId = productInfo.nftId;
111
+ IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
112
+ instance.createRisk(
113
+ riskId,
114
+ riskInfo
115
+ );
116
+ }
117
+
118
+ function updateRisk(
119
+ RiskId riskId,
120
+ bytes memory data
121
+ ) external {
122
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
123
+ InstanceReader instanceReader = instance.getInstanceReader();
124
+ IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
125
+ riskInfo.data = data;
126
+ instance.updateRisk(riskId, riskInfo, KEEP_STATE());
127
+ }
128
+
129
+ function updateRiskState(
130
+ RiskId riskId,
131
+ StateId state
132
+ ) external {
133
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
134
+ instance.updateRiskState(riskId, state);
135
+ }
136
+
137
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
138
+ IRegistry.ObjectInfo memory productInfo;
139
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
140
+ product = Product(productInfo.objectAddress);
66
141
  }
67
142
 
143
+ function calculatePremium(
144
+ RiskId riskId,
145
+ uint256 sumInsuredAmount,
146
+ uint256 lifetime,
147
+ bytes memory applicationData,
148
+ NftId bundleNftId,
149
+ ReferralId referralId
150
+ )
151
+ public
152
+ view
153
+ override
154
+ returns (
155
+ uint256 premiumAmount,
156
+ uint256 productFeeAmount,
157
+ uint256 poolFeeAmount,
158
+ uint256 bundleFeeAmount,
159
+ uint256 distributionFeeAmount
160
+ )
161
+ {
162
+ Product product = _getAndVerifyInstanceAndProduct();
163
+ uint256 netPremiumAmount = product.calculateNetPremium(
164
+ sumInsuredAmount,
165
+ riskId,
166
+ lifetime,
167
+ applicationData
168
+ );
169
+
170
+ (
171
+ productFeeAmount,
172
+ poolFeeAmount,
173
+ bundleFeeAmount,
174
+ distributionFeeAmount
175
+ ) = _calculateFeeAmounts(
176
+ netPremiumAmount,
177
+ product,
178
+ bundleNftId,
179
+ referralId
180
+ );
181
+
182
+ premiumAmount = netPremiumAmount + productFeeAmount;
183
+ premiumAmount += poolFeeAmount + bundleFeeAmount;
184
+ premiumAmount += distributionFeeAmount;
185
+ }
186
+
187
+ function _calculateFeeAmounts(
188
+ uint256 netPremiumAmount,
189
+ Product product,
190
+ NftId bundleNftId,
191
+ ReferralId referralId
192
+ )
193
+ internal
194
+ view
195
+ returns (
196
+ uint256 productFeeAmount,
197
+ uint256 poolFeeAmount,
198
+ uint256 bundleFeeAmount,
199
+ uint256 distributionFeeAmount
200
+ )
201
+ {
202
+ InstanceReader instanceReader;
203
+ {
204
+ IInstance instance = product.getInstance();
205
+ instanceReader = instance.getInstanceReader();
206
+ }
207
+
208
+ NftId poolNftId = product.getPoolNftId();
209
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
210
+ require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
211
+
212
+ {
213
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
214
+ (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
215
+ }
216
+ {
217
+ ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
218
+ (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
219
+ }
220
+ {
221
+ NftId distributionNftId = product.getDistributionNftId();
222
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
223
+ (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
224
+ }
225
+
226
+ (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
227
+ }
228
+
229
+
68
230
  function createApplication(
69
231
  address applicationOwner,
232
+ RiskId riskId,
70
233
  uint256 sumInsuredAmount,
71
- uint256 premiumAmount,
72
234
  uint256 lifetime,
73
- NftId bundleNftId
235
+ bytes memory applicationData,
236
+ NftId bundleNftId,
237
+ ReferralId referralId
74
238
  ) external override returns (NftId policyNftId) {
75
239
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
76
- NftId productNftId = productInfo.nftId;
77
240
  // TODO add validations (see create bundle in pool service)
78
241
 
79
- policyNftId = this.getRegistry().registerObjectForInstance(
80
- productNftId,
81
- POLICY(),
82
- applicationOwner,
83
- ""
242
+ policyNftId = getRegistryService().registerPolicy(
243
+ IRegistry.ObjectInfo(
244
+ zeroNftId(),
245
+ productInfo.nftId,
246
+ POLICY(),
247
+ false, // intercepting property for policies is defined on product
248
+ address(0),
249
+ applicationOwner,
250
+ ""
251
+ )
252
+ );
253
+
254
+ (uint256 premiumAmount,,,,) = calculatePremium(
255
+ riskId,
256
+ sumInsuredAmount,
257
+ lifetime,
258
+ applicationData,
259
+ bundleNftId,
260
+ referralId
84
261
  );
85
262
 
86
- instance.createApplication(
87
- productNftId,
88
- policyNftId,
263
+ IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
264
+ productInfo.nftId,
265
+ bundleNftId,
266
+ referralId,
267
+ riskId,
89
268
  sumInsuredAmount,
90
269
  premiumAmount,
270
+ 0,
91
271
  lifetime,
92
- bundleNftId
272
+ applicationData,
273
+ "",
274
+ 0,
275
+ 0,
276
+ 0,
277
+ zeroTimestamp(),
278
+ zeroTimestamp(),
279
+ zeroTimestamp()
93
280
  );
281
+
282
+ instance.createPolicy(policyNftId, policyInfo);
283
+ instance.updatePolicyState(policyNftId, APPLIED());
94
284
 
95
285
  // TODO add logging
96
286
  }
97
287
 
98
288
  function _getAndVerifyUnderwritingSetup(
99
289
  IInstance instance,
100
- IPolicy.PolicyInfo memory policyInfo
290
+ InstanceReader instanceReader,
291
+ IPolicy.PolicyInfo memory policyInfo,
292
+ ISetup.ProductSetupInfo memory productSetupInfo
101
293
  )
102
294
  internal
103
295
  view
104
296
  returns (
105
- ITreasury.ProductSetup memory productSetup,
297
+ NftId bundleNftId,
106
298
  IBundle.BundleInfo memory bundleInfo,
107
- uint256 collateralAmount,
108
- bool poolIsVerifying,
109
- bytes memory bundleFilter
299
+ uint256 collateralAmount
110
300
  )
111
301
  {
112
302
  // check match between policy and bundle (via pool)
113
- productSetup = instance.getProductSetup(policyInfo.productNftId);
114
- bundleInfo = instance.getBundleInfo(policyInfo.bundleNftId);
115
- require(bundleInfo.poolNftId == productSetup.poolNftId, "POLICY_BUNDLE_MISMATCH");
303
+ bundleNftId = policyInfo.bundleNftId;
304
+ bundleInfo = instanceReader.getBundleInfo(bundleNftId);
305
+ require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
116
306
 
117
307
  // calculate required collateral
118
- NftId poolNftId = productSetup.poolNftId;
119
- IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
308
+ NftId poolNftId = productSetupInfo.poolNftId;
309
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
120
310
 
121
311
  // obtain remaining return values
122
- poolIsVerifying = poolInfo.isVerifying;
123
312
  collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
124
- bundleFilter = bundleInfo.filter;
125
313
  }
126
314
 
127
315
  function _lockCollateralInBundle(
128
316
  IInstance instance,
317
+ NftId bundleNftId,
129
318
  IBundle.BundleInfo memory bundleInfo,
130
319
  NftId policyNftId,
131
320
  uint256 collateralAmount
@@ -134,29 +323,39 @@ contract ProductService is ComponentServiceBase, IProductService {
134
323
  returns (IBundle.BundleInfo memory)
135
324
  {
136
325
  bundleInfo.lockedAmount += collateralAmount;
137
- bundleInfo.updatedIn = blockNumber();
138
- instance.collateralizePolicy(bundleInfo.nftId, policyNftId, collateralAmount);
326
+ // TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
139
327
  return bundleInfo;
140
328
  }
141
329
 
142
330
  function _underwriteByPool(
143
- ITreasury.ProductSetup memory productSetup,
331
+ NftId poolNftId,
332
+ NftId policyNftId,
144
333
  IPolicy.PolicyInfo memory policyInfo,
145
334
  bytes memory bundleFilter,
146
335
  uint256 collateralAmount
147
336
  )
148
337
  internal
149
338
  {
150
- address poolAddress = _registry.getObjectInfo(productSetup.poolNftId).objectAddress;
339
+ address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
151
340
  IPoolComponent pool = IPoolComponent(poolAddress);
152
341
  pool.underwrite(
153
- policyInfo.nftId,
154
- policyInfo.data,
342
+ policyNftId,
343
+ policyInfo.applicationData,
155
344
  bundleFilter,
156
345
  collateralAmount);
157
346
  }
158
347
 
159
348
 
349
+ function revoke(
350
+ NftId policyNftId
351
+ )
352
+ external
353
+ override
354
+ {
355
+ require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
356
+ }
357
+
358
+
160
359
  function underwrite(
161
360
  NftId policyNftId,
162
361
  bool requirePremiumPayment,
@@ -170,75 +369,93 @@ contract ProductService is ComponentServiceBase, IProductService {
170
369
  IRegistry.ObjectInfo memory productInfo,
171
370
  IInstance instance
172
371
  ) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
372
+ InstanceReader instanceReader = instance.getInstanceReader();
173
373
 
174
374
  // check match between policy and calling product
175
375
  NftId productNftId = productInfo.nftId;
176
- IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
376
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
177
377
  require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
178
- require(policyInfo.state == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
378
+ require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
379
+
380
+ NftId bundleNftId;
381
+ IBundle.BundleInfo memory bundleInfo;
382
+ uint256 collateralAmount;
383
+ uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
384
+ {
385
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
386
+ IBundle.BundleInfo memory bundleInfo;
387
+
388
+ (
389
+ bundleNftId,
390
+ bundleInfo,
391
+ collateralAmount
392
+ ) = _getAndVerifyUnderwritingSetup(
393
+ instance,
394
+ instanceReader,
395
+ policyInfo,
396
+ productSetupInfo
397
+ );
398
+ }
179
399
 
180
- (
181
- ITreasury.ProductSetup memory productSetup,
182
- IBundle.BundleInfo memory bundleInfo,
183
- uint256 collateralAmount,
184
- bool poolIsVerifying,
185
- bytes memory bundleFilter
186
- ) = _getAndVerifyUnderwritingSetup(
187
- instance,
188
- policyInfo
189
- );
190
400
 
191
401
  // lock bundle collateral
192
402
  bundleInfo = _lockCollateralInBundle(
193
403
  instance,
404
+ bundleNftId,
405
+ bundleInfo,
406
+ policyNftId,
407
+ collateralAmount);
408
+
409
+ // lock bundle collateral
410
+ bundleInfo = _lockCollateralInBundle(
411
+ instance,
412
+ bundleNftId,
194
413
  bundleInfo,
195
414
  policyNftId,
196
415
  collateralAmount);
416
+ StateId newPolicyState = UNDERWRITTEN();
417
+
418
+ // optional activation of policy
419
+ if(activateAt > zeroTimestamp()) {
420
+ newPolicyState = ACTIVE();
421
+ policyInfo.activatedAt = activateAt;
422
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
423
+ }
197
424
 
198
- // collect premium
425
+ // optional collection of premium
199
426
  if(requirePremiumPayment) {
200
- uint256 netPremiumAmount = _processPremiumByTreasury(
427
+ netPremiumAmount = _processPremiumByTreasury(
201
428
  instance,
202
- productSetup,
429
+ productInfo.nftId,
203
430
  policyNftId,
204
431
  policyInfo.premiumAmount);
205
432
 
206
433
  policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
207
- bundleInfo.balanceAmount += netPremiumAmount;
208
434
  }
209
435
 
210
- // set policy state to underwritten
211
- // TODO add require for state change
212
- policyInfo.state = UNDERWRITTEN();
213
- policyInfo.updatedIn = blockNumber();
436
+ _poolService.underwritePolicy(instance, policyNftId, bundleNftId, collateralAmount, netPremiumAmount);
437
+ instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
214
438
 
215
- // optional activation of policy
216
- if(activateAt > zeroTimestamp()) {
217
- policyInfo.activatedAt = activateAt;
218
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
219
-
220
- // TODO add require for state change
221
- policyInfo.state = ACTIVE();
222
- }
439
+ // involve pool if necessary
440
+ {
441
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
223
442
 
224
- instance.setPolicyInfo(policyInfo);
225
- instance.setBundleInfo(bundleInfo);
226
-
227
- // integrate pool component
228
- if(poolIsVerifying) {
229
- _underwriteByPool(
230
- productSetup,
231
- policyInfo,
232
- bundleFilter,
233
- collateralAmount
234
- );
443
+ if(poolInfo.isConfirmingApplication) {
444
+ _underwriteByPool(
445
+ bundleInfo.poolNftId,
446
+ policyNftId,
447
+ policyInfo,
448
+ bundleInfo.filter,
449
+ collateralAmount
450
+ );
451
+ }
235
452
  }
236
453
 
237
454
  // TODO add logging
238
455
  }
239
456
 
240
457
  function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
241
- UFixed sumInsuredUFixed = UFixedMathLib.toUFixed(sumInsuredAmount);
458
+ UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
242
459
  UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
243
460
  return collateralUFixed.toInt();
244
461
  }
@@ -246,41 +463,37 @@ contract ProductService is ComponentServiceBase, IProductService {
246
463
  function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
247
464
  // check caller is registered product
248
465
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
466
+ InstanceReader instanceReader = instance.getInstanceReader();
249
467
 
250
- // perform actual token transfers
251
- IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
252
- ITreasury.ProductSetup memory product = instance.getProductSetup(productInfo.nftId);
253
-
254
- uint256 premiumAmount = policyInfo.premiumAmount;
255
- _processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
468
+ // TODO: check if not paid
469
+ // TODO: transfer premium
470
+ // TODO: optionally activate
256
471
 
257
- // policy level book keeping for premium paid
258
- policyInfo.premiumPaidAmount += premiumAmount;
259
- policyInfo.updatedIn = blockNumber();
260
-
261
- // optional activation of policy
262
- if(activateAt > zeroTimestamp()) {
263
- require(
264
- policyInfo.activatedAt.eqz(),
265
- "ERROR:PRS-030:ALREADY_ACTIVATED");
472
+ // // perform actual token transfers (this code is probably not complete)
473
+ // IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
474
+
475
+ // uint256 premiumAmount = policyInfo.premiumAmount;
476
+ // _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
266
477
 
267
- policyInfo.activatedAt = activateAt;
268
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
478
+ // // policy level book keeping for premium paid
479
+ // policyInfo.premiumPaidAmount += premiumAmount;
269
480
 
270
- // TODO add require for state change
271
- policyInfo.state = ACTIVE();
272
- }
481
+ // instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
273
482
 
274
- instance.setPolicyInfo(policyInfo);
483
+ // // optional activation of policy
484
+ // if(activateAt > zeroTimestamp()) {
485
+ // activate(policyNftId, activateAt);
486
+ // }
275
487
 
276
488
  // TODO add logging
277
489
  }
278
490
 
279
- function activate(NftId policyNftId, Timestamp activateAt) external override {
491
+ function activate(NftId policyNftId, Timestamp activateAt) public override {
280
492
  // check caller is registered product
281
493
  (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
494
+ InstanceReader instanceReader = instance.getInstanceReader();
282
495
 
283
- IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
496
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
284
497
 
285
498
  require(
286
499
  policyInfo.activatedAt.eqz(),
@@ -289,10 +502,7 @@ contract ProductService is ComponentServiceBase, IProductService {
289
502
  policyInfo.activatedAt = activateAt;
290
503
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
291
504
 
292
- // TODO add require for state change
293
- policyInfo.state = ACTIVE();
294
-
295
- instance.setPolicyInfo(policyInfo);
505
+ instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
296
506
 
297
507
  // TODO add logging
298
508
  }
@@ -312,12 +522,15 @@ contract ProductService is ComponentServiceBase, IProductService {
312
522
  view
313
523
  returns (NftId poolNftid)
314
524
  {
315
- return instance.getProductSetup(productNftId).poolNftId;
525
+ InstanceReader instanceReader = instance.getInstanceReader();
526
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
527
+ return productSetupInfo.poolNftId;
316
528
  }
317
529
 
530
+
318
531
  function _processPremiumByTreasury(
319
532
  IInstance instance,
320
- ITreasury.ProductSetup memory product,
533
+ NftId productNftId,
321
534
  NftId policyNftId,
322
535
  uint256 premiumAmount
323
536
  )
@@ -326,25 +539,27 @@ contract ProductService is ComponentServiceBase, IProductService {
326
539
  {
327
540
  // process token transfer(s)
328
541
  if(premiumAmount > 0) {
329
- TokenHandler tokenHandler = instance.getTokenHandler(product.productNftId);
330
- address policyOwner = _registry.getOwner(policyNftId);
331
- address poolWallet = instance.getPoolSetup(product.poolNftId).wallet;
542
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
543
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
544
+ address policyOwner = getRegistry().ownerOf(policyNftId);
545
+ ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
546
+ address poolWallet = poolSetupInfo.wallet;
332
547
  netPremiumAmount = premiumAmount;
333
- Fee memory policyFee = product.policyFee;
548
+ Fee memory productFee = productSetupInfo.productFee;
334
549
 
335
- if (FeeLib.feeIsZero(policyFee)) {
550
+ if (FeeLib.feeIsZero(productFee)) {
336
551
  tokenHandler.transfer(
337
552
  policyOwner,
338
553
  poolWallet,
339
554
  premiumAmount
340
555
  );
341
556
  } else {
342
- (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
343
- premiumAmount,
344
- policyFee
345
- );
346
-
347
- tokenHandler.transfer(policyOwner, product.wallet, feeAmount);
557
+ (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
558
+ address productWallet = productSetupInfo.wallet;
559
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
560
+ revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
561
+ }
562
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
348
563
  tokenHandler.transfer(policyOwner, poolWallet, netAmount);
349
564
  netPremiumAmount = netAmount;
350
565
  }