@etherisc/gif-next 0.0.2-9105e58-225 → 0.0.2-917cede-703

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