@etherisc/gif-next 0.0.2-6f2f76e-746 → 0.0.2-716a895-659

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 (312) hide show
  1. package/README.md +73 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +166 -39
  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 +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +119 -39
  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 +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +108 -156
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +67 -139
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +417 -88
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +360 -51
  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 +847 -615
  40. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  41. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  42. package/artifacts/contracts/instance/Instance.sol/Instance.json +1107 -697
  43. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  44. package/artifacts/contracts/instance/{InstanceBase.sol/InstanceBase.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +225 -57
  45. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  46. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  47. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  48. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  49. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  50. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  51. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  52. package/artifacts/contracts/instance/{service → base}/IService.sol/IService.json +175 -54
  53. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  54. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +544 -0
  55. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  56. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  57. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  58. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  59. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  60. package/artifacts/contracts/instance/{module/compensation/ICompensation.sol/ICompensation.json → base/ModuleBase.sol/ModuleBase.json} +2 -2
  61. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  62. package/artifacts/contracts/instance/{service → base}/ServiceBase.sol/ServiceBase.json +221 -53
  63. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +71 -50
  68. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +71 -50
  71. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +22 -93
  73. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +22 -93
  76. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  78. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensationModule.json → distribution/IDistribution.sol/IDistribution.json} +2 -2
  80. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  82. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +61 -51
  85. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +61 -51
  87. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -14
  90. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  91. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -13
  92. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  93. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  94. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +104 -1
  95. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  96. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +126 -5
  97. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +326 -221
  100. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  102. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +326 -221
  104. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +400 -64
  106. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  108. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +176 -74
  110. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +204 -58
  112. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  114. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  116. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  117. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +335 -53
  118. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  119. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +471 -71
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  121. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
  122. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  123. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  124. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  125. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +190 -51
  126. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  127. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  128. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  129. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  130. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  131. package/artifacts/contracts/registry/Registry.sol/Registry.json +380 -139
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  133. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1245 -0
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +490 -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/IVersionable.sol/IVersionable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  156. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  157. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  160. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestPool.sol/TestPool.json +417 -88
  162. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +407 -56
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +38 -4
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +267 -62
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +89 -25
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  177. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.json +55 -11
  183. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  185. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  187. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  189. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  191. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +39 -8
  202. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  204. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  206. package/contracts/components/BaseComponent.sol +11 -21
  207. package/contracts/components/Distribution.sol +155 -0
  208. package/contracts/components/IBaseComponent.sol +1 -1
  209. package/contracts/components/IDistributionComponent.sol +46 -0
  210. package/contracts/components/IPoolComponent.sol +15 -8
  211. package/contracts/components/IProductComponent.sol +26 -8
  212. package/contracts/components/Pool.sol +99 -27
  213. package/contracts/components/Product.sol +204 -22
  214. package/contracts/instance/IInstance.sol +17 -16
  215. package/contracts/instance/Instance.sol +35 -14
  216. package/contracts/instance/{service → base}/ComponentServiceBase.sol +13 -5
  217. package/contracts/instance/base/IInstanceBase.sol +23 -0
  218. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  219. package/contracts/instance/base/ILifecycle.sol +30 -0
  220. package/contracts/instance/base/InstanceBase.sol +89 -0
  221. package/contracts/instance/base/KeyValueStore.sol +161 -0
  222. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +50 -39
  223. package/contracts/instance/base/ModuleBase.sol +57 -0
  224. package/contracts/instance/base/ServiceBase.sol +44 -0
  225. package/contracts/instance/module/access/Access.sol +6 -6
  226. package/contracts/instance/module/bundle/BundleModule.sol +24 -118
  227. package/contracts/instance/module/bundle/IBundle.sol +9 -9
  228. package/contracts/instance/module/component/ComponentModule.sol +31 -63
  229. package/contracts/instance/module/component/IComponent.sol +6 -31
  230. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  231. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  232. package/contracts/instance/module/policy/IPolicy.sol +13 -10
  233. package/contracts/instance/module/policy/PolicyModule.sol +33 -26
  234. package/contracts/instance/module/pool/IPoolModule.sol +4 -4
  235. package/contracts/instance/module/pool/PoolModule.sol +23 -15
  236. package/contracts/instance/module/risk/IRisk.sol +18 -2
  237. package/contracts/instance/module/risk/RiskModule.sol +56 -2
  238. package/contracts/instance/module/treasury/ITreasury.sol +31 -50
  239. package/contracts/instance/module/treasury/TokenHandler.sol +1 -1
  240. package/contracts/instance/module/treasury/TreasuryModule.sol +67 -88
  241. package/contracts/instance/service/ComponentOwnerService.sol +234 -93
  242. package/contracts/instance/service/DistributionService.sol +54 -0
  243. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  244. package/contracts/instance/service/IDistributionService.sol +12 -0
  245. package/contracts/instance/service/IPoolService.sol +8 -1
  246. package/contracts/instance/service/IProductService.sol +56 -7
  247. package/contracts/instance/service/PoolService.sol +50 -24
  248. package/contracts/instance/service/ProductService.sol +249 -94
  249. package/contracts/registry/ChainNft.sol +42 -14
  250. package/contracts/registry/IChainNft.sol +2 -1
  251. package/contracts/registry/IRegistry.sol +27 -27
  252. package/contracts/registry/IRegistryService.sol +35 -0
  253. package/contracts/registry/ITransferInterceptor.sol +6 -0
  254. package/contracts/registry/Registry.sol +314 -269
  255. package/contracts/registry/RegistryService.sol +441 -0
  256. package/contracts/registry/RegistryServiceManager.sol +63 -0
  257. package/contracts/shared/ContractDeployerLib.sol +72 -0
  258. package/contracts/shared/INftOwnable.sol +22 -0
  259. package/contracts/shared/IRegisterable.sol +8 -15
  260. package/contracts/shared/IVersionable.sol +55 -11
  261. package/contracts/shared/NftOwnable.sol +136 -0
  262. package/contracts/shared/ProxyManager.sol +94 -0
  263. package/contracts/shared/Registerable.sol +62 -59
  264. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  265. package/contracts/shared/Versionable.sol +112 -54
  266. package/contracts/test/TestDistribution.sol +22 -0
  267. package/contracts/test/TestPool.sol +7 -2
  268. package/contracts/test/TestProduct.sol +37 -7
  269. package/contracts/test/TestRegisterable.sol +5 -6
  270. package/contracts/test/TestRoleId.sol +2 -2
  271. package/contracts/test/TestService.sol +6 -12
  272. package/contracts/test/Usdc.sol +26 -0
  273. package/contracts/types/Fee.sol +8 -3
  274. package/contracts/types/Key32.sol +45 -0
  275. package/contracts/types/NftId.sol +16 -1
  276. package/contracts/types/ObjectType.sol +24 -8
  277. package/contracts/types/ReferralId.sol +48 -0
  278. package/contracts/types/RiskId.sol +43 -0
  279. package/contracts/types/RoleId.sol +18 -9
  280. package/contracts/types/StateId.sol +7 -1
  281. package/contracts/types/UFixed.sol +22 -19
  282. package/contracts/types/Version.sol +9 -0
  283. package/package.json +1 -1
  284. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  285. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  286. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  287. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  288. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  289. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  290. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  292. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  293. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  294. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  296. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  297. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  298. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  299. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  300. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  301. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  302. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  303. package/contracts/experiment/statemachine/README.md +0 -112
  304. package/contracts/instance/IServiceLinked.sol +0 -12
  305. package/contracts/instance/InstanceBase.sol +0 -71
  306. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  307. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  308. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  309. package/contracts/instance/service/ServiceBase.sol +0 -39
  310. package/contracts/registry/IRegistryLinked.sol +0 -8
  311. package/contracts/shared/IOwnable.sol +0 -6
  312. /package/contracts/instance/{service → base}/IService.sol +0 -0
@@ -3,17 +3,20 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IInstance} from "../../instance/IInstance.sol";
6
+ import {IBundle} from "../../instance/module/bundle/IBundle.sol";
6
7
  import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
7
8
 
8
9
  import {IVersionable} from "../../shared/IVersionable.sol";
9
10
  import {Versionable} from "../../shared/Versionable.sol";
10
11
 
11
- import {NftId, NftIdLib} from "../../types/NftId.sol";
12
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
13
  import {POOL, BUNDLE} from "../../types/ObjectType.sol";
13
14
  import {Fee} from "../../types/Fee.sol";
14
15
  import {Version, VersionLib} from "../../types/Version.sol";
15
16
 
16
- import {ComponentServiceBase} from "./ComponentServiceBase.sol";
17
+ import {IService} from "../base/IService.sol";
18
+ import {ServiceBase} from "../base/ServiceBase.sol";
19
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
17
20
  import {IPoolService} from "./IPoolService.sol";
18
21
 
19
22
 
@@ -24,38 +27,38 @@ contract PoolService is ComponentServiceBase, IPoolService {
24
27
 
25
28
  constructor(
26
29
  address registry,
27
- NftId registryNftId
28
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
30
+ NftId registryNftId,
31
+ address initialOwner
32
+ ) ComponentServiceBase(registry, registryNftId, initialOwner)
29
33
  {
30
34
  _registerInterface(type(IPoolService).interfaceId);
31
35
  }
32
36
 
33
- function getVersion()
34
- public
35
- pure
36
- virtual override (IVersionable, Versionable)
37
- returns(Version)
38
- {
39
- return VersionLib.toVersion(3,0,0);
40
- }
41
-
42
- function getName() external pure override returns(string memory name) {
37
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
43
38
  return NAME;
44
39
  }
45
40
 
46
41
  function setFees(
42
+ Fee memory poolFee,
47
43
  Fee memory stakingFee,
48
44
  Fee memory performanceFee
49
45
  )
50
46
  external
51
47
  override
52
48
  {
53
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
49
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
50
+
51
+ NftId productNftId = instance.getProductNftId(poolInfo.nftId);
52
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
53
+ treasuryInfo.poolFee = poolFee;
54
+ treasuryInfo.stakingFee = stakingFee;
55
+ treasuryInfo.performanceFee = performanceFee;
56
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
55
57
  }
56
58
 
57
59
  function createBundle(
58
60
  address owner,
61
+ Fee memory fee,
59
62
  uint256 stakingAmount,
60
63
  uint256 lifetime,
61
64
  bytes calldata filter
@@ -68,16 +71,23 @@ contract PoolService is ComponentServiceBase, IPoolService {
68
71
 
69
72
  // register bundle with registry
70
73
  NftId poolNftId = info.nftId;
71
- bundleNftId = _registry.registerObjectForInstance(
72
- poolNftId,
73
- BUNDLE(),
74
- owner,
75
- "");
74
+ bundleNftId = getRegistryService().registerBundle(
75
+ IRegistry.ObjectInfo(
76
+ zeroNftId(),
77
+ poolNftId,
78
+ BUNDLE(),
79
+ false, // intercepting property for bundles is defined on pool
80
+ address(0),
81
+ owner,
82
+ ""
83
+ )
84
+ );
76
85
 
77
86
  // create bundle info in instance
78
87
  instance.createBundleInfo(
79
88
  bundleNftId,
80
89
  poolNftId,
90
+ fee,
81
91
  stakingAmount,
82
92
  lifetime,
83
93
  filter);
@@ -98,6 +108,21 @@ contract PoolService is ComponentServiceBase, IPoolService {
98
108
  // TODO add logging
99
109
  }
100
110
 
111
+ function setBundleFee(
112
+ NftId bundleNftId,
113
+ Fee memory fee
114
+ )
115
+ external
116
+ override
117
+ {
118
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
119
+ IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
120
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
121
+ require(poolInfo.nftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
122
+ bundleInfo.fee = fee;
123
+ instance.setBundleInfo(bundleNftId, bundleInfo);
124
+ }
125
+
101
126
 
102
127
  function _processStakingByTreasury(
103
128
  IInstance instance,
@@ -109,9 +134,10 @@ contract PoolService is ComponentServiceBase, IPoolService {
109
134
  {
110
135
  // process token transfer(s)
111
136
  if(stakingAmount > 0) {
112
- TokenHandler tokenHandler = instance.getTokenHandler(poolNftId);
113
- address bundleOwner = _registry.getOwner(bundleNftId);
114
- address poolWallet = instance.getPoolSetup(poolNftId).wallet;
137
+ NftId productNftId = instance.getProductNftId(poolNftId);
138
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
139
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
140
+ address poolWallet = instance.getComponentWallet(poolNftId);
115
141
 
116
142
  tokenHandler.transfer(
117
143
  bundleOwner,
@@ -2,10 +2,14 @@
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";
8
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
6
9
  import {IInstance} from "../../instance/IInstance.sol";
7
10
  import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
8
11
  import {IPool} from "../module/pool/IPoolModule.sol";
12
+ import {IRisk} from "../module/risk/IRisk.sol";
9
13
  import {IBundle} from "../module/bundle/IBundle.sol";
10
14
  import {IProductService} from "./IProductService.sol";
11
15
  import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
@@ -15,14 +19,19 @@ import {Versionable} from "../../shared/Versionable.sol";
15
19
 
16
20
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
17
21
  import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
22
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
18
23
  import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
19
24
  import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
20
- import {NftId, NftIdLib} from "../../types/NftId.sol";
21
- import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
25
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
22
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";
23
30
  import {Version, VersionLib} from "../../types/Version.sol";
24
31
 
25
- import {ComponentServiceBase} from "./ComponentServiceBase.sol";
32
+ import {IService} from "../base/IService.sol";
33
+ import {ServiceBase} from "../base/ServiceBase.sol";
34
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
26
35
  import {IProductService} from "./IProductService.sol";
27
36
 
28
37
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
@@ -35,57 +44,186 @@ contract ProductService is ComponentServiceBase, IProductService {
35
44
 
36
45
  constructor(
37
46
  address registry,
38
- NftId registryNftId
39
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
47
+ NftId registryNftId,
48
+ address initialOwner
49
+ ) ComponentServiceBase(registry, registryNftId, initialOwner)
40
50
  {
41
51
  _registerInterface(type(IProductService).interfaceId);
42
52
  }
43
53
 
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
54
 
53
- function getName() external pure override returns(string memory name) {
55
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
54
56
  return NAME;
55
57
  }
56
58
 
57
59
  function setFees(
58
- Fee memory policyFee,
60
+ Fee memory productFee,
59
61
  Fee memory processingFee
60
62
  )
61
63
  external
62
64
  override
63
65
  {
64
66
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
65
- instance.setProductFees(productInfo.nftId, policyFee, processingFee);
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);
66
186
  }
67
187
 
188
+
68
189
  function createApplication(
69
190
  address applicationOwner,
191
+ RiskId riskId,
70
192
  uint256 sumInsuredAmount,
71
- uint256 premiumAmount,
72
193
  uint256 lifetime,
73
- NftId bundleNftId
194
+ bytes memory applicationData,
195
+ NftId bundleNftId,
196
+ ReferralId referralId
74
197
  ) external override returns (NftId policyNftId) {
75
198
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
76
- NftId productNftId = productInfo.nftId;
77
199
  // TODO add validations (see create bundle in pool service)
78
200
 
79
- policyNftId = this.getRegistry().registerObjectForInstance(
80
- productNftId,
81
- POLICY(),
82
- applicationOwner,
83
- ""
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
+ )
84
211
  );
85
212
 
86
- instance.createApplication(
87
- productNftId,
213
+ (uint256 premiumAmount,,,,) = calculatePremium(
214
+ riskId,
215
+ sumInsuredAmount,
216
+ lifetime,
217
+ applicationData,
218
+ bundleNftId,
219
+ referralId
220
+ );
221
+
222
+ instance.createPolicyInfo(
88
223
  policyNftId,
224
+ productInfo.nftId,
225
+ referralId,
226
+ riskId,
89
227
  sumInsuredAmount,
90
228
  premiumAmount,
91
229
  lifetime,
@@ -102,30 +240,29 @@ contract ProductService is ComponentServiceBase, IProductService {
102
240
  internal
103
241
  view
104
242
  returns (
105
- ITreasury.ProductSetup memory productSetup,
243
+ ITreasury.TreasuryInfo memory treasuryInfo,
244
+ NftId bundleNftId,
106
245
  IBundle.BundleInfo memory bundleInfo,
107
- uint256 collateralAmount,
108
- bool poolIsVerifying,
109
- bytes memory bundleFilter
246
+ uint256 collateralAmount
110
247
  )
111
248
  {
112
249
  // 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");
250
+ treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
251
+ bundleNftId = policyInfo.bundleNftId;
252
+ bundleInfo = instance.getBundleInfo(bundleNftId);
253
+ require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
116
254
 
117
255
  // calculate required collateral
118
- NftId poolNftId = productSetup.poolNftId;
256
+ NftId poolNftId = treasuryInfo.poolNftId;
119
257
  IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
120
258
 
121
259
  // obtain remaining return values
122
- poolIsVerifying = poolInfo.isVerifying;
123
260
  collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
124
- bundleFilter = bundleInfo.filter;
125
261
  }
126
262
 
127
263
  function _lockCollateralInBundle(
128
264
  IInstance instance,
265
+ NftId bundleNftId,
129
266
  IBundle.BundleInfo memory bundleInfo,
130
267
  NftId policyNftId,
131
268
  uint256 collateralAmount
@@ -134,29 +271,39 @@ contract ProductService is ComponentServiceBase, IProductService {
134
271
  returns (IBundle.BundleInfo memory)
135
272
  {
136
273
  bundleInfo.lockedAmount += collateralAmount;
137
- bundleInfo.updatedIn = blockNumber();
138
- instance.collateralizePolicy(bundleInfo.nftId, policyNftId, collateralAmount);
274
+ instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
139
275
  return bundleInfo;
140
276
  }
141
277
 
142
278
  function _underwriteByPool(
143
- ITreasury.ProductSetup memory productSetup,
279
+ ITreasury.TreasuryInfo memory treasuryInfo,
280
+ NftId policyNftId,
144
281
  IPolicy.PolicyInfo memory policyInfo,
145
282
  bytes memory bundleFilter,
146
283
  uint256 collateralAmount
147
284
  )
148
285
  internal
149
286
  {
150
- address poolAddress = _registry.getObjectInfo(productSetup.poolNftId).objectAddress;
287
+ address poolAddress = getRegistry().getObjectInfo(treasuryInfo.poolNftId).objectAddress;
151
288
  IPoolComponent pool = IPoolComponent(poolAddress);
152
289
  pool.underwrite(
153
- policyInfo.nftId,
154
- policyInfo.data,
290
+ policyNftId,
291
+ policyInfo.applicationData,
155
292
  bundleFilter,
156
293
  collateralAmount);
157
294
  }
158
295
 
159
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
+
160
307
  function underwrite(
161
308
  NftId policyNftId,
162
309
  bool requirePremiumPayment,
@@ -175,14 +322,18 @@ contract ProductService is ComponentServiceBase, IProductService {
175
322
  NftId productNftId = productInfo.nftId;
176
323
  IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
177
324
  require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
178
- require(policyInfo.state == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
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;
179
331
 
180
332
  (
181
- ITreasury.ProductSetup memory productSetup,
182
- IBundle.BundleInfo memory bundleInfo,
183
- uint256 collateralAmount,
184
- bool poolIsVerifying,
185
- bytes memory bundleFilter
333
+ treasuryInfo,
334
+ bundleNftId,
335
+ bundleInfo,
336
+ collateralAmount
186
337
  ) = _getAndVerifyUnderwritingSetup(
187
338
  instance,
188
339
  policyInfo
@@ -191,15 +342,28 @@ contract ProductService is ComponentServiceBase, IProductService {
191
342
  // lock bundle collateral
192
343
  bundleInfo = _lockCollateralInBundle(
193
344
  instance,
345
+ bundleNftId,
194
346
  bundleInfo,
195
347
  policyNftId,
196
348
  collateralAmount);
197
349
 
198
- // collect premium
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
199
362
  if(requirePremiumPayment) {
200
363
  uint256 netPremiumAmount = _processPremiumByTreasury(
201
364
  instance,
202
- productSetup,
365
+ productInfo.nftId,
366
+ treasuryInfo,
203
367
  policyNftId,
204
368
  policyInfo.premiumAmount);
205
369
 
@@ -207,31 +371,23 @@ contract ProductService is ComponentServiceBase, IProductService {
207
371
  bundleInfo.balanceAmount += netPremiumAmount;
208
372
  }
209
373
 
210
- // set policy state to underwritten
211
- // TODO add require for state change
212
- policyInfo.state = UNDERWRITTEN();
213
- policyInfo.updatedIn = blockNumber();
214
-
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
- }
223
-
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
- );
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
+ }
235
391
  }
236
392
 
237
393
  // TODO add logging
@@ -249,14 +405,13 @@ contract ProductService is ComponentServiceBase, IProductService {
249
405
 
250
406
  // perform actual token transfers
251
407
  IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
252
- ITreasury.ProductSetup memory product = instance.getProductSetup(productInfo.nftId);
408
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
253
409
 
254
410
  uint256 premiumAmount = policyInfo.premiumAmount;
255
- _processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
411
+ _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
256
412
 
257
413
  // policy level book keeping for premium paid
258
414
  policyInfo.premiumPaidAmount += premiumAmount;
259
- policyInfo.updatedIn = blockNumber();
260
415
 
261
416
  // optional activation of policy
262
417
  if(activateAt > zeroTimestamp()) {
@@ -267,11 +422,10 @@ contract ProductService is ComponentServiceBase, IProductService {
267
422
  policyInfo.activatedAt = activateAt;
268
423
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
269
424
 
270
- // TODO add require for state change
271
- policyInfo.state = ACTIVE();
425
+ instance.updatePolicyState(policyNftId, ACTIVE());
272
426
  }
273
427
 
274
- instance.setPolicyInfo(policyInfo);
428
+ instance.setPolicyInfo(policyNftId, policyInfo);
275
429
 
276
430
  // TODO add logging
277
431
  }
@@ -289,10 +443,8 @@ contract ProductService is ComponentServiceBase, IProductService {
289
443
  policyInfo.activatedAt = activateAt;
290
444
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
291
445
 
292
- // TODO add require for state change
293
- policyInfo.state = ACTIVE();
294
-
295
- instance.setPolicyInfo(policyInfo);
446
+ instance.setPolicyInfo(policyNftId, policyInfo);
447
+ instance.updatePolicyState(policyNftId, ACTIVE());
296
448
 
297
449
  // TODO add logging
298
450
  }
@@ -312,12 +464,14 @@ contract ProductService is ComponentServiceBase, IProductService {
312
464
  view
313
465
  returns (NftId poolNftid)
314
466
  {
315
- return instance.getProductSetup(productNftId).poolNftId;
467
+ return instance.getTreasuryInfo(productNftId).poolNftId;
316
468
  }
317
469
 
470
+
318
471
  function _processPremiumByTreasury(
319
472
  IInstance instance,
320
- ITreasury.ProductSetup memory product,
473
+ NftId productNftId,
474
+ ITreasury.TreasuryInfo memory treasuryInfo,
321
475
  NftId policyNftId,
322
476
  uint256 premiumAmount
323
477
  )
@@ -326,13 +480,13 @@ contract ProductService is ComponentServiceBase, IProductService {
326
480
  {
327
481
  // process token transfer(s)
328
482
  if(premiumAmount > 0) {
329
- TokenHandler tokenHandler = instance.getTokenHandler(product.productNftId);
330
- address policyOwner = _registry.getOwner(policyNftId);
331
- address poolWallet = instance.getPoolSetup(product.poolNftId).wallet;
483
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
484
+ address policyOwner = getRegistry().ownerOf(policyNftId);
485
+ address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
332
486
  netPremiumAmount = premiumAmount;
333
- Fee memory policyFee = product.policyFee;
487
+ Fee memory productFee = treasuryInfo.productFee;
334
488
 
335
- if (FeeLib.feeIsZero(policyFee)) {
489
+ if (FeeLib.feeIsZero(productFee)) {
336
490
  tokenHandler.transfer(
337
491
  policyOwner,
338
492
  poolWallet,
@@ -341,10 +495,11 @@ contract ProductService is ComponentServiceBase, IProductService {
341
495
  } else {
342
496
  (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
343
497
  premiumAmount,
344
- policyFee
498
+ productFee
345
499
  );
346
500
 
347
- tokenHandler.transfer(policyOwner, product.wallet, feeAmount);
501
+ address productWallet = instance.getComponentWallet(productNftId);
502
+ tokenHandler.transfer(policyOwner, productWallet, feeAmount);
348
503
  tokenHandler.transfer(policyOwner, poolWallet, netAmount);
349
504
  netPremiumAmount = netAmount;
350
505
  }