@etherisc/gif-next 0.0.2-b7cfc95-746 → 0.0.2-b8121a8-197

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 (359) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +390 -56
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +734 -106
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +143 -51
  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 +737 -58
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +577 -4
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +677 -179
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +497 -131
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +910 -364
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +194 -197
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1028 -768
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +440 -176
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -263
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +369 -299
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +330 -89
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +119 -162
  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 +61 -78
  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 +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +307 -308
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +305 -80
  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 +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1227 -259
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +453 -72
  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 +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +155 -245
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +728 -161
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +60 -291
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +81 -152
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +22 -174
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +186 -384
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +311 -114
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +223 -197
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +310 -77
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +143 -214
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +302 -77
  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 +34 -2
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +109 -195
  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 +47 -15
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +213 -231
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -34
  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 +22 -174
  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 +114 -157
  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 +135 -214
  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 +2 -2
  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 +2 -2
  208. package/contracts/components/Component.sol +156 -82
  209. package/contracts/components/Distribution.sol +198 -72
  210. package/contracts/components/IComponent.sol +51 -14
  211. package/contracts/components/IDistributionComponent.sol +44 -17
  212. package/contracts/components/IPoolComponent.sol +88 -41
  213. package/contracts/components/IProductComponent.sol +8 -3
  214. package/contracts/components/Pool.sol +210 -169
  215. package/contracts/components/Product.sol +113 -115
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  217. package/contracts/instance/BundleManager.sol +14 -16
  218. package/contracts/instance/Cloneable.sol +7 -2
  219. package/contracts/instance/IInstance.sol +51 -13
  220. package/contracts/instance/IInstanceService.sol +36 -4
  221. package/contracts/instance/Instance.sol +131 -66
  222. package/contracts/instance/InstanceAccessManager.sol +383 -164
  223. package/contracts/instance/InstanceReader.sol +9 -34
  224. package/contracts/instance/InstanceService.sol +279 -129
  225. package/contracts/instance/InstanceServiceManager.sol +1 -1
  226. package/contracts/instance/ObjectManager.sol +10 -29
  227. package/contracts/instance/base/ComponentService.sol +8 -7
  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 +22 -16
  231. package/contracts/instance/module/IBundle.sol +2 -1
  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 +7 -20
  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 +82 -39
  239. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  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 +381 -29
  243. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +30 -12
  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 +27 -49
  249. package/contracts/instance/service/IPoolService.sol +17 -2
  250. package/contracts/instance/service/PolicyService.sol +148 -283
  251. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  252. package/contracts/instance/service/PoolService.sol +124 -46
  253. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  254. package/contracts/instance/service/ProductService.sol +28 -28
  255. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  256. package/contracts/registry/ChainNft.sol +8 -0
  257. package/contracts/registry/IRegistry.sol +5 -2
  258. package/contracts/registry/IRegistryService.sol +15 -6
  259. package/contracts/registry/ITransferInterceptor.sol +1 -0
  260. package/contracts/registry/Registry.sol +43 -28
  261. package/contracts/registry/RegistryService.sol +87 -124
  262. package/contracts/registry/RegistryServiceManager.sol +13 -13
  263. package/contracts/registry/ReleaseManager.sol +28 -58
  264. package/contracts/registry/TokenRegistry.sol +16 -12
  265. package/contracts/shared/ERC165.sol +14 -12
  266. package/contracts/shared/INftOwnable.sol +11 -10
  267. package/contracts/shared/IPolicyHolder.sol +26 -0
  268. package/contracts/shared/IRegisterable.sol +4 -4
  269. package/contracts/shared/IRegistryLinked.sol +12 -0
  270. package/contracts/shared/IService.sol +2 -0
  271. package/contracts/shared/IVersionable.sol +4 -47
  272. package/contracts/shared/NftOwnable.sol +66 -82
  273. package/contracts/shared/PolicyHolder.sol +81 -0
  274. package/contracts/shared/ProxyManager.sol +100 -25
  275. package/contracts/shared/Registerable.sol +16 -32
  276. package/contracts/shared/RegistryLinked.sol +48 -0
  277. package/contracts/shared/Service.sol +15 -17
  278. package/contracts/shared/TokenHandler.sol +11 -5
  279. package/contracts/shared/Versionable.sol +4 -92
  280. package/contracts/test/TestRegisterable.sol +1 -1
  281. package/contracts/test/TestService.sol +1 -1
  282. package/contracts/types/Blocknumber.sol +1 -0
  283. package/contracts/types/ClaimId.sol +52 -0
  284. package/contracts/types/DistributorType.sol +2 -2
  285. package/contracts/types/Fee.sol +1 -0
  286. package/contracts/types/NftId.sol +8 -0
  287. package/contracts/types/ObjectType.sol +10 -5
  288. package/contracts/types/PayoutId.sol +54 -0
  289. package/contracts/types/Referral.sol +4 -0
  290. package/contracts/types/RoleId.sol +16 -9
  291. package/contracts/types/Seconds.sol +54 -0
  292. package/contracts/types/StateId.sol +1 -0
  293. package/contracts/types/Timestamp.sol +13 -13
  294. package/contracts/types/UFixed.sol +1 -0
  295. package/contracts/types/Version.sol +1 -0
  296. package/package.json +3 -3
  297. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  298. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  299. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  301. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  303. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  305. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  307. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  309. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  311. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  313. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  315. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  317. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  319. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  322. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  324. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  326. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  328. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  330. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  332. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  334. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  336. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  337. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  338. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  339. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  340. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  341. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -100
  342. package/contracts/experiment/cloning/Cloner.sol +0 -47
  343. package/contracts/experiment/errors/Require.sol +0 -38
  344. package/contracts/experiment/errors/Revert.sol +0 -44
  345. package/contracts/experiment/inheritance/A.sol +0 -53
  346. package/contracts/experiment/inheritance/B.sol +0 -28
  347. package/contracts/experiment/inheritance/C.sol +0 -34
  348. package/contracts/experiment/inheritance/IA.sol +0 -13
  349. package/contracts/experiment/inheritance/IB.sol +0 -10
  350. package/contracts/experiment/inheritance/IC.sol +0 -12
  351. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  352. package/contracts/experiment/statemachine/ISM.sol +0 -25
  353. package/contracts/experiment/statemachine/SM.sol +0 -57
  354. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  355. package/contracts/experiment/types/TypeA.sol +0 -47
  356. package/contracts/experiment/types/TypeB.sol +0 -29
  357. package/contracts/instance/IInstanceBase.sol +0 -25
  358. package/contracts/instance/InstanceBase.sol +0 -39
  359. package/contracts/instance/base/IInstanceBase.sol +0 -21
@@ -0,0 +1,151 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "./IApplicationService.sol";
6
+
7
+ import {IRegistry} from "../../registry/IRegistry.sol";
8
+ import {IProductComponent} from "../../components/IProductComponent.sol";
9
+ import {Product} from "../../components/Product.sol";
10
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
12
+ import {IInstance} from "../IInstance.sol";
13
+ import {IPolicy} from "../module/IPolicy.sol";
14
+ import {IRisk} from "../module/IRisk.sol";
15
+ import {IBundle} from "../module/IBundle.sol";
16
+ import {IProductService} from "./IProductService.sol";
17
+ import {ITreasury} from "../module/ITreasury.sol";
18
+ import {ISetup} from "../module/ISetup.sol";
19
+
20
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
21
+
22
+ import {IVersionable} from "../../shared/IVersionable.sol";
23
+ import {Versionable} from "../../shared/Versionable.sol";
24
+
25
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
27
+ import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
28
+ import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../../types/ObjectType.sol";
29
+ import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
30
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
31
+ import {Fee, FeeLib} from "../../types/Fee.sol";
32
+ import {ReferralId} from "../../types/Referral.sol";
33
+ import {RiskId} from "../../types/RiskId.sol";
34
+ import {StateId} from "../../types/StateId.sol";
35
+ import {ClaimId} from "../../types/ClaimId.sol";
36
+ import {PayoutId} from "../../types/PayoutId.sol";
37
+ import {Version, VersionLib} from "../../types/Version.sol";
38
+
39
+ import {ComponentService} from "../base/ComponentService.sol";
40
+ import {InstanceReader} from "../InstanceReader.sol";
41
+ import {IBundleService} from "./IBundleService.sol";
42
+ import {IClaimService} from "./IClaimService.sol";
43
+ import {IPoolService} from "./IPoolService.sol";
44
+ import {IService} from "../../shared/IService.sol";
45
+ import {Service} from "../../shared/Service.sol";
46
+
47
+
48
+ contract ClaimService is
49
+ ComponentService,
50
+ IClaimService
51
+ {
52
+
53
+
54
+ function _initialize(
55
+ address owner,
56
+ bytes memory data
57
+ )
58
+ internal
59
+ virtual override
60
+ initializer()
61
+ {
62
+ // TODO check this, might no longer be the way, refactor if necessary
63
+ address registryAddress;
64
+ address initialOwner;
65
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
66
+
67
+ initializeService(registryAddress, owner);
68
+ registerInterface(type(IClaimService).interfaceId);
69
+ }
70
+
71
+
72
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
73
+ return CLAIM();
74
+ }
75
+
76
+
77
+ function createClaim(
78
+ NftId policyNftId,
79
+ uint256 claimAmount,
80
+ bytes memory claimData
81
+ )
82
+ external
83
+ virtual
84
+ returns (ClaimId)
85
+ {
86
+
87
+ }
88
+
89
+
90
+ function confirmClaim(NftId policyNftId, ClaimId claimId, uint256 claimAmount)
91
+ external
92
+ virtual
93
+ // solhint-disable-next-line no-empty-blocks
94
+ {
95
+
96
+ }
97
+
98
+
99
+ function declineClaim(NftId policyNftId, ClaimId claimId)
100
+ external
101
+ virtual
102
+ // solhint-disable-next-line no-empty-blocks
103
+ {
104
+
105
+ }
106
+
107
+
108
+ function closeClaim(NftId policyNftId, ClaimId claimId)
109
+ external
110
+ virtual
111
+ // solhint-disable-next-line no-empty-blocks
112
+ {
113
+
114
+ }
115
+
116
+
117
+ function createPayout(
118
+ NftId policyNftId,
119
+ ClaimId claimId,
120
+ uint256 payoutAmount,
121
+ bytes calldata payoutData
122
+ )
123
+ external
124
+ virtual
125
+ returns(PayoutId payoutId)
126
+ // solhint-disable-next-line no-empty-blocks
127
+ {
128
+
129
+ }
130
+
131
+
132
+ function payoutExecuted(
133
+ NftId policyNftId,
134
+ PayoutId payoutId
135
+ )
136
+ external
137
+ virtual
138
+ // solhint-disable-next-line no-empty-blocks
139
+ {
140
+
141
+ }
142
+
143
+
144
+ // internal functions
145
+
146
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
147
+ IRegistry.ObjectInfo memory productInfo;
148
+ (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
149
+ product = Product(productInfo.objectAddress);
150
+ }
151
+ }
@@ -0,0 +1,35 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {ClaimService} from "./ClaimService.sol";
7
+
8
+ contract ClaimServiceManager is ProxyManager {
9
+
10
+ ClaimService private _claimService;
11
+
12
+ /// @dev initializes proxy manager with service implementation
13
+ constructor(
14
+ address registryAddress
15
+ )
16
+ ProxyManager(registryAddress)
17
+ {
18
+ ClaimService svc = new ClaimService();
19
+ bytes memory data = abi.encode(registryAddress, address(this));
20
+ IVersionable versionable = deploy(
21
+ address(svc),
22
+ data);
23
+
24
+ _claimService = ClaimService(address(versionable));
25
+ }
26
+
27
+ //--- view functions ----------------------------------------------------//
28
+ function getClaimService()
29
+ external
30
+ view
31
+ returns (ClaimService)
32
+ {
33
+ return _claimService;
34
+ }
35
+ }
@@ -6,13 +6,15 @@ import {IInstance} from "../../instance/IInstance.sol";
6
6
  import {InstanceAccessManager} from "../InstanceAccessManager.sol";
7
7
  import {InstanceReader} from "../../instance/InstanceReader.sol";
8
8
  import {ISetup} from "../../instance/module/ISetup.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
9
10
 
10
- import {NftId, NftIdLib} from "../../types/NftId.sol";
11
- import {Fee} from "../../types/Fee.sol";
12
- import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
11
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
+ import {Fee, FeeLib} from "../../types/Fee.sol";
13
+ import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
13
14
  import {KEEP_STATE} from "../../types/StateId.sol";
14
- import {ObjectType, DISTRIBUTION} from "../../types/ObjectType.sol";
15
+ import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
15
16
  import {Version, VersionLib} from "../../types/Version.sol";
17
+ import {RoleId} from "../../types/RoleId.sol";
16
18
 
17
19
  import {IVersionable} from "../../shared/IVersionable.sol";
18
20
  import {Versionable} from "../../shared/Versionable.sol";
@@ -21,8 +23,16 @@ import {IService} from "../../shared/IService.sol";
21
23
  import {Service} from "../../shared/Service.sol";
22
24
  import {ComponentService} from "../base/ComponentService.sol";
23
25
  import {InstanceService} from "../InstanceService.sol";
24
- import {IDistributionService} from "./IDistributionService.sol";
25
26
  import {IComponent} from "../../components/IComponent.sol";
27
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
28
+ import {IDistributionService} from "./IDistributionService.sol";
29
+
30
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
31
+ import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
32
+ import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
33
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
34
+ import {Key32} from "../../types/Key32.sol";
35
+ import {IDistribution} from "../module/IDistribution.sol";
26
36
 
27
37
 
28
38
  contract DistributionService is
@@ -30,6 +40,10 @@ contract DistributionService is
30
40
  IDistributionService
31
41
  {
32
42
  using NftIdLib for NftId;
43
+ using TimestampLib for Timestamp;
44
+ using UFixedLib for UFixed;
45
+ using FeeLib for Fee;
46
+ using ReferralLib for ReferralId;
33
47
 
34
48
  address internal _registryAddress;
35
49
 
@@ -46,9 +60,8 @@ contract DistributionService is
46
60
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
47
61
  // TODO while DistributionService is not deployed in DistributionServiceManager constructor
48
62
  // owner is DistributionServiceManager deployer
49
- _initializeService(registryAddress, owner);
50
-
51
- _registerInterface(type(IDistributionService).interfaceId);
63
+ initializeService(registryAddress, owner);
64
+ registerInterface(type(IDistributionService).interfaceId);
52
65
  }
53
66
 
54
67
  function getDomain() public pure override(Service, IService) returns(ObjectType) {
@@ -60,7 +73,7 @@ contract DistributionService is
60
73
  returns(NftId distributionNftId)
61
74
  {
62
75
  (
63
- IComponent distribution,
76
+ IComponent component,
64
77
  address owner,
65
78
  IInstance instance,
66
79
  NftId instanceNftId
@@ -69,47 +82,386 @@ contract DistributionService is
69
82
  DISTRIBUTION(),
70
83
  DISTRIBUTION_OWNER_ROLE());
71
84
 
72
- (
73
- IRegistry.ObjectInfo memory distributionInfo,
74
- bytes memory data
75
- ) = getRegistryService().registerDistribution(distribution, owner);
85
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
86
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
76
87
  distribution.linkToRegisteredNftId();
77
88
  distributionNftId = distributionInfo.nftId;
78
89
 
79
- (
80
- string memory name,
81
- ISetup.DistributionSetupInfo memory initialSetup
82
- ) = _decodeAndVerifyDistributionData(data);
83
- instance.createDistributionSetup(distributionNftId, initialSetup);
90
+ instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
91
+ // TODO move to distribution?
92
+ bytes4[][] memory selectors = new bytes4[][](2);
93
+ selectors[0] = new bytes4[](1);
94
+ selectors[1] = new bytes4[](2);
84
95
 
85
- getInstanceService().createTarget(instanceNftId, distributionAddress, name);
86
- }
96
+ selectors[0][0] = IDistributionComponent.setFees.selector;
97
+ selectors[1][0] = IDistributionComponent.processRenewal.selector;
87
98
 
88
- function _decodeAndVerifyDistributionData(bytes memory data)
89
- internal
90
- returns(string memory name, ISetup.DistributionSetupInfo memory setup)
91
- {
92
- (name, setup) = abi.decode(
93
- data,
94
- (string, ISetup.DistributionSetupInfo)
95
- );
99
+ RoleId[] memory roles = new RoleId[](2);
100
+ roles[0] = DISTRIBUTION_OWNER_ROLE();
101
+ roles[1] = PRODUCT_SERVICE_ROLE();
96
102
 
97
- // TODO add checks if applicable
103
+ getInstanceService().createGifTarget(
104
+ instanceNftId,
105
+ distributionAddress,
106
+ distribution.getName(),
107
+ selectors,
108
+ roles);
98
109
  }
99
110
 
100
111
  function setFees(
112
+ Fee memory minDistributionOwnerFee,
101
113
  Fee memory distributionFee
102
114
  )
103
115
  external
104
116
  override
105
117
  {
118
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
119
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
120
+ }
121
+
106
122
  (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
107
123
  InstanceReader instanceReader = instance.getInstanceReader();
108
124
  NftId distributionNftId = info.nftId;
109
125
 
110
126
  ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
127
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
111
128
  distSetupInfo.distributionFee = distributionFee;
112
129
 
113
130
  instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
114
131
  }
132
+
133
+ function createDistributorType(
134
+ string memory name,
135
+ UFixed minDiscountPercentage,
136
+ UFixed maxDiscountPercentage,
137
+ UFixed commissionPercentage,
138
+ uint32 maxReferralCount,
139
+ uint32 maxReferralLifetime,
140
+ bool allowSelfReferrals,
141
+ bool allowRenewals,
142
+ bytes memory data
143
+ )
144
+ external
145
+ returns (DistributorType distributorType)
146
+ {
147
+ (,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
148
+
149
+ {
150
+ ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
151
+ UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
152
+ UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
153
+ if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
154
+ revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
155
+ }
156
+ }
157
+
158
+ distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
159
+ Key32 key32 = distributorType.toKey32();
160
+
161
+ if(!instance.exists(key32)) {
162
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
163
+ name,
164
+ minDiscountPercentage,
165
+ maxDiscountPercentage,
166
+ commissionPercentage,
167
+ maxReferralCount,
168
+ maxReferralLifetime,
169
+ allowSelfReferrals,
170
+ allowRenewals,
171
+ data);
172
+
173
+ instance.createDistributorType(key32, info);
174
+ }
175
+ }
176
+
177
+ function createDistributor(
178
+ address distributor,
179
+ DistributorType distributorType,
180
+ bytes memory data
181
+ ) external returns (NftId distributorNftId)
182
+ {
183
+ (, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
184
+
185
+ distributorNftId = getRegistryService().registerDistributor(
186
+ IRegistry.ObjectInfo(
187
+ zeroNftId(),
188
+ distributionNftId,
189
+ DISTRIBUTOR(),
190
+ true, // intercepting property for bundles is defined on pool
191
+ address(0),
192
+ distributor,
193
+ ""
194
+ ));
195
+
196
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
197
+ distributorType,
198
+ true, // active
199
+ data,
200
+ 0,
201
+ 0);
202
+
203
+ instance.createDistributor(distributorNftId, info);
204
+ }
205
+
206
+ function updateDistributorType(
207
+ NftId distributorNftId,
208
+ DistributorType distributorType,
209
+ bytes memory data
210
+ ) external virtual
211
+ {
212
+ (,, IInstance instance) = _getAndVerifyCallingDistribution();
213
+ InstanceReader instanceReader = instance.getInstanceReader();
214
+ IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
215
+ distributorInfo.distributorType = distributorType;
216
+ distributorInfo.data = data;
217
+ instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
218
+ }
219
+
220
+
221
+ function createReferral(
222
+ NftId distributorNftId,
223
+ string memory code,
224
+ UFixed discountPercentage,
225
+ uint32 maxReferrals,
226
+ Timestamp expiryAt,
227
+ bytes memory data
228
+ )
229
+ external
230
+ virtual
231
+ returns (ReferralId referralId)
232
+ {
233
+ (,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
234
+
235
+ if (bytes(code).length == 0) {
236
+ revert ErrorIDistributionServiceInvalidReferral(code);
237
+ }
238
+ if (expiryAt.eqz()) {
239
+ revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
240
+ }
241
+
242
+ InstanceReader instanceReader = instance.getInstanceReader();
243
+ IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
244
+ DistributorType distributorType = distributorInfo.distributorType;
245
+ IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
246
+
247
+ if (distributorTypeData.maxReferralCount < maxReferrals) {
248
+ revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
249
+ }
250
+ if (distributorTypeData.minDiscountPercentage > discountPercentage) {
251
+ revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
252
+ }
253
+ if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
254
+ revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
255
+ }
256
+ if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
257
+ revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
258
+ }
259
+
260
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
261
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
262
+ distributorNftId,
263
+ code,
264
+ discountPercentage,
265
+ maxReferrals,
266
+ 0, // used referrals
267
+ expiryAt,
268
+ data
269
+ );
270
+
271
+ instance.createReferral(referralId.toKey32(), info);
272
+ return referralId;
273
+ }
274
+
275
+ function processSale(
276
+ NftId distributionNftId,
277
+ ReferralId referralId,
278
+ IPolicy.Premium memory premium,
279
+ uint256 transferredDistributionFeeAmount
280
+ )
281
+ external
282
+ virtual
283
+ {
284
+ bool isReferral = ! referralId.eqz();
285
+ bool referralValid = referralIsValid(distributionNftId, referralId);
286
+
287
+ if (isReferral && ! referralValid) {
288
+ revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
289
+ }
290
+
291
+ (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
292
+ InstanceReader reader = instance.getInstanceReader();
293
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
294
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
295
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
296
+
297
+ uint256 distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
298
+ uint256 commissionAmount = premium.commissionAmount;
299
+
300
+ if (transferredDistributionFeeAmount != distributionOwnerFee + commissionAmount) {
301
+ revert ErrorIDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
302
+ }
303
+
304
+
305
+ if (distributionOwnerFee > 0) {
306
+ setupInfo.sumDistributionOwnerFees += distributionOwnerFee;
307
+ instance.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
308
+ }
309
+
310
+ if (isReferral) {
311
+ referralInfo.usedReferrals += 1;
312
+ instance.updateReferral(referralId.toKey32(), referralInfo, KEEP_STATE());
313
+
314
+ if (commissionAmount > 0) {
315
+ distributorInfo.sumCommisions += commissionAmount;
316
+ distributorInfo.numPoliciesSold += 1;
317
+ instance.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
318
+ }
319
+ }
320
+ }
321
+
322
+ function calculateFeeAmount(
323
+ NftId distributionNftId,
324
+ ReferralId referralId,
325
+ IPolicy.Premium memory premium
326
+ )
327
+ external
328
+ virtual
329
+ view
330
+ returns (IPolicy.Premium memory finalPremium)
331
+ {
332
+ (, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
333
+ InstanceReader reader = instance.getInstanceReader();
334
+
335
+ // first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
336
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
337
+ Fee memory distributionFee = setupInfo.distributionFee;
338
+ Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
339
+ uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
340
+ premium.distributionFeeVarAmount = distributionFeeVarAmount;
341
+ premium.fullPremiumAmount += distributionFeeVarAmount;
342
+
343
+ // if the referral is not valid, then the distribution owner gets everything
344
+ if (! referralIsValid(distributionNftId, referralId)) {
345
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
346
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
347
+ premium.premiumAmount = premium.fullPremiumAmount;
348
+ return premium;
349
+ }
350
+
351
+ // if the referral is valid, the the commission and discount are calculated based in the full premium
352
+ // the remaing amount goes to the distribution owner
353
+ {
354
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
355
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
356
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
357
+
358
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
359
+ premium.commissionAmount = commissionAmount;
360
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
361
+ premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
362
+ premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
363
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
364
+ }
365
+
366
+ // sanity check to validate the fee calculation
367
+ if (premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee) {
368
+ revert ErrorIDistributionServiceFeeCalculationMismatch(
369
+ premium.distributionFeeFixAmount,
370
+ premium.distributionFeeVarAmount,
371
+ premium.distributionOwnerFeeFixAmount,
372
+ premium.distributionOwnerFeeVarAmount,
373
+ premium.commissionAmount,
374
+ premium.discountAmount
375
+ );
376
+ }
377
+ if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
378
+ revert ErrorIDistributionServiceFeeCalculationMismatch(
379
+ premium.distributionFeeFixAmount,
380
+ premium.distributionFeeVarAmount,
381
+ premium.distributionOwnerFeeFixAmount,
382
+ premium.distributionOwnerFeeVarAmount,
383
+ premium.commissionAmount,
384
+ premium.discountAmount
385
+ );
386
+ }
387
+
388
+ return premium;
389
+ }
390
+
391
+ // TODO: zero should return false
392
+ function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
393
+ (address distributionAddress, IInstance instance) = _getAndVerifyDistribution(distributionNftId);
394
+ IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
395
+
396
+ if (info.distributorNftId.eqz()) {
397
+ return false;
398
+ }
399
+
400
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
401
+ isValid = isValid && info.usedReferrals < info.maxReferrals;
402
+ }
403
+
404
+ function _getAndVerifyCallingDistribution()
405
+ internal
406
+ view
407
+ returns(
408
+ address distributionAddress,
409
+ NftId distributionNftId,
410
+ IInstance instance
411
+ )
412
+ {
413
+ ObjectType objectType;
414
+ (
415
+ distributionAddress,
416
+ distributionNftId,
417
+ objectType,
418
+ instance
419
+ ) = _getAndVerifyCaller();
420
+
421
+ if(objectType != DISTRIBUTION()) {
422
+ revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
423
+ }
424
+ }
425
+
426
+ function _getAndVerifyDistribution(NftId distributionNftId)
427
+ internal
428
+ view
429
+ returns(
430
+ address distributionAddress,
431
+ IInstance instance
432
+ )
433
+ {
434
+ IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
435
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
436
+ if (parentInfo.objectType != INSTANCE()) {
437
+ revert ErrorIDistributionServiceParentNftIdNotInstance(distributionNftId, info.parentNftId);
438
+ }
439
+ instance = IInstance(parentInfo.objectAddress);
440
+ }
441
+
442
+ function _getAndVerifyCaller()
443
+ internal
444
+ view
445
+ returns(
446
+ address objectAddress,
447
+ NftId objectNftId,
448
+ ObjectType objectType,
449
+ IInstance instance
450
+ )
451
+ {
452
+ objectAddress = msg.sender;
453
+ objectNftId = getRegistry().getNftId(objectAddress);
454
+ if ( objectNftId.eqz()) {
455
+ revert ErrorIServiceCallerUnknown(objectAddress);
456
+ }
457
+ IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
458
+ objectType = info.objectType;
459
+
460
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
461
+ if (parentInfo.objectType != INSTANCE()) {
462
+ revert ErrorIDistributionServiceParentNftIdNotInstance(objectNftId, info.parentNftId);
463
+ }
464
+ instance = IInstance(parentInfo.objectAddress);
465
+ }
466
+
115
467
  }
@@ -16,7 +16,7 @@ contract DistributionServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  DistributionService distSrv = new DistributionService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));