@etherisc/gif-next 0.0.2-fe88ad7-208 → 0.0.2-ff8087d-237

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 (378) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +873 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +903 -202
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +237 -83
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +879 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +879 -59
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +720 -16
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +760 -195
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +564 -141
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1474 -483
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +248 -218
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1152 -794
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +462 -179
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +414 -267
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +482 -346
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +355 -91
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +263 -164
  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 +58 -75
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1124 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +688 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +641 -303
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +343 -79
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1434 -280
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +469 -73
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +342 -189
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +310 -249
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +757 -144
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +262 -275
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +703 -125
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -165
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +632 -344
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +367 -91
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1119 -224
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +361 -73
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +297 -210
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -78
  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 +117 -5
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +99 -217
  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 +131 -27
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +205 -250
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -81
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +81 -68
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +138 -50
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +71 -165
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +107 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -63
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +116 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +173 -153
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +116 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +191 -203
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  210. package/contracts/components/Component.sol +272 -0
  211. package/contracts/components/Distribution.sol +204 -82
  212. package/contracts/components/IComponent.sol +90 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +90 -42
  215. package/contracts/components/IProductComponent.sol +15 -9
  216. package/contracts/components/Pool.sol +217 -186
  217. package/contracts/components/Product.sol +246 -166
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  219. package/contracts/instance/BundleManager.sol +17 -20
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +67 -25
  222. package/contracts/instance/IInstanceService.sol +34 -11
  223. package/contracts/instance/Instance.sol +158 -116
  224. package/contracts/instance/InstanceAccessManager.sol +389 -165
  225. package/contracts/instance/InstanceReader.sol +87 -36
  226. package/contracts/instance/InstanceService.sol +295 -161
  227. package/contracts/instance/InstanceServiceManager.sol +1 -1
  228. package/contracts/instance/ObjectManager.sol +10 -29
  229. package/contracts/instance/base/ComponentService.sol +130 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -36
  231. package/contracts/instance/base/Lifecycle.sol +26 -6
  232. package/contracts/instance/module/IAccess.sol +22 -16
  233. package/contracts/instance/module/IBundle.sol +8 -5
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +3 -0
  236. package/contracts/instance/module/IPolicy.sol +43 -11
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +356 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +244 -119
  241. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  242. package/contracts/instance/service/ClaimService.sol +443 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +360 -41
  245. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  246. package/contracts/instance/service/IApplicationService.sol +79 -0
  247. package/contracts/instance/service/IBundleService.sol +93 -20
  248. package/contracts/instance/service/IClaimService.sol +90 -0
  249. package/contracts/instance/service/IDistributionService.sol +89 -0
  250. package/contracts/instance/service/IPolicyService.sol +44 -51
  251. package/contracts/instance/service/IPoolService.sol +97 -3
  252. package/contracts/instance/service/PolicyService.sol +233 -364
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +319 -40
  255. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  256. package/contracts/instance/service/ProductService.sol +90 -50
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +8 -0
  259. package/contracts/registry/IRegistry.sol +18 -8
  260. package/contracts/registry/IRegistryService.sol +21 -13
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +142 -71
  263. package/contracts/registry/RegistryAccessManager.sol +31 -25
  264. package/contracts/registry/RegistryService.sol +93 -134
  265. package/contracts/registry/RegistryServiceManager.sol +13 -13
  266. package/contracts/registry/ReleaseManager.sol +103 -127
  267. package/contracts/registry/TokenRegistry.sol +19 -13
  268. package/contracts/shared/ERC165.sol +14 -12
  269. package/contracts/shared/INftOwnable.sol +11 -10
  270. package/contracts/shared/IPolicyHolder.sol +40 -0
  271. package/contracts/shared/IRegisterable.sol +4 -6
  272. package/contracts/shared/IRegistryLinked.sol +11 -0
  273. package/contracts/shared/IService.sol +6 -4
  274. package/contracts/shared/IVersionable.sol +4 -47
  275. package/contracts/shared/NftOwnable.sol +64 -80
  276. package/contracts/shared/PolicyHolder.sol +94 -0
  277. package/contracts/shared/ProxyManager.sol +100 -25
  278. package/contracts/shared/Registerable.sol +24 -39
  279. package/contracts/shared/RegistryLinked.sol +43 -0
  280. package/contracts/shared/Service.sol +36 -22
  281. package/contracts/shared/TokenHandler.sol +14 -6
  282. package/contracts/shared/Versionable.sol +4 -92
  283. package/contracts/test/TestRegisterable.sol +1 -1
  284. package/contracts/test/TestService.sol +1 -1
  285. package/contracts/types/Amount.sol +109 -0
  286. package/contracts/types/Blocknumber.sol +1 -0
  287. package/contracts/types/ClaimId.sol +75 -0
  288. package/contracts/types/DistributorType.sol +2 -2
  289. package/contracts/types/Fee.sol +17 -8
  290. package/contracts/types/NftId.sol +8 -0
  291. package/contracts/types/ObjectType.sol +11 -6
  292. package/contracts/types/PayoutId.sol +82 -0
  293. package/contracts/types/Referral.sol +4 -0
  294. package/contracts/types/RoleId.sol +18 -11
  295. package/contracts/types/Seconds.sol +54 -0
  296. package/contracts/types/StateId.sol +7 -2
  297. package/contracts/types/Timestamp.sol +18 -13
  298. package/contracts/types/UFixed.sol +1 -0
  299. package/contracts/types/Version.sol +1 -0
  300. package/package.json +3 -3
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -397
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  344. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  345. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  346. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  347. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  348. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  349. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  350. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  351. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  352. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  353. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  354. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  355. package/contracts/components/BaseComponent.sol +0 -159
  356. package/contracts/components/IBaseComponent.sol +0 -34
  357. package/contracts/experiment/cloning/Cloner.sol +0 -47
  358. package/contracts/experiment/errors/Require.sol +0 -38
  359. package/contracts/experiment/errors/Revert.sol +0 -44
  360. package/contracts/experiment/inheritance/A.sol +0 -53
  361. package/contracts/experiment/inheritance/B.sol +0 -28
  362. package/contracts/experiment/inheritance/C.sol +0 -34
  363. package/contracts/experiment/inheritance/IA.sol +0 -13
  364. package/contracts/experiment/inheritance/IB.sol +0 -10
  365. package/contracts/experiment/inheritance/IC.sol +0 -12
  366. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  367. package/contracts/experiment/statemachine/ISM.sol +0 -25
  368. package/contracts/experiment/statemachine/SM.sol +0 -57
  369. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  370. package/contracts/experiment/types/TypeA.sol +0 -47
  371. package/contracts/experiment/types/TypeB.sol +0 -29
  372. package/contracts/instance/IInstanceBase.sol +0 -26
  373. package/contracts/instance/InstanceBase.sol +0 -41
  374. package/contracts/instance/base/ComponentServiceBase.sol +0 -82
  375. package/contracts/instance/base/IInstanceBase.sol +0 -23
  376. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  377. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  378. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -6,30 +6,45 @@ import {IInstance} from "../../instance/IInstance.sol";
6
6
  import {InstanceAccessManager} from "../InstanceAccessManager.sol";
7
7
  import {InstanceReader} from "../../instance/InstanceReader.sol";
8
8
  import {ISetup} from "../../instance/module/ISetup.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
9
10
 
10
- import {NftId, NftIdLib} from "../../types/NftId.sol";
11
- import {Fee} from "../../types/Fee.sol";
12
- import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
11
+ import {Amount, AmountLib} from "../../types/Amount.sol";
12
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
13
+ import {Fee, FeeLib} from "../../types/Fee.sol";
14
+ import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
13
15
  import {KEEP_STATE} from "../../types/StateId.sol";
14
- import {ObjectType, DISTRIBUTION} from "../../types/ObjectType.sol";
16
+ import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
15
17
  import {Version, VersionLib} from "../../types/Version.sol";
18
+ import {RoleId} from "../../types/RoleId.sol";
16
19
 
17
20
  import {IVersionable} from "../../shared/IVersionable.sol";
18
21
  import {Versionable} from "../../shared/Versionable.sol";
19
22
 
20
23
  import {IService} from "../../shared/IService.sol";
21
24
  import {Service} from "../../shared/Service.sol";
22
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
25
+ import {ComponentService} from "../base/ComponentService.sol";
23
26
  import {InstanceService} from "../InstanceService.sol";
27
+ import {IComponent} from "../../components/IComponent.sol";
28
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
24
29
  import {IDistributionService} from "./IDistributionService.sol";
25
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
30
+
31
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
32
+ import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
33
+ import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
34
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
35
+ import {Key32} from "../../types/Key32.sol";
36
+ import {IDistribution} from "../module/IDistribution.sol";
26
37
 
27
38
 
28
39
  contract DistributionService is
29
- ComponentServiceBase,
40
+ ComponentService,
30
41
  IDistributionService
31
42
  {
32
43
  using NftIdLib for NftId;
44
+ using TimestampLib for Timestamp;
45
+ using UFixedLib for UFixed;
46
+ using FeeLib for Fee;
47
+ using ReferralLib for ReferralId;
33
48
 
34
49
  address internal _registryAddress;
35
50
 
@@ -46,12 +61,11 @@ contract DistributionService is
46
61
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
47
62
  // TODO while DistributionService is not deployed in DistributionServiceManager constructor
48
63
  // owner is DistributionServiceManager deployer
49
- _initializeService(registryAddress, owner);
50
-
51
- _registerInterface(type(IDistributionService).interfaceId);
64
+ initializeService(registryAddress, address(0), owner);
65
+ registerInterface(type(IDistributionService).interfaceId);
52
66
  }
53
67
 
54
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
68
+ function getDomain() public pure override returns(ObjectType) {
55
69
  return DISTRIBUTION();
56
70
  }
57
71
 
@@ -59,55 +73,360 @@ contract DistributionService is
59
73
  external
60
74
  returns(NftId distributionNftId)
61
75
  {
62
- address distributionOwner = msg.sender;
63
- IBaseComponent distribution = IBaseComponent(distributionAddress);
76
+ (
77
+ IComponent component,
78
+ address owner,
79
+ IInstance instance,
80
+ NftId instanceNftId
81
+ ) = _checkComponentForRegistration(
82
+ distributionAddress,
83
+ DISTRIBUTION(),
84
+ DISTRIBUTION_OWNER_ROLE());
64
85
 
65
- IRegistry.ObjectInfo memory info;
66
- bytes memory data;
67
- (info, data) = getRegistryService().registerDistribution(distribution, distributionOwner);
86
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
87
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
88
+ distribution.linkToRegisteredNftId();
89
+ distributionNftId = distributionInfo.nftId;
68
90
 
69
- IInstance instance = _getInstance(info.parentNftId);
70
- InstanceService instanceService = getInstanceService();
91
+ instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
92
+ // TODO move to distribution?
93
+ bytes4[][] memory selectors = new bytes4[][](2);
94
+ selectors[0] = new bytes4[](1);
95
+ selectors[1] = new bytes4[](2);
71
96
 
72
- bool hasRole = instanceService.hasRole(
73
- distributionOwner,
74
- DISTRIBUTION_OWNER_ROLE(),
75
- address(instance));
97
+ selectors[0][0] = IDistributionComponent.setFees.selector;
98
+ selectors[1][0] = IDistributionComponent.processRenewal.selector;
76
99
 
77
- if(!hasRole) {
78
- revert ExpectedRoleMissing(DISTRIBUTION_OWNER_ROLE(), distributionOwner);
100
+ RoleId[] memory roles = new RoleId[](2);
101
+ roles[0] = DISTRIBUTION_OWNER_ROLE();
102
+ roles[1] = PRODUCT_SERVICE_ROLE();
103
+
104
+ getInstanceService().createGifTarget(
105
+ instanceNftId,
106
+ distributionAddress,
107
+ distribution.getName(),
108
+ selectors,
109
+ roles);
110
+ }
111
+
112
+ function setFees(
113
+ Fee memory minDistributionOwnerFee,
114
+ Fee memory distributionFee
115
+ )
116
+ external
117
+ override
118
+ {
119
+ if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
120
+ revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
79
121
  }
80
122
 
81
- distributionNftId = info.nftId;
82
- ISetup.DistributionSetupInfo memory initialSetup = _decodeAndVerifyDistributionSetup(data);
83
- instance.createDistributionSetup(distributionNftId, initialSetup);
123
+ (NftId distributionNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
124
+ InstanceReader instanceReader = instance.getInstanceReader();
125
+
126
+ ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
127
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
128
+ distSetupInfo.distributionFee = distributionFee;
129
+
130
+ instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
131
+ }
132
+
133
+ function createDistributorType(
134
+ string memory name,
135
+ UFixed minDiscountPercentage,
136
+ UFixed maxDiscountPercentage,
137
+ UFixed commissionPercentage,
138
+ uint32 maxReferralCount,
139
+ uint32 maxReferralLifetime,
140
+ bool allowSelfReferrals,
141
+ bool allowRenewals,
142
+ bytes memory data
143
+ )
144
+ external
145
+ returns (DistributorType distributorType)
146
+ {
147
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
148
+
149
+ {
150
+ ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
151
+ UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
152
+ UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
153
+ if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
154
+ revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
155
+ }
156
+ }
157
+
158
+ distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
159
+ IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
160
+ name,
161
+ minDiscountPercentage,
162
+ maxDiscountPercentage,
163
+ commissionPercentage,
164
+ maxReferralCount,
165
+ maxReferralLifetime,
166
+ allowSelfReferrals,
167
+ allowRenewals,
168
+ data);
84
169
 
85
- instanceService.createTarget(_getInstanceNftId(info), distributionAddress, distribution.getName());
170
+ instance.createDistributorType(distributorType, info);
86
171
  }
87
172
 
88
- function _decodeAndVerifyDistributionSetup(bytes memory data) internal returns(ISetup.DistributionSetupInfo memory setup)
173
+
174
+ function createDistributor(
175
+ address distributor,
176
+ DistributorType distributorType,
177
+ bytes memory data
178
+ )
179
+ external
180
+ virtual
181
+ returns (NftId distributorNftId)
89
182
  {
90
- setup = abi.decode(
183
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
184
+
185
+ distributorNftId = getRegistryService().registerDistributor(
186
+ IRegistry.ObjectInfo(
187
+ zeroNftId(),
188
+ distributionNftId,
189
+ DISTRIBUTOR(),
190
+ true, // intercepting property for bundles is defined on pool
191
+ address(0),
192
+ distributor,
193
+ ""
194
+ ));
195
+
196
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
197
+ distributorType,
198
+ true, // active
91
199
  data,
92
- (ISetup.DistributionSetupInfo)
93
- );
200
+ AmountLib.zero(),
201
+ 0);
94
202
 
95
- // TODO add checks if applicable
203
+ instance.createDistributor(distributorNftId, info);
96
204
  }
97
205
 
98
- function setFees(
99
- Fee memory distributionFee
206
+ // function updateDistributorType(
207
+ // NftId distributorNftId,
208
+ // DistributorType distributorType,
209
+ // bytes memory data
210
+ // )
211
+ // external
212
+ // virtual
213
+ // {
214
+ // (, IInstance instance) = _getAndVerifyCallingDistribution();
215
+ // InstanceReader instanceReader = instance.getInstanceReader();
216
+ // IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
217
+ // distributorInfo.distributorType = distributorType;
218
+ // distributorInfo.data = data;
219
+ // instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
220
+ // }
221
+
222
+
223
+ function createReferral(
224
+ NftId distributorNftId,
225
+ string memory code,
226
+ UFixed discountPercentage,
227
+ uint32 maxReferrals,
228
+ Timestamp expiryAt,
229
+ bytes memory data
100
230
  )
101
231
  external
102
- override
232
+ virtual
233
+ returns (ReferralId referralId)
103
234
  {
104
- (IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
235
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
236
+
237
+ if (bytes(code).length == 0) {
238
+ revert ErrorIDistributionServiceInvalidReferral(code);
239
+ }
240
+ if (expiryAt.eqz()) {
241
+ revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
242
+ }
243
+
105
244
  InstanceReader instanceReader = instance.getInstanceReader();
106
- NftId distributionNftId = info.nftId;
245
+ DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
246
+ IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
107
247
 
108
- ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
109
- distSetupInfo.distributionFee = distributionFee;
248
+ if (distributorTypeData.maxReferralCount < maxReferrals) {
249
+ revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
250
+ }
251
+ if (distributorTypeData.minDiscountPercentage > discountPercentage) {
252
+ revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
253
+ }
254
+ if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
255
+ revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
256
+ }
257
+ if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
258
+ revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
259
+ }
260
+
261
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
262
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
263
+ distributorNftId,
264
+ code,
265
+ discountPercentage,
266
+ maxReferrals,
267
+ 0, // used referrals
268
+ expiryAt,
269
+ data
270
+ );
271
+
272
+ instance.createReferral(referralId, info);
273
+ return referralId;
274
+ }
275
+
276
+ function processSale(
277
+ NftId distributionNftId,
278
+ ReferralId referralId,
279
+ IPolicy.Premium memory premium,
280
+ Amount transferredDistributionFeeAmount
281
+ )
282
+ external
283
+ virtual
284
+ {
285
+ bool isReferral = ! referralId.eqz();
286
+ bool referralValid = referralIsValid(distributionNftId, referralId);
287
+
288
+ if (isReferral && ! referralValid) {
289
+ revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
290
+ }
291
+
292
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
293
+ InstanceReader reader = instance.getInstanceReader();
294
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
295
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
296
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
110
297
 
111
- instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
298
+ Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
299
+ Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
300
+
301
+ if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
302
+ revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
303
+ }
304
+
305
+
306
+ if (distributionOwnerFee.gtz()) {
307
+ setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
308
+ instance.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
309
+ }
310
+
311
+ if (isReferral) {
312
+ referralInfo.usedReferrals += 1;
313
+ instance.updateReferral(referralId, referralInfo, KEEP_STATE());
314
+
315
+ if (commissionAmount.gtz()) {
316
+ distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
317
+ distributorInfo.numPoliciesSold += 1;
318
+ instance.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
319
+ }
320
+ }
321
+ }
322
+
323
+ function calculateFeeAmount(
324
+ NftId distributionNftId,
325
+ ReferralId referralId,
326
+ IPolicy.Premium memory premium
327
+ )
328
+ external
329
+ virtual
330
+ view
331
+ returns (IPolicy.Premium memory finalPremium)
332
+ {
333
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
334
+ InstanceReader reader = instance.getInstanceReader();
335
+
336
+ // first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
337
+ ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
338
+ Fee memory distributionFee = setupInfo.distributionFee;
339
+ Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
340
+ uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
341
+ premium.distributionFeeVarAmount = distributionFeeVarAmount;
342
+ premium.fullPremiumAmount += distributionFeeVarAmount;
343
+
344
+ // if the referral is not valid, then the distribution owner gets everything
345
+ if (! referralIsValid(distributionNftId, referralId)) {
346
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
347
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
348
+ premium.premiumAmount = premium.fullPremiumAmount;
349
+ return premium;
350
+ }
351
+
352
+ // if the referral is valid, the commission and discount are calculated based in the full premium
353
+ // the remaing amount goes to the distribution owner
354
+ {
355
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
356
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(
357
+ reader.getDistributorInfo(
358
+ referralInfo.distributorNftId).distributorType);
359
+
360
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
361
+ premium.commissionAmount = commissionAmount;
362
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
363
+ premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
364
+ premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
365
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
366
+ }
367
+
368
+ // sanity check to validate the fee calculation
369
+ if (
370
+ premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee
371
+ || (premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)
372
+ )
373
+ {
374
+ revert ErrorIDistributionServiceFeeCalculationMismatch(
375
+ premium.distributionFeeFixAmount,
376
+ premium.distributionFeeVarAmount,
377
+ premium.distributionOwnerFeeFixAmount,
378
+ premium.distributionOwnerFeeVarAmount,
379
+ premium.commissionAmount,
380
+ premium.discountAmount
381
+ );
382
+ }
383
+
384
+ return premium;
385
+ }
386
+
387
+ // TODO: zero should return false
388
+ function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
389
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
390
+ IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
391
+
392
+ if (info.distributorNftId.eqz()) {
393
+ return false;
394
+ }
395
+
396
+ isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
397
+ isValid = isValid && info.usedReferrals < info.maxReferrals;
398
+ }
399
+
400
+ function _getAndVerifyCallingDistribution()
401
+ internal
402
+ view
403
+ returns(
404
+ NftId distributionNftId,
405
+ IInstance instance
406
+ )
407
+ {
408
+ distributionNftId = getRegistry().getNftId(msg.sender);
409
+ if (distributionNftId.eqz()) {
410
+ revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
411
+ }
412
+
413
+ IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
414
+ if(info.objectType != DISTRIBUTION()) {
415
+ revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
416
+ }
417
+
418
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
419
+ instance = IInstance(instanceAddress);
420
+ }
421
+
422
+
423
+ function _getInstanceForDistribution(NftId distributionNftId)
424
+ internal
425
+ view
426
+ returns(IInstance instance)
427
+ {
428
+ NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
429
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
430
+ return IInstance(instanceAddress);
112
431
  }
113
432
  }
@@ -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));
@@ -0,0 +1,79 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IPolicy} from "../module/IPolicy.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
7
+ import {Amount} from "../../types/Amount.sol";
8
+ import {NftId} from "../../types/NftId.sol";
9
+ import {ObjectType} from "../../types/ObjectType.sol";
10
+ import {ReferralId} from "../../types/Referral.sol";
11
+ import {RiskId} from "../../types/RiskId.sol";
12
+ import {Seconds} from "../../types/Seconds.sol";
13
+
14
+ /// @dev gif service responsible for creating applications
15
+ /// only product components may call transaction functions
16
+ interface IApplicationService is IService {
17
+
18
+ error ErrorApplicationServiceNotProduct(NftId callerNftId, ObjectType callerType);
19
+ error ErrorApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
20
+
21
+ /// @dev creates a new application based on the specified attributes
22
+ /// may only be called by a product component
23
+ function create(
24
+ address applicationOwner,
25
+ RiskId riskId,
26
+ Amount sumInsuredAmount,
27
+ Seconds lifetime,
28
+ NftId bundleNftId,
29
+ ReferralId referralId,
30
+ bytes memory applicationData
31
+ ) external returns (NftId applicationNftId);
32
+
33
+ /// @dev updates application attributes
34
+ /// may only be called while the application is in applied state
35
+ /// may only be called by the referenced product related to applicationNftId
36
+ function adjust(
37
+ NftId applicationNftId,
38
+ RiskId riskId,
39
+ NftId bundleNftId,
40
+ ReferralId referralId,
41
+ Amount sumInsuredAmount,
42
+ Seconds lifetime,
43
+ bytes memory applicationData
44
+ ) external;
45
+
46
+ /// @dev creates a new application that extends the provided policy
47
+ /// lifetime will seamlessly extend referenced policy, for closed policies
48
+ /// lifetime will start at underwriting time
49
+ /// product will need to limit the time window for renewal as underwriting
50
+ /// will lock the collateral at underwriting time which might be earlier than activation time
51
+ /// policyNftId needs to refer to an underwritten (or active or closed) policy
52
+ /// may only be called by the referenced product related to policyNftId
53
+ function renew(
54
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
55
+ NftId bundleNftId // will likely need a newer bundle for underwriting
56
+ ) external returns (NftId applicationNftId);
57
+
58
+ /// @dev revokes the application represented by {policyNftId}
59
+ /// an application can only be revoked in applied state
60
+ /// only the application holder may revoke an application
61
+ function revoke(NftId policyNftId) external;
62
+
63
+ /// @dev calculates the premium amount for the specified attributes
64
+ /// also returns the various fee components involved with creating a policy
65
+ function calculatePremium(
66
+ NftId productNftId,
67
+ RiskId riskId,
68
+ Amount sumInsuredAmount,
69
+ Seconds lifetime,
70
+ bytes memory applicationData,
71
+ NftId bundleNftId,
72
+ ReferralId referralId
73
+ )
74
+ external
75
+ view
76
+ returns (
77
+ IPolicy.Premium memory premium
78
+ );
79
+ }