@etherisc/gif-next 0.0.2-7b53731-014 → 0.0.2-7b86057-523

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