@etherisc/gif-next 0.0.2-f7eda15-119 → 0.0.2-f831797-539

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