@etherisc/gif-next 0.0.2-e9148e0-933 → 0.0.2-e94f4c7-084

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 (383) hide show
  1. package/README.md +71 -14
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +946 -219
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → components/IComponent.sol/IComponent.json} +303 -164
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +864 -49
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +825 -231
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +638 -190
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2137 -457
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +321 -168
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1002 -1278
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +593 -180
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +262 -247
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +501 -292
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +331 -98
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +247 -180
  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 +71 -45
  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 +1060 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +681 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1289 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +725 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1040 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1273 -215
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -79
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +627 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +709 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +969 -0
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +544 -145
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +90 -391
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1543 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +741 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +848 -238
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +346 -85
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +284 -502
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +304 -99
  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 +261 -131
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
  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 +275 -226
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +200 -335
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -141
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -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 +40 -9
  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 +26 -3
  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 +253 -0
  211. package/contracts/components/Distribution.sol +204 -79
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +88 -37
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +220 -160
  217. package/contracts/components/Product.sol +247 -160
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  219. package/contracts/instance/BundleManager.sol +126 -0
  220. package/contracts/instance/Cloneable.sol +51 -0
  221. package/contracts/instance/IInstance.sol +75 -14
  222. package/contracts/instance/IInstanceService.sol +46 -8
  223. package/contracts/instance/Instance.sol +151 -284
  224. package/contracts/instance/InstanceAccessManager.sol +414 -175
  225. package/contracts/instance/InstanceReader.sol +47 -36
  226. package/contracts/instance/InstanceService.sol +405 -119
  227. package/contracts/instance/InstanceServiceManager.sol +6 -9
  228. package/contracts/instance/ObjectManager.sol +82 -0
  229. package/contracts/instance/base/ComponentService.sol +121 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +23 -6
  232. package/contracts/instance/module/IAccess.sol +36 -20
  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 +2 -0
  236. package/contracts/instance/module/IPolicy.sol +41 -9
  237. package/contracts/instance/module/ISetup.sol +9 -20
  238. package/contracts/instance/service/ApplicationService.sol +355 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +443 -0
  241. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  242. package/contracts/instance/service/ClaimService.sol +239 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +374 -31
  245. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  246. package/contracts/instance/service/IApplicationService.sol +78 -0
  247. package/contracts/instance/service/IBundleService.sol +102 -0
  248. package/contracts/instance/service/IClaimService.sol +92 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +139 -0
  251. package/contracts/instance/service/IPoolService.sol +82 -17
  252. package/contracts/instance/service/IProductService.sol +6 -73
  253. package/contracts/instance/service/PolicyService.sol +571 -0
  254. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  255. package/contracts/instance/service/PoolService.sol +248 -106
  256. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  257. package/contracts/instance/service/ProductService.sol +114 -452
  258. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  259. package/contracts/registry/ChainNft.sol +9 -1
  260. package/contracts/registry/IRegistry.sol +41 -19
  261. package/contracts/registry/IRegistryService.sol +31 -13
  262. package/contracts/registry/ITransferInterceptor.sol +1 -0
  263. package/contracts/registry/Registry.sol +245 -222
  264. package/contracts/registry/RegistryAccessManager.sol +216 -0
  265. package/contracts/registry/RegistryService.sol +97 -173
  266. package/contracts/registry/RegistryServiceManager.sol +21 -39
  267. package/contracts/registry/ReleaseManager.sol +324 -0
  268. package/contracts/registry/TokenRegistry.sol +22 -17
  269. package/contracts/shared/ERC165.sol +14 -12
  270. package/contracts/shared/INftOwnable.sol +11 -10
  271. package/contracts/shared/IPolicyHolder.sol +26 -0
  272. package/contracts/shared/IRegisterable.sol +4 -6
  273. package/contracts/shared/IRegistryLinked.sol +12 -0
  274. package/contracts/shared/IService.sol +5 -4
  275. package/contracts/shared/IVersionable.sol +4 -47
  276. package/contracts/shared/NftOwnable.sol +66 -80
  277. package/contracts/shared/PolicyHolder.sol +81 -0
  278. package/contracts/shared/ProxyManager.sol +100 -25
  279. package/contracts/shared/Registerable.sol +16 -32
  280. package/contracts/shared/RegistryLinked.sol +48 -0
  281. package/contracts/shared/Service.sol +41 -24
  282. package/contracts/shared/TokenHandler.sol +11 -5
  283. package/contracts/shared/Versionable.sol +4 -92
  284. package/contracts/test/TestRegisterable.sol +1 -1
  285. package/contracts/test/TestService.sol +4 -3
  286. package/contracts/types/Amount.sol +70 -0
  287. package/contracts/types/Blocknumber.sol +1 -0
  288. package/contracts/types/ClaimId.sol +75 -0
  289. package/contracts/types/DistributorType.sol +2 -2
  290. package/contracts/types/Fee.sol +13 -5
  291. package/contracts/types/NftId.sol +8 -0
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/ObjectType.sol +11 -6
  294. package/contracts/types/PayoutId.sol +82 -0
  295. package/contracts/types/Referral.sol +4 -0
  296. package/contracts/types/RoleId.sol +26 -19
  297. package/contracts/types/Seconds.sol +54 -0
  298. package/contracts/types/StateId.sol +7 -2
  299. package/contracts/types/Timestamp.sol +18 -13
  300. package/contracts/types/UFixed.sol +1 -0
  301. package/contracts/types/Version.sol +1 -0
  302. package/package.json +3 -3
  303. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  304. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  305. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  306. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  311. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  313. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  315. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  317. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  319. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  321. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  323. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  327. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  329. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  332. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  336. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  338. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  340. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  342. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  344. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  346. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  347. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  348. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  349. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  350. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  351. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  352. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  353. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  354. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  356. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  357. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  358. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  359. package/contracts/components/BaseComponent.sol +0 -91
  360. package/contracts/components/IBaseComponent.sol +0 -25
  361. package/contracts/experiment/cloning/Cloner.sol +0 -47
  362. package/contracts/experiment/errors/Require.sol +0 -38
  363. package/contracts/experiment/errors/Revert.sol +0 -44
  364. package/contracts/experiment/inheritance/A.sol +0 -53
  365. package/contracts/experiment/inheritance/B.sol +0 -28
  366. package/contracts/experiment/inheritance/C.sol +0 -34
  367. package/contracts/experiment/inheritance/IA.sol +0 -13
  368. package/contracts/experiment/inheritance/IB.sol +0 -10
  369. package/contracts/experiment/inheritance/IC.sol +0 -12
  370. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  371. package/contracts/experiment/statemachine/ISM.sol +0 -25
  372. package/contracts/experiment/statemachine/SM.sol +0 -57
  373. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  374. package/contracts/experiment/types/TypeA.sol +0 -47
  375. package/contracts/experiment/types/TypeB.sol +0 -29
  376. package/contracts/instance/AccessManagedSimple.sol +0 -115
  377. package/contracts/instance/AccessManagerSimple.sol +0 -692
  378. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  379. package/contracts/instance/base/ComponentServiceBase.sol +0 -124
  380. package/contracts/instance/base/IInstanceBase.sol +0 -23
  381. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  382. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  383. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,40 +2,48 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
- import {IRegistryService} from "../../registry/IRegistryService.sol";
6
5
  import {IInstance} from "../../instance/IInstance.sol";
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 {ITreasury} from "../../instance/module/ITreasury.sol";
9
+ import {IPolicy} from "../module/IPolicy.sol";
10
10
 
11
- import {NftId, NftIdLib} from "../../types/NftId.sol";
12
- import {Fee} from "../../types/Fee.sol";
13
- import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
11
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
12
+ import {Fee, FeeLib} from "../../types/Fee.sol";
13
+ import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
14
14
  import {KEEP_STATE} from "../../types/StateId.sol";
15
- import {DISTRIBUTION} from "../../types/ObjectType.sol";
15
+ import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
16
16
  import {Version, VersionLib} from "../../types/Version.sol";
17
+ import {RoleId} from "../../types/RoleId.sol";
17
18
 
18
19
  import {IVersionable} from "../../shared/IVersionable.sol";
19
20
  import {Versionable} from "../../shared/Versionable.sol";
20
21
 
21
22
  import {IService} from "../../shared/IService.sol";
22
23
  import {Service} from "../../shared/Service.sol";
23
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
24
- import {IDistributionService} from "./IDistributionService.sol";
25
- import {Distribution} from "../../components/Distribution.sol";
24
+ import {ComponentService} from "../base/ComponentService.sol";
26
25
  import {InstanceService} from "../InstanceService.sol";
27
- import {Instance} from "../Instance.sol";
28
- import {INftOwnable} from "../../shared/INftOwnable.sol";
26
+ import {IComponent} from "../../components/IComponent.sol";
27
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
28
+ import {IDistributionService} from "./IDistributionService.sol";
29
+
30
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
31
+ import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
32
+ import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
33
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
34
+ import {Key32} from "../../types/Key32.sol";
35
+ import {IDistribution} from "../module/IDistribution.sol";
29
36
 
30
- string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
31
37
 
32
38
  contract DistributionService is
33
- ComponentServiceBase,
39
+ ComponentService,
34
40
  IDistributionService
35
41
  {
36
42
  using NftIdLib for NftId;
37
-
38
- string public constant NAME = "DistributionService";
43
+ using TimestampLib for Timestamp;
44
+ using UFixedLib for UFixed;
45
+ using FeeLib for Fee;
46
+ using ReferralLib for ReferralId;
39
47
 
40
48
  address internal _registryAddress;
41
49
 
@@ -47,42 +55,377 @@ contract DistributionService is
47
55
  initializer
48
56
  virtual override
49
57
  {
50
- address initialOwner = address(0);
51
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
58
+ address initialOwner;
59
+ address registryAddress;
60
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
52
61
  // TODO while DistributionService is not deployed in DistributionServiceManager constructor
53
62
  // owner is DistributionServiceManager deployer
54
- _initializeService(_registryAddress, owner);
63
+ initializeService(registryAddress, address(0), owner);
64
+ registerInterface(type(IDistributionService).interfaceId);
65
+ }
55
66
 
56
- _registerInterface(type(IService).interfaceId);
57
- _registerInterface(type(IDistributionService).interfaceId);
67
+ function getDomain() public pure override returns(ObjectType) {
68
+ return DISTRIBUTION();
58
69
  }
59
70
 
71
+ function register(address distributionAddress)
72
+ external
73
+ returns(NftId distributionNftId)
74
+ {
75
+ (
76
+ IComponent component,
77
+ address owner,
78
+ IInstance instance,
79
+ NftId instanceNftId
80
+ ) = _checkComponentForRegistration(
81
+ distributionAddress,
82
+ DISTRIBUTION(),
83
+ DISTRIBUTION_OWNER_ROLE());
60
84
 
61
- function getName() public pure override(IService, Service) returns(string memory name) {
62
- return NAME;
63
- }
85
+ IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
86
+ IDistributionComponent distribution = IDistributionComponent(distributionAddress);
87
+ distribution.linkToRegisteredNftId();
88
+ distributionNftId = distributionInfo.nftId;
64
89
 
65
- function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
66
- ISetup.DistributionSetupInfo memory initialSetup = abi.decode(
67
- initialObjData,
68
- (ISetup.DistributionSetupInfo)
69
- );
70
- instance.createDistributionSetup(componentNftId, initialSetup);
90
+ instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
91
+ // TODO move to distribution?
92
+ bytes4[][] memory selectors = new bytes4[][](2);
93
+ selectors[0] = new bytes4[](1);
94
+ selectors[1] = new bytes4[](2);
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);
71
109
  }
72
110
 
73
111
  function setFees(
112
+ Fee memory minDistributionOwnerFee,
74
113
  Fee memory distributionFee
75
114
  )
76
115
  external
77
116
  override
78
117
  {
79
- (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());
80
123
  InstanceReader instanceReader = instance.getInstanceReader();
81
- NftId distributionNftId = info.nftId;
82
124
 
83
125
  ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
126
+ distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
84
127
  distSetupInfo.distributionFee = distributionFee;
85
128
 
86
129
  instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
87
130
  }
131
+
132
+ function createDistributorType(
133
+ string memory name,
134
+ UFixed minDiscountPercentage,
135
+ UFixed maxDiscountPercentage,
136
+ UFixed commissionPercentage,
137
+ uint32 maxReferralCount,
138
+ uint32 maxReferralLifetime,
139
+ bool allowSelfReferrals,
140
+ bool allowRenewals,
141
+ bytes memory data
142
+ )
143
+ external
144
+ returns (DistributorType distributorType)
145
+ {
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
+ }
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);
170
+ }
171
+
172
+ function createDistributor(
173
+ address distributor,
174
+ DistributorType distributorType,
175
+ bytes memory data
176
+ ) external returns (NftId distributorNftId)
177
+ {
178
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
179
+
180
+ distributorNftId = getRegistryService().registerDistributor(
181
+ IRegistry.ObjectInfo(
182
+ zeroNftId(),
183
+ distributionNftId,
184
+ DISTRIBUTOR(),
185
+ true, // intercepting property for bundles is defined on pool
186
+ address(0),
187
+ distributor,
188
+ ""
189
+ ));
190
+
191
+ IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
192
+ distributorType,
193
+ true, // active
194
+ data,
195
+ 0,
196
+ 0);
197
+
198
+ instance.createDistributor(distributorNftId, info);
199
+ }
200
+
201
+ function updateDistributorType(
202
+ NftId distributorNftId,
203
+ DistributorType distributorType,
204
+ bytes memory data
205
+ ) external virtual
206
+ {
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());
213
+ }
214
+
215
+
216
+ function createReferral(
217
+ NftId distributorNftId,
218
+ string memory code,
219
+ UFixed discountPercentage,
220
+ uint32 maxReferrals,
221
+ Timestamp expiryAt,
222
+ bytes memory data
223
+ )
224
+ external
225
+ virtual
226
+ returns (ReferralId referralId)
227
+ {
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
+ }
254
+
255
+ referralId = ReferralLib.toReferralId(distributionNftId, code);
256
+ IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
257
+ distributorNftId,
258
+ code,
259
+ discountPercentage,
260
+ maxReferrals,
261
+ 0, // used referrals
262
+ expiryAt,
263
+ data
264
+ );
265
+
266
+ instance.createReferral(referralId, info);
267
+ return referralId;
268
+ }
269
+
270
+ function processSale(
271
+ NftId distributionNftId,
272
+ ReferralId referralId,
273
+ IPolicy.Premium memory premium,
274
+ uint256 transferredDistributionFeeAmount
275
+ )
276
+ external
277
+ virtual
278
+ {
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
+ }
315
+ }
316
+
317
+ function calculateFeeAmount(
318
+ NftId distributionNftId,
319
+ ReferralId referralId,
320
+ IPolicy.Premium memory premium
321
+ )
322
+ external
323
+ virtual
324
+ view
325
+ returns (IPolicy.Premium memory finalPremium)
326
+ {
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;
397
+ }
398
+
399
+ function _getAndVerifyCallingDistribution()
400
+ internal
401
+ view
402
+ returns(
403
+ NftId distributionNftId,
404
+ IInstance instance
405
+ )
406
+ {
407
+ distributionNftId = getRegistry().getNftId(msg.sender);
408
+ if (distributionNftId.eqz()) {
409
+ revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
410
+ }
411
+
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);
419
+ }
420
+
421
+
422
+ function _getInstanceForDistribution(NftId distributionNftId)
423
+ internal
424
+ view
425
+ returns(IInstance instance)
426
+ {
427
+ NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
428
+ address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
429
+ return IInstance(instanceAddress);
430
+ }
88
431
  }
@@ -6,7 +6,7 @@ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
6
  import {DistributionService} from "./DistributionService.sol";
7
7
  import {Registry} from "../../registry/Registry.sol";
8
8
  import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
10
10
 
11
11
  contract DistributionServiceManager is ProxyManager {
12
12
 
@@ -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));
@@ -25,11 +25,11 @@ contract DistributionServiceManager is ProxyManager {
25
25
  data);
26
26
 
27
27
  _distributionService = DistributionService(address(versionable));
28
-
29
- Registry registry = Registry(registryAddress);
30
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
- RegistryService registryService = RegistryService(registryServiceAddress);
32
- // TODO this must have a role or own nft to register service
28
+
29
+ // TODO `thi` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
33
  //registryService.registerService(_distributionService);
34
34
 
35
35
  // TODO no nft to link yet
@@ -37,9 +37,6 @@ contract DistributionServiceManager is ProxyManager {
37
37
  //_linkToNftOwnable(
38
38
  // address(registryAddress),
39
39
  // address(_distributionService));
40
-
41
- // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
43
40
  }
44
41
 
45
42
  //--- view functions ----------------------------------------------------//
@@ -0,0 +1,78 @@
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 {NftId} from "../../types/NftId.sol";
8
+ import {ObjectType} from "../../types/ObjectType.sol";
9
+ import {ReferralId} from "../../types/Referral.sol";
10
+ import {RiskId} from "../../types/RiskId.sol";
11
+ import {Seconds} from "../../types/Seconds.sol";
12
+
13
+ /// @dev gif service responsible for creating applications
14
+ /// only product components may call transaction functions
15
+ interface IApplicationService is IService {
16
+
17
+ error ErrorApplicationServiceNotProduct(NftId callerNftId, ObjectType callerType);
18
+ error ErrorApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
19
+
20
+ /// @dev creates a new application based on the specified attributes
21
+ /// may only be called by a product component
22
+ function create(
23
+ address applicationOwner,
24
+ RiskId riskId,
25
+ uint256 sumInsuredAmount,
26
+ Seconds lifetime,
27
+ NftId bundleNftId,
28
+ ReferralId referralId,
29
+ bytes memory applicationData
30
+ ) external returns (NftId applicationNftId);
31
+
32
+ /// @dev updates application attributes
33
+ /// may only be called while the application is in applied state
34
+ /// may only be called by the referenced product related to applicationNftId
35
+ function adjust(
36
+ NftId applicationNftId,
37
+ RiskId riskId,
38
+ NftId bundleNftId,
39
+ ReferralId referralId,
40
+ uint256 sumInsuredAmount,
41
+ uint256 lifetime,
42
+ bytes memory applicationData
43
+ ) external;
44
+
45
+ /// @dev creates a new application that extends the provided policy
46
+ /// lifetime will seamlessly extend referenced policy, for closed policies
47
+ /// lifetime will start at underwriting time
48
+ /// product will need to limit the time window for renewal as underwriting
49
+ /// will lock the collateral at underwriting time which might be earlier than activation time
50
+ /// policyNftId needs to refer to an underwritten (or active or closed) policy
51
+ /// may only be called by the referenced product related to policyNftId
52
+ function renew(
53
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
54
+ NftId bundleNftId // will likely need a newer bundle for underwriting
55
+ ) external returns (NftId applicationNftId);
56
+
57
+ /// @dev revokes the application represented by {policyNftId}
58
+ /// an application can only be revoked in applied state
59
+ /// only the application holder may revoke an application
60
+ function revoke(NftId policyNftId) external;
61
+
62
+ /// @dev calculates the premium amount for the specified attributes
63
+ /// also returns the various fee components involved with creating a policy
64
+ function calculatePremium(
65
+ NftId productNftId,
66
+ RiskId riskId,
67
+ uint256 sumInsuredAmount,
68
+ Seconds lifetime,
69
+ bytes memory applicationData,
70
+ NftId bundleNftId,
71
+ ReferralId referralId
72
+ )
73
+ external
74
+ view
75
+ returns (
76
+ IPolicy.Premium memory premium
77
+ );
78
+ }