@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f30e0eb-805

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 (379) hide show
  1. package/README.md +140 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +938 -229
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +192 -168
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +755 -50
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +818 -236
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +627 -224
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2185 -189
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +299 -153
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +993 -1183
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +571 -177
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +232 -210
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +520 -190
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +352 -75
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/base/ComponentService.sol/ComponentService.json} +236 -126
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +69 -43
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1732 -0
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +150 -207
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -217
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +47 -414
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +824 -0
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +657 -0
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +373 -61
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +234 -216
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +333 -188
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +229 -313
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +304 -138
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  208. package/contracts/components/Component.sol +251 -0
  209. package/contracts/components/Distribution.sol +200 -86
  210. package/contracts/components/IComponent.sol +74 -0
  211. package/contracts/components/IDistributionComponent.sol +44 -16
  212. package/contracts/components/IPoolComponent.sol +88 -37
  213. package/contracts/components/IProductComponent.sol +10 -5
  214. package/contracts/components/Pool.sol +217 -177
  215. package/contracts/components/Product.sol +130 -134
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  217. package/contracts/instance/BundleManager.sol +127 -0
  218. package/contracts/instance/Cloneable.sol +51 -0
  219. package/contracts/instance/IInstance.sol +81 -11
  220. package/contracts/instance/IInstanceService.sol +56 -1
  221. package/contracts/instance/Instance.sol +156 -265
  222. package/contracts/instance/InstanceAccessManager.sol +410 -176
  223. package/contracts/instance/InstanceReader.sol +39 -29
  224. package/contracts/instance/InstanceService.sol +448 -55
  225. package/contracts/instance/InstanceServiceManager.sol +11 -13
  226. package/contracts/instance/ObjectManager.sol +82 -0
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/base/KeyValueStore.sol +5 -2
  229. package/contracts/instance/base/Lifecycle.sol +11 -2
  230. package/contracts/instance/module/IAccess.sol +36 -20
  231. package/contracts/instance/module/IBundle.sol +2 -0
  232. package/contracts/instance/module/IComponents.sol +35 -0
  233. package/contracts/instance/module/IDistribution.sol +2 -0
  234. package/contracts/instance/module/IPolicy.sol +30 -3
  235. package/contracts/instance/module/ISetup.sol +9 -19
  236. package/contracts/instance/service/ApplicationService.sol +350 -0
  237. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  238. package/contracts/instance/service/BundleService.sol +336 -0
  239. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  240. package/contracts/instance/service/ClaimService.sol +151 -0
  241. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  242. package/contracts/instance/service/DistributionService.sol +467 -0
  243. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +62 -0
  246. package/contracts/instance/service/IClaimService.sol +61 -0
  247. package/contracts/instance/service/IDistributionService.sol +86 -0
  248. package/contracts/instance/service/IPolicyService.sol +72 -0
  249. package/contracts/instance/service/IPoolService.sol +21 -23
  250. package/contracts/instance/service/IProductService.sol +6 -73
  251. package/contracts/instance/service/PolicyService.sol +403 -0
  252. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  253. package/contracts/instance/service/PoolService.sol +220 -0
  254. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  255. package/contracts/instance/service/ProductService.sol +241 -0
  256. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  257. package/contracts/registry/ChainNft.sol +9 -1
  258. package/contracts/registry/IRegistry.sol +52 -8
  259. package/contracts/registry/IRegistryService.sol +46 -14
  260. package/contracts/registry/ITransferInterceptor.sol +1 -0
  261. package/contracts/registry/Registry.sol +270 -226
  262. package/contracts/registry/RegistryAccessManager.sol +216 -0
  263. package/contracts/registry/RegistryService.sol +110 -266
  264. package/contracts/registry/RegistryServiceManager.sol +24 -26
  265. package/contracts/registry/ReleaseManager.sol +322 -0
  266. package/contracts/registry/TokenRegistry.sol +116 -0
  267. package/contracts/shared/ERC165.sol +14 -8
  268. package/contracts/shared/INftOwnable.sol +11 -10
  269. package/contracts/shared/IPolicyHolder.sol +26 -0
  270. package/contracts/shared/IRegisterable.sol +4 -6
  271. package/contracts/shared/IRegistryLinked.sol +12 -0
  272. package/contracts/shared/IService.sol +4 -1
  273. package/contracts/shared/IVersionable.sol +4 -47
  274. package/contracts/shared/NftOwnable.sol +67 -83
  275. package/contracts/shared/PolicyHolder.sol +81 -0
  276. package/contracts/shared/ProxyManager.sol +100 -25
  277. package/contracts/shared/Registerable.sol +16 -31
  278. package/contracts/shared/RegistryLinked.sol +48 -0
  279. package/contracts/shared/Service.sol +26 -22
  280. package/contracts/shared/TokenHandler.sol +11 -5
  281. package/contracts/shared/Versionable.sol +4 -92
  282. package/contracts/test/TestRegisterable.sol +1 -1
  283. package/contracts/test/TestService.sol +4 -3
  284. package/contracts/types/Blocknumber.sol +1 -0
  285. package/contracts/types/ClaimId.sol +52 -0
  286. package/contracts/types/DistributorType.sol +2 -2
  287. package/contracts/types/Fee.sol +1 -0
  288. package/contracts/types/NftId.sol +8 -0
  289. package/contracts/types/NftIdSet.sol +26 -24
  290. package/contracts/types/ObjectType.sol +10 -5
  291. package/contracts/types/PayoutId.sol +54 -0
  292. package/contracts/types/Referral.sol +4 -0
  293. package/contracts/types/RoleId.sol +26 -11
  294. package/contracts/types/Seconds.sol +54 -0
  295. package/contracts/types/StateId.sol +5 -0
  296. package/contracts/types/Timestamp.sol +13 -13
  297. package/contracts/types/UFixed.sol +1 -0
  298. package/contracts/types/Version.sol +5 -1
  299. package/package.json +3 -3
  300. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  344. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  345. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  346. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  347. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  348. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  349. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  350. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  351. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  353. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  354. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  355. package/contracts/components/BaseComponent.sol +0 -86
  356. package/contracts/components/IBaseComponent.sol +0 -24
  357. package/contracts/experiment/cloning/Cloner.sol +0 -47
  358. package/contracts/experiment/errors/Require.sol +0 -38
  359. package/contracts/experiment/errors/Revert.sol +0 -44
  360. package/contracts/experiment/inheritance/A.sol +0 -53
  361. package/contracts/experiment/inheritance/B.sol +0 -28
  362. package/contracts/experiment/inheritance/C.sol +0 -34
  363. package/contracts/experiment/inheritance/IA.sol +0 -13
  364. package/contracts/experiment/inheritance/IB.sol +0 -10
  365. package/contracts/experiment/inheritance/IC.sol +0 -12
  366. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  367. package/contracts/experiment/statemachine/ISM.sol +0 -25
  368. package/contracts/experiment/statemachine/SM.sol +0 -57
  369. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  370. package/contracts/experiment/types/TypeA.sol +0 -47
  371. package/contracts/experiment/types/TypeB.sol +0 -29
  372. package/contracts/instance/AccessManagedSimple.sol +0 -114
  373. package/contracts/instance/AccessManagerSimple.sol +0 -682
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  376. package/contracts/instance/base/IInstanceBase.sol +0 -23
  377. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  378. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  379. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -4,10 +4,11 @@ pragma solidity ^0.8.19;
4
4
  import {DISTRIBUTION} from "../types/ObjectType.sol";
5
5
  import {IDistributionService} from "../instance/service/IDistributionService.sol";
6
6
  import {IProductService} from "../instance/service/IProductService.sol";
7
- import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
8
- import {ReferralId} from "../types/Referral.sol";
7
+ import {NftId, zeroNftId, NftIdLib, toNftId} from "../types/NftId.sol";
8
+ import {ReferralId, ReferralStatus, ReferralLib} from "../types/Referral.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
- import {BaseComponent} from "./BaseComponent.sol";
10
+ import {Component} from "./Component.sol";
11
+ import {IDistribution} from "../instance/module/IDistribution.sol";
11
12
  import {IDistributionComponent} from "./IDistributionComponent.sol";
12
13
  import {IRegistry} from "../registry/IRegistry.sol";
13
14
  import {IRegisterable} from "../shared/IRegisterable.sol";
@@ -15,73 +16,200 @@ import {ISetup} from "../instance/module/ISetup.sol";
15
16
  import {Registerable} from "../shared/Registerable.sol";
16
17
  import {TokenHandler} from "../shared/TokenHandler.sol";
17
18
  import {InstanceReader} from "../instance/InstanceReader.sol";
19
+ import {UFixed} from "../types/UFixed.sol";
20
+ import {DistributorType} from "../types/DistributorType.sol";
21
+ import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
22
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
18
23
 
19
- contract Distribution is
20
- BaseComponent,
24
+
25
+ abstract contract Distribution is
26
+ Component,
21
27
  IDistributionComponent
22
28
  {
23
- using NftIdLib for NftId;
24
-
25
- Fee internal _initialDistributionFee;
26
- bool internal _isVerifying;
29
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.Distribution")) - 1)) & ~bytes32(uint256(0xff));
30
+ bytes32 public constant DISTRIBUTION_STORAGE_LOCATION_V1 = 0xaab7c5ea03d290056d6c060e0833d3ebcbe647f7694616a2ec52738a64b2f900;
27
31
 
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
- _;
32
+ struct DistributionStorage {
33
+ Fee _minDistributionOwnerFee;
34
+ Fee _distributionFee;
35
+ TokenHandler _tokenHandler;
36
+ IDistributionService _distributionService;
37
+ mapping(address distributor => NftId distributorNftId) _distributorNftId;
36
38
  }
37
39
 
38
- constructor(
40
+ function initializeDistribution(
39
41
  address registry,
40
42
  NftId instanceNftId,
41
- NftId productNftId,
42
- // TODO refactor into tokenNftId
43
+ string memory name,
43
44
  address token,
44
- bool verifying,
45
+ Fee memory minDistributionOwnerFee,
45
46
  Fee memory distributionFee,
46
- address initialOwner
47
+ address initialOwner,
48
+ bytes memory registryData // writeonly data that will saved in the object info record of the registry
47
49
  )
48
- BaseComponent(registry, instanceNftId, productNftId, token, DISTRIBUTION(), true, initialOwner)
50
+ public
51
+ virtual
52
+ onlyInitializing()
49
53
  {
50
- _isVerifying = verifying;
51
- _initialDistributionFee = distributionFee;
54
+ initializeComponent(registry, instanceNftId, name, token, DISTRIBUTION(), true, initialOwner, registryData);
52
55
 
53
- // TODO: reactivate when services are available again
54
- // _distributionService = _instance.getDistributionService();
55
- // _productService = _instance.getProductService();
56
+ DistributionStorage storage $ = _getDistributionStorage();
57
+ // TODO add validation
58
+ $._minDistributionOwnerFee = minDistributionOwnerFee;
59
+ $._distributionFee = distributionFee;
60
+ $._tokenHandler = new TokenHandler(token);
61
+ $._distributionService = getInstance().getDistributionService();
56
62
 
57
- _registerInterface(type(IDistributionComponent).interfaceId);
63
+ registerInterface(type(IDistributionComponent).interfaceId);
58
64
  }
59
65
 
60
-
61
66
  function setFees(
67
+ Fee memory minDistributionOwnerFee,
62
68
  Fee memory distributionFee
63
69
  )
64
70
  external
65
71
  override
72
+ onlyOwner
73
+ restricted()
66
74
  {
67
- _distributionService.setFees(distributionFee);
75
+ _getDistributionStorage()._distributionService.setFees(minDistributionOwnerFee, distributionFee);
68
76
  }
69
77
 
70
- function calculateFeeAmount(
71
- ReferralId referralId,
72
- uint256 netPremiumAmount
78
+ function getDistributionFee() external view returns (Fee memory distributionFee) {
79
+ DistributionStorage storage $ = _getDistributionStorage();
80
+ return $._distributionFee;
81
+ }
82
+
83
+ function createDistributorType(
84
+ string memory name,
85
+ UFixed minDiscountPercentage,
86
+ UFixed maxDiscountPercentage,
87
+ UFixed commissionPercentage,
88
+ uint32 maxReferralCount,
89
+ uint32 maxReferralLifetime,
90
+ bool allowSelfReferrals,
91
+ bool allowRenewals,
92
+ bytes memory data
93
+ )
94
+ public
95
+ returns (DistributorType distributorType)
96
+ {
97
+ DistributionStorage storage $ = _getDistributionStorage();
98
+ distributorType = $._distributionService.createDistributorType(
99
+ name,
100
+ minDiscountPercentage,
101
+ maxDiscountPercentage,
102
+ commissionPercentage,
103
+ maxReferralCount,
104
+ maxReferralLifetime,
105
+ allowSelfReferrals,
106
+ allowRenewals,
107
+ data);
108
+ }
109
+
110
+ function createDistributor(
111
+ address distributor,
112
+ DistributorType distributorType,
113
+ bytes memory data
114
+ )
115
+ public
116
+ returns(NftId distributorNftId)
117
+ {
118
+ DistributionStorage storage $ = _getDistributionStorage();
119
+ require($._distributorNftId[distributor].eqz(), "ERROR:DST-030:ALREADY_DISTRIBUTOR");
120
+
121
+ distributorNftId = $._distributionService.createDistributor(
122
+ distributor,
123
+ distributorType,
124
+ data);
125
+
126
+ $._distributorNftId[distributor] = distributorNftId;
127
+ }
128
+
129
+ function updateDistributorType(
130
+ NftId distributorNftId,
131
+ DistributorType distributorType,
132
+ bytes memory data
133
+ )
134
+ public
135
+ // TODO figure out what we need for authz
136
+ // and add it
137
+ {
138
+ DistributionStorage storage $ = _getDistributionStorage();
139
+ $._distributionService.updateDistributorType(
140
+ distributorNftId,
141
+ distributorType,
142
+ data);
143
+ }
144
+
145
+ /**
146
+ * @dev lets distributors create referral codes.
147
+ * referral codes need to be unique
148
+ */
149
+ function _createReferral(
150
+ NftId distributorNftId,
151
+ string memory code,
152
+ UFixed discountPercentage,
153
+ uint32 maxReferrals,
154
+ Timestamp expiryAt,
155
+ bytes memory data
73
156
  )
157
+ internal
158
+ returns (ReferralId referralId)
159
+ {
160
+ DistributionStorage storage $ = _getDistributionStorage();
161
+ referralId = $._distributionService.createReferral(
162
+ distributorNftId,
163
+ code,
164
+ discountPercentage,
165
+ maxReferrals,
166
+ expiryAt,
167
+ data);
168
+ }
169
+
170
+ function isDistributor(address candidate)
171
+ public
172
+ view
173
+ returns (bool)
174
+ {
175
+ DistributionStorage storage $ = _getDistributionStorage();
176
+ return $._distributorNftId[candidate].gtz();
177
+ }
178
+
179
+ function getDistributorNftId(address distributor)
180
+ public
181
+ view
182
+ returns (NftId distributorNftId)
183
+ {
184
+ DistributionStorage storage $ = _getDistributionStorage();
185
+ return $._distributorNftId[distributor];
186
+ }
187
+
188
+ function getDiscountPercentage(string memory referralCode)
74
189
  external
75
190
  view
76
- virtual override
77
- returns (uint256 feeAmount)
191
+ returns (
192
+ UFixed discountPercentage,
193
+ ReferralStatus status
194
+ )
78
195
  {
79
- ISetup.DistributionSetupInfo memory setupInfo = getSetupInfo();
80
- Fee memory fee = setupInfo.distributionFee;
81
- (feeAmount,) = FeeLib.calculateFee(fee, netPremiumAmount);
196
+ ReferralId referralId = getReferralId(referralCode);
197
+ return _getInstanceReader().getDiscountPercentage(referralId);
82
198
  }
83
199
 
84
200
 
201
+ function getReferralId(
202
+ string memory referralCode
203
+ )
204
+ public
205
+ view
206
+ returns (ReferralId referralId)
207
+ {
208
+ return ReferralLib.toReferralId(
209
+ getNftId(),
210
+ referralCode);
211
+ }
212
+
85
213
  function calculateRenewalFeeAmount(
86
214
  ReferralId referralId,
87
215
  uint256 netPremiumAmount
@@ -95,72 +223,58 @@ contract Distribution is
95
223
  return 0 * netPremiumAmount;
96
224
  }
97
225
 
98
- function processSale(
226
+ function processRenewal(
99
227
  ReferralId referralId,
100
228
  uint256 feeAmount
101
229
  )
102
230
  external
103
- onlyProductService
231
+ onlyOwner
232
+ restricted()
104
233
  virtual override
105
234
  {
106
235
  // default is no action
107
236
  }
108
237
 
109
- function processRenewal(
110
- ReferralId referralId,
111
- uint256 feeAmount
112
- )
113
- external
114
- onlyProductService
115
- virtual override
116
- {
117
- // default is no action
238
+ function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
239
+ InstanceReader reader = getInstance().getInstanceReader();
240
+ setupInfo = reader.getDistributionSetupInfo(getNftId());
241
+
242
+ // fallback to initial setup info (wallet is always != address(0))
243
+ if(setupInfo.wallet == address(0)) {
244
+ setupInfo = _getInitialSetupInfo();
245
+ }
118
246
  }
119
247
 
120
- function referralIsValid(ReferralId referralId) external view returns (bool isValid) {
121
- // default is invalid
122
- return false;
248
+ function _getInitialSetupInfo() internal view returns (ISetup.DistributionSetupInfo memory setupInfo) {
249
+ DistributionStorage storage $ = _getDistributionStorage();
250
+ return ISetup.DistributionSetupInfo(
251
+ zeroNftId(),
252
+ $._tokenHandler,
253
+ $._minDistributionOwnerFee,
254
+ $._distributionFee,
255
+ address(this),
256
+ 0
257
+ );
123
258
  }
124
259
 
125
- function getSetupInfo() public view returns (ISetup.DistributionSetupInfo memory setupInfo) {
126
- if (getNftId().eq(zeroNftId())) {
127
- return ISetup.DistributionSetupInfo(
128
- _productNftId,
129
- TokenHandler(address(0)),
130
- _initialDistributionFee,
131
- _isVerifying,
132
- address(0)
133
- );
134
- }
135
260
 
136
- InstanceReader reader = _instance.getInstanceReader();
137
- return reader.getDistributionSetupInfo(getNftId());
261
+ function _nftTransferFrom(address from, address to, uint256 tokenId) internal virtual override {
262
+ // keep track of distributor nft owner
263
+ emit LogDistributorUpdated(to, msg.sender);
264
+ DistributionStorage storage $ = _getDistributionStorage();
265
+ $._distributorNftId[from] = zeroNftId();
266
+ $._distributorNftId[to] = toNftId(tokenId);
138
267
  }
268
+
139
269
 
140
270
  /// @dev returns true iff the component needs to be called when selling/renewing policis
141
271
  function isVerifying() external view returns (bool verifying) {
142
- return _isVerifying;
272
+ return true;
143
273
  }
144
274
 
145
- // from IRegisterable
146
-
147
- function getInitialInfo()
148
- public
149
- view
150
- override (IRegisterable, Registerable)
151
- returns(IRegistry.ObjectInfo memory, bytes memory)
152
- {
153
- (
154
- IRegistry.ObjectInfo memory info,
155
- bytes memory data
156
- ) = super.getInitialInfo();
157
-
158
- return (
159
- info,
160
- abi.encode(
161
- _initialDistributionFee,
162
- _isVerifying
163
- )
164
- );
275
+ function _getDistributionStorage() private pure returns (DistributionStorage storage $) {
276
+ assembly {
277
+ $.slot := DISTRIBUTION_STORAGE_LOCATION_V1
278
+ }
165
279
  }
166
280
  }
@@ -0,0 +1,74 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {IInstance} from "../instance/IInstance.sol";
8
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
+ import {IProductService} from "../instance/service/IProductService.sol";
10
+ import {IRegisterable} from "../shared/IRegisterable.sol";
11
+ import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
12
+ import {NftId} from "../types/NftId.sol";
13
+ import {ObjectType} from "../types/ObjectType.sol";
14
+
15
+ /// @dev component base class
16
+ /// component examples are product, distribution, pool and oracle
17
+ interface IComponent is
18
+ IRegisterable,
19
+ ITransferInterceptor
20
+ {
21
+ error ErrorComponentNotChainNft(address caller);
22
+ error ErrorComponentNotProductService(address caller);
23
+ error ErrorComponentNotInstance(NftId instanceNftId);
24
+ error ErrorComponentProductNftAlreadySet();
25
+
26
+ error ErrorComponentWalletAddressZero();
27
+ error ErrorComponentWalletAddressIsSameAsCurrent();
28
+ error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
29
+
30
+ event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
31
+ event LogComponentWalletTokensTransferred(address from, address to, uint256 amount);
32
+
33
+ /// @dev locks component to disable functions that may change state related to this component, the only exception is function "unlock"
34
+ /// only component owner (nft holder) is authorizes to call this function
35
+ function lock() external;
36
+
37
+ /// @dev unlocks component to (re-)enable functions that may change state related to this component
38
+ /// only component owner (nft holder) is authorizes to call this function
39
+ function unlock() external;
40
+
41
+ /// @dev sets the wallet address for the component
42
+ /// if the current wallet has tokens, these will be transferred
43
+ /// if the new wallet address is externally owned, an approval from the
44
+ /// owner of the external wallet for the component to move all tokens must exist
45
+ function setWallet(address walletAddress) external;
46
+
47
+ /// @dev only product service may set product nft id during registration of product setup
48
+ function setProductNftId(NftId productNftId) external;
49
+
50
+ /// @dev returns the name of this component
51
+ /// to successfully register the component with an instance the name MUST be unique in the linked instance
52
+ function getName() external view returns (string memory name);
53
+
54
+ /// @dev defines which ERC20 token is used by this component
55
+ function getToken() external view returns (IERC20Metadata token);
56
+
57
+ /// @dev defines the instance to which this component is linked to
58
+ function getInstance() external view returns (IInstance instance);
59
+
60
+ /// @dev defines the wallet address used to hold the ERC20 tokens related to this component
61
+ /// the default address is the component token address
62
+ function getWallet() external view returns (address walletAddress);
63
+
64
+ /// @dev defines the product to which this component is linked to
65
+ /// this is only relevant for pool and distribution components
66
+ function getProductNftId() external view returns (NftId productNftId);
67
+
68
+ function isNftInterceptor() external view returns(bool isInterceptor);
69
+
70
+ /// @dev returns component infos for this pool
71
+ /// when registered with an instance the info is obtained from the data stored in the instance
72
+ /// when not registered the function returns the info from the component contract
73
+ function getComponentInfo() external view returns (IComponents.ComponentInfo memory info);
74
+ }
@@ -2,41 +2,69 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {Fee} from "../types/Fee.sol";
5
- import {ReferralId} from "../types/Referral.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {ISetup} from "../instance/module/ISetup.sol";
7
+ import {ReferralId, ReferralStatus} from "../types/Referral.sol";
6
8
  import {NftId} from "../types/NftId.sol";
9
+ import {DistributorType} from "../types/DistributorType.sol";
10
+ import {UFixed} from "../types/UFixed.sol";
11
+ import {Timestamp} from "../types/Timestamp.sol";
7
12
 
8
- interface IDistributionComponent {
13
+ interface IDistributionComponent is IComponent {
14
+
15
+ event LogDistributorUpdated(address to, address caller);
16
+
17
+ function getSetupInfo() external view returns (ISetup.DistributionSetupInfo memory setupInfo);
9
18
 
10
19
  function setFees(
20
+ Fee memory minDistributionOwnerFee,
11
21
  Fee memory distributionFee
12
22
  ) external;
13
23
 
14
- function calculateFeeAmount(
15
- ReferralId referralId,
16
- uint256 netPremiumAmount
17
- ) external view returns (uint256 feeAmount);
24
+ function createDistributorType(
25
+ string memory name,
26
+ UFixed minDiscountPercentage,
27
+ UFixed maxDiscountPercentage,
28
+ UFixed commissionPercentage,
29
+ uint32 maxReferralCount,
30
+ uint32 maxReferralLifetime,
31
+ bool allowSelfReferrals,
32
+ bool allowRenewals,
33
+ bytes memory data
34
+ ) external returns (DistributorType distributorType);
35
+
36
+ function createDistributor(
37
+ address distributor,
38
+ DistributorType distributorType,
39
+ bytes memory data
40
+ ) external returns(NftId distributorNftId);
41
+
42
+ function updateDistributorType(
43
+ NftId distributorNftId,
44
+ DistributorType distributorType,
45
+ bytes memory data
46
+ ) external;
18
47
 
19
48
  function calculateRenewalFeeAmount(
20
49
  ReferralId referralId,
21
50
  uint256 netPremiumAmount
22
51
  ) external view returns (uint256 feeAmount);
23
52
 
24
- /// @dev callback from product service when selling a policy for a specific referralId
25
- /// the used referral id and the collected fee are provided as parameters
26
- /// the component implementation can then process this information accordingly
27
- function processSale(
28
- ReferralId referralId,
29
- uint256 feeAmount
30
- ) external;
31
-
32
53
  /// @dev callback from product service when a policy is renews for a specific referralId
33
54
  function processRenewal(
34
55
  ReferralId referralId,
35
56
  uint256 feeAmount
36
57
  ) external;
37
58
 
38
- /// @dev returns true iff the referral id is valid
39
- function referralIsValid(ReferralId referralId) external view returns (bool isValid);
59
+ function getDiscountPercentage(
60
+ string memory referralCode
61
+ ) external view returns (UFixed discountPercentage, ReferralStatus status);
62
+
63
+ function getDistributionFee() external view returns (Fee memory distibutionFee);
64
+
65
+ function getReferralId(
66
+ string memory referralCode
67
+ ) external returns (ReferralId referralId);
40
68
 
41
69
  /// @dev returns true iff the component needs to be called when selling/renewing policis
42
70
  function isVerifying() external view returns (bool verifying);
@@ -1,62 +1,113 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {NftId} from "../types/NftId.sol";
5
4
  import {Fee} from "../types/Fee.sol";
5
+ import {IComponent} from "./IComponent.sol";
6
+ import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {NftId} from "../types/NftId.sol";
8
+ import {RoleId} from "../types/RoleId.sol";
9
+ import {Seconds} from "../types/Seconds.sol";
6
10
  import {UFixed} from "../types/UFixed.sol";
7
11
 
8
- interface IPoolComponent {
12
+ /// @dev pool components hold and manage the collateral to cover active policies
13
+ /// pools come in different flavors
14
+ interface IPoolComponent is IComponent {
9
15
 
10
- event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
16
+ error ErrorPoolNotBundleOwner(NftId bundleNftId, address caller);
17
+ error ErrorPoolNotPoolService(address caller);
11
18
 
12
- function setFees(
13
- Fee memory poolFee,
14
- Fee memory stakingFee,
15
- Fee memory performanceFee
16
- ) external;
19
+ error ErrorPoolApplicationBundleMismatch(NftId applicationNftId);
20
+
21
+ event LogPoolVerifiedByPool(address pool, NftId applicationNftId, uint256 collateralizationAmount);
22
+
23
+ /// @dev increases the staked tokens by the specified amount
24
+ /// only the bundle owner may stake tokens
25
+ /// bundle MUST be in active or locked state
26
+ function stake(NftId bundleNftId, uint256 amount) external;
27
+
28
+ /// @dev decreases the staked tokens by the specified amount
29
+ /// only the bundle owner may unstake tokens from the bundle
30
+ /// bundle MUST be in active, locked or closed state
31
+ function unstake(NftId bundleNftId, uint256 amount) external;
32
+
33
+ /// @dev extends the bundle lifetime of the bundle by the specified time
34
+ /// only the bundle owner may extend the bundle's lifetime
35
+ /// bundle MUST be in active or locked state
36
+ function extend(NftId bundleNftId, Seconds lifetimeExtension) external;
37
+
38
+ /// @dev locks the specified bundle
39
+ /// a bundle to be locked MUST be in active state
40
+ /// locked bundles may not be used to underwrite any new policy
41
+ function lockBundle(NftId bundleNftId) external;
17
42
 
18
- /**
19
- * @dev creates a new bundle for this pool.
20
- */
21
- function createBundle(
22
- Fee memory fee,
23
- uint256 initialAmount,
24
- uint256 lifetime,
25
- bytes memory filter
26
- ) external returns(NftId bundleNftId);
43
+ /// @dev unlocks the specified bundle
44
+ /// a bundle to be unlocked MUST be in locked state
45
+ function unlockBundle(NftId bundleNftId) external;
27
46
 
47
+ /// @dev close the specified bundle
48
+ /// a bundle to be closed MUST be in active or locked state
49
+ /// to close a bundle all all linked policies MUST be in closed state as well
50
+ /// closing a bundle finalizes the bundle bookkeeping including overall profit calculation
51
+ /// once a bundle is closed this action cannot be reversed
52
+ function close(NftId bundleNftId) external;
53
+
54
+ /// @dev sets the fee for the specified bundle
55
+ /// the fee is added on top of the poolFee and deducted from the premium amounts
56
+ /// via these fees individual bundler owner may earn income per policy in the context of peer to peer pools
28
57
  function setBundleFee(
29
- NftId policyNftId,
58
+ NftId bundleNftId,
30
59
  Fee memory fee
31
60
  ) external;
32
61
 
33
- /**
34
- * @dev this is a callback function that is called by the product service when underwriting a policy.
35
- * the pool has the option to check the details and object to underwriting by reverting.
36
- * the function is only called for "active" pools that ask to be involved/notified
37
- * by product related state changes.
38
- */
39
- function underwrite(
40
- NftId policyNftId,
41
- bytes memory policyData,
62
+ /// @dev sets the maximum overall capital amound held by this pool
63
+ /// function may only be called by pool owner
64
+ function setMaxCapitalAmount(uint256 maxCapitalAmount) external;
65
+
66
+ /// @dev sets the required role to create/own bundles
67
+ /// may only be called once after setting up a pool
68
+ /// may only be called by pool owner
69
+ function setBundleOwnerRole(RoleId bundleOwnerRole) external;
70
+
71
+ /// @dev update pool fees to the specified values
72
+ /// pool fees: are deducted from the premium amount and goes to the pool owner
73
+ /// staking fees: are deducted from the staked tokens by a bundle owner and goes to the pool owner
74
+ /// performance fees: when a bundle is closed a bundle specific profit is calculated
75
+ /// the performance fee is deducted from this profit and goes to the pool owner
76
+ function setFees(
77
+ Fee memory poolFee,
78
+ Fee memory stakingFee,
79
+ Fee memory performanceFee
80
+ ) external;
81
+
82
+ /// @dev this is a callback function that is called by the product service when underwriting a policy.
83
+ /// the pool has the option to check the details and object to underwriting by reverting.
84
+ /// the function is only called for "active" pools that ask to be involved/notified
85
+ /// by product related state changes.
86
+ function verifyApplication(
87
+ NftId applicationNftId,
88
+ bytes memory applicationData,
89
+ NftId bundleNftId,
42
90
  bytes memory bundleFilter,
43
91
  uint256 collateralizationAmount
44
92
  ) external;
45
93
 
46
- /**
47
- * @dev returns true iff the policy application data in policyData matches
48
- * with the bundle filter criteria encoded in bundleFilter.
49
- */
50
- function policyMatchesBundle(
51
- bytes memory policyData,
52
- bytes memory bundleFilter
94
+ /// @dev returns true iff the application matches with the bundle
95
+ /// this is a callback function that is only called if a pool declares itself as a verifying pool
96
+ /// default implementation returns true
97
+ function applicationMatchesBundle(
98
+ NftId applicationNftId,
99
+ bytes memory applicationData,
100
+ NftId bundleNftId,
101
+ bytes memory bundleFilter,
102
+ uint256 collateralizationAmount
53
103
  )
54
104
  external
55
105
  view
56
106
  returns (bool isMatching);
57
107
 
58
- function isVerifying() external view returns (bool verifying);
59
-
60
- function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
108
+ /// @dev returns pool specific infos for this pool
109
+ /// when registered with an instance the info is obtained from the data stored in the instance
110
+ /// when not registered the function returns the info from the component contract
111
+ function getPoolInfo() external view returns (IComponents.PoolInfo memory info);
61
112
 
62
113
  }