@etherisc/gif-next 0.0.2-299fe4a-464 → 0.0.2-2b7ffff-531

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 (387) hide show
  1. package/README.md +192 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +455 -60
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +540 -70
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  42. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  44. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  46. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  47. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  48. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  50. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  51. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  52. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  53. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  54. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  55. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +479 -1748
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +2418 -1167
  62. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1388 -0
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +891 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +492 -0
  70. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  72. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  74. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  76. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  84. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  86. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  88. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IRisk.sol/IRisk.json} +2 -2
  92. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  94. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  96. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +393 -85
  98. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  100. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +448 -0
  102. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +182 -80
  104. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +209 -63
  106. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +240 -55
  108. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +330 -56
  110. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +430 -74
  112. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
  114. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +485 -37
  118. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  119. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +853 -0
  120. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  122. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/Registry.sol/Registry.json +597 -122
  124. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  125. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1237 -0
  126. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +525 -0
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  133. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  135. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  138. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +180 -59
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +60 -19
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  148. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  149. package/artifacts/contracts/{instance/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +209 -80
  150. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  151. package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +227 -59
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  153. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  155. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  156. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +83 -19
  158. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestFee.sol/TestFee.json +30 -6
  160. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  162. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  164. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestService.sol/TestService.json +277 -84
  166. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  168. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +14 -18
  170. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +106 -50
  172. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  173. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  174. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  175. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
  176. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  178. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  180. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  182. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  184. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  185. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  186. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  188. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  190. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  192. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  194. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  196. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  198. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  200. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  202. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  204. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  206. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionLib.json +101 -2
  210. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  211. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  212. package/contracts/components/BaseComponent.sol +26 -24
  213. package/contracts/components/Distribution.sol +160 -0
  214. package/contracts/components/IBaseComponent.sol +9 -3
  215. package/contracts/components/IDistributionComponent.sol +44 -0
  216. package/contracts/components/IPoolComponent.sol +14 -9
  217. package/contracts/components/IProductComponent.sol +25 -9
  218. package/contracts/components/Pool.sol +98 -29
  219. package/contracts/components/Product.sol +212 -32
  220. package/contracts/experiment/cloning/Cloner.sol +47 -0
  221. package/contracts/instance/AccessManagedSimple.sol +115 -0
  222. package/contracts/instance/AccessManagerSimple.sol +692 -0
  223. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  224. package/contracts/instance/IInstance.sol +29 -40
  225. package/contracts/instance/IInstanceService.sol +30 -0
  226. package/contracts/instance/Instance.sol +426 -45
  227. package/contracts/instance/InstanceAccessManager.sol +288 -0
  228. package/contracts/instance/InstanceReader.sol +306 -0
  229. package/contracts/instance/InstanceService.sol +182 -0
  230. package/contracts/instance/InstanceServiceManager.sol +56 -0
  231. package/contracts/instance/base/ComponentServiceBase.sol +124 -0
  232. package/contracts/instance/base/IInstanceBase.sol +23 -0
  233. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  234. package/contracts/instance/base/ILifecycle.sol +30 -0
  235. package/contracts/instance/base/KeyValueStore.sol +172 -0
  236. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  237. package/contracts/instance/module/IAccess.sol +38 -0
  238. package/contracts/instance/module/IBundle.sol +20 -0
  239. package/contracts/instance/module/IDistribution.sol +39 -0
  240. package/contracts/instance/module/IPolicy.sol +45 -0
  241. package/contracts/instance/module/IRisk.sol +11 -0
  242. package/contracts/instance/module/ISetup.sol +44 -0
  243. package/contracts/instance/module/ITreasury.sol +23 -0
  244. package/contracts/instance/service/ComponentOwnerService.sol +246 -103
  245. package/contracts/instance/service/DistributionService.sol +87 -0
  246. package/contracts/instance/service/DistributionServiceManager.sol +53 -0
  247. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  248. package/contracts/instance/service/IDistributionService.sol +12 -0
  249. package/contracts/instance/service/IPoolService.sol +8 -1
  250. package/contracts/instance/service/IProductService.sol +56 -7
  251. package/contracts/instance/service/PoolService.sol +138 -43
  252. package/contracts/instance/service/PoolServiceManager.sol +53 -0
  253. package/contracts/registry/ChainNft.sol +80 -37
  254. package/contracts/registry/IRegistry.sol +62 -25
  255. package/contracts/registry/IRegistryService.sol +33 -0
  256. package/contracts/registry/ITransferInterceptor.sol +6 -0
  257. package/contracts/registry/Registry.sol +375 -267
  258. package/contracts/registry/RegistryService.sol +399 -0
  259. package/contracts/registry/RegistryServiceManager.sol +80 -0
  260. package/contracts/registry/TokenRegistry.sol +111 -0
  261. package/contracts/shared/ContractDeployerLib.sol +72 -0
  262. package/contracts/shared/ERC165.sol +6 -2
  263. package/contracts/shared/INftOwnable.sol +22 -0
  264. package/contracts/shared/IRegisterable.sol +8 -15
  265. package/contracts/{instance/service → shared}/IService.sol +3 -3
  266. package/contracts/shared/IVersionable.sol +56 -12
  267. package/contracts/shared/NftOwnable.sol +136 -0
  268. package/contracts/shared/ProxyManager.sol +94 -0
  269. package/contracts/shared/Registerable.sol +63 -59
  270. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  271. package/contracts/shared/Service.sol +55 -0
  272. package/contracts/shared/TokenHandler.sol +27 -0
  273. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  274. package/contracts/shared/Versionable.sol +112 -57
  275. package/contracts/test/TestFee.sol +4 -4
  276. package/contracts/test/TestRegisterable.sol +5 -6
  277. package/contracts/test/TestRoleId.sol +2 -2
  278. package/contracts/test/TestService.sol +6 -17
  279. package/contracts/test/TestVersion.sol +4 -7
  280. package/contracts/test/TestVersionable.sol +2 -5
  281. package/contracts/test/Usdc.sol +26 -0
  282. package/contracts/types/DistributorType.sol +55 -0
  283. package/contracts/types/Fee.sol +44 -20
  284. package/contracts/types/Key32.sol +50 -0
  285. package/contracts/types/NftId.sol +16 -1
  286. package/contracts/types/NumberId.sol +52 -0
  287. package/contracts/types/ObjectType.sol +51 -14
  288. package/contracts/types/Referral.sol +85 -0
  289. package/contracts/types/RiskId.sol +43 -0
  290. package/contracts/types/RoleId.sol +64 -11
  291. package/contracts/types/StateId.sol +12 -2
  292. package/contracts/types/Timestamp.sol +7 -3
  293. package/contracts/types/UFixed.sol +144 -25
  294. package/contracts/types/Version.sol +42 -26
  295. package/package.json +7 -3
  296. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  297. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  298. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  299. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  300. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  303. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  306. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  308. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  309. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  311. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  313. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  314. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  315. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  316. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  317. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  319. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  322. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  325. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  327. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  328. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  330. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  332. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +0 -10
  334. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +0 -10
  336. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -538
  339. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  340. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  341. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -538
  343. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  344. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  346. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -685
  347. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  348. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  349. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  350. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  351. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  352. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  353. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  354. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  355. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  356. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  357. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  358. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  359. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  360. package/contracts/experiment/statemachine/README.md +0 -112
  361. package/contracts/instance/IInstanceLinked.sol +0 -8
  362. package/contracts/instance/IServiceLinked.sol +0 -12
  363. package/contracts/instance/InstanceBase.sol +0 -74
  364. package/contracts/instance/module/access/Access.sol +0 -149
  365. package/contracts/instance/module/access/IAccess.sol +0 -53
  366. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  367. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  368. package/contracts/instance/module/component/ComponentModule.sol +0 -104
  369. package/contracts/instance/module/component/IComponent.sol +0 -53
  370. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  371. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  372. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  373. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  374. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  375. package/contracts/instance/module/product/IProductModule.sol +0 -6
  376. package/contracts/instance/module/product/ProductModule.sol +0 -8
  377. package/contracts/instance/module/treasury/ITreasury.sol +0 -104
  378. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  379. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -148
  380. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  381. package/contracts/instance/service/ProductService.sol +0 -358
  382. package/contracts/instance/service/ServiceBase.sol +0 -39
  383. package/contracts/registry/IChainNft.sol +0 -21
  384. package/contracts/registry/IRegistryLinked.sol +0 -8
  385. package/contracts/shared/IOwnable.sol +0 -6
  386. package/contracts/test/TestPool.sol +0 -22
  387. package/contracts/test/TestProduct.sol +0 -44
@@ -1,40 +1,46 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {IRegisterable} from "../shared/IRegisterable.sol";
7
6
  import {Registerable} from "../shared/Registerable.sol";
8
7
 
9
8
  import {IRegistry} from "../registry/IRegistry.sol";
10
9
  import {IInstance} from "../instance/IInstance.sol";
11
- import {IServiceLinked} from "../instance/IServiceLinked.sol";
12
10
 
13
11
  import {IInstance} from "../instance/IInstance.sol";
14
- import {IComponent, IComponentModule} from "../instance/module/component/IComponent.sol";
15
12
  import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
16
13
  import {IBaseComponent} from "./IBaseComponent.sol";
17
- import {NftId} from "../types/NftId.sol";
14
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
15
+ import {ObjectType} from "../types/ObjectType.sol";
18
16
 
19
17
  abstract contract BaseComponent is
20
18
  Registerable,
21
19
  IBaseComponent
22
20
  {
21
+ using NftIdLib for NftId;
22
+
23
23
  IComponentOwnerService internal _componentOwnerService;
24
24
 
25
25
  address internal _deployer;
26
26
  address internal _wallet;
27
27
  IERC20Metadata internal _token;
28
28
  IInstance internal _instance;
29
+ NftId internal _productNftId;
29
30
 
30
31
  constructor(
31
32
  address registry,
32
33
  NftId instanceNftId,
33
- address token
34
+ address token,
35
+ ObjectType componentType,
36
+ bool isInterceptor,
37
+ address initialOwner
34
38
  )
35
- Registerable(registry, instanceNftId)
36
39
  {
37
- IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
40
+ bytes memory data = "";
41
+ _initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
42
+
43
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
38
44
  _instance = IInstance(instanceInfo.objectAddress);
39
45
  require(
40
46
  _instance.supportsInterface(type(IInstance).interfaceId),
@@ -44,21 +50,8 @@ abstract contract BaseComponent is
44
50
  _componentOwnerService = _instance.getComponentOwnerService();
45
51
  _wallet = address(this);
46
52
  _token = IERC20Metadata(token);
47
- }
48
-
49
- // from registerable
50
- function register() public override(IRegisterable, Registerable) returns (NftId componentId) {
51
- require(msg.sender == getOwner(), "");
52
- require(
53
- address(_registry) != address(0),
54
- "ERROR:COB-001:REGISTRY_ZERO"
55
- );
56
- require(
57
- _registry.isRegistered(address(_instance)),
58
- "ERROR:COB:INSTANCE_NOT_REGISTERED"
59
- );
60
53
 
61
- componentId = _componentOwnerService.register(this);
54
+ _registerInterface(type(IBaseComponent).interfaceId);
62
55
  }
63
56
 
64
57
  // from component contract
@@ -79,11 +72,20 @@ abstract contract BaseComponent is
79
72
  return _wallet;
80
73
  }
81
74
 
82
- function getToken() external view override returns (IERC20Metadata token) {
75
+ function getToken() public view override returns (IERC20Metadata token) {
83
76
  return _token;
84
77
  }
85
78
 
86
- function getInstance() external view override returns (IInstance instance) {
79
+ function getInstance() public view override returns (IInstance instance) {
87
80
  return _instance;
88
81
  }
82
+
83
+ function setProductNftId(NftId productNftId) public override onlyOwner {
84
+ require(_productNftId.eq(zeroNftId()), "product nft id already set");
85
+ _productNftId = productNftId;
86
+ }
87
+
88
+ function getProductNftId() public view override returns (NftId productNftId) {
89
+ return _productNftId;
90
+ }
89
91
  }
@@ -0,0 +1,160 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {DISTRIBUTION} from "../types/ObjectType.sol";
5
+ import {IDistributionService} from "../instance/service/IDistributionService.sol";
6
+ import {IProductService} from "../instance/service/IProductService.sol";
7
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
+ import {ReferralId} from "../types/Referral.sol";
9
+ import {Fee, FeeLib} from "../types/Fee.sol";
10
+ import {BaseComponent} from "./BaseComponent.sol";
11
+ import {IDistributionComponent} from "./IDistributionComponent.sol";
12
+ import {IRegistry} from "../registry/IRegistry.sol";
13
+ import {IRegisterable} from "../shared/IRegisterable.sol";
14
+ import {ISetup} from "../instance/module/ISetup.sol";
15
+ import {Registerable} from "../shared/Registerable.sol";
16
+ import {TokenHandler} from "../shared/TokenHandler.sol";
17
+ import {InstanceReader} from "../instance/InstanceReader.sol";
18
+
19
+ contract Distribution is
20
+ BaseComponent,
21
+ IDistributionComponent
22
+ {
23
+ using NftIdLib for NftId;
24
+
25
+ Fee internal _initialDistributionFee;
26
+ bool internal _isVerifying;
27
+
28
+ IDistributionService private _distributionService;
29
+ IProductService private _productService;
30
+
31
+ modifier onlyProductService() {
32
+ require(
33
+ msg.sender == address(_productService),
34
+ "ERROR:POL-002:NOT_PRODUCT_SERVICE");
35
+ _;
36
+ }
37
+
38
+ constructor(
39
+ address registry,
40
+ NftId instanceNftId,
41
+ // TODO refactor into tokenNftId
42
+ address token,
43
+ bool verifying,
44
+ Fee memory distributionFee,
45
+ address initialOwner
46
+ )
47
+ BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
48
+ {
49
+ _isVerifying = verifying;
50
+ _initialDistributionFee = distributionFee;
51
+
52
+ _distributionService = _instance.getDistributionService();
53
+ // TODO: reactivate when services are available again
54
+ // _productService = _instance.getProductService();
55
+
56
+ _registerInterface(type(IDistributionComponent).interfaceId);
57
+ }
58
+
59
+
60
+ function setFees(
61
+ Fee memory distributionFee
62
+ )
63
+ external
64
+ override
65
+ {
66
+ _distributionService.setFees(distributionFee);
67
+ }
68
+
69
+ function calculateFeeAmount(
70
+ ReferralId referralId,
71
+ uint256 netPremiumAmount
72
+ )
73
+ external
74
+ view
75
+ virtual override
76
+ returns (uint256 feeAmount)
77
+ {
78
+ ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
79
+ Fee memory fee = setupInfo.distributionFee;
80
+ (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
81
+ }
82
+
83
+
84
+ function calculateRenewalFeeAmount(
85
+ ReferralId referralId,
86
+ uint256 netPremiumAmount
87
+ )
88
+ external
89
+ view
90
+ virtual override
91
+ returns (uint256 feeAmount)
92
+ {
93
+ // default is no fees
94
+ return 0 * netPremiumAmount;
95
+ }
96
+
97
+ function processSale(
98
+ ReferralId referralId,
99
+ uint256 feeAmount
100
+ )
101
+ external
102
+ onlyProductService
103
+ virtual override
104
+ {
105
+ // default is no action
106
+ }
107
+
108
+ function processRenewal(
109
+ ReferralId referralId,
110
+ uint256 feeAmount
111
+ )
112
+ external
113
+ onlyProductService
114
+ virtual override
115
+ {
116
+ // default is no action
117
+ }
118
+
119
+ function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
120
+ // default is invalid
121
+ return false;
122
+ }
123
+
124
+ function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
125
+ InstanceReader reader = _instance.getInstanceReader();
126
+ return reader.getDistributionSetupInfo(getNftId());
127
+ }
128
+
129
+
130
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
131
+ function isVerifying() external view returns (bool verifying) {
132
+ return _isVerifying;
133
+ }
134
+
135
+ // from IRegisterable
136
+
137
+ function getInitialInfo()
138
+ public
139
+ view
140
+ override (IRegisterable, Registerable)
141
+ returns(IRegistry.ObjectInfo memory, bytes memory)
142
+ {
143
+ (
144
+ IRegistry.ObjectInfo memory info,
145
+ ) = super.getInitialInfo();
146
+
147
+ return (
148
+ info,
149
+ abi.encode(
150
+ ISetup.DistributionSetupInfo(
151
+ _productNftId,
152
+ TokenHandler(address(_token)),
153
+ _initialDistributionFee,
154
+ _isVerifying,
155
+ address(this)
156
+ )
157
+ )
158
+ );
159
+ }
160
+ }
@@ -1,12 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IRegisterable} from "../shared/IRegisterable.sol";
7
- import {IInstanceLinked} from "../instance/IInstanceLinked.sol";
7
+ import {IInstance} from "../instance/IInstance.sol";
8
+ import {NftId} from "../types/NftId.sol";
8
9
 
9
- interface IBaseComponent is IRegisterable, IInstanceLinked {
10
+ interface IBaseComponent is IRegisterable {
10
11
 
11
12
  function lock() external;
12
13
 
@@ -16,4 +17,9 @@ interface IBaseComponent is IRegisterable, IInstanceLinked {
16
17
 
17
18
  function getWallet() external view returns (address walletAddress);
18
19
 
20
+ function getInstance() external view returns (IInstance instance);
21
+
22
+ function setProductNftId(NftId productNftId) external;
23
+ function getProductNftId() external view returns (NftId productNftId);
24
+
19
25
  }
@@ -0,0 +1,44 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Fee} from "../types/Fee.sol";
5
+ import {ReferralId} from "../types/Referral.sol";
6
+ import {NftId} from "../types/NftId.sol";
7
+ import {ISetup} from "../instance/module/ISetup.sol";
8
+
9
+ interface IDistributionComponent {
10
+
11
+ function setFees(
12
+ Fee memory distributionFee
13
+ ) external;
14
+
15
+ function calculateFeeAmount(
16
+ ReferralId referralId,
17
+ uint256 netPremiumAmount
18
+ ) external view returns (uint256 feeAmount);
19
+
20
+ function calculateRenewalFeeAmount(
21
+ ReferralId referralId,
22
+ uint256 netPremiumAmount
23
+ ) external view returns (uint256 feeAmount);
24
+
25
+ /// @dev callback from product service when selling a policy for a specific referralId
26
+ /// the used referral id and the collected fee are provided as parameters
27
+ /// the component implementation can then process this information accordingly
28
+ function processSale(
29
+ ReferralId referralId,
30
+ uint256 feeAmount
31
+ ) external;
32
+
33
+ /// @dev callback from product service when a policy is renews for a specific referralId
34
+ function processRenewal(
35
+ ReferralId referralId,
36
+ uint256 feeAmount
37
+ ) external;
38
+
39
+ /// @dev returns true iff the referral id is valid
40
+ function referralIsValid(ReferralId referralId) external view returns (bool isValid);
41
+
42
+ /// @dev returns true iff the component needs to be called when selling/renewing policis
43
+ function isVerifying() external view returns (bool verifying);
44
+ }
@@ -1,24 +1,35 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../types/NftId.sol";
5
5
  import {Fee} from "../types/Fee.sol";
6
6
  import {UFixed} from "../types/UFixed.sol";
7
- import {IBaseComponent} from "./IBaseComponent.sol";
8
7
 
9
- interface IPoolComponent is IBaseComponent {
8
+ interface IPoolComponent {
10
9
 
11
10
  event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
12
11
 
12
+ function setFees(
13
+ Fee memory poolFee,
14
+ Fee memory stakingFee,
15
+ Fee memory performanceFee
16
+ ) external;
17
+
13
18
  /**
14
19
  * @dev creates a new bundle for this pool.
15
20
  */
16
21
  function createBundle(
22
+ Fee memory fee,
17
23
  uint256 initialAmount,
18
24
  uint256 lifetime,
19
25
  bytes memory filter
20
26
  ) external returns(NftId bundleNftId);
21
27
 
28
+ function setBundleFee(
29
+ NftId policyNftId,
30
+ Fee memory fee
31
+ ) external;
32
+
22
33
  /**
23
34
  * @dev this is a callback function that is called by the product service when underwriting a policy.
24
35
  * the pool has the option to check the details and object to underwriting by reverting.
@@ -48,10 +59,4 @@ interface IPoolComponent is IBaseComponent {
48
59
 
49
60
  function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
50
61
 
51
- function getStakingFee() external view returns (Fee memory stakingFee);
52
-
53
- function getPerformanceFee()
54
- external
55
- view
56
- returns (Fee memory performanceFee);
57
62
  }
@@ -1,19 +1,35 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
4
  import {Fee} from "../types/Fee.sol";
6
- import {IBaseComponent} from "./IBaseComponent.sol";
5
+ import {NftId} from "../types/NftId.sol";
6
+ import {ReferralId} from "../types/Referral.sol";
7
+ import {RiskId} from "../types/RiskId.sol";
8
+
9
+ interface IProductComponent {
7
10
 
8
- interface IProductComponent is IBaseComponent {
9
11
  function setFees(
10
- Fee memory policyFee,
12
+ Fee memory productFee,
11
13
  Fee memory processingFee
12
14
  ) external;
13
15
 
14
- function getPoolNftId() external view returns (NftId poolNftId);
15
-
16
- function getPolicyFee() external view returns (Fee memory policyFee);
16
+ function calculatePremium(
17
+ uint256 sumInsuredAmount,
18
+ RiskId riskId,
19
+ uint256 lifetime,
20
+ bytes memory applicationData,
21
+ ReferralId referralId,
22
+ NftId bundleNftId
23
+ ) external view returns (uint256 premiumAmount);
24
+
25
+ function calculateNetPremium(
26
+ uint256 sumInsuredAmount,
27
+ RiskId riskId,
28
+ uint256 lifetime,
29
+ bytes memory applicationData
30
+ ) external view returns (uint256 netPremiumAmount);
17
31
 
18
- function getProcessingFee() external view returns (Fee memory processingFee);
32
+
33
+ function getPoolNftId() external view returns (NftId poolNftId);
34
+ function getDistributionNftId() external view returns (NftId distributionNftId);
19
35
  }
@@ -1,20 +1,37 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {ObjectType, POOL} from "../types/ObjectType.sol";
5
5
  import {IProductService} from "../instance/service/IProductService.sol";
6
6
  import {IPoolService} from "../instance/service/IPoolService.sol";
7
- import {NftId} from "../types/NftId.sol";
7
+ import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
8
  import {Fee} from "../types/Fee.sol";
9
9
  import {UFixed} from "../types/UFixed.sol";
10
10
  import {IPoolComponent} from "./IPoolComponent.sol";
11
11
  import {BaseComponent} from "./BaseComponent.sol";
12
+ import {TokenHandler} from "../shared/TokenHandler.sol";
13
+ import {ISetup} from "../instance/module/ISetup.sol";
14
+
15
+ import {IRegistry} from "../registry/IRegistry.sol";
16
+
17
+ // import {IPool} from "../instance/module/pool/IPoolModule.sol";
18
+ import {ITreasury} from "../instance/module/ITreasury.sol";
19
+ import {ISetup} from "../instance/module/ISetup.sol";
20
+ import {InstanceReader} from "../instance/InstanceReader.sol";
21
+
22
+ import {IRegisterable} from "../shared/IRegisterable.sol";
23
+ import {Registerable} from "../shared/Registerable.sol";
12
24
 
13
25
  contract Pool is BaseComponent, IPoolComponent {
26
+ using NftIdLib for NftId;
14
27
 
15
28
  bool internal _isVerifying;
16
29
  UFixed internal _collateralizationLevel;
17
30
 
31
+ Fee internal _initialPoolFee;
32
+ Fee internal _initialStakingFee;
33
+ Fee internal _initialPerformanceFee;
34
+
18
35
  // may be used to interact with instance by derived contracts
19
36
  IPoolService internal _poolService;
20
37
 
@@ -40,20 +57,32 @@ contract Pool is BaseComponent, IPoolComponent {
40
57
  NftId instanceNftId,
41
58
  // TODO refactor into tokenNftId
42
59
  address token,
60
+ bool isInterceptor,
43
61
  bool verifying,
44
- UFixed collateralizationLevel
62
+ UFixed collateralizationLevel,
63
+ Fee memory poolFee,
64
+ Fee memory stakingFee,
65
+ Fee memory performanceFee,
66
+ address initialOwner
45
67
  )
46
- BaseComponent(registry, instanceNftId, token)
68
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
47
69
  {
48
70
  _isVerifying = verifying;
49
71
  // TODO add validation
50
72
  _collateralizationLevel = collateralizationLevel;
73
+ _initialPoolFee = poolFee;
74
+ _initialStakingFee = stakingFee;
75
+ _initialPerformanceFee = performanceFee;
51
76
 
52
77
  _poolService = _instance.getPoolService();
53
- _productService = _instance.getProductService();
78
+ // TODO: reactivate when services are available again
79
+ // _productService = _instance.getProductService();
80
+
81
+ _registerInterface(type(IPoolComponent).interfaceId);
54
82
  }
55
83
 
56
84
  function createBundle(
85
+ Fee memory fee,
57
86
  uint256 initialAmount,
58
87
  uint256 lifetime,
59
88
  bytes memory filter
@@ -65,6 +94,7 @@ contract Pool is BaseComponent, IPoolComponent {
65
94
  address owner = msg.sender;
66
95
  bundleNftId = _poolService.createBundle(
67
96
  owner,
97
+ fee,
68
98
  initialAmount,
69
99
  lifetime,
70
100
  filter
@@ -115,6 +145,67 @@ contract Pool is BaseComponent, IPoolComponent {
115
145
  return _collateralizationLevel;
116
146
  }
117
147
 
148
+ function setFees(
149
+ Fee memory poolFee,
150
+ Fee memory stakingFee,
151
+ Fee memory performanceFee
152
+ )
153
+ external
154
+ onlyOwner
155
+ override
156
+ {
157
+ _poolService.setFees(poolFee, stakingFee, performanceFee);
158
+ }
159
+
160
+ function setBundleFee(
161
+ NftId bundleNftId,
162
+ Fee memory fee
163
+ )
164
+ external
165
+ override
166
+ // TODO add onlyBundleOwner
167
+ {
168
+ _poolService.setBundleFee(bundleNftId, fee);
169
+ }
170
+
171
+ function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
172
+ InstanceReader reader = _instance.getInstanceReader();
173
+ return reader.getPoolSetupInfo(getNftId());
174
+ }
175
+
176
+ // from IRegisterable
177
+
178
+ // TODO used only once, occupies space
179
+ // TODO do not use super
180
+ function getInitialInfo()
181
+ public
182
+ view
183
+ override (IRegisterable, Registerable)
184
+ returns (IRegistry.ObjectInfo memory, bytes memory)
185
+ {
186
+ (
187
+ IRegistry.ObjectInfo memory info,
188
+ ) = super.getInitialInfo();
189
+
190
+ return (
191
+ info,
192
+ abi.encode(
193
+ ISetup.PoolSetupInfo(
194
+ _productNftId,
195
+ TokenHandler(address(_token)),
196
+ _collateralizationLevel,
197
+ _initialPoolFee,
198
+ _initialStakingFee,
199
+ _initialPerformanceFee,
200
+ _isVerifying,
201
+ _wallet
202
+ )
203
+ )
204
+ );
205
+ }
206
+
207
+ // Internals
208
+
118
209
  function _underwrite(
119
210
  NftId policyNftId,
120
211
  bytes memory policyData,
@@ -133,6 +224,7 @@ contract Pool is BaseComponent, IPoolComponent {
133
224
 
134
225
  function _createBundle(
135
226
  address bundleOwner,
227
+ Fee memory fee,
136
228
  uint256 amount,
137
229
  uint256 lifetime,
138
230
  bytes calldata filter
@@ -142,33 +234,10 @@ contract Pool is BaseComponent, IPoolComponent {
142
234
  {
143
235
  bundleNftId = _poolService.createBundle(
144
236
  bundleOwner,
237
+ fee,
145
238
  amount,
146
239
  lifetime,
147
240
  filter
148
241
  );
149
242
  }
150
-
151
- // from pool component
152
- function getStakingFee()
153
- external
154
- view
155
- override
156
- returns (Fee memory stakingFee)
157
- {
158
- return _instance.getPoolSetup(getNftId()).stakingFee;
159
- }
160
-
161
- function getPerformanceFee()
162
- external
163
- view
164
- override
165
- returns (Fee memory performanceFee)
166
- {
167
- return _instance.getPoolSetup(getNftId()).performanceFee;
168
- }
169
-
170
- // from registerable
171
- function getType() public pure override returns (ObjectType) {
172
- return POOL();
173
- }
174
243
  }